-
Notifications
You must be signed in to change notification settings - Fork 156
MODFLOW NetCDF Format
This guide describes the supported formats of MODFLOW 6 NetCDF files. As NetCDF support in MODFLOW 6 is an ongoing development effort, aspects of these formats related specifically to MODFLOW 6 (naming conventions, internal attributes, etc.) are subject to change.
Extended MODFLOW 6 can read and write version 4 (NetCDF-4) NetCDF files. Two different formats are supported for each (input and output) file type: a structured format and a UGRID based unstructured LAYERED MESH format. Each format aims to be cf-conventions compliant.
All MODFLOW 6 NetCDF files correspond to a model. Output files contain arrays for the model dependent variable. Input files can contain package arrays that are supported as inputs from NetCDF files. These variables are indicated with red highlighting in MODFLOW 6 - Description of Input and Output (mf6io.pdf). Currently, supported inputs include GRIDDATA block arrays and PERIOD block arrays for READASARRAYS and READARRAYGRID based packages.
FloPy 4 is the next major version of FloPy, currently under active development. Unlike the existing FloPy export_netcdf() utility — which produces a separate legacy format not compatible with MODFLOW 6 native NetCDF I/O — FloPy 4 is designed from the ground up to create and consume MODFLOW 6 native NetCDF files. It is the recommended Python interface for working with the format described in this document.
Creating input files. flopy4.mf6.netcdf.NetCDFModel.from_model() serializes a model's package arrays to a correctly-annotated NetCDF file. Passing mesh="layered" produces a UGRID Layered Mesh file; omitting it (or passing grid coordinates only) produces a structured file. flopy4.mf6.write_context.WriteContext(use_netcdf=True) then directs sim.write() to reference the NetCDF file rather than writing individual text-format array files.
Reading output files. After running extended MODFLOW 6 (see below), FloPy 4 can open the NetCDF output file directly. For DISV/UGRID output, gwf.output.head returns an xugrid-backed UgridDataArray that carries full mesh geometry, making it straightforward to plot or export to QGIS as a Mesh Layer.
Extended MODFLOW 6 requirement. NetCDF I/O requires the extended MODFLOW 6 build. FloPy 4 examples gate execution of NetCDF based simulations for this reason, which require NetCDF libraries compiled into the binary.
Practical examples covering DIS-based structured grids, DIS-based UGRID layered mesh grids, and DISV-based vertex grids are available in the FloPy 4 repository: twri.py, frenchman-flat.py, and circle.py.
MODFLOW 6 structured NetCDF files support GWF, GWT and GWE DIS based simulations. These files minimally define the x, y, z, and time dimensions for data variables. x, y, and z correspond to ncol, nrow, and nlay of the model discretization. GRIDDATA arrays are dimensioned (z, y, x) and have no time dimension. PERIOD arrays are dimensioned (time, z, y, x), where the time dimension size equals NPER, the number of stress periods. Output files use a time dimension equal to the total number of simulation steps (the sum of NSTP across all stress periods).
MODFLOW 6 UGRID Layered Mesh NetCDF files support GWF, GWT and GWE DIS and DISV based simulations. Each grid based array variable in these file types is split into a set of layer variables. NPF K input data, for example, would be defined in 10 layer data variables when the grid has 10 layers. These files also differ from the structured variants because they contain a set of variables whose purpose is to geometrically define the grid. This is advantageous for displaying the grid itself as well as data associated with the grid in applications that support reading the mesh, such as QGIS.
UGRID layered mesh files minimally define the dimensions nmesh_node, nmesh_face, max_nmesh_face_nodes, x and y. nmesh_node and nmesh_face correspond to number of grid vertices and ncpl, respectively. max_nmesh_face_nodes corresponds to the maximum number of vertices in a cell, 4 when modflow_grid is STRUCTURED. x and y are defined for input data that is associated with the row or column dimensions of a layer, for example DELC and DELR. GRIDDATA arrays are dimensioned (nmesh_face) with no time dimension. PERIOD arrays are dimensioned (time, nmesh_face) where the time dimension size equals NPER. Output files add a time dimension equal to the total number of simulation steps, with dependent variables dimensioned (time, nmesh_face) and split into one variable per layer.
Output NetCDF files contain the model dependent variable (e.g., hydraulic head for GWF, concentration for GWT). They are written once per simulation time step and contain no MODFLOW 6 specific attributes on data variables.
For the structured format, the dependent variable is written as a single array dimensioned (time, z, y, x), where time spans all simulation steps. For the UGRID layered mesh format, the dependent variable is split into one variable per layer (e.g., head_l1, head_l2, ...), each dimensioned (time, nmesh_face). Each layer variable carries mesh and location attributes to associate it with the UGRID mesh topology.
Global attributes on output files include title, source, modflow_grid, modflow_model, history, and Conventions.
MODFLOW 6 NetCDF input files must define MODFLOW 6 specific attributes to be processed correctly. These attributes are defined at both the file (dataset) and variable scope and vary according to the file format. Any variable that is not annotated with the expected attributes will be ignored and as such MODFLOW 6 NetCDF input files can contain data not intended for MODFLOW 6.
There are no specific requirements related to variable naming other than from the conventions themselves.
Two file scoped attributes are required for structured NetCDF inputs: modflow_grid and modflow_model. modflow_grid describes the MODFLOW 6 discretization type and modflow_model describes the model type and name. For structured inputs, modflow_grid should always be set to STRUCTURED. The modflow_model attribute should be set to MODFLOW model type: model name, for example: GWF6: GWF-VSC01-BND
Data variables intended to be read as MODFLOW 6 package input must be annotated correctly with MODFLOW 6 input attributes. Variables without the expected annotation will be ignored. The modflow_input attribute is always required while the modflow_iaux attribute is required for auxiliary variables. Use of these attributes are described in more detail below.
File scoped attributes modflow_grid and modflow_model are required as described for the structured input. DIS based simulation input should set modflow_grid to STRUCTURED, while DISV based simulation input should set modflow_grid to VERTEX. An additional mesh attribute is required for UGRID based NetCDF input files. UGRID Layered Mesh files should set this attribute to LAYERED.
Data variables intended to be read as MODFLOW 6 package input must be annotated correctly with MODFLOW 6 input attributes. Variables without the expected annotation will be ignored. The modflow_input attribute is always required while the modflow_iaux attribute is required for auxiliary variables. Use of these attributes are described in more detail below. In addition, UGRID layered mesh input parameters must define the layer attribute and set it to the integer value of the layer that the data is associated with.
The modflow_input variable scoped attribute is always required and corresponds to the variable model, package and input tag name. The model name should match the name in the modflow_model file scoped attribute. This name should also match a model name in the mfsim.nam models block. The package name is the MODFLOW 6 package name or type, described next. Base packages should use the package type as name, e.g. NPF or DISV. Stress packages should use the package name in the model name file packages block, or the FloPy generated name when the packages block does not define a name.
The modflow_iaux variable is an additional attribute required only for auxiliary array variables. MODFLOW 6 auxiliary variables are configured with the AUXILIARY keyword in supported options blocks. This keyword is associated with a list of auxiliary names, for example TEMPERATURE followed by SALINITY. modflow_iaux should be set to the position in the auxiliary list for each input aux array. Here, any input data associated with the TEMPERATURE auxiliary should set modflow_iaux to 1 while any SALINITY array should set modflow_iaux to 2.
The examples below show ASCII header dumps produced by the ncdump NetCDF command line utility. Dataset dimensions are listed first, followed by variable definitions with their attributes. Dataset scoped (global) attributes appear in the last section.
The following is the header for a structured GWF output file. The dependent variable head is dimensioned (time, z, y, x) where time equals the total number of simulation steps.
netcdf gwf_henrynr01 {
dimensions:
bnd = 2 ;
time = 1250 ;
z = 20 ;
y = 1 ;
x = 40 ;
variables:
double time(time) ;
time:calendar = "standard" ;
time:units = "days since 1970-01-01T00:00:00" ;
time:axis = "T" ;
time:standard_name = "time" ;
time:long_name = "time" ;
double z(z) ;
z:units = "layer" ;
z:long_name = "layer number" ;
double y(y) ;
y:units = "m" ;
y:axis = "Y" ;
y:standard_name = "projection_y_coordinate" ;
y:long_name = "Northing" ;
y:bounds = "y_bnds" ;
double y_bnds(y, bnd) ;
double x(x) ;
x:units = "m" ;
x:axis = "X" ;
x:standard_name = "projection_x_coordinate" ;
x:long_name = "Easting" ;
x:bounds = "x_bnds" ;
double x_bnds(x, bnd) ;
double head(time, z, y, x) ;
head:units = "m" ;
head:standard_name = "" ;
head:long_name = "head" ;
head:_FillValue = 1.e+30 ;
// global attributes:
:title = "GWF_HENRYNR01 hydraulic head" ;
:source = "MODFLOW 6 6.8.0.dev0 (preliminary) 02/06/2026" ;
:modflow_grid = "STRUCTURED" ;
:modflow_model = "GWF6: GWF_HENRYNR01" ;
:history = "first created 2026/3/18 7:58:24.524" ;
:Conventions = "CF-1.11" ;
}
The following is the header for the corresponding structured GWF input file. The file contains GRIDDATA arrays (e.g., dis_botm, npf_k) dimensioned (z, y, x) and PERIOD arrays (e.g., wel-1_q) dimensioned (time, z, y, x). For input files, the time dimension equals NPER, the number of stress periods. Each input variable carries a modflow_input attribute identifying the model, package, and parameter. Auxiliary variables additionally carry a modflow_iaux attribute.
Note that even though this model has 20 layers, a single structured variable covers all layers. As the input file for the model below has 20 layers, the number of variables in a UGRID based representation of the same input data would be more than 20 times higher, which would include grid variables. The size of the files would be more comparable, however, as the amount of user input data would be the same.
netcdf gwf_henrynr01.structured {
dimensions:
bnd = 2 ;
time = 1001 ;
z = 20 ;
y = 1 ;
x = 40 ;
variables:
double time(time) ;
time:calendar = "standard" ;
time:units = "days since 1970-01-01T00:00:00" ;
time:axis = "T" ;
time:standard_name = "time" ;
time:long_name = "time" ;
double z(z) ;
z:units = "layer" ;
z:long_name = "layer number" ;
double y(y) ;
y:units = "m" ;
y:axis = "Y" ;
y:standard_name = "projection_y_coordinate" ;
y:long_name = "Northing" ;
y:bounds = "y_bnds" ;
double y_bnds(y, bnd) ;
double x(x) ;
x:units = "m" ;
x:axis = "X" ;
x:standard_name = "projection_x_coordinate" ;
x:long_name = "Easting" ;
x:bounds = "x_bnds" ;
double x_bnds(x, bnd) ;
double wel-1_q(time, z, y, x) ;
wel-1_q:_FillValue = 3.e+30 ;
wel-1_q:units = "m" ;
wel-1_q:long_name = "well rate" ;
wel-1_q:modflow_input = "GWF_HENRYNR01/WEL-1/Q" ;
double wel-1_concentration(time, z, y, x) ;
wel-1_concentration:_FillValue = 3.e+30 ;
wel-1_concentration:units = "m" ;
wel-1_concentration:long_name = "well auxiliary variable iaux concentration" ;
wel-1_concentration:modflow_input = "GWF_HENRYNR01/WEL-1/AUX" ;
wel-1_concentration:modflow_iaux = 1 ;
double drn-1_elev(time, z, y, x) ;
drn-1_elev:_FillValue = 3.e+30 ;
drn-1_elev:units = "m" ;
drn-1_elev:long_name = "drain elevation" ;
drn-1_elev:modflow_input = "GWF_HENRYNR01/DRN-1/ELEV" ;
double drn-1_cond(time, z, y, x) ;
drn-1_cond:_FillValue = 3.e+30 ;
drn-1_cond:units = "m" ;
drn-1_cond:long_name = "drain conductance" ;
drn-1_cond:modflow_input = "GWF_HENRYNR01/DRN-1/COND" ;
double drn-1_concentration(time, z, y, x) ;
drn-1_concentration:_FillValue = 3.e+30 ;
drn-1_concentration:units = "m" ;
drn-1_concentration:long_name = "drain auxiliary variable iaux concentration" ;
drn-1_concentration:modflow_input = "GWF_HENRYNR01/DRN-1/AUX" ;
drn-1_concentration:modflow_iaux = 1 ;
double ghb-1_bhead(time, z, y, x) ;
ghb-1_bhead:_FillValue = 3.e+30 ;
ghb-1_bhead:units = "m" ;
ghb-1_bhead:long_name = "boundary head" ;
ghb-1_bhead:modflow_input = "GWF_HENRYNR01/GHB-1/BHEAD" ;
double ghb-1_cond(time, z, y, x) ;
ghb-1_cond:_FillValue = 3.e+30 ;
ghb-1_cond:units = "m" ;
ghb-1_cond:long_name = "boundary conductance" ;
ghb-1_cond:modflow_input = "GWF_HENRYNR01/GHB-1/COND" ;
double ghb-1_concentration(time, z, y, x) ;
ghb-1_concentration:_FillValue = 3.e+30 ;
ghb-1_concentration:units = "m" ;
ghb-1_concentration:long_name = "general-head boundary auxiliary variable iaux concentration" ;
ghb-1_concentration:modflow_input = "GWF_HENRYNR01/GHB-1/AUX" ;
ghb-1_concentration:modflow_iaux = 1 ;
double ghb-1_density(time, z, y, x) ;
ghb-1_density:_FillValue = 3.e+30 ;
ghb-1_density:units = "m" ;
ghb-1_density:long_name = "general-head boundary auxiliary variable iaux density" ;
ghb-1_density:modflow_input = "GWF_HENRYNR01/GHB-1/AUX" ;
ghb-1_density:modflow_iaux = 2 ;
double dis_delr(x) ;
dis_delr:_FillValue = 9.96920996838687e+36 ;
dis_delr:long_name = "spacing along a row" ;
dis_delr:modflow_input = "GWF_HENRYNR01/DIS/DELR" ;
double dis_delc(y) ;
dis_delc:_FillValue = 9.96920996838687e+36 ;
dis_delc:long_name = "spacing along a column" ;
dis_delc:modflow_input = "GWF_HENRYNR01/DIS/DELC" ;
double dis_top(y, x) ;
dis_top:_FillValue = 9.96920996838687e+36 ;
dis_top:long_name = "cell top elevation" ;
dis_top:modflow_input = "GWF_HENRYNR01/DIS/TOP" ;
double dis_botm(z, y, x) ;
dis_botm:_FillValue = 9.96920996838687e+36 ;
dis_botm:long_name = "cell bottom elevation" ;
dis_botm:modflow_input = "GWF_HENRYNR01/DIS/BOTM" ;
int dis_idomain(z, y, x) ;
dis_idomain:_FillValue = -2147483647 ;
dis_idomain:long_name = "idomain existence array" ;
dis_idomain:modflow_input = "GWF_HENRYNR01/DIS/IDOMAIN" ;
int npf_icelltype(z, y, x) ;
npf_icelltype:_FillValue = -2147483647 ;
npf_icelltype:long_name = "confined or convertible indicator" ;
npf_icelltype:modflow_input = "GWF_HENRYNR01/NPF/ICELLTYPE" ;
double npf_k(z, y, x) ;
npf_k:_FillValue = 9.96920996838687e+36 ;
npf_k:long_name = "hydraulic conductivity (L/T)" ;
npf_k:modflow_input = "GWF_HENRYNR01/NPF/K" ;
int sto_iconvert(z, y, x) ;
sto_iconvert:_FillValue = -2147483647 ;
sto_iconvert:long_name = "convertible indicator" ;
sto_iconvert:modflow_input = "GWF_HENRYNR01/STO/ICONVERT" ;
double sto_ss(z, y, x) ;
sto_ss:_FillValue = 9.96920996838687e+36 ;
sto_ss:long_name = "specific storage" ;
sto_ss:modflow_input = "GWF_HENRYNR01/STO/SS" ;
double sto_sy(z, y, x) ;
sto_sy:_FillValue = 9.96920996838687e+36 ;
sto_sy:long_name = "specific yield" ;
sto_sy:modflow_input = "GWF_HENRYNR01/STO/SY" ;
double ic_strt(z, y, x) ;
ic_strt:_FillValue = 9.96920996838687e+36 ;
ic_strt:long_name = "starting head" ;
ic_strt:modflow_input = "GWF_HENRYNR01/IC/STRT" ;
// global attributes:
:title = "GWF_HENRYNR01 hydraulic head array input" ;
:source = "MODFLOW 6 6.8.0.dev0 (preliminary) 02/06/2026" ;
:modflow_grid = "STRUCTURED" ;
:modflow_model = "GWF6: GWF_HENRYNR01" ;
:history = "first created 2026/3/18 7:58:20.755" ;
:Conventions = "CF-1.11" ;
}
The following is the header for a UGRID Layered Mesh GWT output file with 1 layer. The dependent variable is split into one variable per layer (concentration_l1), each dimensioned (time, nmesh_face). Each layer variable carries mesh and location attributes that associate it with the UGRID mesh topology variable. The time dimension equals the total number of simulation steps.
netcdf gwt_dsp01a {
dimensions:
time = 200 ;
nmesh_node = 202 ;
nmesh_face = 100 ;
max_nmesh_face_nodes = 4 ;
x = 100 ;
y = 1 ;
variables:
double time(time) ;
time:calendar = "standard" ;
time:units = "days since 2041-01-01T00:00:00-05:00" ;
time:axis = "T" ;
time:standard_name = "time" ;
time:long_name = "time" ;
int mesh ;
mesh:cf_role = "mesh_topology" ;
mesh:long_name = "2D mesh topology" ;
mesh:topology_dimension = 2 ;
mesh:face_dimension = "nmesh_face" ;
mesh:node_coordinates = "mesh_node_x mesh_node_y" ;
mesh:face_coordinates = "mesh_face_x mesh_face_y" ;
mesh:face_node_connectivity = "mesh_face_nodes" ;
double mesh_node_x(nmesh_node) ;
mesh_node_x:units = "m" ;
mesh_node_x:standard_name = "projection_x_coordinate" ;
mesh_node_x:long_name = "Easting" ;
double mesh_node_y(nmesh_node) ;
mesh_node_y:units = "m" ;
mesh_node_y:standard_name = "projection_y_coordinate" ;
mesh_node_y:long_name = "Northing" ;
double mesh_face_x(nmesh_face) ;
mesh_face_x:units = "m" ;
mesh_face_x:standard_name = "projection_x_coordinate" ;
mesh_face_x:long_name = "Easting" ;
mesh_face_x:bounds = "mesh_face_xbnds" ;
double mesh_face_xbnds(nmesh_face, max_nmesh_face_nodes) ;
double mesh_face_y(nmesh_face) ;
mesh_face_y:units = "m" ;
mesh_face_y:standard_name = "projection_y_coordinate" ;
mesh_face_y:long_name = "Northing" ;
mesh_face_y:bounds = "mesh_face_ybnds" ;
double mesh_face_ybnds(nmesh_face, max_nmesh_face_nodes) ;
int mesh_face_nodes(nmesh_face, max_nmesh_face_nodes) ;
mesh_face_nodes:cf_role = "face_node_connectivity" ;
mesh_face_nodes:long_name = "Vertices bounding cell (counterclockwise)" ;
mesh_face_nodes:_FillValue = -2147483647 ;
mesh_face_nodes:start_index = 1 ;
double concentration_l1(time, nmesh_face) ;
concentration_l1:units = "m" ;
concentration_l1:standard_name = "" ;
concentration_l1:long_name = "concentration (layer 1)" ;
concentration_l1:_FillValue = 1.e+30 ;
concentration_l1:mesh = "mesh" ;
concentration_l1:location = "face" ;
// global attributes:
:title = "GWT_DSP01A concentration" ;
:source = "MODFLOW 6 6.8.0.dev0 (preliminary) 02/06/2026" ;
:modflow_grid = "STRUCTURED" ;
:mesh = "LAYERED" ;
:modflow_model = "GWT6: GWT_DSP01A" ;
:history = "first created 2026/3/18 7:53:3.557" ;
:Conventions = "CF-1.11 UGRID-1.0" ;
}
The following is the header for the corresponding UGRID Layered Mesh GWT input file with 1 layer. This file contains only GRIDDATA arrays, so no time dimension is present. Each per-layer variable carries a layer attribute set to the layer number and a modflow_input attribute identifying the model, package, and parameter. For models with multiple layers, each layer-dependent parameter appears as a separate variable (e.g., dis_botm_l1, dis_botm_l2, ...).
netcdf gwt_dsp01a.ugrid {
dimensions:
nmesh_node = 202 ;
nmesh_face = 100 ;
max_nmesh_face_nodes = 4 ;
x = 100 ;
y = 1 ;
variables:
int mesh ;
mesh:cf_role = "mesh_topology" ;
mesh:long_name = "2D mesh topology" ;
mesh:topology_dimension = 2 ;
mesh:face_dimension = "nmesh_face" ;
mesh:node_coordinates = "mesh_node_x mesh_node_y" ;
mesh:face_coordinates = "mesh_face_x mesh_face_y" ;
mesh:face_node_connectivity = "mesh_face_nodes" ;
double mesh_node_x(nmesh_node) ;
mesh_node_x:units = "m" ;
mesh_node_x:standard_name = "projection_x_coordinate" ;
mesh_node_x:long_name = "Easting" ;
double mesh_node_y(nmesh_node) ;
mesh_node_y:units = "m" ;
mesh_node_y:standard_name = "projection_y_coordinate" ;
mesh_node_y:long_name = "Northing" ;
double mesh_face_x(nmesh_face) ;
mesh_face_x:units = "m" ;
mesh_face_x:standard_name = "projection_x_coordinate" ;
mesh_face_x:long_name = "Easting" ;
mesh_face_x:bounds = "mesh_face_xbnds" ;
double mesh_face_xbnds(nmesh_face, max_nmesh_face_nodes) ;
double mesh_face_y(nmesh_face) ;
mesh_face_y:units = "m" ;
mesh_face_y:standard_name = "projection_y_coordinate" ;
mesh_face_y:long_name = "Northing" ;
mesh_face_y:bounds = "mesh_face_ybnds" ;
double mesh_face_ybnds(nmesh_face, max_nmesh_face_nodes) ;
int mesh_face_nodes(nmesh_face, max_nmesh_face_nodes) ;
mesh_face_nodes:cf_role = "face_node_connectivity" ;
mesh_face_nodes:long_name = "Vertices bounding cell (counterclockwise)" ;
mesh_face_nodes:_FillValue = -2147483647 ;
mesh_face_nodes:start_index = 1 ;
double dis_delr(x) ;
dis_delr:_FillValue = 9.96920996838687e+36 ;
dis_delr:long_name = "spacing along a row" ;
dis_delr:modflow_input = "GWT_DSP01A/DIS/DELR" ;
double dis_delc(y) ;
dis_delc:_FillValue = 9.96920996838687e+36 ;
dis_delc:long_name = "spacing along a column" ;
dis_delc:modflow_input = "GWT_DSP01A/DIS/DELC" ;
double dis_top(nmesh_face) ;
dis_top:_FillValue = 9.96920996838687e+36 ;
dis_top:long_name = "cell top elevation" ;
dis_top:modflow_input = "GWT_DSP01A/DIS/TOP" ;
double dis_botm_l1(nmesh_face) ;
dis_botm_l1:_FillValue = 9.96920996838687e+36 ;
dis_botm_l1:long_name = "cell bottom elevation layer 1" ;
dis_botm_l1:modflow_input = "GWT_DSP01A/DIS/BOTM" ;
dis_botm_l1:layer = 1 ;
int dis_idomain_l1(nmesh_face) ;
dis_idomain_l1:_FillValue = -2147483647 ;
dis_idomain_l1:long_name = "idomain existence array layer 1" ;
dis_idomain_l1:modflow_input = "GWT_DSP01A/DIS/IDOMAIN" ;
dis_idomain_l1:layer = 1 ;
double ic_strt_l1(nmesh_face) ;
ic_strt_l1:_FillValue = 9.96920996838687e+36 ;
ic_strt_l1:long_name = "starting concentration layer 1" ;
ic_strt_l1:modflow_input = "GWT_DSP01A/IC/STRT" ;
ic_strt_l1:layer = 1 ;
double dsp_diffc_l1(nmesh_face) ;
dsp_diffc_l1:_FillValue = 9.96920996838687e+36 ;
dsp_diffc_l1:long_name = "effective molecular diffusion coefficient layer 1" ;
dsp_diffc_l1:modflow_input = "GWT_DSP01A/DSP/DIFFC" ;
dsp_diffc_l1:layer = 1 ;
double dsp_alh_l1(nmesh_face) ;
dsp_alh_l1:_FillValue = 9.96920996838687e+36 ;
dsp_alh_l1:long_name = "longitudinal dispersivity in horizontal direction layer 1" ;
dsp_alh_l1:modflow_input = "GWT_DSP01A/DSP/ALH" ;
dsp_alh_l1:layer = 1 ;
double dsp_alv_l1(nmesh_face) ;
dsp_alv_l1:_FillValue = 9.96920996838687e+36 ;
dsp_alv_l1:long_name = "longitudinal dispersivity in vertical direction layer 1" ;
dsp_alv_l1:modflow_input = "GWT_DSP01A/DSP/ALV" ;
dsp_alv_l1:layer = 1 ;
double dsp_ath1_l1(nmesh_face) ;
dsp_ath1_l1:_FillValue = 9.96920996838687e+36 ;
dsp_ath1_l1:long_name = "transverse dispersivity in horizontal direction layer 1" ;
dsp_ath1_l1:modflow_input = "GWT_DSP01A/DSP/ATH1" ;
dsp_ath1_l1:layer = 1 ;
double dsp_atv_l1(nmesh_face) ;
dsp_atv_l1:_FillValue = 9.96920996838687e+36 ;
dsp_atv_l1:long_name = "transverse dispersivity when flow is in vertical direction layer 1" ;
dsp_atv_l1:modflow_input = "GWT_DSP01A/DSP/ATV" ;
dsp_atv_l1:layer = 1 ;
// global attributes:
:title = "GWT_DSP01A concentration array input" ;
:source = "MODFLOW 6 6.8.0.dev0 (preliminary) 02/06/2026" ;
:modflow_grid = "STRUCTURED" ;
:mesh = "LAYERED" ;
:modflow_model = "GWT6: GWT_DSP01A" ;
:history = "first created 2026/3/18 7:53:6.729" ;
:Conventions = "CF-1.11 UGRID-1.0" ;
}