28 character(len=*) :: nc_fname
31 logical(LGP) :: exists
37 inquire (file=nc_fname, exist=exists)
38 if (.not. exists)
then
39 write (
errmsg,
'(a,a,a)')
'Specified NetCDF input file does &
40 ¬ exist [file=', trim(nc_fname),
'].'
56 character(len=*),
intent(in) :: modeltype
57 character(len=*),
intent(in) :: modelname
59 character(len=*),
intent(in) :: input_name
60 integer(I4B),
intent(in) :: varid
61 integer(I4B),
intent(in) :: iout
62 character(len=NETCDF_ATTR_STRLEN) :: input_str
63 character(len=LENCOMPONENTNAME) :: c_name, sc_name
64 character(len=LINELENGTH) :: mempath, varname
65 integer(I4B) :: layer, iaux, mf6_layer, mf6_iaux, idx
66 logical(LGP) :: success
77 if (nf90_get_att(nc_vars%ncid, varid,
'modflow_input', &
78 input_str) == nf90_noerr)
then
82 success = (idx > 1 .and. idx < len_trim(input_str))
84 mempath = input_str(:idx - 1)
85 varname = input_str(idx + 1:)
96 if (nf90_get_att(nc_vars%ncid, varid, &
97 'layer', mf6_layer) == nf90_noerr)
then
102 if (nf90_get_att(nc_vars%ncid, varid, &
103 'modflow_iaux', mf6_iaux) == nf90_noerr)
then
108 call nc_vars%add(sc_name, varname, layer, iaux, varid)
110 errmsg =
'NetCDF variable invalid modflow_input attribute: "'// &
111 trim(input_str)//
'".'
123 character(len=*),
intent(in) :: modeltype
124 character(len=*),
intent(in) :: modelname
125 character(len=*),
intent(in) :: input_name
126 character(len=*),
intent(in) :: nc_fname
127 integer(I4B),
intent(in) :: ncid
128 character(len=NETCDF_ATTR_STRLEN) :: grid, mesh, nctype
129 integer(I4B) :: mesh_ierr
137 if (nf90_get_att(ncid, nf90_global,
"modflow_grid", &
138 grid) == nf90_noerr)
then
140 mesh_ierr = nf90_get_att(ncid, nf90_global,
"modflow_mesh", mesh)
141 if (mesh_ierr /= nf90_noerr)
then
144 mesh_ierr = nf90_get_att(ncid, nf90_global,
"mesh", mesh)
146 if (mesh_ierr == nf90_noerr)
then
148 if (mesh ==
'LAYERED')
then
149 nctype =
'LAYERED MESH'
151 errmsg =
'NetCDF unsupported mesh type: "'//trim(mesh)//
'".'
155 else if (grid ==
'STRUCTURED')
then
156 nctype =
'STRUCTURED'
157 else if (grid ==
'VERTEX' .or. grid ==
'LAYERED MESH')
then
158 warnmsg =
'Verify "modflow_grid" and "modflow_mesh" global &
159 &attributes in file: '//trim(nc_fname)
161 nctype =
'LAYERED MESH'
164 errmsg =
'NetCDF input file global attribute "modflow_grid" not found.'
173 nc_vars, nc_fname, ncid, iout)
175 character(len=*),
intent(in) :: modeltype
176 character(len=*),
intent(in) :: modelname
177 character(len=*),
intent(in) :: input_name
179 character(len=*),
intent(in) :: nc_fname
180 integer(I4B),
intent(in) :: ncid
181 integer(I4B),
intent(in) :: iout
182 integer(I4B) :: ndim, nvar, nattr, unlimdimid
183 integer(I4B),
dimension(:),
allocatable :: varids
184 character(len=LINELENGTH) :: grid
185 integer(I4B) :: iparam
191 call nc_vars%init(modelname, nc_fname, ncid, grid)
194 call nf_verify(nf90_inquire(ncid, ndim, nvar, nattr, unlimdimid), &
198 allocate (varids(nvar))
199 call nf_verify(nf90_inq_varids(ncid, nvar, varids), nc_vars%nc_fname)
203 varids(iparam), iout)
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lencomponentname
maximum length of a component name
This module defines variable data types.
character(len=lenmemseparator), parameter mempathseparator
used to build up the memory address for the stored variables
subroutine split_mem_path(mem_path, component, subcomponent)
Split the memory path into component(s)
This module contains the NCContextBuildModule.
integer(i4b) function, public open_ncfile(nc_fname, iout)
open netcdf file
subroutine add_package_var(modeltype, modelname, nc_vars, input_name, varid, iout)
add a package input variable to nc_vars structure
character(len=netcdf_attr_strlen) function verify_global_attr(modeltype, modelname, input_name, nc_fname, ncid)
verify global attribute modflow_grid is present and return value
subroutine, public create_netcdf_context(modeltype, modelname, input_name, nc_vars, nc_fname, ncid, iout)
create internal description of modflow6 input variables in netcdf file
This module contains the NCFileVarsModule.
This module contains the NetCDFCommonModule.
integer(i4b), parameter, public netcdf_attr_strlen
subroutine, public nf_verify(res, nc_fname)
error check a netcdf-fortran interface call
integer(i4b) function, public nc_fopen(nc_fname, iout)
Open netcdf file.
This module contains simulation methods.
subroutine, public store_warning(msg, substring)
Store warning message.
subroutine, public store_error(msg, terminate)
Store an error message.
subroutine, public store_error_filename(filename, terminate)
Store the erroring file name.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
character(len=maxcharlen) warnmsg
warning message string
This module contains the SourceCommonModule.
character(len=lencomponentname) function, public idm_subcomponent_type(component, subcomponent)
component from package or model type
character(len=lenpackagename) function, public idm_subcomponent_name(component_type, subcomponent_type, sc_name)
model package subcomponent name
Type describing modflow6 input variables in model NetCDF file.