MODFLOW 6  version 6.8.0.dev0
USGS Modular Hydrologic Model
meshmodelmodule Module Reference

This module contains the MeshModelModule. More...

Data Types

type  meshncdimidtype
 type for storing model export dimension ids More...
 
type  meshncvaridtype
 type for storing model export variable ids More...
 
type  meshmodeltype
 base ugrid netcdf export type More...
 
interface  nc_array_export_if
 abstract interfaces for derived ugrid netcd export types More...
 
type  mesh2dmodeltype
 

Functions/Subroutines

subroutine mesh_init (this, modelname, modeltype, modelfname, nc_fname, disenum, nctype, lenuni, iout)
 initialize More...
 
subroutine mesh_destroy (this)
 initialize More...
 
subroutine df_export (this)
 define timeseries input variables More...
 
subroutine export_df (this, export_pkg)
 define export package More...
 
subroutine create_timeseries (this, idt, iparam, iaux, layer, export_pkg)
 create timeseries export variable More...
 
subroutine add_global_att (this)
 create file (group) attributes More...
 
subroutine export_input_arrays (this, pkgtype, pkgname, mempath, param_dfns)
 write package gridded input data More...
 
subroutine add_pkg_data (this)
 determine packages to write gridded input More...
 
subroutine define_dependent (this)
 create the model layer dependent variables More...
 
subroutine define_gridmap (this)
 create the file grid mapping container variable More...
 
subroutine create_mesh (this)
 create the file mesh container variable More...
 
subroutine, public ncvar_chunk (ncid, varid, chunk_face, nc_fname)
 define variable chunking More...
 
subroutine, public ncvar_deflate (ncid, varid, deflate, shuffle, nc_fname)
 define variable compression More...
 
subroutine, public ncvar_gridmap (ncid, varid, gridmap_name, nc_fname)
 put variable gridmap attributes More...
 
subroutine, public ncvar_mf6attr (ncid, varid, layer, iaux, nc_tag, nc_fname)
 put variable internal attributes More...
 

Detailed Description

This module defines a base class for UGRID based (mesh) model netcdf exports. It is dependent on external netcdf libraries.

Function/Subroutine Documentation

◆ add_global_att()

subroutine meshmodelmodule::add_global_att ( class(meshmodeltype), intent(inout)  this)

Definition at line 314 of file MeshNCModel.f90.

315  class(MeshModelType), intent(inout) :: this
316  ! file scoped title
317  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'title', &
318  this%annotation%title), this%nc_fname)
319  ! source (MODFLOW 6)
320  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'source', &
321  this%annotation%source), this%nc_fname)
322  ! grid type (MODFLOW 6)
323  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'modflow_grid', &
324  this%annotation%grid), this%nc_fname)
325  ! mesh type (MODFLOW 6)
326  if (this%annotation%mesh /= '') then
327  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'mesh', &
328  this%annotation%mesh), this%nc_fname)
329 
330  end if
331  ! MODFLOW 6 model type
332  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'modflow_model', &
333  this%annotation%model), this%nc_fname)
334  ! generation datetime
335  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'history', &
336  this%annotation%history), this%nc_fname)
337  ! supported conventions
338  call nf_verify(nf90_put_att(this%ncid, nf90_global, 'Conventions', &
339  this%annotation%conventions), &
340  this%nc_fname)
Here is the call graph for this function:

◆ add_pkg_data()

subroutine meshmodelmodule::add_pkg_data ( class(meshmodeltype), intent(inout)  this)

Definition at line 372 of file MeshNCModel.f90.

379  class(MeshModelType), intent(inout) :: this
380  character(LENCOMPONENTNAME) :: ptype, pname, pkgtype
381  character(len=LENMEMPATH) :: input_mempath
382  type(CharacterStringType), dimension(:), contiguous, &
383  pointer :: pkgtypes => null()
384  type(CharacterStringType), dimension(:), contiguous, &
385  pointer :: pkgnames => null()
386  type(CharacterStringType), dimension(:), contiguous, &
387  pointer :: mempaths => null()
388  type(InputParamDefinitionType), dimension(:), pointer :: param_dfns
389  character(len=LENMEMPATH) :: mempath
390  integer(I4B) :: n
391  integer(I4B), pointer :: export_arrays
392  logical(LGP) :: found
393 
394  input_mempath = create_mem_path(component=this%modelname, context=idm_context)
395 
396  ! set pointers to model path package info
397  call mem_setptr(pkgtypes, 'PKGTYPES', input_mempath)
398  call mem_setptr(pkgnames, 'PKGNAMES', input_mempath)
399  call mem_setptr(mempaths, 'MEMPATHS', input_mempath)
400 
401  allocate (export_arrays)
402 
403  do n = 1, size(mempaths)
404  ! initialize export_arrays
405  export_arrays = 0
406 
407  ! set package attributes
408  mempath = mempaths(n)
409  pname = pkgnames(n)
410  ptype = pkgtypes(n)
411 
412  ! export input arrays
413  if (mempath /= '') then
414  ! update export
415  call mem_set_value(export_arrays, 'EXPORT_NC', mempath, found, &
416  release=.false.)
417  if (export_arrays > 0) then
418  pkgtype = idm_subcomponent_type(this%modeltype, ptype)
419  param_dfns => param_definitions(this%modeltype, pkgtype)
420  call this%export_input_arrays(ptype, pname, mempath, param_dfns)
421  end if
422  end if
423  end do
424 
425  ! cleanup
426  deallocate (export_arrays)
type(inputparamdefinitiontype) function, dimension(:), pointer, public param_definitions(component, subcomponent)
logical function, public idm_multi_package(component, subcomponent)
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
This module contains simulation variables.
Definition: SimVariables.f90:9
character(len=linelength) idm_context
This module contains the SourceCommonModule.
Definition: SourceCommon.f90:7
character(len=lencomponentname) function, public idm_subcomponent_type(component, subcomponent)
component from package or model type
Here is the call graph for this function:

◆ create_mesh()

subroutine meshmodelmodule::create_mesh ( class(mesh2dmodeltype), intent(inout)  this)
private

Definition at line 524 of file MeshNCModel.f90.

525  class(Mesh2dModelType), intent(inout) :: this
526 
527  ! create mesh container variable
528  call nf_verify(nf90_def_var(this%ncid, this%mesh_name, nf90_int, &
529  this%var_ids%mesh), this%nc_fname)
530 
531  ! assign container variable attributes
532  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, 'cf_role', &
533  'mesh_topology'), this%nc_fname)
534  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, 'long_name', &
535  '2D mesh topology'), this%nc_fname)
536  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, &
537  'topology_dimension', 2), this%nc_fname)
538  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, 'face_dimension', &
539  'nmesh_face'), this%nc_fname)
540  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, &
541  'node_coordinates', 'mesh_node_x mesh_node_y'), &
542  this%nc_fname)
543  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, &
544  'face_coordinates', 'mesh_face_x mesh_face_y'), &
545  this%nc_fname)
546  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh, &
547  'face_node_connectivity', 'mesh_face_nodes'), &
548  this%nc_fname)
549 
550  ! create mesh x node (mesh vertex) variable
551  call nf_verify(nf90_def_var(this%ncid, 'mesh_node_x', nf90_double, &
552  (/this%dim_ids%nmesh_node/), &
553  this%var_ids%mesh_node_x), this%nc_fname)
554 
555  ! assign mesh x node variable attributes
556  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_x, &
557  'units', this%lenunits), this%nc_fname)
558  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_x, &
559  'standard_name', 'projection_x_coordinate'), &
560  this%nc_fname)
561  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_x, &
562  'long_name', 'Easting'), this%nc_fname)
563 
564  if (this%gridmap_name /= '') then
565  ! associate with projection
566  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_x, &
567  'grid_mapping', this%gridmap_name), &
568  this%nc_fname)
569  end if
570 
571  ! create mesh y node (mesh vertex) variable
572  call nf_verify(nf90_def_var(this%ncid, 'mesh_node_y', nf90_double, &
573  (/this%dim_ids%nmesh_node/), &
574  this%var_ids%mesh_node_y), this%nc_fname)
575 
576  ! assign mesh y variable attributes
577  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_y, &
578  'units', this%lenunits), this%nc_fname)
579  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_y, &
580  'standard_name', 'projection_y_coordinate'), &
581  this%nc_fname)
582  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_y, &
583  'long_name', 'Northing'), this%nc_fname)
584 
585  if (this%gridmap_name /= '') then
586  ! associate with projection
587  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_node_y, &
588  'grid_mapping', this%gridmap_name), &
589  this%nc_fname)
590  end if
591 
592  ! create mesh x face (cell vertex) variable
593  call nf_verify(nf90_def_var(this%ncid, 'mesh_face_x', nf90_double, &
594  (/this%dim_ids%nmesh_face/), &
595  this%var_ids%mesh_face_x), this%nc_fname)
596 
597  ! assign mesh x face variable attributes
598  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_x, &
599  'units', this%lenunits), this%nc_fname)
600  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_x, &
601  'standard_name', 'projection_x_coordinate'), &
602  this%nc_fname)
603  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_x, &
604  'long_name', 'Easting'), this%nc_fname)
605  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_x, 'bounds', &
606  'mesh_face_xbnds'), this%nc_fname)
607  if (this%gridmap_name /= '') then
608  ! associate with projection
609  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_x, &
610  'grid_mapping', this%gridmap_name), &
611  this%nc_fname)
612  end if
613 
614  ! create mesh x cell bounds variable
615  call nf_verify(nf90_def_var(this%ncid, 'mesh_face_xbnds', nf90_double, &
616  (/this%dim_ids%max_nmesh_face_nodes, &
617  this%dim_ids%nmesh_face/), &
618  this%var_ids%mesh_face_xbnds), &
619  this%nc_fname)
620 
621  ! create mesh y face (cell vertex) variable
622  call nf_verify(nf90_def_var(this%ncid, 'mesh_face_y', nf90_double, &
623  (/this%dim_ids%nmesh_face/), &
624  this%var_ids%mesh_face_y), this%nc_fname)
625 
626  ! assign mesh y face variable attributes
627  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_y, &
628  'units', this%lenunits), this%nc_fname)
629  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_y, &
630  'standard_name', 'projection_y_coordinate'), &
631  this%nc_fname)
632  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_y, &
633  'long_name', 'Northing'), this%nc_fname)
634  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_y, 'bounds', &
635  'mesh_face_ybnds'), this%nc_fname)
636 
637  if (this%gridmap_name /= '') then
638  ! associate with projection
639  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_y, &
640  'grid_mapping', this%gridmap_name), &
641  this%nc_fname)
642  end if
643 
644  ! create mesh y cell bounds variable
645  call nf_verify(nf90_def_var(this%ncid, 'mesh_face_ybnds', nf90_double, &
646  (/this%dim_ids%max_nmesh_face_nodes, &
647  this%dim_ids%nmesh_face/), &
648  this%var_ids%mesh_face_ybnds), &
649  this%nc_fname)
650 
651  ! create mesh face nodes variable
652  call nf_verify(nf90_def_var(this%ncid, 'mesh_face_nodes', nf90_int, &
653  (/this%dim_ids%max_nmesh_face_nodes, &
654  this%dim_ids%nmesh_face/), &
655  this%var_ids%mesh_face_nodes), &
656  this%nc_fname)
657 
658  ! assign variable attributes
659  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_nodes, &
660  'cf_role', 'face_node_connectivity'), &
661  this%nc_fname)
662  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_nodes, &
663  'long_name', &
664  'Vertices bounding cell (counterclockwise)'), &
665  this%nc_fname)
666  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_nodes, &
667  '_FillValue', (/nf90_fill_int/)), &
668  this%nc_fname)
669  call nf_verify(nf90_put_att(this%ncid, this%var_ids%mesh_face_nodes, &
670  'start_index', 1), this%nc_fname)
Here is the call graph for this function:

◆ create_timeseries()

subroutine meshmodelmodule::create_timeseries ( class(meshmodeltype), intent(inout)  this,
type(inputparamdefinitiontype), intent(in), pointer  idt,
integer(i4b), intent(in)  iparam,
integer(i4b), intent(in)  iaux,
integer(i4b), intent(in)  layer,
class(exportpackagetype), intent(in), pointer  export_pkg 
)

Definition at line 222 of file MeshNCModel.f90.

223  use constantsmodule, only: dnodata
225  class(MeshModelType), intent(inout) :: this
226  type(InputParamDefinitionType), pointer, intent(in) :: idt
227  integer(I4B), intent(in) :: iparam
228  integer(I4B), intent(in) :: iaux
229  integer(I4B), intent(in) :: layer
230  class(ExportPackageType), pointer, intent(in) :: export_pkg
231  character(len=LINELENGTH) :: varname, longname, nc_tag
232  integer(I4B) :: varid
233 
234  ! set variable input tag
235  nc_tag = this%input_attribute(export_pkg%mf6_input%subcomponent_name, &
236  idt)
237 
238  ! set names
239  varname = export_varname(export_pkg%mf6_input%subcomponent_name, &
240  idt%tagname, export_pkg%mf6_input%mempath, &
241  layer=layer, iaux=iaux)
242  longname = export_longname(idt%longname, &
243  export_pkg%mf6_input%subcomponent_name, &
244  idt%tagname, export_pkg%mf6_input%mempath, &
245  layer=layer, iaux=iaux, &
246  component_type=idt%component_type, &
247  subcomponent_type=idt%subcomponent_type)
248 
249  ! create the netcdf dependent layer variable
250  select case (idt%datatype)
251  case ('DOUBLE1D', 'DOUBLE2D')
252  call nf_verify(nf90_def_var(this%ncid, varname, nf90_double, &
253  (/this%dim_ids%nmesh_face, &
254  this%dim_ids%time/), &
255  varid), &
256  this%nc_fname)
257  call nf_verify(nf90_put_att(this%ncid, varid, &
258  '_FillValue', (/dnodata/)), &
259  this%nc_fname)
260  case ('INTEGER1D')
261  call nf_verify(nf90_def_var(this%ncid, varname, nf90_int, &
262  (/this%dim_ids%nmesh_face, &
263  this%dim_ids%time/), &
264  varid), &
265  this%nc_fname)
266  call nf_verify(nf90_put_att(this%ncid, varid, &
267  '_FillValue', (/nf90_fill_int/)), &
268  this%nc_fname)
269  end select
270 
271  ! apply chunking parameters
272  if (this%chunking_active) then
273  call nf_verify(nf90_def_var_chunking(this%ncid, &
274  varid, &
275  nf90_chunked, &
276  (/this%chunk_face, &
277  this%chunk_time/)), &
278  this%nc_fname)
279  end if
280 
281  ! deflate and shuffle
282  call ncvar_deflate(this%ncid, varid, this%deflate, &
283  this%shuffle, this%nc_fname)
284 
285  ! assign variable attributes
286  call nf_verify(nf90_put_att(this%ncid, varid, &
287  'units', this%lenunits), this%nc_fname)
288  call nf_verify(nf90_put_att(this%ncid, varid, &
289  'long_name', longname), this%nc_fname)
290 
291  ! add grid mapping and mf6 attr (mesh, location, coordinates, grid_mapping)
292  call ncvar_gridmap(this%ncid, varid, &
293  this%gridmap_name, this%nc_fname)
294  call ncvar_mf6attr(this%ncid, varid, layer, iaux, nc_tag, this%nc_fname)
295 
296  ! store variable id
297  if (idt%tagname == 'AUX') then
298  if (layer > 0) then
299  export_pkg%varids_aux(iaux, layer) = varid
300  else
301  export_pkg%varids_aux(iaux, 1) = varid
302  end if
303  else
304  if (layer > 0) then
305  export_pkg%varids_param(iparam, layer) = varid
306  else
307  export_pkg%varids_param(iparam, 1) = varid
308  end if
309  end if
This module contains simulation constants.
Definition: Constants.f90:9
real(dp), parameter dnodata
real no data constant
Definition: Constants.f90:95
This module contains the NCModelExportModule.
Definition: NCModel.f90:8
Here is the call graph for this function:

◆ define_dependent()

subroutine meshmodelmodule::define_dependent ( class(meshmodeltype), intent(inout)  this)

Definition at line 431 of file MeshNCModel.f90.

432  class(MeshModelType), intent(inout) :: this
433  character(len=LINELENGTH) :: varname, longname
434  integer(I4B) :: k
435 
436  ! create a dependent variable for each layer
437  do k = 1, this%nlay
438  ! initialize names
439  varname = ''
440  longname = ''
441 
442  ! set layer variable and longnames
443  write (varname, '(a,i0)') trim(this%xname)//'_l', k
444  write (longname, '(a,i0,a)') trim(this%annotation%longname)// &
445  ' (layer ', k, ')'
446 
447  ! create the netcdf dependent layer variable
448  call nf_verify(nf90_def_var(this%ncid, varname, nf90_double, &
449  (/this%dim_ids%nmesh_face, &
450  this%dim_ids%time/), &
451  this%var_ids%dependent(k)), &
452  this%nc_fname)
453 
454  ! apply chunking parameters
455  if (this%chunking_active) then
456  call nf_verify(nf90_def_var_chunking(this%ncid, &
457  this%var_ids%dependent(k), &
458  nf90_chunked, &
459  (/this%chunk_face, &
460  this%chunk_time/)), &
461  this%nc_fname)
462  end if
463 
464  ! deflate and shuffle
465  call ncvar_deflate(this%ncid, this%var_ids%dependent(k), this%deflate, &
466  this%shuffle, this%nc_fname)
467 
468  ! assign variable attributes
469  call nf_verify(nf90_put_att(this%ncid, this%var_ids%dependent(k), &
470  'units', this%lenunits), this%nc_fname)
471  call nf_verify(nf90_put_att(this%ncid, this%var_ids%dependent(k), &
472  'long_name', longname), this%nc_fname)
473  call nf_verify(nf90_put_att(this%ncid, this%var_ids%dependent(k), &
474  '_FillValue', (/dhnoflo/)), &
475  this%nc_fname)
476 
477  ! add grid mapping (mesh, location, coordinates, grid_mapping)
478  call ncvar_gridmap(this%ncid, this%var_ids%dependent(k), &
479  this%gridmap_name, this%nc_fname)
480  end do
Here is the call graph for this function:

◆ define_gridmap()

subroutine meshmodelmodule::define_gridmap ( class(meshmodeltype), intent(inout)  this)
private

Definition at line 485 of file MeshNCModel.f90.

486  class(MeshModelType), intent(inout) :: this
487  integer(I4B) :: var_id
488  character(len=LINELENGTH) :: gmname
489  character(len=LENBIGLINE) :: effective_crs_wkt
490 
491  ! was projection info provided
492  if (this%wkt /= '' .or. this%crs_wkt /= '') then
493  ! create projection variable
494  call nf_verify(nf90_redef(this%ncid), this%nc_fname)
495  call nf_verify(nf90_def_var(this%ncid, this%gridmap_name, nf90_int, &
496  var_id), this%nc_fname)
497  ! wkt (WKT1, OGC 01-009) -- for legacy/QGIS compatibility
498  if (this%wkt /= '') then
499  call nf_verify(nf90_put_att(this%ncid, var_id, 'wkt', this%wkt), &
500  this%nc_fname)
501  end if
502  ! crs_wkt (WKT2, ISO 19162:2019) -- required by CF-1.11
503  if (this%crs_wkt /= '') then
504  effective_crs_wkt = this%crs_wkt
505  else
506  effective_crs_wkt = this%wkt
507  end if
508  call nf_verify(nf90_put_att(this%ncid, var_id, 'crs_wkt', &
509  trim(effective_crs_wkt)), this%nc_fname)
510  ! grid_mapping_name derived from WKT projection keyword
511  gmname = wkt_to_cf_gridmapping(trim(effective_crs_wkt))
512  if (gmname /= '') then
513  call nf_verify(nf90_put_att(this%ncid, var_id, 'grid_mapping_name', &
514  trim(gmname)), this%nc_fname)
515  end if
516  call nf_verify(nf90_enddef(this%ncid), this%nc_fname)
517  call nf_verify(nf90_put_var(this%ncid, var_id, 1), &
518  this%nc_fname)
519  end if
Here is the call graph for this function:

◆ df_export()

subroutine meshmodelmodule::df_export ( class(meshmodeltype), intent(inout)  this)

Definition at line 165 of file MeshNCModel.f90.

167  class(MeshModelType), intent(inout) :: this
168  class(ExportPackageType), pointer :: export_pkg
169  integer(I4B) :: idx
170  do idx = 1, this%pkglist%Count()
171  export_pkg => this%get(idx)
172  call this%export_df(export_pkg)
173  end do

◆ export_df()

subroutine meshmodelmodule::export_df ( class(meshmodeltype), intent(inout)  this,
class(exportpackagetype), intent(in), pointer  export_pkg 
)

Definition at line 178 of file MeshNCModel.f90.

181  class(MeshModelType), intent(inout) :: this
182  class(ExportPackageType), pointer, intent(in) :: export_pkg
183  type(InputParamDefinitionType), pointer :: idt
184  integer(I4B) :: iparam, iaux, layer
185 
186  ! export defined period input
187  do iparam = 1, export_pkg%nparam
188  ! initialize
189  iaux = 0
190  layer = 0
191  ! set input definition
192  idt => &
193  get_param_definition_type(export_pkg%mf6_input%param_dfns, &
194  export_pkg%mf6_input%component_type, &
195  export_pkg%mf6_input%subcomponent_type, &
196  'PERIOD', export_pkg%param_names(iparam), '')
197 
198  select case (idt%shape)
199  case ('NCPL')
200  call this%create_timeseries(idt, iparam, iaux, layer, export_pkg)
201  case ('NODES')
202  do layer = 1, this%nlay
203  call this%create_timeseries(idt, iparam, iaux, layer, export_pkg)
204  end do
205  case ('NAUX NCPL')
206  do iaux = 1, export_pkg%naux
207  call this%create_timeseries(idt, iparam, iaux, layer, export_pkg)
208  end do
209  case ('NAUX NODES')
210  do iaux = 1, export_pkg%naux
211  do layer = 1, this%nlay
212  call this%create_timeseries(idt, iparam, iaux, layer, export_pkg)
213  end do
214  end do
215  case default
216  end select
217  end do
This module contains the DefinitionSelectModule.
type(inputparamdefinitiontype) function, pointer, public get_param_definition_type(input_definition_types, component_type, subcomponent_type, blockname, tagname, filename, found)
Return parameter definition.
Here is the call graph for this function:

◆ export_input_arrays()

subroutine meshmodelmodule::export_input_arrays ( class(meshmodeltype), intent(inout)  this,
character(len=*), intent(in)  pkgtype,
character(len=*), intent(in)  pkgname,
character(len=*), intent(in)  mempath,
type(inputparamdefinitiontype), dimension(:), intent(in), pointer  param_dfns 
)
private

Definition at line 345 of file MeshNCModel.f90.

346  use memorymanagermodule, only: get_isize
347  class(MeshModelType), intent(inout) :: this
348  character(len=*), intent(in) :: pkgtype
349  character(len=*), intent(in) :: pkgname
350  character(len=*), intent(in) :: mempath
351  type(InputParamDefinitionType), dimension(:), pointer, &
352  intent(in) :: param_dfns
353  type(InputParamDefinitionType), pointer :: idt
354  integer(I4B) :: iparam, isize
355  ! export griddata block parameters
356  do iparam = 1, size(param_dfns)
357  ! assign param definition pointer
358  idt => param_dfns(iparam)
359  ! for now only griddata is exported
360  if (idt%blockname == 'GRIDDATA') then
361  ! veriy variable is allocated
362  call get_isize(idt%mf6varname, mempath, isize)
363  if (isize > 0) then
364  call this%export_input_array(pkgtype, pkgname, mempath, idt)
365  end if
366  end if
367  end do
subroutine, public get_isize(name, mem_path, isize)
@ brief Get the number of elements for this variable
Here is the call graph for this function:

◆ mesh_destroy()

subroutine meshmodelmodule::mesh_destroy ( class(meshmodeltype), intent(inout)  this)

Definition at line 155 of file MeshNCModel.f90.

157  class(MeshModelType), intent(inout) :: this
158  call nf_verify(nf90_close(this%ncid), this%nc_fname)
159  deallocate (this%chunk_face)
160  nullify (this%chunk_face)
Here is the call graph for this function:

◆ mesh_init()

subroutine meshmodelmodule::mesh_init ( class(meshmodeltype), intent(inout)  this,
character(len=*), intent(in)  modelname,
character(len=*), intent(in)  modeltype,
character(len=*), intent(in)  modelfname,
character(len=*), intent(in)  nc_fname,
integer(i4b), intent(in)  disenum,
integer(i4b), intent(in)  nctype,
integer(i4b), intent(in)  lenuni,
integer(i4b), intent(in)  iout 
)
private

Definition at line 103 of file MeshNCModel.f90.

106  class(MeshModelType), intent(inout) :: this
107  character(len=*), intent(in) :: modelname
108  character(len=*), intent(in) :: modeltype
109  character(len=*), intent(in) :: modelfname
110  character(len=*), intent(in) :: nc_fname
111  integer(I4B), intent(in) :: disenum
112  integer(I4B), intent(in) :: nctype
113  integer(I4B), intent(in) :: lenuni
114  integer(I4B), intent(in) :: iout
115  logical(LGP) :: found
116 
117  ! initialize base class
118  call this%NCModelExportType%init(modelname, modeltype, modelfname, nc_fname, &
119  disenum, nctype, iout)
120 
121  ! allocate and initialize
122  allocate (this%chunk_face)
123  this%chunk_face = -1
124 
125  ! update values from input context
126  if (this%ncf_mempath /= '') then
127  call mem_set_value(this%chunk_face, 'CHUNK_FACE', this%ncf_mempath, found)
128  end if
129 
130  if (this%chunk_time > 0 .and. this%chunk_face > 0) then
131  this%chunking_active = .true.
132  else if (this%chunk_time > 0 .or. this%chunk_face > 0) then
133  this%chunk_face = -1
134  this%chunk_time = -1
135  write (warnmsg, '(a)') 'Ignoring user provided NetCDF chunking parameter. &
136  &Define chunk_time and chunk_face input parameters to see an effect in &
137  &file "'//trim(nc_fname)//'".'
138  call store_warning(warnmsg)
139  end if
140 
141  if (lenuni == 1) then
142  this%lenunits = 'ft'
143  else
144  this%lenunits = 'm'
145  end if
146 
147  ! create the netcdf file
148  call nf_verify(nf90_create(this%nc_fname, &
149  ior(nf90_clobber, nf90_netcdf4), this%ncid), &
150  this%nc_fname)
Here is the call graph for this function:

◆ ncvar_chunk()

subroutine, public meshmodelmodule::ncvar_chunk ( integer(i4b), intent(in)  ncid,
integer(i4b), intent(in)  varid,
integer(i4b), intent(in)  chunk_face,
character(len=*), intent(in)  nc_fname 
)

Definition at line 675 of file MeshNCModel.f90.

676  integer(I4B), intent(in) :: ncid
677  integer(I4B), intent(in) :: varid
678  integer(I4B), intent(in) :: chunk_face
679  character(len=*), intent(in) :: nc_fname
680  if (chunk_face > 0) then
681  call nf_verify(nf90_def_var_chunking(ncid, varid, nf90_chunked, &
682  (/chunk_face/)), nc_fname)
683  end if
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ncvar_deflate()

subroutine, public meshmodelmodule::ncvar_deflate ( integer(i4b), intent(in)  ncid,
integer(i4b), intent(in)  varid,
integer(i4b), intent(in)  deflate,
integer(i4b), intent(in)  shuffle,
character(len=*), intent(in)  nc_fname 
)

Definition at line 688 of file MeshNCModel.f90.

689  integer(I4B), intent(in) :: ncid
690  integer(I4B), intent(in) :: varid
691  integer(I4B), intent(in) :: deflate
692  integer(I4B), intent(in) :: shuffle
693  character(len=*), intent(in) :: nc_fname
694  if (deflate >= 0) then
695  call nf_verify(nf90_def_var_deflate(ncid, varid, shuffle=shuffle, &
696  deflate=1, deflate_level=deflate), &
697  nc_fname)
698  end if
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ncvar_gridmap()

subroutine, public meshmodelmodule::ncvar_gridmap ( integer(i4b), intent(in)  ncid,
integer(i4b), intent(in)  varid,
character(len=*), intent(in)  gridmap_name,
character(len=*), intent(in)  nc_fname 
)

Definition at line 703 of file MeshNCModel.f90.

704  integer(I4B), intent(in) :: ncid
705  integer(I4B), intent(in) :: varid
706  character(len=*), intent(in) :: gridmap_name
707  character(len=*), intent(in) :: nc_fname
708  ! UGRID topology attrs are CRS-independent -- always written on face vars
709  call nf_verify(nf90_put_att(ncid, varid, 'mesh', 'mesh'), nc_fname)
710  call nf_verify(nf90_put_att(ncid, varid, 'location', 'face'), nc_fname)
711  call nf_verify(nf90_put_att(ncid, varid, 'coordinates', &
712  'mesh_face_x mesh_face_y'), nc_fname)
713  ! grid_mapping only written when a CRS is configured
714  if (gridmap_name /= '') then
715  call nf_verify(nf90_put_att(ncid, varid, 'grid_mapping', &
716  gridmap_name), nc_fname)
717  end if
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ncvar_mf6attr()

subroutine, public meshmodelmodule::ncvar_mf6attr ( integer(i4b), intent(in)  ncid,
integer(i4b), intent(in)  varid,
integer(i4b), intent(in)  layer,
integer(i4b), intent(in)  iaux,
character(len=*), intent(in)  nc_tag,
character(len=*), intent(in)  nc_fname 
)

Definition at line 722 of file MeshNCModel.f90.

723  integer(I4B), intent(in) :: ncid
724  integer(I4B), intent(in) :: varid
725  integer(I4B), intent(in) :: layer
726  integer(I4B), intent(in) :: iaux
727  character(len=*), intent(in) :: nc_tag
728  character(len=*), intent(in) :: nc_fname
729  if (nc_tag /= '') then
730  call nf_verify(nf90_put_att(ncid, varid, 'modflow_input', &
731  nc_tag), nc_fname)
732  if (layer > 0) then
733  call nf_verify(nf90_put_att(ncid, varid, 'layer', &
734  layer), nc_fname)
735  end if
736  if (iaux > 0) then
737  call nf_verify(nf90_put_att(ncid, varid, 'modflow_iaux', &
738  iaux), nc_fname)
739  end if
740  end if
Here is the call graph for this function:
Here is the caller graph for this function: