From 5dfd2674fb506b9a8f55bcdc352559c904f6c2bb Mon Sep 17 00:00:00 2001 From: Joshua Larsen Date: Fri, 29 Oct 2021 17:56:42 -0700 Subject: [PATCH 1/4] Updates(MF6Output): Added budgetcsv method to .output attribute * Update dfn files to most recent modflow6 dfns * Ran createpackages.py to apply updates for budgetcsv output type * Added budgetcsv method .output * Fix ModflowUzf1.load(), use built in multiline reader method instead of readline() (crashed on comment line after options block). --- autotest/t504_test.py | 13 +- .../modflow6output/tutorial01_mf6_output.py | 14 +- .../test001e_UZF_3lay/test001e_UZF_3lay.oc | 1 + .../test001e_UZF_3lay/test001e_UZF_3lay.uzf | 1 + flopy/mf6/data/dfn/exg-gwfgwf.dfn | 8 + flopy/mf6/data/dfn/gwf-lak.dfn | 33 +++ flopy/mf6/data/dfn/gwf-maw.dfn | 33 +++ flopy/mf6/data/dfn/gwf-mvr.dfn | 33 +++ flopy/mf6/data/dfn/gwf-npf.dfn | 43 +++ flopy/mf6/data/dfn/gwf-oc.dfn | 33 +++ flopy/mf6/data/dfn/gwf-sfr.dfn | 146 +++++++++- flopy/mf6/data/dfn/gwf-sto.dfn | 43 +++ flopy/mf6/data/dfn/gwf-uzf.dfn | 33 +++ flopy/mf6/data/dfn/gwt-ist.dfn | 77 +++++ flopy/mf6/data/dfn/gwt-lkt.dfn | 33 +++ flopy/mf6/data/dfn/gwt-mvt.dfn | 33 +++ flopy/mf6/data/dfn/gwt-mwt.dfn | 33 +++ flopy/mf6/data/dfn/gwt-oc.dfn | 33 +++ flopy/mf6/data/dfn/gwt-sft.dfn | 33 +++ flopy/mf6/data/dfn/gwt-ssm.dfn | 64 +++++ flopy/mf6/data/dfn/gwt-uzt.dfn | 33 +++ flopy/mf6/data/dfn/utl-laktab.dfn | 69 +++++ flopy/mf6/data/dfn/utl-obs.dfn | 2 +- flopy/mf6/data/dfn/utl-sfrtab.dfn | 48 ++++ flopy/mf6/data/dfn/utl-spc.dfn | 117 ++++++++ flopy/mf6/data/dfn/utl-spca.dfn | 88 ++++++ flopy/mf6/data/dfn/utl-tvk.dfn | 121 ++++++++ flopy/mf6/data/dfn/utl-tvs.dfn | 118 ++++++++ flopy/mf6/modflow/__init__.py | 36 ++- flopy/mf6/modflow/mfgnc.py | 2 +- flopy/mf6/modflow/mfgwf.py | 2 +- flopy/mf6/modflow/mfgwfapi.py | 2 +- flopy/mf6/modflow/mfgwfbuy.py | 2 +- flopy/mf6/modflow/mfgwfchd.py | 2 +- flopy/mf6/modflow/mfgwfcsub.py | 2 +- flopy/mf6/modflow/mfgwfdis.py | 2 +- flopy/mf6/modflow/mfgwfdisu.py | 2 +- flopy/mf6/modflow/mfgwfdisv.py | 2 +- flopy/mf6/modflow/mfgwfdrn.py | 2 +- flopy/mf6/modflow/mfgwfevt.py | 2 +- flopy/mf6/modflow/mfgwfevta.py | 2 +- flopy/mf6/modflow/mfgwfghb.py | 2 +- flopy/mf6/modflow/mfgwfgnc.py | 2 +- flopy/mf6/modflow/mfgwfgwf.py | 14 +- flopy/mf6/modflow/mfgwfgwt.py | 2 +- flopy/mf6/modflow/mfgwfhfb.py | 2 +- flopy/mf6/modflow/mfgwfic.py | 2 +- flopy/mf6/modflow/mfgwflak.py | 43 ++- flopy/mf6/modflow/mfgwfmaw.py | 43 ++- flopy/mf6/modflow/mfgwfmvr.py | 43 ++- flopy/mf6/modflow/mfgwfnam.py | 2 +- flopy/mf6/modflow/mfgwfnpf.py | 53 +++- flopy/mf6/modflow/mfgwfoc.py | 43 ++- flopy/mf6/modflow/mfgwfrch.py | 2 +- flopy/mf6/modflow/mfgwfrcha.py | 2 +- flopy/mf6/modflow/mfgwfriv.py | 2 +- flopy/mf6/modflow/mfgwfsfr.py | 173 ++++++++++- flopy/mf6/modflow/mfgwfsto.py | 54 +++- flopy/mf6/modflow/mfgwfuzf.py | 43 ++- flopy/mf6/modflow/mfgwfwel.py | 2 +- flopy/mf6/modflow/mfgwt.py | 2 +- flopy/mf6/modflow/mfgwtadv.py | 2 +- flopy/mf6/modflow/mfgwtapi.py | 2 +- flopy/mf6/modflow/mfgwtcnc.py | 2 +- flopy/mf6/modflow/mfgwtdis.py | 2 +- flopy/mf6/modflow/mfgwtdisu.py | 2 +- flopy/mf6/modflow/mfgwtdisv.py | 2 +- flopy/mf6/modflow/mfgwtdsp.py | 2 +- flopy/mf6/modflow/mfgwtfmi.py | 2 +- flopy/mf6/modflow/mfgwtic.py | 2 +- flopy/mf6/modflow/mfgwtist.py | 98 ++++++- flopy/mf6/modflow/mfgwtlkt.py | 43 ++- flopy/mf6/modflow/mfgwtmst.py | 2 +- flopy/mf6/modflow/mfgwtmvt.py | 43 ++- flopy/mf6/modflow/mfgwtmwt.py | 43 ++- flopy/mf6/modflow/mfgwtnam.py | 2 +- flopy/mf6/modflow/mfgwtoc.py | 43 ++- flopy/mf6/modflow/mfgwtsft.py | 43 ++- flopy/mf6/modflow/mfgwtsrc.py | 2 +- flopy/mf6/modflow/mfgwtssm.py | 73 ++++- flopy/mf6/modflow/mfgwtuzt.py | 43 ++- flopy/mf6/modflow/mfims.py | 2 +- flopy/mf6/modflow/mfmvr.py | 43 ++- flopy/mf6/modflow/mfnam.py | 2 +- flopy/mf6/modflow/mftdis.py | 2 +- flopy/mf6/modflow/mfutlats.py | 2 +- flopy/mf6/modflow/mfutllaktab.py | 60 +++- flopy/mf6/modflow/mfutlobs.py | 16 +- flopy/mf6/modflow/mfutlsfrtab.py | 157 ++++++++++ flopy/mf6/modflow/mfutlspc.py | 258 +++++++++++++++++ flopy/mf6/modflow/mfutlspca.py | 222 ++++++++++++++ flopy/mf6/modflow/mfutltas.py | 2 +- flopy/mf6/modflow/mfutlts.py | 2 +- flopy/mf6/modflow/mfutltvk.py | 259 +++++++++++++++++ flopy/mf6/modflow/mfutltvs.py | 271 ++++++++++++++++++ flopy/mf6/utils/output_util.py | 54 +++- flopy/modflow/mfuzf1.py | 6 +- 97 files changed, 3629 insertions(+), 109 deletions(-) create mode 100644 flopy/mf6/data/dfn/utl-laktab.dfn create mode 100644 flopy/mf6/data/dfn/utl-sfrtab.dfn create mode 100644 flopy/mf6/data/dfn/utl-spc.dfn create mode 100644 flopy/mf6/data/dfn/utl-spca.dfn create mode 100644 flopy/mf6/data/dfn/utl-tvk.dfn create mode 100644 flopy/mf6/data/dfn/utl-tvs.dfn create mode 100644 flopy/mf6/modflow/mfutlsfrtab.py create mode 100644 flopy/mf6/modflow/mfutlspc.py create mode 100644 flopy/mf6/modflow/mfutlspca.py create mode 100644 flopy/mf6/modflow/mfutltvk.py create mode 100644 flopy/mf6/modflow/mfutltvs.py diff --git a/autotest/t504_test.py b/autotest/t504_test.py index b370673c32..4f7de4132a 100644 --- a/autotest/t504_test.py +++ b/autotest/t504_test.py @@ -1182,6 +1182,7 @@ def test_mf6_output(): ml = sim.get_model("gwf_1") bud = ml.oc.output.budget() + budcsv = ml.oc.output.budgetcsv() hds = ml.oc.output.head() lst = ml.oc.output.list() @@ -1191,6 +1192,9 @@ def test_mf6_output(): if not isinstance(bud, flopy.utils.CellBudgetFile): raise TypeError() + if not isinstance(budcsv, flopy.utils.observationfile.CsvFile): + raise TypeError() + if not isinstance(hds, flopy.utils.HeadFile): raise TypeError() @@ -1201,6 +1205,7 @@ def test_mf6_output(): raise AssertionError() bud = ml.output.budget() + budcsv = ml.output.budgetcsv() hds = ml.output.head() zonbud = ml.output.zonebudget(idomain) lst = ml.output.list() @@ -1208,6 +1213,9 @@ def test_mf6_output(): if not isinstance(bud, flopy.utils.CellBudgetFile): raise TypeError() + if not isinstance(budcsv, flopy.utils.observationfile.CsvFile): + raise TypeError() + if not isinstance(hds, flopy.utils.HeadFile): raise TypeError() @@ -1219,6 +1227,7 @@ def test_mf6_output(): uzf = ml.uzf uzf_bud = uzf.output.budget() + uzf_budcsv = uzf.output.budgetcsv() conv = uzf.output.package_convergence() uzf_obs = uzf.output.obs() uzf_zonbud = uzf.output.zonebudget(idomain) @@ -1226,6 +1235,9 @@ def test_mf6_output(): if not isinstance(uzf_bud, flopy.utils.CellBudgetFile): raise TypeError() + if not isinstance(uzf_budcsv, flopy.utils.observationfile.CsvFile): + raise TypeError() + if conv is not None: if not isinstance(conv, flopy.utils.observationfile.CsvFile): raise TypeError() @@ -1292,7 +1304,6 @@ def test_mf6_output_add_observation(): test006_gwf3() test027_timeseriestest() test036_twrihfb() - test045_lake1ss_table() test045_lake2tr() test_mf6_output() test_mf6_output_add_observation() diff --git a/examples/Tutorials/modflow6output/tutorial01_mf6_output.py b/examples/Tutorials/modflow6output/tutorial01_mf6_output.py index 46bc0f26f8..2356c36572 100644 --- a/examples/Tutorials/modflow6output/tutorial01_mf6_output.py +++ b/examples/Tutorials/modflow6output/tutorial01_mf6_output.py @@ -59,6 +59,10 @@ # | | the model. Accessed from the model object or | # | | the OC package object | # +-----------------------+------------------------------------------------+ +# | budgetcsv() | Method to get the MODFLOW-6 budget csv as a | +# | | `CsvFile` object. Valid for model, oc, and | +# | | advanced packages such as MAW, UZF, LAK | +# +-----------------------+------------------------------------------------+ # | zonebudget() | Method to get the `ZoneBudget6` object for | # | | the model. Accessed from the model object or | # | | the OC package object | @@ -99,6 +103,9 @@ bud = ml.output.budget() bud.get_data(idx=0, full3D=True) +budcsv = ml.output.budgetcsv() +budcsv.data + hds = ml.output.head() hds.get_data() @@ -111,13 +118,16 @@ # ## Get output associated with a specific package # The `.output` attribute is tied to the package object and allows the user # to get the output types specified in the MODFLOW 6 package. Here is an -# example with a UZF package that has UZF budget file output, -# package convergence output, and observation data. +# example with a UZF package that has UZF budget file output, budgetcsv +# file output, package convergence output, and observation data. uzf = ml.uzf uzf_bud = uzf.output.budget() uzf_bud.get_data(idx=0) +uzf_budcsv = uzf.output.budgetcsv() +uzf_budcv.data + uzf_conv = uzf.output.package_convergence() if uzf_conv is not None: uzf_conv.data[0:10] diff --git a/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.oc b/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.oc index 7a217b4ae5..e5e7398d1d 100644 --- a/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.oc +++ b/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.oc @@ -2,6 +2,7 @@ BEGIN OPTIONS HEAD FILEOUT test001e_UZF_3lay.hds BUDGET FILEOUT test001e_UZF_3lay.cbc + BUDGETCSV FILEOUT test001e_UZF_3lay.cbc.csv END OPTIONS BEGIN PERIOD 1 diff --git a/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.uzf b/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.uzf index 96b691c1ff..7f2b3ce17c 100644 --- a/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.uzf +++ b/examples/data/mf6/test001e_UZF_3lay/test001e_UZF_3lay.uzf @@ -5,6 +5,7 @@ Begin options PRINT_FLOWS OBS6 FILEIN test001e_UZF_3lay.obs BUDGET FILEOUT test001e_UZF_3lay.uzf.cbc + BUDGETCSV FILEOUT test001e_UZF_3lay.uzf.cbc.csv PACKAGE_CONVERGENCE FILEOUT test001e_UZF_3lay.uzf_convergence.csv SIMULATE_GWSEEP SIMULATE_ET diff --git a/flopy/mf6/data/dfn/exg-gwfgwf.dfn b/flopy/mf6/data/dfn/exg-gwfgwf.dfn index 7db7f7e413..2381359d85 100644 --- a/flopy/mf6/data/dfn/exg-gwfgwf.dfn +++ b/flopy/mf6/data/dfn/exg-gwfgwf.dfn @@ -75,6 +75,14 @@ optional true longname keyword to activate Newton-Raphson description keyword that activates the Newton-Raphson formulation for groundwater flow between connected, convertible groundwater cells. Cells will not dry when this option is used. +block options +name xt3d +type keyword +reader urword +optional true +longname keyword to activate XT3D +description keyword that activates the XT3D formulation between the cells connected with this GWF-GWF Exchange. + block options name gnc_filerecord type record gnc6 filein gnc6_filename diff --git a/flopy/mf6/data/dfn/gwf-lak.dfn b/flopy/mf6/data/dfn/gwf-lak.dfn index 6a30607838..96615271da 100644 --- a/flopy/mf6/data/dfn/gwf-lak.dfn +++ b/flopy/mf6/data/dfn/gwf-lak.dfn @@ -127,6 +127,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name package_convergence_filerecord type record package_convergence fileout package_convergence_filename diff --git a/flopy/mf6/data/dfn/gwf-maw.dfn b/flopy/mf6/data/dfn/gwf-maw.dfn index 950e6a0cec..bd43129ca0 100644 --- a/flopy/mf6/data/dfn/gwf-maw.dfn +++ b/flopy/mf6/data/dfn/gwf-maw.dfn @@ -127,6 +127,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name no_well_storage type keyword diff --git a/flopy/mf6/data/dfn/gwf-mvr.dfn b/flopy/mf6/data/dfn/gwf-mvr.dfn index fa055645b0..bbc031a956 100644 --- a/flopy/mf6/data/dfn/gwf-mvr.dfn +++ b/flopy/mf6/data/dfn/gwf-mvr.dfn @@ -68,6 +68,39 @@ optional false longname file keyword description name of the output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + # --------------------- gwf mvr dimensions --------------------- block dimensions diff --git a/flopy/mf6/data/dfn/gwf-npf.dfn b/flopy/mf6/data/dfn/gwf-npf.dfn index 705b1c7c0f..76d4d01663 100644 --- a/flopy/mf6/data/dfn/gwf-npf.dfn +++ b/flopy/mf6/data/dfn/gwf-npf.dfn @@ -159,6 +159,49 @@ optional true longname keyword to indicate that specified K33 is a ratio description keyword to indicate that specified K33 is a ratio of K33 divided by K. If this option is specified, then the K33 array entered in the NPF Package will be multiplied by K after being read. +block options +name tvk_filerecord +type record tvk6 filein tvk_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name tvk6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname tvk keyword +description keyword to specify that record corresponds to a time-varying hydraulic conductivity (TVK) file. The behavior of TVK and a description of the input file is provided separately. + +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 tvk_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of TVK information +description defines a time-varying hydraulic conductivity (TVK) input file. Records in the TVK file can be used to change hydraulic conductivity properties at specified times or stress periods. + # --------------------- gwf npf griddata --------------------- diff --git a/flopy/mf6/data/dfn/gwf-oc.dfn b/flopy/mf6/data/dfn/gwf-oc.dfn index a1ea80641f..29b6ae1014 100644 --- a/flopy/mf6/data/dfn/gwf-oc.dfn +++ b/flopy/mf6/data/dfn/gwf-oc.dfn @@ -44,6 +44,39 @@ optional false longname file keyword description name of the output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name head_filerecord type record head fileout headfile diff --git a/flopy/mf6/data/dfn/gwf-sfr.dfn b/flopy/mf6/data/dfn/gwf-sfr.dfn index be786615fa..a95e188436 100644 --- a/flopy/mf6/data/dfn/gwf-sfr.dfn +++ b/flopy/mf6/data/dfn/gwf-sfr.dfn @@ -127,6 +127,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name package_convergence_filerecord type record package_convergence fileout package_convergence_filename @@ -443,6 +476,61 @@ optional true longname well name description REPLACE boundname {'{#1}': 'stream reach'} +# --------------------- gwf srf crosssections --------------------- + +block crosssections +name crosssections +type recarray rno tab6 filein tab6_filename +shape +valid +optional false +reader urword +longname +description + +block crosssections +name rno +type integer +shape +tagged false +in_record true +reader urword +longname reach number for this entry +description integer value that defines the reach number associated with the specified cross-section table file on the line. RNO must be greater than zero and less than or equal to NREACHES. The program will also terminate with an error if table information for a reach is specified more than once. +numeric_index true + +block crosssections +name tab6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname head keyword +description keyword to specify that record corresponds to a cross-section table file. + +block crosssections +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 crosssections +name tab6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname table file name +description character string that defines the path and filename for the file containing cross-section table data for the reach. The TAB6\_FILENAME file includes the number of entries in the file and the station elevation data in terms of the fractional width and the reach depth. Instructions for creating the TAB6\_FILENAME input file are provided in SFR Reach Cross-Section Table Input File section. # --------------------- gwf sfr connectiondata --------------------- @@ -478,6 +566,8 @@ description integer value that defines the reach number of the reach connected t numeric_index true support_negative_index true + + # --------------------- gwf sfr diversions --------------------- block diversions @@ -568,7 +658,7 @@ numeric_index true block period name sfrsetting -type keystring status manning stage inflow rainfall evaporation runoff diversionrecord upstream_fraction auxiliaryrecord +type keystring status manning stage inflow rainfall evaporation runoff diversionrecord upstream_fraction cross_sectionrecord auxiliaryrecord shape tagged false in_record true @@ -703,6 +793,60 @@ reader urword longname fraction of upstream flow description real value that defines the fraction of upstream flow (USTRF) 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 same upstream reach must be equal to one. +block period +name cross_sectionrecord +type record cross_section tab6 filein tab6_filename +shape +tagged +in_record false +reader urword +longname +description + +block period +name cross_section +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname cross_section keyword +description keyword to specify that record corresponds to a reach cross-section. + +block period +name tab6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname head keyword +description keyword to specify that record corresponds to a cross-section table file. + +block period +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 period +name tab6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname table file name +description character string that defines the path and filename for the file containing cross-section table data for the reach. The TAB6\_FILENAME file includes the number of entries in the file and the station elevation data in terms of the fractional width and the reach depth. Instructions for creating the TAB6\_FILENAME input file are provided in SFR Reach Cross-Section Table Input File section. + block period name auxiliaryrecord type record auxiliary auxname auxval diff --git a/flopy/mf6/data/dfn/gwf-sto.dfn b/flopy/mf6/data/dfn/gwf-sto.dfn index 363249024c..d9f3b2a4c1 100644 --- a/flopy/mf6/data/dfn/gwf-sto.dfn +++ b/flopy/mf6/data/dfn/gwf-sto.dfn @@ -24,6 +24,49 @@ optional true longname keyword to indicate specific storage only applied under confined conditions description keyword to indicate that specific storage is only calculated when a cell is under confined conditions (head greater than or equal to the top of the cell). This option is identical to the approach used to calculate storage changes under confined conditions in MODFLOW-2005. +block options +name tvs_filerecord +type record tvs6 filein tvs_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name tvs6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname tvs keyword +description keyword to specify that record corresponds to a time-varying storage (TVS) file. The behavior of TVS and a description of the input file is provided separately. + +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 tvs_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of TVS information +description defines a time-varying storage (TVS) input file. Records in the TVS file can be used to change specific storage and specific yield properties at specified times or stress periods. + # --------------------- gwf sto griddata --------------------- block griddata diff --git a/flopy/mf6/data/dfn/gwf-uzf.dfn b/flopy/mf6/data/dfn/gwf-uzf.dfn index a451463d3d..b41e6c34ae 100644 --- a/flopy/mf6/data/dfn/gwf-uzf.dfn +++ b/flopy/mf6/data/dfn/gwf-uzf.dfn @@ -128,6 +128,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name package_convergence_filerecord type record package_convergence fileout package_convergence_filename diff --git a/flopy/mf6/data/dfn/gwt-ist.dfn b/flopy/mf6/data/dfn/gwt-ist.dfn index 92b299e70c..f31dc11cc4 100644 --- a/flopy/mf6/data/dfn/gwt-ist.dfn +++ b/flopy/mf6/data/dfn/gwt-ist.dfn @@ -8,6 +8,83 @@ optional true longname save calculated flows to budget file description REPLACE save_flows {'{#1}': 'IST'} +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 budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name sorption type keyword diff --git a/flopy/mf6/data/dfn/gwt-lkt.dfn b/flopy/mf6/data/dfn/gwt-lkt.dfn index b55a9e84c9..242de52c35 100644 --- a/flopy/mf6/data/dfn/gwt-lkt.dfn +++ b/flopy/mf6/data/dfn/gwt-lkt.dfn @@ -145,6 +145,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name ts_filerecord type record ts6 filein ts6_filename diff --git a/flopy/mf6/data/dfn/gwt-mvt.dfn b/flopy/mf6/data/dfn/gwt-mvt.dfn index 50846a5bef..e69b35782a 100644 --- a/flopy/mf6/data/dfn/gwt-mvt.dfn +++ b/flopy/mf6/data/dfn/gwt-mvt.dfn @@ -68,4 +68,37 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + diff --git a/flopy/mf6/data/dfn/gwt-mwt.dfn b/flopy/mf6/data/dfn/gwt-mwt.dfn index ba76760547..f250971b20 100644 --- a/flopy/mf6/data/dfn/gwt-mwt.dfn +++ b/flopy/mf6/data/dfn/gwt-mwt.dfn @@ -145,6 +145,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name ts_filerecord type record ts6 filein ts6_filename diff --git a/flopy/mf6/data/dfn/gwt-oc.dfn b/flopy/mf6/data/dfn/gwt-oc.dfn index 861456a1f0..a54fcbdd27 100644 --- a/flopy/mf6/data/dfn/gwt-oc.dfn +++ b/flopy/mf6/data/dfn/gwt-oc.dfn @@ -44,6 +44,39 @@ optional false longname file keyword description name of the output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name concentration_filerecord type record concentration fileout concentrationfile diff --git a/flopy/mf6/data/dfn/gwt-sft.dfn b/flopy/mf6/data/dfn/gwt-sft.dfn index ed49642388..b94d41503f 100644 --- a/flopy/mf6/data/dfn/gwt-sft.dfn +++ b/flopy/mf6/data/dfn/gwt-sft.dfn @@ -145,6 +145,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name ts_filerecord type record ts6 filein ts6_filename diff --git a/flopy/mf6/data/dfn/gwt-ssm.dfn b/flopy/mf6/data/dfn/gwt-ssm.dfn index b7a9abc2d1..085398bc4c 100644 --- a/flopy/mf6/data/dfn/gwt-ssm.dfn +++ b/flopy/mf6/data/dfn/gwt-ssm.dfn @@ -56,3 +56,67 @@ optional false longname auxiliary variable name description name of the auxiliary variable in the package PNAME. This auxiliary variable must exist and be specified by the user in that package. The values in this auxiliary variable will be used to set the concentration associated with the flows for that boundary package. + +# --------------------- gwt ssm fileinput --------------------- + +block fileinput +name fileinput +type recarray pname spc6 filein spc6_filename mixed +reader urword +longname +description + +block fileinput +name pname +in_record true +type string +tagged false +reader urword +longname package name +description name of the flow package for which an SPC6 input file contains a source concentration. If this flow package is represented using an advanced transport package (SFT, LKT, MWT, or UZT), then the advanced transport package will override SSM terms specified here. + + +block fileinput +name spc6 +type keyword +shape +in_record true +reader urword +tagged true +optional false +longname head keyword +description keyword to specify that record corresponds to a source sink mixing input file. + +block fileinput +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 fileinput +name spc6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname spc file name +description character string that defines the path and filename for the file containing source and sink input data for the flow package. The SPC6\_FILENAME file is a flexible input file that allows concentrations to be specified by stress period and with time series. Instructions for creating the SPC6\_FILENAME input file are provided in the next section on file input for boundary concentrations. + +block fileinput +name mixed +type keyword +shape +in_record true +reader urword +tagged true +optional true +longname mixed keyword +description keyword to specify that these stress package boundaries will have the mixed condition. The MIXED condition is described in the SOURCES block for AUXMIXED. The MIXED condition allows for water to be withdrawn at a concentration that is less than the cell concentration. It is intended primarily for representing evapotranspiration. + diff --git a/flopy/mf6/data/dfn/gwt-uzt.dfn b/flopy/mf6/data/dfn/gwt-uzt.dfn index 0f5589a191..8cf31c58a8 100644 --- a/flopy/mf6/data/dfn/gwt-uzt.dfn +++ b/flopy/mf6/data/dfn/gwt-uzt.dfn @@ -145,6 +145,39 @@ optional false longname file keyword description name of the binary output file to write budget information. +block options +name budgetcsv_filerecord +type record budgetcsv fileout budgetcsvfile +shape +reader urword +tagged true +optional true +longname +description + +block options +name budgetcsv +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 CSV. + +block options +name budgetcsvfile +type string +preserve_case true +shape +in_record true +reader urword +tagged false +optional false +longname file keyword +description name of the comma-separated value (CSV) output file to write budget summary information. A budget summary record will be written to this file for each time step of the simulation. + block options name ts_filerecord type record ts6 filein ts6_filename diff --git a/flopy/mf6/data/dfn/utl-laktab.dfn b/flopy/mf6/data/dfn/utl-laktab.dfn new file mode 100644 index 0000000000..a771ea0509 --- /dev/null +++ b/flopy/mf6/data/dfn/utl-laktab.dfn @@ -0,0 +1,69 @@ +# --------------------- gwf laktab dimensions --------------------- + +block dimensions +name nrow +type integer +reader urword +optional false +longname number of table rows +description integer value specifying the number of rows in the lake table. There must be NROW rows of data in the TABLE block. + +block dimensions +name ncol +type integer +reader urword +optional false +longname number of table columns +description integer value specifying the number of columns in the lake table. There must be NCOL columns of data in the TABLE block. For lakes with HORIZONTAL and/or VERTICAL CTYPE connections, NCOL must be equal to 3. For lakes with EMBEDDEDH or EMBEDDEDV CTYPE connections, NCOL must be equal to 4. + + +# --------------------- gwf laktab table --------------------- + +block table +name table +type recarray stage volume sarea barea +shape (nrow) +reader urword +longname +description + +block table +name stage +type double precision +shape +tagged false +in_record true +reader urword +longname lake stage +description real value that defines the stage corresponding to the remaining data on the line. + +block table +name volume +type double precision +shape +tagged false +in_record true +reader urword +longname lake volume +description real value that defines the lake volume corresponding to the stage specified on the line. + +block table +name sarea +type double precision +shape +tagged false +in_record true +reader urword +longname lake surface area +description real value that defines the lake surface area corresponding to the stage specified on the line. + +block table +name barea +type double precision +shape +tagged false +in_record true +reader urword +optional true +longname lake-GWF exchange area +description real value that defines the lake-GWF exchange area corresponding to the stage specified on the line. BAREA is only specified if the CLAKTYPE for the lake is EMBEDDEDH or EMBEDDEDV. diff --git a/flopy/mf6/data/dfn/utl-obs.dfn b/flopy/mf6/data/dfn/utl-obs.dfn index b2c9b4f886..d9bf05640a 100644 --- a/flopy/mf6/data/dfn/utl-obs.dfn +++ b/flopy/mf6/data/dfn/utl-obs.dfn @@ -7,7 +7,7 @@ shape reader urword optional true longname -description Keyword and an integer digits specifier used for conversion of simulated values to text on output. The default is 5 digits. When simulated values are written to a file specified as file type DATA in the Name File, the digits specifier controls the number of significant digits with which simulated values are written to the output file. The digits specifier has no effect on the number of significant digits with which the simulation time is written for continuous observations. +description Keyword and an integer digits specifier used for conversion of simulated values to text on output. If not specified, the default is the maximum number of digits stored in the program (as written with the G0 Fortran specifier). When simulated values are written to a comma-separated value text file specified in a CONTINUOUS block below, the digits specifier controls the number of significant digits with which simulated values are written to the output file. The digits specifier has no effect on the number of significant digits with which the simulation time is written for continuous observations. If DIGITS is specified as zero, then observations are written with the default setting, which is the maximum number of digits. block options name print_input diff --git a/flopy/mf6/data/dfn/utl-sfrtab.dfn b/flopy/mf6/data/dfn/utl-sfrtab.dfn new file mode 100644 index 0000000000..b6a1bdca6e --- /dev/null +++ b/flopy/mf6/data/dfn/utl-sfrtab.dfn @@ -0,0 +1,48 @@ +# --------------------- gwf sfrtab dimensions --------------------- + +block dimensions +name nrow +type integer +reader urword +optional false +longname number of table rows +description integer value specifying the number of rows in the reach cross-section table. There must be NROW rows of data in the TABLE block. + +block dimensions +name ncol +type integer +reader urword +optional false +longname number of table columns +description integer value specifying the number of columns in the reach cross-section table. There must be NCOL columns of data in the TABLE block. Currently, NCOL must be equal to 2. + + +# --------------------- gwf sfrtab table --------------------- + +block table +name table +type recarray xfraction depth +shape (nrow) +reader urword +longname +description + +block table +name xfraction +type double precision +shape +tagged false +in_record true +reader urword +longname fractional width +description real value that defines the station (x) data for the cross-section as a fraction of the width (RWID) of the reach. + +block table +name depth +type double precision +shape +tagged false +in_record true +reader urword +longname depth +description real value that defines the elevation (z) data for the cross-section as a depth relative to the top elevation of the reach (RTP) and corresponding to the station data on the same line. diff --git a/flopy/mf6/data/dfn/utl-spc.dfn b/flopy/mf6/data/dfn/utl-spc.dfn new file mode 100644 index 0000000000..a005b16c54 --- /dev/null +++ b/flopy/mf6/data/dfn/utl-spc.dfn @@ -0,0 +1,117 @@ +# --------------------- ssm spc options --------------------- + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'spc'} + +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 {} + +# --------------------- ssm spc dimensions --------------------- + +block dimensions +name maxbound +type integer +reader urword +optional false +longname maximum number of ssm entries +description REPLACE maxbound {'{#1}': 'spc'} + +# --------------------- ssm spc 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 perioddata +type recarray bndno spcsetting +shape +reader urword +longname +description + +block period +name bndno +type integer +shape +tagged false +in_record true +reader urword +longname bound number for this entry +description integer value that defines the boundary package feature number associated with the specified PERIOD data on the line. BNDNO must be greater than zero and less than or equal to MAXBOUND. +numeric_index true + +block period +name spcsetting +type keystring concentration +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 MAWSETTING string include: CONCENTRATION. + +block period +name concentration +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname well boundary concentration +description is the boundary concentration. 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. By default, the CONCENTRATION for each boundary feature is zero. diff --git a/flopy/mf6/data/dfn/utl-spca.dfn b/flopy/mf6/data/dfn/utl-spca.dfn new file mode 100644 index 0000000000..eaad9207d5 --- /dev/null +++ b/flopy/mf6/data/dfn/utl-spca.dfn @@ -0,0 +1,88 @@ +# --------------------- ssm spca options --------------------- + +block options +name readasarrays +type keyword +shape +reader urword +optional false +longname use array-based input +description indicates that array-based input will be used for the SPC Package. This keyword must be specified to use array-based input. +default_value True + +block options +name print_input +type keyword +reader urword +optional true +longname print input to listing file +description REPLACE print_input {'{#1}': 'spc'} + +block options +name tas_filerecord +type record tas6 filein tas6_filename +shape +reader urword +tagged true +optional true +longname +description + +block options +name tas6 +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-array-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 tas6_filename +type string +preserve_case true +in_record true +reader urword +optional false +tagged false +longname file name of time series information +description defines a time-array-series file defining a time-array series that can be used to assign time-varying values. See the Time-Variable Input section for instructions on using the time-array series capability. + + +# --------------------- ssm spca 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 concentration +type double precision +shape (ncol*nrow; ncpl) +reader readarray +longname concentration +description is the concentration of the associated Recharge or Evapotranspiration stress package. The concentration array may be defined by a time-array series (see the "Using Time-Array Series in a Package" section). +default_value 0. + diff --git a/flopy/mf6/data/dfn/utl-tvk.dfn b/flopy/mf6/data/dfn/utl-tvk.dfn new file mode 100644 index 0000000000..91366f6a84 --- /dev/null +++ b/flopy/mf6/data/dfn/utl-tvk.dfn @@ -0,0 +1,121 @@ +# --------------------- gwf tvk options --------------------- + +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 {} + + +# --------------------- gwf tvk 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 perioddata +type recarray cellid tvksetting +shape +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 tvksetting +type keystring k k22 k33 +shape +tagged false +in_record true +reader urword +longname +description line of information that is parsed into a property name keyword and values. Property name keywords that can be used to start the TVKSETTING string include: K, K22, and K33. + +block period +name k +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname hydraulic conductivity (L/T) +description is the new value to be assigned as the cell's hydraulic conductivity from the start of the specified stress period, as per K in the NPF package. If the OPTIONS block includes a TS6 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 k22 +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname hydraulic conductivity of second ellipsoid axis (L/T) +description is the new value to be assigned as the cell's hydraulic conductivity of the second ellipsoid axis (or the ratio of K22/K if the K22OVERK NPF package option is specified) from the start of the specified stress period, as per K22 in the NPF package. For an unrotated case this is the hydraulic conductivity in the y direction. If the OPTIONS block includes a TS6 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 k33 +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname hydraulic conductivity of third ellipsoid axis (L/T) +description is the new value to be assigned as the cell's hydraulic conductivity of the third ellipsoid axis (or the ratio of K33/K if the K33OVERK NPF package option is specified) from the start of the specified stress period, as per K33 in the NPF package. For an unrotated case, this is the vertical hydraulic conductivity. If the OPTIONS block includes a TS6 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/utl-tvs.dfn b/flopy/mf6/data/dfn/utl-tvs.dfn new file mode 100644 index 0000000000..d7cb3e2fd8 --- /dev/null +++ b/flopy/mf6/data/dfn/utl-tvs.dfn @@ -0,0 +1,118 @@ +# --------------------- gwf tvs options --------------------- + +block options +name disable_storage_change_integration +type keyword +reader urword +optional true +longname deactivate storage change integration +description keyword that deactivates inclusion of storage derivative terms in the STO package matrix formulation. In the absence of this keyword (the default), the groundwater storage formulation will be modified to correctly adjust heads based on transient variations in stored water volumes arising from changes to SS and SY properties. + +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 {} + + +# --------------------- gwf tvs 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 perioddata +type recarray cellid tvssetting +shape +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 tvssetting +type keystring ss sy +shape +tagged false +in_record true +reader urword +longname +description line of information that is parsed into a property name keyword and values. Property name keywords that can be used to start the TVSSETTING string include: SS and SY. + +block period +name ss +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname specific storage +description is the new value to be assigned as the cell's specific storage (or storage coefficient if the STORAGECOEFFICIENT STO package option is specified) from the start of the specified stress period, as per SS in the STO package. Specific storage values must be greater than or equal to 0. If the OPTIONS block includes a TS6 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 sy +type double precision +shape +tagged true +in_record true +reader urword +time_series true +longname specific yield +description is the new value to be assigned as the cell's specific yield from the start of the specified stress period, as per SY in the STO package. Specific yield values must be greater than or equal to 0. If the OPTIONS block includes a TS6 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/modflow/__init__.py b/flopy/mf6/modflow/__init__.py index 9b6f02550b..c180101eee 100644 --- a/flopy/mf6/modflow/__init__.py +++ b/flopy/mf6/modflow/__init__.py @@ -12,6 +12,12 @@ from .mfutltas import ModflowUtltas from .mfutlats import ModflowUtlats from .mfutllaktab import ModflowUtllaktab +from .mfutllaktab import ModflowUtllaktab +from .mfutlsfrtab import ModflowUtlsfrtab +from .mfutlspc import ModflowUtlspc +from .mfutlspca import ModflowUtlspca +from .mfutltvk import ModflowUtltvk +from .mfutltvs import ModflowUtltvs from .mfgwfnam import ModflowGwfnam from .mfgwf import ModflowGwf from .mfgwfdis import ModflowGwfdis @@ -37,27 +43,27 @@ from .mfgwfmvr import ModflowGwfmvr from .mfgwfgnc import ModflowGwfgnc from .mfgwfoc import ModflowGwfoc -from .mfgwfcsub import ModflowGwfcsub -from .mfgwfbuy import ModflowGwfbuy from .mfgwfapi import ModflowGwfapi +from .mfgwfbuy import ModflowGwfbuy +from .mfgwfcsub import ModflowGwfcsub from .mfgwtnam import ModflowGwtnam from .mfgwt import ModflowGwt -from .mfgwtuzt import ModflowGwtuzt +from .mfgwtadv import ModflowGwtadv from .mfgwtapi import ModflowGwtapi -from .mfgwtmvt import ModflowGwtmvt -from .mfgwtdsp import ModflowGwtdsp -from .mfgwtssm import ModflowGwtssm -from .mfgwtmwt import ModflowGwtmwt from .mfgwtcnc import ModflowGwtcnc -from .mfgwtsft import ModflowGwtsft -from .mfgwtdisv import ModflowGwtdisv -from .mfgwtlkt import ModflowGwtlkt -from .mfgwtic import ModflowGwtic -from .mfgwtdisu import ModflowGwtdisu -from .mfgwtsrc import ModflowGwtsrc from .mfgwtdis import ModflowGwtdis -from .mfgwtoc import ModflowGwtoc -from .mfgwtadv import ModflowGwtadv +from .mfgwtdisu import ModflowGwtdisu +from .mfgwtdisv import ModflowGwtdisv +from .mfgwtdsp import ModflowGwtdsp from .mfgwtfmi import ModflowGwtfmi +from .mfgwtic import ModflowGwtic from .mfgwtist import ModflowGwtist +from .mfgwtlkt import ModflowGwtlkt from .mfgwtmst import ModflowGwtmst +from .mfgwtmvt import ModflowGwtmvt +from .mfgwtmwt import ModflowGwtmwt +from .mfgwtoc import ModflowGwtoc +from .mfgwtsft import ModflowGwtsft +from .mfgwtsrc import ModflowGwtsrc +from .mfgwtssm import ModflowGwtssm +from .mfgwtuzt import ModflowGwtuzt diff --git a/flopy/mf6/modflow/mfgnc.py b/flopy/mf6/modflow/mfgnc.py index 9a6427ef74..027f163d87 100644 --- a/flopy/mf6/modflow/mfgnc.py +++ b/flopy/mf6/modflow/mfgnc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwf.py b/flopy/mf6/modflow/mfgwf.py index 0df73b03f4..d439514642 100644 --- a/flopy/mf6/modflow/mfgwf.py +++ b/flopy/mf6/modflow/mfgwf.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfmodel from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfapi.py b/flopy/mf6/modflow/mfgwfapi.py index 75ea59fa84..308ae58674 100644 --- a/flopy/mf6/modflow/mfgwfapi.py +++ b/flopy/mf6/modflow/mfgwfapi.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfbuy.py b/flopy/mf6/modflow/mfgwfbuy.py index 11361b533b..10758d0285 100644 --- a/flopy/mf6/modflow/mfgwfbuy.py +++ b/flopy/mf6/modflow/mfgwfbuy.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfchd.py b/flopy/mf6/modflow/mfgwfchd.py index 8098a4ef0c..61d25876ea 100644 --- a/flopy/mf6/modflow/mfgwfchd.py +++ b/flopy/mf6/modflow/mfgwfchd.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfcsub.py b/flopy/mf6/modflow/mfgwfcsub.py index 1f18bb72d5..b237975ec6 100644 --- a/flopy/mf6/modflow/mfgwfcsub.py +++ b/flopy/mf6/modflow/mfgwfcsub.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfdis.py b/flopy/mf6/modflow/mfgwfdis.py index 03c35d1cd8..b9c3515ffe 100644 --- a/flopy/mf6/modflow/mfgwfdis.py +++ b/flopy/mf6/modflow/mfgwfdis.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfdisu.py b/flopy/mf6/modflow/mfgwfdisu.py index b4e92eeaa5..43f8f0fa59 100644 --- a/flopy/mf6/modflow/mfgwfdisu.py +++ b/flopy/mf6/modflow/mfgwfdisu.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfdisv.py b/flopy/mf6/modflow/mfgwfdisv.py index 5e2794b66a..65ddc20050 100644 --- a/flopy/mf6/modflow/mfgwfdisv.py +++ b/flopy/mf6/modflow/mfgwfdisv.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfdrn.py b/flopy/mf6/modflow/mfgwfdrn.py index 1032add260..fa66bac808 100644 --- a/flopy/mf6/modflow/mfgwfdrn.py +++ b/flopy/mf6/modflow/mfgwfdrn.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfevt.py b/flopy/mf6/modflow/mfgwfevt.py index 53cf4393ee..df3f33f28e 100644 --- a/flopy/mf6/modflow/mfgwfevt.py +++ b/flopy/mf6/modflow/mfgwfevt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfevta.py b/flopy/mf6/modflow/mfgwfevta.py index 90bfa1d3d5..8ffc3b3b10 100644 --- a/flopy/mf6/modflow/mfgwfevta.py +++ b/flopy/mf6/modflow/mfgwfevta.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfghb.py b/flopy/mf6/modflow/mfgwfghb.py index fa3eae5abd..7d591c6a36 100644 --- a/flopy/mf6/modflow/mfgwfghb.py +++ b/flopy/mf6/modflow/mfgwfghb.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfgnc.py b/flopy/mf6/modflow/mfgwfgnc.py index c9dda0d98b..a8bbd14599 100644 --- a/flopy/mf6/modflow/mfgwfgnc.py +++ b/flopy/mf6/modflow/mfgwfgnc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfgwf.py b/flopy/mf6/modflow/mfgwfgwf.py index 3a0eac116d..096ac3fd0c 100644 --- a/flopy/mf6/modflow/mfgwfgwf.py +++ b/flopy/mf6/modflow/mfgwfgwf.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -71,6 +71,9 @@ class ModflowGwfgwf(mfpackage.MFPackage): * newton (boolean) keyword that activates the Newton-Raphson formulation for groundwater flow between connected, convertible groundwater cells. Cells will not dry when this option is used. + xt3d : boolean + * xt3d (boolean) keyword that activates the XT3D formulation between + the cells connected with this GWF-GWF Exchange. gnc_filerecord : [gnc6_filename] * gnc6_filename (string) is the file name for ghost node correction input file. Information for the ghost nodes are provided in the file @@ -233,6 +236,13 @@ class ModflowGwfgwf(mfpackage.MFPackage): "reader urword", "optional true", ], + [ + "block options", + "name xt3d", + "type keyword", + "reader urword", + "optional true", + ], [ "block options", "name gnc_filerecord", @@ -429,6 +439,7 @@ def __init__( cell_averaging=None, cvoptions=None, newton=None, + xt3d=None, gnc_filerecord=None, mvr_filerecord=None, observations=None, @@ -460,6 +471,7 @@ def __init__( ) self.cvoptions = self.build_mfdata("cvoptions", cvoptions) self.newton = self.build_mfdata("newton", newton) + self.xt3d = self.build_mfdata("xt3d", xt3d) self.gnc_filerecord = self.build_mfdata( "gnc_filerecord", gnc_filerecord ) diff --git a/flopy/mf6/modflow/mfgwfgwt.py b/flopy/mf6/modflow/mfgwfgwt.py index fcb2ccd185..4502cc760a 100644 --- a/flopy/mf6/modflow/mfgwfgwt.py +++ b/flopy/mf6/modflow/mfgwfgwt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage diff --git a/flopy/mf6/modflow/mfgwfhfb.py b/flopy/mf6/modflow/mfgwfhfb.py index 466a2d79df..4128ba34cd 100644 --- a/flopy/mf6/modflow/mfgwfhfb.py +++ b/flopy/mf6/modflow/mfgwfhfb.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfic.py b/flopy/mf6/modflow/mfgwfic.py index a00cda045e..211d5e3e57 100644 --- a/flopy/mf6/modflow/mfgwfic.py +++ b/flopy/mf6/modflow/mfgwfic.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwflak.py b/flopy/mf6/modflow/mfgwflak.py index 9ef85100e7..06a12db27d 100644 --- a/flopy/mf6/modflow/mfgwflak.py +++ b/flopy/mf6/modflow/mfgwflak.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -59,6 +59,10 @@ class ModflowGwflak(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. package_convergence_filerecord : [package_convergence_filename] * package_convergence_filename (string) name of the comma spaced values output file to write package convergence information. @@ -421,6 +425,9 @@ class ModflowGwflak(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "lak", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "lak", "options", "budgetcsv_filerecord") + ) package_convergence_filerecord = ListTemplateGenerator( ("gwf6", "lak", "options", "package_convergence_filerecord") ) @@ -558,6 +565,36 @@ class ModflowGwflak(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name package_convergence_filerecord", @@ -1201,6 +1238,7 @@ def __init__( save_flows=None, stage_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, package_convergence_filerecord=None, timeseries=None, observations=None, @@ -1237,6 +1275,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.package_convergence_filerecord = self.build_mfdata( "package_convergence_filerecord", package_convergence_filerecord ) diff --git a/flopy/mf6/modflow/mfgwfmaw.py b/flopy/mf6/modflow/mfgwfmaw.py index 5832160cff..01d9725ff8 100644 --- a/flopy/mf6/modflow/mfgwfmaw.py +++ b/flopy/mf6/modflow/mfgwfmaw.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -59,6 +59,10 @@ class ModflowGwfmaw(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. no_well_storage : boolean * no_well_storage (boolean) keyword that deactivates inclusion of well storage contributions to the multi-aquifer well package continuity @@ -362,6 +366,9 @@ class ModflowGwfmaw(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "maw", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "maw", "options", "budgetcsv_filerecord") + ) ts_filerecord = ListTemplateGenerator( ("gwf6", "maw", "options", "ts_filerecord") ) @@ -494,6 +501,36 @@ class ModflowGwfmaw(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name no_well_storage", @@ -1015,6 +1052,7 @@ def __init__( save_flows=None, head_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, no_well_storage=None, flow_correction=None, flowing_wells=None, @@ -1048,6 +1086,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.no_well_storage = self.build_mfdata( "no_well_storage", no_well_storage ) diff --git a/flopy/mf6/modflow/mfgwfmvr.py b/flopy/mf6/modflow/mfgwfmvr.py index 6cc92240d5..e54ed1bfea 100644 --- a/flopy/mf6/modflow/mfgwfmvr.py +++ b/flopy/mf6/modflow/mfgwfmvr.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -39,6 +39,10 @@ class ModflowGwfmvr(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. maxmvr : integer * maxmvr (integer) integer value specifying the maximum number of water mover entries that will specified for any stress period. @@ -111,6 +115,9 @@ class ModflowGwfmvr(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "mvr", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "mvr", "options", "budgetcsv_filerecord") + ) packages = ListTemplateGenerator(("gwf6", "mvr", "packages", "packages")) perioddata = ListTemplateGenerator(("gwf6", "mvr", "period", "perioddata")) package_abbr = "gwfmvr" @@ -179,6 +186,36 @@ class ModflowGwfmvr(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block dimensions", "name maxmvr", @@ -326,6 +363,7 @@ def __init__( print_flows=None, modelnames=None, budget_filerecord=None, + budgetcsv_filerecord=None, maxmvr=None, maxpackages=None, packages=None, @@ -345,6 +383,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.maxmvr = self.build_mfdata("maxmvr", maxmvr) self.maxpackages = self.build_mfdata("maxpackages", maxpackages) self.packages = self.build_mfdata("packages", packages) diff --git a/flopy/mf6/modflow/mfgwfnam.py b/flopy/mf6/modflow/mfgwfnam.py index 1106adf4d6..dcc7cf8723 100644 --- a/flopy/mf6/modflow/mfgwfnam.py +++ b/flopy/mf6/modflow/mfgwfnam.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfnpf.py b/flopy/mf6/modflow/mfgwfnpf.py index c41c5f17e1..9df3e6477e 100644 --- a/flopy/mf6/modflow/mfgwfnpf.py +++ b/flopy/mf6/modflow/mfgwfnpf.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator @@ -92,6 +92,11 @@ class ModflowGwfnpf(mfpackage.MFPackage): * k33overk (boolean) keyword to indicate that specified K33 is a ratio of K33 divided by K. If this option is specified, then the K33 array entered in the NPF Package will be multiplied by K after being read. + tvk_filerecord : [tvk_filename] + * tvk_filename (string) defines a time-varying hydraulic conductivity + (TVK) input file. Records in the TVK file can be used to change + hydraulic conductivity properties at specified times or stress + periods. icelltype : [integer] * icelltype (integer) flag for each cell that specifies how saturated thickness is treated. 0 means saturated thickness is held constant; @@ -196,6 +201,9 @@ class ModflowGwfnpf(mfpackage.MFPackage): rewet_record = ListTemplateGenerator( ("gwf6", "npf", "options", "rewet_record") ) + tvk_filerecord = ListTemplateGenerator( + ("gwf6", "npf", "options", "tvk_filerecord") + ) icelltype = ArrayTemplateGenerator( ("gwf6", "npf", "griddata", "icelltype") ) @@ -351,6 +359,45 @@ class ModflowGwfnpf(mfpackage.MFPackage): "reader urword", "optional true", ], + [ + "block options", + "name tvk_filerecord", + "type record tvk6 filein tvk_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name tvk6", + "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 tvk_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], [ "block griddata", "name icelltype", @@ -450,6 +497,7 @@ def __init__( save_saturation=None, k22overk=None, k33overk=None, + tvk_filerecord=None, icelltype=0, k=1.0, k22=None, @@ -484,6 +532,9 @@ def __init__( ) self.k22overk = self.build_mfdata("k22overk", k22overk) self.k33overk = self.build_mfdata("k33overk", k33overk) + self.tvk_filerecord = self.build_mfdata( + "tvk_filerecord", tvk_filerecord + ) self.icelltype = self.build_mfdata("icelltype", icelltype) self.k = self.build_mfdata("k", k) self.k22 = self.build_mfdata("k22", k22) diff --git a/flopy/mf6/modflow/mfgwfoc.py b/flopy/mf6/modflow/mfgwfoc.py index e750e3a5df..524b6fe964 100644 --- a/flopy/mf6/modflow/mfgwfoc.py +++ b/flopy/mf6/modflow/mfgwfoc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -20,6 +20,10 @@ class ModflowGwfoc(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. head_filerecord : [headfile] * headfile (string) name of the output file to write head information. headprintrecord : [columns, width, digits, format] @@ -90,6 +94,9 @@ class ModflowGwfoc(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "oc", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "oc", "options", "budgetcsv_filerecord") + ) head_filerecord = ListTemplateGenerator( ("gwf6", "oc", "options", "head_filerecord") ) @@ -145,6 +152,36 @@ class ModflowGwfoc(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name head_filerecord", @@ -361,6 +398,7 @@ def __init__( model, loading_package=False, budget_filerecord=None, + budgetcsv_filerecord=None, head_filerecord=None, headprintrecord=None, saverecord=None, @@ -377,6 +415,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.head_filerecord = self.build_mfdata( "head_filerecord", head_filerecord ) diff --git a/flopy/mf6/modflow/mfgwfrch.py b/flopy/mf6/modflow/mfgwfrch.py index 40abe13c4d..2a4a3ba541 100644 --- a/flopy/mf6/modflow/mfgwfrch.py +++ b/flopy/mf6/modflow/mfgwfrch.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfrcha.py b/flopy/mf6/modflow/mfgwfrcha.py index 2f0a01ac92..83845f27a6 100644 --- a/flopy/mf6/modflow/mfgwfrcha.py +++ b/flopy/mf6/modflow/mfgwfrcha.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfriv.py b/flopy/mf6/modflow/mfgwfriv.py index fb4fd6ea00..e85b8a8c43 100644 --- a/flopy/mf6/modflow/mfgwfriv.py +++ b/flopy/mf6/modflow/mfgwfriv.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwfsfr.py b/flopy/mf6/modflow/mfgwfsfr.py index c1d8ef50c4..f7df715ebd 100644 --- a/flopy/mf6/modflow/mfgwfsfr.py +++ b/flopy/mf6/modflow/mfgwfsfr.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -59,6 +59,10 @@ class ModflowGwfsfr(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. package_convergence_filerecord : [package_convergence_filename] * package_convergence_filename (string) name of the comma spaced values output file to write package convergence information. @@ -169,6 +173,22 @@ class ModflowGwfsfr(mfpackage.MFPackage): 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. + crosssections : [rno, tab6_filename] + * rno (integer) integer value that defines the reach number associated + with the specified cross-section table file on the line. RNO must be + greater than zero and less than or equal to NREACHES. The program + will also terminate with an error if table information for a reach 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. + * tab6_filename (string) character string that defines the path and + filename for the file containing cross-section table data for the + reach. The TAB6_FILENAME file includes the number of entries in the + file and the station elevation data in terms of the fractional width + and the reach depth. Instructions for creating the TAB6_FILENAME + input file are provided in SFR Reach Cross-Section Table Input File + section. connectiondata : [rno, ic] * rno (integer) integer value that defines the reach number associated with the specified CONNECTIONDATA data on the line. RNO must be @@ -355,6 +375,14 @@ class ModflowGwfsfr(mfpackage.MFPackage): that is applied as upstream inflow to the reach. The sum of all USTRF values for all reaches connected to the same upstream reach must be equal to one. + cross_sectionrecord : [tab6_filename] + * tab6_filename (string) character string that defines the path + and filename for the file containing cross-section table data + for the reach. The TAB6_FILENAME file includes the number of + entries in the file and the station elevation data in terms + of the fractional width and the reach depth. Instructions for + creating the TAB6_FILENAME input file are provided in SFR + Reach Cross-Section Table Input File section. auxiliaryrecord : [auxname, auxval] * auxname (string) name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary @@ -384,6 +412,9 @@ class ModflowGwfsfr(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "sfr", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "sfr", "options", "budgetcsv_filerecord") + ) package_convergence_filerecord = ListTemplateGenerator( ("gwf6", "sfr", "options", "package_convergence_filerecord") ) @@ -396,6 +427,9 @@ class ModflowGwfsfr(mfpackage.MFPackage): packagedata = ListTemplateGenerator( ("gwf6", "sfr", "packagedata", "packagedata") ) + crosssections = ListTemplateGenerator( + ("gwf6", "sfr", "crosssections", "crosssections") + ) connectiondata = ListTemplateGenerator( ("gwf6", "sfr", "connectiondata", "connectiondata") ) @@ -522,6 +556,36 @@ class ModflowGwfsfr(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name package_convergence_filerecord", @@ -809,6 +873,55 @@ class ModflowGwfsfr(mfpackage.MFPackage): "reader urword", "optional true", ], + [ + "block crosssections", + "name crosssections", + "type recarray rno tab6 filein tab6_filename", + "shape", + "valid", + "optional false", + "reader urword", + ], + [ + "block crosssections", + "name rno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block crosssections", + "name tab6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block crosssections", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block crosssections", + "name tab6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], [ "block connectiondata", "name connectiondata", @@ -917,7 +1030,8 @@ class ModflowGwfsfr(mfpackage.MFPackage): "block period", "name sfrsetting", "type keystring status manning stage inflow rainfall evaporation " - "runoff diversionrecord upstream_fraction auxiliaryrecord", + "runoff diversionrecord upstream_fraction cross_sectionrecord " + "auxiliaryrecord", "shape", "tagged false", "in_record true", @@ -1038,6 +1152,55 @@ class ModflowGwfsfr(mfpackage.MFPackage): "in_record true", "reader urword", ], + [ + "block period", + "name cross_sectionrecord", + "type record cross_section tab6 filein tab6_filename", + "shape", + "tagged", + "in_record false", + "reader urword", + ], + [ + "block period", + "name cross_section", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block period", + "name tab6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block period", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block period", + "name tab6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], [ "block period", "name auxiliaryrecord", @@ -1088,6 +1251,7 @@ def __init__( save_flows=None, stage_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, package_convergence_filerecord=None, timeseries=None, observations=None, @@ -1098,6 +1262,7 @@ def __init__( unit_conversion=None, nreaches=None, packagedata=None, + crosssections=None, connectiondata=None, diversions=None, perioddata=None, @@ -1122,6 +1287,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.package_convergence_filerecord = self.build_mfdata( "package_convergence_filerecord", package_convergence_filerecord ) @@ -1148,6 +1316,7 @@ def __init__( ) self.nreaches = self.build_mfdata("nreaches", nreaches) self.packagedata = self.build_mfdata("packagedata", packagedata) + self.crosssections = self.build_mfdata("crosssections", crosssections) self.connectiondata = self.build_mfdata( "connectiondata", connectiondata ) diff --git a/flopy/mf6/modflow/mfgwfsto.py b/flopy/mf6/modflow/mfgwfsto.py index a94890464a..e1a9b08818 100644 --- a/flopy/mf6/modflow/mfgwfsto.py +++ b/flopy/mf6/modflow/mfgwfsto.py @@ -1,8 +1,8 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage -from ..data.mfdatautil import ArrayTemplateGenerator +from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator class ModflowGwfsto(mfpackage.MFPackage): @@ -30,6 +30,10 @@ class ModflowGwfsto(mfpackage.MFPackage): greater than or equal to the top of the cell). This option is identical to the approach used to calculate storage changes under confined conditions in MODFLOW-2005. + tvs_filerecord : [tvs_filename] + * tvs_filename (string) defines a time-varying storage (TVS) input + file. Records in the TVS file can be used to change specific storage + and specific yield properties at specified times or stress periods. iconvert : [integer] * iconvert (integer) is a flag for each cell that specifies whether or not a cell is convertible for the storage calculation. 0 indicates @@ -67,6 +71,9 @@ class ModflowGwfsto(mfpackage.MFPackage): """ + tvs_filerecord = ListTemplateGenerator( + ("gwf6", "sto", "options", "tvs_filerecord") + ) iconvert = ArrayTemplateGenerator(("gwf6", "sto", "griddata", "iconvert")) ss = ArrayTemplateGenerator(("gwf6", "sto", "griddata", "ss")) sy = ArrayTemplateGenerator(("gwf6", "sto", "griddata", "sy")) @@ -96,6 +103,45 @@ class ModflowGwfsto(mfpackage.MFPackage): "reader urword", "optional true", ], + [ + "block options", + "name tvs_filerecord", + "type record tvs6 filein tvs_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name tvs6", + "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 tvs_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], [ "block griddata", "name iconvert", @@ -168,6 +214,7 @@ def __init__( save_flows=None, storagecoefficient=None, ss_confined_only=None, + tvs_filerecord=None, iconvert=0, ss=1.0e-5, sy=0.15, @@ -189,6 +236,9 @@ def __init__( self.ss_confined_only = self.build_mfdata( "ss_confined_only", ss_confined_only ) + self.tvs_filerecord = self.build_mfdata( + "tvs_filerecord", tvs_filerecord + ) self.iconvert = self.build_mfdata("iconvert", iconvert) self.ss = self.build_mfdata("ss", ss) self.sy = self.build_mfdata("sy", sy) diff --git a/flopy/mf6/modflow/mfgwfuzf.py b/flopy/mf6/modflow/mfgwfuzf.py index 3c4f4d77d6..c92cd835a9 100644 --- a/flopy/mf6/modflow/mfgwfuzf.py +++ b/flopy/mf6/modflow/mfgwfuzf.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -56,6 +56,10 @@ class ModflowGwfuzf(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. package_convergence_filerecord : [package_convergence_filename] * package_convergence_filename (string) name of the comma spaced values output file to write package convergence information. @@ -269,6 +273,9 @@ class ModflowGwfuzf(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwf6", "uzf", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwf6", "uzf", "options", "budgetcsv_filerecord") + ) package_convergence_filerecord = ListTemplateGenerator( ("gwf6", "uzf", "options", "package_convergence_filerecord") ) @@ -402,6 +409,36 @@ class ModflowGwfuzf(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name package_convergence_filerecord", @@ -819,6 +856,7 @@ def __init__( save_flows=None, wc_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, package_convergence_filerecord=None, timeseries=None, observations=None, @@ -853,6 +891,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.package_convergence_filerecord = self.build_mfdata( "package_convergence_filerecord", package_convergence_filerecord ) diff --git a/flopy/mf6/modflow/mfgwfwel.py b/flopy/mf6/modflow/mfgwfwel.py index 032eca4389..d788975b31 100644 --- a/flopy/mf6/modflow/mfgwfwel.py +++ b/flopy/mf6/modflow/mfgwfwel.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwt.py b/flopy/mf6/modflow/mfgwt.py index a38b73e554..5cfd3ce777 100644 --- a/flopy/mf6/modflow/mfgwt.py +++ b/flopy/mf6/modflow/mfgwt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfmodel from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtadv.py b/flopy/mf6/modflow/mfgwtadv.py index f7c99eac7e..cdedfbbcc4 100644 --- a/flopy/mf6/modflow/mfgwtadv.py +++ b/flopy/mf6/modflow/mfgwtadv.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage diff --git a/flopy/mf6/modflow/mfgwtapi.py b/flopy/mf6/modflow/mfgwtapi.py index 8b23155b0e..500c16a381 100644 --- a/flopy/mf6/modflow/mfgwtapi.py +++ b/flopy/mf6/modflow/mfgwtapi.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtcnc.py b/flopy/mf6/modflow/mfgwtcnc.py index 08a4deb1c7..e1dd42f04e 100644 --- a/flopy/mf6/modflow/mfgwtcnc.py +++ b/flopy/mf6/modflow/mfgwtcnc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtdis.py b/flopy/mf6/modflow/mfgwtdis.py index ec09046385..e02550c95a 100644 --- a/flopy/mf6/modflow/mfgwtdis.py +++ b/flopy/mf6/modflow/mfgwtdis.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtdisu.py b/flopy/mf6/modflow/mfgwtdisu.py index 7024be7bc7..d005a173b3 100644 --- a/flopy/mf6/modflow/mfgwtdisu.py +++ b/flopy/mf6/modflow/mfgwtdisu.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtdisv.py b/flopy/mf6/modflow/mfgwtdisv.py index af5e3f44ee..7e309611e5 100644 --- a/flopy/mf6/modflow/mfgwtdisv.py +++ b/flopy/mf6/modflow/mfgwtdisv.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtdsp.py b/flopy/mf6/modflow/mfgwtdsp.py index 9bcf665981..982c8dd2e0 100644 --- a/flopy/mf6/modflow/mfgwtdsp.py +++ b/flopy/mf6/modflow/mfgwtdsp.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtfmi.py b/flopy/mf6/modflow/mfgwtfmi.py index ba4fbce06a..12d42ff517 100644 --- a/flopy/mf6/modflow/mfgwtfmi.py +++ b/flopy/mf6/modflow/mfgwtfmi.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtic.py b/flopy/mf6/modflow/mfgwtic.py index 82cd016cf7..e89a51116a 100644 --- a/flopy/mf6/modflow/mfgwtic.py +++ b/flopy/mf6/modflow/mfgwtic.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtist.py b/flopy/mf6/modflow/mfgwtist.py index d11087e598..6eca4efa27 100644 --- a/flopy/mf6/modflow/mfgwtist.py +++ b/flopy/mf6/modflow/mfgwtist.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator @@ -21,6 +21,13 @@ class ModflowGwtist(mfpackage.MFPackage): * save_flows (boolean) keyword to indicate that IST 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. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. sorption : boolean * sorption (boolean) is a text keyword to indicate that sorption will be activated. Use of this keyword requires that BULK_DENSITY and @@ -44,6 +51,9 @@ class ModflowGwtist(mfpackage.MFPackage): concentrations will be written to this file at the same interval as mobile domain concentrations are saved, as specified in the GWT Model Output Control file. + fileout : boolean + * fileout (boolean) keyword to specify that an output filename is + expected next. cimprintrecord : [columns, width, digits, format] * columns (integer) number of columns for writing data. * width (integer) width for writing each number. @@ -99,6 +109,12 @@ class ModflowGwtist(mfpackage.MFPackage): """ + budget_filerecord = ListTemplateGenerator( + ("gwt6", "ist", "options", "budget_filerecord") + ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "ist", "options", "budgetcsv_filerecord") + ) cim_filerecord = ListTemplateGenerator( ("gwt6", "ist", "options", "cim_filerecord") ) @@ -128,6 +144,76 @@ class ModflowGwtist(mfpackage.MFPackage): "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", + ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name sorption", @@ -323,10 +409,13 @@ def __init__( model, loading_package=False, save_flows=None, + budget_filerecord=None, + budgetcsv_filerecord=None, sorption=None, first_order_decay=None, zero_order_decay=None, cim_filerecord=None, + fileout=None, cimprintrecord=None, cim=None, thetaim=None, @@ -345,6 +434,12 @@ def __init__( # set up variables self.save_flows = self.build_mfdata("save_flows", save_flows) + self.budget_filerecord = self.build_mfdata( + "budget_filerecord", budget_filerecord + ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.sorption = self.build_mfdata("sorption", sorption) self.first_order_decay = self.build_mfdata( "first_order_decay", first_order_decay @@ -355,6 +450,7 @@ def __init__( self.cim_filerecord = self.build_mfdata( "cim_filerecord", cim_filerecord ) + self.fileout = self.build_mfdata("fileout", fileout) self.cimprintrecord = self.build_mfdata( "cimprintrecord", cimprintrecord ) diff --git a/flopy/mf6/modflow/mfgwtlkt.py b/flopy/mf6/modflow/mfgwtlkt.py index eb3cf0a95f..0e64e8fc6f 100644 --- a/flopy/mf6/modflow/mfgwtlkt.py +++ b/flopy/mf6/modflow/mfgwtlkt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -74,6 +74,10 @@ class ModflowGwtlkt(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. 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 @@ -204,6 +208,9 @@ class ModflowGwtlkt(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "lkt", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "lkt", "options", "budgetcsv_filerecord") + ) ts_filerecord = ListTemplateGenerator( ("gwt6", "lkt", "options", "ts_filerecord") ) @@ -351,6 +358,36 @@ class ModflowGwtlkt(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name ts_filerecord", @@ -622,6 +659,7 @@ def __init__( save_flows=None, concentration_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, timeseries=None, observations=None, packagedata=None, @@ -655,6 +693,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self._ts_filerecord = self.build_mfdata("ts_filerecord", None) self._ts_package = self.build_child_package( "ts", timeseries, "timeseries", self._ts_filerecord diff --git a/flopy/mf6/modflow/mfgwtmst.py b/flopy/mf6/modflow/mfgwtmst.py index df2ae06193..cd82c2e405 100644 --- a/flopy/mf6/modflow/mfgwtmst.py +++ b/flopy/mf6/modflow/mfgwtmst.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtmvt.py b/flopy/mf6/modflow/mfgwtmvt.py index cef527297b..333537eff1 100644 --- a/flopy/mf6/modflow/mfgwtmvt.py +++ b/flopy/mf6/modflow/mfgwtmvt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -35,6 +35,10 @@ class ModflowGwtmvt(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. filename : String File name for this package. pname : String @@ -49,6 +53,9 @@ class ModflowGwtmvt(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "mvt", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "mvt", "options", "budgetcsv_filerecord") + ) package_abbr = "gwtmvt" _package_type = "mvt" dfn_file_name = "gwt-mvt.dfn" @@ -115,6 +122,36 @@ class ModflowGwtmvt(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], ] def __init__( @@ -125,6 +162,7 @@ def __init__( print_flows=None, save_flows=None, budget_filerecord=None, + budgetcsv_filerecord=None, filename=None, pname=None, parent_file=None, @@ -140,4 +178,7 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtmwt.py b/flopy/mf6/modflow/mfgwtmwt.py index 48d440cc9b..e1d03f98b8 100644 --- a/flopy/mf6/modflow/mfgwtmwt.py +++ b/flopy/mf6/modflow/mfgwtmwt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -74,6 +74,10 @@ class ModflowGwtmwt(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. 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 @@ -179,6 +183,9 @@ class ModflowGwtmwt(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "mwt", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "mwt", "options", "budgetcsv_filerecord") + ) ts_filerecord = ListTemplateGenerator( ("gwt6", "mwt", "options", "ts_filerecord") ) @@ -326,6 +333,36 @@ class ModflowGwtmwt(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name ts_filerecord", @@ -566,6 +603,7 @@ def __init__( save_flows=None, concentration_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, timeseries=None, observations=None, packagedata=None, @@ -599,6 +637,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self._ts_filerecord = self.build_mfdata("ts_filerecord", None) self._ts_package = self.build_child_package( "ts", timeseries, "timeseries", self._ts_filerecord diff --git a/flopy/mf6/modflow/mfgwtnam.py b/flopy/mf6/modflow/mfgwtnam.py index 8a4131d99e..8b8a6bc3cd 100644 --- a/flopy/mf6/modflow/mfgwtnam.py +++ b/flopy/mf6/modflow/mfgwtnam.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtoc.py b/flopy/mf6/modflow/mfgwtoc.py index 22929109d0..492f088f1d 100644 --- a/flopy/mf6/modflow/mfgwtoc.py +++ b/flopy/mf6/modflow/mfgwtoc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -20,6 +20,10 @@ class ModflowGwtoc(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. concentration_filerecord : [concentrationfile] * concentrationfile (string) name of the output file to write conc information. @@ -91,6 +95,9 @@ class ModflowGwtoc(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "oc", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "oc", "options", "budgetcsv_filerecord") + ) concentration_filerecord = ListTemplateGenerator( ("gwt6", "oc", "options", "concentration_filerecord") ) @@ -146,6 +153,36 @@ class ModflowGwtoc(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name concentration_filerecord", @@ -362,6 +399,7 @@ def __init__( model, loading_package=False, budget_filerecord=None, + budgetcsv_filerecord=None, concentration_filerecord=None, concentrationprintrecord=None, saverecord=None, @@ -378,6 +416,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.concentration_filerecord = self.build_mfdata( "concentration_filerecord", concentration_filerecord ) diff --git a/flopy/mf6/modflow/mfgwtsft.py b/flopy/mf6/modflow/mfgwtsft.py index 91f04d149a..ad2ca4c6ab 100644 --- a/flopy/mf6/modflow/mfgwtsft.py +++ b/flopy/mf6/modflow/mfgwtsft.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -73,6 +73,10 @@ class ModflowGwtsft(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. 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 @@ -201,6 +205,9 @@ class ModflowGwtsft(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "sft", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "sft", "options", "budgetcsv_filerecord") + ) ts_filerecord = ListTemplateGenerator( ("gwt6", "sft", "options", "ts_filerecord") ) @@ -348,6 +355,36 @@ class ModflowGwtsft(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name ts_filerecord", @@ -619,6 +656,7 @@ def __init__( save_flows=None, concentration_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, timeseries=None, observations=None, packagedata=None, @@ -652,6 +690,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self._ts_filerecord = self.build_mfdata("ts_filerecord", None) self._ts_package = self.build_child_package( "ts", timeseries, "timeseries", self._ts_filerecord diff --git a/flopy/mf6/modflow/mfgwtsrc.py b/flopy/mf6/modflow/mfgwtsrc.py index 0f3957a1ba..37590e2b07 100644 --- a/flopy/mf6/modflow/mfgwtsrc.py +++ b/flopy/mf6/modflow/mfgwtsrc.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfgwtssm.py b/flopy/mf6/modflow/mfgwtssm.py index c6dc8d12c6..adf15ea4db 100644 --- a/flopy/mf6/modflow/mfgwtssm.py +++ b/flopy/mf6/modflow/mfgwtssm.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -59,6 +59,18 @@ class ModflowGwtssm(mfpackage.MFPackage): that package. The values in this auxiliary variable will be used to set the concentration associated with the flows for that boundary package. + fileinput : [pname, spc6_filename] + * pname (string) name of the flow package for which an SPC6 input file + contains a source concentration. If this flow package is represented + using an advanced transport package (SFT, LKT, MWT, or UZT), then the + advanced transport package will override SSM terms specified here. + * spc6_filename (string) character string that defines the path and + filename for the file containing source and sink input data for the + flow package. The SPC6_FILENAME file is a flexible input file that + allows concentrations to be specified by stress period and with time + series. Instructions for creating the SPC6_FILENAME input file are + provided in the next section on file input for boundary + concentrations. filename : String File name for this package. pname : String @@ -71,6 +83,9 @@ class ModflowGwtssm(mfpackage.MFPackage): """ sources = ListTemplateGenerator(("gwt6", "ssm", "sources", "sources")) + fileinput = ListTemplateGenerator( + ("gwt6", "ssm", "fileinput", "fileinput") + ) package_abbr = "gwtssm" _package_type = "ssm" dfn_file_name = "gwt-ssm.dfn" @@ -123,6 +138,60 @@ class ModflowGwtssm(mfpackage.MFPackage): "reader urword", "optional false", ], + [ + "block fileinput", + "name fileinput", + "type recarray pname spc6 filein spc6_filename mixed", + "reader urword", + ], + [ + "block fileinput", + "name pname", + "in_record true", + "type string", + "tagged false", + "reader urword", + ], + [ + "block fileinput", + "name spc6", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block fileinput", + "name filein", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block fileinput", + "name spc6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], + [ + "block fileinput", + "name mixed", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional true", + ], ] def __init__( @@ -132,6 +201,7 @@ def __init__( print_flows=None, save_flows=None, sources=None, + fileinput=None, filename=None, pname=None, parent_file=None, @@ -144,4 +214,5 @@ def __init__( self.print_flows = self.build_mfdata("print_flows", print_flows) self.save_flows = self.build_mfdata("save_flows", save_flows) self.sources = self.build_mfdata("sources", sources) + self.fileinput = self.build_mfdata("fileinput", fileinput) self._init_complete = True diff --git a/flopy/mf6/modflow/mfgwtuzt.py b/flopy/mf6/modflow/mfgwtuzt.py index dff239f715..69764c5a62 100644 --- a/flopy/mf6/modflow/mfgwtuzt.py +++ b/flopy/mf6/modflow/mfgwtuzt.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:57:00 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -74,6 +74,10 @@ class ModflowGwtuzt(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the binary output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. 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 @@ -188,6 +192,9 @@ class ModflowGwtuzt(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("gwt6", "uzt", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("gwt6", "uzt", "options", "budgetcsv_filerecord") + ) ts_filerecord = ListTemplateGenerator( ("gwt6", "uzt", "options", "ts_filerecord") ) @@ -335,6 +342,36 @@ class ModflowGwtuzt(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block options", "name ts_filerecord", @@ -586,6 +623,7 @@ def __init__( save_flows=None, concentration_filerecord=None, budget_filerecord=None, + budgetcsv_filerecord=None, timeseries=None, observations=None, packagedata=None, @@ -619,6 +657,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self._ts_filerecord = self.build_mfdata("ts_filerecord", None) self._ts_package = self.build_child_package( "ts", timeseries, "timeseries", self._ts_filerecord diff --git a/flopy/mf6/modflow/mfims.py b/flopy/mf6/modflow/mfims.py index e5fda9f22a..56fa4c1651 100644 --- a/flopy/mf6/modflow/mfims.py +++ b/flopy/mf6/modflow/mfims.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfmvr.py b/flopy/mf6/modflow/mfmvr.py index ef3096ae30..2a989208f0 100644 --- a/flopy/mf6/modflow/mfmvr.py +++ b/flopy/mf6/modflow/mfmvr.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -39,6 +39,10 @@ class ModflowMvr(mfpackage.MFPackage): budget_filerecord : [budgetfile] * budgetfile (string) name of the output file to write budget information. + budgetcsv_filerecord : [budgetcsvfile] + * budgetcsvfile (string) name of the comma-separated value (CSV) output + file to write budget summary information. A budget summary record + will be written to this file for each time step of the simulation. maxmvr : integer * maxmvr (integer) integer value specifying the maximum number of water mover entries that will specified for any stress period. @@ -111,6 +115,9 @@ class ModflowMvr(mfpackage.MFPackage): budget_filerecord = ListTemplateGenerator( ("mvr", "options", "budget_filerecord") ) + budgetcsv_filerecord = ListTemplateGenerator( + ("mvr", "options", "budgetcsv_filerecord") + ) packages = ListTemplateGenerator(("mvr", "packages", "packages")) perioddata = ListTemplateGenerator(("mvr", "period", "perioddata")) package_abbr = "mvr" @@ -179,6 +186,36 @@ class ModflowMvr(mfpackage.MFPackage): "tagged false", "optional false", ], + [ + "block options", + "name budgetcsv_filerecord", + "type record budgetcsv fileout budgetcsvfile", + "shape", + "reader urword", + "tagged true", + "optional true", + ], + [ + "block options", + "name budgetcsv", + "type keyword", + "shape", + "in_record true", + "reader urword", + "tagged true", + "optional false", + ], + [ + "block options", + "name budgetcsvfile", + "type string", + "preserve_case true", + "shape", + "in_record true", + "reader urword", + "tagged false", + "optional false", + ], [ "block dimensions", "name maxmvr", @@ -326,6 +363,7 @@ def __init__( print_flows=None, modelnames=None, budget_filerecord=None, + budgetcsv_filerecord=None, maxmvr=None, maxpackages=None, packages=None, @@ -345,6 +383,9 @@ def __init__( self.budget_filerecord = self.build_mfdata( "budget_filerecord", budget_filerecord ) + self.budgetcsv_filerecord = self.build_mfdata( + "budgetcsv_filerecord", budgetcsv_filerecord + ) self.maxmvr = self.build_mfdata("maxmvr", maxmvr) self.maxpackages = self.build_mfdata("maxpackages", maxpackages) self.packages = self.build_mfdata("packages", packages) diff --git a/flopy/mf6/modflow/mfnam.py b/flopy/mf6/modflow/mfnam.py index fac5dc1db6..7f6238fabc 100644 --- a/flopy/mf6/modflow/mfnam.py +++ b/flopy/mf6/modflow/mfnam.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mftdis.py b/flopy/mf6/modflow/mftdis.py index bdea3e1721..0d80251889 100644 --- a/flopy/mf6/modflow/mftdis.py +++ b/flopy/mf6/modflow/mftdis.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfutlats.py b/flopy/mf6/modflow/mfutlats.py index c4427b8627..4c8c940411 100644 --- a/flopy/mf6/modflow/mfutlats.py +++ b/flopy/mf6/modflow/mfutlats.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfutllaktab.py b/flopy/mf6/modflow/mfutllaktab.py index b72d51d544..8c14b4cd8d 100644 --- a/flopy/mf6/modflow/mfutllaktab.py +++ b/flopy/mf6/modflow/mfutllaktab.py @@ -1,13 +1,13 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator class ModflowUtllaktab(mfpackage.MFPackage): """ - ModflowUtllaktab defines a tab package within a utl model. + ModflowUtllaktab defines a laktab package within a utl model. Parameters ---------- @@ -47,10 +47,10 @@ class ModflowUtllaktab(mfpackage.MFPackage): """ - table = ListTemplateGenerator(("tab", "table", "table")) - package_abbr = "utltab" - _package_type = "tab" - dfn_file_name = "utl-lak-tab.dfn" + table = ListTemplateGenerator(("laktab", "table", "table")) + package_abbr = "utllaktab" + _package_type = "laktab" + dfn_file_name = "utl-laktab.dfn" dfn = [ [ @@ -125,7 +125,7 @@ def __init__( parent_file=None, ): super().__init__( - model, "tab", filename, pname, loading_package, parent_file + model, "laktab", filename, pname, loading_package, parent_file ) # set up variables @@ -133,3 +133,49 @@ def __init__( self.ncol = self.build_mfdata("ncol", ncol) self.table = self.build_mfdata("table", table) self._init_complete = True + + +class UtllaktabPackages(mfpackage.MFChildPackages): + """ + UtllaktabPackages is a container class for the ModflowUtllaktab class. + + Methods + ---------- + initialize + Initializes a new ModflowUtllaktab package removing any sibling child + packages attached to the same parent package. See ModflowUtllaktab init + documentation for definition of parameters. + append_package + Adds a new ModflowUtllaktab package to the container. See ModflowUtllaktab + init documentation for definition of parameters. + """ + + package_abbr = "utllaktabpackages" + + def initialize( + self, nrow=None, ncol=None, table=None, filename=None, pname=None + ): + new_package = ModflowUtllaktab( + self._model, + nrow=nrow, + ncol=ncol, + table=table, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, nrow=None, ncol=None, table=None, filename=None, pname=None + ): + new_package = ModflowUtllaktab( + self._model, + nrow=nrow, + ncol=ncol, + table=table, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/modflow/mfutlobs.py b/flopy/mf6/modflow/mfutlobs.py index a30428c2a4..5df4095502 100644 --- a/flopy/mf6/modflow/mfutlobs.py +++ b/flopy/mf6/modflow/mfutlobs.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator @@ -19,13 +19,17 @@ class ModflowUtlobs(mfpackage.MFPackage): processing purposes only. digits : integer * digits (integer) Keyword and an integer digits specifier used for - conversion of simulated values to text on output. The default is 5 - digits. When simulated values are written to a file specified as file - type DATA in the Name File, the digits specifier controls the number - of significant digits with which simulated values are written to the + conversion of simulated values to text on output. If not specified, + the default is the maximum number of digits stored in the program (as + written with the G0 Fortran specifier). When simulated values are + written to a comma-separated value text file specified in a + CONTINUOUS block below, the digits specifier controls the number of + significant digits with which simulated values are written to the output file. The digits specifier has no effect on the number of significant digits with which the simulation time is written for - continuous observations. + continuous observations. If DIGITS is specified as zero, then + observations are written with the default setting, which is the + maximum number of digits. print_input : boolean * print_input (boolean) keyword to indicate that the list of observation information will be written to the listing file diff --git a/flopy/mf6/modflow/mfutlsfrtab.py b/flopy/mf6/modflow/mfutlsfrtab.py new file mode 100644 index 0000000000..96ced1ce14 --- /dev/null +++ b/flopy/mf6/modflow/mfutlsfrtab.py @@ -0,0 +1,157 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +# FILE created on October 29, 2021 21:09:57 UTC +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowUtlsfrtab(mfpackage.MFPackage): + """ + ModflowUtlsfrtab defines a sfrtab package within a utl 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. + nrow : integer + * nrow (integer) integer value specifying the number of rows in the + reach cross-section table. There must be NROW rows of data in the + TABLE block. + ncol : integer + * ncol (integer) integer value specifying the number of columns in the + reach cross-section table. There must be NCOL columns of data in the + TABLE block. Currently, NCOL must be equal to 2. + table : [xfraction, depth] + * xfraction (double) real value that defines the station (x) data for + the cross-section as a fraction of the width (RWID) of the reach. + * depth (double) real value that defines the elevation (z) data for the + cross-section as a depth relative to the top elevation of the reach + (RTP) and corresponding to the station data on the same line. + 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. + + """ + + table = ListTemplateGenerator(("sfrtab", "table", "table")) + package_abbr = "utlsfrtab" + _package_type = "sfrtab" + dfn_file_name = "utl-sfrtab.dfn" + + dfn = [ + [ + "block dimensions", + "name nrow", + "type integer", + "reader urword", + "optional false", + ], + [ + "block dimensions", + "name ncol", + "type integer", + "reader urword", + "optional false", + ], + [ + "block table", + "name table", + "type recarray xfraction depth", + "shape (nrow)", + "reader urword", + ], + [ + "block table", + "name xfraction", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block table", + "name depth", + "type double precision", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + ] + + def __init__( + self, + model, + loading_package=False, + nrow=None, + ncol=None, + table=None, + filename=None, + pname=None, + parent_file=None, + ): + super().__init__( + model, "sfrtab", filename, pname, loading_package, parent_file + ) + + # set up variables + self.nrow = self.build_mfdata("nrow", nrow) + self.ncol = self.build_mfdata("ncol", ncol) + self.table = self.build_mfdata("table", table) + self._init_complete = True + + +class UtlsfrtabPackages(mfpackage.MFChildPackages): + """ + UtlsfrtabPackages is a container class for the ModflowUtlsfrtab class. + + Methods + ---------- + initialize + Initializes a new ModflowUtlsfrtab package removing any sibling child + packages attached to the same parent package. See ModflowUtlsfrtab init + documentation for definition of parameters. + append_package + Adds a new ModflowUtlsfrtab package to the container. See ModflowUtlsfrtab + init documentation for definition of parameters. + """ + + package_abbr = "utlsfrtabpackages" + + def initialize( + self, nrow=None, ncol=None, table=None, filename=None, pname=None + ): + new_package = ModflowUtlsfrtab( + self._model, + nrow=nrow, + ncol=ncol, + table=table, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, nrow=None, ncol=None, table=None, filename=None, pname=None + ): + new_package = ModflowUtlsfrtab( + self._model, + nrow=nrow, + ncol=ncol, + table=table, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/modflow/mfutlspc.py b/flopy/mf6/modflow/mfutlspc.py new file mode 100644 index 0000000000..6d9ce0d508 --- /dev/null +++ b/flopy/mf6/modflow/mfutlspc.py @@ -0,0 +1,258 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +# FILE created on October 29, 2021 21:09:57 UTC +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowUtlspc(mfpackage.MFPackage): + """ + ModflowUtlspc defines a spc package within a utl 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 spc + information will be written to the listing file immediately after it + is read. + 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. + maxbound : integer + * maxbound (integer) integer value specifying the maximum number of spc + cells that will be specified for use during any stress period. + perioddata : [bndno, spcsetting] + * bndno (integer) integer value that defines the boundary package + feature number associated with the specified PERIOD data on the line. + BNDNO must be greater than zero and less than or equal to MAXBOUND. + 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. + * spcsetting (keystring) line of information that is parsed into a + keyword and values. Keyword values that can be used to start the + MAWSETTING string include: CONCENTRATION. + concentration : [double] + * concentration (double) is the boundary concentration. 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. By default, the CONCENTRATION for each boundary + feature is zero. + 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. + + """ + + ts_filerecord = ListTemplateGenerator(("spc", "options", "ts_filerecord")) + perioddata = ListTemplateGenerator(("spc", "period", "perioddata")) + package_abbr = "utlspc" + _package_type = "spc" + dfn_file_name = "utl-spc.dfn" + + dfn = [ + [ + "block options", + "name print_input", + "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 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 perioddata", + "type recarray bndno spcsetting", + "shape", + "reader urword", + ], + [ + "block period", + "name bndno", + "type integer", + "shape", + "tagged false", + "in_record true", + "reader urword", + "numeric_index true", + ], + [ + "block period", + "name spcsetting", + "type keystring concentration", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name concentration", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + print_input=None, + timeseries=None, + maxbound=None, + perioddata=None, + filename=None, + pname=None, + parent_file=None, + ): + super().__init__( + model, "spc", filename, pname, loading_package, parent_file + ) + + # set up variables + self.print_input = self.build_mfdata("print_input", print_input) + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self.maxbound = self.build_mfdata("maxbound", maxbound) + self.perioddata = self.build_mfdata("perioddata", perioddata) + self._init_complete = True + + +class UtlspcPackages(mfpackage.MFChildPackages): + """ + UtlspcPackages is a container class for the ModflowUtlspc class. + + Methods + ---------- + initialize + Initializes a new ModflowUtlspc package removing any sibling child + packages attached to the same parent package. See ModflowUtlspc init + documentation for definition of parameters. + append_package + Adds a new ModflowUtlspc package to the container. See ModflowUtlspc + init documentation for definition of parameters. + """ + + package_abbr = "utlspcpackages" + + def initialize( + self, + print_input=None, + timeseries=None, + maxbound=None, + perioddata=None, + filename=None, + pname=None, + ): + new_package = ModflowUtlspc( + self._model, + print_input=print_input, + timeseries=timeseries, + maxbound=maxbound, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, + print_input=None, + timeseries=None, + maxbound=None, + perioddata=None, + filename=None, + pname=None, + ): + new_package = ModflowUtlspc( + self._model, + print_input=print_input, + timeseries=timeseries, + maxbound=maxbound, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/modflow/mfutlspca.py b/flopy/mf6/modflow/mfutlspca.py new file mode 100644 index 0000000000..08bbe5adb3 --- /dev/null +++ b/flopy/mf6/modflow/mfutlspca.py @@ -0,0 +1,222 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +# FILE created on October 29, 2021 21:09:57 UTC +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator + + +class ModflowUtlspca(mfpackage.MFPackage): + """ + ModflowUtlspca defines a spca package within a utl 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. + readasarrays : boolean + * readasarrays (boolean) indicates that array-based input will be used + for the SPC Package. This keyword must be specified to use array- + based input. + print_input : boolean + * print_input (boolean) keyword to indicate that the list of spc + information will be written to the listing file immediately after it + is read. + timearrayseries : {varname:data} or tas_array data + * Contains data for the tas package. Data can be stored in a dictionary + containing data for the tas package with variable names as keys and + package data as values. Data just for the timearrayseries variable is + also acceptable. See tas package documentation for more information. + concentration : [double] + * concentration (double) is the concentration of the associated + Recharge or Evapotranspiration stress package. The concentration + array may be defined by a time-array series (see the "Using Time- + Array Series in a Package" section). + 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. + + """ + + tas_filerecord = ListTemplateGenerator( + ("spca", "options", "tas_filerecord") + ) + concentration = ArrayTemplateGenerator(("spca", "period", "concentration")) + package_abbr = "utlspca" + _package_type = "spca" + dfn_file_name = "utl-spca.dfn" + + dfn = [ + [ + "block options", + "name readasarrays", + "type keyword", + "shape", + "reader urword", + "optional false", + "default_value True", + ], + [ + "block options", + "name print_input", + "type keyword", + "reader urword", + "optional true", + ], + [ + "block options", + "name tas_filerecord", + "type record tas6 filein tas6_filename", + "shape", + "reader urword", + "tagged true", + "optional true", + "construct_package tas", + "construct_data tas_array", + "parameter_name timearrayseries", + ], + [ + "block options", + "name tas6", + "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 tas6_filename", + "type string", + "preserve_case true", + "in_record true", + "reader urword", + "optional false", + "tagged false", + ], + [ + "block period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name concentration", + "type double precision", + "shape (ncol*nrow; ncpl)", + "reader readarray", + "default_value 0.", + ], + ] + + def __init__( + self, + model, + loading_package=False, + readasarrays=True, + print_input=None, + timearrayseries=None, + concentration=0.0, + filename=None, + pname=None, + parent_file=None, + ): + super().__init__( + model, "spca", filename, pname, loading_package, parent_file + ) + + # set up variables + self.readasarrays = self.build_mfdata("readasarrays", readasarrays) + self.print_input = self.build_mfdata("print_input", print_input) + self._tas_filerecord = self.build_mfdata("tas_filerecord", None) + self._tas_package = self.build_child_package( + "tas", timearrayseries, "tas_array", self._tas_filerecord + ) + self.concentration = self.build_mfdata("concentration", concentration) + self._init_complete = True + + +class UtlspcaPackages(mfpackage.MFChildPackages): + """ + UtlspcaPackages is a container class for the ModflowUtlspca class. + + Methods + ---------- + initialize + Initializes a new ModflowUtlspca package removing any sibling child + packages attached to the same parent package. See ModflowUtlspca init + documentation for definition of parameters. + append_package + Adds a new ModflowUtlspca package to the container. See ModflowUtlspca + init documentation for definition of parameters. + """ + + package_abbr = "utlspcapackages" + + def initialize( + self, + readasarrays=True, + print_input=None, + timearrayseries=None, + concentration=0.0, + filename=None, + pname=None, + ): + new_package = ModflowUtlspca( + self._model, + readasarrays=readasarrays, + print_input=print_input, + timearrayseries=timearrayseries, + concentration=concentration, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, + readasarrays=True, + print_input=None, + timearrayseries=None, + concentration=0.0, + filename=None, + pname=None, + ): + new_package = ModflowUtlspca( + self._model, + readasarrays=readasarrays, + print_input=print_input, + timearrayseries=timearrayseries, + concentration=concentration, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/modflow/mfutltas.py b/flopy/mf6/modflow/mfutltas.py index 71d7a18172..e3af9cf566 100644 --- a/flopy/mf6/modflow/mfutltas.py +++ b/flopy/mf6/modflow/mfutltas.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator, ArrayTemplateGenerator diff --git a/flopy/mf6/modflow/mfutlts.py b/flopy/mf6/modflow/mfutlts.py index be80d0dbf5..6fb471f69e 100644 --- a/flopy/mf6/modflow/mfutlts.py +++ b/flopy/mf6/modflow/mfutlts.py @@ -1,6 +1,6 @@ # DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY # mf6/utils/createpackages.py -# FILE created on August 06, 2021 20:56:59 UTC +# FILE created on October 29, 2021 21:09:57 UTC from .. import mfpackage from ..data.mfdatautil import ListTemplateGenerator diff --git a/flopy/mf6/modflow/mfutltvk.py b/flopy/mf6/modflow/mfutltvk.py new file mode 100644 index 0000000000..b1a38e3e84 --- /dev/null +++ b/flopy/mf6/modflow/mfutltvk.py @@ -0,0 +1,259 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +# FILE created on October 29, 2021 21:09:57 UTC +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowUtltvk(mfpackage.MFPackage): + """ + ModflowUtltvk defines a tvk package within a utl 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. + 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. + perioddata : [cellid, tvksetting] + * 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. + * tvksetting (keystring) line of information that is parsed into a + property name keyword and values. Property name keywords that can be + used to start the TVKSETTING string include: K, K22, and K33. + k : [double] + * k (double) is the new value to be assigned as the cell's + hydraulic conductivity from the start of the specified stress + period, as per K in the NPF package. If the OPTIONS block + includes a TS6 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. + k22 : [double] + * k22 (double) is the new value to be assigned as the cell's + hydraulic conductivity of the second ellipsoid axis (or the + ratio of K22/K if the K22OVERK NPF package option is + specified) from the start of the specified stress period, as + per K22 in the NPF package. For an unrotated case this is the + hydraulic conductivity in the y direction. If the OPTIONS + block includes a TS6 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. + k33 : [double] + * k33 (double) is the new value to be assigned as the cell's + hydraulic conductivity of the third ellipsoid axis (or the + ratio of K33/K if the K33OVERK NPF package option is + specified) from the start of the specified stress period, as + per K33 in the NPF package. For an unrotated case, this is + the vertical hydraulic conductivity. If the OPTIONS block + includes a TS6 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. + + """ + + ts_filerecord = ListTemplateGenerator(("tvk", "options", "ts_filerecord")) + perioddata = ListTemplateGenerator(("tvk", "period", "perioddata")) + package_abbr = "utltvk" + _package_type = "tvk" + dfn_file_name = "utl-tvk.dfn" + + dfn = [ + [ + "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 period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name perioddata", + "type recarray cellid tvksetting", + "shape", + "reader urword", + ], + [ + "block period", + "name cellid", + "type integer", + "shape (ncelldim)", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name tvksetting", + "type keystring k k22 k33", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name k", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name k22", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name k33", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + timeseries=None, + perioddata=None, + filename=None, + pname=None, + parent_file=None, + ): + super().__init__( + model, "tvk", filename, pname, loading_package, parent_file + ) + + # set up variables + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self.perioddata = self.build_mfdata("perioddata", perioddata) + self._init_complete = True + + +class UtltvkPackages(mfpackage.MFChildPackages): + """ + UtltvkPackages is a container class for the ModflowUtltvk class. + + Methods + ---------- + initialize + Initializes a new ModflowUtltvk package removing any sibling child + packages attached to the same parent package. See ModflowUtltvk init + documentation for definition of parameters. + append_package + Adds a new ModflowUtltvk package to the container. See ModflowUtltvk + init documentation for definition of parameters. + """ + + package_abbr = "utltvkpackages" + + def initialize( + self, timeseries=None, perioddata=None, filename=None, pname=None + ): + new_package = ModflowUtltvk( + self._model, + timeseries=timeseries, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, timeseries=None, perioddata=None, filename=None, pname=None + ): + new_package = ModflowUtltvk( + self._model, + timeseries=timeseries, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/modflow/mfutltvs.py b/flopy/mf6/modflow/mfutltvs.py new file mode 100644 index 0000000000..ec8e6f8702 --- /dev/null +++ b/flopy/mf6/modflow/mfutltvs.py @@ -0,0 +1,271 @@ +# DO NOT MODIFY THIS FILE DIRECTLY. THIS FILE MUST BE CREATED BY +# mf6/utils/createpackages.py +# FILE created on October 29, 2021 21:09:57 UTC +from .. import mfpackage +from ..data.mfdatautil import ListTemplateGenerator + + +class ModflowUtltvs(mfpackage.MFPackage): + """ + ModflowUtltvs defines a tvs package within a utl 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. + disable_storage_change_integration : boolean + * disable_storage_change_integration (boolean) keyword that deactivates + inclusion of storage derivative terms in the STO package matrix + formulation. In the absence of this keyword (the default), the + groundwater storage formulation will be modified to correctly adjust + heads based on transient variations in stored water volumes arising + from changes to SS and SY properties. + 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. + perioddata : [cellid, tvssetting] + * 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. + * tvssetting (keystring) line of information that is parsed into a + property name keyword and values. Property name keywords that can be + used to start the TVSSETTING string include: SS and SY. + ss : [double] + * ss (double) is the new value to be assigned as the cell's + specific storage (or storage coefficient if the + STORAGECOEFFICIENT STO package option is specified) from the + start of the specified stress period, as per SS in the STO + package. Specific storage values must be greater than or + equal to 0. If the OPTIONS block includes a TS6 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. + sy : [double] + * sy (double) is the new value to be assigned as the cell's + specific yield from the start of the specified stress period, + as per SY in the STO package. Specific yield values must be + greater than or equal to 0. If the OPTIONS block includes a + TS6 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. + + """ + + ts_filerecord = ListTemplateGenerator(("tvs", "options", "ts_filerecord")) + perioddata = ListTemplateGenerator(("tvs", "period", "perioddata")) + package_abbr = "utltvs" + _package_type = "tvs" + dfn_file_name = "utl-tvs.dfn" + + dfn = [ + [ + "block options", + "name disable_storage_change_integration", + "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 period", + "name iper", + "type integer", + "block_variable True", + "in_record true", + "tagged false", + "shape", + "valid", + "reader urword", + "optional false", + ], + [ + "block period", + "name perioddata", + "type recarray cellid tvssetting", + "shape", + "reader urword", + ], + [ + "block period", + "name cellid", + "type integer", + "shape (ncelldim)", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name tvssetting", + "type keystring ss sy", + "shape", + "tagged false", + "in_record true", + "reader urword", + ], + [ + "block period", + "name ss", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + [ + "block period", + "name sy", + "type double precision", + "shape", + "tagged true", + "in_record true", + "reader urword", + "time_series true", + ], + ] + + def __init__( + self, + model, + loading_package=False, + disable_storage_change_integration=None, + timeseries=None, + perioddata=None, + filename=None, + pname=None, + parent_file=None, + ): + super().__init__( + model, "tvs", filename, pname, loading_package, parent_file + ) + + # set up variables + self.disable_storage_change_integration = self.build_mfdata( + "disable_storage_change_integration", + disable_storage_change_integration, + ) + self._ts_filerecord = self.build_mfdata("ts_filerecord", None) + self._ts_package = self.build_child_package( + "ts", timeseries, "timeseries", self._ts_filerecord + ) + self.perioddata = self.build_mfdata("perioddata", perioddata) + self._init_complete = True + + +class UtltvsPackages(mfpackage.MFChildPackages): + """ + UtltvsPackages is a container class for the ModflowUtltvs class. + + Methods + ---------- + initialize + Initializes a new ModflowUtltvs package removing any sibling child + packages attached to the same parent package. See ModflowUtltvs init + documentation for definition of parameters. + append_package + Adds a new ModflowUtltvs package to the container. See ModflowUtltvs + init documentation for definition of parameters. + """ + + package_abbr = "utltvspackages" + + def initialize( + self, + disable_storage_change_integration=None, + timeseries=None, + perioddata=None, + filename=None, + pname=None, + ): + new_package = ModflowUtltvs( + self._model, + disable_storage_change_integration=disable_storage_change_integration, + timeseries=timeseries, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._init_package(new_package, filename) + + def append_package( + self, + disable_storage_change_integration=None, + timeseries=None, + perioddata=None, + filename=None, + pname=None, + ): + new_package = ModflowUtltvs( + self._model, + disable_storage_change_integration=disable_storage_change_integration, + timeseries=timeseries, + perioddata=perioddata, + filename=filename, + pname=pname, + parent_file=self._cpparent, + ) + self._append_package(new_package, filename) diff --git a/flopy/mf6/utils/output_util.py b/flopy/mf6/utils/output_util.py index 3c95f66b12..e48526bf33 100644 --- a/flopy/mf6/utils/output_util.py +++ b/flopy/mf6/utils/output_util.py @@ -29,6 +29,7 @@ def __init__(self, obj): # set initial observation definitions methods = { "budget": self.__budget, + "budgetcsv": self.__budgetcsv, "zonebudget": self.__zonebudget, "obs": self.__obs, "csv": self.__csv, @@ -38,6 +39,7 @@ def __init__(self, obj): self._obj = obj self._methods = [] self._sim_ws = obj.simulation_data.mfpath.get_sim_path() + self.__budgetcsv = False if not isinstance(obj, (PackageInterface, ModelInterface)): raise TypeError("Only mf6 PackageInterface types can be used") @@ -92,6 +94,8 @@ def __init__(self, obj): self, "zonebudget", methods["zonebudget"] ) self._methods.append("zonebudget()") + elif rectype == "budgetcsv": + self.__budgetcsv = True self._methods.append(f"{rectype}()") if rectype == "obs": data = None @@ -258,6 +262,16 @@ def __zonebudget(self, izone): zonbud.grb = grb return zonbud + def __budgetcsv(self): + """ + Convience method to open and return a budget csv object + + Returns + ------- + flopy.utils.CsvFile object + """ + return self.__csv(budget=True) + def __budget(self, precision="double"): """ Convenience method to open and return a budget object @@ -275,13 +289,17 @@ def __budget(self, precision="double"): def __obs(self, f=None): """ + Method to read and return obs files Parameters ---------- - f + f : str, None + observation file name, if None the first observation file + will be returned Returns ------- + flopy.utils.Mf6Obs file object """ if self._obs is not None: @@ -293,25 +311,34 @@ def __obs(self, f=None): except OSError: return None - def __csv(self, f=None): + def __csv(self, f=None, budget=False): """ + Method to get csv file outputs Parameters ---------- - f + f : str + csv file name path + budget : bool + boolean flag to indicate budgetcsv file Returns ------- + flopy.utils.CsvFile object """ - if self._csv is not None: + if budget and self._budgetcsv is not None: + csv_file = self.__mulitfile_handler(f, self._budgetcsv) + elif self._csv is not None: csv_file = self.__mulitfile_handler(f, self._csv) + else: + return - try: - csv_file = os.path.join(self._sim_ws, csv_file) - return CsvFile(csv_file) - except OSError: - return None + try: + csv_file = os.path.join(self._sim_ws, csv_file) + return CsvFile(csv_file) + except OSError: + return None def __list(self): """ @@ -330,15 +357,18 @@ def __list(self): def __mulitfile_handler(self, f, flist): """ + Method to parse multiple output files of the same type Parameters ---------- - f - flist + f : str + file name + flist : list + list of output file names Returns ------- - + file name string of valid file or first file is f is None """ if len(flist) > 1 and f is None: print("Multiple csv files exist, selecting first") diff --git a/flopy/modflow/mfuzf1.py b/flopy/modflow/mfuzf1.py index 86778a3c96..c5419245ad 100644 --- a/flopy/modflow/mfuzf1.py +++ b/flopy/modflow/mfuzf1.py @@ -8,7 +8,7 @@ """ import numpy as np -from ..utils.flopy_io import pop_item, line_parse +from ..utils.flopy_io import pop_item, line_parse, multi_line_strip, line_strip from ..pakbase import Package from ..utils import Util2d, Transient2d from ..utils.optionblock import OptionBlock @@ -923,7 +923,7 @@ def load(cls, f, model, ext_unit_dict=None, check=False): options = None if model.version == "mfnwt" and "options" in line.lower(): options = OptionBlock.load_options(f, ModflowUzf1) - line = f.readline() + line = multi_line_strip(f) else: query = ( @@ -942,7 +942,7 @@ def load(cls, f, model, ext_unit_dict=None, check=False): options = OptionBlock( line.lower().strip(), ModflowUzf1, block=False ) - line = f.readline() + line = multi_line_strip(f) break if options is not None: From e0a557fdd6d219a8104610cf90e601ca0f0a51be Mon Sep 17 00:00:00 2001 From: Joshua Larsen Date: Fri, 29 Oct 2021 18:04:57 -0700 Subject: [PATCH 2/4] ModflowAg add accel option to option block --- flopy/modflow/mfag.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/flopy/modflow/mfag.py b/flopy/modflow/mfag.py index 9db3485836..d4a7ae24f8 100644 --- a/flopy/modflow/mfag.py +++ b/flopy/modflow/mfag.py @@ -115,7 +115,21 @@ class ModflowAg(Package): ), ("tabfiles", OptionBlock.simple_tabfile), ("phiramp", OptionBlock.simple_flag), - ("etdemand", OptionBlock.simple_flag), + ( + "etdemand", + { + OptionBlock.dtype: np.bool_, + OptionBlock.nested: True, + OptionBlock.n_nested: 1, + OptionBlock.vars: { + "accel": { + OptionBlock.dtype: float, + OptionBlock.nested: False, + OptionBlock.optional: True, + } + }, + }, + ), ("trigger", OptionBlock.simple_flag), ("timeseries_diversion", OptionBlock.simple_flag), ("timeseries_well", OptionBlock.simple_flag), From 98803767de729f3ad1c5e449ffe805b76a22a290 Mon Sep 17 00:00:00 2001 From: Joshua Larsen Date: Fri, 29 Oct 2021 18:05:48 -0700 Subject: [PATCH 3/4] codacy update --- flopy/modflow/mfuzf1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flopy/modflow/mfuzf1.py b/flopy/modflow/mfuzf1.py index c5419245ad..91e21abf18 100644 --- a/flopy/modflow/mfuzf1.py +++ b/flopy/modflow/mfuzf1.py @@ -8,7 +8,7 @@ """ import numpy as np -from ..utils.flopy_io import pop_item, line_parse, multi_line_strip, line_strip +from ..utils.flopy_io import pop_item, line_parse, multi_line_strip from ..pakbase import Package from ..utils import Util2d, Transient2d from ..utils.optionblock import OptionBlock From a35b386808480483b0e44b384fdf5abc679d6570 Mon Sep 17 00:00:00 2001 From: Joshua Larsen Date: Fri, 29 Oct 2021 18:08:16 -0700 Subject: [PATCH 4/4] fix typo in tutorial01_mf6_output.py --- examples/Tutorials/modflow6output/tutorial01_mf6_output.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Tutorials/modflow6output/tutorial01_mf6_output.py b/examples/Tutorials/modflow6output/tutorial01_mf6_output.py index 2356c36572..c15819be5c 100644 --- a/examples/Tutorials/modflow6output/tutorial01_mf6_output.py +++ b/examples/Tutorials/modflow6output/tutorial01_mf6_output.py @@ -126,7 +126,7 @@ uzf_bud.get_data(idx=0) uzf_budcsv = uzf.output.budgetcsv() -uzf_budcv.data +uzf_budcsv.data uzf_conv = uzf.output.package_convergence() if uzf_conv is not None: