modflow-setup

Getting Started

  • Philosophy
  • Installation
  • 10 Minutes to Modflow-setup
  • Examples
  • Configuration File Gallery
    • Shellmound test case
    • Shellmound TMR inset test case
    • Pleasant Lake test case
      • LGR parent model configuration
      • pleasant_lgr_inset.yml
    • Pleasant Lake MODFLOW-NWT test case
    • Plainfield Lakes MODFLOW-NWT test case

User Guide

  • Basic program structure and usage
  • The configuration file
  • Concepts and methods
  • Input instructions by package
  • Troubleshooting

Reference

  • Code reference
  • Configuration file defaults
  • Release History
  • Contributing to modflow-setup

Bibliography

  • References
  • Modflow-setup applications
  • Workflow examples
modflow-setup
  • Configuration File Gallery
  • View page source

Configuration File Gallery

Below are example (valid) configuration files from the modflow-setup test suite. The yaml files and the datasets they reference can be found under modflow-setup/mfsetup/tests/data/.

Shellmound test case

  • 13 layer MODFLOW-6 model with no parent model

  • 9 layers specified with raster surfaces; with remaining 4 layers subdividing the raster surfaces

  • vertical pass-through cells at locations of layer pinch-outs (drop_thin_cells: True option)

  • variable time discretization

  • model grid aligned with the National Hydrologic Grid

  • recharge read from NetCDF source data

  • SFR network created from custom hydrography

  • WEL package created from CSV input

  1# Configuration file for shellmound test case
  2#
  3# The MF6model.setup_from_yaml reads this in as a python dictionary (via the pyyaml package),
  4# and attaches it to a newly created MF6model object instance (MF6model is a subclass of flopy.mf6.ModflowGwf).
  5# For example, the simulation block would become
  6# cfg['simulation'] = {'sim_name: 'mfsim', 'version': 'mf6': 'sim_ws'}, where cfg is the dictionary
  7# made from the yaml file.
  8#
  9# The blocks below are then used as input to create Flopy object instances or
 10# as input to other aspects of the MFsetup workflow that work on top of Flopy.
 11# For example, the model block provides the input to flopy.mf6.ModflowGwf, via
 12# the __init__ method for MF6model. For clarity, the items in the options block
 13# are stored in their own dictionary that represents that block in the MODFLOW-6
 14# name file (as opposed to the flopy.mf6.ModflowGwf signature, which includes them
 15# as individual default arguments). Some items in the model block do not represent flopy
 16# input. The relative_external_filepaths item is a flag for MFSetup that instructs it
 17# to reference external files relative to the model workspace, to avoid broken paths
 18# when the model is copied to a different location.
 19#
 20# In general, within blocks or subblocks that correspond to MODFLOW-6 input,
 21# variables that correspond to an input variable in flopy.mf6 indicate input
 22# that will be passed directly to flopy (numbers, lists, external file paths, etc.).
 23#
 24# In contrast, 'source_data' subblocks indicate input from general file formats
 25# (shapefiles, csvs, rasters, etc.) that needs to be mapped to the model space
 26# and time discretization. The source_data blocks are intended to be general across
 27# input types. For example- 'filename' indicates a file path (string), regardless
 28# of the type of file, and 'filenames' indicates a list or dictionary of files that
 29# map to model layers or stress periods. Items with the '_units' suffix indicate
 30# the units of the source data, allowing Modflow-setup to convert the values to model units
 31# accordingly. '_column' Items indicate field names in the source data where the input can be found.
 32
 33# input for MODFLOW 6 simulation
 34simulation:
 35  sim_name: 'mfsim'
 36  version: 'mf6'
 37  sim_ws: '../tmp/shellmound'
 38  options:
 39    continue: True
 40
 41# input for MODFLOW 6 model
 42model:
 43  simulation: 'shellmound'
 44  modelname: 'shellmound'
 45  options:
 46    print_input: True
 47    save_flows: True
 48    newton: True
 49    newton_under_relaxation: False
 50  # packages to build
 51  # (any packages not listed or commented out will not be built,
 52  #  event if they have an input block below)
 53  packages: ['dis',
 54             'ic',
 55             'npf',
 56             'oc',
 57             'sto',
 58             'rch',
 59             'sfr',
 60             'chd',
 61             'drn',
 62             'ghb',
 63             'riv',
 64             'obs',
 65             'wel',
 66             'ims'
 67  ]
 68  external_path: 'external/'
 69
 70# parameters for setting up the horizontal configuration of the grid
 71# in the context of a coordinate reference system
 72setup_grid:
 73  xoff: 501405 # lower left x-coordinate
 74  yoff: 1175835 # lower left y-coordinate
 75  rotation: 0.
 76  epsg: 5070
 77  # snap model to the National Hydrogeologic Grid
 78  # (Clark and others, 2018)
 79  snap_to_NHG: True
 80
 81# Structured Discretization Package
 82dis:
 83  options:
 84    length_units: 'meters'
 85  dimensions:
 86    nlay: 13
 87    nrow: 30
 88    ncol: 35
 89  griddata:
 90    delr: 1000.
 91    delc: 1000.
 92  source_data:
 93    top:
 94      filename: 'shellmound/rasters/meras_100m_dem.tif' # DEM file; path relative to setup script
 95      elevation_units: 'feet'
 96    botm:
 97      filenames:
 98        0: 'shellmound/rasters/vkbg_surf.tif' # Vicksburg-Jackson Group (top)
 99        1: 'shellmound/rasters/ucaq_surf.tif' # Upper Claiborne aquifer (top)
100        2: 'shellmound/rasters/mccu_surf.tif' # Middle Claiborne confining unit (top)
101        3: 'shellmound/rasters/mcaq_surf.tif' # Middle Claiborne aquifer (top)
102        6: 'shellmound/rasters/lccu_surf.tif' # Lower Claiborne confining unit (top)
103        8: 'shellmound/rasters/lcaq_surf.tif' # Lower Claiborne aquifer (top)
104        9: 'shellmound/rasters/mwaq_surf.tif' # Middle Wilcox aquifer (top)
105        10: 'shellmound/rasters/lwaq_surf.tif' # Lower Wilcox aquifer (top)
106        12: 'shellmound/rasters/mdwy_surf.tif' # Midway confining unit (top)
107      elevation_units: 'feet'
108    idomain:
109      filename: 'shellmound/shps/active_area.shp'
110  minimum_layer_thickness: 1 # layers less than this thickness are converted to vertical pass-through cells
111  drop_thin_cells: True
112
113# Temporal Discretization Package
114tdis:
115  options:
116    time_units: 'days'
117    start_date_time: '1998-04-01'
118  perioddata:
119    # time discretization info can be specified directly under the perioddata key
120    # or in groups of stress periods that are discretized in a similar way
121    group 1: # initial steady-state period (steady specified under sto package)
122      #perlen: 1 # Specify perlen as an int or list of lengths in model units, or perlen=None and 3 of start_date, end_date, nper and/or freq."
123      nper: 1
124      nstp: 1
125      tsmult: 1
126      steady: True  # "steady" can be entered here; otherwise the global entry specified in the sto package is used as the default
127      # oc_saverecord: can also be specified by group here; otherwise the global entry specified in the oc package is used as the default
128    group 2: # single long period for spin-up of pumping
129      start_date_time: '1998-04-01'  # can be specified by group, otherwise start_date_time for the model (under tdis: options) will be used.
130      end_date_time: '2007-04-01'  # model ends at midnight on this date (2007-03-31 would be the last day simulated)
131      nper: 1
132      nstp: 10
133      tsmult: 1.5
134      steady: False
135    group 3:
136      start_date_time: '2007-04-01'
137      end_date_time: '2015-10-01'  # model ends at midnight on this date (2015-09-30 would be the last day simulated)
138      freq: '6MS' # same as argument to pandas.date_range; (see "Offset Aliases" at https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases)
139      nstp: 5
140      tsmult: 1.5
141      steady: False
142
143# Initial Conditions Package
144# if no starting head values are specified,
145# and there is no parent model,
146# starting heads are set to the model top by default
147ic:
148  # optional format for writing external files
149  # e.g. (strt_001.dat)
150  # default is strt_{:03d}.dat
151  strt_filename_fmt: "strt_{:03d}.dat"
152
153# Node Property Flow Package
154npf:
155  options:
156    save_flows: True
157  griddata:
158    icelltype: 1 # variable sat. thickness in all layers
159  source_data:
160    k:
161      filenames:
162        0: 'shellmound/rasters/k0.tif' # Vicksburg-Jackson Group
163        1: 'shellmound/rasters/k1.tif' # Upper Claiborne aquifer
164        2: 'shellmound/rasters/k2.tif' # Middle Claiborne confining unit
165        3: 'shellmound/rasters/k3.tif' # Middle Claiborne aquifer
166        4: 'shellmound/rasters/k3.tif' # Middle Claiborne aquifer
167        5: 'shellmound/rasters/k3.tif' # Middle Claiborne aquifer
168        6: 'shellmound/rasters/k4.tif' # Lower Claiborne confining unit
169        7: 'shellmound/rasters/k4.tif' # Lower Claiborne confining unit
170        8: 'shellmound/rasters/k5.tif' # Lower Claiborne aquifer
171        9: 'shellmound/rasters/k6.tif' # Middle Wilcox aquifer
172        10: 'shellmound/rasters/k10.tif' # Lower Wilcox aquifer
173        11: 'shellmound/rasters/k10.tif' # Lower Wilcox aquifer
174        12: 'shellmound/rasters/k12.tif' # Lower Wilcox aquifer
175      length_units: 'feet'
176    k33:
177      filenames:
178        0: 'shellmound/rasters/k330.tif' # Vicksburg-Jackson Group
179        1: 'shellmound/rasters/k331.tif' # Upper Claiborne aquifer
180        2: 'shellmound/rasters/k332.tif' # Middle Claiborne confining unit
181        3: 'shellmound/rasters/k333.tif' # Middle Claiborne aquifer
182        4: 'shellmound/rasters/k333.tif' # Middle Claiborne aquifer
183        5: 'shellmound/rasters/k333.tif' # Middle Claiborne aquifer
184        6: 'shellmound/rasters/k334.tif' # Lower Claiborne confining unit
185        7: 'shellmound/rasters/k334.tif' # Lower Claiborne confining unit
186        8: 'shellmound/rasters/k335.tif' # Lower Claiborne aquifer
187        9: 'shellmound/rasters/k336.tif' # Middle Wilcox aquifer
188        10: 'shellmound/rasters/k3310.tif' # Lower Wilcox aquifer
189        11: 'shellmound/rasters/k3310.tif' # Lower Wilcox aquifer
190        12: 'shellmound/rasters/k3312.tif' # Lower Wilcox aquifer
191      length_units: 'feet'
192  k_filename_fmt: "k_{:03d}.dat"
193  k33_filename_fmt: "k33_{:03d}.dat"
194
195# Storage Package
196sto:
197  options:
198    save_flows: True
199  griddata:
200    iconvert: 1  # convertible layers
201    # initial global values for storage
202    sy: 0.25
203    ss: 1.e-6
204
205# Recharge Package
206rch:
207  options:
208    print_input: True
209    print_flows: False
210    save_flows: True
211    readasarrays: True
212  source_data:
213    # resample recharge from NetCDF file with time-series of grids
214    recharge:
215      filename: 'shellmound/net_infiltration__2000-01-01_to_2017-12-31__414_by_394.nc'
216      variable: 'net_infiltration'
217      length_units: 'inches'
218      time_units: 'days'
219      crs: 5070
220      resample_method: 'linear'
221      period_stats:
222        # for the first two stress periods
223        # apply mean recharge rates for dates below
224        0: ['mean', '2000-01-01', '2017-12-31']
225        1: ['mean', '2000-01-01', '2017-12-31']
226        2: 'mean'  # for periods 2 on, use the mean recharge for that period
227
228# Streamflow Routing Package
229# SFR input is created using SFRmaker
230# https://github.com/usgs/sfrmaker
231sfr:
232  options:
233    save_flows: True
234  source_data:
235    flowlines:
236      filename: 'shellmound/shps/flowlines.shp'
237      id_column: 'COMID'  # arguments to sfrmaker.Lines.from_shapefile
238      routing_column: 'tocomid'
239      width1_column: 'width1'
240      width2_column: 'width2'
241      up_elevation_column: 'elevupsmo'
242      dn_elevation_column: 'elevdnsmo'
243      name_column: 'GNIS_NAME'
244      width_units: 'feet'  # units of source data
245      elevation_units: 'feet'  # units of source data
246    # specified inflows to SFR network
247    inflows:  # see sfrmaker.data.add_to_perioddata for arguments
248      filename: 'shellmound/tables/inflows.csv'
249      datetime_column: 'datetime'
250      line_id_column: 'line_id'
251      data_column: 'flow_m3d'  # flows are already in cubic meters/day; can therefore skip unit input
252      category_column: 'category'
253    observations:  # see sfrmaker.observations.add_observations for arguments
254      filename: shellmound/tables/observations.csv
255      obstype: [downstream-flow, 'stage']  # modflow-6 observation type
256      x_location_column: x  # observation locations, in CRS coordinates
257      y_location_column: y
258      obsname_column: site_no  # column for naming observations
259    # specified runoff
260    # that has been reprocessed to units of m3/day per line ID
261    runoff:  # see sfrmaker.data.add_to_perioddata for arguments
262      filename: 'shellmound/tables/swb_runoff_by_nhdplus_comid_m3d.csv'
263      datetime_column: 'time'
264      line_id_column: 'comid'
265      data_column: 'runoff_m3d'
266    # modflow-setup will try to locate the inflows or runoff values
267    # using the routing information in the flowlines shapefile
268    # however, in some cases an inflow location might be just outside of the flowlines that are provided
269    # (for example, if they were clipped to the model grid, or if they are outside of the model bounding box)
270    # or a runoff value might be assigned to a line that was culled from the preprocessed flowlines
271    # the routing option allows complete routing of the original data to be supplied,
272    # so that values associated with missing lines can be assigned to the next existing downstream line
273    routing:
274      filename: 'shellmound/tables/flowline_routing.csv'
275      id_column: 'FROMCOMID'  # arguments to sfrmaker.Lines.from_shapefile
276      routing_column: 'TOCOMID'
277  sfrmaker_options:
278    # the sfrmaker_options: block can include arguments to the Lines.to_sfr method in SFRmaker
279    # (see https://doi-usgs.github.io/sfrmaker/api/sfrmaker.lines.html#sfrmaker.lines.Lines.to_sfr)
280    # or other options such as set_streambed_top_elevations_from_dem (see pleasant examples)
281    # or to_riv (shellmound_tmr example)
282    one_reach_per_cell: True #  consolidate SFR reaches to one per i, j location
283    add_outlets: [17957815, 17956213]  # add outlets at these line numbers
284    minimum_slope: 1.e-5
285    to_riv: [18047206] # convert this line and all downstream lines to the RIV package
286
287# Constant Head Package
288chd:
289  options:
290    save_flows: True
291  source_data:
292    shapefile:
293      filename: '../../../mfsetup/tests/data/shellmound/shps/waterbodies.shp'
294      id_column: 'COMID' # shapefile attribute field with include_ids:
295      include_ids: [18046162] # features used to form the boundary
296      boundname_column: 'GNIS_NAME'
297    csvfile:
298      filename: 'shellmound/tables/chd_heads.csv'
299      id_column: 'comid'
300      datetime_column: 'start_datetime'
301      end_datetime_column: 'end_datetime'
302      head_column: 'head'
303      length_units: 'feet'
304      # how heads will be aggregated to the model stress periods
305      period_stats:
306          # apply the mean heads across a specified time period
307          # for the initial steady state
308          # (default of 'mean' uses all times in input data)
309          0: ['mean', '2000-01-01', '2017-12-31']
310          1: mean  # apply the mean heads for the time period of s.p. 1
311          #  the last statistic specified (mean) will also be applied to subsequent periods
312
313# Drain Package
314drn:
315  options:
316    save_flows: True
317  source_data:
318    shapefile:
319      filename: '../../../mfsetup/tests/data/shellmound/shps/waterbodies.shp'
320      id_column: 'COMID'
321      # Include all features in the above shapefile,
322      # except those associated with these COMIDs
323      exclude_ids: [18046230, 18046226, 18046238, 17953939, 18046140, 18046162]
324      boundname_column: 'COMID'
325    elev:
326      filename: 'shellmound/rasters/meras_100m_dem.tif'
327      elevation_units: 'feet'
328    cond: 1.e+3  # in model units
329
330# General Head Boundary Package
331ghb:
332  options:
333    save_flows: True
334  source_data:
335    shapefile:
336      filename: '../../../mfsetup/tests/data/shellmound/shps/waterbodies.shp'
337      id_column: 'COMID'
338      # Note: to include all features in a shapefile,
339      # simply omit the include_ids: key
340      include_ids: [18046230]
341      # argument to rasterio.features.rasterize
342      # if true, all grid cells touching the feature(s)
343      # in the shapefile will be assigned BCs, if False
344      # only the cells with centers inside the polygon
345      # will be included
346      all_touched: True
347    # Example of mixed boundary condition input, where
348    # a shapefile defines the feature extents
349    # a csvfile defines transient head values
350    # a raster defines static but spatially varying conductance
351    csvfile:
352      filename: 'shellmound/tables/chd_heads.csv'
353      id_column: 'comid'
354      datetime_column: 'start_datetime'
355      end_datetime_column: 'end_datetime'
356      bhead_column: 'head'
357      length_units: 'feet'
358      # with no period_stats: block, aggregation defaults
359      # to 'mean' for each stress period
360    cond:
361      # note: a single global value could also be specified here,
362      # as for the Drain Package
363      filename: shellmound/rasters/k330.tif
364      length_units: meters
365      time_units: days
366
367
368# River Package
369riv:
370  options:
371    save_flows: True
372  source_data:
373    shapefile:
374      filename: '../../../mfsetup/tests/data/shellmound/shps/waterbodies.shp'
375      id_column: 'COMID'
376      include_ids: [17953939]
377      # option to include feature names from the shapefile
378      # as Modflow boundnames
379      boundname_column: 'GNIS_NAME'
380    stage:
381      filename: 'shellmound/rasters/meras_100m_dem.tif'
382      elevation_units: 'feet'
383      # zonal statistic to use in sampling elevations in above GeoTIFF to grid
384      stat: 'min'
385    cond: 1.e+3
386  mfsetup_options:
387    default_rbot_thickness: 1.
388
389# Well Package
390wel:
391  options:
392    print_input: True
393    print_flows: True
394    save_flows: True
395  source_data:
396    csvfiles:
397      # pumping input from CSV files
398      filenames: ['shellmound/tables/1998-2007_avg_pumping_from_meras21_m3.csv',
399                  'shellmound/tables/iwum_m3_6M.csv',
400                  'shellmound/tables/sp69_pumping_from_meras21_m3.csv']
401      # 'x' and 'y' are the default names for x and y location columns
402      volume_units: 'meters'
403      time_units: 'days'
404      data_column: 'flux_m3'
405      datetime_column: 'start_datetime'
406      # end datetimes only for input data that needs upsampling;
407      # see https://aleaf.github.io/modflow-setup/api/mfsetup.tdis.html#mfsetup.tdis.aggregate_dataframe_to_stress_period
408      end_datetime_column: 'end_datetime'
409      id_column: 'node'
410      period_stats:  # how fluxes will be distributed across model stress periods
411        0: none  # no wells simulated in initial period
412        1: 'mean'  # mean pumping rate for period 1 and subsequent periods
413      vertical_flux_distribution:
414        across_layers: False  # False to put fluxes in one layer
415        # put wells in layer with thickest or most transmissive intersection with well open interval
416        distribute_by: 'transmissivity'  # thickness or transmissivity
417        minimum_layer_thickness: 10.  # layers must be at 10 length units thick to have a well;
418        # (any dropped wells would be recorded in shellmound_dropped_wells.csv)
419
420# Output Control Package
421oc:
422  head_fileout_fmt: '{}.hds'
423  budget_fileout_fmt: '{}.cbc'
424  # dictionary input similar to flopy
425  saverecord: {0: {head: 'last',
426                   budget: 'last'}
427  }
428  # MODFLOW 6-style text input can also be used
429  # e.g.
430  # period_options: {0: ['save head last',
431  #              'save budget last' ]
432
433obs:
434  source_data:
435    filenames: ['shellmound/tables/preprocessed_head_obs_info.csv'
436    ]
437    column_mappings:
438      obsname: ['obsprefix']
439
440
441ims:
442  options:
443    print_option: 'all'
444    complexity: 'moderate'
445    'csv_output fileout': 'solver_out.csv'
446  nonlinear:
447    outer_dvclose: 1.e-1
448    outer_maximum: 200
449    under_relaxation:  'dbd'
450    under_relaxation_theta: 0.7
451    under_relaxation_kappa: 0.1
452    under_relaxation_gamma: 0.0
453    under_relaxation_momentum: 0.0
454    backtracking_number: 0
455  linear:
456    inner_maximum: 100
457    inner_dvclose: 1.e-2
458    rcloserecord: [0.0001, 'relative_rclose']
459    linear_acceleration: 'bicgstab'
460    scaling_method: None
461    reordering_method: None
462    relaxation_factor: 0.0  # either ILU(0) or ILUT preconditioning
463    number_orthogonalizations: 0
464    preconditioner_levels: 7
465    preconditioner_drop_tolerance: 0.001

Shellmound TMR inset test case

  • 13 layer MODFLOW-6 Telescopic Mesh Refinement (TMR) model with a MODFLOW-6 parent model

  • 1:1 layer mapping between parent and TMR inset (default)

  • parent model grid defined with a SpatialReference subblock (which overrides information in MODFLOW Namefile)

  • DIS package top and bottom elevations copied from parent model

  • IC, NPF, STO, RCH, and WEL packages copied from parent model (default if not specified in config file)

  • default OC configuration

  • variable time discretization

  • model grid aligned with the National Hydrologic Grid

  • SFR network created from custom hydrography

  1simulation:
  2  sim_name: 'sm_tmr'
  3  version: 'mf6'
  4  sim_ws: '../tmp/shellmound_tmr_inset'
  5
  6model:
  7  simulation: 'sm_tmr'
  8  modelname: 'sm_tmr'
  9  options:
 10    print_input: True
 11    save_flows: True
 12    newton: True
 13  packages: ['dis',
 14             'ic',
 15             'npf',
 16             'oc',
 17             'sto',
 18             'rch',
 19             'sfr',
 20             'wel',
 21  ]
 22  external_path: 'external/'
 23  relative_external_filepaths: True
 24
 25parent:
 26  # argments to flopy.modflow.Modflow.load for parent model
 27  namefile: 'shellmound.nam'
 28  model_ws: 'shellmound/tmr_parent'
 29  version: 'mf6'
 30  default_source_data: True  # if True, packages and variables that are omitted will be pulled from this model
 31  copy_stress_periods: 'all'
 32  start_date_time: '1998-04-01'
 33  # inset_layer_mapping assumed to be 1:1 if not entered
 34  length_units: 'meters'
 35  time_units: 'days'
 36  # parent model lower left corner location and CRS
 37  # (overrides any information in name file)
 38  SpatialReference:
 39    xoff: 500955
 40    yoff: 1175285
 41    epsg: 5070
 42
 43setup_grid:
 44  xoff: 501405 # lower left x-coordinate
 45  yoff: 1175835 # lower left y-coordinate
 46  rotation: 0.
 47  epsg: 5070
 48  snap_to_NHG: True
 49
 50dis:
 51  remake_top: True
 52  options:
 53    length_units: 'meters'
 54  dimensions:
 55    nlay: 13
 56    nrow: 30
 57    ncol: 35
 58  griddata:
 59    delr: 1000.
 60    delc: 1000.
 61  source_data:
 62    top: from_parent
 63    botm: from_parent
 64    idomain:
 65      filename: 'shellmound/tmr_parent/gis/irregular_boundary.shp'
 66  minimum_layer_thickness: 1 # layers less than this thickness are converted to vertical pass-through cells
 67  drop_thin_cells: True
 68
 69tdis:
 70  options:
 71    time_units: 'days'
 72    start_date_time: '1998-04-01'
 73  perioddata:
 74    csvfile:
 75      filename: 'shellmound/tmr_parent/tables/stress_period_data.csv'
 76      start_datetime_column: 'start_datetime'
 77      end_datetime_column: 'end_datetime'
 78      steady_column: 'steady'
 79      nstp_column: 'nstp'
 80      tsmult_column: 'tsmult'
 81
 82sfr:
 83  options:
 84    save_flows: True
 85  source_data:
 86    flowlines:
 87      filename: 'shellmound/shps/flowlines.shp'
 88      id_column: 'COMID'  # arguments to sfrmaker.Lines.from_shapefile
 89      routing_column: 'tocomid'
 90      width1_column: 'width1'
 91      width2_column: 'width2'
 92      up_elevation_column: 'elevupsmo'
 93      dn_elevation_column: 'elevdnsmo'
 94      name_column: 'GNIS_NAME'
 95      width_units: 'feet'  # units of source data
 96      elevation_units: 'feet'  # units of source data
 97  sfrmaker_options:
 98    # convert reaches corresponding to these LineString identifiers
 99    # (in the flowlines id_column), and all downstream reaches
100    # to the MODFLOW River package
101    to_riv: [18047212]
102
103wel:
104  perimeter_boundary:
105    shapefile: 'shellmound/tmr_parent/gis/irregular_boundary.shp'
106    parent_cell_budget_file: 'shellmound/tmr_parent/shellmound.cbc'  # needed for the perimeter boundary setup
107    parent_binary_grid_file: 'shellmound/tmr_parent/shellmound.dis.grb'
108    # parent model head solution
109    # for determining boundary fluxes based on saturated thickness
110    parent_head_file: 'shellmound/tmr_parent/shellmound.hds'

Pleasant Lake test case

  • MODFLOW-6 model with local grid refinement (LGR)

  • LGR parent model is itself a Telescopic Mesh Refinment (TMR) inset from a MODFLOW-NWT model

  • Layer 1 in TMR parent model is subdivided evenly into two layers in LGR model (botm: from_parent: 0: -0.5). Other layers mapped explicitly between TMR parent and LGR model.

  • starting heads from LGR parent model resampled from binary output from the TMR parent

  • rch, npf, sto, and wel input copied from parent model

  • SFR package constructed from an NHDPlus v2 dataset (path to NHDPlus files in the same structure as the downloads from the NHDPlus website)

  • head observations from csv files with different column names

  • LGR inset extent based on a buffer distance around a feature of interest

  • LGR inset dis, ic, npf, sto and rch packages copied from LGR parent

  • WEL package created from custom format

  • Lake package created from polygon features, bathymetry raster, stage-area-volume file and climate data from PRISM.

  • Lake package observations set up automatically (output file for each lake)

LGR parent model configuration

  1# starting version number for the project (optional)
  2# version reported by modflow-setup will then be
  3# the start_version appended by the remaining information
  4# in a pep440-post style version tag
  5# (e.g. most recent git commit hash for the model repository
  6# + "dirty" if the model repository has uncommited changes)
  7# see https://github.com/warner/python-versioneer/blob/master/details.md
  8metadata:
  9  start_version: 0.1
 10  longname: 'Pleasant Lake test case'
 11
 12# input for MODFLOW 6 simulation
 13simulation:
 14  sim_name: 'pleasant_lgr'
 15  version: 'mf6'
 16  sim_ws: 'pleasant_lgr/'
 17
 18# input for MODFLOW 6 model
 19model:
 20  simulation: 'pleasant_lgr'
 21  modelname: 'plsnt_lgr_parent'
 22  options:
 23    print_input: True
 24    save_flows: True
 25    newton: True
 26    newton_under_relaxation: True
 27  # packages to build
 28  # (any packages not listed or commented out will not be built,
 29  #  event if they have an input block below)
 30  packages: ['dis',
 31             'ic',
 32             'npf',
 33             'oc',
 34             'sto',
 35             'rch', # Note: with no recharge block below and default_source_data=True, recharge is regridded from parent model
 36             'sfr',
 37             'lak',
 38             'obs',
 39             'wel',
 40             'ims',
 41             'chd'
 42  ]
 43
 44# Regional model to extract boundary conditions,
 45# property arrays, and pumping data from
 46parent:
 47  # argments to flopy.modflow.Modflow.load for parent model
 48  namefile: 'pleasant.nam'
 49  model_ws: 'data/pleasant/'
 50  version: 'mfnwt'
 51  # information for modflow-setup
 52  # note: parent model is geo-located in namfile header
 53  # (only works if length_units='meters')
 54  #hiKlakes_value: 1.e4 # unfortunately python yaml currently requires a dot to parse exp notation as float
 55  default_source_data: True  # if True, packages and variables that are omitted will be pulled from this model
 56  copy_stress_periods: 'all'
 57  inset_layer_mapping:  # mapping between inset and parent model layers
 58    0: 0  # inset: parent  (inset layers 1 and 0 copied from parent layer 0)
 59    1: 0
 60    2: 1
 61    3: 2
 62    4: 3
 63  start_date_time: '2012-01-01'
 64  length_units: 'meters'
 65  time_units: 'days'
 66
 67# parameters for setting up the horizontal configuration of the grid
 68# in the context of a coordinate reference system
 69setup_grid:
 70  #remake: True
 71  xoff: 553400 # lower left x-coordinate
 72  yoff: 387800 # lower left y-coordinate
 73  rotation: 0.
 74  dxy: 200  # in CRS units of meters
 75  epsg: 3070  # CRS (Wisconsin Transverse Mercator)
 76  # local-grid refinement area
 77  # specified in another configuration file
 78  # is set up in tandem and connected in the same MODFLOW 6 simulation
 79  lgr:
 80    pleasant_lgr_inset:
 81      filename: 'pleasant_lgr_inset.yml'
 82      # number of inset layers for each parent layer
 83      # this can be an integer (vertically uniform refinement)
 84      # a list (with an entry for each parent layer)
 85      # or a dictionary (with entries for each parent layer that is refined;
 86      # unlisted layers will default to zero)
 87      layer_refinement: [1, 1, 1, 1, 1]  # number of lgr model layers per parent model layer
 88
 89# Structured Discretization Package
 90dis:
 91  options:
 92    length_units: 'meters'
 93  dimensions:
 94    # if nrow and ncol are not specified here, the entries above in setup_grid are used
 95    nlay: 5
 96    nrow: 25
 97    ncol: 25
 98  # griddata:
 99  # delr and delc are developed from information above in setup_grid
100  # top and botm arrays are sampled from GeoTIFF files
101  # idomain is developed from layer pinch-outs and boundary condition locations
102  source_data:
103    top:
104      filename: 'data/pleasant/source_data/rasters/dem40m.tif' # DEM file; path relative to setup script
105      elevation_units: 'meters'
106    botm:
107      filenames:
108        1: 'data/pleasant/source_data/rasters/botm0.tif'  # preprocessed surface for parent model layer 0 bottom
109        2: 'data/pleasant/source_data/rasters/botm1.tif'  # preprocessed surface for parent model layer 1 bottom
110        3: 'data/pleasant/source_data/rasters/botm2.tif'  # preprocessed surface for parent model layer 2 bottom
111        4: 'data/pleasant/source_data/rasters/botm3.tif'  # preprocessed surface for parent model layer 3 bottom
112
113# Temporal Discretization Package
114tdis:
115  options:
116    time_units: 'days'
117    start_date_time: '2012-01-01'
118  perioddata:
119    # time discretization info can be specified directly under the perioddata key
120    # or in groups of stress periods that are discretized in a similar way
121    group 1: # initial steady-state period (steady specified under sto package)
122      #perlen: 1 # Specify perlen as an int or list of lengths in model units, or perlen=None and 3 of start_date, end_date, nper and/or freq."
123      nper: 1
124      nstp: 1
125      tsmult: 1
126      steady: True  # "steady" can be entered here; otherwise the global entry specified in the sto package is used as the default
127      # oc_saverecord: can also be specified by group here; otherwise the global entry specified in the oc package is used as the default
128    group 2: # monthly stress periods
129      start_date_time: '2012-01-01'  # can be specified by group, otherwise start_date_time for the model (under tdis: options) will be used.
130      end_date_time: '2013-01-01'  # model ends at midnight on this date (2007-03-31 would be the last day simulated)
131      freq: '1MS' # same as argument to pandas.date_range; (see "Offset Aliases" at https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases)
132      nstp: 1
133      tsmult: 1.5
134      steady: False
135
136# Initial Conditions Package
137ic:
138  # override default_source_data: True setting
139  # (to set starting heads from the parent model starting heads)
140  # set starting heads to the model top
141  source_data:
142    strt: from_model_top
143
144# Node Property Flow Package
145npf:
146  options:
147    save_flows: True
148  griddata:
149    icelltype: 1 # variable sat. thickness in all layers
150  # with parent: default_source_data: True,
151  # unspecified variables such as "k" and "k33" are resampled from parent model
152
153# Storage Package
154sto:
155  options:
156    save_flows: True
157  griddata:
158    iconvert: 1  # convertible layers
159  # with parent: default_source_data: True,
160  # unspecified variables such as "sy" and "ss" are resampled from parent model
161
162      # Well Package
163wel:
164  options:
165    print_input: True
166    print_flows: True
167    save_flows: True
168  # with parent: default_source_data: True,
169  # unspecified well fluxes are resampled from parent model
170
171# Streamflow Routing Package
172# SFR input is created using SFRmaker
173# https://github.com/usgs/sfrmaker
174sfr:
175  options:
176    save_flows: True
177  source_data:
178    flowlines:
179      # path to NHDPlus version 2 dataset
180      nhdplus_paths: ['data/pleasant/source_data/shps']
181    # if a DEM is included, streambed top elevations will be sampled
182    # from the minimum DEM values within a 100 meter buffer around each stream reach
183    dem:
184      filename: 'data/pleasant/source_data/rasters/dem40m.tif'
185      elevation_units: 'meters'
186    # SFR observations can be automatically setup from a CSV file
187    # of x, y locations and fluxes
188    observations:  # see sfrmaker.observations.add_observations for arguments
189      filename: 'data/pleasant/source_data/tables/gages.csv'
190      obstype: 'downstream-flow'  # modflow-6 observation type
191      x_location_column: 'x'
192      y_location_column: 'y'
193      obsname_column: 'site_no'
194  sfrmaker_options:
195    # the sfrmaker_options: block can include arguments to the Lines.to_sfr method in SFRmaker
196    # (see https://doi-usgs.github.io/sfrmaker/api/sfrmaker.lines.html#sfrmaker.lines.Lines.to_sfr)
197    # or other options such as set_streambed_top_elevations_from_dem (see pleasant examples)
198    # or to_riv (shellmound_tmr example)
199    set_streambed_top_elevations_from_dem: True
200
201# Iterative model solution
202ims:
203  options:
204    complexity: 'moderate'
205  nonlinear:
206    outer_dvclose: 1.e-2
207    outer_maximum: 200
208  linear:
209    inner_maximum: 100
210    inner_dvclose: 1.e-4
211    rcloserecord: [0.0001, 'relative_rclose']
212
213# Observation (OBS) Utility
214obs:
215  source_data:
216    # Head observations are supplied via csv files with x, y locations and observation names
217    # an observation is generated in each model layer;
218    # observations at each location can subsequently be processed
219    # to represent a given screened interval
220    # for example, using modflow-obs (https://github.com/aleaf/modflow-obs)
221    filenames: ['data/pleasant/source_data/tables/nwis_heads_info_file.csv',
222                'data/pleasant/source_data/tables/lake_sites.csv',  # some lakes are high-k; obs need to be in hydmod
223                'data/pleasant/source_data/tables/wdnr_gw_sites.csv',
224                'data/pleasant/source_data/tables/uwsp_heads.csv',
225                'data/pleasant/source_data/tables/wgnhs_head_targets.csv'
226                     ]
227    column_mappings:
228      obsname: ['obsprefix', 'obsnme', 'common_name']
229  mfsetup_options:
230    drop_observations: ['10019209_lk'  # pleasant lake; monitored via Lake Package observations
231    ]
232
233chd:
234  perimeter_boundary:
235    parent_head_file: 'data/pleasant/pleasant.hds'  # needed for the perimeter boundary setup

pleasant_lgr_inset.yml

  1simulation:
  2  sim_name: 'pleasant_lgr'
  3  version: 'mf6'
  4  sim_ws: 'pleasant_lgr/'
  5
  6model:
  7  simulation: 'pleasant_lgr'
  8  modelname: 'plsnt_lgr_inset'
  9  options:
 10    print_input: True
 11    save_flows: True
 12    newton: True
 13    newton_under_relaxation: True
 14  external_path: 'external/'
 15  packages: ['dis',
 16             'ic',
 17             'npf',
 18             'oc',
 19             'sto',
 20             'rch',
 21             'sfr',
 22             'lak',
 23             'obs',
 24             'wel',
 25             'ims'
 26  ]
 27
 28# parent model block is not needed as the pleasant_lgr_inset
 29# model is set up as an LGR in the context of the pleast_lgr_parent model
 30
 31# grid for LGR inset based on buffer distance around Pleasant Lake
 32setup_grid:
 33  source_data:
 34    features_shapefile:
 35      filename: 'data/pleasant/source_data/shps/all_lakes.shp'
 36      id_column: 'HYDROID'
 37      include_ids: [600059060] # pleasant lake
 38  dxy: 40  # grid spacing, in CRS units (meters)
 39  buffer: 1000 # distance from feature(s) of interest to model boundary, in meters
 40  epsg: 3070  # CRS (Wisconsin Transverse Mercator)
 41
 42dis:
 43  options:
 44    length_units: 'meters'
 45  dimensions:
 46    # nrow and ncol are based on the buffer distance and grid spacing
 47    nlay: 5
 48  source_data:
 49    top:
 50      filename: 'data/pleasant/source_data/rasters/dem40m.tif' # DEM file; path relative to setup script
 51      elevation_units: 'meters'
 52    botm:
 53      filenames:
 54        1: 'data/pleasant/source_data/rasters/botm0.tif'  # preprocessed surface for parent model layer 0 bottom
 55        2: 'data/pleasant/source_data/rasters/botm1.tif'  # preprocessed surface for parent model layer 1 bottom
 56        3: 'data/pleasant/source_data/rasters/botm2.tif'  # preprocessed surface for parent model layer 2 bottom
 57
 58# Recharge and Well packages are inherited from the parent model
 59# (since this is an LGR model
 60#  and the packages are specified in the packages: list)
 61
 62# Lake Package
 63lak:
 64  options:
 65    boundnames: True
 66    save_flows: True
 67    surfdep: 0.1  # undulations in lake bottom that affect GW discharge. Range in online instructions is 0.01-0.5. (Value from Trout Lake)
 68  source_data:
 69    # initial lakebed leakance rates
 70    # for thin zone around lake perimeter
 71    littoral_leakance: 0.045 # 1/d
 72    # for interior of lake basin
 73    profundal_leakance: 0.025 # 1/d
 74    # polygon shapefile of lake footprints
 75    littoral_zone_buffer_width: 40
 76    lakes_shapefile:
 77      filename: 'data/pleasant/source_data/shps/all_lakes.shp'
 78      id_column: 'HYDROID'
 79      include_ids: [600059060] # pleasant lake
 80    # setup lake precipitation and evaporation from PRISM data
 81    climate:
 82      filenames:
 83        600059060: 'data/pleasant/source_data/PRISM_ppt_tmean_stable_4km_189501_201901_43.9850_-89.5522.csv'
 84      format: 'prism'
 85      period_stats:
 86        # for period 0, use average precip and evap for dates below
 87        0: ['mean', '2012-01-01', '2018-12-31']  # average daily rate for model period for initial steady state
 88        # for subsequent periods,
 89        # average precip and evap to period start/end dates
 90        1: 'mean'  # average daily rate or value for each month
 91    # bathymetry file with lake depths to subtract off model top
 92    bathymetry_raster:
 93      filename: 'data/pleasant/source_data/rasters/pleasant_bathymetry.tif'
 94      length_units: 'meters'
 95    # bathymetry file with stage/area/volume relationship
 96    stage_area_volume_file:
 97      filename: 'data/pleasant/source_data/tables/area_stage_vol_Pleasant.csv'
 98      length_units: 'meters'
 99      id_column: 'hydroid'
100      column_mappings:
101        volume_m3: 'volume'
102  external_files: False  # option to write connectiondata table to external file
103
104sfr:
105  options:
106    save_flows: True
107  source_data:
108    flowlines:
109      nhdplus_paths: ['data/pleasant/source_data/shps']
110    dem:
111      filename: 'data/pleasant/source_data/rasters/dem40m.tif'
112      elevation_units: 'meters'
113  sfrmaker_options:
114    set_streambed_top_elevations_from_dem: True
115
116obs:
117  # same observation data that were applied to pleasant_lgr_parent model
118  # any observations not within the LGR extent are culled
119  source_data:
120    filenames: [
121      #'data/pleasant/source_data/tables/nwis_heads_info_file.csv',
122                'data/pleasant/source_data/tables/lake_sites.csv',  # some lakes are high-k; obs need to be in hydmod
123                'data/pleasant/source_data/tables/wdnr_gw_sites.csv',
124                #'data/pleasant/source_data/tables/uwsp_heads.csv',
125                #'data/pleasant/source_data/tables/wgnhs_head_targets.csv'
126                     ]
127    column_mappings:
128      obsname: ['obsprefix', 'common_name']
129  mfsetup_options:
130    drop_observations: ['10019209_lk'  # pleasant lake; monitored via gage package
131    ]

Pleasant Lake MODFLOW-NWT test case

  • MODFLOW-NWT TMR inset from a MODFLOW-NWT model

  • Layer 1 in parent model is subdivided evenly into two layers in the inset model (botm: from_parent: 0: -0.5). Other layers mapped explicitly between TMR parent and LGR model.

  • starting heads resampled from binary output from the TMR parent

  • RCH, UPW and WEL input copied from parent model

  • SFR package constructed from an NHDPlus v2 dataset (path to NHDPlus files in the same structure as the downloads from the NHDPlus website)

  • HYDMOD package for head observations from csv files with different column names

  • WEL package created from custom format

  • Lake package created from polygon features, bathymetry raster, stage-area-volume file and climate data from PRISM.

  • Lake package observations set up automatically (output file for each lake)

  • GHB package created from polygon feature and DEM raster

  1# argments to flopy.modflow.Modflow.__init__ or load for pfl_nwt
  2model:
  3  modelname: 'pleasant'
  4  model_ws: '../tmp/pleasant_nwt/'
  5  external_path: 'external/'
  6  packages: ['dis',
  7             'bas6',
  8             'oc',
  9             'upw',
 10             'rch', # Note: with no recharge block below and default_source_data=True, recharge is regridded from parent model
 11             'sfr',
 12             'lak',
 13             'wel',
 14             'hyd',
 15             'gag',
 16             'nwt',
 17             'chd',
 18  ]
 19
 20parent:
 21  # argments to flopy.modflow.Modflow.load for parent model
 22  namefile: 'pleasant.nam'
 23  model_ws: '../../../examples/data/pleasant/'
 24  version: 'mfnwt'
 25  # option to only load the parent packages that are needed
 26  load_only: ['dis', 'bas6', 'upw', 'rch']
 27  # information for modflow-setup
 28  # note: parent model is geo-located in namfile header
 29  # (only works if length_units='meters')
 30  hiKlakes_value: 1.e4 # unfortunately python yaml currently requires a dot to parse exp notation as float
 31  default_source_data: True  # if True, packages and variables that are omitted will be pulled from this model
 32  copy_stress_periods: 'all'
 33  start_date_time: '2012-01-01'
 34  length_units: 'meters'
 35  time_units: 'days'
 36
 37# parameters for setting up the pfl_nwt grid
 38# using features in features_file
 39setup_grid:
 40  remake: True
 41  source_data:
 42    features_shapefile:
 43      filename: '../../../examples/data/pleasant/source_data/shps/all_lakes.shp'
 44      id_column: 'HYDROID'
 45      include_ids: [600059060] # pleasant lake
 46  dxy: 40  # in CRS units of meters
 47  buffer: 1000 # distance from feature(s) if interest to model boundary, in meters
 48  grid_file: 'grid.json' # grid info will be written to this file
 49  epsg: 3070
 50
 51# Inset model settings and
 52# arguments to flopy.modflow.ModflowDis
 53dis:
 54  remake_top: True
 55  nlay: 5
 56  nstp: 1
 57  length_units: 'meters'  # alternatively, specify lenuni: 2
 58  start_date_time: '2012-01-01'
 59  time_units: 'days'  # alternatively, specify itmuni: 4
 60  source_data:
 61    top: from_parent
 62    botm:
 63      from_parent:
 64        0: -0.5 # bottom of layer zero in pfl_nwt is positioned at half the thickness of parent layer 1
 65        1: 0 # bottom of layer 1 in pfl_nwt corresponds to bottom of layer 0 in parent
 66        2: 1
 67        3: 2
 68        4: 3
 69
 70bas6:
 71  source_data:
 72    strt:
 73      from_parent:
 74        binaryfile: '../../../examples/data/pleasant/pleasant.hds'
 75        stress_period: 0
 76
 77upw:
 78  ipakcb: 53 # unit for writing cell budget output
 79  hdry: -9999
 80
 81wel:
 82  options: ['SPECIFY', '0.01']
 83  source_data:
 84    wdnr_dataset:
 85      water_use: '../../../examples/data/pleasant/source_data/tables/master_wu.csv' # monthly water use rates from WDNR
 86      water_use_points: '../../../examples/data/pleasant/source_data/shps/csls_sources_wu_pts.shp' # point locations of wells in water_use
 87      period_stats: {0: ['mean', '2012-01-01', '2012-12-31'],
 88                     1: 'resample'}
 89
 90ghb:
 91  options: ['SPECIFY', '0.01']
 92  source_data:
 93    shapefile:
 94      filename: '../../../examples/data/pleasant/source_data/shps/all_lakes.shp'
 95      id_column: 'HYDROID'
 96      include_ids: [600059161] # pond near pleasant lake
 97    bhead:
 98      filename: '../../../examples/data/pleasant/source_data/rasters/dem40m.tif'
 99      elevation_units: 'meters'
100    cond: 9  # m2/d
101
102lak:
103  theta: -0.7  # semi-implicit; negative value indicates that surfdep is read
104  nssitr: 800  # number of Newton iterations for solution of lake stage, for each MODFLOW iteration.
105  sscncr: 0.0000001  # lake stage convergence criterion
106  surfdep: 0.1  # undulations in lake bottom that affect GW discharge. Range in online instructions is 0.01-0.5. (Value from Trout Lake)
107  source_data:
108    littoral_leakance: 0.045 # 1/d
109    profundal_leakance: 0.025 # 1/d
110    lakes_shapefile:
111      filename: '../../../examples/data/pleasant/source_data/shps/all_lakes.shp'
112      id_column: 'HYDROID'
113      include_ids: [600059060] # pleasant lake
114    climate:
115      filenames:
116        600059060: '../../../examples/data/pleasant/source_data/PRISM_ppt_tmean_stable_4km_189501_201901_43.9850_-89.5522.csv'
117      format: 'prism'
118      period_stats:
119        0: ['mean', '2012-01-01', '2012-12-31']  # average daily rate for model period for initial steady state
120        1: 'mean'  # average daily rate or value for each month
121    bathymetry_raster:
122      filename: '../../../examples/data/pleasant/source_data/rasters/pleasant_bathymetry.tif'
123      length_units: 'meters'
124    stage_area_volume_file:
125      filename: '../../../examples/data/pleasant/source_data/tables/area_stage_vol_Pleasant.csv'
126      length_units: 'meters'
127      id_column: 'hydroid'
128      column_mappings:
129        volume_m3: 'volume'
130  output_files:
131    lookup_file: 'lak_lookup.csv'
132
133sfr:
134  source_data:
135    flowlines:
136      nhdplus_paths: ['../../../examples/data/pleasant/source_data/shps']
137    observations:  # see sfrmaker.observations.add_observations for arguments
138      filename: '../../../examples/data/pleasant/source_data/tables/gages.csv'
139      obstype: 'downstream-flow'  # modflow-6 observation type
140      x_location_column: 'x'
141      y_location_column: 'y'
142      obsname_column: 'site_no'
143  sfrmaker_options:
144    set_streambed_top_elevations_from_dem:
145      filename: '../../../examples/data/pleasant/source_data/rasters/dem40m.tif'
146      elevation_units: 'meters'
147      buffer_distance: 50
148
149nwt:
150  #use_existing_file: 'RGN_rjh_3_23_18.NWT'
151  headtol: 1.e-2 # read remaining parameters from default cfg
152  hclosexmd: 1.e-4
153
154hyd:
155  source_data:
156    filenames: ['../../../examples/data/pleasant/source_data/tables/nwis_heads_info_file.csv',
157                '../../../examples/data/pleasant/source_data/tables/lake_sites.csv',  # some lakes are high-k; obs need to be in hydmod
158                '../../../examples/data/pleasant/source_data/tables/wdnr_gw_sites.csv',
159                '../../../examples/data/pleasant/source_data/tables/uwsp_heads.csv',
160                '../../../examples/data/pleasant/source_data/tables/wgnhs_head_targets.csv'
161                     ]
162    column_mappings:
163      hydlbl: ['obsprefix', 'obsnme', 'common_name']
164  mfsetup_options:
165    drop_observations: ['10019209_lk'  # pleasant lake; monitored via gage package
166    ]
167
168chd:
169  perimeter_boundary:
170    parent_head_file: '../../../examples/data/pleasant/pleasant.hds'

Plainfield Lakes MODFLOW-NWT test case

  • MODFLOW-NWT TMR inset from a MODFLOW-NWT model

  • Layer 1 in parent model is subdivided evenly into two layers in the inset model (botm: from_parent: 0: -0.5). Other layers mapped explicitly between TMR parent and LGR model.

  • starting heads resampled from binary output from the TMR parent

  • Temporally constant recharge specified from raster file, with multiplier

  • WEL package created from custom format

  • MNW2 package with dictionary input

  • UPW input copied from parent model

  • HYDMOD package for head observations from csv files with different column names

  • WEL package created from custom format and dictionary input

  • WEL package configured to use average for a specified period (period 0) and specified month (period 1 on)

  • Lake package created from polygon features, bathymetry raster, stage-area-volume file

  • Lake package precipitation and evaporation specified directly

  • Lake package observations set up automatically (output file for each lake)

  1model:
  2  modelname: 'pfl'
  3  model_ws: '../tmp/pfl_inset/'
  4  exe_name: 'mfnwt'
  5  external_path: 'external/'
  6  # list file path is relative to model_ws
  7  list_filename_fmt: 'external/{}.list'
  8  packages: ['dis',
  9             'bas6',
 10             'oc',
 11             'upw',
 12             'rch',
 13             'lak',
 14             'wel',
 15             'mnw2',
 16             'hyd',
 17             'gag',
 18             'nwt',
 19             'chd'
 20  ]
 21
 22parent:
 23  namefile: 'pfl.nam'
 24  model_ws: 'plainfieldlakes/'
 25  version: 'mfnwt'
 26  hiKlakes_value: 1.e4
 27  copy_stress_periods: 'all'
 28
 29# parameters for setting up the pfl_nwt grid
 30# using features in features_file
 31setup_grid:
 32  remake: True
 33  dxy: 20 #  in CRS units of meters
 34  buffer: 350 # distance from feature(s) if interest to model boundary, in meters
 35  epsg: 3070
 36  source_data:
 37    features_shapefile:
 38      filename: 'plainfieldlakes/source_data/all_lakes.shp'
 39      id_column: 'HYDROID'
 40      include_ids: [600054357, 600054319] # plainfield lake; long lake
 41
 42# Inset model settings and
 43# arguments to flopy.modflow.ModflowDis
 44dis:
 45  nper: 2
 46  nlay: 5
 47  perlen: [1, 10]
 48  nstp: [1, 25]
 49  tsmult: [1, 1.5]
 50  steady: [True, False]
 51  length_units: 'meters'  # alternatively, specify lenuni: 2
 52  time_units: 'days'  # alternatively, specify itmuni: 4
 53  start_date_time: '2011-01-01'
 54  source_data:
 55    top:
 56      filename: 'plainfieldlakes/source_data/dem10m.tif'
 57      elevation_units: 'meters'
 58    botm:
 59      from_parent:
 60        0: -0.5 # bottom of layer zero in pfl_nwt is positioned at half the thickness of parent layer 1
 61        1: 0 # bottom of layer 1 in pfl_nwt corresponds to bottom of layer 0 in parent
 62        2: 1
 63        3: 2
 64        4: 3
 65
 66bas6:
 67    source_data:
 68      strt:
 69        from_parent:
 70          binaryfile: 'plainfieldlakes/pfl.hds'
 71          stress_period: 0
 72
 73upw:
 74  ipakcb: 53 # unit for writing cell budget output
 75  hdry: -9999
 76  source_data:
 77    hk:
 78      from_parent:
 79        0: 0 # layer zero in pfl_nwt has values of parent layer zero
 80        1: 0 # layer one in pfl_nwt has values of parent layer zero
 81        2: 1
 82        3: 2
 83        4: 3
 84    vka:
 85      from_parent:
 86        0: 0 # layer zero in pfl_nwt has values of parent layer zero
 87        1: 0 # layer one in pfl_nwt has values of parent layer zero
 88        2: 1
 89        3: 2
 90        4: 3
 91  sy: 0.1
 92  ss: 1.e-6
 93
 94
 95# in lieu of an infiltration in source_dara
 96# recharge can be entered directly as "rech"
 97# (scalar, external file, or list of those)
 98rch:
 99  source_data:
100    rech:
101      filenames: # by stress period
102        0: 'plainfieldlakes/source_data/net_infiltration__2012-01-01_to_2017-12-31__1066_by_1145__SUM__INCHES_PER_YEAR.tif'
103      mult: 0.805
104      length_units: 'inches'
105      time_units: 'years'
106
107wel:
108  options: ['SPECIFY', '0.01']
109  source_data:
110    wells: # name: per, x, y or i, j location; layer (k), q (flux); or csv file with these columns
111      well1: {per: 1, x: 563343.92, y: 414988.09, k: 0, q: -2000}
112    wdnr_dataset:
113      water_use: 'plainfieldlakes/source_data/master_wu.csv' # monthly water use rates from WDNR
114      water_use_points: 'plainfieldlakes/source_data/wu_points.shp' # point locations of wells in water_use
115      period_stats: {0: ['mean', '2012-01-01', '2018-12-31'], # statistic to apply to each stress period 'mean' to average all water use data; <monthname> to average values for a given month across the period (e.g. 'august')
116                     1: 'august', # use August pumping rates during test
117      }
118  output_files:
119    lookup_file: 'wel_lookup.csv' # mapping of wel package data to site numbers
120
121mnw:
122  added_wells:
123    well1: {per: 1, x: 563343.92, y: 414988.09,
124            depth: 10, # m
125            flux: -2000,  # pumping rate, in model units
126            rw: 0.1, # well radius, m
127            rskin: 0.1524, # radius to outer limit of skin
128            kskin: 50 # m/day
129    }
130
131# option to simulate lakes as zones of high hydraulic conductivity
132# (see Anderson and others (2002) in the references)
133high_k_lakes:
134  simulate_high_k_lakes: True
135  high_k_value: 1.e+4
136  sy: 1.0
137  ss: 5.e-10  # (approx. compressibility of water in Pa-1 or m2/N)
138  precipitation: [0.002276, # 32.7 in/yr; from LPR report average value
139                  0.003646 # average for August, 2012-2018 (4.45 in for the month)
140  ]
141  evaporation: [0.001649, # 23.7 in/yr; ballpark value from LPR report
142                0.00338, # 3.38 mm/day; average August rate for Sparkling Lake from Lenters and others (2005; table 2)
143  ]
144  source_data:
145    # shapefile defining the extents of the lakes to include
146    # Note: lakes that are also simulated with the Lake Package will be excluded
147    lakes_shapefile:
148      filename: 'plainfieldlakes/source_data/all_lakes.shp'
149
150lak:
151  theta: -0.7  # semi-implicit; negative value indicates that surfdep is read
152  nssitr: 800  # number of Newton iterations for solution of lake stage, for each MODFLOW iteration.
153  sscncr: 0.0000001  # lake stage convergence criterion
154  surfdep: 0.1  # undulations in lake bottom that affect GW discharge. Range in online instructions is 0.01-0.5. (Value from Trout Lake)
155  precipitation: [0.002276, # 32.7 in/yr; from LPR report average value
156           0.003646 # average for August, 2012-2018 (4.45 in for the month)
157           ]
158  evaporation: [0.001649, # 23.7 in/yr; ballpark value from LPR report
159         0.00338, # 3.38 mm/day; average August rate for Sparkling Lake from Lenters and others (2005; table 2)
160         ]
161  source_data:
162    littoral_leakance: 0.045 # 1/d
163    profundal_leakance: 0.025 # 1/d
164    littoral_zone_buffer_width: 20
165    lakes_shapefile:
166      filename: 'plainfieldlakes/source_data/all_lakes.shp'
167      id_column: 'HYDROID'
168      include_ids: [600054357, 600054355, 600054434, 600054319] # list of WDNR HYDROIDs
169      name_column: 'Name'
170    bathymetry_raster:
171      filename: 'plainfieldlakes/source_data/pfl_bathymetry.tif'
172      length_units: 'meters'
173    stage_area_volume_file:
174      filename: 'plainfieldlakes/source_data/all_lakes_stage_area_volume.csv' #'../../bcs/lakes/area_stage_vol_Long.csv'
175      length_units: 'meters'
176      id_column: 'hydroid'
177      column_mappings:
178        volume_m3: 'volume'
179  output_files:
180    lookup_file: 'lak_lookup.csv'
181
182nwt:
183  headtol: 1.e-6 # read remaining parameters from default cfg
184
185hyd:
186  source_data:
187    filenames: ['plainfieldlakes/source_data/nwis_heads_info_file.csv',
188                'plainfieldlakes/source_data/lake_sites.csv',
189                'plainfieldlakes/source_data/wdnr_gw_sites.csv',
190                'plainfieldlakes/source_data/uwsp_heads.csv'
191                ]
192    x_location_col: 'x_utm' # x coordinates in wtm
193    y_location_col: 'y_utm' # y coordinates in wtm
194
195chd:
196  perimeter_boundary:
197    parent_head_file: 'plainfieldlakes/pfl.hds'
Previous Next

© Copyright 2019-2024, Modflow-setup developers |. Last updated on Nov 14, 2024.

Built with Sphinx using a theme provided by Read the Docs.