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

This module contains the NCExportCreateModule. More...

Functions/Subroutines

subroutine create_nc_export (export_model, num_model)
 create model netcdf export type More...
 
subroutine create_export_pkglist (pkglist, loaders, iout)
 
subroutine, public nc_export_create ()
 initialize netcdf model export type More...
 

Detailed Description

This module creates derived model netcdf export objects. It is dependent on netcdf libraries.

Function/Subroutine Documentation

◆ create_export_pkglist()

subroutine ncexportcreatemodule::create_export_pkglist ( type(listtype), intent(inout)  pkglist,
type(modeldynamicpkgstype), intent(in), pointer  loaders,
integer(i4b), intent(in)  iout 
)

Definition at line 141 of file NCExportCreate.f90.

142  use listmodule, only: listtype
150  type(ListType), intent(inout) :: pkglist
151  type(ModelDynamicPkgsType), pointer, intent(in) :: loaders
152  integer(I4B), intent(in) :: iout
153  class(DynamicPkgLoadBaseType), pointer :: dynamic_pkg
154  class(AsciiDynamicPkgLoadBaseType), pointer :: rp_loader
155  type(ExportPackageType), pointer :: export_pkg
156  integer(I4B), pointer :: export_arrays
157  integer(I4B), dimension(:), pointer, contiguous :: mshape
158  class(*), pointer :: obj
159  logical(LGP) :: found, readasarrays
160  integer(I4B) :: n
161 
162  if (isim_mode /= mvalidate) then
163  ! input array export configuration is documented
164  ! as ignored if not in validate mode
165  return
166  end if
167 
168  ! create list of in scope loaders
169  allocate (export_arrays)
170 
171  do n = 1, loaders%pkglist%Count()
172  ! initialize export arrays option
173  export_arrays = 0
174 
175  dynamic_pkg => loaders%get(n)
176 
177  ! update export arrays option
178  call mem_set_value(export_arrays, 'EXPORT_NC', &
179  dynamic_pkg%mf6_input%mempath, found, &
180  release=.false.)
181 
182  readasarrays = (dynamic_pkg%readasarrays .or. dynamic_pkg%readarraygrid)
183  if (export_arrays > 0 .and. readasarrays) then
184  select type (dynamic_pkg)
185  type is (mf6filedynamicpkgloadtype)
186  rp_loader => dynamic_pkg%rp_loader
187  select type (rp_loader)
188  type is (layerarrayloadtype)
189  ! create the export object
190  mshape => rp_loader%ctx%mshape
191  allocate (export_pkg)
192  call export_pkg%init(rp_loader%mf6_input, &
193  mshape, &
194  rp_loader%ctx%naux, &
195  rp_loader%param_names, rp_loader%nparam)
196  obj => export_pkg
197  call pkglist%add(obj)
198  type is (gridarrayloadtype)
199  ! create the export object
200  mshape => rp_loader%ctx%mshape
201  allocate (export_pkg)
202  call export_pkg%init(rp_loader%mf6_input, &
203  mshape, &
204  rp_loader%ctx%naux, &
205  rp_loader%param_names, rp_loader%nparam)
206  obj => export_pkg
207  call pkglist%add(obj)
208  end select
209  end select
210  end if
211  end do
212 
213  ! cleanup
214  deallocate (export_arrays)
This module contains the AsciiInputLoadTypeModule.
This module contains the GridArrayLoadModule.
This module contains the IdmMf6FileModule.
Definition: IdmMf6File.f90:10
This module contains the InputLoadTypeModule.
This module contains the LayerArrayLoadModule.
base abstract type for ascii source dynamic load
Ascii grid based dynamic loader type.
MF6File dynamic loader type.
Definition: IdmMf6File.f90:39
Base abstract type for dynamic input loader.
type for storing a dynamic package load list
Ascii array layer dynamic loader type.
A generic heterogeneous doubly-linked list.
Definition: List.f90:14
Here is the caller graph for this function:

◆ create_nc_export()

subroutine ncexportcreatemodule::create_nc_export ( type(exportmodeltype), intent(inout), pointer  export_model,
class(numericalmodeltype), intent(in), pointer  num_model 
)
private

Definition at line 30 of file NCExportCreate.f90.

36  type(ExportModelType), pointer, intent(inout) :: export_model
37  class(NumericalModelType), pointer, intent(in) :: num_model
38  class(Mesh2dDisExportType), pointer :: ugrid_dis
39  class(Mesh2dDisvExportType), pointer :: ugrid_disv
40  class(DisNCStructuredType), pointer :: structured_dis
41  class(DisBaseType), pointer :: disbase
42 
43  select case (export_model%disenum)
44  case (dis)
45  ! allocate nc structured grid export object
46  if (export_model%nctype == netcdf_mesh2d) then
47  ! allocate nc structured grid export object
48  allocate (ugrid_dis)
49 
50  ! set dis base type
51  disbase => num_model%dis
52  select type (disbase)
53  type is (distype)
54  ugrid_dis%dis => disbase
55  end select
56 
57  ! set dynamic loaders
58  call create_export_pkglist(ugrid_dis%pkglist, export_model%loaders, &
59  export_model%iout)
60 
61  ! initialize export object
62  call ugrid_dis%init(export_model%modelname, export_model%modeltype, &
63  export_model%modelfname, export_model%nc_fname, &
64  export_model%disenum, netcdf_mesh2d, &
65  export_model%iout)
66 
67  ! define export object
68  call ugrid_dis%df()
69 
70  ! set base pointer
71  export_model%nc_export => ugrid_dis
72  else if (export_model%nctype == netcdf_structured) then
73  ! allocate nc structured grid export object
74  allocate (structured_dis)
75 
76  ! set dis base type
77  disbase => num_model%dis
78  select type (disbase)
79  type is (distype)
80  structured_dis%dis => disbase
81  end select
82 
83  ! set dynamic loaders
84  call create_export_pkglist(structured_dis%pkglist, export_model%loaders, &
85  export_model%iout)
86 
87  ! initialize export object
88  call structured_dis%init(export_model%modelname, export_model%modeltype, &
89  export_model%modelfname, export_model%nc_fname, &
90  export_model%disenum, netcdf_structured, &
91  export_model%iout)
92 
93  ! define export object
94  call structured_dis%df()
95 
96  ! set base pointer
97  export_model%nc_export => structured_dis
98  end if
99  case (disv)
100  if (export_model%nctype == netcdf_mesh2d) then
101  ! allocate nc structured grid export object
102  allocate (ugrid_disv)
103 
104  ! set dis base type
105  disbase => num_model%dis
106  select type (disbase)
107  type is (disvtype)
108  ugrid_disv%disv => disbase
109  end select
110 
111  ! set dynamic loaders
112  call create_export_pkglist(ugrid_disv%pkglist, export_model%loaders, &
113  export_model%iout)
114 
115  ! initialize export object
116  call ugrid_disv%init(export_model%modelname, export_model%modeltype, &
117  export_model%modelfname, export_model%nc_fname, &
118  export_model%disenum, netcdf_mesh2d, &
119  export_model%iout)
120 
121  ! define export object
122  call ugrid_disv%df()
123 
124  ! set base pointer
125  export_model%nc_export => ugrid_disv
126  else
127  errmsg = 'DISV model discretization only &
128  &supported as UGRID NetCDF export. &
129  &Model='//trim(export_model%modelname)//'.'
130  call store_error(errmsg)
131  call store_error_filename(export_model%modelfname)
132  end if
133  case default
134  errmsg = 'Unsupported discretization for NetCDF model export. &
135  &Model='//trim(export_model%modelname)//'.'
136  call store_error(errmsg)
137  call store_error_filename(export_model%modelfname)
138  end select
This module contains the DisNCStructuredModule.
This module contains the MeshDisModelModule.
Definition: DisNCMesh.f90:8
This module contains the MeshDisvModelModule.
Definition: DisvNCMesh.f90:8
This module contains the NCModelExportModule.
Definition: NCModel.f90:8
@, public netcdf_structured
netcdf structrured export
Definition: NCModel.f90:34
@, public netcdf_mesh2d
netcdf ugrid layered mesh export
Definition: NCModel.f90:35
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_export_create()

subroutine, public ncexportcreatemodule::nc_export_create

Definition at line 219 of file NCExportCreate.f90.

221  use listsmodule, only: basemodellist
223  integer(I4B) :: n
224  type(ExportModelType), pointer :: export_model
225  class(NumericalModelType), pointer :: num_model
226  integer(I4B) :: im
227  do n = 1, export_models%Count()
228  ! set pointer to export model
229  export_model => get_export_model(n)
230  if (export_model%nctype /= netcdf_undef) then
231  ! netcdf export is active identify model
232  do im = 1, basemodellist%Count()
233  ! set model pointer
234  num_model => getnumericalmodelfromlist(basemodellist, im)
235  if (num_model%name == export_model%modelname .and. &
236  num_model%macronym == export_model%modeltype) then
237  ! allocate and initialize nc export model
238  call create_nc_export(export_model, num_model)
239  exit
240  end if
241  end do
242  end if
243  end do
type(listtype), public basemodellist
Definition: mf6lists.f90:16
@, public netcdf_undef
undefined netcdf export type
Definition: NCModel.f90:33
class(numericalmodeltype) function, pointer, public getnumericalmodelfromlist(list, idx)
Here is the call graph for this function:
Here is the caller graph for this function: