AHGW:MODFLOW Data Model: Difference between revisions
(link) |
|||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{TOC_right}} | |||
The '''MODFLOW Data Model''' is an extension to the [[Arc Hydro Groundwater#Simulation|Simulation]] portion of the [[Arc Hydro Groundwater|Arc Hydro Groundwater (AHGW) data model]] and is used to store complete [http://en.wikipedia.org/wiki/MODFLOW MODFLOW] simulations in an [http://en.wikipedia.org/wiki/ArcGIS ArcGIS] [http://en.wikipedia.org/wiki/Geodatabase geodatabase]. The data model consists of a set of tables for archiving MODFLOW model data. Having the model in the database makes it possible to utilize the mapping and plotting capabilities of ArcGIS. It also facilitates the use of tools, such as those provided in [[AHGW:MODFLOW Analyst|MODFLOW Analyst]], for populating the MODFLOW package tables using data from the Arc Hydro groundwater and surface water data models. It also provides an archival tool for models facilitating permissions, check-in/check-out capabilities, and web services. | The '''MODFLOW Data Model''' is an extension to the [[Arc Hydro Groundwater#Simulation|Simulation]] portion of the [[Arc Hydro Groundwater|Arc Hydro Groundwater (AHGW) data model]] and is used to store complete [http://en.wikipedia.org/wiki/MODFLOW MODFLOW] simulations in an [http://en.wikipedia.org/wiki/ArcGIS ArcGIS] [http://en.wikipedia.org/wiki/Geodatabase geodatabase]. The data model consists of a set of tables for archiving MODFLOW model data. Having the model in the database makes it possible to utilize the mapping and plotting capabilities of ArcGIS. It also facilitates the use of tools, such as those provided in [[AHGW:MODFLOW Analyst|MODFLOW Analyst]], for populating the MODFLOW package tables using data from the Arc Hydro groundwater and surface water data models. It also provides an archival tool for models facilitating permissions, check-in/check-out capabilities, and web services. | ||
[[Image:AHGW MODFLOW_Data_Model_v3_0.png|thumb|none|500px|MODFLOW Data Model]] | |||
== Documentation == | == Documentation == | ||
In addition to this wiki, you should refer to the diagram of the MODFLOW Data Model. | In addition to this wiki, you should refer to the diagram of the MODFLOW Data Model. | ||
Line 420: | Line 420: | ||
== Groups == | == Groups == | ||
Tables that are related to each other are put together in a group and, in the [[: | Tables that are related to each other are put together in a group and, in the [[:File:AHGW MODFLOW Data Model v3 0.png|diagram]], are displayed together in a colored box. For example, three tables are used to represent the LPF package and these are grouped together in the data model. Groups typically are associated with MODFLOW packages but not necessarily. For example, the Output group does not correspond to any MODFLOW package. | ||
== Global Settings / Name File == | == Global Settings / Name File == | ||
Line 773: | Line 773: | ||
==Block-Centered Flow Package (BCF6)== | ==Block-Centered Flow Package (BCF6)== | ||
The data for the Block-Centered Flow Package are stored in a combination of variables and tables. The IBCFCB value is stored in the CBFlags table in the [[MODFLOW Data Model#Output control|Output control]] group. | The data for the Block-Centered Flow Package are stored in a combination of variables and tables. The IBCFCB value is stored in the CBFlags table in the [[AHGW:MODFLOW Data Model#Output control|Output control]] group. | ||
The BCFVars table stores various variables associated with the BCF package. | The BCFVars table stores various variables associated with the BCF package. | ||
Line 850: | Line 850: | ||
==Layer-Property Flow (LPF) Package== | ==Layer-Property Flow (LPF) Package== | ||
The LPF Package is handled similarly to the BCF package. The ILPFCB value is stored in the CBFlags table in the [[MODFLOW Data Model#Output control|Output control]] group. Variables associated with the LPF package are stored in the LPFVars table. Layer-based variables associated with the LPF package are stored in the LPFLayers table. The LPF aquifer property arrays are stored in the LPFProperties table. As is the case with the BCF package, the contents of the “arrays” depend on the layer types defined by the LAYTYP flag in the LPFLayers table. Some arrays are only required for certain layer types. The VKCB field is used to store the vertical conductivity for quasi-3d confining beds as defined by the LAYCBD table in the DIS section. The IJK field in records associated with VKCB values is the cell in the layer just above the confining bed. | The LPF Package is handled similarly to the BCF package. The ILPFCB value is stored in the CBFlags table in the [[AHGW:MODFLOW Data Model#Output control|Output control]] group. Variables associated with the LPF package are stored in the LPFVars table. Layer-based variables associated with the LPF package are stored in the LPFLayers table. The LPF aquifer property arrays are stored in the LPFProperties table. As is the case with the BCF package, the contents of the “arrays” depend on the layer types defined by the LAYTYP flag in the LPFLayers table. Some arrays are only required for certain layer types. The VKCB field is used to store the vertical conductivity for quasi-3d confining beds as defined by the LAYCBD table in the DIS section. The IJK field in records associated with VKCB values is the cell in the layer just above the confining bed. | ||
{| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | {| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | ||
Line 1,026: | Line 1,026: | ||
==List-Based Stress Packages== | ==List-Based Stress Packages== | ||
Most of the commonly-used stress packages in MODFLOW follow a simple strategy. The cells associated with a given type of stress are identified and an input entry is made for each instance in a list in the package input file. In some cases, multiple entries are made for a given cell (three wells in a single cell, for example). The River, Well, Drain, General Head Boundary, Constant-Head Boundary, and Horizontal Flow Barrier packages follow this format. Each of these packages are represented in the data model using a variable and a table. For each package, the cell-by-cell flow flag (IRIVCB, IWELCB, IDRNCB, etc.) are stored in the CBFlags table in the [[MODFLOW Data Model#Output control|Output control]] group. The remaining data associated with the package are stored in a series of tables, one per package. Each record in the tables corresponds to an instance of the given stress at a particular cell for a particular stress period. The SourceID field is used to associate records with the spatial features from which they were derived. The SourceID represents the HydroID of the point, polyline, or polygon in the Framework component of the Arc Hydro database that was used to construct the record in the table. This field is only used when the tables are constructed using a tool in Arc Hydro GW. For the case where pre-built MODFLOW files are imported from another database, the SourceID values should all be Null. | Most of the commonly-used stress packages in MODFLOW follow a simple strategy. The cells associated with a given type of stress are identified and an input entry is made for each instance in a list in the package input file. In some cases, multiple entries are made for a given cell (three wells in a single cell, for example). The River, Well, Drain, General Head Boundary, Constant-Head Boundary, and Horizontal Flow Barrier packages follow this format. Each of these packages are represented in the data model using a variable and a table. For each package, the cell-by-cell flow flag (IRIVCB, IWELCB, IDRNCB, etc.) are stored in the CBFlags table in the [[AHGW:MODFLOW Data Model#Output control|Output control]] group. The remaining data associated with the package are stored in a series of tables, one per package. Each record in the tables corresponds to an instance of the given stress at a particular cell for a particular stress period. The SourceID field is used to associate records with the spatial features from which they were derived. The SourceID represents the HydroID of the point, polyline, or polygon in the Framework component of the Arc Hydro database that was used to construct the record in the table. This field is only used when the tables are constructed using a tool in Arc Hydro GW. For the case where pre-built MODFLOW files are imported from another database, the SourceID values should all be Null. | ||
{| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | {| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | ||
Line 1,281: | Line 1,281: | ||
===Recharge Package (RCH)=== | ===Recharge Package (RCH)=== | ||
The cell-by-cell flow flag (IRCHCB) for the Recharge Package (IRCHCB) is stored in the CBFlags table in the [[MODFLOW Data Model#Output control|Output control]] group. The remaining data are stored in the three tables below. The RCHVars table holds the NRCHOP variable (associated with a coded value domain). This variable defines the recharge option. For NRCHOP=1 or 2, a single recharge value (RECH) is stored for each IJ combination. For NRCHOP=3, an additional array of integer values (IRCH) is required. The RECH and IRCH values are stored in the RCHArrays table. The IRCH field will likely be rarely used. The RCHArrayMult table is used to store array multipliers. | The cell-by-cell flow flag (IRCHCB) for the Recharge Package (IRCHCB) is stored in the CBFlags table in the [[AHGW:MODFLOW Data Model#Output control|Output control]] group. The remaining data are stored in the three tables below. The RCHVars table holds the NRCHOP variable (associated with a coded value domain). This variable defines the recharge option. For NRCHOP=1 or 2, a single recharge value (RECH) is stored for each IJ combination. For NRCHOP=3, an additional array of integer values (IRCH) is required. The RECH and IRCH values are stored in the RCHArrays table. The IRCH field will likely be rarely used. The RCHArrayMult table is used to store array multipliers. | ||
{| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | {| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | ||
Line 1,324: | Line 1,324: | ||
===Evapotranspiration Package (EVT)=== | ===Evapotranspiration Package (EVT)=== | ||
The Evapotranspiration package is similar to the Recharge Package. The cell-by-cell flow variable (IEVTCB) is stored in the CBFlags table in the [[MODFLOW Data Model#Output control|Output control]] group. The remaining data are stored in the three tables below. If NEVTOP=1, the IEVT field is ignored. If NEVTOP=2, the IEVT field is used. | The Evapotranspiration package is similar to the Recharge Package. The cell-by-cell flow variable (IEVTCB) is stored in the CBFlags table in the [[AHGW:MODFLOW Data Model#Output control|Output control]] group. The remaining data are stored in the three tables below. If NEVTOP=1, the IEVT field is ignored. If NEVTOP=2, the IEVT field is used. | ||
{| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | {| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | ||
Line 2,113: | Line 2,113: | ||
== Parameters == | == Parameters == | ||
Beginning with MODFLOW 2000, the MODFLOW input files allow for the definition of parameters. Parameter definitions can be complex and representing parameters in a GIS database is challenging. The following design is an attempt to allow complex parameter definitions, yet provide a simple option for the most routine cases. The tables are related in multiple ways but those relationships are not shown here. Refer to the [[:media:MODFLOW_Data_Model_2.png|diagram]]. | Beginning with MODFLOW 2000, the MODFLOW input files allow for the definition of parameters. Parameter definitions can be complex and representing parameters in a GIS database is challenging. The following design is an attempt to allow complex parameter definitions, yet provide a simple option for the most routine cases. The tables are related in multiple ways but those relationships are not shown here. <!--Refer to the [[:media:MODFLOW_Data_Model_2.png|diagram]].--> | ||
{| class="wikitable collapsible" style="width: 90%; font-size: 85%;" | {| class="wikitable collapsible" style="width: 90%; font-size: 85%;" |
Latest revision as of 20:08, 29 March 2022
The MODFLOW Data Model is an extension to the Simulation portion of the Arc Hydro Groundwater (AHGW) data model and is used to store complete MODFLOW simulations in an ArcGIS geodatabase. The data model consists of a set of tables for archiving MODFLOW model data. Having the model in the database makes it possible to utilize the mapping and plotting capabilities of ArcGIS. It also facilitates the use of tools, such as those provided in MODFLOW Analyst, for populating the MODFLOW package tables using data from the Arc Hydro groundwater and surface water data models. It also provides an archival tool for models facilitating permissions, check-in/check-out capabilities, and web services.
Documentation
In addition to this wiki, you should refer to the diagram of the MODFLOW Data Model.
The MODFLOW Data Model generally uses the same naming convention for variables defined by MODFLOW. The meanings of all these variables are only summarized here. Refer to the MODFLOW documentation for a full description.
Introduction
The AHGW data model includes a Simulation component that facilitates the storage of simulation models (grids, meshes, and associated data) in a geodatabase. The simulation component uses polygons, points, and multi-patches to represent 2D and 3D cells and nodes. The MODFLOW data model consists of a series of tables and relationships associated with the simulation component. The data model is based on MODFLOW 2000 and includes all of the standard MODFLOW packages. It will gradually be expanded to include supplemental packages.
For some of the MODFLOW packages, including the Global Package, the LPF package, and the Recharge package, the input data associated with the package is primarily one or more arrays of data representing cell-by-cell values. These arrays are represented in the data model using tables indexed by a cell ID. In the case of the stress packages, the package input data are typically not defined using an array corresponding to the entire grid. Rather, the data are associated with a subset of the grid cells. For example, the input to the well package is a list of well instances where each well lists the IJK indices of the corresponding cell and the pumping rate. For transient simulations, one set of values is listed for each stress period (simulation interval). The input to these packages is stored in tables which include the cell IDs, the stress period ID, and the attributes associated with the particular stress package (water level, conductance, etc.). In either case, the resulting tables can be joined with Cell2D, Cell3D, Node2D, and Node3D features to display the locations of the stress package objects in the model domain.
Cell and Node Features
The MODFLOW Data Model is an extension of the Arc Hydro Groundwater Simulation Feature Dataset. The MODFLOW data is stored primarily in a set of tables described below and the Cell and Node features of the Simulation Feature Dataset are used to generate map layers in ArcGIS in order to visualize MODFLOW models. The features are also used to perform spatial queries such as interpolating hydraulic conductivity values to the K array in the LPF package. When used with the MODFLOW Data Model, one additional field is added to each of the cell and node features in order to support joins based on MODFLOW cell ids. An IJ field is added to the Cell2D and Node2D features and an IJK field is added to the Cell3D and Node3D features. The resulting feature classes contain the following fields (in addition to the point and polygon fields):
Cell2D | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HydroID | Long Integer | Unique Arc Hydro identifier |
HydroCode | Long Integer | Application-specific Arc Hydro identifier |
IJ | Long Integer | Row/column-based MODFLOW cell identifier |
Node2D | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HydroID | Long Integer | Unique Arc Hydro identifier |
HydroCode | Long Integer | Application-specific Arc Hydro identifier |
IJ | Long Integer | Row/column-based MODFLOW cell identifier |
Cell3D | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HydroID | Long Integer | Unique Arc Hydro identifier |
HydroCode | Long Integer | Application-specific Arc Hydro identifier |
IJK | Long Integer | Row/column/layer-based MODFLOW cell identifier |
Node3D | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HydroID | Long Integer | Unique Arc Hydro identifier |
HydroCode | Long Integer | Application-specific Arc Hydro identifier |
IJK | Long Integer | Row/column/layer-based MODFLOW cell identifier |
CellIndex Table
In the MODFLOW input files, cells are identified by a combination of three integers representing the row, column, and layer indices of the cell (I, J, K). Since joins can only be accomplished using a single field, it is necessary to generate an integer field corresponding to a unique IJK combination. Furthermore, some MODFLOW input arrays are fundamentally 2D in nature (Evapotranspiration, Recharge, etc.) and require an integer identifier corresponding to a unique IJ combination. To facilitate joins and queries related to the MODFLOW data, the data model includes a CellIndex table containing the following fields:
CellIndex | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
I | Long Integer | Row index |
J | Long Integer | Column index |
K | Long Integer | Layer index |
IJ | Long Integer | Row/column index |
IJK | Long Integer | Row/column/layer index |
The IJ and IJK fields of the CellIndex table is populated from the I,J,K values by starting at a value of one for the cell corresponding to I=1, J=1, K=1, and looping through the cells in the grid row-by-row within each layer, and incrementing the index. The IJ index ordering is repeated within each layer. The following example indicates how this numbering would be accomplished in both the C and VB languages:
// C Syntax
// numI, numJ, numK = number of cells in the I, J and K directions
int index1 = 1;
for (int K = 0; K < numK; ++K) {
int index2 = 1;
for (int I = 0; I < numI; ++I) {
for (int J = 0; J < numJ; ++J) {
IJK = index1;
IJ = index2;
++index1;
++index2;
}
}
}
' Visual Basic Syntax
' numI, numJ, numK = number of cells in the I, J and K directions
index1 = 1
For K = 1 To numK
index2 = 1
For I = 1 To numI
For J = 1 To numJ
IJ = index2
IJK = index1
index1 = index1 + 1
index2 = index2 + 1
Next J
Next I
Next K
For example, consider a MODFLOW grid with three rows, four columns, and two layers (numI=3, numJ=4, numK=2). The CellIndex table for this grid would be as follows:
CellIndex Table | ||||
I | J | K | IJ | IJK |
1 | 1 | 1 | 1 | 1 |
1 | 2 | 1 | 2 | 2 |
1 | 3 | 1 | 3 | 3 |
1 | 4 | 1 | 4 | 4 |
2 | 1 | 1 | 5 | 5 |
2 | 2 | 1 | 6 | 6 |
2 | 3 | 1 | 7 | 7 |
2 | 4 | 1 | 8 | 8 |
3 | 1 | 1 | 9 | 9 |
3 | 2 | 1 | 10 | 10 |
3 | 3 | 1 | 11 | 11 |
3 | 4 | 1 | 12 | 12 |
1 | 1 | 2 | 1 | 13 |
1 | 2 | 2 | 2 | 14 |
1 | 3 | 2 | 3 | 15 |
1 | 4 | 2 | 4 | 16 |
2 | 1 | 2 | 5 | 17 |
2 | 2 | 2 | 6 | 18 |
2 | 3 | 2 | 7 | 19 |
2 | 4 | 2 | 8 | 20 |
3 | 1 | 2 | 9 | 21 |
3 | 2 | 2 | 10 | 22 |
3 | 3 | 2 | 11 | 23 |
3 | 4 | 2 | 12 | 24 |
It is also helpful to view the IJ and IJK indices on a layer-by-layer basis (IJ values shown in red, IJK values in blue):
K=1 | ||||
J=1 | J=2 | J=3 | J=4 | |
I=1 | 1
1 |
2
2 |
3
3 |
4
4 |
I=2 | 5
5 |
6
6 |
7
7 |
8
8 |
I=3 | 9
9 |
10
10 |
11
11 |
12
12 |
K=2 | ||||
J=1 | J=2 | J=3 | J=4 | |
I=1 | 1
13 |
2
14 |
3
15 |
4
16 |
I=2 | 5
17 |
6
18 |
7
19 |
8
20 |
I=3 | 9
21 |
10
22 |
11
23 |
12
24 |
The Cell2D and Node2D features include an IJ field and the Cell3D and Node3D features include an IJK field where the IJ and IJK fields are populated using the same strategy used to populate the CellIndex table. The MODFLOW data is stored in a separate series of tables (described below) and the tables containing cell-by-cell data include either an IJ or IJK field depending on whether it is a 2D array or a 3D array. The MODFLOW tables are then joined to the cell and node features using the CellIndex table. For example, a map layer illustrating hydraulic conductivity values with polygons could be generated by first joining the IJK field of the LPFProperties table to the IJK field of the CellIndex table. The CellIndex.IJ field of the resulting temporary table would then be joined to the IJ field Cell2D feature class. This type of join can be easily generated in one step using the “Make Query Table” geo-processing tool in the MODFLOW Analyst. The values associated with individual grid layers in the resulting map layer can be displayed using a definition query (“CellIndex.K = 1, CellIndex.K=2, etc.). For 2D arrays or for models with only one grid layer, the CellIndex table can be bypassed and the IJ or IJK field of the MODFLOW tables can be joined directly with the IJ field of the Node2D and Cell2D features since the IJ and IJK values are identical for K=1. Similarly, joins can be performed directly between IJK-based tables and the Cell3D and/or Node3D features. Map layers of MODFLOW data associated with cell and node features can be symbolized and toggled on/off independently from other features in the TOC window in ArcMap and ArcScene.
Sometimes it is necessary to derive I, J, and K values from the IJ or IJK indices, or vice versa. The following C and Visual Basic code shows how to get the I and J indices given an IJ value:
// C Syntax
// '%' is the modulus operator
I = ((IJ - 1) / numJ) + 1;
J = (((IJ - 1) % numJ) + 1;
' Visual Basic Syntax
' 'Mod' is the modulus operator, 'Int' converts a decimal to an integer
I = Int((IJ - 1) / numJ) + 1
J = ((IJ - 1) Mod numJ) + 1
Likewise, to get the I, J, and K indices from an IJK value:
// C Syntax
I = (((IJK - 1) / numJ) % numI) + 1;
J = ((IJK - 1) % numJ) + 1;
K = ((IJK - 1) / (numI * numJ)) + 1;
' Visual Basic Syntax
I = (Int((IJK - 1) / numJ) Mod numI) + 1
J = (IJK - 1) Mod numJ + 1
K = Int((IJK - 1) / (numI * numJ)) + 1
Finally, IJ and IJK indices can be derived from I, J, and K values as follows:
// C Syntax
IJ = ((I - 1) * numJ) + J;
IJK = ((K-1) * numI * numJ) + ((I-1) * numJ) + J;
' Visual Basic Syntax
IJ = ((I - 1) * numJ) + J
IJK = ((K - 1) * numI * numJ) + ((I - 1) * numJ) + J
It should be noted that with this strategy, if the grid is modified by adding or deleting rows or columns, all tables which include IJ or IJK fields will need to be modified by renumbering the IJ and IJK values according to the new configuration. We will eventually provide tools to automate this process.
Groups
Tables that are related to each other are put together in a group and, in the diagram, are displayed together in a colored box. For example, three tables are used to represent the LPF package and these are grouped together in the data model. Groups typically are associated with MODFLOW packages but not necessarily. For example, the Output group does not correspond to any MODFLOW package.
Global Settings / Name File
The MDFGlobals table is used to store global variables that are not associated with a particular MODFLOW package or MODFLOW input file, but which are useful for managing the MDM. Currently the only field in this table is the model version. Additional fields will be added as the need arises. The Version field is used to indicate which MODFLOW version is represented in the data model (2000, 2005, etc.). This makes it possible to support multiple versions of the data model. Currently the only versions the data model supports are MODFLOW 2000 and 2005.
The Global Settings group also includes the NameFile table.
MDFGlobals | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MODFLOW_Version | Text | Version of MODFLOW targeted, e.g. "MODFLOW 2000" |
DataModelVersion | Text | Version of the MODFLOW Data Model, e.g. "1.0" |
NameFilePath | Text | Full path and filename of the exported or imported name file on disk. |
NameFile | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
FileType | Text | File type ("Ftype" in MODFLOW documentation, but "Ftype" has other meanings in Arc Hydro). FileType coded value domain. |
Nunit | Long Integer | Fortran unit number |
Fname | Text | Name of the file |
Use | Short Integer | Flag indicating whether or not the file is being used. Only when this flag is true should the file be included in the name file. Uses TrueFalse coded value domain. |
Discretization (DIS)
One of the main input files to MODFLOW is the Discretization (DIS) File. It defines the spatial and temporal discretization used in the model. Some of the information in the DIS file is represented by the Cell2D feature class. The rest comes from the following tables.
The DISVars table contains variables associated with the DIS file. The RefTime variable is not written to the DIS file. It is used by tools associated with the MDM to generate date/time values representing the beginning and ending of each stress period in the Stress Periods table. A geo-processing tool exists that computes these values and adds two columns (Start, End) to the table when necessary.
The DELRC table is used to store the widths (discretization) of the rows and columns. While this information could be derived from the geometry of the Cell2D polygons, it is convenient to store it explicitly in a table.
The StressPeriods table stores information on stress periods and time steps. The SPID field defines the stress period order and must begin with 1 and go to N where N is the number of stress periods. Other tables in the data model which refer to stress periods reference the stress period ID.
The DISLayers table contains variables defined on a layer-by-layer basis.
The TopElev and BotmElev tables are used to store the top and bottom elevations for the cells of the grid. For the TopElev table, only the cells in the top layer should be included. The top elevations for the remaining layers are assumed to be equivalent to the bottom elevations of the above layer as defined by the BotmElev table. Thus, the BotmElev table should include the bottom elevations for all cells in the grid. The BotmElevCBD field is used to store the bottom elevation of confining beds, if appropriate.
DISVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
NLAY | Long Integer | Number of layers |
NROW | Long Integer | Number of rows |
NCOL | Long Integer | Number of columns |
ITMUNI | Short Integer | Time unit. TimeUnit coded value domain |
LENUNI | Short Integer | Length unit. LengthUnit coded value domain |
RefTime | Date | The Date/Time of the beginning of the simulation |
DELRC | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Direction | Text | Row or column. Direction coded value domain |
Num | Long Integer | Row or column number |
Width | Double | Row or column width |
TopElev | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
TopElev | Double | Top elevation of cell |
BotmElev | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
BotmElev | Double | Bottom elevation of cell |
BotmElevCBD | Double | Bottom elevation of Quasi-3D confining bed below cell |
DISLayers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Layer | Long Integer | Layer |
LAYCBD | Short Integer | Quasi-3D confining bed flag |
AM_TopElev | Double | TopElev array multiplier |
AM_BotmElev | Double | BotmElev array multiplier |
AM_BotmElevCBD | Double | BotmElevCBD array multiplier |
StressPeriods | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period number used to define the order, e.g. 1, 2, 3 |
PERLEN | Double | Period length |
NSTP | Long Integer | Number of time steps |
TSMULT | Double | Time step multiplier |
SSorTr | Text | Steady state or transient. SteadyState coded value domain |
RIV_ITMP | Short Integer | Use previous flag |
WEL_ITMP | Short Integer | Use previous flag |
DRN_ITMP | Short Integer | Use previous flag |
GHB_ITMP | Short Integer | Use previous flag |
CHD_ITMP | Short Integer | Use previous flag |
RCH_INRECH | Short Integer | Use previous flag |
RCH_INIRCH | Short Integer | Use previous flag |
EVT_INSURF | Short Integer | Use previous flag |
EVT_INEVTR | Short Integer | Use previous flag |
EVT_INEXDP | Short Integer | Use previous flag |
EVT_INIEVT | Short Integer | Use previous flag |
MNW1_ITMP | Short Integer | Use previous flag |
STR_ITMP | Short Integer | Use previous flag |
STR_IRDFLG | Short Integer | Use previous flag |
STR_IPTFLG | Short Integer | Use previous flag |
SFR_ITMP | Short Integer | Use previous flag |
SFR_IRDFLG | Short Integer | Use previous flag |
SFR_IPTFLG | Short Integer | Use previous flag |
LAK_ITMP | Short Integer | Use previous flag |
LAK_ITMP1 | Short Integer | Use previous flag |
LAK_LWRT | Short Integer | Use previous flag |
DRT_ITMP | Short Integer | Use previous flag |
ETS_INETSS | Short Integer | Use previous flag |
ETS_INETSR | Short Integer | Use previous flag |
ETS_INETSX | Short Integer | Use previous flag |
ETS_INIETS | Short Integer | Use previous flag |
ETS_INSGDF | Short Integer | Use previous flag |
Basic Package (BAS6)
The Basic Package is represented using the tables below. The Options and HNOFLO values are stored in the BASVars table as a text string and a double. The IBOUND and STRT arrays are stored in the Basic table. The IBOUND array is used to define the active/inactive status of the grid and the STRT array is used to define the starting heads. Mulipliers for the IBOUND and STRT arrays are stored in the BasicArrayMult table.
BASVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Options | Text | Option words, space delimited |
HNOFLO | Double | Head assigned to inactive cells |
HEADNG1 | Text | First comment line |
HEADNG2 | Text | Second comment line |
Basic | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
IBOUND | Long Integer | IBOUND array |
STRT | Double | Starting heads array |
BasicArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Layer | Long Integer | Layer |
AM_IBOUND | Long Integer | IBOUND array multiplier |
AM_STRT | Double | Starting heads array multiplier |
Output control
MODFLOW has two options for specifying output control: using words or using numeric codes. The MDM stores the options in tables patterned after the numeric codes option. The tool which converts MODFLOW models to geodatabases handles both options. Furthermore, the tools which export from the geodatabase to native MODFLOW files can be designed to export either format.
Not all of the output options are supported, in order to make the tables manageable.
The Output Control data consist of two parts: four global flags (IHEDFM, IDDNFM, IHEDUN, IDDNUN) and a set of flags that are specified for each time step. The global flags are stored in the OCVars table.
Time step data is stored in the OCTS table. Note that there is no INCODE value in the OCTS table. It is assumed that INCODE=0, indicating that all layers are treated the same way for a given time step. This allows the further assumption that there is one record for each output time step.
The OCTS table is entirely dependent on the records in the StressPeriods table and the number of time steps (NSTP) per stress period. Any tools used to manage the MDM will need to update the records in the OCTS table any time the StressPeriods table is edited.
Many of the MODFLOW packages include a flag at the top of the file indicating whether or not the cell-by-cell flow terms for the package should be output to the CCF file. These flags are stored in a single table called the CBFlags table.
OCVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IHEDFM | Short Integer | Format for printing heads. OCVarsFileType coded value domain |
IDDNFM | Short Integer | Format for printing drawdowns. OCVarsFileType coded value domain |
IHEDUN | Long Integer | Unit number for saving heads |
IDDNUN | Long Integer | Unit number for saving drawdowns |
IBDOPT | Long Integer | Compact budget |
IAUXSV | Short Integer | Auxiliary flag for saving cell-by-cell budget data |
OCTS | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
TSNum | Long Integer | Time step number |
IHDDFL | Short Integer | Head and drawdown output flag |
IBUDFL | Short Integer | Budget print flag |
ICBCFL | Short Integer | Flag for writing cell-by-cell flow |
Hdpr | Short Integer | Output flag for head printout |
Ddpr | Short Integer | Output flag for drawdown printout |
Hdsv | Short Integer | Output flag for head saving |
Ddsv | Short Integer | Output flag for drawdown saving |
CBFlags | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IBCFCB | Short Integer | Flag to store data to the CCF file |
ILPFCB | Short Integer | Flag to store data to the CCF file |
IRIVCB | Short Integer | Flag to store data to the CCF file |
IWELCB | Short Integer | Flag to store data to the CCF file |
IDRNCB | Short Integer | Flag to store data to the CCF file |
IGHBCB | Short Integer | Flag to store data to the CCF file |
IRCHCB | Short Integer | Flag to store data to the CCF file |
IEVTCB | Short Integer | Flag to store data to the CCF file |
IMNW1CB | Short Integer | Flag to store data to the CCF file |
ILKCB | Short Integer | Flag to store data to the CCF file |
IHUFCB | Short Integer | Flag to store data to the CCF file |
ISTCB1_STR | Short Integer | Flag to store data to the CCF file |
ISTCB2_STR | Short Integer | Flag to store data to the CCF file |
ISTCB1_SFR | Short Integer | Flag to store data to the CCF file |
ISTCB2_SFR | Short Integer | Flag to store data to the CCF file |
IDRTCB | Short Integer | Flag to store data to the CCF file |
IETSCB | Short Integer | Flag to store data to the CCF file |
IUZFCB1 | Short Integer | Flag to store data to the CCF file |
IUZFCB2 | Short Integer | Flag to store data to the CCF file |
Block-Centered Flow Package (BCF6)
The data for the Block-Centered Flow Package are stored in a combination of variables and tables. The IBCFCB value is stored in the CBFlags table in the Output control group.
The BCFVars table stores various variables associated with the BCF package.
The BCFLayers table is used to store layer-by-layer variables. In the MODFLOW text input files, the Ltype flag consists of two digits: one representing the mean (LAYAVG) and one representing the layer type (LAYCON). These two digits are combined to a single flag in the input file but are stored separately in the MDM. There should be one record in the table for each layer in the grid.
The BCFProperties table stores the aquifer property arrays associated with the BCF package. Note that the data in these arrays are applicable to some layers, but not to others, depending on the layer type (Ltype). The users of the MDM (and the applications that operate on the MDM) will need to ensure that the fields of the records in the table are populated for the cells in the appropriate layers.
BCFVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HDRY | Double | Head assigned to dry cells |
IWDFLG | Short Integer | Flag that determines if wetting capability is active |
WETFCT | Double | Factor included in head calculation that is initially established at a cell when it is converted from dry to wet |
IWETIT | Long Integer | Iteration interval for attempting to wet cells |
IHDWET | Short Integer | Flag that determines which equation is used to define initial head at cells that become wet |
BCFLayers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Layer | Long Integer | Layer number |
LAYAVG | Short Integer | Mean. BCFMean coded value domain |
LAYCON | Short Integer | Layer type. BCFLayerType coded value domain |
TRPY | Double | Horizontal anisotropy for the layer |
AM_Sf1 | Double | Sf1 array multiplier |
AM_Tran | Double | Tran array multiplier |
AM_HY | Double | HY array multiplier |
AM_Vcont | Double | Vcont array multiplier |
AM_Sf2 | Double | Sf2 array multiplier |
AM_WETDRY | Double | WETDRY array multiplier |
BCFProperties | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
HY | Double | Hydraulic conductivity |
Tran | Double | Transmissivity |
Vcont | Double | Vertical conductivity |
Sf1 | Double | Primary storage coefficient |
Sf2 | Double | Secondary storage coefficient |
WETDRY | Double | wetting threshold and flag to indicate which neighboring cells can cause cell to become wet |
Layer-Property Flow (LPF) Package
The LPF Package is handled similarly to the BCF package. The ILPFCB value is stored in the CBFlags table in the Output control group. Variables associated with the LPF package are stored in the LPFVars table. Layer-based variables associated with the LPF package are stored in the LPFLayers table. The LPF aquifer property arrays are stored in the LPFProperties table. As is the case with the BCF package, the contents of the “arrays” depend on the layer types defined by the LAYTYP flag in the LPFLayers table. Some arrays are only required for certain layer types. The VKCB field is used to store the vertical conductivity for quasi-3d confining beds as defined by the LAYCBD table in the DIS section. The IJK field in records associated with VKCB values is the cell in the layer just above the confining bed.
LPFVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HDRY | Double | Head assigned to dry cells |
WETFCT | Double | Factor included in head calculation that is initially established at a cell when it is converted from dry to wet |
IWETIT | Long Integer | Iteration interval for attempting to wet cells |
IHDWET | Short Integer | Flag that determines which equation is used to define initial head at cells that become wet |
LPFLayers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Layer | Long Integer | Layer number |
LAYTYP | Short Integer | Layer type. LPFLayerType coded value domain |
LAYAVG | Short Integer | Mean. LPFMean coded value domain |
CHANI | Double | Horizontal anisotropy flag |
LAYVKA | Short Integer | Vertical hydraulic conductivity flag |
LAYWET | Short Integer | Flag indicating if wetting is active |
AM_HK | Double | HK array multiplier |
AM_HANI | Double | HANI array multiplier |
AM_VKA | Double | VKA array multiplier |
AM_Ss | Double | Ss array multiplier |
AM_Sy | Double | Sy array multiplier |
AM_WETDRY | Double | WETDRY array multiplier |
AM_VKCB | Double | VKCB array multiplier |
LPFProperties | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
HK | Double | Hydraulic conductivity |
HANI | Double | Anisotropy |
VKA | Double | Vertical conductivity or ratio |
Ss | Double | Specific storage |
Sy | Double | Specific yield |
WETDRY | Double | Wetting threshold and flag |
VKCB | Double | Vertical conductivity of Quasi-3D confining bed |
Hydrogeologic Unit Flow (HUF2) Package (v 2.0+)
Coming soon in version 2.0...
HUFVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HDRY | Double | Head assigned to cells converted to dry in simulation |
NHUF | Long Integer | Number of hydrogeologic units |
IOHUFHEADS | Short Integer | Flag and unit number |
IOHUFFLOWS | Short Integer | Flag and unit number |
WETFCT | Double | Factor used when cell converted from dry to wet |
IWETIT | Long Integer | Iteration interval for attempting to wet cells |
IHDWET | Short Integer | Flag for equation used for initial head at cells that become wet |
HUFLayers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Layer | Long Integer | Layer |
LTHUF | Short Integer | Flag specifying layer type |
LAYWET | Short Integer | Flag indicating if wetting is active |
AM_WETDRY | Double | WETDRY array multiplier |
HUFWetDry | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
WETDRY | Double | Wetting threshold and flag for neighboring cells to become wet |
HUFUnits | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HGUID | Long Integer | Hydrogeologic unit ID |
HGUNAME | Text | Name of the hydrogeologic unit |
HGUHANI | Double | Flag and horizontal anisotropy value |
HGUVANI | Double | Vertical hydraulic conductivity flag |
AM_Top | Double | Top array multiplier |
AM_Thick | Double | Thick array multiplier |
PRINTCODE_HK | Short Integer | Flag for printing the VK array |
PRINTCODE_HANI | Short Integer | Flag for printing the HANI array |
PRINTCODE_VK | Short Integer | Flag for printing the VK array |
PRINTCODE_Ss | Short Integer | Flag for printing the Ss array |
PRINTCODE_Sy | Short Integer | Flag for printing the Sy array |
HUFUnitProps | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
HGUID | Long Integer | Hydrogeologic unit ID |
Top | Double | Top elevation of the hydrogeologic unit |
Thick | Double | Thickness of the hydrogeologic unit |
List-Based Stress Packages
Most of the commonly-used stress packages in MODFLOW follow a simple strategy. The cells associated with a given type of stress are identified and an input entry is made for each instance in a list in the package input file. In some cases, multiple entries are made for a given cell (three wells in a single cell, for example). The River, Well, Drain, General Head Boundary, Constant-Head Boundary, and Horizontal Flow Barrier packages follow this format. Each of these packages are represented in the data model using a variable and a table. For each package, the cell-by-cell flow flag (IRIVCB, IWELCB, IDRNCB, etc.) are stored in the CBFlags table in the Output control group. The remaining data associated with the package are stored in a series of tables, one per package. Each record in the tables corresponds to an instance of the given stress at a particular cell for a particular stress period. The SourceID field is used to associate records with the spatial features from which they were derived. The SourceID represents the HydroID of the point, polyline, or polygon in the Framework component of the Arc Hydro database that was used to construct the record in the table. This field is only used when the tables are constructed using a tool in Arc Hydro GW. For the case where pre-built MODFLOW files are imported from another database, the SourceID values should all be Null.
RIV | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Stage | Double | River stage |
Cond | Double | Conductance |
Rbot | Double | Elevation of the bottom of the riverbed |
IFACE | Long Integer | MODPATH auxiliary variable |
Condfact | Double | Factor used to calculate conductance from the parameter value |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
CHD | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Shead | Double | Head at start of stress period |
Ehead | Double | Head at end of stress period |
Shdfact | Double | Factor used to calculate Shead from the parameter value |
Ehdfact | Double | Factor used to calculate Ehead from the parameter value |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
WEL | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Q | Double | Pumping rate |
Qfact | Double | Factor used to calculate Q from the parameter value |
IFACE | Long Integer | MODPATH auxiliary variable |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
DRN | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Elevation | Double | Elevation of the drain |
Cond | Double | Conductance |
IFACE | Long Integer | MODPATH auxiliary variable |
Condfact | Double | Factor used to calculate conductance from the parameter value |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
GHB | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Bhead | Double | Head on the boundary |
Cond | Double | Conductance |
IFACE | Long Integer | MODPATH auxiliary variable |
Condfact | Double | Factor used to calculate conductance from the parameter value |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
HFB6 | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK1 | Long Integer | IJK Index of cell on one side of barrier |
IJK2 | Long Integer | IJK Index of cell on other side of barrier |
Hydchr | Double | Hydraulic characteristic |
Factor | Double | Factor used to calculate Hydchr from the parameter value |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell. |
MNW1 | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
WellID | Long Integer | Well ID |
Qdes | Double | Desired volumetric pumping or recharge rate |
QwVal | Double | Water-quality value |
Rw | Double | Flag and a variable used to define the cell-to-well conductance |
Skin | Double | Defines the friction losses to the well owing to the screen and to formation damage |
Hlim | Double | Limiting water level |
Href | Double | Reference elevation |
DD | Long Integer | Flag that indicates the value of Hlim read is a drawdown or build-up from the reference elevation |
Iwgrp | Long Integer | Water-quality group identifier |
Cp_C | Double | Coefficient for nonlinear head losses |
QCUT | Long Integer | Flag that indicates pumping limits |
Qfrcmn | Double | Minimum pumping rate that a well must exceed to remain active |
Qfrcmx | Double | Minimum potential pumping rate that must be exceeded to reactivate a well |
SITE | Text | Optional label for identifying wells |
MNW1Vars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IWELPT | Short Integer | Flag for printing |
NOMOITER | Long Integer | Flow in MNW wells will not be calculated after NOMITER iterations |
kspref | Long Integer | Set of water levels that will be used as default reference values for calculating drawdown |
LOSSTYPE | Text | Flag to determine the user-specified model for well loss |
PLossMNW | Double | If LOSSTYPE is nonlinear, represents the exponent P |
PREFIX | Text | Prefix name of file for outputting time series data from MNW |
WEL1_FILE | Text | Name of an auxiliary output file |
iunw1 | Long Integer | Unit number |
BYNODE_FILE | Text | Name of an auxiliary output file |
iunby | Long Integer | Unit number |
BYNODE_ALLTIME | Short Integer | Flag that indicates flow rates should be written to BYNODE or QSUM at every time step |
QSUM_FILE | Text | Name of an auxiliary output file |
iunqs | Long Integer | Unit number |
QSUM_ALLTIME | Short Integer | Flag that indicates flow rates should be written to BYNODE or QSUM at every time step |
Coming soon in version 2.0...
DRT | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Elevation | Double | Elevation of the drain |
Cond | Double | Conductance |
IFACE | Long Integer | MODPATH auxiliary variable |
Condfact | Double | Factor used to calculate conductance from the parameter value |
LayR | Long Integer | Return flow flag |
RowR | Long Integer | Row number of the recipient cell |
ColR | Long Integer | Column number of the recipient cell |
Rfprop | Double | Return-flow proportion |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
Array-Based Stress Packages
Two of the more common stress packages are array-based: the Recharge Package (RCH) and the Evapotranspiration Package (EVT). While the individual records are quite similar, both packages require some additional variables. Furthermore, both packages require input that are based on rows and columns, but are not necessarily tied to a particular layer. One approach to handle this would be to store IJ indices. However, it is necessary to do joins with the Cell2D and Node objects to display values. Thus, a IJ field is used with each record where the IJ index for the corresponding cell in the top layer is stored.
Recharge Package (RCH)
The cell-by-cell flow flag (IRCHCB) for the Recharge Package (IRCHCB) is stored in the CBFlags table in the Output control group. The remaining data are stored in the three tables below. The RCHVars table holds the NRCHOP variable (associated with a coded value domain). This variable defines the recharge option. For NRCHOP=1 or 2, a single recharge value (RECH) is stored for each IJ combination. For NRCHOP=3, an additional array of integer values (IRCH) is required. The RECH and IRCH values are stored in the RCHArrays table. The IRCH field will likely be rarely used. The RCHArrayMult table is used to store array multipliers.
RCHVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
NRCHOP | Short Integer | Recharge option code. RechargeOption coded value domain |
RCHArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
SPID | Long Integer | Stress period ID |
RECH | Double | Recharge flux |
IRCH | Long Integer | Layer number where recharge is applied |
RCHArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
AM_RECH | Double | Recharge flux array multiplier |
AM_IRCH | Long Integer | IRCH array multiplier |
Evapotranspiration Package (EVT)
The Evapotranspiration package is similar to the Recharge Package. The cell-by-cell flow variable (IEVTCB) is stored in the CBFlags table in the Output control group. The remaining data are stored in the three tables below. If NEVTOP=1, the IEVT field is ignored. If NEVTOP=2, the IEVT field is used.
EVTVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
NEVTOP | Short Integer | Evapotranspiration option code. EvapotranspirationOption coded value domain |
EVTArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
SPID | Long Integer | Stress period ID |
SURF | Double | Elevation of the ET surface |
EVTR | Double | Maximum ET flux |
EXPD | Double | ET extinction depth |
IEVT | Long Integer | Layer indicator variable |
EVTArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
AM_SURF | Double | SURF array multiplier |
AM_EVTR | Double | EVTR array multiplier |
AM_EXPD | Double | EXPD array multiplier |
AM_IEVT | Long Integer | IEVT array multiplier |
Evapotranspiration Segments Package (ETS) (v 2.0+)
Coming soon in version 2.0...
ETSVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
NETSOP | Short Integer | Evapotranspiration option code |
NETSEG | Long Integer | Number of segments |
ETSArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
SPID | Long Integer | Stress period ID |
ETSS | Double | Elevation of the ET surface |
ETSR | Double | Maximum ET flux |
ETSX | Double | ET extinction depth |
IETS | Long Integer | Layer indicator variable |
ETSArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
AM_ETSS | Double | ETSS array multiplier |
AM_ETSR | Double | ETSR array multiplier |
AM_ETSX | Double | ETSX array multiplier |
AM_IETS | Long Integer | IETS array multiplier |
ETSSegArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
SPID | Long Integer | Stress period ID |
SEGID | Long Integer | Segment ID |
PXDP | Double | Proportion of the extinction depth |
PETM | Double | Proportion of the maximum evapotranspiration rate |
ETSSegArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
SEGID | Long Integer | Segment ID |
AM_PXDP | Double | PXDP array multiplier |
AM_PETM | Double | PETM array multiplier |
Stream Package (STR6) (v 2.0+)
Coming soon in version 2.0...
STRVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ICALC | Short Integer | Flag for calculating stream stages in reaches |
CONST | Double | Constant value used in calculating stream reaches |
STRItrib | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Seg | Long Integer | Stream segment |
SPID | Long Integer | Stress period ID |
Itrib | Long Integer | Segment number for each tributary that flows into a segment |
STRIupseg | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
Seg | Long Integer | Stream segment |
SPID | Long Integer | Stress period ID |
Iupseg | Long Integer | Number of upstream segment from which water is diverted |
STRReaches | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress Period ID |
Seg | Long Integer | Stream segment |
Reach | Long Integer | Stream reach |
Flow | Double | Streamflow entering a segment |
Stage | Double | Stream stage |
Cond | Double | Streambed hydraulic conductance |
Sbot | Double | Elevation of the bottom of the streambed |
Stop | Double | Elevation of the top of the streambed |
Width | Double | Width of the stream channel |
Slope | Double | Slope of the stream channel |
Rough | Double | Manning's roughness coefficient |
Condfact | Double | Factor used to calculate streambed hydraulic conductance |
SourceID | Long Integer | HydroID of the feature that the source comes from |
LinearScale | Double | Length from the begining of a polyline to the center of the polyline segement within the MODFLOW cell |
Streamflow-Routing Package (SFR2) (v 2.0+)
Coming soon in version 2.0...
SFRVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
CONST | Double | Value used in calculating stream depth for stream reach |
DLEAK | Double | Closure tolerance for stream depth for calculating leakage |
SFRReaches | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
ISEG | Long Integer | Number of the stream segment this reach is located in |
IREACH | Long Integer | Reach number in a stream segment |
RCHLEN | Double | Length of channel of the stream reach within this model cell |
SFRFlowTab | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
NSEG | Long Integer | Number of the stream segment |
FLOWTAB | Double | Streamflow value |
DPTHTAB | Double | Average depth |
WDTHTAB | Double | Stream width |
SFRSegments | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
NSEG | Long Integer | Number of the stream segment |
ICALC | Short Integer | Used to calculate stream depth in this segment |
OUTSEG | Long Integer | Downstream stream segment that receives tributary inflow from the last downstream reach of this segment |
IUPSEG | Long Integer | Upstream segment from which water is diverted |
IPRIOR | Short Integer | Prioritization system for diversion |
NSTRPTS | Short Integer | Dimensions table relating streamflow with stream depth and width |
FLOW | Double | Streamflow entering or leaving upstream end of stream segment |
RUNOFF | Double | Volumetric rate of the diffuse overland runoff entering stream segment |
ETSW | Double | Volumetric rate per unit area of water removed by evapotranspiration |
PPTSW | Double | Volumetric rate per unit area of water added by precipitation |
ROUGHCH | Double | Manning's roughness coefficient for the channel in all reaches of the segment |
ROUGHBK | Double | Manning's roughness for the overbank areas in all reaches of the segment |
CDPTH | Double | Coefficient used in relating stream depth to streamflow |
FDPTH | Double | Exponent used in relating stream depth to streamflow |
AWDTH | Double | Coefficient used in relating stream width to streamflow |
BWDTH | Double | Exponent used in relating stream width to streamflow |
HCOND1 | Double | Hydraulic conductivity of streambed at upstream end of segment |
THICKM1 | Double | Thickness of streambed at upstream end of segment |
ELEVUP | Double | Elevation at top of streambed at upstream end of segment |
WIDTH1 | Double | Average width of stream channel at upstream end of segment |
DEPTH1 | Double | Average depth of water in channel at upstream end of segment |
HCOND2 | Double | Hydraulic conductivity of streambed at downstream end of segment |
THICKM2 | Double | Thickness of streambed at downstream end of segment |
ELEVDN | Double | Elevation at top of streambed at downstream end of segment |
WIDTH2 | Double | Average width of stream channel at downstream end of segment |
DEPTH2 | Double | Average depth of water in channel at downstream end of segment |
SFRXsect | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
NSEG | Long Integer | Number of the stream segment |
XCPT1 | Double | Distance relative to the left bank of the stream channel |
ZCPT1 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT2 | Double | Distance relative to the left bank of the stream channel |
ZCPT2 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT3 | Double | Distance relative to the left bank of the stream channel |
ZCPT3 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT4 | Double | Distance relative to the left bank of the stream channel |
ZCPT4 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT5 | Double | Distance relative to the left bank of the stream channel |
ZCPT5 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT6 | Double | Distance relative to the left bank of the stream channel |
ZCPT6 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT7 | Double | Distance relative to the left bank of the stream channel |
ZCPT7 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
XCPT8 | Double | Distance relative to the left bank of the stream channel |
ZCPT8 | Double | Height relative to the top of the lowest elevation of the streambed (thalweg) |
GAG Package (v 2.0+)
Coming soon in version 2.0...
GAGSFR | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
GAGESEG | Long Integer | Stream segment number where gage is located |
GAGERCH | Long Integer | Stream reach number where gage is located |
UNIT | Short Integer | Unit number of output file for this gage |
OUTTYPE | Short Integer | Flag for type of expanded listing desired in output file |
GAGLAK | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
LAKE | Long Integer | Lake number of the lake where the gage is located |
UNIT | Short Integer | Unit number for output file |
OUTTYPE | Short Integer | Code for type of expanded listing desired in output file |
LAK3 Package (v 2.0+)
Coming soon in version 2.0... MOC3D properties unsupported.
LAKVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
THETA | Double | Explicit, semi-implicit, or implicit solution for lake stages |
NSSITR | Short Integer | Maximum number of iterations for Newton’s method solution for equilibrium lake stages in each MODFLOW iteration for steady-state aquifer head solution |
SSCNCR | Double | Convergence criterion for equilibrium lake stage solution by Newton’s method |
LAKArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJK | Long Integer | IJK Index |
SPID | Long Integer | Stress period ID |
LKARR | Long Integer | Lake array value |
BDLKNC | Double | Lakebed leakance value |
LAKStages | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
LakeID | Long Integer | Lake ID |
STAGES | Double | Initial stage of lake at the beginning of the run |
SSMN | Double | Minimum stage allowed for lake in steady-state solution |
SSMX | Double | Maximum stage allowed for lake in steady-state solution |
LAKSublakes | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
SystemID | Long Integer | Multi-lake system ID |
ISUB | Long Integer | Identification numbers of the sublakes in the sublake system |
SILLVT | Double | Sill elevation that determines whether the center lake is connected with a given sublake |
LAKRates | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
LakeID | Long Integer | Lake ID |
PRCPLK | Double | Rate of precipitation per unit area at the surface of lake |
EVAPLK | Double | Rate of evaporation per unit area from the surface of lake |
RNF | Double | Overland runoff from an adjacent watershed entering lake |
WTHDRW | Double | Volumetric rate, or flux, of water removal from lake by means other than rainfall, evaporation, surface outflow, or ground-water seepage |
SSMN | Double | Minimum stage allowed for lake in steady-state solution |
SSMX | Double | Maximum stage allowed for lake in steady-state solution |
Unsaturated Zone Flow (UZF) Package (v 2.0+)
Coming soon in version 2.0...
UZFVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
NUZTOP | Short Integer | Flag defining recharge to and discharge from cells |
IUZFOPT | Short Integer | See MODFLOW documentation |
IRUNFLG | Short Integer | Flag to route to stream segments or lakes |
IETFLG | Short Integer | Flag to simulate evapotranspiration |
NTRAIL2 | Long Integer | Number of trailing waves |
NSETS2 | Long Integer | Number of wave sets |
NUZGAG | Long Integer | Number of cells for printing water budget and content |
SURFDEP | Double | Average height of undulations |
UZFArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
IUZFBND | Long Integer | Aerial extent of active model |
IRUNBND | Long Integer | Define the stream segments |
VKS | Double | Saturated vertical hydraulic conductivity of the unsaturated zone |
EPS | Double | Brooks-Corey epsilon of the unsaturated zone |
THTS | Double | Saturated water content of the unsaturated zone |
THTI | Double | Initial water content for each vertical column of cells |
UZFArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
AM_IUZFBND | Long Integer | IUZFBND array multiplier |
AM_IRUNBND | Long Integer | IRUNBND array multiplier |
AM_VKS | Double | VKS array multiplier |
AM_EPS | Double | EPS array multiplier |
AM_THTS | Double | THTS array multiplier |
AM_THTI | Double | THTI array multiplier |
UZFGages | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IUZROW | Long Integer | Row number of the cell |
IUZCOL | Long Integer | Column number of the cell |
IFTUNIT | Long Integer | Unit number of the output file |
IUZOPT | Long Integer | Type of expanded listing desired in the output file |
UZFStressArrays | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
IJ | Long Integer | IJ Index |
SPID | Long Integer | Stress period ID |
FINF | Double | Infiltration rate |
PET | Double | ET demand rate |
EXTDP | Double | ET extinction depth |
EXTWC | Double | Extinction water content |
UZFStressArrayMult | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
SPID | Long Integer | Stress period ID |
AM_FINF | Double | FINF array multiplier |
AM_PET | Double | PET array multiplier |
AM_EXTDP | Double | EXTDP array multiplier |
AM_EXTWC | Double | EXTWC array multiplier |
NUZF1 | Short Integer | Flag for reusing or reading infiltration rates |
NUZF2 | Short Integer | Flag for reusing or reading ET demand rates |
NUZF3 | Short Integer | Flag for reusing or reading ET extinction depths |
NUZF4 | Short Integer | Flag for reusing or reading the extinction water content |
Solver Packages
Representing solver package input in the MDM is a fairly simple process. None of the packages require any type of array- or list-based input; all input is in the form of a set of variables. For each solver package there is one table with one field for each of the variables used in the package. Each table contains only one record.
SIP | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MXITER | Long Integer | Max iterations per time step |
NPARM | Long Integer | Number of iteration variables to be used |
ACCL | Double | Acceleration variable |
HCLOSE | Double | Head change criterion |
IPCALC | Short Integer | Flag indicating where seed comes from |
WSEED | Double | Seed for calculating iteration variables |
IPRSIP | Long Integer | Printout interval |
GMG | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
RCLOSE | Double | Residual convergence criterion for the inner iteration |
IITER | Long Integer | Maximum number of PCG iterations for each linear solution |
HCLOSE | Double | Head change convergence criterion for nonlinear problems |
MXITER | Long Integer | Maximum number of outer iterations |
DAMP | Double | Value of the damping parameter |
IADAMP | Short Integer | A flag that controls adaptive damping |
IOUTGMG | Short Integer | Flag that controls output. IOUTGMGType coded value domain |
IUNITMHC (optional) | Short Integer | IUNITMHC is a flag and a unit number, which controls output of maximum head change values |
ISM | Short Integer | Flag that controls the type of smoother used in the multigrid preconditioner |
ISC | Short Integer | Flag that controls semicoarsening in the multigrid preconditioner. ISCType coded value domain |
DUP (optional) | Double | the maximum damping value that should be applied at any iteration when the solver is not oscillating |
DLOW(optional) | Double | the minimum damping value to be generated by the adaptive-damping procedure |
CHGLIMIT (optional) | Double | the maximum allowed head change at any cell between outer iterations; it has units of length |
RELAX | Double | Relaxation parameter for the ILU preconditioned conjugate gradient method |
LMG | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
STOR1 | Double | Variable controlling the amount of storage allocated |
STOR2 | Double | Variable controlling the amount of storage allocated |
STOR3 | Double | Variable controlling the amount of storage allocated |
ICG | Short Integer | Variable controlling whether or not conjugate gradient iterations are used at the end of each multigrid cycle |
MXITER | Long Integer | Maximum number of iterations |
MXCYC | Long Integer | Maximum number of cycles allowed per call to the solver |
BCLOSE | Double | Budget closure criterion for the scaled L2 norm of the matrix equations |
DAMP | Double | Damping/accelerating parameter identical to ACCL of the DE4 solver |
IOUTAMG | Short Integer | Flag that controls the information printed each time step from the solver to the LIST output file. IOUTAMGType coded value domain |
DUP | Double | Maximum value of DAMP that should be applied at any iteration |
DLOW | Double | Minimum value of DAMP that should be applied at any iteration |
PCG | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MXITER | Long Integer | Max number of outer iterations |
ITER1 | Long Integer | Number of inner iterations |
NPCOND | Short Integer | Flag used to select matrix conditioning method |
HCLOSE | Double | Head change criterion |
RCLOSE | Double | Residual criterion |
RELAX | Double | Relaxation parameter |
NBPOL | Short Integer | Flag indicating whether estimate on upper bound on maximum eigenvalue is 2.0 or calculated |
IPRPCG | Long Integer | Printout interval |
MUTPCG | Short Integer | Flag that controls printing of convergence information. MUTPCGType coded value domain |
DAMP | Double | Damping factor |
DE4 | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ITMX | Long Integer | Max number of iterations each time step |
MXUP | Long Integer | Max number of equations in upper part of equations to be solved |
MXLOW | Long Integer | Max number of equations in lower part of equations to be solved |
MXBW | Long Integer | Maximum band width plus 1 |
IFREQ | Short Integer | Flag indicating the frequency at which coefficients in [A] change |
MUTD4 | Short Integer | Flag that indicates the quantity of information that is printed |
ACCL | Double | Multiplier for computed head change for each iteration |
HCLOSE | Double | Head change closure criterion |
IPRD4 | Long Integer | Time step interval for printing convergence information |
SOR | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MXITER | Long Integer | Max iterations per time step |
ACCL | Double | Acceleration variable |
HCLOSE | Double | Head change criterion |
IPRSOR | Long Integer | Printout interval |
Parameters
Beginning with MODFLOW 2000, the MODFLOW input files allow for the definition of parameters. Parameter definitions can be complex and representing parameters in a GIS database is challenging. The following design is an attempt to allow complex parameter definitions, yet provide a simple option for the most routine cases. The tables are related in multiple ways but those relationships are not shown here.
Params | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ParamID | Long Integer | Parameter ID |
PARNAM | Text | Parameter name |
PARTYPE | Text | Standard MODFLOW parameter type from PARTYPE coded value domain. If "Custom", then the TableCode and FieldCode fields are used to define the parameter type. |
TableCode | Text | The name of the table containing the parameter. Ignored unless PARTYPE is "Custom". |
FieldCode | Text | The name of the field in the table identified by TableCode containing the parameter. Ignored unless PARTYPE is "Custom". |
Parval | Double | Parameter value used for forward runs |
Keyval | Double | Key value in the field identified by PARTYPE (or TableCode and FieldCode) that identifies the location of the parameter. The value should be one that does not normally occur in the data (e.g. -99999) |
B | Double | "Starting" value used in sensitivity and inverse runs |
BL | Double | Min parameter value |
BU | Double | Max parameter value |
BSCAL | Double | Scaling factor for the SEN and PES processes. |
LN | Short Integer | Flag indicating whether or not the parameter should be log-transformed during the SEN and PES processes |
ISENS | Short Integer | Flag indicating whether or not the parameter should be analyzed during SEN or PES processes |
LogInterp | Short Integer | Flag whether or not to use log interpolation for pilot points |
LogMinVal | Double | Minimum value when using log interpolation for pilot points |
Tied | Text | Used by PEST. The name of another parameter used to link one parameter to another. The tied parameter is automatically adjusted along with the parent parameter by multiplying the parent parameter value by the Parval value of the tied parameter. |
Source | Short Integer | Flag indicating how data values for the parameter will be populated. ParamSource coded value domain. |
PilotPts | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ParamID | Long Integer | Parameter ID from Params table |
PointName | Text | Point name |
Parval | Double | Parameter value used for forward runs |
B | Double | "Starting" value used in sensitivity and inverse runs |
ISENS | Short Integer | Flag indicating whether or not the parameter should be analyzed during SEN or PES processes |
MultID | Long Integer | Multiplier ID from Multipliers table |
SourceID | Long Integer | HydroID of the feature that the record comes from |
ParInstSP | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ParInstID | Long Integer | Parameter Instance ID from ParInstances table |
SPID | Long Integer | Stress period ID from StressPeriods table |
ParInstances | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ParInstID | Long Integer | Parameter instance ID |
InstName | Text | Instance name |
ParamID | Long Integer | Parameter ID from Params table |
Clusters | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ClusterID | Long Integer | Cluster ID |
ParInstID | Long Integer | Parameter Instance ID from ParInstances table |
Layer | Long Integer | Layer |
ZoneID | Long Integer | Zone ID from Zones table |
MultID | Long Integer | Multiplier ID from Multipliers table |
HGUNAME | Text | Hydrogeologic Unit Name |
IZ | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ClusterID | Long Integer | Cluster ID from Clusters table |
IZ | Long Integer | Zone code |
ZoneNames | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ZoneID | Long Integer | Zone ID from Zones table |
ZoneName | Text | Zone name |
ArrayMult | Long Integer | Array multiplier |
Zones | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ZoneID | Long Integer | Zone ID |
IJ | Long Integer | IJ Index |
IZON | Long Integer | Value stored at cell |
Multipliers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MultID | Long Integer | Multiplier ID |
IJ | Long Integer | IJ Index |
RMLT | Double | Array multiplier value |
MultNames | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MultID | Long Integer | Multiplier ID from Multipliers table |
MultName | Text | Multiplier Name |
ArrayMult | Long Integer | Array multiplier |
Function | Text | Simple mathematical operators used to combine multiplier arrays |
The main table is the Params table. Parameters can be classified into two groups: 1) list-based parameters (well, drain, river, etc.) 2) array-based parameters (K, Ss, Sy, recharge, et, etc.). The strategy for managing the two types of parameters differs slightly. Another type of parameter exists that is non-native to MODFLOW: pilot points associated with array-based parameters.
List-Based Parameters
In the input files for the list-based stress packages, parameters are defined by providing a list of parameter definitions at the top of the file, above the main list of stress items and including a list of parameter names in the main list with each stress period group. Since this approach includes some redundancy and since it is difficult to directly duplicate in a database setting, a different strategy is used based on the concept of “key values”. The Keyval field in the Params table represents a value in the identified data column that identifies the location of the parameter. A value for the Keyval field should be selected such that it would not normally occur in the data column. For example, if the Keyval=-800 is used to identify river conductance, a query could be performed on this value to find all river stress objects with this value. The tools developed for the MDM are able to use this type of query to write out the MODFLOW files in the native format. Furthermore, a similar tool is able to read a MODFLOW package file in the native format and convert it to the Keyval format when importing the file. Using the Keyval approach also simplifies the process of parameterizing the model input in the GIS. The user simply assigns selected key values in the appropriate fields using standard editing tools. No special or additional tools are required.
For parameters associated with conductance values, the Condfact field is used to scale the parameter value for use with the conductance term. A similar approach is used with the Hydchr and Factor terms in the HFB table.
Array-Based Parameters
Array-based parameters are more complicated than list-based parameters. Array-based parameters can be defined in three ways: using key values, using clusters, and using pilot points.
Key Values. The Keyval field is used to identify the records in the data column corresponding to the parameter locations, similar to the process described above for list-based parameters. For most cases, this simple approach is sufficient. The only case where it is not sufficient is where you want to define a parameter that uses multiple zone arrays which cover distinct portions of the grid. When using the Key Value approach, only the Params table is necessary.
Clusters. The Clusters approach mimics the method used in the MODFLOW input files. Clusters are associated with Parameter Instances, even if a parameter only has a single instance. Clusters are defined using zone arrays and multiplier arrays. All of the tables, besides the Params and Pilot points tables, exist solely to support the clusters approach.
It should be noted that the entries in the Multipliers and Zones tables are referenced by IJ index. These arrays stored in this table are defined on a layer-by-layer basis with respect to the MODFLOW grid. Thus, each entry in the array is associated with an IJ index, independent of model layer (K). Going with an IJ index as opposed to two separate I, J fields simplifies the process of joining the tables with the Cell2D features. The IJ index for a particular entry corresponds to the cell in the top layer of the grid, regardless of which layer the Mulplier or Zone array is associated with. A GP tool exists that creates a temporary copy of the table and populates the table with I and J fields when needed.
Transient Array-Based Parameters
Transient array-based parameters are used with the Recharge and ET packages. In this case, MODFLOW utilizes “parameter instances” to define the parameters in the input file. Each parameter can be defined by multiple instances. Each parameter instance has a name and one or more clusters. Each parameter instance/cluster combination is linked to one or more stress periods. The ParInstances table contains the list of parameter instances.
Pilot Points
Pilot points allow one to define a distribution of values within an array by specifying parameter values at selected XY locations (pilot points) and interpolating to a zone of cells within a model layer. The Keyval field is used to identify which cells in the specified array are to be included in the pilot point interpolation. The PilotPts table is used to store the list of pilot points. Pilot points are organized into groups using the ParamID. The SourceID field could be used to represent the HydroID field of the associated point in a point layer from which the pilot point set was created. The Parval, and ISENS fields supersede the similarly named fields in the Params table. The weights associated with each pilot point are defined using a multiplier array. A tool will exist that displays the final paramter values based on the pilot point data.
Observations
Beginning with MODFLOW 2000, an Observation Process was provided in MODFLOW that allows the user to input head and flow observations. Simulated equivalents are then automatically computed by MODFLOW, from which residuals can be computed. This is an essential part of any type of calibration exercise. Both head and flow observations can be transient and head observations are allowed to span multiple layers. Flow observations are supported for the GHB, DRN, RIV, and CHD packages. This list will be expanded as more stress packages are added to the data model.
OBSVars | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
OUTNAM | Text | Base file name for the output for the observation process |
ISCALS | Long Integer | Controls printing of the observation-sensitivity tables |
TOMULTH | Double | Time-offset multiplier for head observations |
EVH | Double | Input error variance multiplier for head observations |
IUHOBSV | Long Integer | File unit for saving observation data in a file |
HOBDRY | Double | Value of the simulated equivalent when the observation is omitted because a cell is dry |
TOMULTGB | Double | Time-offset multiplier for general-head-boundary observations |
EVFGB | Double | Error variance multiplier for observations represented by the General-Head Boundary Package |
IUGBOBSV | Long Integer | File unit for saving observation data in a file |
TOMULTDR | Double | Time-offset multiplier for drain observations |
EVFDR | Double | Error variance multiplier for observations represented by the Drain Package |
IUDROBSV | Long Integer | File unit for saving observation data in a file |
TOMULTRV | Double | Time-offset multiplier for river observations |
EVFRV | Double | Error variance multiplier for river observations |
IURVOBSV | Long Integer | File unit for saving observation data in a file |
TOMULTCH | Double | Time-offset multiplier for constant-head flow observations |
EVFCH | Double | Error variance multiplier for constant-head flow observations |
IUCHOBSV | Long Integer | File unit for saving observation data in a file |
TOMULTST | Double | Time-offset multiplier for stream observations |
EVFST | Double | Error variance multiplier for stream observations |
IUSTOBSV | Long Integer | File unit for saving observation data in a file |
TOMULTDT | Double | Time-offset multiplier for drain-return observations |
EVFDT | Double | Error variance multiplier for drain-return observations |
HOB | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HOBID | Long Integer | Head observation ID |
OBSNAM | Text | String used to identify the observation |
IJ | Long Integer | IJ index of the cell in which the head observation is located |
ROFF | Double | Row offset used to locate the observation within a finite-difference cell |
COFF | Double | Column offset used to locate the observation within a finite-difference cell |
ITT | Short Integer | Flag whether head or changes in head are to be used as observations |
HOBLayers | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HOBID | Long Integer | Head observation ID from HOB table |
Layer | Long Integer | Layer |
PR | Double | Proportion of the simulated hydraulic head in layer used to calculate simulated multilayer head |
HOBTimes | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
HOBID | Long Integer | Head observation ID from HOB table |
OBSNAM | Text | Observation name |
IREFSP | Long Integer | Stress period to which the observation time is referenced |
TOFFSET | Double | Time from beginning of stress period IREFSP to the time of the observation |
HOBS | Double | Observed hydraulic head |
HSIM | Double | Simulated hydraulic head (computed head) |
STATh | Double | Value from which the weight is calculated if the observation is head |
STATdd | Double | Value from which the weight is calculated if the observation is the temporal change in head |
STATFLAG | Short Integer | STATFLAG coded value domain |
PLOTSYMBOL | Long Integer | An integer intended to control the symbols used to plot data |
FLOB | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
FLOBID | Long Integer | Flow observation ID |
FLOBType | Text | FLOBType coded value domain |
OBSNAM | Text | Observation name |
IREFSP | Long Integer | Stress period to which the observation time is referenced |
TOFFSET | Double | Time from beginning of stress period IREFSP to the time of the observation |
HOBS | Double | Observed hydraulic head |
HSIM | Double | Simulated hydraulic head (computed head) |
STATISTIC | Double | Value from which the weight for the observation is calculated |
STATFLAG | Short Integer | STATFLAG coded value domain |
PLOTSYMBOL | Long Integer | An integer intended to control the symbols used to plot data |
FLOBFactors | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
FLOBID | Long Integer | Flow observation ID from FLOB table |
IJK | Long Integer | IJK Index |
Factor | Double | Portion of the simulated gain or loss in this cell that is included in the total simulated gain or loss for this cell group |
The OBSVars table is used to store individual variables related to observations. The OUTNAM and ISCALS variables are written to the OBS file. The TOMULT* and EV* variables are written to the HOBS, GBOB, DROB, RVOB, and CHOB files.
The HOB table is used to store the locations of the head observations. The HOBLayers table is used to store a list of layers associated with each observation. In the MODFLOW input file, a list of layers is only provided when there are multiple layers. However, the table is used for all cases (even when there is only one layer) in the interest of simplicity. The layers are stored in the HOBLayers table. The HOBTimes table is used to store the head measurements. For each head observation location, there may be multiple head observations at different points in time. Once again, the table is used even for cases with a single value in the interest of simplicity.
The FLOB table is used to store the flow observations. Each record in this table corresponds to an observation at a particular time defined by the IRESFP and TOFFSET variables. All types of flow observations are stored in the same table and are distinguished using the FLOBType field. The FLOBFactors table is used to identify the entries in the associated stress package table that correspond to the given flow observation. The manner in which the factors are associated with the entries in the stress package file follows the same method as outlined in the MODFLOW file formats. This method relies on the ordering of the items in the list. As a result, it typically makes most sense for the tools associated with these packages to build the entries for both the stress package tables and the flow observations tables at the same time.
The variance-covariance weight matrix option (WTQ array) is not supported for flow observations in this version of the MDM.
SEN and PES Processes
The tables associated with the SEN and PES processes are shown below. The data associated with the Sensitivity process are stored in two places: 1) the parameter variables (BSCAL, LN, and ISENS) are stored in the Params table, and 2) the remaining variables are stored in the SEN table. The PES data are all stored in the PES table. Lines 5-10 in the PES file are not supported. It is assumed that NPNG=0, IPR=0, and MPR=0.
SEN | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
ISENALL | Short Integer | Flag that can override values of ISENS and can deactivate PES process |
IUHEAD | Short Integer | Flag that allows user to choose between using scratch files or memory for storing grid sensitivities |
IPRINTS | Short Integer | Flag indicating how saving and printing of sensitivity arrays are controlled |
ISENSU | Short Integer | Flag that controls whether sensitivity arrays are to be saved and, if so, to what file. |
ISENPU | Short Integer | Flag identifying whether sensitivity arrays are to be printed and, if so, to what file. |
ISENFM | Short Integer | Code indicating the format for printing sensitivity arrays. |
PES | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
MAXITER | Double | See MODFLOW documentation |
MAXCHANGE | Double | See MODFLOW documentation |
TOL | Double | See MODFLOW documentation |
SOSC | Double | See MODFLOW documentation |
IBEFLG | Short Integer | See MODFLOW documentation |
IYCFLG | Short Integer | See MODFLOW documentation |
IOSTAR | Short Integer | See MODFLOW documentation |
NOPT | Short Integer | See MODFLOW documentation |
NFIT | Long Integer | See MODFLOW documentation |
SOSR | Double | See MODFLOW documentation |
RMAR | Double | See MODFLOW documentation |
RMARM | Double | See MODFLOW documentation |
IAP | Short Integer | See MODFLOW documentation |
IPRCOV | Short Integer | See MODFLOW documentation |
IPRINT | Short Integer | See MODFLOW documentation |
LPRINT | Short Integer | See MODFLOW documentation |
CSA | Double | See MODFLOW documentation |
FCONV | Double | See MODFLOW documentation |
LASTX | Double | See MODFLOW documentation |
Output
Native MODFLOW output consists of four general types:
- Head and drawdown files. Binary files listing the computed head and drawdown values grouped by time step (indexed by stress period and time step number). The drawdown file represents the computed head minus the starting head.
- Flow budget files. Binary files listing the cell-by-cell flow terms grouped by time step. This includes three flow numbers for each cell representing flow in each of the axis directions. It also includes set of values for each stress type (RIV, DRN, WEL, etc.).
- Head and flow file (HFF). This is the binary file produced by MODFLOW for use with the MT3D family of contaminant transport codes. It includes both the head and flow data.
- Miscellaneous text output files. MODFLOW produces various text output files including the LST and GLOBAL files.
OutputFiles | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
FileType | Text | "Head", "Drawdown", "CCF" etc. |
Description | Text | Optional longer helpful description |
Format | Text | File format such as ASCII or binary. OutputFormat coded value domain |
Compress | Text | Flag indicating if the file is compressed and, if so, what type of compression is used. "", "zip", "tar" etc. Only used if the file is stored in the File field as a blob |
File | Blob | The file stored as a Blob, or null if the file is not stored in the geodatabase |
Path | Text | Path to the file on disk, or "" |
OutputTime | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
TimeID | Long Integer | Time ID |
SPNum | Long Integer | Stress period number from output file - not SPID from StressPeriods table |
TSNum | Long Integer | Time step number from output file |
TotalTime | Double | Time from 0 to this time |
PeriodTime | Double | Time from beginning of this stress period to this time |
AbsoluteTime | Date | Date/Time of this time |
OutputFlow | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
TimeID | Long Integer | Time ID from OutputTime table |
IJK | Long Integer | IJK Index |
FlowType | Short Integer | Flow type. OutputFlowType coded value domain |
Flow | Double | Flow value |
OutputHead | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
TimeID | Long Integer | Time ID from OutputTime table |
IJK | Long Integer | IJK Index |
Head | Double | Head value |
OutputDrawdown | ||
---|---|---|
Field | Type | Description |
OBJECTID | OID | |
TimeID | Long Integer | Time ID from OutputTime table |
IJK | Long Integer | IJK Index |
Drawdown | Double | Drawdown value |
The OutputHead, OutputDrawdown and OutputFlow tables are used to store the head, drawdown, and cell-to-cell flow output for each cell for each time step. The flow values come from the compact budget file, which also contains flow values for the stress packages.
Since the output for a single MODFLOW simulation can be quite large, it may not be practical or desirable to keep the OutputHead, OutputDrawdown and OutputFlow tables populated at all times. In such cases, a geo-processing tool could be used to parse through the files listed in the OutputFiles table to populate temporary tables for the head and flow solution. Alternatively, geo-processing tools for post-processing could be designed to read directly from the binary MODFLOW output files.
Coded Value Domains
FileType | |
---|---|
Field type: Text | |
Code | Name |
GLOBAL | GLOBAL |
LIST | LIST |
DIS | DIS |
MULT | MULT |
ZONE | ZONE |
BAS6 | BAS6 |
OC | OC |
BCF6 | BCF6 |
LPF | LPF |
HFB6 | HFB6 |
RCH | RCH |
RIV | RIV |
WEL | WEL |
DRN | DRN |
GHB | GHB |
EVT | EVT |
CHD | CHD |
SIP | SIP |
SOR | SOR |
PCG | PCG |
DE4 | DE4 |
IBS | IBS |
LMG | LMG |
GAGE | GAGE |
ETS | ETS |
DRT | DRT |
FHB | FHB |
HYD | HYD |
RES | RES |
MNW | MNW |
DAF | DAF |
DAFG | DAFG |
STR | STR |
KDEP | KDEP |
LVDA | LVDA |
SUB | SUB |
LMT6 | LMT6 |
OBS | OBS |
ADV2 | ADV2 |
CHOB | CHOB |
DROB | DROB |
DTOB | DTOB |
GBOB | GBOB |
HOB | HOB |
RVOB | RVOB |
STOB | STOB |
SEN | SEN |
PES | PES |
DATA(BINARY) | DATA(BINARY) |
DATA | DATA |
DATAGLO(BINARY) | DATAGLO(BINARY) |
DATAGLO | DATAGLO |
TrueFalse | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | False |
1 | True |
TimeUnit | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | undefined (0) |
1 | seconds (1) |
2 | minutes (2) |
3 | hours (3) |
4 | days (4) |
5 | years (5) |
LengthUnit | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | undefined (0) |
1 | feet (1) |
2 | meters (2) |
3 | centimeters (3) |
Direction | |
---|---|
Field type: Text | |
Code | Name |
R | Row |
C | Column |
SteadyState | |
---|---|
Field type: Text | |
Code | Name |
SS | SteadyState |
TR | Transient |
OCVarsFileType | |
---|---|
Field type: Short Integer | |
Code | Name |
1 | 11G10.3 |
2 | 9G13.6 |
3 | 15F7.1 |
4 | 15F7.2 |
5 | 15F7.3 |
6 | 15F7.4 |
7 | 20F5.0 |
8 | 20F5.1 |
9 | 20F5.2 |
10 | 20F5.3 |
11 | 20F5.4 |
12 | 10G11.4 |
13 | 10F6.0 |
14 | 10F6.1 |
15 | 10F6.2 |
16 | 10F6.3 |
17 | 10F6.4 |
18 | 10F6.5 |
19 | 5G12.5 |
20 | 6G11.4 |
21 | 7G9.2 |
BCFMean | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Harmonic mean (0) |
1 | Arithmetic mean (1) |
2 | Logarithmic mean (2) |
3 | Arith t X log(k) (3) |
BCFLayerType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Confined (0) |
1 | Unconfined (1) |
2 | Conf/Unconf (2) |
3 | Conf/Unconf (3) |
LPFLayerType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Confined (0) |
1 | Convertible (1) |
LPFMean | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Harmonic mean (0) |
1 | Arithmetic mean (1) |
2 | Logarithmic mean (2) |
3 | Arith t X log(k) (3) |
RechargeOption | |
---|---|
Field type: Short Integer | |
Code | Name |
1 | Top (1) |
2 | Specified (2) |
3 | Highest Active (3) |
EvapotranspirationOption | |
---|---|
Field type: Short Integer | |
Code | Name |
1 | Top (1) |
2 | Specified (2) |
MUTPCGType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Print max head change and residual each iteration |
1 | Print total number of iterations |
2 | No printing |
3 | Print only if convergence fails |
IOUTAMGType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | No printing |
1 | Scaling and residuals |
2 | Scaling, residuals, storage, time |
3 | Solver, scaling, residuals, storage, time |
ISCType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Rows, columns, layers |
1 | Rows, columns |
2 | Columns, layers |
3 | Rows, layers |
4 | No coarsening |
IOUTGMGType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Solver inputs |
1 | Linear solve |
2 | Convergence history |
3 | Linear solve terminal output |
4 | Convergence history terminal output |
PARTYPE | |
---|---|
Field type: Text | |
Code | Name |
HK | HK |
HANI | HANI |
VK | VK |
VANI | VANI |
SS | SS |
SY | SY |
VKCB | VKCB |
SYTP | SYTP |
HFB | HFB |
RIV | RIV |
RCH | RCH |
Q | Q |
DRN | DRN |
EVT | EVT |
GHB | GHB |
CHD | CHD |
STR | STR |
DRT | DRT |
ETS | ETS |
SFR | SFR |
Custom | Custom |
ParamSource | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Parval |
1 | Pilot Points |
2 | Clusters |
STATFLAG | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Variance [L^2] (0) |
1 | Std. Dev. [L] (1) |
2 | Coeff. of variation [--] (2) |
FLOBType | |
---|---|
Field type: Text | |
Code | Name |
GBOB | GBOB |
DROB | DROB |
RVOB | RVOB |
CHOB | CHOB |
STOB | STOB |
DTOB | DTOB |
OutputFormat | |
---|---|
Field type: Text | |
Code | Name |
ASCII | ASCII |
binary | binary |
May add others in future, like XML, HDF5 etc.
OutputFlowType | |
---|---|
Field type: Short Integer | |
Code | Name |
0 | Right |
1 | Front |
2 | Lower |
3 | Wells |
4 | Drains |
5 | Rivers |
6 | ET |
7 | General Heads |
8 | Recharge |
9 | Constant Heads |
10 | Streams |
11 | Storage |
12 | Lakes |
Managing Multiple Model Runs
In a typical modeling project, dozens, if not hundreds or thousands of model runs are performed. Each run represents a different combination of model inputs and/or grid configuration. While not all of these runs need to be archived, it is useful to archive many of the model runs for future reference or so that one can revisit and update an earlier model run. With the MDM described in this document, model runs could be archived simply by copying the entire simulation feature dataset (including Cell2D, Node, and the MDM tables) for each model run. Each simulation feature data set could be stored in a separate geodatabase to simplify the duplication process.
While duplicating a geodatabase is a simple and effective strategy, it could result in massive storage requirements for large models. Two models runs could be identical except for a single record in a table and yet the entire geodatabase would be duplicated. Fortunately, ArcGIS provides a powerful tool for managing multiple model runs without wasteful duplication of data. This tool is called “versioning” and is described in the following documents:
http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Understanding_versioning http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=What_is_ArcSDE%3F http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=An_overview_of_the_geodatabase_schema_in_SQL_Server
With a versioning strategy, a modeler would first set up a complete model and then turn on versioning and create a new “version”. This initiates the use of a pair of “adds” and “deletes” tables where changes to the database are recorded. In other words, any modifications made to the database by the user are recorded internally in the adds and deletes tables. However, the user continues to directly interact with and edit the database in a normal fashion. The layering of the adds and deletes tables is performed automatically and hidden from the user. Multiple versions can be created and the user can switch back and forth between versions using a simple interface. Versions can be deleted or merged with the original version as desired.
Other Model Types
It is anticipated that in the future the MDM will be expanded to include other models and utilities in the MODFLOW family including MODPATH, ZONEBUDGET, MT3DMS, RT3D, SEAM3D, PHT3D, SEAWAT, etc. Each of these models will share some data with MODFLOW but will require additional tables. As the new models are added to the MDM, the shared tables will be identified and names selected for the new tables that avoid confusion. Linkages will also be identified between models when appropriate.
Limitations
In order to model MODFLOW data in the form of a relational database some simplifications were required. Here is a brief summary of the main limitations and unsupported features of the current version of the MDM.
- Only MODFLOW 2000 and 2005 supported (not MODFLOW-LGR etc).
- Several packages aren't supported (STR, SFR2 etc.).
- Some of the options in the Output Control package aren't supported.
- The variance-covariance weight matrix option (WTQ array) is not supported for flow observations.
- Lines 5-10 in the PES file are not supported and it is assumed that NPNG=0, IPR=0, and MPR=0.
- LAK3 package (v2.0+) - Stages table does not include constituent data for use with MOC3D. i.e., CLAKE(1..NSOL). LAKRates does not include MOC3D solute concentrations.
Versions
- 1.0 - The initial model as it was when MODFLOW Analyst became available in February, 2009
- 2.0 - Include LAK3, STR1, SFR2, HUF2, MNW1 packages, and support for MODFLOW 2005.
See also