def create_lgr_models(self): for k, v in self.cfg['setup_grid']['lgr'].items(): # load the config file for lgr inset model inset_cfg = load_cfg(v['filename'], default_file='/mf6_defaults.yml') # if lgr inset has already been created if inset_cfg['model']['modelname'] in self.simulation._models: return inset_cfg['model']['simulation'] = self.simulation if 'ims' in inset_cfg['model']['packages']: inset_cfg['model']['packages'].remove('ims') # set parent configuation dictionary here # (even though parent model is explicitly set below) # so that the LGR grid is snapped to the parent grid inset_cfg['parent'] = { 'namefile': self.namefile, 'model_ws': self.model_ws, 'version': 'mf6', 'hiKlakes_value': self.cfg['model']['hiKlakes_value'], 'default_source_data': True, 'length_units': self.length_units, 'time_units': self.time_units } inset_cfg = MF6model._parse_model_kwargs(inset_cfg) kwargs = get_input_arguments(inset_cfg['model'], mf6.ModflowGwf, exclude='packages') kwargs['parent'] = self # otherwise will try to load parent model inset_model = MF6model(cfg=inset_cfg, lgr=True, **kwargs) inset_model._load = self._load # whether model is being made or loaded from existing files inset_model.setup_grid() del inset_model.cfg['ims'] inset_model.cfg['tdis'] = self.cfg['tdis'] if self.inset is None: self.inset = {} self.lgr = {} self.inset[inset_model.name] = inset_model #self.inset[inset_model.name]._is_lgr = True # create idomain indicating area of parent grid that is LGR lgr_idomain = make_lgr_idomain( self.modelgrid, self.inset[inset_model.name].modelgrid) ncpp = int(self.modelgrid.delr[0] / self.inset[inset_model.name].modelgrid.delr[0]) ncppl = v.get('layer_refinement', 1) self.lgr[inset_model.name] = Lgr(self.nlay, self.nrow, self.ncol, self.dis.delr.array, self.dis.delc.array, self.dis.top.array, self.dis.botm.array, lgr_idomain, ncpp, ncppl) inset_model._perioddata = self.perioddata self._set_idomain()
def test_make_lgr_idomain(get_pleasant_lgr_parent_with_grid): m = get_pleasant_lgr_parent_with_grid inset_model = m.inset['plsnt_lgr_inset'] idomain = make_lgr_idomain(m.modelgrid, inset_model.modelgrid) assert idomain.shape == m.modelgrid.shape l, b, r, t = inset_model.modelgrid.bounds isinset = (m.modelgrid.xcellcenters > l) & \ (m.modelgrid.xcellcenters < r) & \ (m.modelgrid.ycellcenters > b) & \ (m.modelgrid.ycellcenters < t) assert idomain[:, isinset].sum() == 0 assert np.all(idomain[:, ~isinset] == 1)
def test_lgr_grid_setup(get_pleasant_lgr_parent_with_grid): m = get_pleasant_lgr_parent_with_grid inset_model = m.inset['plsnt_lgr_inset'] assert isinstance(inset_model, MF6model) assert inset_model.parent is m assert isinstance(m.lgr[inset_model.name], flopy.utils.lgrutil.Lgr) if os.environ.get('CI', 'false').lower() != 'true': m.modelgrid.write_shapefile('../../../modflow-setup-dirty/pleasant_mf6_postproc/shps/pleasant_lgr_parent_grid.shp') inset_model.modelgrid.write_shapefile('../../../modflow-setup-dirty/pleasant_mf6_postproc/shps/pleasant_lgr_inset_grid.shp') # verify that lgr area was removed from parent idomain lgr_idomain = make_lgr_idomain(m.modelgrid, inset_model.modelgrid) idomain = m.idomain assert idomain[lgr_idomain == 0].sum() == 0