def setup_simulation_mover(self): """Set up the MODFLOW-6 water mover package at the simulation level. Automate set-up of the mover between SFR packages in LGR parent and inset models. todo: automate set-up of mover between SFR and lakes (within a model). Other uses of the water mover need to be configured manually using flopy. """ package = 'mvr' print('\nSetting up the simulation water mover package...') t0 = time.time() perioddata_dfs = [] if self.get_package('sfr') is not None: if self.inset is not None: for inset_name, inset in self.inset.items(): if inset.get_package('sfr'): inset_perioddata = get_mover_sfr_package_input( self, inset) perioddata_dfs.append(inset_perioddata) if len(perioddata_dfs) > 0: perioddata = pd.concat(perioddata_dfs) if len(perioddata) > 0: kwargs = flatten(self.cfg[package]) # modelnames (boolean) keyword to indicate that all package names will # be preceded by the model name for the package. Model names are # required when the Mover Package is used with a GWF-GWF Exchange. The # MODELNAME keyword should not be used for a Mover Package that is for # a single GWF Model. # this argument will need to be adapted for implementing a mover package within a model # (between lakes and sfr) kwargs['modelnames'] = True kwargs['maxmvr'] = len( perioddata ) # assumes that input for period 0 applies to all periods packages = set( list(zip(perioddata.mname1, perioddata.pname1)) + list(zip(perioddata.mname2, perioddata.pname2))) kwargs['maxpackages'] = len(packages) kwargs['packages'] = list(packages) kwargs['perioddata'] = { 0: perioddata.values.tolist() } # assumes that input for period 0 applies to all periods kwargs = get_input_arguments(kwargs, mf6.ModflowGwfmvr) mvr = mf6.ModflowMvr(self.simulation, **kwargs) print("finished in {:.2f}s\n".format(time.time() - t0)) return mvr else: print("no packages with mover information\n")
def setup_ims(self): """ Sets up the IMS package. Parameters ---------- Notes ----- """ package = 'ims' print('\nSetting up {} package...'.format(package.upper())) t0 = time.time() kwargs = flatten(self.cfg[package]) kwargs = get_input_arguments(kwargs, mf6.ModflowIms) ims = mf6.ModflowIms(self.simulation, **kwargs) #self.simulation.register_ims_package(ims, [self.name]) print("finished in {:.2f}s\n".format(time.time() - t0)) return ims
def test_flatten(multilevel_dict): d = flatten(multilevel_dict) assert d == dict(zip(['a', 'b', 'c', 'd'], range(1, 5)))