Source code for flopy.modflow.mfpval

"""
mfpval module.  Contains the ModflowPval class. Note that the user can access
the ModflowPval class as `flopy.modflow.ModflowPval`.

Additional information for this MODFLOW package can be found at the `Online
MODFLOW Guide
<https://water.usgs.gov/ogw/modflow-nwt/MODFLOW-NWT-Guide/parameter_value_file.html>`_.

"""

from ..pakbase import Package


[docs]class ModflowPval(Package): """ MODFLOW Mult Package Class. Parameters ---------- model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. pval_dict : dict Dictionary with pval data for the model. pval_dict is typically instantiated using load method. extension : string Filename extension (default is 'pval') unitnumber : int File unit number (default is None). filenames : str or list of str Filenames to use for the package. If filenames=None the package name will be created using the model name and package extension. If a single string is passed the package will be set to the string. Default is None. Attributes ---------- Methods ------- See Also -------- Notes ----- Parameters are supported in Flopy only when reading in existing models. Parameter values are converted to native values in Flopy and the connection to "parameters" is thus nonexistent. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> pval_dict = flopy.modflow.ModflowZon(m, pval_dict=pval_dict) """ def __init__( self, model, pval_dict=None, extension="pval", unitnumber=None, filenames=None, ): # set default unit number of one is not specified if unitnumber is None: unitnumber = ModflowPval._defaultunit() # call base package constructor super().__init__( model, extension=extension, name=self._ftype(), unit_number=unitnumber, filenames=self._prepare_filenames(filenames), ) self._generate_heading() self.url = "parameter_value_file.html" self.npval = 0 if pval_dict is not None: self.pval = len(pval_dict) self.pval_dict = pval_dict self.parent.add_package(self)
[docs] def write_file(self): """ Write the package file. Returns ------- None Notes ----- Not implemented because parameters are only supported on load """ pass
def __getitem__(self, item): """ overload __getitem__ to return a value from the pval_dict """ if item in list(self.pval_dict.keys()): return self.pval_dict[item] else: return None
[docs] @classmethod def load(cls, f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- pval : ModflowPval dict Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> mlt = flopy.modflow.ModflowPval.load('test.pval', m) """ if model.verbose: print("loading pval package file...") openfile = not hasattr(f, "read") if openfile: filename = f f = open(filename, "r") else: filename = f.name # dataset 0 -- header while True: line = f.readline() if line[0] != "#": break # dataset 1 t = line.strip().split() npval = int(t[0]) if model.verbose: print(f' reading parameter values from "{filename}"') # read PVAL data pval_dict = dict() for n in range(npval): line = f.readline() t = line.strip().split() if len(t[0]) > 10: pvalnam = t[0][0:10].lower() else: pvalnam = t[0].lower() pval_dict[pvalnam] = float(t[1]) if openfile: f.close() # set package unit number unitnumber = None filenames = [None] if ext_unit_dict is not None: unitnumber, filenames[0] = model.get_ext_dict_attr( ext_unit_dict, filetype=ModflowPval._ftype() ) return cls( model, pval_dict=pval_dict, unitnumber=unitnumber, filenames=filenames, )
@staticmethod def _ftype(): return "PVAL" @staticmethod def _defaultunit(): return 1005