From f2ddd8e840acc318fba68971d214f83ad36fd34e Mon Sep 17 00:00:00 2001 From: langevin-usgs Date: Thu, 7 Feb 2019 12:19:46 -0500 Subject: [PATCH] feat(maw): program head limit and rate scaling to work for injection wells Updated code, added a new test, updated readme and mf6io files. Also fix a few minor typos in the definition files. And remove the PRECISION keyword from observation options since it is not supported. --- README.md | 4 +- autotest/test_gwf_maw01.py | 2 - autotest/test_gwf_maw02.py | 8 +- autotest/test_gwf_maw03.py | 246 ++++++++++++++++++ code.json | 40 +-- doc/ReleaseNotes/ReleaseNotes.tex | 4 +- doc/mf6io/gwf/binaryoutput.tex | 2 +- doc/mf6io/mf6ivar/dfn/gwf-lak.dfn | 2 +- doc/mf6io/mf6ivar/dfn/gwf-maw.dfn | 10 +- doc/mf6io/mf6ivar/dfn/gwf-sfr.dfn | 2 +- doc/mf6io/mf6ivar/dfn/utl-obs.dfn | 9 - .../examples/exg-gwfgwf-example-obs.dat | 1 - .../mf6ivar/examples/gwf-lak-example-obs.dat | 1 - .../mf6ivar/examples/gwf-maw-example-obs.dat | 1 - doc/mf6io/mf6ivar/md/mf6ivar.md | 19 +- doc/mf6io/mf6ivar/tex/gwf-lak-desc.tex | 2 +- doc/mf6io/mf6ivar/tex/gwf-maw-desc.tex | 10 +- doc/mf6io/mf6ivar/tex/gwf-sfr-desc.tex | 2 +- doc/mf6io/mf6ivar/tex/utl-obs-desc.tex | 2 - doc/mf6io/mf6ivar/tex/utl-obs-options.dat | 1 - doc/version.tex | 4 +- src/Model/GroundWaterFlow/gwf3maw8.f90 | 82 ++++-- src/Utilities/version.f90 | 2 +- version.txt | 6 +- 24 files changed, 368 insertions(+), 94 deletions(-) create mode 100644 autotest/test_gwf_maw03.py diff --git a/README.md b/README.md index 3802f15bde0..0b74d31a55b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## Automated Testing Status on Travis-CI -### Version 6.0.3 develop — build 38 +### Version 6.0.3 develop — build 56 [![Build Status](https://travis-ci.org/MODFLOW-USGS/modflow6.svg?branch=develop)](https://travis-ci.org/MODFLOW-USGS/modflow6) ## Introduction @@ -31,7 +31,7 @@ MODFLOW 6 is the latest core version of MODFLOW. It synthesizes many of the capa #### ***Software/Code citation for MODFLOW 6:*** -[Langevin, C.D., Hughes, J.D., Banta, E.R., Provost, A.M., Niswonger, R.G., and Panday, Sorab, 2019, MODFLOW 6 Modular Hydrologic Model version 6.0.3 — develop: U.S. Geological Survey Software Release, 07 January 2019, https://doi.org/10.5066/F76Q1VQV](https://doi.org/10.5066/F76Q1VQV) +[Langevin, C.D., Hughes, J.D., Banta, E.R., Provost, A.M., Niswonger, R.G., and Panday, Sorab, 2019, MODFLOW 6 Modular Hydrologic Model version 6.0.3 — develop: U.S. Geological Survey Software Release, 07 February 2019, https://doi.org/10.5066/F76Q1VQV](https://doi.org/10.5066/F76Q1VQV) ## Instructions for building definition files for new packages diff --git a/autotest/test_gwf_maw01.py b/autotest/test_gwf_maw01.py index 20f0ffe2de6..be9e8c031d8 100644 --- a/autotest/test_gwf_maw01.py +++ b/autotest/test_gwf_maw01.py @@ -36,10 +36,8 @@ def get_model(idx, dir): perlen = [1., 1., 1.] nstp = [1, 1, 1] tsmult = [1., 1., 1.] - steady = [True, True, True] lenx = 300. delr = delc = lenx / float(nrow) - botm = [0.] strt = 100. hnoflo = 1e30 hdry = -1e30 diff --git a/autotest/test_gwf_maw02.py b/autotest/test_gwf_maw02.py index 7d164b68a58..bfa76e10a6b 100644 --- a/autotest/test_gwf_maw02.py +++ b/autotest/test_gwf_maw02.py @@ -36,10 +36,10 @@ shape3d = (nlay, nrow, ncol) size3d = nlay * nrow * ncol nper = 5 -perlen = [1. for n in range(nper)] -nstp = [1 for n in range(nper)] -tsmult = [1. for n in range(nper)] -steady = [True for n in range(nper)] +perlen = nper * [1.] +nstp = nper * [1] +tsmult = nper * [1.] +steady = nper * [True] lenx = 300. delr = delc = lenx / float(nrow) botm = [0.] diff --git a/autotest/test_gwf_maw03.py b/autotest/test_gwf_maw03.py new file mode 100644 index 00000000000..bd70e2809a9 --- /dev/null +++ b/autotest/test_gwf_maw03.py @@ -0,0 +1,246 @@ +""" +MODFLOW 6 Autotest +Test the MAW HEAD_LIMIT and RATE_SCALING options for injection wells. These +options were not originally supported in MODFLOW 6. They were added for +version 6.0.4. + +""" + +import os +import sys +import numpy as np + +try: + import pymake +except: + msg = 'Error. Pymake package is not available.\n' + msg += 'Try installing using the following command:\n' + msg += ' pip install https://github.com/modflowpy/pymake/zipball/master' + raise Exception(msg) + +try: + import flopy +except: + msg = 'Error. FloPy package is not available.\n' + msg += 'Try installing using the following command:\n' + msg += ' pip install flopy' + raise Exception(msg) + +from framework import testing_framework +from simulation import Simulation + +ex = ['maw03a', 'maw03b', 'maw03c'] +exdirs = [] +for s in ex: + exdirs.append(os.path.join('temp', s)) + +# maw settings for runs a, b, and c +mawsetting_a = [(0, 'rate', 2000.), ] +mawsetting_b = [(0, 'rate', 2000.), (0, 'head_limit', 0.4)] +mawsetting_c = [(0, 'rate', 2000.), (0, 'rate_scaling', 0.0, 1.0)] +mawsettings = [mawsetting_a, mawsetting_b, mawsetting_c] + +def get_model(idx, dir): + + nlay, nrow, ncol = 1, 101, 101 + nper = 1 + perlen = [1000.] + nstp = [50] + tsmult = [1.2] + delr = delc = 142. + top = 0. + botm = [-1000.] + strt = 0. + hk = 10. + + nouter, ninner = 100, 100 + hclose, rclose, relax = 1e-6, 1e-6, 1. + + tdis_rc = [] + for i in range(nper): + tdis_rc.append((perlen[i], nstp[i], tsmult[i])) + + name = ex[idx] + + # build MODFLOW 6 files + ws = dir + sim = flopy.mf6.MFSimulation(sim_name=name, sim_ws=ws) + + # create tdis package + tdis = flopy.mf6.ModflowTdis(sim, time_units='DAYS', + nper=nper, perioddata=tdis_rc) + + # create gwf model + gwf = flopy.mf6.MFModel(sim, model_type='gwf6', modelname=name, + model_nam_file='{}.nam'.format(name)) + + # create iterative model solution and register the gwf model with it + ims = flopy.mf6.ModflowIms(sim, print_option='SUMMARY', + outer_hclose=hclose, + outer_maximum=nouter, + under_relaxation='NONE', + inner_maximum=ninner, + inner_hclose=hclose, rcloserecord=rclose, + linear_acceleration='CG', + scaling_method='NONE', + reordering_method='NONE', + relaxation_factor=relax) + sim.register_ims_package(ims, [gwf.name]) + + dis = flopy.mf6.ModflowGwfdis(gwf, nlay=nlay, nrow=nrow, ncol=ncol, + delr=delr, delc=delc, + top=top, botm=botm, + idomain=1, + fname='{}.dis'.format(name)) + + # initial conditions + ic = flopy.mf6.ModflowGwfic(gwf, strt=strt, + fname='{}.ic'.format(name)) + + # node property flow + npf = flopy.mf6.ModflowGwfnpf(gwf, save_flows=True, + icelltype=1, + k=hk, + k33=hk, + fname='{}.npf'.format(name)) + + # storage + sto = flopy.mf6.ModflowGwfsto(gwf, save_flows=True, + iconvert=0, + ss=1.e-5, sy=0.1, + steady_state={0: False}, + transient={0: True}, + fname='{}.sto'.format(name)) + + # MAW + opth = '{}.maw.obs'.format(name) + wellbottom = -1000 + wellrecarray = [[0, 0.15, wellbottom, 0., 'THIEM', 1]] + wellconnectionsrecarray = [[0, 0, (0, 50, 50), 0., wellbottom, 0., 0.0]] + wellperiodrecarray = mawsettings[idx] + maw = flopy.mf6.ModflowGwfmaw(gwf, fname='{}.maw'.format(name), + print_input=True, print_head=True, + print_flows=True, save_flows=True, + obs_filerecord=opth, + packagedata=wellrecarray, + connectiondata=wellconnectionsrecarray, + perioddata=wellperiodrecarray) + mawo_dict = {} + mawo_dict['{}.maw.obs.csv'.format(name)] = [('m1head', 'head', (0,)), + ('m1rate', 'rate', (0,))] #is this index one-based? Not if in a tuple + maw_obs = flopy.mf6.ModflowUtlobs(gwf, + fname=opth, + parent_file=maw, digits=15, + print_input=True, + continuous=mawo_dict) + + # output control + oc = flopy.mf6.ModflowGwfoc(gwf, + budget_filerecord='{}.cbc'.format(name), + head_filerecord='{}.hds'.format(name), + headprintrecord=[ + ('COLUMNS', ncol, 'WIDTH', 15, + 'DIGITS', 6, 'GENERAL')], + saverecord=[('HEAD', 'ALL')], + printrecord=[('HEAD', 'ALL'), + ('BUDGET', 'ALL')], + fname='{}.oc'.format(name)) + + # head observations + obs_data0 = [('head_well_cell', 'HEAD', (0, 0, 0))] + obs_recarray = {'{}.obs.csv'.format(name): obs_data0} + obs = flopy.mf6.ModflowUtlobs(gwf, pname='head_obs', + fname='{}.obs'.format(name), + digits=15, print_input=True, + continuous=obs_recarray) + + + return sim + + +def build_models(): + for idx, dir in enumerate(exdirs): + sim = get_model(idx, dir) + sim.write_simulation() + return + + +def eval_maw(sim): + print('evaluating MAW heads...') + + # MODFLOW 6 maw results + idx = sim.idxsim + name = ex[idx] + fpth = os.path.join(sim.simpath, '{}.maw.obs.csv'.format(name)) + try: + tc = np.genfromtxt(fpth, names=True, delimiter=',') + except: + assert False, 'could not load data from "{}"'.format(fpth) + + + if idx == 0: + + # M1RATE should be 2000. + msg = 'The injection rate should be 2000. for all times' + assert tc['M1RATE'].min() == tc['M1RATE'].max() == 2000, msg + + elif idx == 1: + + # M1RATE should have a minimum value less than 200 and + # M1HEAD should not exceed 0.400001 + msg = ('Injection rate should fall below 200 and the head should not' + 'exceed 0.4') + assert tc['M1RATE'].min() < 200., msg + assert tc['M1HEAD'].max() < 0.400001, msg + + elif idx == 2: + + # M1RATE should have a minimum value less than 800 + # M1HEAD should not exceed 1.0. + msg = ('Min injection rate should be less than 800 and well ' + 'head should not exceed 1.0') + assert tc['M1RATE'].min() < 800. and tc['M1HEAD'].max() < 1., msg + + else: + + assert False, 'Test error. idx {} not being tested.'.format(idx) + + return + + +# - No need to change any code below +def test_mf6model(): + # initialize testing framework + test = testing_framework() + + # build the models + build_models() + + # run the test models + for idx, dir in enumerate(exdirs): + yield test.run_mf6, Simulation(dir, exfunc=eval_maw, idxsim=idx) + + return + + +def main(): + # initialize testing framework + test = testing_framework() + + # build the models + build_models() + + # run the test models + for idx, dir in enumerate(exdirs): + sim = Simulation(dir, exfunc=eval_maw, idxsim=idx) + test.run_mf6(sim) + + return + + +if __name__ == "__main__": + # print message + print('standalone run of {}'.format(os.path.basename(__file__))) + + # run main routine + main() diff --git a/code.json b/code.json index 5d5d48f3973..d25c68dc856 100755 --- a/code.json +++ b/code.json @@ -1,38 +1,38 @@ [ { - "status": "Release Candidate", + "status": "Release Candidate", "languages": [ "Fortran2008" - ], - "repositoryURL": "https://code.usgs.gov/usgs/modflow/modflow6.git", - "disclaimerURL": "https://code.usgs.gov/usgs/modflow/modflow6/blob/master/DISCLAIMER.md", + ], + "repositoryURL": "https://code.usgs.gov/usgs/modflow/modflow6.git", + "disclaimerURL": "https://code.usgs.gov/usgs/modflow/modflow6/blob/master/DISCLAIMER.md", "tags": [ - "MODFLOW", + "MODFLOW", "groundwater model" - ], - "vcs": "git", - "name": "modflow6", - "downloadURL": "https://code.usgs.gov/usgs/modflow/modflow6/archive/master.zip", + ], + "vcs": "git", + "name": "modflow6", + "downloadURL": "https://code.usgs.gov/usgs/modflow/modflow6/archive/master.zip", "contact": { - "name": "Christian D. Langevin", + "name": "Christian D. Langevin", "email": "langevin@usgs.gov" - }, - "laborHours": -1, - "version": "6.0.3.38", + }, + "laborHours": -1, + "version": "6.0.3.56", "date": { - "metadataLastUpdated": "2019-01-07" - }, - "organization": "U.S. Geological Survey", + "metadataLastUpdated": "2019-02-07" + }, + "organization": "U.S. Geological Survey", "permissions": { "licenses": [ { - "URL": "https://code.usgs.gov/usgs/modflow/modflow6/blob/master/LICENSE.md", + "URL": "https://code.usgs.gov/usgs/modflow/modflow6/blob/master/LICENSE.md", "name": "Public Domain, CC0-1.0" } - ], + ], "usageType": "openSource" - }, - "homepageURL": "https://code.usgs.gov/usgs/modflow/modflow6/", + }, + "homepageURL": "https://code.usgs.gov/usgs/modflow/modflow6/", "description": "MODFLOW is the USGS's modular hydrologic model. MODFLOW is considered an international standard for simulating and predicting groundwater conditions and groundwater/surface-water interactions." } ] diff --git a/doc/ReleaseNotes/ReleaseNotes.tex b/doc/ReleaseNotes/ReleaseNotes.tex index 76d4dd822f9..0ae5e17bcfd 100644 --- a/doc/ReleaseNotes/ReleaseNotes.tex +++ b/doc/ReleaseNotes/ReleaseNotes.tex @@ -122,7 +122,7 @@ \section{History} \begin{itemize} \item Addressed issue with pointing contiguous pointer vectors/arrays to non-contiguous pointer vectors/arrays that caused code compilation failure with gfortran-8. A consequence of addressing this issue is that all pointer vectors/arrays that are allocated or pointed to using the memory manager must be defined to be contiguous. \item Corrected a problem with the reading of grid data from a binary file, in which the program was reading a binary header for each row of data. -\item Added a new error check for very small time steps. If the value of starttime plus the time step length is equal to endtime, then the time step is too small to be differentiated by the program based on the precision of floating point numbers. The program will terminate with an error in this case. The program will also terminate if the storage package and a transient stress period has a time step length of zero. +\item Added a new error check for very small time steps. If the value of the starting time is equal to the ending time (starting time plus the time step length), then the time step is too small to be differentiated by the program based on the precision of floating point numbers. The program will terminate with an error in this case. The program will also terminate if the storage package with a transient stress period has a time step length of zero. \item The observation package was modified to use non-advancing output instead of fixed length strings when writing ascii output. The previous use of fixed length strings resulted in truncation of ascii observation output when the product of user-specified \texttt{digits} + 7 and the number of observations exceeded 5000. \item Corrected an error in the GWF-GWF Exchange module that caused the specific discharge values in the child model to be calculated incorrectly. The calculation was incorrect because the face normal for the child model was pointing toward the center of the cell instead of outward. \end{itemize} @@ -136,7 +136,7 @@ \section{History} \underline{ADVANCED STRESS PACKAGES} \begin{itemize} -\item - +\item Modified the Multi-Aquifer Well (MAW) Package so that the HEAD\_LIMIT and RATE\_SCALING options work for injection wells. Prior to this change, these options only worked for extraction wells. These options can be used to reduce or even shut off well injection as the head in the well rises above user-specified levels. \item - \item - \end{itemize} diff --git a/doc/mf6io/gwf/binaryoutput.tex b/doc/mf6io/gwf/binaryoutput.tex index 5afb8845506..0ad8d9e5857 100644 --- a/doc/mf6io/gwf/binaryoutput.tex +++ b/doc/mf6io/gwf/binaryoutput.tex @@ -580,7 +580,7 @@ \subsection{Observation Output File} \begin{description} \itemsep0pt \parskip0pt \parsep0pt \item \texttt{TYPE} (bytes 1--4 of Record 1) is ``cont `` --- ``cont'' indicates the file contains continuous observations ; -\item \texttt{PRECISION} (bytes 6--11 of Record 1) is either ``single'' or ``double'' --- ``single'' indicates that floating-point values are written in single precision (4 bytes), and ``double'' indicates double precision (8 bytes); +\item \texttt{PRECISION} (bytes 6--11 of Record 1) will always be ``double'' to indicate that floating-point values are written in double precision (8 bytes); \item \texttt{LENOBSNAME} (bytes 12--15 of Record 1) is an integer indicating the number of characters used to store each observation name in following records (in the initial release of MODFLOW~6, LENOBSNAME equals 40); \item \texttt{NOBS} (4-byte integer) is the number of observations recorded in the file; \item \texttt{OBSNAME} (LENOBSNAME bytes) is an observation name; diff --git a/doc/mf6io/mf6ivar/dfn/gwf-lak.dfn b/doc/mf6io/mf6ivar/dfn/gwf-lak.dfn index 3f35aa0ab2f..d6ab3fa0e75 100644 --- a/doc/mf6io/mf6ivar/dfn/gwf-lak.dfn +++ b/doc/mf6io/mf6ivar/dfn/gwf-lak.dfn @@ -378,7 +378,7 @@ tagged false in_record true reader urword longname lake connection type -description character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKCONN = 1) and there must be a lake table associated with each embedded lake. +description character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKECONN = 1) and there must be a lake table associated with each embedded lake. block connectiondata name bedleak diff --git a/doc/mf6io/mf6ivar/dfn/gwf-maw.dfn b/doc/mf6io/mf6ivar/dfn/gwf-maw.dfn index 00c3032c875..8db8f298463 100644 --- a/doc/mf6io/mf6ivar/dfn/gwf-maw.dfn +++ b/doc/mf6io/mf6ivar/dfn/gwf-maw.dfn @@ -565,7 +565,7 @@ tagged true in_record true reader urword longname head limit -description is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT is only applied to discharging wells (RATE $<$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. +description is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT can be applied to extraction wells (RATE $<$ 0) or injection wells (RATE $>$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. block period name shutoffrecord @@ -584,7 +584,7 @@ shape in_record true reader urword longname shut off well -description keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to discharging wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. +description keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to injection wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. block period name minrate @@ -623,7 +623,7 @@ shape in_record true reader urword longname rate scaling -description activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. +description activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. RATE\_SCALING can be used for extraction or injection wells. For extraction wells, the extraction rate will start to decrease once the head in the well lowers to a level equal to the pump elevation plus the scaling length. If the head in the well drops below the pump elevation, then the extraction rate is calculated to be zero. For an injection well, the injection rate will begin to decrease once the head in the well rises above the specified pump elevation. If the head in the well rises above the pump elevation plus the scaling length, then the injection rate will be set to zero. block period name pump_elevation @@ -633,7 +633,7 @@ tagged false in_record true reader urword longname pump elevation -description is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION cannot be less than the bottom elevation (BOTTOM) of the multi-aquifer well. By default, PUMP\_ELEVATION is set equal to the bottom of the largest GWF node number connected to a MAW well. +description is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION should not be less than the bottom elevation (BOTTOM) of the multi-aquifer well. block period name scaling_length @@ -643,7 +643,7 @@ tagged false in_record true reader urword longname -description height above the pump elevation (SCALING\_LENGTH) below which the pumping rate is reduced. The default value for SCALING\_LENGTH is the well radius. +description height above the pump elevation (SCALING\_LENGTH). If the simulated well head is below this elevation (pump elevation plus the scaling length), then the pumping rate is reduced. block period name auxiliaryrecord diff --git a/doc/mf6io/mf6ivar/dfn/gwf-sfr.dfn b/doc/mf6io/mf6ivar/dfn/gwf-sfr.dfn index 97e62a8601f..c30f884686c 100644 --- a/doc/mf6io/mf6ivar/dfn/gwf-sfr.dfn +++ b/doc/mf6io/mf6ivar/dfn/gwf-sfr.dfn @@ -542,7 +542,7 @@ tagged true in_record true reader urword longname well status -description keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream factions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. +description keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream fractions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. block period name manning diff --git a/doc/mf6io/mf6ivar/dfn/utl-obs.dfn b/doc/mf6io/mf6ivar/dfn/utl-obs.dfn index 074e55fb480..d7c27845ac0 100644 --- a/doc/mf6io/mf6ivar/dfn/utl-obs.dfn +++ b/doc/mf6io/mf6ivar/dfn/utl-obs.dfn @@ -1,14 +1,5 @@ # --------------------- gwf obs options --------------------- -block options -name precision -type double precision -shape -reader urword -optional true -longname -description Keyword and precision specifier for output of binary data, which can be either SINGLE or DOUBLE. The default is DOUBLE. When simulated values are written to a file specified as file type DATA(BINARY) in the Name File, the precision specifier controls whether the data (including simulated values and, for continuous observations, time values) are written as single- or double-precision. - block options name digits type integer diff --git a/doc/mf6io/mf6ivar/examples/exg-gwfgwf-example-obs.dat b/doc/mf6io/mf6ivar/examples/exg-gwfgwf-example-obs.dat index bf07abc6e34..027638d1296 100644 --- a/doc/mf6io/mf6ivar/examples/exg-gwfgwf-example-obs.dat +++ b/doc/mf6io/mf6ivar/examples/exg-gwfgwf-example-obs.dat @@ -1,5 +1,4 @@ BEGIN OPTIONS - PRECISION SINGLE DIGITS 10 PRINT_INPUT END OPTIONS diff --git a/doc/mf6io/mf6ivar/examples/gwf-lak-example-obs.dat b/doc/mf6io/mf6ivar/examples/gwf-lak-example-obs.dat index fbdc7aed1dd..c9dea88bdf4 100644 --- a/doc/mf6io/mf6ivar/examples/gwf-lak-example-obs.dat +++ b/doc/mf6io/mf6ivar/examples/gwf-lak-example-obs.dat @@ -1,5 +1,4 @@ BEGIN OPTIONS - PRECISION SINGLE DIGITS 10 PRINT_INPUT END OPTIONS diff --git a/doc/mf6io/mf6ivar/examples/gwf-maw-example-obs.dat b/doc/mf6io/mf6ivar/examples/gwf-maw-example-obs.dat index 897e49fea30..c7d4c3328c1 100644 --- a/doc/mf6io/mf6ivar/examples/gwf-maw-example-obs.dat +++ b/doc/mf6io/mf6ivar/examples/gwf-maw-example-obs.dat @@ -1,5 +1,4 @@ BEGIN OPTIONS - PRECISION SINGLE DIGITS 10 PRINT_INPUT END OPTIONS diff --git a/doc/mf6io/mf6ivar/md/mf6ivar.md b/doc/mf6io/mf6ivar/md/mf6ivar.md index 4149c04c108..45a72a62571 100644 --- a/doc/mf6io/mf6ivar/md/mf6ivar.md +++ b/doc/mf6io/mf6ivar/md/mf6ivar.md @@ -149,7 +149,7 @@ | GWF | NPF | OPTIONS | DEWATERED | KEYWORD | If the DEWATERED keyword is specified, then the vertical conductance is calculated using only the saturated thickness and properties of the overlying cell if the head in the underlying cell is below its top. | | GWF | NPF | OPTIONS | PERCHED | KEYWORD | keyword to indicate that when a cell is overlying a dewatered convertible cell, the head difference used in Darcy's Law is equal to the head in the overlying cell minus the bottom elevation of the overlying cell. If not specified, then the default is to use the head difference between the two cells. | | GWF | NPF | OPTIONS | REWET | KEYWORD | activates model rewetting. Rewetting is off by default. | -| GWF | NPF | OPTIONS | WETFCT | DOUBLE | is a keyword and factor that is included in the calculation of the head that is initially established at a cell when that cell is converted from dry to wet. | +| GWF | NPF | OPTIONS | WETFCT | DOUBLE PRECISION | is a keyword and factor that is included in the calculation of the head that is initially established at a cell when that cell is converted from dry to wet. | | GWF | NPF | OPTIONS | IWETIT | INTEGER | is a keyword and iteration interval for attempting to wet cells. Wetting is attempted every IWETIT iteration. This applies to outer iterations and not inner iterations. If IWETIT is specified as zero or less, then the value is changed to 1. | | GWF | NPF | OPTIONS | IHDWET | INTEGER | is a keyword and integer flag that determines which equation is used to define the initial head at cells that become wet. If IHDWET is 0, h = BOT + WETFCT (hm - BOT). If IHDWET is not 0, h = BOT + WETFCT (THRESH). | | GWF | NPF | OPTIONS | XT3D | KEYWORD | keyword indicating that the XT3D formulation will be used. If the RHS keyword is also included, then the XT3D additional terms will be added to the right-hand side. If the RHS keyword is excluded, then the XT3D terms will be put into the coefficient matrix. Use of XT3D will substantially increase the computational effort, but will result in improved accuracy for anisotropic conductivity fields and for unstructured grids in which the CVFD requirement is violated. XT3D requires additional information about the shapes of grid cells. If XT3D is active and the DISU Package is used, then the user will need to provide in the DISU Package the angldegx array in the CONNECTIONDATA block and the VERTICES and CELL2D blocks. | @@ -395,13 +395,13 @@ | GWF | MAW | PERIOD | FWRLEN | DOUBLE PRECISION | length used to reduce the conductance of the flowing well. When the head in the well drops below the well top plus the reduction length, then the conductance is reduced. This reduction length can be used to improve the stability of simulations with flowing wells so that there is not an abrupt change in flowing well rates. | | GWF | MAW | PERIOD | RATE | DOUBLE PRECISION | is the volumetric pumping rate for the multi-aquifer well. A positive value indicates recharge and a negative value indicates discharge (pumping). RATE only applies to active (IBOUND $>$ 0) multi-aquifer wells. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. By default, the RATE for each multi-aquifer well is zero. | | GWF | MAW | PERIOD | WELL_HEAD | DOUBLE PRECISION | is the head in the multi-aquifer well. WELL\_HEAD is only applied to constant head (STATUS is CONSTANT) and inactive (STATUS is INACTIVE) multi-aquifer wells. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. | -| GWF | MAW | PERIOD | HEAD_LIMIT | STRING | is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT is only applied to discharging wells (RATE $<$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. | -| GWF | MAW | PERIOD | SHUT_OFF | KEYWORD | keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to discharging wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. | +| GWF | MAW | PERIOD | HEAD_LIMIT | STRING | is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT can be applied to extraction wells (RATE $<$ 0) or injection wells (RATE $>$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. | +| GWF | MAW | PERIOD | SHUT_OFF | KEYWORD | keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to injection wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. | | GWF | MAW | PERIOD | MINRATE | DOUBLE PRECISION | is the minimum rate that a well must exceed to shutoff a well during a stress period. The well will shut down during a time step if the flow rate to the well from the aquifer is less than MINRATE. If a well is shut down during a time step, reactivation of the well cannot occur until the next time step to reduce oscillations. MINRATE must be less than maxrate. | | GWF | MAW | PERIOD | MAXRATE | DOUBLE PRECISION | is the maximum rate that a well must exceed to reactivate a well during a stress period. The well will reactivate during a timestep if the well was shutdown during the previous time step and the flow rate to the well from the aquifer exceeds maxrate. Reactivation of the well cannot occur until the next time step if a well is shutdown to reduce oscillations. maxrate must be greater than MINRATE. | -| GWF | MAW | PERIOD | RATE_SCALING | KEYWORD | activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. | -| GWF | MAW | PERIOD | PUMP_ELEVATION | DOUBLE PRECISION | is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION cannot be less than the bottom elevation (BOTTOM) of the multi-aquifer well. By default, PUMP\_ELEVATION is set equal to the bottom of the largest GWF node number connected to a MAW well. | -| GWF | MAW | PERIOD | SCALING_LENGTH | DOUBLE PRECISION | height above the pump elevation (SCALING\_LENGTH) below which the pumping rate is reduced. The default value for SCALING\_LENGTH is the well radius. | +| GWF | MAW | PERIOD | RATE_SCALING | KEYWORD | activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. RATE\_SCALING can be used for extraction or injection wells. For extraction wells, the extraction rate will start to decrease once the head in the well lowers to a level equal to the pump elevation plus the scaling length. If the head in the well drops below the pump elevation, then the extraction rate is calculated to be zero. For an injection well, the injection rate will begin to decrease once the head in the well rises above the specified pump elevation. If the head in the well rises above the pump elevation plus the scaling length, then the injection rate will be set to zero. | +| GWF | MAW | PERIOD | PUMP_ELEVATION | DOUBLE PRECISION | is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION should not be less than the bottom elevation (BOTTOM) of the multi-aquifer well. | +| GWF | MAW | PERIOD | SCALING_LENGTH | DOUBLE PRECISION | height above the pump elevation (SCALING\_LENGTH). If the simulated well head is below this elevation (pump elevation plus the scaling length), then the pumping rate is reduced. | | GWF | MAW | PERIOD | AUXILIARY | KEYWORD | keyword for specifying auxiliary variable. | | GWF | MAW | PERIOD | AUXNAME | STRING | name for the auxiliary variable to be assigned AUXVAL. AUXNAME must match one of the auxiliary variable names defined in the OPTIONS block. If AUXNAME does not match one of the auxiliary variable names defined in the OPTIONS block the data are ignored. | | GWF | MAW | PERIOD | AUXVAL | DOUBLE PRECISION | value for the auxiliary variable. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. | @@ -422,7 +422,7 @@ | GWF | SFR | OPTIONS | OBS6 | KEYWORD | keyword to specify that record corresponds to an observations file. | | GWF | SFR | OPTIONS | OBS6_FILENAME | STRING | name of input file to define observations for the SFR package. See the ``Observation utility'' section for instructions for preparing observation input files. Table \ref{table:obstype} lists observation type(s) supported by the SFR package. | | GWF | SFR | OPTIONS | MOVER | KEYWORD | keyword to indicate that this instance of the SFR Package can be used with the Water Mover (MVR) Package. When the MOVER option is specified, additional memory is allocated within the package to store the available, provided, and received water. | -| GWF | SFR | OPTIONS | MAXIMUM_ITERATIONS | DOUBLE PRECISION | value that defines the maximum number of Streamflow Routing Newton-Raphson iterations allowed for a reach. By default, MAXSFRIT is equal to 100. | +| GWF | SFR | OPTIONS | MAXIMUM_ITERATIONS | INTEGER | value that defines the maximum number of Streamflow Routing Newton-Raphson iterations allowed for a reach. By default, MAXSFRIT is equal to 100. | | GWF | SFR | OPTIONS | MAXIMUM_DEPTH_CHANGE | DOUBLE PRECISION | value that defines the depth closure tolerance. By default, DMAXCHG is equal to $1 \times 10^{-5}$. | | GWF | SFR | OPTIONS | UNIT_CONVERSION | DOUBLE PRECISION | value (or conversion factor) that is used in calculating stream depth for stream reach. A constant of 1.486 is used for flow units of cubic feet per second, and a constant of 1.0 is used for units of cubic meters per second. The constant must be multiplied by 86,400 when using time units of days in the simulation. | | GWF | SFR | DIMENSIONS | NREACHES | INTEGER | integer value specifying the number of stream reaches. There must be NREACHES entries in the PACKAGEDATA block. | @@ -449,7 +449,7 @@ | GWF | SFR | PERIOD | IPER | INTEGER | integer value specifying the starting stress period number for which the data specified in the PERIOD block apply. IPER must be less than or equal to NPER in the TDIS Package and greater than zero. The IPER value assigned to a stress period block must be greater than the IPER value assigned for the previous PERIOD block. The information specified in the PERIOD block will continue to apply for all subsequent stress periods, unless the program encounters another PERIOD block. | | GWF | SFR | PERIOD | RNO | INTEGER | integer value that defines the reach number associated with the specified PERIOD data on the line. RNO must be greater than zero and less than or equal to NREACHES. | | GWF | SFR | PERIOD | SFRSETTING | KEYSTRING | line of information that is parsed into a keyword and values. Keyword values that can be used to start the SFRSETTING string include: STATUS, MANNING, STAGE, INFLOW, RAINFALL, EVAPORATION, RUNOFF, DIVERSION, UPSTREAM\_FRACTION, and AUXILIARY. | -| GWF | SFR | PERIOD | STATUS | STRING | keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream factions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. | +| GWF | SFR | PERIOD | STATUS | STRING | keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream fractions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. | | GWF | SFR | PERIOD | MANNING | STRING | real or character value that defines the Manning's roughness coefficient for the reach. MANNING must be greater than zero. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value. | | GWF | SFR | PERIOD | STAGE | STRING | real or character value that defines the stage for the reach. The specified STAGE is only applied if the reach uses the simple routing option. If STAGE is not specified for reaches that use the simple routing option, the specified stage is set to the top of the reach. 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. | | GWF | SFR | PERIOD | INFLOW | STRING | real or character value that defines the volumetric inflow rate for the streamflow routing reach. 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, inflow rates are zero for each reach. | @@ -494,7 +494,7 @@ | GWF | LAK | CONNECTIONDATA | LAKENO | INTEGER | integer value that defines the lake number associated with the specified CONNECTIONDATA data on the line. LAKENO must be greater than zero and less than or equal to NLAKES. Lake connection information must be specified for every lake connection to the GWF model (NLAKECONN) or the program will terminate with an error. The program will also terminate with an error if connection information for a lake connection to the GWF model is specified more than once. | | GWF | LAK | CONNECTIONDATA | ICONN | INTEGER | integer value that defines the GWF connection number for this lake connection entry. ICONN must be greater than zero and less than or equal to NLAKECONN for lake LAKENO. | | GWF | LAK | CONNECTIONDATA | CELLID | INTEGER (NCELLDIM) | 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. | -| GWF | LAK | CONNECTIONDATA | CLAKTYPE | STRING | character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKCONN = 1) and there must be a lake table associated with each embedded lake. | +| GWF | LAK | CONNECTIONDATA | CLAKTYPE | STRING | character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKECONN = 1) and there must be a lake table associated with each embedded lake. | | GWF | LAK | CONNECTIONDATA | BEDLEAK | DOUBLE PRECISION | character string or real value that defines the bed leakance for the lake-GWF connection. BEDLEAK must be greater than or equal to zero or specified to be NONE. If BEDLEAK is specified to be NONE, the lake-GWF connection conductance is solely a function of aquifer properties in the connected GWF cell and lakebed sediments are assumed to be absent. | | GWF | LAK | CONNECTIONDATA | BELEV | DOUBLE PRECISION | real value that defines the bottom elevation for a HORIZONTAL lake-GWF connection. Any value can be specified if CLAKTYPE is VERTICAL, EMBEDDEDH, or EMBEDDEDV. If CLAKTYPE is HORIZONTAL and BELEV is not equal to TELEV, BELEV must be greater than or equal to the bottom of the GWF cell CELLID. If BELEV is equal to TELEV, BELEV is reset to the bottom of the GWF cell CELLID. | | GWF | LAK | CONNECTIONDATA | TELEV | DOUBLE PRECISION | real value that defines the top elevation for a HORIZONTAL lake-GWF connection. Any value can be specified if CLAKTYPE is VERTICAL, EMBEDDEDH, or EMBEDDEDV. If CLAKTYPE is HORIZONTAL and TELEV is not equal to BELEV, TELEV must be less than or equal to the top of the GWF cell CELLID. If TELEV is equal to BELEV, TELEV is reset to the top of the GWF cell CELLID. | @@ -630,7 +630,6 @@ | UTL | LAK | TABLE | VOLUME | DOUBLE PRECISION | real value that defines the lake volume corresponding to the stage specified on the line. | | UTL | LAK | TABLE | SAREA | DOUBLE PRECISION | real value that defines the lake surface area corresponding to the stage specified on the line. | | UTL | LAK | TABLE | BAREA | DOUBLE PRECISION | 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. | -| UTL | OBS | OPTIONS | PRECISION | DOUBLE PRECISION | Keyword and precision specifier for output of binary data, which can be either SINGLE or DOUBLE. The default is DOUBLE. When simulated values are written to a file specified as file type DATA(BINARY) in the Name File, the precision specifier controls whether the data (including simulated values and, for continuous observations, time values) are written as single- or double-precision. | | UTL | OBS | OPTIONS | 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 output file. The digits specifier has no effect on the number of significant digits with which the simulation time is written for continuous observations. | | UTL | OBS | OPTIONS | PRINT_INPUT | KEYWORD | keyword to indicate that the list of observation information will be written to the listing file immediately after it is read. | | UTL | OBS | CONTINUOUS | FILEOUT | KEYWORD | keyword to specify that an output filename is expected next. | diff --git a/doc/mf6io/mf6ivar/tex/gwf-lak-desc.tex b/doc/mf6io/mf6ivar/tex/gwf-lak-desc.tex index 8fcb796a70f..8382ed4c1a9 100644 --- a/doc/mf6io/mf6ivar/tex/gwf-lak-desc.tex +++ b/doc/mf6io/mf6ivar/tex/gwf-lak-desc.tex @@ -77,7 +77,7 @@ \item \texttt{cellid}---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. -\item \texttt{claktype}---character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKCONN = 1) and there must be a lake table associated with each embedded lake. +\item \texttt{claktype}---character string that defines the lake-GWF connection type for the lake connection. Possible lake-GWF connection type strings include: VERTICAL--character keyword to indicate the lake-GWF connection is vertical and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. HORIZONTAL--character keyword to indicate the lake-GWF connection is horizontal and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDH--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{11}$ tensor component defined for CELLID in the NPF package. EMBEDDEDV--character keyword to indicate the lake-GWF connection is embedded in a single cell and connection conductance calculations use the hydraulic conductivity corresponding to the $K_{33}$ tensor component defined for CELLID in the NPF package. Embedded lakes can only be connected to a single cell (NLAKECONN = 1) and there must be a lake table associated with each embedded lake. \item \texttt{bedleak}---character string or real value that defines the bed leakance for the lake-GWF connection. BEDLEAK must be greater than or equal to zero or specified to be NONE. If BEDLEAK is specified to be NONE, the lake-GWF connection conductance is solely a function of aquifer properties in the connected GWF cell and lakebed sediments are assumed to be absent. diff --git a/doc/mf6io/mf6ivar/tex/gwf-maw-desc.tex b/doc/mf6io/mf6ivar/tex/gwf-maw-desc.tex index 852d22dffbf..3e006b0ed64 100644 --- a/doc/mf6io/mf6ivar/tex/gwf-maw-desc.tex +++ b/doc/mf6io/mf6ivar/tex/gwf-maw-desc.tex @@ -124,19 +124,19 @@ \item \textcolor{blue}{\texttt{well\_head}---is the head in the multi-aquifer well. WELL\_HEAD is only applied to constant head (STATUS is CONSTANT) and inactive (STATUS is INACTIVE) multi-aquifer wells. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value.} -\item \texttt{head\_limit}---is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT is only applied to discharging wells (RATE $<$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. +\item \texttt{head\_limit}---is the limiting water level (head) in the well, which is the minimum of the well RATE or the well inflow rate from the aquifer. HEAD\_LIMIT can be applied to extraction wells (RATE $<$ 0) or injection wells (RATE $>$ 0). HEAD\_LIMIT can be deactivated by specifying the text string `OFF'. The HEAD\_LIMIT option is based on the HEAD\_LIMIT functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The HEAD\_LIMIT option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the HEAD\_LIMIT option is recommended. By default, HEAD\_LIMIT is `OFF'. -\item \texttt{SHUT\_OFF}---keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to discharging wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. +\item \texttt{SHUT\_OFF}---keyword for activating well shut off capability. Subsequent values define the minimum and maximum pumping rate that a well must exceed to shutoff or reactivate a well, respectively, during a stress period. SHUT\_OFF is only applied to injection wells (RATE$<0$) and if HEAD\_LIMIT is specified (not set to `OFF'). If HEAD\_LIMIT is specified, SHUT\_OFF can be deactivated by specifying a minimum value equal to zero. The SHUT\_OFF option is based on the SHUT\_OFF functionality available in the MNW2~\citep{konikow2009} package for MODFLOW-2005. The SHUT\_OFF option has been included to facilitate backward compatibility with previous versions of MODFLOW but use of the RATE\_SCALING option instead of the SHUT\_OFF option is recommended. By default, SHUT\_OFF is not used. \item \texttt{minrate}---is the minimum rate that a well must exceed to shutoff a well during a stress period. The well will shut down during a time step if the flow rate to the well from the aquifer is less than MINRATE. If a well is shut down during a time step, reactivation of the well cannot occur until the next time step to reduce oscillations. MINRATE must be less than maxrate. \item \texttt{maxrate}---is the maximum rate that a well must exceed to reactivate a well during a stress period. The well will reactivate during a timestep if the well was shutdown during the previous time step and the flow rate to the well from the aquifer exceeds maxrate. Reactivation of the well cannot occur until the next time step if a well is shutdown to reduce oscillations. maxrate must be greater than MINRATE. -\item \texttt{RATE\_SCALING}---activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. +\item \texttt{RATE\_SCALING}---activate rate scaling. If RATE\_SCALING is specified, both PUMP\_ELEVATION and SCALING\_LENGTH must be specified. RATE\_SCALING cannot be used with HEAD\_LIMIT. RATE\_SCALING can be used for extraction or injection wells. For extraction wells, the extraction rate will start to decrease once the head in the well lowers to a level equal to the pump elevation plus the scaling length. If the head in the well drops below the pump elevation, then the extraction rate is calculated to be zero. For an injection well, the injection rate will begin to decrease once the head in the well rises above the specified pump elevation. If the head in the well rises above the pump elevation plus the scaling length, then the injection rate will be set to zero. -\item \texttt{pump\_elevation}---is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION cannot be less than the bottom elevation (BOTTOM) of the multi-aquifer well. By default, PUMP\_ELEVATION is set equal to the bottom of the largest GWF node number connected to a MAW well. +\item \texttt{pump\_elevation}---is the elevation of the multi-aquifer well pump (PUMP\_ELEVATION). PUMP\_ELEVATION should not be less than the bottom elevation (BOTTOM) of the multi-aquifer well. -\item \texttt{scaling\_length}---height above the pump elevation (SCALING\_LENGTH) below which the pumping rate is reduced. The default value for SCALING\_LENGTH is the well radius. +\item \texttt{scaling\_length}---height above the pump elevation (SCALING\_LENGTH). If the simulated well head is below this elevation (pump elevation plus the scaling length), then the pumping rate is reduced. \item \texttt{AUXILIARY}---keyword for specifying auxiliary variable. diff --git a/doc/mf6io/mf6ivar/tex/gwf-sfr-desc.tex b/doc/mf6io/mf6ivar/tex/gwf-sfr-desc.tex index 3a2cc471a15..73daedb2811 100644 --- a/doc/mf6io/mf6ivar/tex/gwf-sfr-desc.tex +++ b/doc/mf6io/mf6ivar/tex/gwf-sfr-desc.tex @@ -124,7 +124,7 @@ AUXILIARY <@auxval@> \end{lstlisting} -\item \texttt{status}---keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream factions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. +\item \texttt{status}---keyword option to define stream reach status. STATUS can be ACTIVE, INACTIVE, or SIMPLE. The SIMPLE STATUS option simulates streamflow using a user-specified stage for a reach or a stage set to the top of the reach (depth = 0). In cases where the simulated leakage calculated using the specified stage exceeds the sum of inflows to the reach, the stage is set to the top of the reach and leakage is set equal to the sum of inflows. Upstream fractions should be changed using the UPSTREAM\_FRACTION SFRSETTING if the status for one or more reaches is changed to ACTIVE or INACTIVE. For example, if one of two downstream connections for a reach is inactivated, the upstream fraction for the active and inactive downstream reach should be changed to 1.0 and 0.0, respectively, to ensure that the active reach receives all of the downstream outflow from the upstream reach. By default, STATUS is ACTIVE. \item \textcolor{blue}{\texttt{manning}---real or character value that defines the Manning's roughness coefficient for the reach. MANNING must be greater than zero. If the Options block includes a TIMESERIESFILE entry (see the ``Time-Variable Input'' section), values can be obtained from a time series by entering the time-series name in place of a numeric value.} diff --git a/doc/mf6io/mf6ivar/tex/utl-obs-desc.tex b/doc/mf6io/mf6ivar/tex/utl-obs-desc.tex index da05d1b0dad..ad5ef163d58 100644 --- a/doc/mf6io/mf6ivar/tex/utl-obs-desc.tex +++ b/doc/mf6io/mf6ivar/tex/utl-obs-desc.tex @@ -3,8 +3,6 @@ \item \textbf{Block: OPTIONS} \begin{description} -\item \texttt{precision}---Keyword and precision specifier for output of binary data, which can be either SINGLE or DOUBLE. The default is DOUBLE. When simulated values are written to a file specified as file type DATA(BINARY) in the Name File, the precision specifier controls whether the data (including simulated values and, for continuous observations, time values) are written as single- or double-precision. - \item \texttt{digits}---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. \item \texttt{PRINT\_INPUT}---keyword to indicate that the list of observation information will be written to the listing file immediately after it is read. diff --git a/doc/mf6io/mf6ivar/tex/utl-obs-options.dat b/doc/mf6io/mf6ivar/tex/utl-obs-options.dat index be7be854264..e5a078455b0 100644 --- a/doc/mf6io/mf6ivar/tex/utl-obs-options.dat +++ b/doc/mf6io/mf6ivar/tex/utl-obs-options.dat @@ -1,5 +1,4 @@ BEGIN OPTIONS - [PRECISION ] [DIGITS ] [PRINT_INPUT] END OPTIONS diff --git a/doc/version.tex b/doc/version.tex index bbb21a450c6..a9d3eaddd19 100644 --- a/doc/version.tex +++ b/doc/version.tex @@ -1,3 +1,3 @@ -\newcommand{\modflowversion}{mf6.0.3.38} -\newcommand{\modflowdate}{January 07, 2019} +\newcommand{\modflowversion}{mf6.0.3.56} +\newcommand{\modflowdate}{February 07, 2019} \newcommand{\currentmodflowversion}{Version \modflowversion---\modflowdate} diff --git a/src/Model/GroundWaterFlow/gwf3maw8.f90 b/src/Model/GroundWaterFlow/gwf3maw8.f90 index ed27b78439a..d066584b9e2 100644 --- a/src/Model/GroundWaterFlow/gwf3maw8.f90 +++ b/src/Model/GroundWaterFlow/gwf3maw8.f90 @@ -1001,15 +1001,9 @@ subroutine maw_read_initial_attr(this) ! -- qa data call this%maw_check_attributes() ! - ! -- set initial pump elevation and calculate the saturated conductance + ! -- Calculate the saturated conductance do n = 1, this%nmawwells - ! -- initial pump elevation is set at the lowest screen elevation - this%mawwells(n)%pumpelev = this%mawwells(n)%botscrn(1) - do j = 2, this%mawwells(n)%ngwfnodes - if (this%mawwells(n)%botscrn(j) < this%mawwells(n)%pumpelev) then - this%mawwells(n)%pumpelev = this%mawwells(n)%botscrn(j) - end if - end do + ! ! -- calculate saturated conductance only if CONDUCTANCE was not ! specified for each maw-gwf connection (CONDUCTANCE keyword). do j = 1, this%mawwells(n)%ngwfnodes @@ -1022,7 +1016,6 @@ subroutine maw_read_initial_attr(this) ! ! -- write summary of static well data ! -- write well data - ! -- write well data write (this%iout,fmtwelln) ' WELL NO.', ' RADIUS', ' AREA', & ' WELL BOT.', ' STRT', ' NGWFNODES', & 'CONDEQN ', 'NAME ' @@ -3801,7 +3794,6 @@ subroutine maw_calculate_saturation(this, i, j, node, sat) return end subroutine maw_calculate_saturation - subroutine maw_calculate_wellq(this, n, hmaw, q) ! ************************************************************************** ! maw_calculate_wellq-- Calculate well pumping rate based on constraints @@ -3823,12 +3815,19 @@ subroutine maw_calculate_wellq(this, n, hmaw, q) real(DP) :: dq ! -------------------------------------------------------------------------- ! - ! -- Initialize accumulators + ! -- Initialize q q = DZERO - ! -- base pumping rate + ! + ! -- Assign rate as the user-provided base pumping rate rate = this%mawwells(n)%rate%value + ! + ! -- Assign q differently depending on whether this is an extraction well + ! (rate < 0) or an injection well (rate > 0). if (rate < DZERO) then - !if (this%mawwells(n)%shutoffmin > DZERO) then + ! + ! -- If well shut off is activated, then turn off well if necessary, + ! or if shut off is not activated then check to see if rate scaling + ! is on. if (this%mawwells(n)%shutofflevel /= DEP20) then call this%maw_calculate_qpot(n, q) if (q < DZERO) q = DZERO @@ -3858,6 +3857,9 @@ subroutine maw_calculate_wellq(this, n, hmaw, q) this%mawwells(n)%shutoffdq = dq this%mawwells(n)%shutoffweight = weight + ! + ! -- If shutoffmin and shutoffmax are specified then apply + ! additional checks for when to shut off the well. if (this%mawwells(n)%shutoffmin > DZERO) then if (hmaw < this%mawwells(n)%shutofflevel) then ! @@ -3895,9 +3897,10 @@ subroutine maw_calculate_wellq(this, n, hmaw, q) else scale = DONE - ! -- scale pumpage when hmaw is less than the sum of - ! maw pump elevation (pumpelev) and the specified reduction length - ! Only applied to pumping wells + ! -- Apply rate scaling by reducing pumpage when hmaw is less than the + ! sum of maw pump elevation (pumpelev) and the specified reduction + ! length. The rate will go to zero as hmaw drops to the pump + ! elevation. if (this%mawwells(n)%reduction_length /= DEP20) then bt = this%mawwells(n)%pumpelev tp = bt + this%mawwells(n)%reduction_length @@ -3905,16 +3908,59 @@ subroutine maw_calculate_wellq(this, n, hmaw, q) end if q = scale * rate end if - ! -- injection is not rate limited + ! else + ! + ! -- Handle the injection case (rate > 0) differently than extraction. q = rate + if (this%mawwells(n)%shutofflevel /= DEP20) then + call this%maw_calculate_qpot(n, q) + q = -q + if (q < DZERO) q = DZERO + if (q > rate) q = rate + + if (this%ishutoffcnt == 1) then + this%mawwells(n)%shutoffweight = DONE + this%mawwells(n)%shutoffdq = DZERO + this%mawwells(n)%shutoffqold = q + end if + + dq = q - this%mawwells(n)%shutoffqold + weight = this%mawwells(n)%shutoffweight + + ! -- for flip-flop condition, decrease factor + if ( this%mawwells(n)%shutoffdq*dq < DZERO ) then + weight = this%theta * this%mawwells(n)%shutoffweight + ! -- when change is of same sign, increase factor + else + weight = this%mawwells(n)%shutoffweight + this%kappa + end if + if ( weight > DONE ) weight = DONE + + q = this%mawwells(n)%shutoffqold + weight * dq + + this%mawwells(n)%shutoffqold = q + this%mawwells(n)%shutoffdq = dq + this%mawwells(n)%shutoffweight = weight + + else + scale = DONE + ! -- Apply rate scaling for an injection well by reducting the + ! injection rate as hmaw rises above the pump elevation. The rate + ! will approach zero as hmaw approaches pumpelev + reduction_length. + if (this%mawwells(n)%reduction_length /= DEP20) then + bt = this%mawwells(n)%pumpelev + tp = bt + this%mawwells(n)%reduction_length + scale = DONE - sQSaturation(tp, bt, hmaw) + endif + q = scale * rate + endif end if ! ! -- return return end subroutine maw_calculate_wellq - subroutine maw_calculate_qpot(this, n, qnet) ! ****************************************************************************** ! maw_calculate_qpot -- Calculate groundwater inflow to a maw well diff --git a/src/Utilities/version.f90 b/src/Utilities/version.f90 index 8cb067681bf..f1ca0c52183 100644 --- a/src/Utilities/version.f90 +++ b/src/Utilities/version.f90 @@ -3,7 +3,7 @@ module VersionModule public ! -- modflow 6 version integer(I4B), parameter :: IDEVELOPMODE = 1 - character(len=40), parameter :: VERSION = '6.0.3.38 01/07/2019' + character(len=40), parameter :: VERSION = '6.0.3.56 02/07/2019' character(len=10), parameter :: MFVNAM = ' 6' character(len=*), parameter :: MFTITLE = & 'U.S. GEOLOGICAL SURVEY MODULAR HYDROLOGIC MODEL' diff --git a/version.txt b/version.txt index 0aec6c943f5..01e8ebb2182 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ # MODFLOW 6 version file automatically created using...pre-commit.py -# created on...January 07, 2019 15:41:48 +# created on...February 07, 2019 10:52:23 # add some comments on how this version file # should be manually updated and used @@ -7,6 +7,6 @@ major = 6 minor = 0 micro = 3 -build = 38 -commit = 139 +build = 56 +commit = 157