Ejemplo n.º 1
0
    def setup_wel(self):
        """
        Sets up the WEL package.

        Parameters
        ----------

        Notes
        -----

        """
        package = 'wel'
        print('\nSetting up {} package...'.format(package.upper()))
        t0 = time.time()

        # option to write stress_period_data to external files
        external_files = self.cfg[package]['external_files']

        # munge well package input
        # returns dataframe with information to populate stress_period_data
        df = setup_wel_data(self, for_external_files=external_files)
        if len(df) == 0:
            print('No wells in active model area')
            return

        # set up stress_period_data
        if external_files:
            # get the file path (allowing for different external file locations, specified name format, etc.)
            filename_format = package + '_{:03d}.dat'  # stress period suffix
            filepaths = self.setup_external_filepaths(package, 'stress_period_data',
                                                      filename_format=filename_format,
                                                      file_numbers=sorted(df.per.unique().tolist()))
        spd = {}
        period_groups = df.groupby('per')
        for kper in range(self.nper):
            if kper in period_groups.groups:
                group = period_groups.get_group(kper)
                group.drop('per', axis=1, inplace=True)
                if external_files:
                    group.to_csv(filepaths[kper]['filename'], index=False, sep=' ')
                    # make a copy for the intermediate data folder, for consistency with mf-2005
                    shutil.copy(filepaths[kper]['filename'], self.cfg['intermediate_data']['output_folder'])
                else:
                    kspd = mf6.ModflowGwfwel.stress_period_data.empty(self,
                                                                      len(group),
                                                                      boundnames=True)[0]
                    kspd['cellid'] = list(zip(group.k, group.i, group.j))
                    kspd['q'] = group['q']
                    kspd['boundname'] = group['boundname']
                    spd[kper] = kspd
            else:
                pass  # spd[kper] = None
        kwargs = self.cfg[package].copy()
        kwargs.update(self.cfg[package]['options'])
        if not external_files:
            kwargs['stress_period_data'] = spd
        kwargs = get_input_arguments(kwargs, mf6.ModflowGwfwel)
        wel = mf6.ModflowGwfwel(self, **kwargs)
        print("finished in {:.2f}s\n".format(time.time() - t0))
        return wel
Ejemplo n.º 2
0
def test_minimum_well_layer_thickness(shellmound_model_with_dis, all_layers):

    m = shellmound_model_with_dis
    minthickness = 2
    m.cfg['wel']['source_data']['csvfiles']['vertical_flux_distribution']\
        ['minimum_layer_thickness'] = minthickness
    df = setup_wel_data(m, for_external_files=False)
    assert np.all(
        (-np.diff(all_layers, axis=0))[df.k, df.i, df.j] > minthickness)