51 disenum, nctype, iout)
54 character(len=*),
intent(in) :: modelname
55 character(len=*),
intent(in) :: modeltype
56 character(len=*),
intent(in) :: modelfname
57 character(len=*),
intent(in) :: nc_fname
58 integer(I4B),
intent(in) :: disenum
59 integer(I4B),
intent(in) :: nctype
60 integer(I4B),
intent(in) :: iout
63 this%nlay = this%disv%nlay
66 allocate (this%var_ids%dependent(this%nlay))
69 call this%mesh_init(modelname, modeltype, modelfname, nc_fname, disenum, &
70 nctype, this%disv%lenuni, iout)
77 deallocate (this%var_ids%dependent)
79 call this%mesh_destroy()
80 call this%NCModelExportType%destroy()
90 call this%add_global_att()
92 call this%define_dim()
94 call this%create_mesh()
97 call this%define_dependent()
100 call nf_verify(nf90_enddef(this%ncid), this%nc_fname)
102 call this%add_mesh_data()
104 call this%add_pkg_data()
106 call this%define_gridmap()
108 call nf_verify(nf90_sync(this%ncid), this%nc_fname)
117 real(DP),
dimension(:),
pointer,
contiguous :: dbl1d
118 integer(I4B) :: n, k, nvals
119 integer(I4B),
dimension(2) :: dis_shape
120 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
127 this%stepcnt = this%stepcnt + 1
129 dis_shape(1) = this%disv%ncpl
130 dis_shape(2) = this%disv%nlay
132 nvals = product(dis_shape)
135 if (
size(this%disv%nodeuser) < &
136 size(this%disv%nodereduced))
then
138 allocate (dbl1d(
size(this%disv%nodereduced)))
144 do n = 1,
size(this%disv%nodereduced)
145 if (this%disv%nodereduced(n) > 0)
then
146 dbl1d(n) = this%x(this%disv%nodereduced(n))
150 dbl2d(1:dis_shape(1), 1:dis_shape(2)) => dbl1d(1:nvals)
152 dbl2d(1:dis_shape(1), 1:dis_shape(2)) => this%x(1:nvals)
155 do k = 1, this%disv%nlay
158 this%var_ids%dependent(k), dbl2d(:, k), &
159 start=(/1, this%stepcnt/), &
160 count=(/this%disv%ncpl, 1/)), &
165 call nf_verify(nf90_put_var(this%ncid, this%var_ids%time, &
166 totim, start=(/this%stepcnt/)), &
170 call nf_verify(nf90_sync(this%ncid), this%nc_fname)
173 if (
associated(dbl1d))
deallocate (dbl1d)
187 character(len=*),
intent(in) :: ilayer_varname
188 integer(I4B),
intent(in) :: ilayer
190 integer(I4B),
dimension(:),
pointer,
contiguous :: int1d
191 real(DP),
dimension(:),
pointer,
contiguous :: dbl1d
192 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
193 integer(I4B),
dimension(:),
pointer,
contiguous :: ialayer
194 real(DP),
dimension(:),
contiguous,
pointer :: dbl1d_ptr
195 character(len=LINELENGTH) :: nc_varname, input_attr
196 integer(I4B) :: n, iparam, nvals
197 logical(LGP) :: ilayer_read
201 ilayer_read = .false.
204 call mem_setptr(ialayer, export_pkg%param_names(ilayer), &
205 export_pkg%mf6_input%mempath)
208 if (export_pkg%param_reads(ilayer)%invar == 1)
then
213 do iparam = 1, export_pkg%nparam
215 if (export_pkg%param_reads(iparam)%invar < 1) cycle
220 export_pkg%mf6_input%component_type, &
221 export_pkg%mf6_input%subcomponent_type, &
222 'PERIOD', export_pkg%param_names(iparam),
'')
225 nc_varname = trim(export_pkg%mf6_input%subcomponent_name)//
'_'// &
227 input_attr = this%input_attribute(export_pkg%mf6_input%subcomponent_name, &
231 select case (idt%datatype)
233 call mem_setptr(int1d, idt%mf6varname, export_pkg%mf6_input%mempath)
234 call nc_export_int1d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
236 export_pkg%mf6_input%subcomponent_name, &
237 idt%tagname, this%gridmap_name, idt%shape, &
238 idt%longname, input_attr, this%deflate, &
239 this%shuffle, this%chunk_face,
kper, this%nc_fname)
241 call mem_setptr(dbl1d, idt%mf6varname, export_pkg%mf6_input%mempath)
242 call this%export_layer_2d(export_pkg, idt, ilayer_read, ialayer, &
243 dbl1d, nc_varname, input_attr)
245 call mem_setptr(dbl2d, idt%mf6varname, export_pkg%mf6_input%mempath)
246 nvals = this%disv%ncpl
247 do n = 1,
size(dbl2d, dim=1)
248 dbl1d_ptr(1:nvals) => dbl2d(n, :)
249 if (all(dbl1d_ptr ==
dzero))
then
251 call this%export_layer_2d(export_pkg, idt, ilayer_read, ialayer, &
252 dbl1d_ptr, nc_varname, input_attr, n)
256 errmsg =
'EXPORT ilayer unsupported datatype='//trim(idt%datatype)
262 call nf_verify(nf90_sync(this%ncid), this%nc_fname)
271 errmsg =
'NetCDF period export not supported for model='// &
272 trim(this%modelname)//
', package='// &
273 trim(export_pkg%mf6_input%subcomponent_name)
276 call nf_verify(nf90_sync(this%ncid), this%nc_fname)
282 dbl1d, nc_varname, input_attr, iaux)
288 logical(LGP),
intent(in) :: ilayer_read
289 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: ialayer
290 real(DP),
dimension(:),
pointer,
contiguous,
intent(in) :: dbl1d
291 character(len=*),
intent(in) :: nc_varname
292 character(len=*),
intent(in) :: input_attr
293 integer(I4B),
optional,
intent(in) :: iaux
294 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
295 integer(I4B) :: n, j, k, idxaux
299 if (
present(iaux))
then
303 allocate (dbl2d(export_pkg%mshape(2), export_pkg%mshape(1)))
305 if (ilayer_read)
then
306 do k = 1,
size(dbl2d, dim=2)
308 do j = 1,
size(dbl2d, dim=1)
310 if (ialayer(n) == k)
then
311 dbl2d(j, k) = dbl1d(n)
319 dbl2d(:, 1) = dbl1d(:)
322 call nc_export_dbl2d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
324 export_pkg%mf6_input%subcomponent_name, idt%tagname, &
325 this%gridmap_name, idt%shape, idt%longname, input_attr, &
326 this%deflate, this%shuffle, this%chunk_face, &
327 export_pkg%iper, idxaux, this%nc_fname)
336 character(len=*),
intent(in) :: pkgtype
337 character(len=*),
intent(in) :: pkgname
338 character(len=*),
intent(in) :: mempath
340 integer(I4B),
dimension(:),
pointer,
contiguous :: int1d
341 integer(I4B),
dimension(:, :),
pointer,
contiguous :: int2d
342 real(DP),
dimension(:),
pointer,
contiguous :: dbl1d
343 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
344 character(len=LINELENGTH) :: nc_varname, input_attr
345 integer(I4B) :: iper, iaux
351 nc_varname = trim(pkgname)//
'_'//trim(idt%mf6varname)
353 input_attr = this%input_attribute(pkgname, idt)
355 select case (idt%datatype)
357 call mem_setptr(int1d, idt%mf6varname, mempath)
358 call nc_export_int1d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
359 int1d, nc_varname, pkgname, idt%tagname, &
360 this%gridmap_name, idt%shape, idt%longname, &
361 input_attr, this%deflate, this%shuffle, &
362 this%chunk_face, iper, this%nc_fname)
364 call mem_setptr(int2d, idt%mf6varname, mempath)
365 call nc_export_int2d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
366 int2d, nc_varname, pkgname, idt%tagname, &
367 this%gridmap_name, idt%shape, idt%longname, &
368 input_attr, this%deflate, this%shuffle, &
369 this%chunk_face, this%nc_fname)
371 call mem_setptr(dbl1d, idt%mf6varname, mempath)
372 call nc_export_dbl1d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
373 dbl1d, nc_varname, pkgname, idt%tagname, &
374 this%gridmap_name, idt%shape, idt%longname, &
375 input_attr, this%deflate, this%shuffle, &
376 this%chunk_face, this%nc_fname)
378 call mem_setptr(dbl2d, idt%mf6varname, mempath)
379 call nc_export_dbl2d(this%ncid, this%dim_ids, this%var_ids, this%disv, &
380 dbl2d, nc_varname, pkgname, idt%tagname, &
381 this%gridmap_name, idt%shape, idt%longname, &
382 input_attr, this%deflate, this%shuffle, &
383 this%chunk_face, iper, iaux, this%nc_fname)
395 integer(I4B),
dimension(:),
contiguous,
pointer :: ncvert
398 call mem_setptr(ncvert,
'NCVERT', this%dis_mempath)
402 call nf_verify(nf90_def_dim(this%ncid,
'time', this%totnstp, &
403 this%dim_ids%time), this%nc_fname)
404 call nf_verify(nf90_def_var(this%ncid,
'time', nf90_double, &
405 this%dim_ids%time, this%var_ids%time), &
407 call nf_verify(nf90_put_att(this%ncid, this%var_ids%time,
'calendar', &
408 'standard'), this%nc_fname)
409 call nf_verify(nf90_put_att(this%ncid, this%var_ids%time,
'units', &
410 this%datetime), this%nc_fname)
411 call nf_verify(nf90_put_att(this%ncid, this%var_ids%time,
'axis',
'T'), &
413 call nf_verify(nf90_put_att(this%ncid, this%var_ids%time,
'standard_name', &
414 'time'), this%nc_fname)
415 call nf_verify(nf90_put_att(this%ncid, this%var_ids%time,
'long_name', &
416 'time'), this%nc_fname)
420 call nf_verify(nf90_def_dim(this%ncid,
'nmesh_node', this%disv%nvert, &
421 this%dim_ids%nmesh_node), this%nc_fname)
422 call nf_verify(nf90_def_dim(this%ncid,
'nmesh_face', this%disv%ncpl, &
423 this%dim_ids%nmesh_face), this%nc_fname)
424 call nf_verify(nf90_def_dim(this%ncid,
'max_nmesh_face_nodes', &
426 this%dim_ids%max_nmesh_face_nodes), &
430 call nf_verify(nf90_def_dim(this%ncid,
'nlay', this%disv%nlay, &
431 this%dim_ids%nlay), this%nc_fname)
439 integer(I4B),
dimension(:),
contiguous,
pointer :: icell2d => null()
440 integer(I4B),
dimension(:),
contiguous,
pointer :: ncvert => null()
441 integer(I4B),
dimension(:),
contiguous,
pointer :: icvert => null()
442 real(DP),
dimension(:),
contiguous,
pointer :: cell_x => null()
443 real(DP),
dimension(:),
contiguous,
pointer :: cell_y => null()
444 real(DP),
dimension(:),
contiguous,
pointer :: vert_x => null()
445 real(DP),
dimension(:),
contiguous,
pointer :: vert_y => null()
446 real(DP),
dimension(:),
contiguous,
pointer :: cell_xt => null()
447 real(DP),
dimension(:),
contiguous,
pointer :: cell_yt => null()
448 real(DP),
dimension(:),
contiguous,
pointer :: vert_xt => null()
449 real(DP),
dimension(:),
contiguous,
pointer :: vert_yt => null()
450 real(DP) :: x_transform, y_transform
451 integer(I4B) :: n, m, idx, cnt, iv, maxvert
452 integer(I4B),
dimension(:),
allocatable :: verts
453 real(DP),
dimension(:),
allocatable :: bnds
454 integer(I4B) :: istop
457 call mem_setptr(icell2d,
'ICELL2D', this%dis_mempath)
458 call mem_setptr(ncvert,
'NCVERT', this%dis_mempath)
459 call mem_setptr(icvert,
'ICVERT', this%dis_mempath)
460 call mem_setptr(cell_x,
'XC', this%dis_mempath)
461 call mem_setptr(cell_y,
'YC', this%dis_mempath)
462 call mem_setptr(vert_x,
'XV', this%dis_mempath)
463 call mem_setptr(vert_y,
'YV', this%dis_mempath)
466 allocate (cell_xt(
size(cell_x)))
467 allocate (cell_yt(
size(cell_y)))
468 allocate (vert_xt(
size(vert_x)))
469 allocate (vert_yt(
size(vert_y)))
472 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh, 1), &
476 do n = 1,
size(vert_x)
481 x_transform, y_transform)
482 vert_xt(n) = x_transform
483 vert_yt(n) = y_transform
487 do n = 1,
size(cell_x)
492 x_transform, y_transform)
493 cell_xt(n) = x_transform
494 cell_yt(n) = y_transform
498 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_node_x, &
499 vert_xt), this%nc_fname)
500 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_node_y, &
501 vert_yt), this%nc_fname)
504 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_face_x, &
505 cell_xt), this%nc_fname)
506 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_face_y, &
507 cell_yt), this%nc_fname)
510 maxvert = maxval(ncvert)
513 allocate (verts(maxvert))
514 allocate (bnds(maxvert))
518 do n = 1,
size(ncvert)
519 verts = nf90_fill_int
520 idx = cnt + ncvert(n)
523 do m = idx, istop, -1
526 verts(iv) = icvert(m)
530 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_face_nodes, &
531 verts, start=(/1, n/), &
532 count=(/maxvert, 1/)), &
536 bnds = nf90_fill_double
538 if (verts(m) /= nf90_fill_int)
then
539 bnds(m) = vert_yt(verts(m))
542 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_face_ybnds, &
543 bnds, start=(/1, n/), &
544 count=(/maxvert, 1/)), &
549 bnds = nf90_fill_double
551 if (verts(m) /= nf90_fill_int)
then
552 bnds(m) = vert_xt(verts(m))
555 call nf_verify(nf90_put_var(this%ncid, this%var_ids%mesh_face_xbnds, &
556 bnds, start=(/1, n/), &
557 count=(/maxvert, 1/)), &
574 pkgname, tagname, gridmap_name, shapestr, longname, &
575 nc_tag, deflate, shuffle, chunk_face, iper, nc_fname)
576 integer(I4B),
intent(in) :: ncid
579 type(
disvtype),
pointer,
intent(in) :: dis
580 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: p_mem
581 character(len=*),
intent(in) :: nc_varname
582 character(len=*),
intent(in) :: pkgname
583 character(len=*),
intent(in) :: tagname
584 character(len=*),
intent(in) :: gridmap_name
585 character(len=*),
intent(in) :: shapestr
586 character(len=*),
intent(in) :: longname
587 character(len=*),
intent(in) :: nc_tag
588 integer(I4B),
intent(in) :: deflate
589 integer(I4B),
intent(in) :: shuffle
590 integer(I4B),
intent(in) :: chunk_face
591 integer(I4B),
intent(in) :: iper
592 character(len=*),
intent(in) :: nc_fname
593 integer(I4B),
dimension(2) :: dis_shape
594 integer(I4B),
dimension(:, :),
pointer,
contiguous :: int2d
595 integer(I4B) :: axis_sz, nvals, k
596 integer(I4B),
dimension(:),
allocatable :: var_id
597 character(len=LINELENGTH) :: longname_l, varname_l
599 if (shapestr ==
'NCPL')
then
602 longname_l =
export_longname(longname, pkgname, tagname, layer=0, iper=iper)
605 axis_sz = dim_ids%nmesh_face
608 call nf_verify(nf90_redef(ncid), nc_fname)
609 call nf_verify(nf90_def_var(ncid, varname_l, nf90_int, &
610 (/axis_sz/), var_id(1)), &
614 call ncvar_chunk(ncid, var_id(1), chunk_face, nc_fname)
616 call ncvar_deflate(ncid, var_id(1), deflate, shuffle, nc_fname)
619 call nf_verify(nf90_put_att(ncid, var_id(1),
'_FillValue', &
620 (/nf90_fill_int/)), nc_fname)
621 call nf_verify(nf90_put_att(ncid, var_id(1),
'long_name', &
622 longname_l), nc_fname)
626 call ncvar_mf6attr(ncid, var_id(1), 0, iper, 0, nc_tag, nc_fname)
629 call nf_verify(nf90_enddef(ncid), nc_fname)
630 call nf_verify(nf90_put_var(ncid, var_id(1), p_mem), &
634 allocate (var_id(dis%nlay))
637 call nf_verify(nf90_redef(ncid), nc_fname)
644 call nf_verify(nf90_def_var(ncid, varname_l, nf90_int, &
645 (/dim_ids%nmesh_face/), var_id(k)), &
649 call ncvar_chunk(ncid, var_id(k), chunk_face, nc_fname)
651 call ncvar_deflate(ncid, var_id(k), deflate, shuffle, nc_fname)
654 call nf_verify(nf90_put_att(ncid, var_id(k),
'_FillValue', &
655 (/nf90_fill_int/)), nc_fname)
656 call nf_verify(nf90_put_att(ncid, var_id(k),
'long_name', &
657 longname_l), nc_fname)
661 call ncvar_mf6attr(ncid, var_id(k), k, iper, 0, nc_tag, nc_fname)
665 dis_shape(1) = dis%ncpl
666 dis_shape(2) = dis%nlay
667 nvals = product(dis_shape)
668 int2d(1:dis_shape(1), 1:dis_shape(2)) => p_mem(1:nvals)
671 call nf_verify(nf90_enddef(ncid), nc_fname)
673 call nf_verify(nf90_put_var(ncid, var_id(k), int2d(:, k)), nc_fname)
684 pkgname, tagname, gridmap_name, shapestr, longname, &
685 nc_tag, deflate, shuffle, chunk_face, nc_fname)
686 integer(I4B),
intent(in) :: ncid
689 type(
disvtype),
pointer,
intent(in) :: disv
690 integer(I4B),
dimension(:, :),
pointer,
contiguous,
intent(in) :: p_mem
691 character(len=*),
intent(in) :: nc_varname
692 character(len=*),
intent(in) :: pkgname
693 character(len=*),
intent(in) :: tagname
694 character(len=*),
intent(in) :: gridmap_name
695 character(len=*),
intent(in) :: shapestr
696 character(len=*),
intent(in) :: longname
697 character(len=*),
intent(in) :: nc_tag
698 integer(I4B),
intent(in) :: deflate
699 integer(I4B),
intent(in) :: shuffle
700 integer(I4B),
intent(in) :: chunk_face
701 character(len=*),
intent(in) :: nc_fname
702 integer(I4B),
dimension(:),
allocatable :: var_id
703 character(len=LINELENGTH) :: longname_l, varname_l
706 allocate (var_id(disv%nlay))
709 call nf_verify(nf90_redef(ncid), nc_fname)
715 call nf_verify(nf90_def_var(ncid, varname_l, nf90_int, &
716 (/dim_ids%nmesh_face/), var_id(k)), &
720 call ncvar_chunk(ncid, var_id(k), chunk_face, nc_fname)
722 call ncvar_deflate(ncid, var_id(k), deflate, shuffle, nc_fname)
725 call nf_verify(nf90_put_att(ncid, var_id(k),
'_FillValue', &
726 (/nf90_fill_int/)), nc_fname)
727 call nf_verify(nf90_put_att(ncid, var_id(k),
'long_name', &
728 longname_l), nc_fname)
732 call ncvar_mf6attr(ncid, var_id(k), k, 0, 0, nc_tag, nc_fname)
736 call nf_verify(nf90_enddef(ncid), nc_fname)
738 call nf_verify(nf90_put_var(ncid, var_id(k), p_mem(:, k)), nc_fname)
747 pkgname, tagname, gridmap_name, shapestr, longname, &
748 nc_tag, deflate, shuffle, chunk_face, nc_fname)
749 integer(I4B),
intent(in) :: ncid
752 type(
disvtype),
pointer,
intent(in) :: dis
753 real(DP),
dimension(:),
pointer,
contiguous,
intent(in) :: p_mem
754 character(len=*),
intent(in) :: nc_varname
755 character(len=*),
intent(in) :: pkgname
756 character(len=*),
intent(in) :: tagname
757 character(len=*),
intent(in) :: gridmap_name
758 character(len=*),
intent(in) :: shapestr
759 character(len=*),
intent(in) :: longname
760 character(len=*),
intent(in) :: nc_tag
761 integer(I4B),
intent(in) :: deflate
762 integer(I4B),
intent(in) :: shuffle
763 integer(I4B),
intent(in) :: chunk_face
764 character(len=*),
intent(in) :: nc_fname
765 integer(I4B),
dimension(2) :: dis_shape
766 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
767 integer(I4B) :: axis_sz, nvals, k
768 integer(I4B),
dimension(:),
allocatable :: var_id
769 character(len=LINELENGTH) :: longname_l, varname_l
771 if (shapestr ==
'NCPL')
then
777 axis_sz = dim_ids%nmesh_face
780 call nf_verify(nf90_redef(ncid), nc_fname)
781 call nf_verify(nf90_def_var(ncid, varname_l, nf90_double, &
782 (/axis_sz/), var_id(1)), &
786 call ncvar_chunk(ncid, var_id(1), chunk_face, nc_fname)
788 call ncvar_deflate(ncid, var_id(1), deflate, shuffle, nc_fname)
791 call nf_verify(nf90_put_att(ncid, var_id(1),
'_FillValue', &
792 (/nf90_fill_double/)), nc_fname)
793 call nf_verify(nf90_put_att(ncid, var_id(1),
'long_name', &
794 longname_l), nc_fname)
798 call ncvar_mf6attr(ncid, var_id(1), 0, 0, 0, nc_tag, nc_fname)
801 call nf_verify(nf90_enddef(ncid), nc_fname)
802 call nf_verify(nf90_put_var(ncid, var_id(1), p_mem), &
806 allocate (var_id(dis%nlay))
809 call nf_verify(nf90_redef(ncid), nc_fname)
815 call nf_verify(nf90_def_var(ncid, varname_l, nf90_double, &
816 (/dim_ids%nmesh_face/), var_id(k)), &
820 call ncvar_chunk(ncid, var_id(k), chunk_face, nc_fname)
822 call ncvar_deflate(ncid, var_id(k), deflate, shuffle, nc_fname)
825 call nf_verify(nf90_put_att(ncid, var_id(k),
'_FillValue', &
826 (/nf90_fill_double/)), nc_fname)
827 call nf_verify(nf90_put_att(ncid, var_id(k),
'long_name', &
828 longname_l), nc_fname)
832 call ncvar_mf6attr(ncid, var_id(k), k, 0, 0, nc_tag, nc_fname)
836 dis_shape(1) = dis%ncpl
837 dis_shape(2) = dis%nlay
838 nvals = product(dis_shape)
839 dbl2d(1:dis_shape(1), 1:dis_shape(2)) => p_mem(1:nvals)
842 call nf_verify(nf90_enddef(ncid), nc_fname)
844 call nf_verify(nf90_put_var(ncid, var_id(k), dbl2d(:, k)), nc_fname)
855 pkgname, tagname, gridmap_name, shapestr, longname, &
856 nc_tag, deflate, shuffle, chunk_face, iper, iaux, &
859 integer(I4B),
intent(in) :: ncid
862 type(
disvtype),
pointer,
intent(in) :: disv
863 real(DP),
dimension(:, :),
pointer,
contiguous,
intent(in) :: p_mem
864 character(len=*),
intent(in) :: nc_varname
865 character(len=*),
intent(in) :: pkgname
866 character(len=*),
intent(in) :: tagname
867 character(len=*),
intent(in) :: gridmap_name
868 character(len=*),
intent(in) :: shapestr
869 character(len=*),
intent(in) :: longname
870 character(len=*),
intent(in) :: nc_tag
871 integer(I4B),
intent(in) :: deflate
872 integer(I4B),
intent(in) :: shuffle
873 integer(I4B),
intent(in) :: chunk_face
874 integer(I4B),
intent(in) :: iper
875 integer(I4B),
intent(in) :: iaux
876 character(len=*),
intent(in) :: nc_fname
877 integer(I4B),
dimension(:),
allocatable :: var_id
878 character(len=LINELENGTH) :: longname_l, varname_l
880 real(DP) :: fill_value
885 fill_value = nf90_fill_double
888 allocate (var_id(disv%nlay))
891 call nf_verify(nf90_redef(ncid), nc_fname)
894 varname_l =
export_varname(nc_varname, layer=k, iper=iper, iaux=iaux)
895 longname_l =
export_longname(longname, pkgname, tagname, layer=k, iper=iper)
897 call nf_verify(nf90_def_var(ncid, varname_l, nf90_double, &
898 (/dim_ids%nmesh_face/), var_id(k)), &
902 call ncvar_chunk(ncid, var_id(k), chunk_face, nc_fname)
904 call ncvar_deflate(ncid, var_id(k), deflate, shuffle, nc_fname)
907 call nf_verify(nf90_put_att(ncid, var_id(k),
'_FillValue', &
908 (/fill_value/)), nc_fname)
909 call nf_verify(nf90_put_att(ncid, var_id(k),
'long_name', &
910 longname_l), nc_fname)
914 call ncvar_mf6attr(ncid, var_id(k), k, iper, iaux, nc_tag, nc_fname)
918 call nf_verify(nf90_enddef(ncid), nc_fname)
920 call nf_verify(nf90_put_var(ncid, var_id(k), p_mem(:, k)), nc_fname)
subroutine, public dis_transform_xy(x, y, xorigin, yorigin, angrot, xglo, yglo)
Get global (x, y) coordinates from cell-local coordinates.
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
@ mvalidate
validation mode - do not run time steps
real(dp), parameter dnodata
real no data constant
integer(i4b), parameter lenbigline
maximum length of a big line
real(dp), parameter dhnoflo
real no flow constant
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenmempath
maximum length of the memory path
This module contains the DefinitionSelectModule.
type(inputparamdefinitiontype) function, pointer, public get_param_definition_type(input_definition_types, component_type, subcomponent_type, blockname, tagname, filename)
Return parameter definition.
This module defines variable data types.
This module contains the MeshDisvModelModule.
subroutine package_step_ilayer(this, export_pkg, ilayer_varname, ilayer)
netcdf export package dynamic input with ilayer index variable
subroutine export_layer_2d(this, export_pkg, idt, ilayer_read, ialayer, dbl1d, nc_varname, input_attr, iaux)
export layer variable as full grid
subroutine add_mesh_data(this)
netcdf export add mesh information
subroutine disv_export_init(this, modelname, modeltype, modelfname, nc_fname, disenum, nctype, iout)
netcdf export disv init
subroutine nc_export_dbl1d(ncid, dim_ids, var_ids, dis, p_mem, nc_varname, pkgname, tagname, gridmap_name, shapestr, longname, nc_tag, deflate, shuffle, chunk_face, nc_fname)
netcdf export 1D double array
subroutine nc_export_dbl2d(ncid, dim_ids, var_ids, disv, p_mem, nc_varname, pkgname, tagname, gridmap_name, shapestr, longname, nc_tag, deflate, shuffle, chunk_face, iper, iaux, nc_fname)
netcdf export 2D double array
subroutine nc_export_int2d(ncid, dim_ids, var_ids, disv, p_mem, nc_varname, pkgname, tagname, gridmap_name, shapestr, longname, nc_tag, deflate, shuffle, chunk_face, nc_fname)
netcdf export 2D integer array
subroutine package_step(this, export_pkg)
netcdf export package dynamic input
subroutine define_dim(this)
netcdf export define dimensions
subroutine nc_export_int1d(ncid, dim_ids, var_ids, dis, p_mem, nc_varname, pkgname, tagname, gridmap_name, shapestr, longname, nc_tag, deflate, shuffle, chunk_face, iper, nc_fname)
netcdf export 1D integer array
subroutine df(this)
netcdf export define
subroutine step(this)
netcdf export step
subroutine disv_export_destroy(this)
netcdf export disv destroy
subroutine export_input_array(this, pkgtype, pkgname, mempath, idt)
netcdf export an input array
This module contains the MeshModelModule.
character(len=linelength) function, public export_varname(varname, layer, iper, iaux)
build netcdf variable name
subroutine, public ncvar_gridmap(ncid, varid, gridmap_name, nc_fname)
put variable gridmap attributes
subroutine, public ncvar_chunk(ncid, varid, chunk_face, nc_fname)
define variable chunking
subroutine, public ncvar_deflate(ncid, varid, deflate, shuffle, nc_fname)
define variable compression
subroutine, public ncvar_mf6attr(ncid, varid, layer, iper, iaux, nc_tag, nc_fname)
put variable internal attributes
This module contains the NCModelExportModule.
character(len=linelength) function, public export_longname(longname, pkgname, tagname, layer, iper)
build netcdf variable longname
This module contains the NetCDFCommonModule.
subroutine, public nf_verify(res, nc_fname)
error check a netcdf-fortran interface call
This module contains simulation methods.
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
integer(i4b) isim_mode
simulation mode
real(dp), pointer, public totim
time relative to start of simulation
integer(i4b), pointer, public kper
current stress period number
This class is used to store a single deferred-length character string. It was designed to work in an ...
Vertex grid discretization.
type for storing model export dimension ids
type for storing model export variable ids