From 0bc91e4c2873ee2783968fd28b98c67c883457c0 Mon Sep 17 00:00:00 2001 From: jdhughes-usgs Date: Wed, 21 Oct 2020 09:15:15 -0400 Subject: [PATCH] feat(mf6): Add MODFLOW 6 GWT dfn and classes (#1006) --- flopy/mf6/data/dfn/exg-gwfgwt.dfn | 3 + flopy/mf6/data/dfn/gwf-buy.dfn | 145 +++++++ flopy/mf6/data/dfn/gwf-dis.dfn | 2 +- flopy/mf6/data/dfn/gwf-disu.dfn | 2 +- flopy/mf6/data/dfn/gwf-disv.dfn | 2 +- flopy/mf6/data/dfn/gwf-maw.dfn | 20 +- flopy/mf6/data/dfn/gwf-sfr.dfn | 2 +- flopy/mf6/data/dfn/gwt-adv.dfn | 11 + flopy/mf6/data/dfn/gwt-cnc.dfn | 206 +++++++++ flopy/mf6/data/dfn/gwt-dis.dfn | 122 ++++++ flopy/mf6/data/dfn/gwt-disu.dfn | 251 +++++++++++ flopy/mf6/data/dfn/gwt-disv.dfn | 202 +++++++++ flopy/mf6/data/dfn/gwt-dsp.dfn | 81 ++++ flopy/mf6/data/dfn/gwt-fmi.dfn | 50 +++ flopy/mf6/data/dfn/gwt-ic.dfn | 11 + flopy/mf6/data/dfn/gwt-ist.dfn | 221 ++++++++++ flopy/mf6/data/dfn/gwt-lkt.dfn | 426 +++++++++++++++++++ flopy/mf6/data/dfn/gwt-mst.dfn | 85 ++++ flopy/mf6/data/dfn/gwt-mvt.dfn | 71 ++++ flopy/mf6/data/dfn/gwt-mwt.dfn | 393 ++++++++++++++++++ flopy/mf6/data/dfn/gwt-nam.dfn | 73 ++++ flopy/mf6/data/dfn/gwt-oc.dfn | 280 +++++++++++++ flopy/mf6/data/dfn/gwt-sft.dfn | 426 +++++++++++++++++++ flopy/mf6/data/dfn/gwt-src.dfn | 205 +++++++++ flopy/mf6/data/dfn/gwt-ssm.dfn | 58 +++ flopy/mf6/data/dfn/gwt-uzt.dfn | 404 ++++++++++++++++++ flopy/mf6/data/dfn/sln-ims.dfn | 18 +- flopy/mf6/modflow/__init__.py | 22 + flopy/mf6/modflow/mfgwfbuy.py | 253 +++++++++++ flopy/mf6/modflow/mfgwfdis.py | 4 +- flopy/mf6/modflow/mfgwfdisu.py | 4 +- flopy/mf6/modflow/mfgwfdisv.py | 4 +- flopy/mf6/modflow/mfgwfgwt.py | 65 +++ flopy/mf6/modflow/mfgwfmaw.py | 66 +-- flopy/mf6/modflow/mfgwfsfr.py | 4 +- flopy/mf6/modflow/mfgwt.py | 130 ++++++ flopy/mf6/modflow/mfgwtadv.py | 62 +++ flopy/mf6/modflow/mfgwtcnc.py | 347 ++++++++++++++++ flopy/mf6/modflow/mfgwtdis.py | 234 +++++++++++ flopy/mf6/modflow/mfgwtdisu.py | 448 ++++++++++++++++++++ flopy/mf6/modflow/mfgwtdisv.py | 331 +++++++++++++++ flopy/mf6/modflow/mfgwtdsp.py | 175 ++++++++ flopy/mf6/modflow/mfgwtfmi.py | 114 +++++ flopy/mf6/modflow/mfgwtic.py | 71 ++++ flopy/mf6/modflow/mfgwtist.py | 361 ++++++++++++++++ flopy/mf6/modflow/mfgwtlkt.py | 669 ++++++++++++++++++++++++++++++ flopy/mf6/modflow/mfgwtmst.py | 201 +++++++++ flopy/mf6/modflow/mfgwtmvt.py | 142 +++++++ flopy/mf6/modflow/mfgwtmwt.py | 611 +++++++++++++++++++++++++++ flopy/mf6/modflow/mfgwtnam.py | 159 +++++++ flopy/mf6/modflow/mfgwtoc.py | 388 +++++++++++++++++ flopy/mf6/modflow/mfgwtsft.py | 666 +++++++++++++++++++++++++++++ flopy/mf6/modflow/mfgwtsrc.py | 349 ++++++++++++++++ flopy/mf6/modflow/mfgwtssm.py | 121 ++++++ flopy/mf6/modflow/mfgwtuzt.py | 631 ++++++++++++++++++++++++++++ flopy/mf6/modflow/mfims.py | 75 ++-- 56 files changed, 10391 insertions(+), 86 deletions(-) create mode 100644 flopy/mf6/data/dfn/exg-gwfgwt.dfn create mode 100644 flopy/mf6/data/dfn/gwf-buy.dfn create mode 100644 flopy/mf6/data/dfn/gwt-adv.dfn create mode 100644 flopy/mf6/data/dfn/gwt-cnc.dfn create mode 100644 flopy/mf6/data/dfn/gwt-dis.dfn create mode 100644 flopy/mf6/data/dfn/gwt-disu.dfn create mode 100644 flopy/mf6/data/dfn/gwt-disv.dfn create mode 100644 flopy/mf6/data/dfn/gwt-dsp.dfn create mode 100644 flopy/mf6/data/dfn/gwt-fmi.dfn create mode 100644 flopy/mf6/data/dfn/gwt-ic.dfn create mode 100644 flopy/mf6/data/dfn/gwt-ist.dfn create mode 100644 flopy/mf6/data/dfn/gwt-lkt.dfn create mode 100644 flopy/mf6/data/dfn/gwt-mst.dfn create mode 100644 flopy/mf6/data/dfn/gwt-mvt.dfn create mode 100644 flopy/mf6/data/dfn/gwt-mwt.dfn create mode 100644 flopy/mf6/data/dfn/gwt-nam.dfn create mode 100644 flopy/mf6/data/dfn/gwt-oc.dfn create mode 100644 flopy/mf6/data/dfn/gwt-sft.dfn create mode 100644 flopy/mf6/data/dfn/gwt-src.dfn create mode 100644 flopy/mf6/data/dfn/gwt-ssm.dfn create mode 100644 flopy/mf6/data/dfn/gwt-uzt.dfn create mode 100644 flopy/mf6/modflow/mfgwfbuy.py create mode 100644 flopy/mf6/modflow/mfgwfgwt.py create mode 100644 flopy/mf6/modflow/mfgwt.py create mode 100644 flopy/mf6/modflow/mfgwtadv.py create mode 100644 flopy/mf6/modflow/mfgwtcnc.py create mode 100644 flopy/mf6/modflow/mfgwtdis.py create mode 100644 flopy/mf6/modflow/mfgwtdisu.py create mode 100644 flopy/mf6/modflow/mfgwtdisv.py create mode 100644 flopy/mf6/modflow/mfgwtdsp.py create mode 100644 flopy/mf6/modflow/mfgwtfmi.py create mode 100644 flopy/mf6/modflow/mfgwtic.py create mode 100644 flopy/mf6/modflow/mfgwtist.py create mode 100644 flopy/mf6/modflow/mfgwtlkt.py create mode 100644 flopy/mf6/modflow/mfgwtmst.py create mode 100644 flopy/mf6/modflow/mfgwtmvt.py create mode 100644 flopy/mf6/modflow/mfgwtmwt.py create mode 100644 flopy/mf6/modflow/mfgwtnam.py create mode 100644 flopy/mf6/modflow/mfgwtoc.py create mode 100644 flopy/mf6/modflow/mfgwtsft.py create mode 100644 flopy/mf6/modflow/mfgwtsrc.py create mode 100644 flopy/mf6/modflow/mfgwtssm.py create mode 100644 flopy/mf6/modflow/mfgwtuzt.py diff --git a/flopy/mf6/data/dfn/exg-gwfgwt.dfn b/flopy/mf6/data/dfn/exg-gwfgwt.dfn new file mode 100644 index 0000000000..685852dd28 --- /dev/null +++ b/flopy/mf6/data/dfn/exg-gwfgwt.dfn @@ -0,0 +1,3 @@ +# --------------------- exg gwfgwt options --------------------- + + diff --git a/flopy/mf6/data/dfn/gwf-buy.dfn b/flopy/mf6/data/dfn/gwf-buy.dfn new file mode 100644 index 0000000000..13540b706b --- /dev/null +++ b/flopy/mf6/data/dfn/gwf-buy.dfn @@ -0,0 +1,145 @@ +# --------------------- gwf buy options --------------------- + +block options +name hhformulation_rhs +type keyword +reader urword +optional true +longname hh formulation on right-hand side +description use the variable-density hydraulic head formulation and add off-diagonal terms to the right-hand. This option will prevent the BUY Package from adding asymmetric terms to the flow matrix. + +block options +name denseref +type double +reader urword +optional true +longname reference density +description fluid reference density used in the equation of state. This value is set to 1000. if not specified as an option. +default_value 1000. + +block options +name density_filerecord +type record density fileout densityfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name density +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname density keyword +description keyword to specify that record corresponds to density. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name densityfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write density information. The density file has the same format as the head file. Density values will be written to the density file whenever heads are written to the binary head file. The settings for controlling head output are contained in the Output Control option. + +block options +name dev_efh_formulation +type keyword +reader urword +optional true +longname use equivalent freshwater head formulation +description use the variable-density equivalent freshwater head formulation instead of the hydraulic head head formulation. This dev option has only been implemented for confined aquifer conditions and should generally not be used. + + + +# --------------------- gwf buy dimensions --------------------- + +block dimensions +name nrhospecies +type integer +reader urword +optional false +longname number of species used in density equation of state +description number of species used in density equation of state. This value must be one or greater. The value must be one if concentrations are specified using the CONCENTRATION keyword in the PERIOD block below. + + +# --------------------- gwf buy packagedata --------------------- + +block packagedata +name packagedata +type recarray irhospec drhodc crhoref modelname auxspeciesname +shape (nrhospecies) +reader urword +longname +description + +block packagedata +name irhospec +type integer +shape +tagged false +in_record true +reader urword +longname species number for this entry +description integer value that defines the species number associated with the specified PACKAGEDATA data on the line. IRHOSPECIES must be greater than zero and less than or equal to NRHOSPECIES. Information must be specified for each of the NRHOSPECIES species or the program will terminate with an error. The program will also terminate with an error if information for a species is specified more than once. +numeric_index true + +block packagedata +name drhodc +type double precision +shape +tagged false +in_record true +reader urword +longname slope of the density-concentration line +description real value that defines the slope of the density-concentration line for this species used in the density equation of state. + +block packagedata +name crhoref +type double precision +shape +tagged false +in_record true +reader urword +longname reference concentration value +description real value that defines the reference concentration value used for this species in the density equation of state. + +block packagedata +name modelname +type string +in_record true +tagged false +shape +reader urword +longname modelname +description name of GWT model used to simulate a species that will be used in the density equation of state. This name will have no affect if the simulation does not include a GWT model that corresponds to this GWF model. + +block packagedata +name auxspeciesname +type string +in_record true +tagged false +shape +reader urword +longname modelname +description name of an auxiliary variable in a GWF stress package that will be used for this species to calculate a density value. If a density value is needed by the Buoyancy Package then it will use the concentration values in this AUXSPECIESNAME column in the density equation of state. For advanced stress packages (LAK, SFR, MAW, and UZF) that have an associated advanced transport package (LKT, SFT, MWT, and UZT), the FLOW\_PACKAGE\_AUXILIARY\_NAME option in the advanced transport package can be used to transfer simulated concentrations into the flow package auxiliary variable. In this manner, the Buoyancy Package can calculate density values for lakes, streams, multi-aquifer wells, and unsaturated zone flow cells using simulated concentrations. + diff --git a/flopy/mf6/data/dfn/gwf-dis.dfn b/flopy/mf6/data/dfn/gwf-dis.dfn index 2b71d836c4..aa3316f38e 100644 --- a/flopy/mf6/data/dfn/gwf-dis.dfn +++ b/flopy/mf6/data/dfn/gwf-dis.dfn @@ -117,6 +117,6 @@ reader readarray layered true optional true longname idomain existence array -description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. +description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1 or greater, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. diff --git a/flopy/mf6/data/dfn/gwf-disu.dfn b/flopy/mf6/data/dfn/gwf-disu.dfn index a4e45ceb8a..e576880cfc 100644 --- a/flopy/mf6/data/dfn/gwf-disu.dfn +++ b/flopy/mf6/data/dfn/gwf-disu.dfn @@ -100,7 +100,7 @@ reader readarray layered false optional true longname idomain existence array -description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1, the cell exists in the simulation. IDOMAIN values of -1 cannot be specified for the DISU Package. +description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1 or greater, the cell exists in the simulation. IDOMAIN values of -1 cannot be specified for the DISU Package. # --------------------- gwf disu connectiondata --------------------- diff --git a/flopy/mf6/data/dfn/gwf-disv.dfn b/flopy/mf6/data/dfn/gwf-disv.dfn index a602a81f50..b188e4c8fb 100644 --- a/flopy/mf6/data/dfn/gwf-disv.dfn +++ b/flopy/mf6/data/dfn/gwf-disv.dfn @@ -93,7 +93,7 @@ reader readarray layered true optional true longname idomain existence array -description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. +description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1 or greater, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. # --------------------- gwf disv vertices --------------------- diff --git a/flopy/mf6/data/dfn/gwf-maw.dfn b/flopy/mf6/data/dfn/gwf-maw.dfn index b09e445593..950e6a0cec 100644 --- a/flopy/mf6/data/dfn/gwf-maw.dfn +++ b/flopy/mf6/data/dfn/gwf-maw.dfn @@ -51,7 +51,7 @@ longname save well flows to budget file description REPLACE save_flows {'{#1}': 'multi-aquifer well'} block options -name stage_filerecord +name head_filerecord type record head fileout headfile shape reader urword @@ -68,7 +68,7 @@ in_record true reader urword tagged true optional false -longname stage keyword +longname head keyword description keyword to specify that record corresponds to head. block options @@ -81,7 +81,7 @@ reader urword tagged false optional false longname file keyword -description name of the binary output file to write stage information. +description name of the binary output file to write head information. block options name budget_filerecord @@ -292,7 +292,7 @@ tagged false in_record true reader urword longname well radius -description radius for the multi-aquifer well. +description radius for the multi-aquifer well. The program will terminate with an error if the radius is less than or equal to zero. block packagedata name bottom @@ -302,7 +302,7 @@ tagged false in_record true reader urword longname well bottom -description bottom elevation of the multi-aquifer well. The well bottom is reset to the cell bottom in the lowermost GWF cell connection in cases where the specified well bottom is above the bottom of this GWF cell. +description bottom elevation of the multi-aquifer well. If CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE, BOTTOM is set to the cell bottom in the lowermost GWF cell connection in cases where the specified well bottom is above the bottom of this GWF cell. If CONDEQN is MEAN, BOTTOM is set to the lowermost GWF cell connection screen bottom in cases where the specified well bottom is above this value. The bottom elevation defines the lowest well head that will be simulated when the NEWTON UNDER\_RELAXATION option is specified in the GWF model name file. The bottom elevation is also used to calculate volumetric storage in the well. block packagedata name strt @@ -312,7 +312,7 @@ tagged false in_record true reader urword longname starting head -description starting head for the multi-aquifer well. +description starting head for the multi-aquifer well. The program will terminate with an error if the starting head is less than the specified well bottom. block packagedata name condeqn @@ -407,7 +407,7 @@ tagged false in_record true reader urword longname screen top -description value that defines the top elevation of the screen for the multi-aquifer well connection. If the specified SCRN\_TOP is greater than the top of the GWF cell it is set equal to the top of the cell. SCRN\_TOP can be any value if CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE and SCRN\_TOP is set to the top of the cell. +description value that defines the top elevation of the screen for the multi-aquifer well connection. If CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE, SCRN\_TOP can be any value and is set to the top of the cell. If CONDEQN is MEAN, SCRN\_TOP is set to the multi-aquifer well connection cell top if the specified value is greater than the cell top. The program will terminate with an error if the screen top is less than the screen bottom. block connectiondata name scrn_bot @@ -417,7 +417,7 @@ tagged false in_record true reader urword longname screen bottom -description value that defines the bottom elevation of the screen for the multi-aquifer well connection. If the specified SCRN\_BOT is less than the bottom of the GWF cell it is set equal to the bottom of the cell. SCRN\_BOT can be any value if CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE and SCRN\_BOT is set to the bottom of the cell. +description value that defines the bottom elevation of the screen for the multi-aquifer well connection. If CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE, SCRN\_BOT can be any value is set to the bottom of the cell. If CONDEQN is MEAN, SCRN\_BOT is set to the multi-aquifer well connection cell bottom if the specified value is less than the cell bottom. The program will terminate with an error if the screen bottom is greater than the screen top. block connectiondata name hk_skin @@ -437,7 +437,7 @@ tagged false in_record true reader urword longname skin radius -description real value that defines the skin radius (filter pack radius) for the multi-aquifer well. RADIUS\_SKIN can be any value if CONDEQN is SPECIFIED or THIEM. Otherwise, RADIUS\_SKIN must be greater than RADIUS for the multi-aquifer well. +description real value that defines the skin radius (filter pack radius) for the multi-aquifer well. RADIUS\_SKIN can be any value if CONDEQN is SPECIFIED or THIEM. If CONDEQN is SKIN, CUMULATIVE, or MEAN, the program will terminate with an error if RADIUS\_SKIN is less than or equal to the RADIUS for the multi-aquifer well. # --------------------- gwf maw period --------------------- @@ -563,7 +563,7 @@ in_record true reader urword time_series true longname well head -description is the head in the multi-aquifer well. WELL\_HEAD is only applied to constant head (STATUS is CONSTANT) and inactive (STATUS is INACTIVE) multi-aquifer wells. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. +description is the head in the multi-aquifer well. WELL\_HEAD is only applied to constant head (STATUS is CONSTANT) and inactive (STATUS is INACTIVE) multi-aquifer wells. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. The program will terminate with an error if WELL\_HEAD is less than the bottom of the well. block period name head_limit diff --git a/flopy/mf6/data/dfn/gwf-sfr.dfn b/flopy/mf6/data/dfn/gwf-sfr.dfn index f84f711d72..6ea6822133 100644 --- a/flopy/mf6/data/dfn/gwf-sfr.dfn +++ b/flopy/mf6/data/dfn/gwf-sfr.dfn @@ -397,7 +397,7 @@ tagged false in_record true reader urword longname number of connected reaches -description integer value that defines the number of reaches connected to the reach. +description integer value that defines the number of reaches connected to the reach. If a value of zero is specified for NCON an entry for RNO is still required in the subsequent CONNECTIONDATA block. block packagedata name ustrf diff --git a/flopy/mf6/data/dfn/gwt-adv.dfn b/flopy/mf6/data/dfn/gwt-adv.dfn new file mode 100644 index 0000000000..759b8cfa2a --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-adv.dfn @@ -0,0 +1,11 @@ +# --------------------- gwt adv options --------------------- + +block options +name scheme +type string +valid central upstream tvd +reader urword +optional true +longname advective scheme +description scheme used to solve the advection term. Can be upstream, central, or TVD. + diff --git a/flopy/mf6/data/dfn/gwt-cnc.dfn b/flopy/mf6/data/dfn/gwt-cnc.dfn new file mode 100644 index 0000000000..e3ef02bce6 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-cnc.dfn @@ -0,0 +1,206 @@ +# --------------------- gwt cnc options --------------------- + +block options +name auxiliary +type string +shape (naux) +reader urword +optional true +longname keyword to specify aux variables +description REPLACE auxnames {'{#1}': 'Groundwater Transport'} + +block options +name auxmultname +type string +shape +reader urword +optional true +longname name of auxiliary variable for multiplier +description REPLACE auxmultname {'{#1}': 'concentration value'} + +block options +name boundnames +type keyword +shape +reader urword +optional true +longname +description REPLACE boundnames {'{#1}': 'constant concentration'} + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'constant concentration'} + +block options +name print_flows +type keyword +reader urword +optional true +longname print calculated flows to listing file +description REPLACE print_flows {'{#1}': 'constant concentration'} + +block options +name save_flows +type keyword +reader urword +optional true +longname save constant concentration flows to budget file +description REPLACE save_flows {'{#1}': 'constant concentration'} + +block options +name ts_filerecord +type record ts6 filein ts6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name ts6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname time series keyword +description keyword to specify that record corresponds to a time-series file. + +block options +name filein +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an input filename is expected next. + +block options +name ts6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of time series information +description REPLACE timeseriesfile {} + +block options +name obs_filerecord +type record obs6 filein obs6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name obs6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname obs keyword +description keyword to specify that record corresponds to an observations file. + +block options +name obs6_filename +type string +preserve_case true +in_record true +tagged false +reader urword +optional false +longname obs6 input filename +description REPLACE obs6_filename {'{#1}': 'Constant Concentration'} + + +# --------------------- gwt cnc dimensions --------------------- + +block dimensions +name maxbound +type integer +reader urword +optional false +longname maximum number of constant concentrations +description REPLACE maxbound {'{#1}': 'constant concentrations'} + + +# --------------------- gwt cnc period --------------------- + +block period +name iper +type integer +block_variable True +in_record true +tagged false +shape +valid +reader urword +optional false +longname stress period number +description REPLACE iper {} + +block period +name stress_period_data +type recarray cellid conc aux boundname +shape (maxbound) +reader urword +longname +description + +block period +name cellid +type integer +shape (ncelldim) +tagged false +in_record true +reader urword +longname cell identifier +description REPLACE cellid {} + +block period +name conc +type double precision +shape +tagged false +in_record true +reader urword +time_series true +longname constant concentration value +description is the constant concentration value. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name aux +type double precision +in_record true +tagged false +shape (naux) +reader urword +optional true +time_series true +longname auxiliary variables +description REPLACE aux {'{#1}': 'constant concentration'} + +block period +name boundname +type string +shape +tagged false +in_record true +reader urword +optional true +longname constant concentration name +description REPLACE boundname {'{#1}': 'constant concentration'} diff --git a/flopy/mf6/data/dfn/gwt-dis.dfn b/flopy/mf6/data/dfn/gwt-dis.dfn new file mode 100644 index 0000000000..d36f24ed83 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-dis.dfn @@ -0,0 +1,122 @@ +# --------------------- gwt dis options --------------------- + +block options +name length_units +type string +reader urword +optional true +longname model length units +description is the length units used for this model. Values can be ``FEET'', ``METERS'', or ``CENTIMETERS''. If not specified, the default is ``UNKNOWN''. + +block options +name nogrb +type keyword +reader urword +optional true +longname do not write binary grid file +description keyword to deactivate writing of the binary grid file. + +block options +name xorigin +type double precision +reader urword +optional true +longname x-position of the model grid origin +description x-position of the lower-left corner of the model grid. A default value of zero is assigned if not specified. The value for XORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name yorigin +type double precision +reader urword +optional true +longname y-position of the model grid origin +description y-position of the lower-left corner of the model grid. If not specified, then a default value equal to zero is used. The value for YORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name angrot +type double precision +reader urword +optional true +longname rotation angle +description counter-clockwise rotation angle (in degrees) of the lower-left corner of the model grid. If not specified, then a default value of 0.0 is assigned. The value for ANGROT does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + + +# --------------------- gwt dis dimensions --------------------- + +block dimensions +name nlay +type integer +reader urword +optional false +longname number of layers +description is the number of layers in the model grid. +default_value 1 + +block dimensions +name nrow +type integer +reader urword +optional false +longname number of rows +description is the number of rows in the model grid. +default_value 2 + +block dimensions +name ncol +type integer +reader urword +optional false +longname number of columns +description is the number of columns in the model grid. +default_value 2 + +# --------------------- gwt dis griddata --------------------- + +block griddata +name delr +type double precision +shape (ncol) +reader readarray +longname spacing along a row +description is the column spacing in the row direction. +default_value 1.0 + +block griddata +name delc +type double precision +shape (nrow) +reader readarray +longname spacing along a column +description is the row spacing in the column direction. +default_value 1.0 + +block griddata +name top +type double precision +shape (ncol, nrow) +reader readarray +longname cell top elevation +description is the top elevation for each cell in the top model layer. +default_value 1.0 + +block griddata +name botm +type double precision +shape (ncol, nrow, nlay) +reader readarray +layered true +longname cell bottom elevation +description is the bottom elevation for each cell. +default_value 0. + +block griddata +name idomain +type integer +shape (ncol, nrow, nlay) +reader readarray +layered true +optional true +longname idomain existence array +description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. + + diff --git a/flopy/mf6/data/dfn/gwt-disu.dfn b/flopy/mf6/data/dfn/gwt-disu.dfn new file mode 100644 index 0000000000..0b069e6680 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-disu.dfn @@ -0,0 +1,251 @@ +# --------------------- gwt disu options --------------------- + +block options +name length_units +type string +reader urword +optional true +longname model length units +description is the length units used for this model. Values can be ``FEET'', ``METERS'', or ``CENTIMETERS''. If not specified, the default is ``UNKNOWN''. + +block options +name nogrb +type keyword +reader urword +optional true +longname do not write binary grid file +description keyword to deactivate writing of the binary grid file. + +block options +name xorigin +type double precision +reader urword +optional true +longname x-position origin of the model grid coordinate system +description x-position of the origin used for model grid vertices. This value should be provided in a real-world coordinate system. A default value of zero is assigned if not specified. The value for XORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name yorigin +type double precision +reader urword +optional true +longname y-position origin of the model grid coordinate system +description y-position of the origin used for model grid vertices. This value should be provided in a real-world coordinate system. If not specified, then a default value equal to zero is used. The value for YORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name angrot +type double precision +reader urword +optional true +longname rotation angle +description counter-clockwise rotation angle (in degrees) of the model grid coordinate system relative to a real-world coordinate system. If not specified, then a default value of 0.0 is assigned. The value for ANGROT does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +# --------------------- gwt disu dimensions --------------------- + +block dimensions +name nodes +type integer +reader urword +optional false +longname number of layers +description is the number of cells in the model grid. + +block dimensions +name nja +type integer +reader urword +optional false +longname number of columns +description is the sum of the number of connections and NODES. When calculating the total number of connections, the connection between cell n and cell m is considered to be different from the connection between cell m and cell n. Thus, NJA is equal to the total number of connections, including n to m and m to n, and the total number of cells. + +block dimensions +name nvert +type integer +reader urword +optional true +longname number of vertices +description is the total number of (x, y) vertex pairs used to define the plan-view shape of each cell in the model grid. If NVERT is not specified or is specified as zero, then the VERTICES and CELL2D blocks below are not read. NVERT and the accompanying VERTICES and CELL2D blocks should be specified for most simulations. If the XT3D or SAVE\_SPECIFIC\_DISCHARGE options are specified in the NPF Package, then this information is required. + +# --------------------- gwt disu griddata --------------------- + +block griddata +name top +type double precision +shape (nodes) +reader readarray +longname cell top elevation +description is the top elevation for each cell in the model grid. + +block griddata +name bot +type double precision +shape (nodes) +reader readarray +longname cell bottom elevation +description is the bottom elevation for each cell. + +block griddata +name area +type double precision +shape (nodes) +reader readarray +longname cell surface area +description is the cell surface area (in plan view). + + +# --------------------- gwt disu connectiondata --------------------- + +block connectiondata +name iac +type integer +shape (nodes) +reader readarray +longname number of cell connections +description is the number of connections (plus 1) for each cell. The sum of all the entries in IAC must be equal to NJA. + +block connectiondata +name ja +type integer +shape (nja) +reader readarray +longname grid connectivity +description is a list of cell number (n) followed by its connecting cell numbers (m) for each of the m cells connected to cell n. The number of values to provide for cell n is IAC(n). This list is sequentially provided for the first to the last cell. The first value in the list must be cell n itself, and the remaining cells must be listed in an increasing order (sorted from lowest number to highest). Note that the cell and its connections are only supplied for the GWF cells and their connections to the other GWF cells. Also note that the JA list input may be divided such that every node and its connectivity list can be on a separate line for ease in readability of the file. To further ease readability of the file, the node number of the cell whose connectivity is subsequently listed, may be expressed as a negative number, the sign of which is subsequently converted to positive by the code. +numeric_index true + +block connectiondata +name ihc +type integer +shape (nja) +reader readarray +longname connection type +description is an index array indicating the direction between node n and all of its m connections. If IHC = 0 then cell n and cell m are connected in the vertical direction. Cell n overlies cell m if the cell number for n is less than m; cell m overlies cell n if the cell number for m is less than n. If IHC = 1 then cell n and cell m are connected in the horizontal direction. If IHC = 2 then cell n and cell m are connected in the horizontal direction, and the connection is vertically staggered. A vertically staggered connection is one in which a cell is horizontally connected to more than one cell in a horizontal connection. + +block connectiondata +name cl12 +type double precision +shape (nja) +reader readarray +longname connection lengths +description is the array containing connection lengths between the center of cell n and the shared face with each adjacent m cell. + +block connectiondata +name hwva +type double precision +shape (nja) +reader readarray +longname connection lengths +description is a symmetric array of size NJA. For horizontal connections, entries in HWVA are the horizontal width perpendicular to flow. For vertical connections, entries in HWVA are the vertical area for flow. Thus, values in the HWVA array contain dimensions of both length and area. Entries in the HWVA array have a one-to-one correspondence with the connections specified in the JA array. Likewise, there is a one-to-one correspondence between entries in the HWVA array and entries in the IHC array, which specifies the connection type (horizontal or vertical). Entries in the HWVA array must be symmetric; the program will terminate with an error if the value for HWVA for an n to m connection does not equal the value for HWVA for the corresponding n to m connection. + +block connectiondata +name angldegx +type double precision +optional true +shape (nja) +reader readarray +longname angle of face normal to connection +description is the angle (in degrees) between the horizontal x-axis and the outward normal to the face between a cell and its connecting cells. The angle varies between zero and 360.0 degrees, where zero degrees points in the positive x-axis direction, and 90 degrees points in the positive y-axis direction. ANGLDEGX is only needed if horizontal anisotropy is specified in the NPF Package, if the XT3D option is used in the NPF Package, or if the SAVE\_SPECIFIC\_DISCHARGE option is specifed in the NPF Package. ANGLDEGX does not need to be specified if these conditions are not met. ANGLDEGX is of size NJA; values specified for vertical connections and for the diagonal position are not used. Note that ANGLDEGX is read in degrees, which is different from MODFLOW-USG, which reads a similar variable (ANGLEX) in radians. + +# --------------------- gwt disu vertices --------------------- + +block vertices +name vertices +type recarray iv xv yv +reader urword +optional false +longname vertices data +description + +block vertices +name iv +type integer +in_record true +tagged false +reader urword +optional false +longname vertex number +description is the vertex number. Records in the VERTICES block must be listed in consecutive order from 1 to NVERT. +numeric_index true + +block vertices +name xv +type double precision +in_record true +tagged false +reader urword +optional false +longname x-coordinate for vertex +description is the x-coordinate for the vertex. + +block vertices +name yv +type double precision +in_record true +tagged false +reader urword +optional false +longname y-coordinate for vertex +description is the y-coordinate for the vertex. + + +# --------------------- gwt disu cell2d --------------------- + +block cell2d +name cell2d +type recarray icell2d xc yc ncvert icvert +reader urword +optional false +longname cell2d data +description + +block cell2d +name icell2d +type integer +in_record true +tagged false +reader urword +optional false +longname cell2d number +description is the cell2d number. Records in the CELL2D block must be listed in consecutive order from 1 to NODES. +numeric_index true + +block cell2d +name xc +type double precision +in_record true +tagged false +reader urword +optional false +longname x-coordinate for cell center +description is the x-coordinate for the cell center. + +block cell2d +name yc +type double precision +in_record true +tagged false +reader urword +optional false +longname y-coordinate for cell center +description is the y-coordinate for the cell center. + +block cell2d +name ncvert +type integer +in_record true +tagged false +reader urword +optional false +longname number of cell vertices +description is the number of vertices required to define the cell. There may be a different number of vertices for each cell. + +block cell2d +name icvert +type integer +shape (ncvert) +in_record true +tagged false +reader urword +optional false +longname number of cell vertices +description is an array of integer values containing vertex numbers (in the VERTICES block) used to define the cell. Vertices must be listed in clockwise order. + diff --git a/flopy/mf6/data/dfn/gwt-disv.dfn b/flopy/mf6/data/dfn/gwt-disv.dfn new file mode 100644 index 0000000000..2b10e2f461 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-disv.dfn @@ -0,0 +1,202 @@ +# --------------------- gwf disv options --------------------- + +block options +name length_units +type string +reader urword +optional true +longname model length units +description is the length units used for this model. Values can be ``FEET'', ``METERS'', or ``CENTIMETERS''. If not specified, the default is ``UNKNOWN''. + +block options +name nogrb +type keyword +reader urword +optional true +longname do not write binary grid file +description keyword to deactivate writing of the binary grid file. + +block options +name xorigin +type double precision +reader urword +optional true +longname x-position origin of the model grid coordinate system +description x-position of the origin used for model grid vertices. This value should be provided in a real-world coordinate system. A default value of zero is assigned if not specified. The value for XORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name yorigin +type double precision +reader urword +optional true +longname y-position origin of the model grid coordinate system +description y-position of the origin used for model grid vertices. This value should be provided in a real-world coordinate system. If not specified, then a default value equal to zero is used. The value for YORIGIN does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +block options +name angrot +type double precision +reader urword +optional true +longname rotation angle +description counter-clockwise rotation angle (in degrees) of the model grid coordinate system relative to a real-world coordinate system. If not specified, then a default value of 0.0 is assigned. The value for ANGROT does not affect the model simulation, but it is written to the binary grid file so that postprocessors can locate the grid in space. + +# --------------------- gwt disv dimensions --------------------- + +block dimensions +name nlay +type integer +reader urword +optional false +longname number of layers +description is the number of layers in the model grid. + +block dimensions +name ncpl +type integer +reader urword +optional false +longname number of cells per layer +description is the number of cells per layer. This is a constant value for the grid and it applies to all layers. + +block dimensions +name nvert +type integer +reader urword +optional false +longname number of columns +description is the total number of (x, y) vertex pairs used to characterize the horizontal configuration of the model grid. + +# --------------------- gwt disv griddata --------------------- + +block griddata +name top +type double precision +shape (ncpl) +reader readarray +longname model top elevation +description is the top elevation for each cell in the top model layer. + +block griddata +name botm +type double precision +shape (nlay, ncpl) +reader readarray +layered true +longname model bottom elevation +description is the bottom elevation for each cell. + +block griddata +name idomain +type integer +shape (nlay, ncpl) +reader readarray +layered true +optional true +longname idomain existence array +description is an optional array that characterizes the existence status of a cell. If the IDOMAIN array is not specified, then all model cells exist within the solution. If the IDOMAIN value for a cell is 0, the cell does not exist in the simulation. Input and output values will be read and written for the cell, but internal to the program, the cell is excluded from the solution. If the IDOMAIN value for a cell is 1, the cell exists in the simulation. If the IDOMAIN value for a cell is -1, the cell does not exist in the simulation. Furthermore, the first existing cell above will be connected to the first existing cell below. This type of cell is referred to as a ``vertical pass through'' cell. + + +# --------------------- gwt disv vertices --------------------- + +block vertices +name vertices +type recarray iv xv yv +reader urword +optional false +longname vertices data +description + +block vertices +name iv +type integer +in_record true +tagged false +reader urword +optional false +longname vertex number +description is the vertex number. Records in the VERTICES block must be listed in consecutive order from 1 to NVERT. +numeric_index true + +block vertices +name xv +type double precision +in_record true +tagged false +reader urword +optional false +longname x-coordinate for vertex +description is the x-coordinate for the vertex. + +block vertices +name yv +type double precision +in_record true +tagged false +reader urword +optional false +longname y-coordinate for vertex +description is the y-coordinate for the vertex. + + +# --------------------- gwt disv cell2d --------------------- + +block cell2d +name cell2d +type recarray icell2d xc yc ncvert icvert +reader urword +optional false +longname cell2d data +description + +block cell2d +name icell2d +type integer +in_record true +tagged false +reader urword +optional false +longname cell2d number +description is the CELL2D number. Records in the CELL2D block must be listed in consecutive order from the first to the last. +numeric_index true + +block cell2d +name xc +type double precision +in_record true +tagged false +reader urword +optional false +longname x-coordinate for cell center +description is the x-coordinate for the cell center. + +block cell2d +name yc +type double precision +in_record true +tagged false +reader urword +optional false +longname y-coordinate for cell center +description is the y-coordinate for the cell center. + +block cell2d +name ncvert +type integer +in_record true +tagged false +reader urword +optional false +longname number of cell vertices +description is the number of vertices required to define the cell. There may be a different number of vertices for each cell. + +block cell2d +name icvert +type integer +shape (ncvert) +in_record true +tagged false +reader urword +optional false +longname number of cell vertices +description is an array of integer values containing vertex numbers (in the VERTICES block) used to define the cell. Vertices must be listed in clockwise order. Cells that are connected must share vertices. +numeric_index true diff --git a/flopy/mf6/data/dfn/gwt-dsp.dfn b/flopy/mf6/data/dfn/gwt-dsp.dfn new file mode 100644 index 0000000000..62df43101f --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-dsp.dfn @@ -0,0 +1,81 @@ +# --------------------- gwt dsp options --------------------- + +block options +name xt3d_off +type keyword +shape +reader urword +optional true +longname deactivate xt3d +description deactivate the xt3d method to and use the faster and less accurate approximation. This option may provide a fast and accurate solution under some circumstances, such as when flow aligns with the model grid, there is no mechanical dispersion, or when the longitudinal and transverse dispersivities are equal. This option may also be used to assess the computational demand of the XT3D approach by noting the run time differences with and without this option on. + +block options +name xt3d_rhs +type keyword +shape +reader urword +optional true +longname xt3d on right-hand side +description add xt3d terms to right-hand side, when possible. This option uses less memory, but may require more iterations. + +# --------------------- gwt dsp griddata --------------------- + +block griddata +name diffc +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname diffusion coefficient +description molecular diffusion coefficient. + +block griddata +name alh +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname longitudinal dispersivity in horizontal direction +description longitudinal dispersivity in horizontal direction. If mechanical dispersion is represented (by specifying any dispersivity values) then this array is required. + +block griddata +name alv +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname longitudinal dispersivity in vertical direction +description longitudinal dispersivity in vertical direction. If this value is not specified and mechanical dispersion is represented, then this array is set equal to ALH. + +block griddata +name ath1 +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname transverse dispersivity in horizontal direction +description transverse dispersivity in horizontal direction. If mechanical dispersion is represented (by specifying any dispersivity values) then this array is required. + +block griddata +name ath2 +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname transverse dispersivity in horizontal direction +description transverse dispersivity in horizontal direction. If this value is not specified and mechanical dispersion is represented, then this array is set equal to ATH1. + +block griddata +name atv +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname transverse dispersivity when flow is in vertical direction +description transverse dispersivity when flow is in vertical direction. If this value is not specified and mechanical dispersion is represented, then this array is set equal to ATH2. diff --git a/flopy/mf6/data/dfn/gwt-fmi.dfn b/flopy/mf6/data/dfn/gwt-fmi.dfn new file mode 100644 index 0000000000..cb36c2a56e --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-fmi.dfn @@ -0,0 +1,50 @@ +# --------------------- gwt fmi options --------------------- + +block options +name flow_imbalance_correction +type keyword +reader urword +optional true +longname correct for flow imbalance +description correct for an imbalance in flows by assuming that any residual flow error comes in or leaves at the concentration of the cell. + +# --------------------- gwt fmi packagedata --------------------- + +block packagedata +name packagedata +type recarray flowtype filein fname +reader urword +optional false +longname flowtype list +description + +block packagedata +name flowtype +in_record true +type string +tagged false +reader urword +longname flow type +description is the word GWFBUDGET, GWFHEAD, GWFMOVER or the name of an advanced GWF stress package. If GWFBUDGET is specified, then the corresponding file must be a budget file from a previous GWF Model run. If an advanced GWF stress package name appears then the corresponding file must be the budget file saved by a LAK, SFR, MAW or UZF Package. + +block packagedata +name filein +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an input filename is expected next. + +block packagedata +name fname +in_record true +type string +preserve_case true +tagged false +reader urword +longname file name +description is the name of the file containing flows. The path to the file should be included if the file is not located in the folder where the program was run. + diff --git a/flopy/mf6/data/dfn/gwt-ic.dfn b/flopy/mf6/data/dfn/gwt-ic.dfn new file mode 100644 index 0000000000..dcbd7d846f --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-ic.dfn @@ -0,0 +1,11 @@ +# --------------------- gwt ic griddata --------------------- + +block griddata +name strt +type double precision +shape (nodes) +reader readarray +layered true +longname starting concentration +description is the initial (starting) concentration---that is, concentration at the beginning of the GWT Model simulation. STRT must be specified for all simulations, including steady-state simulations. One value is read for every model cell. For simulations in which the first stress period is steady state, the values used for STRT generally do not affect the simulation. The execution time, however, will be less if STRT includes concentrations that are close to the steady-state solution. +default_value 0.0 diff --git a/flopy/mf6/data/dfn/gwt-ist.dfn b/flopy/mf6/data/dfn/gwt-ist.dfn new file mode 100644 index 0000000000..424876aeae --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-ist.dfn @@ -0,0 +1,221 @@ +# --------------------- gwt ist options --------------------- + +block options +name save_flows +type keyword +reader urword +optional true +longname save calculated flows to budget file +description REPLACE save_flows {'{#1}': 'IST'} + +block options +name sorbtion +type keyword +reader urword +optional true +longname activate sorbtion +description is a text keyword to indicate that sorbtion will be activated. Use of this keyword requires that BULK\_DENSITY and DISTCOEF are specified in the GRIDDATA block. + +block options +name first_order_decay +type keyword +reader urword +optional true +longname activate first-order decay +description is a text keyword to indicate that first-order decay will occur. Use of this keyword requires that DECAY and DECAY\_SORBED (if sorbtion is active) are specified in the GRIDDATA block. + +block options +name zero_order_decay +type keyword +reader urword +optional true +longname activate zero-order decay +description is a text keyword to indicate that zero-order decay will occur. Use of this keyword requires that DECAY and DECAY\_SORBED (if sorbtion is active) are specified in the GRIDDATA block. + +block options +name cim_filerecord +type record cim fileout cimfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name cim +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname cim keyword +description keyword to specify that record corresponds to immobile concentration. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name cimfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the output file to write immobile concentrations. + +block options +name cimprintrecord +type record cim print_format formatrecord +shape +reader urword +optional true +longname +description + +block options +name print_format +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname keyword to indicate that a print format follows +description keyword to specify format for printing to the listing file. + +block options +name formatrecord +type record columns width digits format +shape +in_record true +reader urword +tagged +optional false +longname +description + +block options +name columns +type integer +shape +in_record true +reader urword +tagged true +optional +longname number of columns +description number of columns for writing data. + +block options +name width +type integer +shape +in_record true +reader urword +tagged true +optional +longname width for each number +description width for writing each number. + +block options +name digits +type integer +shape +in_record true +reader urword +tagged true +optional +longname number of digits +description number of digits to use for writing a number. + +block options +name format +type string +shape +in_record true +reader urword +tagged false +optional false +longname write format +description write format can be EXPONENTIAL, FIXED, GENERAL, or SCIENTIFIC. + +# --------------------- gwt ist griddata --------------------- + +block griddata +name cim +type double precision +shape (nodes) +reader readarray +optional true +layered true +longname initial concentration of the immobile domain +description initial concentration of the immobile domain in mass per length cubed. If CIM is not specified, then it is assumed to be zero. + +block griddata +name thetaim +type double precision +shape (nodes) +reader readarray +layered true +longname porosity of the immobile domain +description porosity of the immobile domain specified as the volume of immobile pore space per total volume (dimensionless). + +block griddata +name zetaim +type double precision +shape (nodes) +reader readarray +layered true +longname mass transfer rate coefficient between the mobile and immobile domains +description mass transfer rate coefficient between the mobile and immobile domains, in dimensions of per time. + +block griddata +name decay +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname first rate coefficient +description is the rate coefficient for first or zero-order decay for the aqueous phase of the immobile domain. A negative value indicates solute production. The dimensions of decay for first-order decay is one over time. The dimensions of decay for zero-order decay is mass per length cubed per time. decay will have no affect on simulation results unless either first- or zero-order decay is specified in the options block. + +block griddata +name decay_sorbed +type double precision +shape (nodes) +reader readarray +optional true +layered true +longname second rate coefficient +description is the rate coefficient for first or zero-order decay for the sorbed phase of the immobile domain. A negative value indicates solute production. The dimensions of decay\_sorbed for first-order decay is one over time. The dimensions of decay\_sorbed for zero-order decay is mass of solute per mass of aquifer per time. If decay\_sorbed is not specified and both decay and sorbtion are active, then the sorbed decay rate will be set equal to the aqueous decay rate. decay\_sorbed will have no affect on simulation results unless the SORPTION keyword and either first- or zero-order decay are specified in the options block. + +block griddata +name bulk_density +type double precision +shape (nodes) +reader readarray +layered true +longname bulk density +description is the bulk density of the aquifer in mass per length cubed. bulk\_density will have no affect on simulation results unless the SORBTION keyword is specified in the options block. + +block griddata +name distcoef +type double precision +shape (nodes) +reader readarray +layered true +longname distribution coefficient +description is the distribution coefficient for the equilibrium-controlled linear sorption isotherm in dimensions of length cubed per mass. distcoef will have no affect on simulation results unless the SORBTION keyword is specified in the options block. + diff --git a/flopy/mf6/data/dfn/gwt-lkt.dfn b/flopy/mf6/data/dfn/gwt-lkt.dfn new file mode 100644 index 0000000000..313b7e5fef --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-lkt.dfn @@ -0,0 +1,426 @@ +# --------------------- gwt lkt options --------------------- + +block options +name flow_package_name +type string +shape +reader urword +optional true +longname keyword to specify name of corresponding flow package +description keyword to specify the name of the corresponding flow package. If not specified, then the corresponding flow package must have the same name as this advanced transport package (the name associated with this package in the GWT name file). + +block options +name auxiliary +type string +shape (naux) +reader urword +optional true +longname keyword to specify aux variables +description REPLACE auxnames {'{#1}': 'Groundwater Transport'} + +block options +name flow_package_auxiliary_name +type string +shape +reader urword +optional true +longname keyword to specify name of concentration auxiliary variable in flow package +description keyword to specify the name of an auxiliary variable in the corresponding flow package. If specified, then the simulated concentrations from this advanced transport package will be copied into the auxiliary variable specified with this name. Note that the flow package must have an auxiliary variable with this name or the program will terminate with an error. If the flows for this advanced transport package are read from a file, then this option will have no affect. + +block options +name boundnames +type keyword +shape +reader urword +optional true +longname +description REPLACE boundnames {'{#1}': 'lake'} + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'lake'} + +block options +name print_concentration +type keyword +reader urword +optional true +longname print calculated stages to listing file +description REPLACE print_head {'{#1}': 'lake', '{#2}': 'concentration', '{#3}': 'CONCENTRATION'} + +block options +name print_flows +type keyword +reader urword +optional true +longname print calculated flows to listing file +description REPLACE print_flows {'{#1}': 'lake'} + +block options +name save_flows +type keyword +reader urword +optional true +longname save lake flows to budget file +description REPLACE save_flows {'{#1}': 'lake'} + +block options +name concentration_filerecord +type record concentration fileout concfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name concentration +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname stage keyword +description keyword to specify that record corresponds to concentration. + +block options +name concfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write concentration information. + +block options +name budget_filerecord +type record budget fileout budgetfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budget +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname budget keyword +description keyword to specify that record corresponds to the budget. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name budgetfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write budget information. + +block options +name ts_filerecord +type record ts6 filein ts6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name ts6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname head keyword +description keyword to specify that record corresponds to a time-series file. + +block options +name filein +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an input filename is expected next. + +block options +name ts6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of time series information +description REPLACE timeseriesfile {} + +block options +name obs_filerecord +type record obs6 filein obs6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name obs6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname obs keyword +description keyword to specify that record corresponds to an observations file. + +block options +name obs6_filename +type string +preserve_case true +in_record true +tagged false +reader urword +optional false +longname obs6 input filename +description REPLACE obs6_filename {'{#1}': 'LKT'} + + +# --------------------- gwt lkt packagedata --------------------- + +block packagedata +name packagedata +type recarray lakeno strt aux boundname +shape (maxbound) +reader urword +longname +description + +block packagedata +name lakeno +type integer +shape +tagged false +in_record true +reader urword +longname lake number for this entry +description integer value that defines the lake number associated with the specified PACKAGEDATA data on the line. LAKENO must be greater than zero and less than or equal to NLAKES. Lake information must be specified for every lake or the program will terminate with an error. The program will also terminate with an error if information for a lake is specified more than once. +numeric_index true + +block packagedata +name strt +type double precision +shape +tagged false +in_record true +reader urword +longname starting lake concentration +description real value that defines the starting concentration for the lake. + +block packagedata +name aux +type double precision +in_record true +tagged false +shape (naux) +reader urword +time_series true +optional true +longname auxiliary variables +description REPLACE aux {'{#1}': 'lake'} + +block packagedata +name boundname +type string +shape +tagged false +in_record true +reader urword +optional true +longname lake name +description REPLACE boundname {'{#1}': 'lake'} + + +# --------------------- gwt lkt period --------------------- + +block period +name iper +type integer +block_variable True +in_record true +tagged false +shape +valid +reader urword +optional false +longname stress period number +description REPLACE iper {} + +block period +name lakeperioddata +type recarray lakeno laksetting +shape +reader urword +longname +description + +block period +name lakeno +type integer +shape +tagged false +in_record true +reader urword +longname lake number for this entry +description integer value that defines the lake number associated with the specified PERIOD data on the line. LAKENO must be greater than zero and less than or equal to NLAKES. +numeric_index true + +block period +name laksetting +type keystring status concentration rainfall evaporation runoff ext-inflow auxiliaryrecord +shape +tagged false +in_record true +reader urword +longname +description line of information that is parsed into a keyword and values. Keyword values that can be used to start the LAKSETTING string include: STATUS, CONCENTRATION, RAINFALL, EVAPORATION, RUNOFF, and AUXILIARY. These settings are used to assign the concentration of associated with the corresponding flow terms. Concentrations cannot be specified for all flow terms. For example, the Lake Package supports a ``WITHDRAWAL'' flow term. If this withdrawal term is active, then water will be withdrawn from the lake at the calculated concentration of the lake. + +block period +name status +type string +shape +tagged true +in_record true +reader urword +longname lake concentration status +description keyword option to define lake status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE, which means that concentration will be calculated for the lake. If a lake is inactive, then there will be no solute mass fluxes into or out of the lake and the inactive value will be written for the lake concentration. If a lake is constant, then the concentration for the lake will be fixed at the user specified value. + +block period +name concentration +type string +shape +tagged true +in_record true +time_series true +reader urword +longname lake concentration +description real or character value that defines the concentration for the lake. The specified CONCENTRATION is only applied if the lake is a constant concentration lake. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name rainfall +type string +shape +tagged true +in_record true +reader urword +time_series true +longname rainfall concentration +description real or character value that defines the rainfall solute concentration $(ML^{-3})$ for the lake. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name evaporation +type string +shape +tagged true +in_record true +reader urword +time_series true +longname evaporation concentration +description real or character value that defines the concentration of evaporated water $(ML^{-3})$ for the lake. If this concentration value is larger than the simulated concentration in the lake, then the evaporated water will be removed at the same concentration as the lake. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name runoff +type string +shape +tagged true +in_record true +reader urword +time_series true +longname runoff concentration +description real or character value that defines the concentration of runoff $(ML^{-3})$ for the lake. Value must be greater than or equal to zero. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name ext-inflow +type string +shape +tagged true +in_record true +reader urword +time_series true +longname ext-inflow concentration +description real or character value that defines the concentration of external inflow $(ML^{-3})$ for the lake. Value must be greater than or equal to zero. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name auxiliaryrecord +type record auxiliary auxname auxval +shape +tagged +in_record true +reader urword +longname +description + +block period +name auxiliary +type keyword +shape +in_record true +reader urword +longname +description keyword for specifying auxiliary variable. + +block period +name auxname +type string +shape +tagged false +in_record true +reader urword +longname +description name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored. + +block period +name auxval +type double precision +shape +tagged false +in_record true +reader urword +time_series true +longname auxiliary variable value +description value for the auxiliary variable. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. diff --git a/flopy/mf6/data/dfn/gwt-mst.dfn b/flopy/mf6/data/dfn/gwt-mst.dfn new file mode 100644 index 0000000000..f5068aabda --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-mst.dfn @@ -0,0 +1,85 @@ +# --------------------- gwt mst options --------------------- + +block options +name save_flows +type keyword +reader urword +optional true +longname save calculated flows to budget file +description REPLACE save_flows {'{#1}': 'MST'} + +block options +name first_order_decay +type keyword +reader urword +optional true +longname activate first-order decay +description is a text keyword to indicate that first-order decay will occur. Use of this keyword requires that DECAY and DECAY\_SORBED (if sorbtion is active) are specified in the GRIDDATA block. + +block options +name zero_order_decay +type keyword +reader urword +optional true +longname activate zero-order decay +description is a text keyword to indicate that zero-order decay will occur. Use of this keyword requires that DECAY and DECAY\_SORBED (if sorbtion is active) are specified in the GRIDDATA block. + +block options +name sorbtion +type keyword +reader urword +optional true +longname activate sorbtion +description is a text keyword to indicate that sorbtion will be activated. Use of this keyword requires that BULK\_DENSITY and DISTCOEF are specified in the GRIDDATA block. + +# --------------------- gwt mst griddata --------------------- + +block griddata +name porosity +type double precision +shape (nodes) +reader readarray +layered true +longname porosity +description is the aquifer porosity. + +block griddata +name decay +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname aqueous phase decay rate coefficient +description is the rate coefficient for first or zero-order decay for the aqueous phase of the mobile domain. A negative value indicates solute production. The dimensions of decay for first-order decay is one over time. The dimensions of decay for zero-order decay is mass per length cubed per time. decay will have no affect on simulation results unless either first- or zero-order decay is specified in the options block. + +block griddata +name decay_sorbed +type double precision +shape (nodes) +reader readarray +optional true +layered true +longname sorbed phase decay rate coefficient +description is the rate coefficient for first or zero-order decay for the sorbed phase of the mobile domain. A negative value indicates solute production. The dimensions of decay\_sorbed for first-order decay is one over time. The dimensions of decay\_sorbed for zero-order decay is mass of solute per mass of aquifer per time. If decay\_sorbed is not specified and both decay and sorbtion are active, then the sorbed decay rate will be set equal to the aqueous decay rate. decay\_sorbed will have no affect on simulation results unless the SORPTION keyword and either first- or zero-order decay are specified in the options block. + +block griddata +name bulk_density +type double precision +shape (nodes) +reader readarray +optional true +layered true +longname bulk density +description is the bulk density of the aquifer in mass per length cubed. bulk\_density is not required unless the SORBTION keyword is specified. + +block griddata +name distcoef +type double precision +shape (nodes) +reader readarray +layered true +optional true +longname distribution coefficient +description is the distribution coefficient for the equilibrium-controlled linear sorption isotherm in dimensions of length cubed per mass. distcoef is not required unless the SORBTION keyword is specified. + diff --git a/flopy/mf6/data/dfn/gwt-mvt.dfn b/flopy/mf6/data/dfn/gwt-mvt.dfn new file mode 100644 index 0000000000..50846a5bef --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-mvt.dfn @@ -0,0 +1,71 @@ +# --------------------- gwt mvt options --------------------- + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'mover'} + +block options +name print_flows +type keyword +reader urword +optional true +longname print calculated flows to listing file +description REPLACE print_flows {'{#1}': 'lake'} + +block options +name save_flows +type keyword +reader urword +optional true +longname save lake flows to budget file +description REPLACE save_flows {'{#1}': 'lake'} + +block options +name budget_filerecord +type record budget fileout budgetfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budget +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname budget keyword +description keyword to specify that record corresponds to the budget. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name budgetfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write budget information. + + diff --git a/flopy/mf6/data/dfn/gwt-mwt.dfn b/flopy/mf6/data/dfn/gwt-mwt.dfn new file mode 100644 index 0000000000..e49af4052e --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-mwt.dfn @@ -0,0 +1,393 @@ +# --------------------- gwt mwt options --------------------- + +block options +name flow_package_name +type string +shape +reader urword +optional true +longname keyword to specify name of corresponding flow package +description keyword to specify the name of the corresponding flow package. If not specified, then the corresponding flow package must have the same name as this advanced transport package (the name associated with this package in the GWT name file). + +block options +name auxiliary +type string +shape (naux) +reader urword +optional true +longname keyword to specify aux variables +description REPLACE auxnames {'{#1}': 'Groundwater Transport'} + +block options +name flow_package_auxiliary_name +type string +shape +reader urword +optional true +longname keyword to specify name of concentration auxiliary variable in flow package +description keyword to specify the name of an auxiliary variable in the corresponding flow package. If specified, then the simulated concentrations from this advanced transport package will be copied into the auxiliary variable specified with this name. Note that the flow package must have an auxiliary variable with this name or the program will terminate with an error. If the flows for this advanced transport package are read from a file, then this option will have no affect. + +block options +name boundnames +type keyword +shape +reader urword +optional true +longname +description REPLACE boundnames {'{#1}': 'well'} + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'well'} + +block options +name print_concentration +type keyword +reader urword +optional true +longname print calculated concentrations to listing file +description REPLACE print_head {'{#1}': 'well', '{#2}': 'concentration', '{#3}': 'CONCENTRATION'} + +block options +name print_flows +type keyword +reader urword +optional true +longname print calculated flows to listing file +description REPLACE print_flows {'{#1}': 'well'} + +block options +name save_flows +type keyword +reader urword +optional true +longname save well flows to budget file +description REPLACE save_flows {'{#1}': 'well'} + +block options +name concentration_filerecord +type record concentration fileout concfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name concentration +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname stage keyword +description keyword to specify that record corresponds to concentration. + +block options +name concfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write concentration information. + +block options +name budget_filerecord +type record budget fileout budgetfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budget +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname budget keyword +description keyword to specify that record corresponds to the budget. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name budgetfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the binary output file to write budget information. + +block options +name ts_filerecord +type record ts6 filein ts6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name ts6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname head keyword +description keyword to specify that record corresponds to a time-series file. + +block options +name filein +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an input filename is expected next. + +block options +name ts6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of time series information +description REPLACE timeseriesfile {} + +block options +name obs_filerecord +type record obs6 filein obs6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name obs6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname obs keyword +description keyword to specify that record corresponds to an observations file. + +block options +name obs6_filename +type string +preserve_case true +in_record true +tagged false +reader urword +optional false +longname obs6 input filename +description REPLACE obs6_filename {'{#1}': 'MWT'} + + +# --------------------- gwt mwt packagedata --------------------- + +block packagedata +name packagedata +type recarray mawno strt aux boundname +shape (maxbound) +reader urword +longname +description + +block packagedata +name mawno +type integer +shape +tagged false +in_record true +reader urword +longname well number for this entry +description integer value that defines the well number associated with the specified PACKAGEDATA data on the line. MAWNO must be greater than zero and less than or equal to NMAWWELLS. Well information must be specified for every well or the program will terminate with an error. The program will also terminate with an error if information for a well is specified more than once. +numeric_index true + +block packagedata +name strt +type double precision +shape +tagged false +in_record true +reader urword +longname starting well concentration +description real value that defines the starting concentration for the well. + +block packagedata +name aux +type double precision +in_record true +tagged false +shape (naux) +reader urword +time_series true +optional true +longname auxiliary variables +description REPLACE aux {'{#1}': 'well'} + +block packagedata +name boundname +type string +shape +tagged false +in_record true +reader urword +optional true +longname well name +description REPLACE boundname {'{#1}': 'well'} + + +# --------------------- gwt mwt period --------------------- + +block period +name iper +type integer +block_variable True +in_record true +tagged false +shape +valid +reader urword +optional false +longname stress period number +description REPLACE iper {} + +block period +name mwtperioddata +type recarray mawno mwtsetting +shape +reader urword +longname +description + +block period +name mawno +type integer +shape +tagged false +in_record true +reader urword +longname well number for this entry +description integer value that defines the well number associated with the specified PERIOD data on the line. MAWNO must be greater than zero and less than or equal to NMAWWELLS. +numeric_index true + +block period +name mwtsetting +type keystring status concentration rate auxiliaryrecord +shape +tagged false +in_record true +reader urword +longname +description line of information that is parsed into a keyword and values. Keyword values that can be used to start the MWTSETTING string include: STATUS, CONCENTRATION, RAINFALL, EVAPORATION, RUNOFF, and AUXILIARY. These settings are used to assign the concentration of associated with the corresponding flow terms. Concentrations cannot be specified for all flow terms. For example, the Multi-Aquifer Well Package supports a ``WITHDRAWAL'' flow term. If this withdrawal term is active, then water will be withdrawn from the well at the calculated concentration of the well. + +block period +name status +type string +shape +tagged true +in_record true +reader urword +longname well concentration status +description keyword option to define well status. STATUS can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is ACTIVE, which means that concentration will be calculated for the well. If a well is inactive, then there will be no solute mass fluxes into or out of the well and the inactive value will be written for the well concentration. If a well is constant, then the concentration for the well will be fixed at the user specified value. + +block period +name concentration +type string +shape +tagged true +in_record true +time_series true +reader urword +longname well concentration +description real or character value that defines the concentration for the well. The specified CONCENTRATION is only applied if the well is a constant concentration well. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name rate +type string +shape +tagged true +in_record true +reader urword +time_series true +longname well injection concentration +description real or character value that defines the injection solute concentration $(ML^{-3})$ for the well. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. + +block period +name auxiliaryrecord +type record auxiliary auxname auxval +shape +tagged +in_record true +reader urword +longname +description + +block period +name auxiliary +type keyword +shape +in_record true +reader urword +longname +description keyword for specifying auxiliary variable. + +block period +name auxname +type string +shape +tagged false +in_record true +reader urword +longname +description name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored. + +block period +name auxval +type double precision +shape +tagged false +in_record true +reader urword +time_series true +longname auxiliary variable value +description value for the auxiliary variable. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. diff --git a/flopy/mf6/data/dfn/gwt-nam.dfn b/flopy/mf6/data/dfn/gwt-nam.dfn new file mode 100644 index 0000000000..22daa2d658 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-nam.dfn @@ -0,0 +1,73 @@ +# --------------------- gwt nam options --------------------- + +block options +name list +type string +reader urword +optional true +longname name of listing file +description is name of the listing file to create for this GWT model. If not specified, then the name of the list file will be the basename of the GWT model name file and the '.lst' extension. For example, if the GWT name file is called ``my.model.nam'' then the list file will be called ``my.model.lst''. + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'all model stress package'} + +block options +name print_flows +type keyword +reader urword +optional true +longname print calculated flows to listing file +description REPLACE print_flows {'{#1}': 'all model package'} + +block options +name save_flows +type keyword +reader urword +optional true +longname save flows for all packages to budget file +description REPLACE save_flows {'{#1}': 'all model package'} + +# --------------------- gwt nam packages --------------------- + +block packages +name packages +type recarray ftype fname pname +reader urword +optional false +longname package list +description + +block packages +name ftype +in_record true +type string +tagged false +reader urword +longname package type +description is the file type, which must be one of the following character values shown in table~\ref{table:ftype}. Ftype may be entered in any combination of uppercase and lowercase. + +block packages +name fname +in_record true +type string +preserve_case true +tagged false +reader urword +longname file name +description is the name of the file containing the package input. The path to the file should be included if the file is not located in the folder where the program was run. + +block packages +name pname +in_record true +type string +tagged false +reader urword +optional true +longname user name for package +description is the user-defined name for the package. PNAME is restricted to 16 characters. No spaces are allowed in PNAME. PNAME character values are read and stored by the program for stress packages only. These names may be useful for labeling purposes when multiple stress packages of the same type are located within a single GWT Model. If PNAME is specified for a stress package, then PNAME will be used in the flow budget table in the listing file; it will also be used for the text entry in the cell-by-cell budget file. PNAME is case insensitive and is stored in all upper case letters. + diff --git a/flopy/mf6/data/dfn/gwt-oc.dfn b/flopy/mf6/data/dfn/gwt-oc.dfn new file mode 100644 index 0000000000..861456a1f0 --- /dev/null +++ b/flopy/mf6/data/dfn/gwt-oc.dfn @@ -0,0 +1,280 @@ +# --------------------- gwt oc options --------------------- + +block options +name budget_filerecord +type record budget fileout budgetfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budget +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname budget keyword +description keyword to specify that record corresponds to the budget. + +block options +name fileout +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname file keyword +description keyword to specify that an output filename is expected next. + +block options +name budgetfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the output file to write budget information. + +block options +name concentration_filerecord +type record concentration fileout concentrationfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name concentration +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname concentration keyword +description keyword to specify that record corresponds to concentration. + +block options +name concentrationfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the output file to write conc information. + +block options +name concentrationprintrecord +type record concentration print_format formatrecord +shape +reader urword +optional true +longname +description + +block options +name print_format +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname keyword to indicate that a print format follows +description keyword to specify format for printing to the listing file. + +block options +name formatrecord +type record columns width digits format +shape +in_record true +reader urword +tagged +optional false +longname +description + +block options +name columns +type integer +shape +in_record true +reader urword +tagged true +optional +longname number of columns +description number of columns for writing data. + +block options +name width +type integer +shape +in_record true +reader urword +tagged true +optional +longname width for each number +description width for writing each number. + +block options +name digits +type integer +shape +in_record true +reader urword +tagged true +optional +longname number of digits +description number of digits to use for writing a number. + +block options +name format +type string +shape +in_record true +reader urword +tagged false +optional false +longname write format +description write format can be EXPONENTIAL, FIXED, GENERAL, or SCIENTIFIC. + + +# --------------------- gwt oc period --------------------- + +block period +name iper +type integer +block_variable True +in_record true +tagged false +shape +valid +reader urword +optional false +longname stress period number +description REPLACE iper {} + +block period +name saverecord +type record save rtype ocsetting +shape +reader urword +tagged false +optional true +longname +description + +block period +name save +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname keyword to save +description keyword to indicate that information will be saved this stress period. + +block period +name printrecord +type record print rtype ocsetting +shape +reader urword +tagged false +optional true +longname +description + +block period +name print +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname keyword to save +description keyword to indicate that information will be printed this stress period. + +block period +name rtype +type string +shape +in_record true +reader urword +tagged false +optional false +longname record type +description type of information to save or print. Can be BUDGET or CONCENTRATION. + +block period +name ocsetting +type keystring all first last frequency steps +shape +tagged false +in_record true +reader urword +longname +description specifies the steps for which the data will be saved. + +block period +name all +type keyword +shape +in_record true +reader urword +longname +description keyword to indicate save for all time steps in period. + +block period +name first +type keyword +shape +in_record true +reader urword +longname +description keyword to indicate save for first step in period. This keyword may be used in conjunction with other keywords to print or save results for multiple time steps. + +block period +name last +type keyword +shape +in_record true +reader urword +longname +description keyword to indicate save for last step in period. This keyword may be used in conjunction with other keywords to print or save results for multiple time steps. + +block period +name frequency +type integer +shape +tagged true +in_record true +reader urword +longname +description save at the specified time step frequency. This keyword may be used in conjunction with other keywords to print or save results for multiple time steps. + +block period +name steps +type integer +shape ( + * is the exchange type (GWF-GWF or GWF-GWT). + exgmnamea : + * is the name of the first model that is part of this exchange. + exgmnameb : + * is the name of the second model that is part of this exchange. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + package_abbr = "gwfgwt" + _package_type = "gwfgwt" + dfn_file_name = "exg-gwfgwt.dfn" + + dfn = [] + + def __init__( + self, + simulation, + loading_package=False, + exgtype=None, + exgmnamea=None, + exgmnameb=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwfgwt, self).__init__( + simulation, "gwfgwt", filename, pname, loading_package, parent_file + ) + + # set up variables + self.exgtype = exgtype + + self.exgmnamea = exgmnamea + + self.exgmnameb = exgmnameb + + simulation.register_exchange_file(self) + + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwfmaw.py b/flopy/mf6/modflow/mfgwfmaw.py index b20432a924..2b297416f7 100644 --- a/flopy/mf6/modflow/mfgwfmaw.py +++ b/flopy/mf6/modflow/mfgwfmaw.py @@ -52,8 +52,8 @@ class ModflowGwfmaw(mfpackage.MFPackage): * save_flows (boolean) keyword to indicate that multi-aquifer well flow terms will be written to the file specified with "BUDGET FILEOUT" in Output Control. - stage_filerecord : [headfile] - * headfile (string) name of the binary output file to write stage + head_filerecord : [headfile] + * headfile (string) name of the binary output file to write head information. budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget @@ -127,12 +127,21 @@ class ModflowGwfmaw(mfpackage.MFPackage): which means that it should be treated as zero-based when working with FloPy and Python. Flopy will automatically subtract one when loading index variables and add one when writing index variables. - * radius (double) radius for the multi-aquifer well. - * bottom (double) bottom elevation of the multi-aquifer well. The well - bottom is reset to the cell bottom in the lowermost GWF cell - connection in cases where the specified well bottom is above the - bottom of this GWF cell. - * strt (double) starting head for the multi-aquifer well. + * radius (double) radius for the multi-aquifer well. The program will + terminate with an error if the radius is less than or equal to zero. + * bottom (double) bottom elevation of the multi-aquifer well. If + CONDEQN is SPECIFIED, THIEM, SKIN, or COMPOSITE, BOTTOM is set to the + cell bottom in the lowermost GWF cell connection in cases where the + specified well bottom is above the bottom of this GWF cell. If + CONDEQN is MEAN, BOTTOM is set to the lowermost GWF cell connection + screen bottom in cases where the specified well bottom is above this + value. The bottom elevation defines the lowest well head that will be + simulated when the NEWTON UNDER_RELAXATION option is specified in the + GWF model name file. The bottom elevation is also used to calculate + volumetric storage in the well. + * strt (double) starting head for the multi-aquifer well. The program + will terminate with an error if the starting head is less than the + specified well bottom. * condeqn (string) character string that defines the conductance equation that is used to calculate the saturated conductance for the multi-aquifer well. Possible multi-aquifer well CONDEQN strings @@ -207,16 +216,19 @@ class ModflowGwfmaw(mfpackage.MFPackage): automatically subtract one when loading index variables and add one when writing index variables. * scrn_top (double) value that defines the top elevation of the screen - for the multi-aquifer well connection. If the specified SCRN_TOP is - greater than the top of the GWF cell it is set equal to the top of - the cell. SCRN_TOP can be any value if CONDEQN is SPECIFIED, THIEM, - SKIN, or COMPOSITE and SCRN_TOP is set to the top of the cell. + for the multi-aquifer well connection. If CONDEQN is SPECIFIED, + THIEM, SKIN, or COMPOSITE, SCRN_TOP can be any value and is set to + the top of the cell. If CONDEQN is MEAN, SCRN_TOP is set to the + multi-aquifer well connection cell top if the specified value is + greater than the cell top. The program will terminate with an error + if the screen top is less than the screen bottom. * scrn_bot (double) value that defines the bottom elevation of the - screen for the multi-aquifer well connection. If the specified - SCRN_BOT is less than the bottom of the GWF cell it is set equal to - the bottom of the cell. SCRN_BOT can be any value if CONDEQN is - SPECIFIED, THIEM, SKIN, or COMPOSITE and SCRN_BOT is set to the - bottom of the cell. + screen for the multi-aquifer well connection. If CONDEQN is + SPECIFIED, THIEM, SKIN, or COMPOSITE, SCRN_BOT can be any value is + set to the bottom of the cell. If CONDEQN is MEAN, SCRN_BOT is set to + the multi-aquifer well connection cell bottom if the specified value + is less than the cell bottom. The program will terminate with an + error if the screen bottom is greater than the screen top. * hk_skin (double) value that defines the skin (filter pack) hydraulic conductivity (if CONDEQN for the multi-aquifer well is SKIN, CUMULATIVE, or MEAN) or conductance (if CONDEQN for the multi-aquifer @@ -234,8 +246,9 @@ class ModflowGwfmaw(mfpackage.MFPackage): used for these multi-aquifer wells. * radius_skin (double) real value that defines the skin radius (filter pack radius) for the multi-aquifer well. RADIUS_SKIN can be any value - if CONDEQN is SPECIFIED or THIEM. Otherwise, RADIUS_SKIN must be - greater than RADIUS for the multi-aquifer well. + if CONDEQN is SPECIFIED or THIEM. If CONDEQN is SKIN, CUMULATIVE, or + MEAN, the program will terminate with an error if RADIUS_SKIN is less + than or equal to the RADIUS for the multi-aquifer well. perioddata : [wellno, mawsetting] * wellno (integer) integer value that defines the well number associated with the specified PERIOD data on the line. WELLNO must be @@ -281,7 +294,8 @@ class ModflowGwfmaw(mfpackage.MFPackage): wells. If the Options block includes a TIMESERIESFILE entry (see the "Time-Variable Input" section), values can be obtained from a time series by entering the time-series name - in place of a numeric value. + in place of a numeric value. The program will terminate with + an error if WELL_HEAD is less than the bottom of the well. head_limit : [string] * head_limit (string) is the limiting water level (head) in the well, which is the minimum of the well RATE or the well @@ -341,8 +355,8 @@ class ModflowGwfmaw(mfpackage.MFPackage): """ auxiliary = ListTemplateGenerator(("gwf6", "maw", "options", "auxiliary")) - stage_filerecord = ListTemplateGenerator( - ("gwf6", "maw", "options", "stage_filerecord") + head_filerecord = ListTemplateGenerator( + ("gwf6", "maw", "options", "head_filerecord") ) budget_filerecord = ListTemplateGenerator( ("gwf6", "maw", "options", "budget_filerecord") @@ -411,7 +425,7 @@ class ModflowGwfmaw(mfpackage.MFPackage): ], [ "block options", - "name stage_filerecord", + "name head_filerecord", "type record head fileout headfile", "shape", "reader urword", @@ -998,7 +1012,7 @@ def __init__( print_head=None, print_flows=None, save_flows=None, - stage_filerecord=None, + head_filerecord=None, budget_filerecord=None, no_well_storage=None, flow_correction=None, @@ -1027,8 +1041,8 @@ def __init__( self.print_head = self.build_mfdata("print_head", print_head) self.print_flows = self.build_mfdata("print_flows", print_flows) self.save_flows = self.build_mfdata("save_flows", save_flows) - self.stage_filerecord = self.build_mfdata( - "stage_filerecord", stage_filerecord + self.head_filerecord = self.build_mfdata( + "head_filerecord", head_filerecord ) self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord diff --git a/flopy/mf6/modflow/mfgwfsfr.py b/flopy/mf6/modflow/mfgwfsfr.py index 5bcfb9034b..ac311cabfc 100644 --- a/flopy/mf6/modflow/mfgwfsfr.py +++ b/flopy/mf6/modflow/mfgwfsfr.py @@ -143,7 +143,9 @@ class ModflowGwfsfr(mfpackage.MFPackage): Variable Input" section), values can be obtained from a time series by entering the time-series name in place of a numeric value. * ncon (integer) integer value that defines the number of reaches - connected to the reach. + connected to the reach. If a value of zero is specified for NCON an + entry for RNO is still required in the subsequent CONNECTIONDATA + block. * ustrf (double) real value that defines the fraction of upstream flow from each upstream reach that is applied as upstream inflow to the reach. The sum of all USTRF values for all reaches connected to the diff --git a/flopy/mf6/modflow/mfgwt.py b/flopy/mf6/modflow/mfgwt.py new file mode 100644 index 0000000000..e82d611915 --- /dev/null +++ b/flopy/mf6/modflow/mfgwt.py @@ -0,0 +1,130 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfmodel +from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator + + +class ModflowGwt(mfmodel.MFModel): + """ + Modflowgwt defines a gwt model + + Parameters + ---------- + modelname : string + name of the model + model_nam_file : string + relative path to the model name file from model working folder + version : string + version of modflow + exe_name : string + model executable name + model_ws : string + model working folder path + sim : MFSimulation + Simulation that this model is a part of. Model is automatically + added to simulation when it is initialized. + list : string + * list (string) is name of the listing file to create for this GWT + model. If not specified, then the name of the list file will be the + basename of the GWT model name file and the '.lst' extension. For + example, if the GWT name file is called "my.model.nam" then the list + file will be called "my.model.lst". + print_input : boolean + * print_input (boolean) keyword to indicate that the list of all model + stress package information will be written to the listing file + immediately after it is read. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of all model + package flow rates will be printed to the listing file for every + stress period time step in which "BUDGET PRINT" is specified in + Output Control. If there is no Output Control option and + "PRINT_FLOWS" is specified, then flow rates are printed for the last + time step of each stress period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that all model package flow + terms will be written to the file specified with "BUDGET FILEOUT" in + Output Control. + packages : [ftype, fname, pname] + * ftype (string) is the file type, which must be one of the following + character values shown in table~ref{table:ftype}. Ftype may be + entered in any combination of uppercase and lowercase. + * fname (string) is the name of the file containing the package input. + The path to the file should be included if the file is not located in + the folder where the program was run. + * pname (string) is the user-defined name for the package. PNAME is + restricted to 16 characters. No spaces are allowed in PNAME. PNAME + character values are read and stored by the program for stress + packages only. These names may be useful for labeling purposes when + multiple stress packages of the same type are located within a single + GWT Model. If PNAME is specified for a stress package, then PNAME + will be used in the flow budget table in the listing file; it will + also be used for the text entry in the cell-by-cell budget file. + PNAME is case insensitive and is stored in all upper case letters. + + Methods + ------- + load : (simulation : MFSimulationData, model_name : string, + namfile : string, version : string, exe_name : string, + model_ws : string, strict : boolean) : MFSimulation + a class method that loads a model from files + """ + + model_type = "gwt" + + def __init__( + self, + simulation, + modelname="model", + model_nam_file=None, + version="mf6", + exe_name="mf6.exe", + model_rel_path=".", + list=None, + print_input=None, + print_flows=None, + save_flows=None, + packages=None, + **kwargs + ): + super(ModflowGwt, self).__init__( + simulation, + model_type="gwt6", + modelname=modelname, + model_nam_file=model_nam_file, + version=version, + exe_name=exe_name, + model_rel_path=model_rel_path, + **kwargs + ) + + self.name_file.list.set_data(list) + self.name_file.print_input.set_data(print_input) + self.name_file.print_flows.set_data(print_flows) + self.name_file.save_flows.set_data(save_flows) + self.name_file.packages.set_data(packages) + + @classmethod + def load( + cls, + simulation, + structure, + modelname="NewModel", + model_nam_file="modflowtest.nam", + version="mf6", + exe_name="mf6.exe", + strict=True, + model_rel_path=".", + load_only=None, + ): + return mfmodel.MFModel.load_base( + simulation, + structure, + modelname, + model_nam_file, + "gwt", + version, + exe_name, + strict, + model_rel_path, + load_only, + ) diff --git a/flopy/mf6/modflow/mfgwtadv.py b/flopy/mf6/modflow/mfgwtadv.py new file mode 100644 index 0000000000..fc23accb3d --- /dev/null +++ b/flopy/mf6/modflow/mfgwtadv.py @@ -0,0 +1,62 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage + + +class ModflowGwtadv(mfpackage.MFPackage): + """ + ModflowGwtadv defines a adv package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + scheme : string + * scheme (string) scheme used to solve the advection term. Can be + upstream, central, or TVD. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + package_abbr = "gwtadv" + _package_type = "adv" + dfn_file_name = "gwt-adv.dfn" + + dfn = [ + [ + "block options", + "name scheme", + "type string", + "valid central upstream tvd", + "reader urword", + "optional true", + ] + ] + + def __init__( + self, + model, + loading_package=False, + scheme=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtadv, self).__init__( + model, "adv", filename, pname, loading_package, parent_file + ) + + # set up variables + self.scheme = self.build_mfdata("scheme", scheme) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtcnc.py b/flopy/mf6/modflow/mfgwtcnc.py new file mode 100644 index 0000000000..87f43535f4 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtcnc.py @@ -0,0 +1,347 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtcnc(mfpackage.MFPackage): + """ + ModflowGwtcnc defines a cnc package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + auxiliary : [string] + * auxiliary (string) defines an array of one or more auxiliary variable + names. There is no limit on the number of auxiliary variables that + can be provided on this line; however, lists of information provided + in subsequent blocks must have a column of data for each auxiliary + variable name defined here. The number of auxiliary variables + detected on this line determines the value for naux. Comments cannot + be provided anywhere on this line as they will be interpreted as + auxiliary variable names. Auxiliary variables may not be used by the + package, but they will be available for use by other parts of the + program. The program will terminate with an error if auxiliary + variables are specified on more than one line in the options block. + auxmultname : string + * auxmultname (string) name of auxiliary variable to be used as + multiplier of concentration value. + boundnames : boolean + * boundnames (boolean) keyword to indicate that boundary names may be + provided with the list of constant concentration cells. + print_input : boolean + * print_input (boolean) keyword to indicate that the list of constant + concentration information will be written to the listing file + immediately after it is read. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of constant + concentration flow rates will be printed to the listing file for + every stress period time step in which "BUDGET PRINT" is specified in + Output Control. If there is no Output Control option and + "PRINT_FLOWS" is specified, then flow rates are printed for the last + time step of each stress period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that constant concentration + flow terms will be written to the file specified with "BUDGET + FILEOUT" in Output Control. + timeseries : {varname:data} or timeseries data + * Contains data for the ts package. Data can be stored in a dictionary + containing data for the ts package with variable names as keys and + package data as values. Data just for the timeseries variable is also + acceptable. See ts package documentation for more information. + observations : {varname:data} or continuous data + * Contains data for the obs package. Data can be stored in a dictionary + containing data for the obs package with variable names as keys and + package data as values. Data just for the observations variable is + also acceptable. See obs package documentation for more information. + maxbound : integer + * maxbound (integer) integer value specifying the maximum number of + constant concentrations cells that will be specified for use during + any stress period. + stress_period_data : [cellid, conc, aux, boundname] + * cellid ((integer, ...)) is the cell identifier, and depends on the + type of grid that is used for the simulation. For a structured grid + that uses the DIS input file, CELLID is the layer, row, and column. + For a grid that uses the DISV input file, CELLID is the layer and + CELL2D number. If the model uses the unstructured discretization + (DISU) input file, CELLID is the node number for the cell. This + argument is an index variable, which means that it should be treated + as zero-based when working with FloPy and Python. Flopy will + automatically subtract one when loading index variables and add one + when writing index variables. + * conc (double) is the constant concentration value. If the Options + block includes a TIMESERIESFILE entry (see the "Time-Variable Input" + section), values can be obtained from a time series by entering the + time-series name in place of a numeric value. + * aux (double) represents the values of the auxiliary variables for + each constant concentration. The values of auxiliary variables must + be present for each constant concentration. The values must be + specified in the order of the auxiliary variables specified in the + OPTIONS block. If the package supports time series and the Options + block includes a TIMESERIESFILE entry (see the "Time-Variable Input" + section), values can be obtained from a time series by entering the + time-series name in place of a numeric value. + * boundname (string) name of the constant concentration cell. BOUNDNAME + is an ASCII character variable that can contain as many as 40 + characters. If BOUNDNAME contains spaces in it, then the entire name + must be enclosed within single quotes. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + auxiliary = ListTemplateGenerator(("gwt6", "cnc", "options", "auxiliary")) + ts_filerecord = ListTemplateGenerator( + ("gwt6", "cnc", "options", "ts_filerecord") + ) + obs_filerecord = ListTemplateGenerator( + ("gwt6", "cnc", "options", "obs_filerecord") + ) + stress_period_data = ListTemplateGenerator( + ("gwt6", "cnc", "period", "stress_period_data") + ) + package_abbr = "gwtcnc" + _package_type = "cnc" + dfn_file_name = "gwt-cnc.dfn" + + dfn = [ + [ + "block options", + "name auxiliary", + "type string", + "shape (naux)", + "reader urword", + "optional true", + ], + [ + "block options", + "name auxmultname", + "type string", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name boundnames", + "type keyword", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name ts_filerecord", + "type record ts6 filein ts6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package ts", + "construct_data timeseries", + "parameter_name timeseries", + ], + [ + "block options", + "name ts6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name ts6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], + [ + "block options", + "name obs_filerecord", + "type record obs6 filein obs6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package obs", + "construct_data continuous", + "parameter_name observations", + ], + [ + "block options", + "name obs6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name obs6_filename", + "type string", + "preserve_case true", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name maxbound", + "type integer", + "reader urword", + "optional false", + ], + [ + "block period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name stress_period_data", + "type recarray cellid conc aux boundname", + "shape (maxbound)", + "reader urword", + ], + [ + "block period", + "name cellid", + "type integer", + "shape (ncelldim)", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name conc", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name aux", + "type double precision", + "in_record true", + "tagged false", + "shape (naux)", + "reader urword", + "optional true", + "time_series true", + ], + [ + "block period", + "name boundname", + "type string", + "shape", + "tagged false", + "in_record true", + "reader urword", + "optional true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + auxiliary=None, + auxmultname=None, + boundnames=None, + print_input=None, + print_flows=None, + save_flows=None, + timeseries=None, + observations=None, + maxbound=None, + stress_period_data=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtcnc, self).__init__( + model, "cnc", filename, pname, loading_package, parent_file + ) + + # set up variables + self.auxiliary = self.build_mfdata("auxiliary", auxiliary) + self.auxmultname = self.build_mfdata("auxmultname", auxmultname) + self.boundnames = self.build_mfdata("boundnames", boundnames) + self.print_input = self.build_mfdata("print_input", print_input) + self.print_flows = self.build_mfdata("print_flows", print_flows) + self.save_flows = self.build_mfdata("save_flows", save_flows) + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self._obs_filerecord = self.build_mfdata("obs_filerecord", None) + self._obs_package = self.build_child_package( + "obs", observations, "continuous", self._obs_filerecord + ) + self.maxbound = self.build_mfdata("maxbound", maxbound) + self.stress_period_data = self.build_mfdata( + "stress_period_data", stress_period_data + ) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtdis.py b/flopy/mf6/modflow/mfgwtdis.py new file mode 100644 index 0000000000..9c30ceb3ee --- /dev/null +++ b/flopy/mf6/modflow/mfgwtdis.py @@ -0,0 +1,234 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator + + +class ModflowGwtdis(mfpackage.MFPackage): + """ + ModflowGwtdis defines a dis package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + length_units : string + * length_units (string) is the length units used for this model. Values + can be "FEET", "METERS", or "CENTIMETERS". If not specified, the + default is "UNKNOWN". + nogrb : boolean + * nogrb (boolean) keyword to deactivate writing of the binary grid + file. + xorigin : double + * xorigin (double) x-position of the lower-left corner of the model + grid. A default value of zero is assigned if not specified. The value + for XORIGIN does not affect the model simulation, but it is written + to the binary grid file so that postprocessors can locate the grid in + space. + yorigin : double + * yorigin (double) y-position of the lower-left corner of the model + grid. If not specified, then a default value equal to zero is used. + The value for YORIGIN does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + angrot : double + * angrot (double) counter-clockwise rotation angle (in degrees) of the + lower-left corner of the model grid. If not specified, then a default + value of 0.0 is assigned. The value for ANGROT does not affect the + model simulation, but it is written to the binary grid file so that + postprocessors can locate the grid in space. + nlay : integer + * nlay (integer) is the number of layers in the model grid. + nrow : integer + * nrow (integer) is the number of rows in the model grid. + ncol : integer + * ncol (integer) is the number of columns in the model grid. + delr : [double] + * delr (double) is the column spacing in the row direction. + delc : [double] + * delc (double) is the row spacing in the column direction. + top : [double] + * top (double) is the top elevation for each cell in the top model + layer. + botm : [double] + * botm (double) is the bottom elevation for each cell. + idomain : [integer] + * idomain (integer) is an optional array that characterizes the + existence status of a cell. If the IDOMAIN array is not specified, + then all model cells exist within the solution. If the IDOMAIN value + for a cell is 0, the cell does not exist in the simulation. Input and + output values will be read and written for the cell, but internal to + the program, the cell is excluded from the solution. If the IDOMAIN + value for a cell is 1, the cell exists in the simulation. If the + IDOMAIN value for a cell is -1, the cell does not exist in the + simulation. Furthermore, the first existing cell above will be + connected to the first existing cell below. This type of cell is + referred to as a "vertical pass through" cell. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + delr = ArrayTemplateGenerator(("gwt6", "dis", "griddata", "delr")) + delc = ArrayTemplateGenerator(("gwt6", "dis", "griddata", "delc")) + top = ArrayTemplateGenerator(("gwt6", "dis", "griddata", "top")) + botm = ArrayTemplateGenerator(("gwt6", "dis", "griddata", "botm")) + idomain = ArrayTemplateGenerator(("gwt6", "dis", "griddata", "idomain")) + package_abbr = "gwtdis" + _package_type = "dis" + dfn_file_name = "gwt-dis.dfn" + + dfn = [ + [ + "block options", + "name length_units", + "type string", + "reader urword", + "optional true", + ], + [ + "block options", + "name nogrb", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name xorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name yorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name angrot", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block dimensions", + "name nlay", + "type integer", + "reader urword", + "optional false", + "default_value 1", + ], + [ + "block dimensions", + "name nrow", + "type integer", + "reader urword", + "optional false", + "default_value 2", + ], + [ + "block dimensions", + "name ncol", + "type integer", + "reader urword", + "optional false", + "default_value 2", + ], + [ + "block griddata", + "name delr", + "type double precision", + "shape (ncol)", + "reader readarray", + "default_value 1.0", + ], + [ + "block griddata", + "name delc", + "type double precision", + "shape (nrow)", + "reader readarray", + "default_value 1.0", + ], + [ + "block griddata", + "name top", + "type double precision", + "shape (ncol, nrow)", + "reader readarray", + "default_value 1.0", + ], + [ + "block griddata", + "name botm", + "type double precision", + "shape (ncol, nrow, nlay)", + "reader readarray", + "layered true", + "default_value 0.", + ], + [ + "block griddata", + "name idomain", + "type integer", + "shape (ncol, nrow, nlay)", + "reader readarray", + "layered true", + "optional true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + length_units=None, + nogrb=None, + xorigin=None, + yorigin=None, + angrot=None, + nlay=1, + nrow=2, + ncol=2, + delr=1.0, + delc=1.0, + top=1.0, + botm=0.0, + idomain=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtdis, self).__init__( + model, "dis", filename, pname, loading_package, parent_file + ) + + # set up variables + self.length_units = self.build_mfdata("length_units", length_units) + self.nogrb = self.build_mfdata("nogrb", nogrb) + self.xorigin = self.build_mfdata("xorigin", xorigin) + self.yorigin = self.build_mfdata("yorigin", yorigin) + self.angrot = self.build_mfdata("angrot", angrot) + self.nlay = self.build_mfdata("nlay", nlay) + self.nrow = self.build_mfdata("nrow", nrow) + self.ncol = self.build_mfdata("ncol", ncol) + self.delr = self.build_mfdata("delr", delr) + self.delc = self.build_mfdata("delc", delc) + self.top = self.build_mfdata("top", top) + self.botm = self.build_mfdata("botm", botm) + self.idomain = self.build_mfdata("idomain", idomain) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtdisu.py b/flopy/mf6/modflow/mfgwtdisu.py new file mode 100644 index 0000000000..43483dba1a --- /dev/null +++ b/flopy/mf6/modflow/mfgwtdisu.py @@ -0,0 +1,448 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator + + +class ModflowGwtdisu(mfpackage.MFPackage): + """ + ModflowGwtdisu defines a disu package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + length_units : string + * length_units (string) is the length units used for this model. Values + can be "FEET", "METERS", or "CENTIMETERS". If not specified, the + default is "UNKNOWN". + nogrb : boolean + * nogrb (boolean) keyword to deactivate writing of the binary grid + file. + xorigin : double + * xorigin (double) x-position of the origin used for model grid + vertices. This value should be provided in a real-world coordinate + system. A default value of zero is assigned if not specified. The + value for XORIGIN does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + yorigin : double + * yorigin (double) y-position of the origin used for model grid + vertices. This value should be provided in a real-world coordinate + system. If not specified, then a default value equal to zero is used. + The value for YORIGIN does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + angrot : double + * angrot (double) counter-clockwise rotation angle (in degrees) of the + model grid coordinate system relative to a real-world coordinate + system. If not specified, then a default value of 0.0 is assigned. + The value for ANGROT does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + nodes : integer + * nodes (integer) is the number of cells in the model grid. + nja : integer + * nja (integer) is the sum of the number of connections and NODES. When + calculating the total number of connections, the connection between + cell n and cell m is considered to be different from the connection + between cell m and cell n. Thus, NJA is equal to the total number of + connections, including n to m and m to n, and the total number of + cells. + nvert : integer + * nvert (integer) is the total number of (x, y) vertex pairs used to + define the plan-view shape of each cell in the model grid. If NVERT + is not specified or is specified as zero, then the VERTICES and + CELL2D blocks below are not read. NVERT and the accompanying VERTICES + and CELL2D blocks should be specified for most simulations. If the + XT3D or SAVE_SPECIFIC_DISCHARGE options are specified in the NPF + Package, then this information is required. + top : [double] + * top (double) is the top elevation for each cell in the model grid. + bot : [double] + * bot (double) is the bottom elevation for each cell. + area : [double] + * area (double) is the cell surface area (in plan view). + iac : [integer] + * iac (integer) is the number of connections (plus 1) for each cell. + The sum of all the entries in IAC must be equal to NJA. + ja : [integer] + * ja (integer) is a list of cell number (n) followed by its connecting + cell numbers (m) for each of the m cells connected to cell n. The + number of values to provide for cell n is IAC(n). This list is + sequentially provided for the first to the last cell. The first value + in the list must be cell n itself, and the remaining cells must be + listed in an increasing order (sorted from lowest number to highest). + Note that the cell and its connections are only supplied for the GWF + cells and their connections to the other GWF cells. Also note that + the JA list input may be divided such that every node and its + connectivity list can be on a separate line for ease in readability + of the file. To further ease readability of the file, the node number + of the cell whose connectivity is subsequently listed, may be + expressed as a negative number, the sign of which is subsequently + converted to positive by the code. This argument is an index + variable, which means that it should be treated as zero-based when + working with FloPy and Python. Flopy will automatically subtract one + when loading index variables and add one when writing index + variables. + ihc : [integer] + * ihc (integer) is an index array indicating the direction between node + n and all of its m connections. If IHC = 0 then cell n and cell m are + connected in the vertical direction. Cell n overlies cell m if the + cell number for n is less than m; cell m overlies cell n if the cell + number for m is less than n. If IHC = 1 then cell n and cell m are + connected in the horizontal direction. If IHC = 2 then cell n and + cell m are connected in the horizontal direction, and the connection + is vertically staggered. A vertically staggered connection is one in + which a cell is horizontally connected to more than one cell in a + horizontal connection. + cl12 : [double] + * cl12 (double) is the array containing connection lengths between the + center of cell n and the shared face with each adjacent m cell. + hwva : [double] + * hwva (double) is a symmetric array of size NJA. For horizontal + connections, entries in HWVA are the horizontal width perpendicular + to flow. For vertical connections, entries in HWVA are the vertical + area for flow. Thus, values in the HWVA array contain dimensions of + both length and area. Entries in the HWVA array have a one-to-one + correspondence with the connections specified in the JA array. + Likewise, there is a one-to-one correspondence between entries in the + HWVA array and entries in the IHC array, which specifies the + connection type (horizontal or vertical). Entries in the HWVA array + must be symmetric; the program will terminate with an error if the + value for HWVA for an n to m connection does not equal the value for + HWVA for the corresponding n to m connection. + angldegx : [double] + * angldegx (double) is the angle (in degrees) between the horizontal + x-axis and the outward normal to the face between a cell and its + connecting cells. The angle varies between zero and 360.0 degrees, + where zero degrees points in the positive x-axis direction, and 90 + degrees points in the positive y-axis direction. ANGLDEGX is only + needed if horizontal anisotropy is specified in the NPF Package, if + the XT3D option is used in the NPF Package, or if the + SAVE_SPECIFIC_DISCHARGE option is specifed in the NPF Package. + ANGLDEGX does not need to be specified if these conditions are not + met. ANGLDEGX is of size NJA; values specified for vertical + connections and for the diagonal position are not used. Note that + ANGLDEGX is read in degrees, which is different from MODFLOW-USG, + which reads a similar variable (ANGLEX) in radians. + vertices : [iv, xv, yv] + * iv (integer) is the vertex number. Records in the VERTICES block must + be listed in consecutive order from 1 to NVERT. This argument is an + index variable, which means that it should be treated as zero-based + when working with FloPy and Python. Flopy will automatically subtract + one when loading index variables and add one when writing index + variables. + * xv (double) is the x-coordinate for the vertex. + * yv (double) is the y-coordinate for the vertex. + cell2d : [icell2d, xc, yc, ncvert, icvert] + * icell2d (integer) is the cell2d number. Records in the CELL2D block + must be listed in consecutive order from 1 to NODES. This argument is + an index variable, which means that it should be treated as zero- + based when working with FloPy and Python. Flopy will automatically + subtract one when loading index variables and add one when writing + index variables. + * xc (double) is the x-coordinate for the cell center. + * yc (double) is the y-coordinate for the cell center. + * ncvert (integer) is the number of vertices required to define the + cell. There may be a different number of vertices for each cell. + * icvert (integer) is an array of integer values containing vertex + numbers (in the VERTICES block) used to define the cell. Vertices + must be listed in clockwise order. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + top = ArrayTemplateGenerator(("gwt6", "disu", "griddata", "top")) + bot = ArrayTemplateGenerator(("gwt6", "disu", "griddata", "bot")) + area = ArrayTemplateGenerator(("gwt6", "disu", "griddata", "area")) + iac = ArrayTemplateGenerator(("gwt6", "disu", "connectiondata", "iac")) + ja = ArrayTemplateGenerator(("gwt6", "disu", "connectiondata", "ja")) + ihc = ArrayTemplateGenerator(("gwt6", "disu", "connectiondata", "ihc")) + cl12 = ArrayTemplateGenerator(("gwt6", "disu", "connectiondata", "cl12")) + hwva = ArrayTemplateGenerator(("gwt6", "disu", "connectiondata", "hwva")) + angldegx = ArrayTemplateGenerator( + ("gwt6", "disu", "connectiondata", "angldegx") + ) + vertices = ListTemplateGenerator(("gwt6", "disu", "vertices", "vertices")) + cell2d = ListTemplateGenerator(("gwt6", "disu", "cell2d", "cell2d")) + package_abbr = "gwtdisu" + _package_type = "disu" + dfn_file_name = "gwt-disu.dfn" + + dfn = [ + [ + "block options", + "name length_units", + "type string", + "reader urword", + "optional true", + ], + [ + "block options", + "name nogrb", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name xorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name yorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name angrot", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block dimensions", + "name nodes", + "type integer", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name nja", + "type integer", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name nvert", + "type integer", + "reader urword", + "optional true", + ], + [ + "block griddata", + "name top", + "type double precision", + "shape (nodes)", + "reader readarray", + ], + [ + "block griddata", + "name bot", + "type double precision", + "shape (nodes)", + "reader readarray", + ], + [ + "block griddata", + "name area", + "type double precision", + "shape (nodes)", + "reader readarray", + ], + [ + "block connectiondata", + "name iac", + "type integer", + "shape (nodes)", + "reader readarray", + ], + [ + "block connectiondata", + "name ja", + "type integer", + "shape (nja)", + "reader readarray", + "numeric_index true", + ], + [ + "block connectiondata", + "name ihc", + "type integer", + "shape (nja)", + "reader readarray", + ], + [ + "block connectiondata", + "name cl12", + "type double precision", + "shape (nja)", + "reader readarray", + ], + [ + "block connectiondata", + "name hwva", + "type double precision", + "shape (nja)", + "reader readarray", + ], + [ + "block connectiondata", + "name angldegx", + "type double precision", + "optional true", + "shape (nja)", + "reader readarray", + ], + [ + "block vertices", + "name vertices", + "type recarray iv xv yv", + "reader urword", + "optional false", + ], + [ + "block vertices", + "name iv", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + "numeric_index true", + ], + [ + "block vertices", + "name xv", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block vertices", + "name yv", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name cell2d", + "type recarray icell2d xc yc ncvert icvert", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name icell2d", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + "numeric_index true", + ], + [ + "block cell2d", + "name xc", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name yc", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name ncvert", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name icvert", + "type integer", + "shape (ncvert)", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + ] + + def __init__( + self, + model, + loading_package=False, + length_units=None, + nogrb=None, + xorigin=None, + yorigin=None, + angrot=None, + nodes=None, + nja=None, + nvert=None, + top=None, + bot=None, + area=None, + iac=None, + ja=None, + ihc=None, + cl12=None, + hwva=None, + angldegx=None, + vertices=None, + cell2d=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtdisu, self).__init__( + model, "disu", filename, pname, loading_package, parent_file + ) + + # set up variables + self.length_units = self.build_mfdata("length_units", length_units) + self.nogrb = self.build_mfdata("nogrb", nogrb) + self.xorigin = self.build_mfdata("xorigin", xorigin) + self.yorigin = self.build_mfdata("yorigin", yorigin) + self.angrot = self.build_mfdata("angrot", angrot) + self.nodes = self.build_mfdata("nodes", nodes) + self.nja = self.build_mfdata("nja", nja) + self.nvert = self.build_mfdata("nvert", nvert) + self.top = self.build_mfdata("top", top) + self.bot = self.build_mfdata("bot", bot) + self.area = self.build_mfdata("area", area) + self.iac = self.build_mfdata("iac", iac) + self.ja = self.build_mfdata("ja", ja) + self.ihc = self.build_mfdata("ihc", ihc) + self.cl12 = self.build_mfdata("cl12", cl12) + self.hwva = self.build_mfdata("hwva", hwva) + self.angldegx = self.build_mfdata("angldegx", angldegx) + self.vertices = self.build_mfdata("vertices", vertices) + self.cell2d = self.build_mfdata("cell2d", cell2d) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtdisv.py b/flopy/mf6/modflow/mfgwtdisv.py new file mode 100644 index 0000000000..d62dee7d24 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtdisv.py @@ -0,0 +1,331 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator + + +class ModflowGwtdisv(mfpackage.MFPackage): + """ + ModflowGwtdisv defines a disv package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + length_units : string + * length_units (string) is the length units used for this model. Values + can be "FEET", "METERS", or "CENTIMETERS". If not specified, the + default is "UNKNOWN". + nogrb : boolean + * nogrb (boolean) keyword to deactivate writing of the binary grid + file. + xorigin : double + * xorigin (double) x-position of the origin used for model grid + vertices. This value should be provided in a real-world coordinate + system. A default value of zero is assigned if not specified. The + value for XORIGIN does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + yorigin : double + * yorigin (double) y-position of the origin used for model grid + vertices. This value should be provided in a real-world coordinate + system. If not specified, then a default value equal to zero is used. + The value for YORIGIN does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + angrot : double + * angrot (double) counter-clockwise rotation angle (in degrees) of the + model grid coordinate system relative to a real-world coordinate + system. If not specified, then a default value of 0.0 is assigned. + The value for ANGROT does not affect the model simulation, but it is + written to the binary grid file so that postprocessors can locate the + grid in space. + nlay : integer + * nlay (integer) is the number of layers in the model grid. + ncpl : integer + * ncpl (integer) is the number of cells per layer. This is a constant + value for the grid and it applies to all layers. + nvert : integer + * nvert (integer) is the total number of (x, y) vertex pairs used to + characterize the horizontal configuration of the model grid. + top : [double] + * top (double) is the top elevation for each cell in the top model + layer. + botm : [double] + * botm (double) is the bottom elevation for each cell. + idomain : [integer] + * idomain (integer) is an optional array that characterizes the + existence status of a cell. If the IDOMAIN array is not specified, + then all model cells exist within the solution. If the IDOMAIN value + for a cell is 0, the cell does not exist in the simulation. Input and + output values will be read and written for the cell, but internal to + the program, the cell is excluded from the solution. If the IDOMAIN + value for a cell is 1, the cell exists in the simulation. If the + IDOMAIN value for a cell is -1, the cell does not exist in the + simulation. Furthermore, the first existing cell above will be + connected to the first existing cell below. This type of cell is + referred to as a "vertical pass through" cell. + vertices : [iv, xv, yv] + * iv (integer) is the vertex number. Records in the VERTICES block must + be listed in consecutive order from 1 to NVERT. This argument is an + index variable, which means that it should be treated as zero-based + when working with FloPy and Python. Flopy will automatically subtract + one when loading index variables and add one when writing index + variables. + * xv (double) is the x-coordinate for the vertex. + * yv (double) is the y-coordinate for the vertex. + cell2d : [icell2d, xc, yc, ncvert, icvert] + * icell2d (integer) is the CELL2D number. Records in the CELL2D block + must be listed in consecutive order from the first to the last. This + argument is an index variable, which means that it should be treated + as zero-based when working with FloPy and Python. Flopy will + automatically subtract one when loading index variables and add one + when writing index variables. + * xc (double) is the x-coordinate for the cell center. + * yc (double) is the y-coordinate for the cell center. + * ncvert (integer) is the number of vertices required to define the + cell. There may be a different number of vertices for each cell. + * icvert (integer) is an array of integer values containing vertex + numbers (in the VERTICES block) used to define the cell. Vertices + must be listed in clockwise order. Cells that are connected must + share vertices. This argument is an index variable, which means that + it should be treated as zero-based when working with FloPy and + Python. Flopy will automatically subtract one when loading index + variables and add one when writing index variables. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + top = ArrayTemplateGenerator(("gwt6", "disv", "griddata", "top")) + botm = ArrayTemplateGenerator(("gwt6", "disv", "griddata", "botm")) + idomain = ArrayTemplateGenerator(("gwt6", "disv", "griddata", "idomain")) + vertices = ListTemplateGenerator(("gwt6", "disv", "vertices", "vertices")) + cell2d = ListTemplateGenerator(("gwt6", "disv", "cell2d", "cell2d")) + package_abbr = "gwtdisv" + _package_type = "disv" + dfn_file_name = "gwt-disv.dfn" + + dfn = [ + [ + "block options", + "name length_units", + "type string", + "reader urword", + "optional true", + ], + [ + "block options", + "name nogrb", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name xorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name yorigin", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block options", + "name angrot", + "type double precision", + "reader urword", + "optional true", + ], + [ + "block dimensions", + "name nlay", + "type integer", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name ncpl", + "type integer", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name nvert", + "type integer", + "reader urword", + "optional false", + ], + [ + "block griddata", + "name top", + "type double precision", + "shape (ncpl)", + "reader readarray", + ], + [ + "block griddata", + "name botm", + "type double precision", + "shape (nlay, ncpl)", + "reader readarray", + "layered true", + ], + [ + "block griddata", + "name idomain", + "type integer", + "shape (nlay, ncpl)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block vertices", + "name vertices", + "type recarray iv xv yv", + "reader urword", + "optional false", + ], + [ + "block vertices", + "name iv", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + "numeric_index true", + ], + [ + "block vertices", + "name xv", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block vertices", + "name yv", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name cell2d", + "type recarray icell2d xc yc ncvert icvert", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name icell2d", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + "numeric_index true", + ], + [ + "block cell2d", + "name xc", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name yc", + "type double precision", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name ncvert", + "type integer", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block cell2d", + "name icvert", + "type integer", + "shape (ncvert)", + "in_record true", + "tagged false", + "reader urword", + "optional false", + "numeric_index true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + length_units=None, + nogrb=None, + xorigin=None, + yorigin=None, + angrot=None, + nlay=None, + ncpl=None, + nvert=None, + top=None, + botm=None, + idomain=None, + vertices=None, + cell2d=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtdisv, self).__init__( + model, "disv", filename, pname, loading_package, parent_file + ) + + # set up variables + self.length_units = self.build_mfdata("length_units", length_units) + self.nogrb = self.build_mfdata("nogrb", nogrb) + self.xorigin = self.build_mfdata("xorigin", xorigin) + self.yorigin = self.build_mfdata("yorigin", yorigin) + self.angrot = self.build_mfdata("angrot", angrot) + self.nlay = self.build_mfdata("nlay", nlay) + self.ncpl = self.build_mfdata("ncpl", ncpl) + self.nvert = self.build_mfdata("nvert", nvert) + self.top = self.build_mfdata("top", top) + self.botm = self.build_mfdata("botm", botm) + self.idomain = self.build_mfdata("idomain", idomain) + self.vertices = self.build_mfdata("vertices", vertices) + self.cell2d = self.build_mfdata("cell2d", cell2d) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtdsp.py b/flopy/mf6/modflow/mfgwtdsp.py new file mode 100644 index 0000000000..d5a119d537 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtdsp.py @@ -0,0 +1,175 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator + + +class ModflowGwtdsp(mfpackage.MFPackage): + """ + ModflowGwtdsp defines a dsp package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + xt3d_off : boolean + * xt3d_off (boolean) deactivate the xt3d method to and use the faster + and less accurate approximation. This option may provide a fast and + accurate solution under some circumstances, such as when flow aligns + with the model grid, there is no mechanical dispersion, or when the + longitudinal and transverse dispersivities are equal. This option may + also be used to assess the computational demand of the XT3D approach + by noting the run time differences with and without this option on. + xt3d_rhs : boolean + * xt3d_rhs (boolean) add xt3d terms to right-hand side, when possible. + This option uses less memory, but may require more iterations. + diffc : [double] + * diffc (double) molecular diffusion coefficient. + alh : [double] + * alh (double) longitudinal dispersivity in horizontal direction. If + mechanical dispersion is represented (by specifying any dispersivity + values) then this array is required. + alv : [double] + * alv (double) longitudinal dispersivity in vertical direction. If this + value is not specified and mechanical dispersion is represented, then + this array is set equal to ALH. + ath1 : [double] + * ath1 (double) transverse dispersivity in horizontal direction. If + mechanical dispersion is represented (by specifying any dispersivity + values) then this array is required. + ath2 : [double] + * ath2 (double) transverse dispersivity in horizontal direction. If + this value is not specified and mechanical dispersion is represented, + then this array is set equal to ATH1. + atv : [double] + * atv (double) transverse dispersivity when flow is in vertical + direction. If this value is not specified and mechanical dispersion + is represented, then this array is set equal to ATH2. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + diffc = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "diffc")) + alh = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "alh")) + alv = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "alv")) + ath1 = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "ath1")) + ath2 = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "ath2")) + atv = ArrayTemplateGenerator(("gwt6", "dsp", "griddata", "atv")) + package_abbr = "gwtdsp" + _package_type = "dsp" + dfn_file_name = "gwt-dsp.dfn" + + dfn = [ + [ + "block options", + "name xt3d_off", + "type keyword", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name xt3d_rhs", + "type keyword", + "shape", + "reader urword", + "optional true", + ], + [ + "block griddata", + "name diffc", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name alh", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name alv", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name ath1", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name ath2", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name atv", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + xt3d_off=None, + xt3d_rhs=None, + diffc=None, + alh=None, + alv=None, + ath1=None, + ath2=None, + atv=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtdsp, self).__init__( + model, "dsp", filename, pname, loading_package, parent_file + ) + + # set up variables + self.xt3d_off = self.build_mfdata("xt3d_off", xt3d_off) + self.xt3d_rhs = self.build_mfdata("xt3d_rhs", xt3d_rhs) + self.diffc = self.build_mfdata("diffc", diffc) + self.alh = self.build_mfdata("alh", alh) + self.alv = self.build_mfdata("alv", alv) + self.ath1 = self.build_mfdata("ath1", ath1) + self.ath2 = self.build_mfdata("ath2", ath2) + self.atv = self.build_mfdata("atv", atv) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtfmi.py b/flopy/mf6/modflow/mfgwtfmi.py new file mode 100644 index 0000000000..5a0c3b7e94 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtfmi.py @@ -0,0 +1,114 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtfmi(mfpackage.MFPackage): + """ + ModflowGwtfmi defines a fmi package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + flow_imbalance_correction : boolean + * flow_imbalance_correction (boolean) correct for an imbalance in flows + by assuming that any residual flow error comes in or leaves at the + concentration of the cell. + packagedata : [flowtype, fname] + * flowtype (string) is the word GWFBUDGET, GWFHEAD, GWFMOVER or the + name of an advanced GWF stress package. If GWFBUDGET is specified, + then the corresponding file must be a budget file from a previous GWF + Model run. If an advanced GWF stress package name appears then the + corresponding file must be the budget file saved by a LAK, SFR, MAW + or UZF Package. + * fname (string) is the name of the file containing flows. The path to + the file should be included if the file is not located in the folder + where the program was run. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + packagedata = ListTemplateGenerator( + ("gwt6", "fmi", "packagedata", "packagedata") + ) + package_abbr = "gwtfmi" + _package_type = "fmi" + dfn_file_name = "gwt-fmi.dfn" + + dfn = [ + [ + "block options", + "name flow_imbalance_correction", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block packagedata", + "name packagedata", + "type recarray flowtype filein fname", + "reader urword", + "optional false", + ], + [ + "block packagedata", + "name flowtype", + "in_record true", + "type string", + "tagged false", + "reader urword", + ], + [ + "block packagedata", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block packagedata", + "name fname", + "in_record true", + "type string", + "preserve_case true", + "tagged false", + "reader urword", + ], + ] + + def __init__( + self, + model, + loading_package=False, + flow_imbalance_correction=None, + packagedata=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtfmi, self).__init__( + model, "fmi", filename, pname, loading_package, parent_file + ) + + # set up variables + self.flow_imbalance_correction = self.build_mfdata( + "flow_imbalance_correction", flow_imbalance_correction + ) + self.packagedata = self.build_mfdata("packagedata", packagedata) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtic.py b/flopy/mf6/modflow/mfgwtic.py new file mode 100644 index 0000000000..aa8c60c6dc --- /dev/null +++ b/flopy/mf6/modflow/mfgwtic.py @@ -0,0 +1,71 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator + + +class ModflowGwtic(mfpackage.MFPackage): + """ + ModflowGwtic defines a ic package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + strt : [double] + * strt (double) is the initial (starting) concentration---that is, + concentration at the beginning of the GWT Model simulation. STRT must + be specified for all simulations, including steady-state simulations. + One value is read for every model cell. For simulations in which the + first stress period is steady state, the values used for STRT + generally do not affect the simulation. The execution time, however, + will be less if STRT includes concentrations that are close to the + steady-state solution. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + strt = ArrayTemplateGenerator(("gwt6", "ic", "griddata", "strt")) + package_abbr = "gwtic" + _package_type = "ic" + dfn_file_name = "gwt-ic.dfn" + + dfn = [ + [ + "block griddata", + "name strt", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "default_value 0.0", + ] + ] + + def __init__( + self, + model, + loading_package=False, + strt=0.0, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtic, self).__init__( + model, "ic", filename, pname, loading_package, parent_file + ) + + # set up variables + self.strt = self.build_mfdata("strt", strt) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtist.py b/flopy/mf6/modflow/mfgwtist.py new file mode 100644 index 0000000000..0450f67d9d --- /dev/null +++ b/flopy/mf6/modflow/mfgwtist.py @@ -0,0 +1,361 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator + + +class ModflowGwtist(mfpackage.MFPackage): + """ + ModflowGwtist defines a ist package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + save_flows : boolean + * save_flows (boolean) keyword to indicate that IST flow terms will be + written to the file specified with "BUDGET FILEOUT" in Output + Control. + sorbtion : boolean + * sorbtion (boolean) is a text keyword to indicate that sorbtion will + be activated. Use of this keyword requires that BULK_DENSITY and + DISTCOEF are specified in the GRIDDATA block. + first_order_decay : boolean + * first_order_decay (boolean) is a text keyword to indicate that first- + order decay will occur. Use of this keyword requires that DECAY and + DECAY_SORBED (if sorbtion is active) are specified in the GRIDDATA + block. + zero_order_decay : boolean + * zero_order_decay (boolean) is a text keyword to indicate that zero- + order decay will occur. Use of this keyword requires that DECAY and + DECAY_SORBED (if sorbtion is active) are specified in the GRIDDATA + block. + cim_filerecord : [cimfile] + * cimfile (string) name of the output file to write immobile + concentrations. + cimprintrecord : [columns, width, digits, format] + * columns (integer) number of columns for writing data. + * width (integer) width for writing each number. + * digits (integer) number of digits to use for writing a number. + * format (string) write format can be EXPONENTIAL, FIXED, GENERAL, or + SCIENTIFIC. + cim : [double] + * cim (double) initial concentration of the immobile domain in mass per + length cubed. If CIM is not specified, then it is assumed to be zero. + thetaim : [double] + * thetaim (double) porosity of the immobile domain specified as the + volume of immobile pore space per total volume (dimensionless). + zetaim : [double] + * zetaim (double) mass transfer rate coefficient between the mobile and + immobile domains, in dimensions of per time. + decay : [double] + * decay (double) is the rate coefficient for first or zero-order decay + for the aqueous phase of the immobile domain. A negative value + indicates solute production. The dimensions of decay for first-order + decay is one over time. The dimensions of decay for zero-order decay + is mass per length cubed per time. decay will have no affect on + simulation results unless either first- or zero-order decay is + specified in the options block. + decay_sorbed : [double] + * decay_sorbed (double) is the rate coefficient for first or zero-order + decay for the sorbed phase of the immobile domain. A negative value + indicates solute production. The dimensions of decay_sorbed for + first-order decay is one over time. The dimensions of decay_sorbed + for zero-order decay is mass of solute per mass of aquifer per time. + If decay_sorbed is not specified and both decay and sorbtion are + active, then the sorbed decay rate will be set equal to the aqueous + decay rate. decay_sorbed will have no affect on simulation results + unless the SORPTION keyword and either first- or zero-order decay are + specified in the options block. + bulk_density : [double] + * bulk_density (double) is the bulk density of the aquifer in mass per + length cubed. bulk_density will have no affect on simulation results + unless the SORBTION keyword is specified in the options block. + distcoef : [double] + * distcoef (double) is the distribution coefficient for the + equilibrium-controlled linear sorption isotherm in dimensions of + length cubed per mass. distcoef will have no affect on simulation + results unless the SORBTION keyword is specified in the options + block. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + cim_filerecord = ListTemplateGenerator( + ("gwt6", "ist", "options", "cim_filerecord") + ) + cimprintrecord = ListTemplateGenerator( + ("gwt6", "ist", "options", "cimprintrecord") + ) + cim = ArrayTemplateGenerator(("gwt6", "ist", "griddata", "cim")) + thetaim = ArrayTemplateGenerator(("gwt6", "ist", "griddata", "thetaim")) + zetaim = ArrayTemplateGenerator(("gwt6", "ist", "griddata", "zetaim")) + decay = ArrayTemplateGenerator(("gwt6", "ist", "griddata", "decay")) + decay_sorbed = ArrayTemplateGenerator( + ("gwt6", "ist", "griddata", "decay_sorbed") + ) + bulk_density = ArrayTemplateGenerator( + ("gwt6", "ist", "griddata", "bulk_density") + ) + distcoef = ArrayTemplateGenerator(("gwt6", "ist", "griddata", "distcoef")) + package_abbr = "gwtist" + _package_type = "ist" + dfn_file_name = "gwt-ist.dfn" + + dfn = [ + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name sorbtion", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name first_order_decay", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name zero_order_decay", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name cim_filerecord", + "type record cim fileout cimfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name cim", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name fileout", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name cimfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name cimprintrecord", + "type record cim print_format formatrecord", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_format", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name formatrecord", + "type record columns width digits format", + "shape", + "in_record true", + "reader urword", + "tagged", + "optional false", + ], + [ + "block options", + "name columns", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name width", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name digits", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name format", + "type string", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block griddata", + "name cim", + "type double precision", + "shape (nodes)", + "reader readarray", + "optional true", + "layered true", + ], + [ + "block griddata", + "name thetaim", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + ], + [ + "block griddata", + "name zetaim", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + ], + [ + "block griddata", + "name decay", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name decay_sorbed", + "type double precision", + "shape (nodes)", + "reader readarray", + "optional true", + "layered true", + ], + [ + "block griddata", + "name bulk_density", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + ], + [ + "block griddata", + "name distcoef", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + save_flows=None, + sorbtion=None, + first_order_decay=None, + zero_order_decay=None, + cim_filerecord=None, + cimprintrecord=None, + cim=None, + thetaim=None, + zetaim=None, + decay=None, + decay_sorbed=None, + bulk_density=None, + distcoef=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtist, self).__init__( + model, "ist", filename, pname, loading_package, parent_file + ) + + # set up variables + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.sorbtion = self.build_mfdata("sorbtion", sorbtion) + self.first_order_decay = self.build_mfdata( + "first_order_decay", first_order_decay + ) + self.zero_order_decay = self.build_mfdata( + "zero_order_decay", zero_order_decay + ) + self.cim_filerecord = self.build_mfdata( + "cim_filerecord", cim_filerecord + ) + self.cimprintrecord = self.build_mfdata( + "cimprintrecord", cimprintrecord + ) + self.cim = self.build_mfdata("cim", cim) + self.thetaim = self.build_mfdata("thetaim", thetaim) + self.zetaim = self.build_mfdata("zetaim", zetaim) + self.decay = self.build_mfdata("decay", decay) + self.decay_sorbed = self.build_mfdata("decay_sorbed", decay_sorbed) + self.bulk_density = self.build_mfdata("bulk_density", bulk_density) + self.distcoef = self.build_mfdata("distcoef", distcoef) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtlkt.py b/flopy/mf6/modflow/mfgwtlkt.py new file mode 100644 index 0000000000..b1e127552e --- /dev/null +++ b/flopy/mf6/modflow/mfgwtlkt.py @@ -0,0 +1,669 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtlkt(mfpackage.MFPackage): + """ + ModflowGwtlkt defines a lkt package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + flow_package_name : string + * flow_package_name (string) keyword to specify the name of the + corresponding flow package. If not specified, then the corresponding + flow package must have the same name as this advanced transport + package (the name associated with this package in the GWT name file). + auxiliary : [string] + * auxiliary (string) defines an array of one or more auxiliary variable + names. There is no limit on the number of auxiliary variables that + can be provided on this line; however, lists of information provided + in subsequent blocks must have a column of data for each auxiliary + variable name defined here. The number of auxiliary variables + detected on this line determines the value for naux. Comments cannot + be provided anywhere on this line as they will be interpreted as + auxiliary variable names. Auxiliary variables may not be used by the + package, but they will be available for use by other parts of the + program. The program will terminate with an error if auxiliary + variables are specified on more than one line in the options block. + flow_package_auxiliary_name : string + * flow_package_auxiliary_name (string) keyword to specify the name of + an auxiliary variable in the corresponding flow package. If + specified, then the simulated concentrations from this advanced + transport package will be copied into the auxiliary variable + specified with this name. Note that the flow package must have an + auxiliary variable with this name or the program will terminate with + an error. If the flows for this advanced transport package are read + from a file, then this option will have no affect. + boundnames : boolean + * boundnames (boolean) keyword to indicate that boundary names may be + provided with the list of lake cells. + print_input : boolean + * print_input (boolean) keyword to indicate that the list of lake + information will be written to the listing file immediately after it + is read. + print_concentration : boolean + * print_concentration (boolean) keyword to indicate that the list of + lake concentration will be printed to the listing file for every + stress period in which "HEAD PRINT" is specified in Output Control. + If there is no Output Control option and PRINT_CONCENTRATION is + specified, then concentration are printed for the last time step of + each stress period. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of lake flow + rates will be printed to the listing file for every stress period + time step in which "BUDGET PRINT" is specified in Output Control. If + there is no Output Control option and "PRINT_FLOWS" is specified, + then flow rates are printed for the last time step of each stress + period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that lake flow terms will be + written to the file specified with "BUDGET FILEOUT" in Output + Control. + concentration_filerecord : [concfile] + * concfile (string) name of the binary output file to write + concentration information. + budget_filerecord : [budgetfile] + * budgetfile (string) name of the binary output file to write budget + information. + timeseries : {varname:data} or timeseries data + * Contains data for the ts package. Data can be stored in a dictionary + containing data for the ts package with variable names as keys and + package data as values. Data just for the timeseries variable is also + acceptable. See ts package documentation for more information. + observations : {varname:data} or continuous data + * Contains data for the obs package. Data can be stored in a dictionary + containing data for the obs package with variable names as keys and + package data as values. Data just for the observations variable is + also acceptable. See obs package documentation for more information. + packagedata : [lakeno, strt, aux, boundname] + * lakeno (integer) integer value that defines the lake number + associated with the specified PACKAGEDATA data on the line. LAKENO + must be greater than zero and less than or equal to NLAKES. Lake + information must be specified for every lake or the program will + terminate with an error. The program will also terminate with an + error if information for a lake is specified more than once. This + argument is an index variable, which means that it should be treated + as zero-based when working with FloPy and Python. Flopy will + automatically subtract one when loading index variables and add one + when writing index variables. + * strt (double) real value that defines the starting concentration for + the lake. + * aux (double) represents the values of the auxiliary variables for + each lake. The values of auxiliary variables must be present for each + lake. The values must be specified in the order of the auxiliary + variables specified in the OPTIONS block. If the package supports + time series and the Options block includes a TIMESERIESFILE entry + (see the "Time-Variable Input" section), values can be obtained from + a time series by entering the time-series name in place of a numeric + value. + * boundname (string) name of the lake cell. BOUNDNAME is an ASCII + character variable that can contain as many as 40 characters. If + BOUNDNAME contains spaces in it, then the entire name must be + enclosed within single quotes. + lakeperioddata : [lakeno, laksetting] + * lakeno (integer) integer value that defines the lake number + associated with the specified PERIOD data on the line. LAKENO must be + greater than zero and less than or equal to NLAKES. This argument is + an index variable, which means that it should be treated as zero- + based when working with FloPy and Python. Flopy will automatically + subtract one when loading index variables and add one when writing + index variables. + * laksetting (keystring) line of information that is parsed into a + keyword and values. Keyword values that can be used to start the + LAKSETTING string include: STATUS, CONCENTRATION, RAINFALL, + EVAPORATION, RUNOFF, and AUXILIARY. These settings are used to assign + the concentration of associated with the corresponding flow terms. + Concentrations cannot be specified for all flow terms. For example, + the Lake Package supports a "WITHDRAWAL" flow term. If this + withdrawal term is active, then water will be withdrawn from the lake + at the calculated concentration of the lake. + status : [string] + * status (string) keyword option to define lake status. STATUS + can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is + ACTIVE, which means that concentration will be calculated for + the lake. If a lake is inactive, then there will be no solute + mass fluxes into or out of the lake and the inactive value + will be written for the lake concentration. If a lake is + constant, then the concentration for the lake will be fixed + at the user specified value. + concentration : [string] + * concentration (string) real or character value that defines + the concentration for the lake. The specified CONCENTRATION + is only applied if the lake is a constant concentration lake. + If the Options block includes a TIMESERIESFILE entry (see the + "Time-Variable Input" section), values can be obtained from a + time series by entering the time-series name in place of a + numeric value. + rainfall : [string] + * rainfall (string) real or character value that defines the + rainfall solute concentration :math:`(ML^{-3})` for the lake. + If the Options block includes a TIMESERIESFILE entry (see the + "Time-Variable Input" section), values can be obtained from a + time series by entering the time-series name in place of a + numeric value. + evaporation : [string] + * evaporation (string) real or character value that defines the + concentration of evaporated water :math:`(ML^{-3})` for the + lake. If this concentration value is larger than the + simulated concentration in the lake, then the evaporated + water will be removed at the same concentration as the lake. + If the Options block includes a TIMESERIESFILE entry (see the + "Time-Variable Input" section), values can be obtained from a + time series by entering the time-series name in place of a + numeric value. + runoff : [string] + * runoff (string) real or character value that defines the + concentration of runoff :math:`(ML^{-3})` for the lake. Value + must be greater than or equal to zero. If the Options block + includes a TIMESERIESFILE entry (see the "Time-Variable + Input" section), values can be obtained from a time series by + entering the time-series name in place of a numeric value. + ext_inflow : [string] + * ext-inflow (string) real or character value that defines the + concentration of external inflow :math:`(ML^{-3})` for the + lake. Value must be greater than or equal to zero. If the + Options block includes a TIMESERIESFILE entry (see the "Time- + Variable Input" section), values can be obtained from a time + series by entering the time-series name in place of a numeric + value. + auxiliaryrecord : [auxname, auxval] + * auxname (string) name for the auxiliary variable to be + assigned AUXVAL. AUXNAME must match one of the auxiliary + variable names defined in the OPTIONS block. If AUXNAME does + not match one of the auxiliary variable names defined in the + OPTIONS block the data are ignored. + * auxval (double) value for the auxiliary variable. If the + Options block includes a TIMESERIESFILE entry (see the "Time- + Variable Input" section), values can be obtained from a time + series by entering the time-series name in place of a numeric + value. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + auxiliary = ListTemplateGenerator(("gwt6", "lkt", "options", "auxiliary")) + concentration_filerecord = ListTemplateGenerator( + ("gwt6", "lkt", "options", "concentration_filerecord") + ) + budget_filerecord = ListTemplateGenerator( + ("gwt6", "lkt", "options", "budget_filerecord") + ) + ts_filerecord = ListTemplateGenerator( + ("gwt6", "lkt", "options", "ts_filerecord") + ) + obs_filerecord = ListTemplateGenerator( + ("gwt6", "lkt", "options", "obs_filerecord") + ) + packagedata = ListTemplateGenerator( + ("gwt6", "lkt", "packagedata", "packagedata") + ) + lakeperioddata = ListTemplateGenerator( + ("gwt6", "lkt", "period", "lakeperioddata") + ) + package_abbr = "gwtlkt" + _package_type = "lkt" + dfn_file_name = "gwt-lkt.dfn" + + dfn = [ + [ + "block options", + "name flow_package_name", + "type string", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name auxiliary", + "type string", + "shape (naux)", + "reader urword", + "optional true", + ], + [ + "block options", + "name flow_package_auxiliary_name", + "type string", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name boundnames", + "type keyword", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_concentration", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name concentration_filerecord", + "type record concentration fileout concfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name concentration", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name concfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name budget_filerecord", + "type record budget fileout budgetfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budget", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name fileout", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name ts_filerecord", + "type record ts6 filein ts6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package ts", + "construct_data timeseries", + "parameter_name timeseries", + ], + [ + "block options", + "name ts6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name ts6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], + [ + "block options", + "name obs_filerecord", + "type record obs6 filein obs6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package obs", + "construct_data continuous", + "parameter_name observations", + ], + [ + "block options", + "name obs6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name obs6_filename", + "type string", + "preserve_case true", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block packagedata", + "name packagedata", + "type recarray lakeno strt aux boundname", + "shape (maxbound)", + "reader urword", + ], + [ + "block packagedata", + "name lakeno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block packagedata", + "name strt", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block packagedata", + "name aux", + "type double precision", + "in_record true", + "tagged false", + "shape (naux)", + "reader urword", + "time_series true", + "optional true", + ], + [ + "block packagedata", + "name boundname", + "type string", + "shape", + "tagged false", + "in_record true", + "reader urword", + "optional true", + ], + [ + "block period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name lakeperioddata", + "type recarray lakeno laksetting", + "shape", + "reader urword", + ], + [ + "block period", + "name lakeno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block period", + "name laksetting", + "type keystring status concentration rainfall evaporation runoff " + "ext-inflow auxiliaryrecord", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name status", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + ], + [ + "block period", + "name concentration", + "type string", + "shape", + "tagged true", + "in_record true", + "time_series true", + "reader urword", + ], + [ + "block period", + "name rainfall", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name evaporation", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name runoff", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name ext-inflow", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name auxiliaryrecord", + "type record auxiliary auxname auxval", + "shape", + "tagged", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxiliary", + "type keyword", + "shape", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxname", + "type string", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxval", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + "time_series true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + flow_package_name=None, + auxiliary=None, + flow_package_auxiliary_name=None, + boundnames=None, + print_input=None, + print_concentration=None, + print_flows=None, + save_flows=None, + concentration_filerecord=None, + budget_filerecord=None, + timeseries=None, + observations=None, + packagedata=None, + lakeperioddata=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtlkt, self).__init__( + model, "lkt", filename, pname, loading_package, parent_file + ) + + # set up variables + self.flow_package_name = self.build_mfdata( + "flow_package_name", flow_package_name + ) + self.auxiliary = self.build_mfdata("auxiliary", auxiliary) + self.flow_package_auxiliary_name = self.build_mfdata( + "flow_package_auxiliary_name", flow_package_auxiliary_name + ) + self.boundnames = self.build_mfdata("boundnames", boundnames) + self.print_input = self.build_mfdata("print_input", print_input) + self.print_concentration = self.build_mfdata( + "print_concentration", print_concentration + ) + self.print_flows = self.build_mfdata("print_flows", print_flows) + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.concentration_filerecord = self.build_mfdata( + "concentration_filerecord", concentration_filerecord + ) + self.budget_filerecord = self.build_mfdata( + "budget_filerecord", budget_filerecord + ) + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self._obs_filerecord = self.build_mfdata("obs_filerecord", None) + self._obs_package = self.build_child_package( + "obs", observations, "continuous", self._obs_filerecord + ) + self.packagedata = self.build_mfdata("packagedata", packagedata) + self.lakeperioddata = self.build_mfdata( + "lakeperioddata", lakeperioddata + ) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtmst.py b/flopy/mf6/modflow/mfgwtmst.py new file mode 100644 index 0000000000..c600a1e8b8 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtmst.py @@ -0,0 +1,201 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ArrayTemplateGenerator + + +class ModflowGwtmst(mfpackage.MFPackage): + """ + ModflowGwtmst defines a mst package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + save_flows : boolean + * save_flows (boolean) keyword to indicate that MST flow terms will be + written to the file specified with "BUDGET FILEOUT" in Output + Control. + first_order_decay : boolean + * first_order_decay (boolean) is a text keyword to indicate that first- + order decay will occur. Use of this keyword requires that DECAY and + DECAY_SORBED (if sorbtion is active) are specified in the GRIDDATA + block. + zero_order_decay : boolean + * zero_order_decay (boolean) is a text keyword to indicate that zero- + order decay will occur. Use of this keyword requires that DECAY and + DECAY_SORBED (if sorbtion is active) are specified in the GRIDDATA + block. + sorbtion : boolean + * sorbtion (boolean) is a text keyword to indicate that sorbtion will + be activated. Use of this keyword requires that BULK_DENSITY and + DISTCOEF are specified in the GRIDDATA block. + porosity : [double] + * porosity (double) is the aquifer porosity. + decay : [double] + * decay (double) is the rate coefficient for first or zero-order decay + for the aqueous phase of the mobile domain. A negative value + indicates solute production. The dimensions of decay for first-order + decay is one over time. The dimensions of decay for zero-order decay + is mass per length cubed per time. decay will have no affect on + simulation results unless either first- or zero-order decay is + specified in the options block. + decay_sorbed : [double] + * decay_sorbed (double) is the rate coefficient for first or zero-order + decay for the sorbed phase of the mobile domain. A negative value + indicates solute production. The dimensions of decay_sorbed for + first-order decay is one over time. The dimensions of decay_sorbed + for zero-order decay is mass of solute per mass of aquifer per time. + If decay_sorbed is not specified and both decay and sorbtion are + active, then the sorbed decay rate will be set equal to the aqueous + decay rate. decay_sorbed will have no affect on simulation results + unless the SORPTION keyword and either first- or zero-order decay are + specified in the options block. + bulk_density : [double] + * bulk_density (double) is the bulk density of the aquifer in mass per + length cubed. bulk_density is not required unless the SORBTION + keyword is specified. + distcoef : [double] + * distcoef (double) is the distribution coefficient for the + equilibrium-controlled linear sorption isotherm in dimensions of + length cubed per mass. distcoef is not required unless the SORBTION + keyword is specified. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + porosity = ArrayTemplateGenerator(("gwt6", "mst", "griddata", "porosity")) + decay = ArrayTemplateGenerator(("gwt6", "mst", "griddata", "decay")) + decay_sorbed = ArrayTemplateGenerator( + ("gwt6", "mst", "griddata", "decay_sorbed") + ) + bulk_density = ArrayTemplateGenerator( + ("gwt6", "mst", "griddata", "bulk_density") + ) + distcoef = ArrayTemplateGenerator(("gwt6", "mst", "griddata", "distcoef")) + package_abbr = "gwtmst" + _package_type = "mst" + dfn_file_name = "gwt-mst.dfn" + + dfn = [ + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name first_order_decay", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name zero_order_decay", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name sorbtion", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block griddata", + "name porosity", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + ], + [ + "block griddata", + "name decay", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + [ + "block griddata", + "name decay_sorbed", + "type double precision", + "shape (nodes)", + "reader readarray", + "optional true", + "layered true", + ], + [ + "block griddata", + "name bulk_density", + "type double precision", + "shape (nodes)", + "reader readarray", + "optional true", + "layered true", + ], + [ + "block griddata", + "name distcoef", + "type double precision", + "shape (nodes)", + "reader readarray", + "layered true", + "optional true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + save_flows=None, + first_order_decay=None, + zero_order_decay=None, + sorbtion=None, + porosity=None, + decay=None, + decay_sorbed=None, + bulk_density=None, + distcoef=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtmst, self).__init__( + model, "mst", filename, pname, loading_package, parent_file + ) + + # set up variables + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.first_order_decay = self.build_mfdata( + "first_order_decay", first_order_decay + ) + self.zero_order_decay = self.build_mfdata( + "zero_order_decay", zero_order_decay + ) + self.sorbtion = self.build_mfdata("sorbtion", sorbtion) + self.porosity = self.build_mfdata("porosity", porosity) + self.decay = self.build_mfdata("decay", decay) + self.decay_sorbed = self.build_mfdata("decay_sorbed", decay_sorbed) + self.bulk_density = self.build_mfdata("bulk_density", bulk_density) + self.distcoef = self.build_mfdata("distcoef", distcoef) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtmvt.py b/flopy/mf6/modflow/mfgwtmvt.py new file mode 100644 index 0000000000..99556719b1 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtmvt.py @@ -0,0 +1,142 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtmvt(mfpackage.MFPackage): + """ + ModflowGwtmvt defines a mvt package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + print_input : boolean + * print_input (boolean) keyword to indicate that the list of mover + information will be written to the listing file immediately after it + is read. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of lake flow + rates will be printed to the listing file for every stress period + time step in which "BUDGET PRINT" is specified in Output Control. If + there is no Output Control option and "PRINT_FLOWS" is specified, + then flow rates are printed for the last time step of each stress + period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that lake flow terms will be + written to the file specified with "BUDGET FILEOUT" in Output + Control. + budget_filerecord : [budgetfile] + * budgetfile (string) name of the binary output file to write budget + information. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + budget_filerecord = ListTemplateGenerator( + ("gwt6", "mvt", "options", "budget_filerecord") + ) + package_abbr = "gwtmvt" + _package_type = "mvt" + dfn_file_name = "gwt-mvt.dfn" + + dfn = [ + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name budget_filerecord", + "type record budget fileout budgetfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budget", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name fileout", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + ] + + def __init__( + self, + model, + loading_package=False, + print_input=None, + print_flows=None, + save_flows=None, + budget_filerecord=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtmvt, self).__init__( + model, "mvt", filename, pname, loading_package, parent_file + ) + + # set up variables + self.print_input = self.build_mfdata("print_input", print_input) + self.print_flows = self.build_mfdata("print_flows", print_flows) + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.budget_filerecord = self.build_mfdata( + "budget_filerecord", budget_filerecord + ) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtmwt.py b/flopy/mf6/modflow/mfgwtmwt.py new file mode 100644 index 0000000000..aa0af72bea --- /dev/null +++ b/flopy/mf6/modflow/mfgwtmwt.py @@ -0,0 +1,611 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtmwt(mfpackage.MFPackage): + """ + ModflowGwtmwt defines a mwt package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + flow_package_name : string + * flow_package_name (string) keyword to specify the name of the + corresponding flow package. If not specified, then the corresponding + flow package must have the same name as this advanced transport + package (the name associated with this package in the GWT name file). + auxiliary : [string] + * auxiliary (string) defines an array of one or more auxiliary variable + names. There is no limit on the number of auxiliary variables that + can be provided on this line; however, lists of information provided + in subsequent blocks must have a column of data for each auxiliary + variable name defined here. The number of auxiliary variables + detected on this line determines the value for naux. Comments cannot + be provided anywhere on this line as they will be interpreted as + auxiliary variable names. Auxiliary variables may not be used by the + package, but they will be available for use by other parts of the + program. The program will terminate with an error if auxiliary + variables are specified on more than one line in the options block. + flow_package_auxiliary_name : string + * flow_package_auxiliary_name (string) keyword to specify the name of + an auxiliary variable in the corresponding flow package. If + specified, then the simulated concentrations from this advanced + transport package will be copied into the auxiliary variable + specified with this name. Note that the flow package must have an + auxiliary variable with this name or the program will terminate with + an error. If the flows for this advanced transport package are read + from a file, then this option will have no affect. + boundnames : boolean + * boundnames (boolean) keyword to indicate that boundary names may be + provided with the list of well cells. + print_input : boolean + * print_input (boolean) keyword to indicate that the list of well + information will be written to the listing file immediately after it + is read. + print_concentration : boolean + * print_concentration (boolean) keyword to indicate that the list of + well concentration will be printed to the listing file for every + stress period in which "HEAD PRINT" is specified in Output Control. + If there is no Output Control option and PRINT_CONCENTRATION is + specified, then concentration are printed for the last time step of + each stress period. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of well flow + rates will be printed to the listing file for every stress period + time step in which "BUDGET PRINT" is specified in Output Control. If + there is no Output Control option and "PRINT_FLOWS" is specified, + then flow rates are printed for the last time step of each stress + period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that well flow terms will be + written to the file specified with "BUDGET FILEOUT" in Output + Control. + concentration_filerecord : [concfile] + * concfile (string) name of the binary output file to write + concentration information. + budget_filerecord : [budgetfile] + * budgetfile (string) name of the binary output file to write budget + information. + timeseries : {varname:data} or timeseries data + * Contains data for the ts package. Data can be stored in a dictionary + containing data for the ts package with variable names as keys and + package data as values. Data just for the timeseries variable is also + acceptable. See ts package documentation for more information. + observations : {varname:data} or continuous data + * Contains data for the obs package. Data can be stored in a dictionary + containing data for the obs package with variable names as keys and + package data as values. Data just for the observations variable is + also acceptable. See obs package documentation for more information. + packagedata : [mawno, strt, aux, boundname] + * mawno (integer) integer value that defines the well number associated + with the specified PACKAGEDATA data on the line. MAWNO must be + greater than zero and less than or equal to NMAWWELLS. Well + information must be specified for every well or the program will + terminate with an error. The program will also terminate with an + error if information for a well is specified more than once. This + argument is an index variable, which means that it should be treated + as zero-based when working with FloPy and Python. Flopy will + automatically subtract one when loading index variables and add one + when writing index variables. + * strt (double) real value that defines the starting concentration for + the well. + * aux (double) represents the values of the auxiliary variables for + each well. The values of auxiliary variables must be present for each + well. The values must be specified in the order of the auxiliary + variables specified in the OPTIONS block. If the package supports + time series and the Options block includes a TIMESERIESFILE entry + (see the "Time-Variable Input" section), values can be obtained from + a time series by entering the time-series name in place of a numeric + value. + * boundname (string) name of the well cell. BOUNDNAME is an ASCII + character variable that can contain as many as 40 characters. If + BOUNDNAME contains spaces in it, then the entire name must be + enclosed within single quotes. + mwtperioddata : [mawno, mwtsetting] + * mawno (integer) integer value that defines the well number associated + with the specified PERIOD data on the line. MAWNO must be greater + than zero and less than or equal to NMAWWELLS. This argument is an + index variable, which means that it should be treated as zero-based + when working with FloPy and Python. Flopy will automatically subtract + one when loading index variables and add one when writing index + variables. + * mwtsetting (keystring) line of information that is parsed into a + keyword and values. Keyword values that can be used to start the + MWTSETTING string include: STATUS, CONCENTRATION, RAINFALL, + EVAPORATION, RUNOFF, and AUXILIARY. These settings are used to assign + the concentration of associated with the corresponding flow terms. + Concentrations cannot be specified for all flow terms. For example, + the Multi-Aquifer Well Package supports a "WITHDRAWAL" flow term. If + this withdrawal term is active, then water will be withdrawn from the + well at the calculated concentration of the well. + status : [string] + * status (string) keyword option to define well status. STATUS + can be ACTIVE, INACTIVE, or CONSTANT. By default, STATUS is + ACTIVE, which means that concentration will be calculated for + the well. If a well is inactive, then there will be no solute + mass fluxes into or out of the well and the inactive value + will be written for the well concentration. If a well is + constant, then the concentration for the well will be fixed + at the user specified value. + concentration : [string] + * concentration (string) real or character value that defines + the concentration for the well. The specified CONCENTRATION + is only applied if the well is a constant concentration well. + If the Options block includes a TIMESERIESFILE entry (see the + "Time-Variable Input" section), values can be obtained from a + time series by entering the time-series name in place of a + numeric value. + rate : [string] + * rate (string) real or character value that defines the + injection solute concentration :math:`(ML^{-3})` for the + well. If the Options block includes a TIMESERIESFILE entry + (see the "Time-Variable Input" section), values can be + obtained from a time series by entering the time-series name + in place of a numeric value. + auxiliaryrecord : [auxname, auxval] + * auxname (string) name for the auxiliary variable to be + assigned AUXVAL. AUXNAME must match one of the auxiliary + variable names defined in the OPTIONS block. If AUXNAME does + not match one of the auxiliary variable names defined in the + OPTIONS block the data are ignored. + * auxval (double) value for the auxiliary variable. If the + Options block includes a TIMESERIESFILE entry (see the "Time- + Variable Input" section), values can be obtained from a time + series by entering the time-series name in place of a numeric + value. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + auxiliary = ListTemplateGenerator(("gwt6", "mwt", "options", "auxiliary")) + concentration_filerecord = ListTemplateGenerator( + ("gwt6", "mwt", "options", "concentration_filerecord") + ) + budget_filerecord = ListTemplateGenerator( + ("gwt6", "mwt", "options", "budget_filerecord") + ) + ts_filerecord = ListTemplateGenerator( + ("gwt6", "mwt", "options", "ts_filerecord") + ) + obs_filerecord = ListTemplateGenerator( + ("gwt6", "mwt", "options", "obs_filerecord") + ) + packagedata = ListTemplateGenerator( + ("gwt6", "mwt", "packagedata", "packagedata") + ) + mwtperioddata = ListTemplateGenerator( + ("gwt6", "mwt", "period", "mwtperioddata") + ) + package_abbr = "gwtmwt" + _package_type = "mwt" + dfn_file_name = "gwt-mwt.dfn" + + dfn = [ + [ + "block options", + "name flow_package_name", + "type string", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name auxiliary", + "type string", + "shape (naux)", + "reader urword", + "optional true", + ], + [ + "block options", + "name flow_package_auxiliary_name", + "type string", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name boundnames", + "type keyword", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_concentration", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name concentration_filerecord", + "type record concentration fileout concfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name concentration", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name concfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name budget_filerecord", + "type record budget fileout budgetfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budget", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name fileout", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name ts_filerecord", + "type record ts6 filein ts6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package ts", + "construct_data timeseries", + "parameter_name timeseries", + ], + [ + "block options", + "name ts6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name ts6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], + [ + "block options", + "name obs_filerecord", + "type record obs6 filein obs6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package obs", + "construct_data continuous", + "parameter_name observations", + ], + [ + "block options", + "name obs6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name obs6_filename", + "type string", + "preserve_case true", + "in_record true", + "tagged false", + "reader urword", + "optional false", + ], + [ + "block packagedata", + "name packagedata", + "type recarray mawno strt aux boundname", + "shape (maxbound)", + "reader urword", + ], + [ + "block packagedata", + "name mawno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block packagedata", + "name strt", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block packagedata", + "name aux", + "type double precision", + "in_record true", + "tagged false", + "shape (naux)", + "reader urword", + "time_series true", + "optional true", + ], + [ + "block packagedata", + "name boundname", + "type string", + "shape", + "tagged false", + "in_record true", + "reader urword", + "optional true", + ], + [ + "block period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name mwtperioddata", + "type recarray mawno mwtsetting", + "shape", + "reader urword", + ], + [ + "block period", + "name mawno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block period", + "name mwtsetting", + "type keystring status concentration rate auxiliaryrecord", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name status", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + ], + [ + "block period", + "name concentration", + "type string", + "shape", + "tagged true", + "in_record true", + "time_series true", + "reader urword", + ], + [ + "block period", + "name rate", + "type string", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name auxiliaryrecord", + "type record auxiliary auxname auxval", + "shape", + "tagged", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxiliary", + "type keyword", + "shape", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxname", + "type string", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name auxval", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + "time_series true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + flow_package_name=None, + auxiliary=None, + flow_package_auxiliary_name=None, + boundnames=None, + print_input=None, + print_concentration=None, + print_flows=None, + save_flows=None, + concentration_filerecord=None, + budget_filerecord=None, + timeseries=None, + observations=None, + packagedata=None, + mwtperioddata=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtmwt, self).__init__( + model, "mwt", filename, pname, loading_package, parent_file + ) + + # set up variables + self.flow_package_name = self.build_mfdata( + "flow_package_name", flow_package_name + ) + self.auxiliary = self.build_mfdata("auxiliary", auxiliary) + self.flow_package_auxiliary_name = self.build_mfdata( + "flow_package_auxiliary_name", flow_package_auxiliary_name + ) + self.boundnames = self.build_mfdata("boundnames", boundnames) + self.print_input = self.build_mfdata("print_input", print_input) + self.print_concentration = self.build_mfdata( + "print_concentration", print_concentration + ) + self.print_flows = self.build_mfdata("print_flows", print_flows) + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.concentration_filerecord = self.build_mfdata( + "concentration_filerecord", concentration_filerecord + ) + self.budget_filerecord = self.build_mfdata( + "budget_filerecord", budget_filerecord + ) + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self._obs_filerecord = self.build_mfdata("obs_filerecord", None) + self._obs_package = self.build_child_package( + "obs", observations, "continuous", self._obs_filerecord + ) + self.packagedata = self.build_mfdata("packagedata", packagedata) + self.mwtperioddata = self.build_mfdata("mwtperioddata", mwtperioddata) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtnam.py b/flopy/mf6/modflow/mfgwtnam.py new file mode 100644 index 0000000000..376f15ade3 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtnam.py @@ -0,0 +1,159 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtnam(mfpackage.MFPackage): + """ + ModflowGwtnam defines a nam package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + list : string + * list (string) is name of the listing file to create for this GWT + model. If not specified, then the name of the list file will be the + basename of the GWT model name file and the '.lst' extension. For + example, if the GWT name file is called "my.model.nam" then the list + file will be called "my.model.lst". + print_input : boolean + * print_input (boolean) keyword to indicate that the list of all model + stress package information will be written to the listing file + immediately after it is read. + print_flows : boolean + * print_flows (boolean) keyword to indicate that the list of all model + package flow rates will be printed to the listing file for every + stress period time step in which "BUDGET PRINT" is specified in + Output Control. If there is no Output Control option and + "PRINT_FLOWS" is specified, then flow rates are printed for the last + time step of each stress period. + save_flows : boolean + * save_flows (boolean) keyword to indicate that all model package flow + terms will be written to the file specified with "BUDGET FILEOUT" in + Output Control. + packages : [ftype, fname, pname] + * ftype (string) is the file type, which must be one of the following + character values shown in table~ref{table:ftype}. Ftype may be + entered in any combination of uppercase and lowercase. + * fname (string) is the name of the file containing the package input. + The path to the file should be included if the file is not located in + the folder where the program was run. + * pname (string) is the user-defined name for the package. PNAME is + restricted to 16 characters. No spaces are allowed in PNAME. PNAME + character values are read and stored by the program for stress + packages only. These names may be useful for labeling purposes when + multiple stress packages of the same type are located within a single + GWT Model. If PNAME is specified for a stress package, then PNAME + will be used in the flow budget table in the listing file; it will + also be used for the text entry in the cell-by-cell budget file. + PNAME is case insensitive and is stored in all upper case letters. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + packages = ListTemplateGenerator(("gwt6", "nam", "packages", "packages")) + package_abbr = "gwtnam" + _package_type = "nam" + dfn_file_name = "gwt-nam.dfn" + + dfn = [ + [ + "block options", + "name list", + "type string", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name save_flows", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block packages", + "name packages", + "type recarray ftype fname pname", + "reader urword", + "optional false", + ], + [ + "block packages", + "name ftype", + "in_record true", + "type string", + "tagged false", + "reader urword", + ], + [ + "block packages", + "name fname", + "in_record true", + "type string", + "preserve_case true", + "tagged false", + "reader urword", + ], + [ + "block packages", + "name pname", + "in_record true", + "type string", + "tagged false", + "reader urword", + "optional true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + list=None, + print_input=None, + print_flows=None, + save_flows=None, + packages=None, + filename=None, + pname=None, + parent_file=None, + ): + super(ModflowGwtnam, self).__init__( + model, "nam", filename, pname, loading_package, parent_file + ) + + # set up variables + self.list = self.build_mfdata("list", list) + self.print_input = self.build_mfdata("print_input", print_input) + self.print_flows = self.build_mfdata("print_flows", print_flows) + self.save_flows = self.build_mfdata("save_flows", save_flows) + self.packages = self.build_mfdata("packages", packages) + self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtoc.py b/flopy/mf6/modflow/mfgwtoc.py new file mode 100644 index 0000000000..5b9b59ab52 --- /dev/null +++ b/flopy/mf6/modflow/mfgwtoc.py @@ -0,0 +1,388 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowGwtoc(mfpackage.MFPackage): + """ + ModflowGwtoc defines a oc package within a gwt6 model. + + Parameters + ---------- + model : MFModel + Model that this package is a part of. Package is automatically + added to model when it is initialized. + loading_package : bool + Do not set this parameter. It is intended for debugging and internal + processing purposes only. + budget_filerecord : [budgetfile] + * budgetfile (string) name of the output file to write budget + information. + concentration_filerecord : [concentrationfile] + * concentrationfile (string) name of the output file to write conc + information. + concentrationprintrecord : [columns, width, digits, format] + * columns (integer) number of columns for writing data. + * width (integer) width for writing each number. + * digits (integer) number of digits to use for writing a number. + * format (string) write format can be EXPONENTIAL, FIXED, GENERAL, or + SCIENTIFIC. + saverecord : [rtype, ocsetting] + * rtype (string) type of information to save or print. Can be BUDGET or + CONCENTRATION. + * ocsetting (keystring) specifies the steps for which the data will be + saved. + all : [keyword] + * all (keyword) keyword to indicate save for all time steps in + period. + first : [keyword] + * first (keyword) keyword to indicate save for first step in + period. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + last : [keyword] + * last (keyword) keyword to indicate save for last step in + period. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + frequency : [integer] + * frequency (integer) save at the specified time step + frequency. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + steps : [integer] + * steps (integer) save for each step specified in STEPS. This + keyword may be used in conjunction with other keywords to + print or save results for multiple time steps. + printrecord : [rtype, ocsetting] + * rtype (string) type of information to save or print. Can be BUDGET or + CONCENTRATION. + * ocsetting (keystring) specifies the steps for which the data will be + saved. + all : [keyword] + * all (keyword) keyword to indicate save for all time steps in + period. + first : [keyword] + * first (keyword) keyword to indicate save for first step in + period. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + last : [keyword] + * last (keyword) keyword to indicate save for last step in + period. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + frequency : [integer] + * frequency (integer) save at the specified time step + frequency. This keyword may be used in conjunction with other + keywords to print or save results for multiple time steps. + steps : [integer] + * steps (integer) save for each step specified in STEPS. This + keyword may be used in conjunction with other keywords to + print or save results for multiple time steps. + filename : String + File name for this package. + pname : String + Package name for this package. + parent_file : MFPackage + Parent package file that references this package. Only needed for + utility packages (mfutl*). For example, mfutllaktab package must have + a mfgwflak package parent_file. + + """ + + budget_filerecord = ListTemplateGenerator( + ("gwt6", "oc", "options", "budget_filerecord") + ) + concentration_filerecord = ListTemplateGenerator( + ("gwt6", "oc", "options", "concentration_filerecord") + ) + concentrationprintrecord = ListTemplateGenerator( + ("gwt6", "oc", "options", "concentrationprintrecord") + ) + saverecord = ListTemplateGenerator(("gwt6", "oc", "period", "saverecord")) + printrecord = ListTemplateGenerator( + ("gwt6", "oc", "period", "printrecord") + ) + package_abbr = "gwtoc" + _package_type = "oc" + dfn_file_name = "gwt-oc.dfn" + + dfn = [ + [ + "block options", + "name budget_filerecord", + "type record budget fileout budgetfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budget", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name fileout", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name concentration_filerecord", + "type record concentration fileout concentrationfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name concentration", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name concentrationfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block options", + "name concentrationprintrecord", + "type record concentration print_format formatrecord", + "shape", + "reader urword", + "optional true", + ], + [ + "block options", + "name print_format", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name formatrecord", + "type record columns width digits format", + "shape", + "in_record true", + "reader urword", + "tagged", + "optional false", + ], + [ + "block options", + "name columns", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name width", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name digits", + "type integer", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional", + ], + [ + "block options", + "name format", + "type string", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name saverecord", + "type record save rtype ocsetting", + "shape", + "reader urword", + "tagged false", + "optional true", + ], + [ + "block period", + "name save", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block period", + "name printrecord", + "type record print rtype ocsetting", + "shape", + "reader urword", + "tagged false", + "optional true", + ], + [ + "block period", + "name print", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block period", + "name rtype", + "type string", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], + [ + "block period", + "name ocsetting", + "type keystring all first last frequency steps", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name all", + "type keyword", + "shape", + "in_record true", + "reader urword", + ], + [ + "block period", + "name first", + "type keyword", + "shape", + "in_record true", + "reader urword", + ], + [ + "block period", + "name last", + "type keyword", + "shape", + "in_record true", + "reader urword", + ], + [ + "block period", + "name frequency", + "type integer", + "shape", + "tagged true", + "in_record true", + "reader urword", + ], + [ + "block period", + "name steps", + "type integer", + "shape (