def main(name_file, config_file, action, output=None, verbose=None): if verbose is True: logger.level = logging.DEBUG else: verbose = False logger.level = logging.INFO # Try to load files for immediate warnings back to the user try: with open(name_file) as f: f.read() except IOError: logger.info("Error opening namefile: {!s}".format(name_file)) return try: with open(config_file) as f: f.read() except IOError: logger.info("Error opening configuration file: {!s}".format(config_file)) return if action not in ['plot', 'netcdf']: logger.error("The 'action' paramter must be 'plot' or 'netcdf'") return mo = ModflowOutput(name_file, config_file=config_file) if action == "plot": mo.to_plot() else: action == "netcdf" mo.to_netcdf(output) return 0
def __init__(self, namfilename, config_file=None, version=None, exe_name=None, verbose=None, model_ws=None): if exe_name is None: exe_name = 'mf2005.exe' if version is None: version = 'mf2k' if verbose is not True: verbose = False with LoggingTimer("Loaded input and output files", logger.info): self.mf = Modflow.load(namfilename, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws) assert self.mf is not None # DIS (required) try: self.dis = self.mf.get_package('DIS') assert self.dis is not None except AssertionError: raise ValueError("DIS file could not be found. It is required.") # BAS try: self.bas = self.mf.get_package('BAS6') assert self.bas is not None except AssertionError: logger.warning("BAS file could not be found.") # LPF try: self.lpf = self.mf.get_package('LPF') assert self.bas is not None except AssertionError: logger.warning("LPF file could not be found.") # Now process with LoggingTimer("Parsing config file", logger.info): self.parse_config_file(config_file) self.get_coordinates() self.fills = self.get_fill_values() self.fills.append(-9999) # This was needed for the carolina model logger.info("Fill values set to: {!s}".format(self.fills))
def main(name_file, config_file, action, output=None, verbose=None): if verbose is True: logger.level = logging.DEBUG else: verbose = False logger.level = logging.INFO # Try to load files for immediate warnings back to the user try: with open(name_file) as f: f.read() except IOError: logger.info("Error opening namefile: {!s}".format(name_file)) return try: with open(config_file) as f: f.read() except IOError: logger.info( "Error opening configuration file: {!s}".format(config_file)) return if action not in ['plot', 'netcdf']: logger.error("The 'action' paramter must be 'plot' or 'netcdf'") return mo = ModflowOutput(name_file, config_file=config_file) if action == "plot": mo.to_plot() else: action == "netcdf" mo.to_netcdf(output) return 0
def parse_config_file(self, config_file): if config_file is None: raise ValueError("No config file provided") config = ConfigParser.SafeConfigParser() try: config.read(config_file) except ConfigParser.ParsingError as e: raise ValueError("Bad configuration file. Please check the contents. {!s}.".format(e.message)) try: self.grid_x = config.getfloat('space', 'origin_x') self.grid_y = config.getfloat('space', 'origin_y') self.grid_rotation = config.getfloat('space', 'rotation') # CRS self.config_crs = config.getint('space', 'crs') try: self.grid_crs = Proj(init='epsg:{0!s}'.format(self.config_crs)) except RuntimeError: raise ValueError("Could not understand EPSG code '{!s}' from config file.".format(self.config_crs)) # Units grid_units = config.get('space', 'units') if grid_units is None: logger.info("Defaulting to 'meters' as the grid units") grid_units = "meters" elif grid_units[0] == "m": grid_units = "meters" elif grid_units[0] == "f": grid_units = "feet" else: raise ValueError("Only units of 'meters' or 'feet' are allowed in the config file") self.grid_units = grid_units self.precision = config.get('general', 'precision') # Unit of time self.time_units = config.get('time', 'units') # Base unit of time try: base_date = date_parse(config.get('time', 'base')) except ValueError: raise ValueError("Could not parse the base date '{!s}'.".format(base_date)) else: if base_date.tzinfo is None: logger.warning("No timezone information could be extracted from the base date. Assuming UTC.") base_date = base_date.replace(tzinfo=pytz.utc) self.base_date = base_date.astimezone(pytz.utc) except (ConfigParser.NoOptionError, ConfigParser.NoSectionError) as e: raise ValueError('Configuration file is missing a required section: {0}'.format(e.message)) # Output files (optional) try: self.cbud_file = os.path.join(os.path.dirname(config_file), config.get('output', 'cbud')) self.head_file = os.path.join(os.path.dirname(config_file), config.get('output', 'head')) except (ConfigParser.NoOptionError, ConfigParser.NoSectionError) as e: self.cbud_file = None self.head_file = None # Global attributes self.global_attributes = dict() if config.has_section('metadata'): self.global_attributes = { k : v for k, v in config.items('metadata') }