43 character(len=LINELENGTH),
dimension(:),
allocatable :: param_names
45 integer(I4B),
dimension(:, :),
allocatable :: varids_param
46 integer(I4B),
dimension(:, :),
allocatable :: varids_aux
47 integer(I4B),
dimension(:),
pointer,
contiguous :: mshape => null()
48 integer(I4B),
pointer :: iper
50 integer(I4B) :: nparam
60 character(len=LINELENGTH) :: title
61 character(len=LINELENGTH) :: model
62 character(len=LINELENGTH) :: mesh
63 character(len=LINELENGTH) :: grid
64 character(len=LINELENGTH) :: history
65 character(len=LINELENGTH) :: source
66 character(len=LINELENGTH) :: conventions
67 character(len=LINELENGTH) :: stdname
68 character(len=LINELENGTH) :: longname
77 character(len=LENMODELNAME) :: modelname
78 character(len=LENCOMPONENTNAME) :: modeltype
79 character(len=LINELENGTH) :: modelfname
80 character(len=LINELENGTH) :: nc_fname
81 character(len=LINELENGTH) :: gridmap_name
82 character(len=LINELENGTH) :: mesh_name =
'mesh'
83 character(len=LENMEMPATH) :: dis_mempath
84 character(len=LENMEMPATH) :: ncf_mempath
85 character(len=LENBIGLINE) :: wkt
86 character(len=LENBIGLINE) :: crs_wkt
87 character(len=LINELENGTH) :: datetime
88 character(len=LINELENGTH) :: xname
89 character(len=LINELENGTH) :: lenunits
91 real(dp),
dimension(:),
pointer,
contiguous :: x
92 integer(I4B) :: disenum
94 integer(I4B) :: totnstp
95 integer(I4B),
pointer :: deflate
96 integer(I4B),
pointer :: shuffle
97 integer(I4B),
pointer :: input_attr
98 integer(I4B),
pointer :: chunk_time
100 logical(LGP) :: chunking_active
141 character(len=*),
intent(in) :: ilayer_varname
142 integer(I4B),
intent(in) :: ilayer
150 subroutine epkg_init(this, mf6_input, mshape, naux, param_names, &
158 integer(I4B),
dimension(:),
pointer,
contiguous,
intent(in) :: mshape
159 integer(I4B),
intent(in) :: naux
160 character(len=LINELENGTH),
dimension(:),
allocatable, &
161 intent(in) :: param_names
162 integer(I4B),
intent(in) :: nparam
164 character(len=LENVARNAME) :: rs_varname
165 character(len=LENMEMPATH) :: input_mempath
166 integer(I4B),
pointer :: rsvar
168 this%mf6_input = mf6_input
169 this%mshape => mshape
175 subcomponent=mf6_input%subcomponent_name, &
179 allocate (this%param_names(nparam))
180 allocate (this%param_reads(nparam))
181 allocate (this%varids_param(nparam, mshape(1)))
182 allocate (this%varids_aux(naux, mshape(1)))
186 this%param_names(n) = param_names(n)
187 rs_varname =
rsv_name(param_names(n))
188 call mem_setptr(rsvar, rs_varname, mf6_input%mempath)
189 this%param_reads(n)%invar => rsvar
193 call mem_setptr(this%iper,
'IPER', mf6_input%mempath)
201 if (
allocated(this%param_names))
deallocate (this%param_names)
206 subroutine set(this, modelname, modeltype, modelfname, nctype, disenum)
210 character(len=*),
intent(in) :: modelname
211 character(len=*),
intent(in) :: modeltype
212 character(len=*),
intent(in) :: modelfname
213 integer(I4B),
intent(in) :: nctype
214 integer(I4B),
intent(in) :: disenum
223 this%conventions =
''
228 this%conventions =
'CF-1.13'
230 trim(this%conventions)//
' UGRID-1.0'
233 select case (modeltype)
235 this%title = trim(modelname)//
' hydraulic head'
236 this%longname =
'head'
238 this%title = trim(modelname)//
' concentration'
239 this%longname =
'concentration'
241 this%title = trim(modelname)//
' temperature'
242 this%longname =
'temperature'
244 errmsg = trim(modeltype)//
' models not supported for NetCDF export.'
250 this%title = trim(this%title)//
' array input'
255 this%mesh =
'layered'
259 if (disenum ==
dis)
then
260 this%grid =
'structured'
261 else if (disenum ==
disv)
then
266 this%model = trim(modeltype)//
': '//trim(modelname)
270 this%source =
'MODFLOW 6 '//trim(adjustl(
fullversion))
273 call date_and_time(values=values)
274 write (this%history,
'(a,i0,a,i0,a,i0,a,i0,a,i0,a,i0,a,i0)') &
275 'first created ', values(1),
'/', values(2),
'/', values(3),
' ', &
276 values(5),
':', values(6),
':', values(7),
'.', values(8)
281 subroutine export_init(this, modelname, modeltype, modelfname, nc_fname, &
282 disenum, nctype, iout)
291 character(len=*),
intent(in) :: modelname
292 character(len=*),
intent(in) :: modeltype
293 character(len=*),
intent(in) :: modelfname
294 character(len=*),
intent(in) :: nc_fname
295 integer(I4B),
intent(in) :: disenum
296 integer(I4B),
intent(in) :: nctype
297 integer(I4B),
intent(in) :: iout
298 character(len=LENMEMPATH) :: model_mempath
302 allocate (this%deflate)
303 allocate (this%shuffle)
304 allocate (this%input_attr)
305 allocate (this%chunk_time)
308 this%modelname = modelname
309 this%modeltype = modeltype
310 this%modelfname = modelfname
311 this%nc_fname = nc_fname
312 this%gridmap_name =
''
313 this%ncf_mempath =
''
319 this%disenum = disenum
327 this%chunking_active = .false.
330 call this%annotation%set(modelname, modeltype, modelfname, nctype, disenum)
333 select case (modeltype)
337 this%xname =
'concentration'
339 this%xname =
'temperature'
341 errmsg = trim(modeltype)//
' models not supported for NetCDF export.'
347 if (disenum ==
dis)
then
349 else if (disenum ==
disu)
then
351 else if (disenum ==
disv)
then
360 if (
filein_fname(this%ncf_mempath,
'NCF6_MEMPATH', this%dis_mempath, &
364 call mem_set_value(this%crs_wkt,
'CRS_WKT', this%ncf_mempath, &
366 call mem_set_value(this%deflate,
'DEFLATE', this%ncf_mempath, &
368 call mem_set_value(this%shuffle,
'SHUFFLE', this%ncf_mempath, &
370 call mem_set_value(this%input_attr,
'ATTR_OFF', this%ncf_mempath, &
372 call mem_set_value(this%chunk_time,
'CHUNK_TIME', this%ncf_mempath, &
373 ncf_found%chunk_time)
376 if (ncf_found%wkt .or. ncf_found%crs_wkt)
then
377 this%gridmap_name =
'projection'
381 if (ncf_found%attr_off)
then
387 this%datetime =
'days since '//trim(
datetime0)
390 this%datetime =
'days since 1970-01-01T00:00:00'
397 this%totnstp = sum(
nstp)
406 integer(I4B),
intent(in) :: idx
408 class(*),
pointer :: obj
410 obj => this%pkglist%GetItem(idx)
411 if (
associated(obj))
then
426 character(len=*),
intent(in) :: pkgname
428 character(len=LINELENGTH) :: attr
430 if (this%input_attr > 0)
then
442 integer(I4B) :: n,
istp
458 character(len=*),
intent(in) :: pkgname
459 character(len=*),
intent(in) :: tagname
460 character(len=*),
intent(in) :: mempath
461 integer(I4B),
optional,
intent(in) :: layer
462 integer(I4B),
optional,
intent(in) :: iaux
463 character(len=LINELENGTH) :: varname
465 contiguous :: auxnames
466 character(len=LINELENGTH) :: pname, vname
470 if (
present(iaux))
then
472 if (tagname ==
'AUX')
then
474 call mem_setptr(auxnames,
'AUXILIARY', mempath)
475 vname = auxnames(iaux)
482 varname = trim(pname)//
'_'//trim(vname)
484 if (
present(layer))
then
487 write (varname,
'(a,i0)') trim(varname)//
'_l', layer
495 component_type, subcomponent_type)
result(lname)
500 character(len=*),
intent(in) :: longname
501 character(len=*),
intent(in) :: pkgname
502 character(len=*),
intent(in) :: tagname
503 character(len=*),
intent(in) :: mempath
504 integer(I4B),
optional,
intent(in) :: layer
505 integer(I4B),
optional,
intent(in) :: iaux
506 character(len=*),
optional,
intent(in) :: component_type
507 character(len=*),
optional,
intent(in) :: subcomponent_type
508 character(len=LINELENGTH) :: lname
510 contiguous :: auxnames
511 character(len=LINELENGTH) :: pname, vname, auxname
516 if (longname ==
'')
then
517 lname = trim(pname)//
' '//trim(vname)
520 if (
present(component_type) .and.
present(subcomponent_type))
then
522 lname = trim(pname)//
' '//trim(lname)
527 if (
present(iaux))
then
529 if (tagname ==
'AUX')
then
531 call mem_setptr(auxnames,
'AUXILIARY', mempath)
532 auxname = auxnames(iaux)
534 lname = trim(lname)//
' '//trim(auxname)
539 if (
present(layer))
then
541 write (lname,
'(a,i0)') trim(lname)//
' layer ', layer
553 do idx = 1, this%pkglist%Count()
554 export_pkg => this%get(idx)
556 if (export_pkg%eper >=
kper) cycle
558 call this%package_step(export_pkg)
560 export_pkg%eper =
kper
575 character(len=*),
intent(in) :: wkt
576 character(len=LINELENGTH) :: gmname
577 character(len=LINELENGTH) :: proj_name
578 character(len=LENBIGLINE) :: wkt_upper
579 integer :: istart, iend
589 istart = index(wkt_upper,
'PROJECTION[')
590 if (istart /= 0)
then
591 istart = istart + len(
'PROJECTION[')
592 do while (istart <= len(wkt))
593 if (wkt(istart:istart) ==
'"')
exit
596 if (istart > len(wkt))
return
598 iend = index(wkt(istart:),
'"')
599 if (iend == 0)
return
600 iend = istart + iend - 2
601 if (iend < istart)
return
602 proj_name = wkt(istart:iend)
604 select case (trim(proj_name))
605 case (
'TRANSVERSE_MERCATOR')
606 gmname =
'transverse_mercator'
607 case (
'LAMBERT_CONFORMAL_CONIC_2SP',
'LAMBERT_CONFORMAL_CONIC_1SP')
608 gmname =
'lambert_conformal_conic'
609 case (
'ALBERS_CONIC_EQUAL_AREA')
610 gmname =
'albers_conical_equal_area'
611 case (
'MERCATOR_1SP',
'MERCATOR_2SP')
613 case (
'POLAR_STEREOGRAPHIC')
614 gmname =
'polar_stereographic'
620 istart = index(wkt_upper,
'METHOD[')
621 if (istart == 0)
return
622 istart = istart + len(
'METHOD[')
623 do while (istart <= len(wkt))
624 if (wkt(istart:istart) ==
'"')
exit
627 if (istart > len(wkt))
return
629 iend = index(wkt(istart:),
'"')
630 if (iend == 0)
return
631 iend = istart + iend - 2
632 if (iend < istart)
return
633 proj_name = wkt(istart:iend)
635 select case (trim(proj_name))
636 case (
'TRANSVERSE MERCATOR')
637 gmname =
'transverse_mercator'
638 case (
'LAMBERT CONIC CONFORMAL (2SP)',
'LAMBERT CONIC CONFORMAL (1SP)')
639 gmname =
'lambert_conformal_conic'
640 case (
'ALBERS EQUAL AREA')
641 gmname =
'albers_conical_equal_area'
642 case (
'MERCATOR (VARIANT A)',
'MERCATOR (VARIANT B)')
644 case (
'POLAR STEREOGRAPHIC (VARIANT A)',
'POLAR STEREOGRAPHIC (VARIANT B)')
645 gmname =
'polar_stereographic'
658 character(len=*),
intent(in) :: wkt
659 character(len=*),
intent(in) :: name
660 logical(LGP),
intent(out) :: found
662 character(len=LENBIGLINE) :: wkt_upper
663 character(len=LINELENGTH) :: target_upper
664 integer :: ipos, istart, iend, ios, wkt_len
668 wkt_len = len_trim(wkt)
669 target_upper =
'"'//trim(name)//
'"'
673 ipos = index(wkt_upper(1:wkt_len), trim(target_upper))
674 if (ipos == 0)
return
676 istart = ipos + len_trim(target_upper)
677 do while (istart <= wkt_len)
678 if (wkt(istart:istart) ==
',')
exit
683 do while (iend <= wkt_len)
684 if (wkt(iend:iend) ==
',' .or. wkt(iend:iend) ==
']')
exit
687 if (iend <= istart)
return
688 read (wkt(istart:iend - 1), *, iostat=ios)
value
689 if (ios == 0) found = .true.
700 character(len=*),
intent(in) :: wkt
701 real(DP),
intent(out) :: semi_major_axis
702 real(DP),
intent(out) :: inverse_flattening
703 logical(LGP),
intent(out) :: found
704 character(len=LENBIGLINE) :: wkt_upper
705 integer :: ipos, i, iend, ios, wkt_len, nquote
708 semi_major_axis =
dzero
709 inverse_flattening =
dzero
710 wkt_len = len_trim(wkt)
714 ipos = index(wkt_upper(1:wkt_len),
'SPHEROID[')
715 if (ipos == 0) ipos = index(wkt_upper(1:wkt_len),
'ELLIPSOID[')
716 if (ipos == 0)
return
721 do while (i <= wkt_len)
722 if (wkt(i:i) ==
'"') nquote = nquote + 1
723 if (nquote == 2)
exit
726 if (nquote < 2)
return
728 if (wkt(i:i) ==
',') i = i + 1
731 do while (iend <= wkt_len)
732 if (wkt(iend:iend) ==
',')
exit
735 if (iend <= i)
return
736 read (wkt(i:iend - 1), *, iostat=ios) semi_major_axis
741 do while (iend <= wkt_len)
742 if (wkt(iend:iend) ==
',' .or. wkt(iend:iend) ==
']')
exit
745 if (iend <= i)
return
746 read (wkt(i:iend - 1), *, iostat=ios) inverse_flattening
747 if (ios == 0) found = .true.
758 latitude_of_projection_origin, &
759 scale_factor_at_central_meridian, &
760 false_easting, false_northing, &
761 semi_major_axis, inverse_flattening, &
763 character(len=*),
intent(in) :: wkt
764 real(dp),
intent(out) :: longitude_of_central_meridian
765 real(dp),
intent(out) :: latitude_of_projection_origin
766 real(dp),
intent(out) :: scale_factor_at_central_meridian
767 real(dp),
intent(out) :: false_easting
768 real(dp),
intent(out) :: false_northing
769 real(dp),
intent(out) :: semi_major_axis
770 real(dp),
intent(out) :: inverse_flattening
771 logical(LGP),
intent(out) :: found
772 logical(LGP) :: f1, f2, f3, f4, f5, f6
774 longitude_of_central_meridian =
wkt_find_param(wkt,
'central_meridian', f1)
775 if (.not. f1) longitude_of_central_meridian = &
778 latitude_of_projection_origin =
wkt_find_param(wkt,
'latitude_of_origin', f2)
779 if (.not. f2) latitude_of_projection_origin = &
782 scale_factor_at_central_meridian =
wkt_find_param(wkt,
'scale_factor', f3)
783 if (.not. f3) scale_factor_at_central_meridian = &
787 if (.not. f4) false_easting =
wkt_find_param(wkt,
'False easting', f4)
790 if (.not. f5) false_northing =
wkt_find_param(wkt,
'False northing', f5)
794 found = f1 .and. f2 .and. f3 .and. f4 .and. f5 .and. f6
808 standard_parallel_2, &
809 longitude_of_central_meridian, &
810 latitude_of_projection_origin, &
811 false_easting, false_northing, &
813 inverse_flattening, is_2sp, found)
814 character(len=*),
intent(in) :: wkt
815 real(dp),
intent(out) :: standard_parallel_1
816 real(dp),
intent(out) :: standard_parallel_2
817 real(dp),
intent(out) :: longitude_of_central_meridian
818 real(dp),
intent(out) :: latitude_of_projection_origin
819 real(dp),
intent(out) :: false_easting
820 real(dp),
intent(out) :: false_northing
821 real(dp),
intent(out) :: semi_major_axis
822 real(dp),
intent(out) :: inverse_flattening
823 logical(LGP),
intent(out) :: is_2sp
824 logical(LGP),
intent(out) :: found
825 logical(LGP) :: f1, f2, f3, f4, f5, f6, f7
827 standard_parallel_2 =
wkt_find_param(wkt,
'standard_parallel_2', f2)
828 if (.not. f2) standard_parallel_2 = &
831 if (.not. is_2sp)
then
836 standard_parallel_1 =
wkt_find_param(wkt,
'standard_parallel_1', f1)
837 if (.not. f1) standard_parallel_1 = &
840 longitude_of_central_meridian =
wkt_find_param(wkt,
'central_meridian', f3)
841 if (.not. f3) longitude_of_central_meridian = &
844 latitude_of_projection_origin =
wkt_find_param(wkt,
'latitude_of_origin', f4)
845 if (.not. f4) latitude_of_projection_origin = &
849 if (.not. f5) false_easting = &
853 if (.not. f6) false_northing = &
858 found = f1 .and. f3 .and. f4 .and. f5 .and. f6 .and. f7
868 standard_parallel_2, &
869 longitude_of_central_meridian, &
870 latitude_of_projection_origin, &
874 inverse_flattening, found)
875 character(len=*),
intent(in) :: wkt
876 real(dp),
intent(out) :: standard_parallel_1
877 real(dp),
intent(out) :: standard_parallel_2
878 real(dp),
intent(out) :: longitude_of_central_meridian
879 real(dp),
intent(out) :: latitude_of_projection_origin
880 real(dp),
intent(out) :: false_easting
881 real(dp),
intent(out) :: false_northing
882 real(dp),
intent(out) :: semi_major_axis
883 real(dp),
intent(out) :: inverse_flattening
884 logical(LGP),
intent(out) :: found
885 logical(LGP) :: f1, f2, f3, f4, f5, f6, f7
887 standard_parallel_1 =
wkt_find_param(wkt,
'standard_parallel_1', f1)
888 if (.not. f1) standard_parallel_1 = &
891 standard_parallel_2 =
wkt_find_param(wkt,
'standard_parallel_2', f2)
892 if (.not. f2) standard_parallel_2 = &
895 longitude_of_central_meridian =
wkt_find_param(wkt,
'longitude_of_center', f3)
896 if (.not. f3) longitude_of_central_meridian = &
899 latitude_of_projection_origin =
wkt_find_param(wkt,
'latitude_of_center', f4)
900 if (.not. f4) latitude_of_projection_origin = &
904 if (.not. f5) false_easting = &
908 if (.not. f6) false_northing = &
913 found = f1 .and. f2 .and. f3 .and. f4 .and. f5 .and. f6 .and. f7
930 character(len=*),
intent(in) :: wkt
931 real(dp),
intent(in) :: xorigin, yorigin, angrot
932 character(len=LENBIGLINE) :: derived_wkt
933 character(len=LENBIGLINE) :: wkt_trim, wkt_upper, base_body, conversion
934 character(len=30) :: a0s, a1s, a2s, b0s, b1s, b2s
935 integer :: nstart, i, depth, closures, iend, wkt_len
936 real(dp) :: ang, a0, a1, a2, b0, b1, b2
941 wkt_trim = trim(adjustl(wkt))
942 wkt_len = len_trim(wkt_trim)
945 if (wkt_len < 9 .or. wkt_upper(1:8) /=
'PROJCRS[')
return
954 do i = nstart, wkt_len
955 if (wkt_trim(i:i) ==
'[')
then
957 else if (wkt_trim(i:i) ==
']')
then
960 closures = closures + 1
961 if (closures == 2)
then
968 if (iend == 0)
return
969 base_body = wkt_trim(nstart:iend)
973 a0 = -(xorigin * cos(ang) + yorigin * sin(ang))
976 b0 = xorigin * sin(ang) - yorigin * cos(ang)
979 write (a0s,
'(es22.15)') a0
980 write (a1s,
'(es22.15)') a1
981 write (a2s,
'(es22.15)') a2
982 write (b0s,
'(es22.15)') b0
983 write (b1s,
'(es22.15)') b1
984 write (b2s,
'(es22.15)') b2
986 conversion =
'DERIVINGCONVERSION["MODFLOW 6 grid rotation",'// &
987 'METHOD["Affine parametric transformation",'// &
988 'ID["EPSG",9624]],'// &
989 'PARAMETER["A0",'//trim(adjustl(a0s))// &
990 ',LENGTHUNIT["metre",1]],'// &
991 'PARAMETER["A1",'//trim(adjustl(a1s))// &
992 ',SCALEUNIT["unity",1]],'// &
993 'PARAMETER["A2",'//trim(adjustl(a2s))// &
994 ',SCALEUNIT["unity",1]],'// &
995 'PARAMETER["B0",'//trim(adjustl(b0s))// &
996 ',LENGTHUNIT["metre",1]],'// &
997 'PARAMETER["B1",'//trim(adjustl(b1s))// &
998 ',SCALEUNIT["unity",1]],'// &
999 'PARAMETER["B2",'//trim(adjustl(b2s))// &
1000 ',SCALEUNIT["unity",1]]]'
1002 derived_wkt =
'DERIVEDPROJCRS["MODFLOW 6 rotated grid CRS",'// &
1003 'BASEPROJCRS['//trim(base_body)//
'],'// &
1004 trim(conversion)//
','// &
1005 'CS[Cartesian,2],'// &
1006 'AXIS["easting (X)",east,ORDER[1],LENGTHUNIT["metre",1]],'// &
1007 'AXIS["northing (Y)",north,ORDER[2],LENGTHUNIT["metre",1]]]'
1017 deallocate (this%deflate)
1018 deallocate (this%shuffle)
1019 deallocate (this%input_attr)
1020 deallocate (this%chunk_time)
1022 if (this%ncf_mempath /=
'')
then
abstract interfaces for model netcdf export type
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
integer(i4b), parameter lenmodelname
maximum length of the model name
integer(i4b), parameter lenbigline
maximum length of a big line
@ disu
DISV6 discretization.
@ dis
DIS6 discretization.
@ disv
DISU6 discretization.
integer(i4b), parameter lenvarname
maximum length of a variable name
real(dp), parameter dpio180
real constant
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenmempath
maximum length of the memory path
logical function, public idm_multi_package(component, subcomponent)
This module defines variable data types.
Load context for IDM generic dynamic loaders.
character(len=lenvarname) function, public rsv_name(mf6varname)
create read state variable name
character(len=lenmemseparator), parameter mempathseparator
used to build up the memory address for the stored variables
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
subroutine, public memorystore_remove(component, subcomponent, context)
This module contains the NCModelExportModule.
character(len=lenbigline) function, public wrap_rotated_crs(wkt, xorigin, yorigin, angrot)
wrap a WKT2 PROJCRS in a derived CRS encoding grid rotation
class(exportpackagetype) function, pointer export_get(this, idx)
retrieve dynamic export object from package list
character(len=linelength) function, public wkt_to_cf_gridmapping(wkt)
map a WKT string to a CF-1.13 grid_mapping_name
character(len=linelength) function, public export_varname(pkgname, tagname, mempath, layer, iaux)
build netcdf variable name
integer(i4b) function istp(this)
step index for timeseries data
subroutine epkg_init(this, mf6_input, mshape, naux, param_names, nparam)
initialize dynamic package export object
@, public netcdf_structured
netcdf structrured export
subroutine export_destroy(this)
destroy model netcdf export object
subroutine export_init(this, modelname, modeltype, modelfname, nc_fname, disenum, nctype, iout)
initialization of model netcdf export
subroutine, public wkt_lambert_conformal_conic_params(wkt, standard_parallel_1, standard_parallel_2, longitude_of_central_meridian, latitude_of_projection_origin, false_easting, false_northing, semi_major_axis, inverse_flattening, is_2sp, found)
extract CF lambert_conformal_conic grid_mapping parameters
subroutine, public wkt_transverse_mercator_params(wkt, longitude_of_central_meridian, latitude_of_projection_origin, scale_factor_at_central_meridian, false_easting, false_northing, semi_major_axis, inverse_flattening, found)
extract CF transverse_mercator grid_mapping parameters
real(dp) function wkt_find_param(wkt, name, found)
find the first number following a quoted parameter name
@, public netcdf_mesh2d
netcdf ugrid layered mesh export
@, public netcdf_undef
undefined netcdf export type
subroutine set(this, modelname, modeltype, modelfname, nctype, disenum)
set netcdf file scoped attributes
character(len=linelength) function input_attribute(this, pkgname, idt)
build modflow_input attribute string
subroutine epkg_destroy(this)
destroy dynamic package export object
subroutine wkt_find_ellipsoid(wkt, semi_major_axis, inverse_flattening, found)
find semi-major axis and inverse flattening from a WKT string
character(len=linelength) function, public export_longname(longname, pkgname, tagname, mempath, layer, iaux, component_type, subcomponent_type)
build netcdf variable longname
subroutine export_input(this)
netcdf dynamic package period export
subroutine, public wkt_albers_conical_equal_area_params(wkt, standard_parallel_1, standard_parallel_2, longitude_of_central_meridian, latitude_of_projection_origin, false_easting, false_northing, semi_major_axis, inverse_flattening, found)
extract CF albers_conical_equal_area grid_mapping parameters
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
character(len=linelength) idm_context
integer(i4b) isim_mode
simulation mode
This module contains the SourceCommonModule.
logical(lgp) function, public filein_fname(filename, tagname, input_mempath, input_fname)
enforce and set a single input filename provided via FILEIN keyword
integer(i4b), dimension(:), pointer, public, contiguous nstp
number of time steps in each stress period
character(len=lendatetime), pointer, public datetime0
starting date and time for the simulation
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
integer(i4b), pointer, public nper
number of stress period
This module contains version information.
character(len= *), parameter fullversion
This class is used to store a single deferred-length character string. It was designed to work in an ...
A generic heterogeneous doubly-linked list.
Pointer type for read state variable.
abstract type for model netcdf export type
netcdf export attribute annotations
base class for an export model