33 character(len=LENFTYPE) ::
ftype =
'UZF'
34 character(len=LENPACKAGENAME) ::
text =
' UZF CELLS'
42 integer(I4B),
pointer :: iprwcont => null()
43 integer(I4B),
pointer :: iwcontout => null()
44 integer(I4B),
pointer :: ibudgetout => null()
45 integer(I4B),
pointer :: ibudcsv => null()
46 integer(I4B),
pointer :: ipakcsv => null()
49 integer(I4B),
pointer :: bditems => null()
50 integer(I4B),
pointer :: nbdtxt => null()
51 character(len=LENBUDTXT),
dimension(:),
pointer, &
52 contiguous :: bdtxt => null()
53 character(len=LENBOUNDNAME),
dimension(:),
pointer, &
54 contiguous :: uzfname => null()
64 integer(I4B),
pointer :: gwfiss => null()
65 real(dp),
dimension(:),
pointer,
contiguous :: gwfhcond => null()
68 integer(I4B),
pointer :: nwav_pvar => null()
69 integer(I4B),
pointer :: ntrail_pvar => null()
70 integer(I4B),
pointer :: nsets => null()
71 integer(I4B),
pointer :: nodes => null()
72 integer(I4B),
pointer :: readflag => null()
73 integer(I4B),
pointer :: ietflag => null()
74 integer(I4B),
pointer :: igwetflag => null()
75 integer(I4B),
pointer :: iseepflag => null()
76 integer(I4B),
pointer :: imaxcellcnt => null()
77 integer(I4B),
pointer :: iuzf2uzf => null()
79 integer(I4B),
dimension(:),
pointer,
contiguous :: igwfnode => null()
80 integer(I4B),
dimension(:),
pointer,
contiguous :: ia => null()
81 integer(I4B),
dimension(:),
pointer,
contiguous :: ja => null()
83 real(dp),
dimension(:),
pointer,
contiguous :: appliedinf => null()
84 real(dp),
dimension(:),
pointer,
contiguous :: rejinf => null()
85 real(dp),
dimension(:),
pointer,
contiguous :: rejinf0 => null()
86 real(dp),
dimension(:),
pointer,
contiguous :: rejinftomvr => null()
87 real(dp),
dimension(:),
pointer,
contiguous :: infiltration => null()
88 real(dp),
dimension(:),
pointer,
contiguous :: gwet_pvar => null()
89 real(dp),
dimension(:),
pointer,
contiguous :: uzet => null()
90 real(dp),
dimension(:),
pointer,
contiguous :: gwd => null()
91 real(dp),
dimension(:),
pointer,
contiguous :: gwd0 => null()
92 real(dp),
dimension(:),
pointer,
contiguous :: gwdtomvr => null()
93 real(dp),
dimension(:),
pointer,
contiguous :: rch => null()
94 real(dp),
dimension(:),
pointer,
contiguous :: rch0 => null()
95 real(dp),
dimension(:),
pointer,
contiguous :: qsto => null()
96 real(dp),
dimension(:),
pointer,
contiguous :: wcnew => null()
97 real(dp),
dimension(:),
pointer,
contiguous :: wcold => null()
101 real(dp),
dimension(:),
pointer,
contiguous :: sinf_pvar => null()
102 real(dp),
dimension(:),
pointer,
contiguous :: pet_pvar => null()
103 real(dp),
dimension(:),
pointer,
contiguous :: extdp => null()
104 real(dp),
dimension(:),
pointer,
contiguous :: extwc_pvar => null()
105 real(dp),
dimension(:),
pointer,
contiguous :: ha_pvar => null()
106 real(dp),
dimension(:),
pointer,
contiguous :: hroot_pvar => null()
107 real(dp),
dimension(:),
pointer,
contiguous :: rootact_pvar => null()
110 real(dp),
dimension(:, :),
pointer,
contiguous :: uauxvar => null()
113 integer(I4B),
pointer :: iconvchk => null()
116 real(dp),
dimension(:),
pointer,
contiguous :: deriv => null()
119 real(dp),
pointer :: totfluxtot => null()
120 integer(I4B),
pointer :: issflag => null()
121 integer(I4B),
pointer :: issflagold => null()
122 integer(I4B),
pointer :: istocb => null()
125 integer(I4B),
pointer :: cbcauxitems => null()
126 character(len=16),
dimension(:),
pointer,
contiguous :: cauxcbc => null()
127 real(dp),
dimension(:),
pointer,
contiguous :: qauxcbc => null()
174 subroutine uzf_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname)
178 class(
bndtype),
pointer :: packobj
179 integer(I4B),
intent(in) :: id
180 integer(I4B),
intent(in) :: ibcnum
181 integer(I4B),
intent(in) :: inunit
182 integer(I4B),
intent(in) :: iout
183 character(len=*),
intent(in) :: namemodel
184 character(len=*),
intent(in) :: pakname
186 type(
uzftype),
pointer :: uzfobj
193 call packobj%set_names(ibcnum, namemodel, pakname,
ftype)
197 call uzfobj%uzf_allocate_scalars()
200 call packobj%pack_initialize()
202 packobj%inunit = inunit
205 packobj%ibcnum = ibcnum
221 class(
uzftype),
intent(inout) :: this
226 call this%obs%obs_ar()
229 call this%BndType%allocate_arrays()
237 if (this%inamedbound /= 0)
then
239 this%boundname(n) = this%uzfname(n)
244 call this%copy_boundname()
248 this%nodelist(i) = this%igwfnode(i)
251 call this%uzfobj%sethead(i, hgwf)
255 if (this%imover /= 0)
then
256 allocate (this%pakmvrobj)
257 call this%pakmvrobj%ar(this%maxbound, this%maxbound, this%memoryPath)
268 class(
uzftype),
intent(inout) :: this
277 call mem_allocate(this%igwfnode, this%nodes,
'IGWFNODE', this%memoryPath)
278 call mem_allocate(this%appliedinf, this%nodes,
'APPLIEDINF', this%memoryPath)
279 call mem_allocate(this%rejinf, this%nodes,
'REJINF', this%memoryPath)
280 call mem_allocate(this%rejinf0, this%nodes,
'REJINF0', this%memoryPath)
281 call mem_allocate(this%rejinftomvr, this%nodes,
'REJINFTOMVR', &
283 call mem_allocate(this%infiltration, this%nodes,
'INFILTRATION', &
285 call mem_allocate(this%gwet_pvar, this%nodes,
'GWET_PVAR', this%memoryPath)
286 call mem_allocate(this%uzet, this%nodes,
'UZET', this%memoryPath)
287 call mem_allocate(this%gwd, this%nodes,
'GWD', this%memoryPath)
288 call mem_allocate(this%gwd0, this%nodes,
'GWD0', this%memoryPath)
289 call mem_allocate(this%gwdtomvr, this%nodes,
'GWDTOMVR', this%memoryPath)
290 call mem_allocate(this%rch, this%nodes,
'RCH', this%memoryPath)
291 call mem_allocate(this%rch0, this%nodes,
'RCH0', this%memoryPath)
292 call mem_allocate(this%qsto, this%nodes,
'QSTO', this%memoryPath)
293 call mem_allocate(this%deriv, this%nodes,
'DERIV', this%memoryPath)
296 call mem_allocate(this%ia, this%dis%nodes + 1,
'IA', this%memoryPath)
297 call mem_allocate(this%ja, this%nodes,
'JA', this%memoryPath)
300 call mem_allocate(this%sinf_pvar, this%nodes,
'SINF_PVAR', this%memoryPath)
301 call mem_allocate(this%pet_pvar, this%nodes,
'PET_PVAR', this%memoryPath)
302 call mem_allocate(this%extdp, this%nodes,
'EXDP_PVAR', this%memoryPath)
303 call mem_allocate(this%extwc_pvar, this%nodes,
'EXTWC_PVAR', this%memoryPath)
304 call mem_allocate(this%ha_pvar, this%nodes,
'HA_PVAR', this%memoryPath)
305 call mem_allocate(this%hroot_pvar, this%nodes,
'HROOT_PVAR', this%memoryPath)
306 call mem_allocate(this%rootact_pvar, this%nodes,
'ROOTACT_PVAR', &
308 call mem_allocate(this%uauxvar, this%naux, this%nodes,
'UAUXVAR', &
313 this%appliedinf(i) =
dzero
314 this%rejinf(i) =
dzero
315 this%rejinf0(i) =
dzero
316 this%rejinftomvr(i) =
dzero
317 this%gwet_pvar(i) =
dzero
321 this%gwdtomvr(i) =
dzero
325 this%deriv(i) =
dzero
329 this%sinf_pvar(i) =
dzero
330 this%pet_pvar(i) =
dzero
331 this%extdp(i) =
dzero
332 this%extwc_pvar(i) =
dzero
333 this%ha_pvar(i) =
dzero
334 this%hroot_pvar(i) =
dzero
335 this%rootact_pvar(i) =
dzero
337 if (this%iauxmultcol > 0 .and. j == this%iauxmultcol)
then
338 this%uauxvar(j, i) =
done
340 this%uauxvar(j, i) =
dzero
344 do i = 1, this%dis%nodes + 1
349 allocate (this%bdtxt(this%nbdtxt))
350 this%bdtxt(1) =
' UZF-INF'
351 this%bdtxt(2) =
' UZF-GWRCH'
352 this%bdtxt(3) =
' UZF-GWD'
353 this%bdtxt(4) =
' UZF-GWET'
354 this%bdtxt(5) =
' UZF-GWD TO-MVR'
357 call mem_allocate(this%wcnew, this%nodes,
'WCNEW', this%memoryPath)
358 call mem_allocate(this%wcold, this%nodes,
'WCOLD', this%memoryPath)
360 this%wcnew(i) =
dzero
361 this%wcold(i) =
dzero
365 allocate (this%cauxcbc(this%cbcauxitems))
366 allocate (this%uzfname(this%nodes))
369 call mem_allocate(this%qauxcbc, this%cbcauxitems,
'QAUXCBC', this%memoryPath)
370 do i = 1, this%cbcauxitems
371 this%qauxcbc(i) =
dzero
390 class(
uzftype),
intent(inout) :: this
391 character(len=*),
intent(inout) :: option
392 logical,
intent(inout) :: found
394 character(len=MAXCHARLEN) :: fname, keyword
396 character(len=*),
parameter :: fmtnotfound = &
397 &
"(4x, 'NO UZF OPTIONS WERE FOUND.')"
398 character(len=*),
parameter :: fmtet = &
399 "(4x, 'ET WILL BE SIMULATED WITHIN UZ AND GW ZONES, WITH LINEAR ', &
400 &'GWET IF OPTION NOT SPECIFIED OTHERWISE.')"
401 character(len=*),
parameter :: fmtgwetlin = &
402 &
"(4x, 'GROUNDWATER ET FUNCTION WILL BE LINEAR.')"
403 character(len=*),
parameter :: fmtgwetsquare = &
404 &
"(4x, 'GROUNDWATER ET FUNCTION WILL BE SQUARE WITH SMOOTHING.')"
405 character(len=*),
parameter :: fmtgwseepout = &
406 &
"(4x, 'GROUNDWATER DISCHARGE TO LAND SURFACE WILL BE SIMULATED.')"
407 character(len=*),
parameter :: fmtuzetwc = &
408 &
"(4x, 'UNSATURATED ET FUNCTION OF WATER CONTENT.')"
409 character(len=*),
parameter :: fmtuzetae = &
410 &
"(4x, 'UNSATURATED ET FUNCTION OF AIR ENTRY PRESSURE.')"
411 character(len=*),
parameter :: fmtuznlay = &
412 &
"(4x, 'UNSATURATED FLOW WILL BE SIMULATED SEPARATELY IN EACH LAYER.')"
413 character(len=*),
parameter :: fmtuzfbin = &
414 "(4x, 'UZF ', 1x, a, 1x, ' WILL BE SAVED TO FILE: ', &
415 &a, /4x, 'OPENED ON UNIT: ', I0)"
416 character(len=*),
parameter :: fmtuzfopt = &
417 &
"(4x, 'UZF ', a, ' VALUE (',g15.7,') SPECIFIED.')"
426 case (
'WATER_CONTENT')
427 call this%parser%GetStringCaps(keyword)
428 if (keyword ==
'FILEOUT')
then
429 call this%parser%GetString(fname)
431 call openfile(this%iwcontout, this%iout, fname,
'DATA(BINARY)', &
433 write (this%iout, fmtuzfbin)
'WATER-CONTENT', trim(adjustl(fname)), &
437 &MUST BE FOLLOWED BY FILEOUT')
440 call this%parser%GetStringCaps(keyword)
441 if (keyword ==
'FILEOUT')
then
442 call this%parser%GetString(fname)
444 call openfile(this%ibudgetout, this%iout, fname,
'DATA(BINARY)', &
446 write (this%iout, fmtuzfbin)
'BUDGET', trim(adjustl(fname)), &
449 call store_error(
'OPTIONAL BUDGET KEYWORD MUST BE FOLLOWED BY FILEOUT')
452 call this%parser%GetStringCaps(keyword)
453 if (keyword ==
'FILEOUT')
then
454 call this%parser%GetString(fname)
456 call openfile(this%ibudcsv, this%iout, fname,
'CSV', &
457 filstat_opt=
'REPLACE')
458 write (this%iout, fmtuzfbin)
'BUDGET CSV', trim(adjustl(fname)), &
461 call store_error(
'OPTIONAL BUDGETCSV KEYWORD MUST BE FOLLOWED BY &
464 case (
'PACKAGE_CONVERGENCE')
465 call this%parser%GetStringCaps(keyword)
466 if (keyword ==
'FILEOUT')
then
467 call this%parser%GetString(fname)
469 call openfile(this%ipakcsv, this%iout, fname,
'CSV', &
470 filstat_opt=
'REPLACE', mode_opt=
mnormal)
471 write (this%iout, fmtuzfbin)
'PACKAGE_CONVERGENCE', &
472 trim(adjustl(fname)), this%ipakcsv
474 call store_error(
'OPTIONAL PACKAGE_CONVERGENCE KEYWORD MUST BE '// &
475 'FOLLOWED BY FILEOUT')
480 write (this%iout, fmtet)
483 write (this%iout, fmtgwetlin)
486 write (this%iout, fmtgwetsquare)
487 case (
'SIMULATE_GWSEEP')
489 write (this%iout, fmtgwseepout)
493 'USE DRN PACKAGE TO SIMULATE GROUNDWATER DISCHARGE TO LAND SURFACE '// &
497 call deprecation_warning(
'OPTIONS',
'SIMULATE_GWSEEP',
'6.5.0', &
498 warnmsg, this%parser%GetUnit())
501 write (this%iout, fmtuzetwc)
504 write (this%iout, fmtuzetae)
510 case (
'DEV_NO_FINAL_CHECK')
511 call this%parser%DevOpt()
513 write (this%iout,
'(4x,a)') &
514 'A FINAL CONVERGENCE CHECK OF THE CHANGE IN UZF RECHARGE &
540 class(
uzftype),
intent(inout) :: this
541 character(len=LINELENGTH) :: keyword
543 logical :: isfound, endOfBlock
551 call this%parser%GetBlock(
'DIMENSIONS', isfound, ierr, &
552 supportopenclose=.true.)
556 write (this%iout,
'(/1x,a)') &
557 'PROCESSING '//trim(adjustl(this%text))//
' DIMENSIONS'
559 call this%parser%GetNextLine(endofblock)
561 call this%parser%GetStringCaps(keyword)
562 select case (keyword)
564 this%nodes = this%parser%GetInteger()
565 write (this%iout,
'(4x,a,i0)')
'NUZFCELLS = ', this%nodes
567 this%ntrail_pvar = this%parser%GetInteger()
568 write (this%iout,
'(4x,a,i0)')
'NTRAILWAVES = ', this%ntrail_pvar
570 this%nsets = this%parser%GetInteger()
571 write (this%iout,
'(4x,a,i0)')
'NTRAILSETS = ', this%nsets
574 'Unknown '//trim(this%text)//
' dimension: ', trim(keyword)
577 write (this%iout,
'(1x,a)') &
578 'END OF '//trim(adjustl(this%text))//
' DIMENSIONS'
580 call store_error(
'Required dimensions block not found.')
584 this%maxbound = this%maxbound + this%nodes
585 this%nbound = this%maxbound
588 if (this%nodes <= 0)
then
590 'NUZFCELLS was not specified or was specified incorrectly.'
594 if (this%ntrail_pvar <= 0)
then
596 'NTRAILWAVES was not specified or was specified incorrectly.'
600 if (this%nsets <= 0)
then
602 'NWAVESETS was not specified or was specified incorrectly.'
608 call this%parser%StoreErrorUnit()
612 this%nwav_pvar = this%ntrail_pvar * this%nsets
616 call this%define_listlabel()
619 call this%uzf_allocate_arrays()
622 allocate (this%uzfobj)
623 call this%uzfobj%init(this%nodes, this%nwav_pvar, this%memoryPath)
624 call this%uzfobjwork%init(1, this%nwav_pvar)
627 call this%read_cell_properties()
630 if (this%iprpak /= 0)
then
631 call this%print_cell_properties()
635 call this%uzf_setup_budobj()
654 class(
uzftype),
intent(inout) :: this
656 character(len=LENBOUNDNAME) :: bndName
657 character(len=LINELENGTH) :: text
658 character(len=LINELENGTH) :: line
660 logical :: endOfBlock
665 real(DP),
pointer :: bndElem => null()
667 character(len=20) :: cellid
668 character(len=LINELENGTH) :: title
669 character(len=LINELENGTH) :: tag
670 integer(I4B) :: ntabrows
671 integer(I4B) :: ntabcols
674 character(len=*),
parameter :: fmtlsp = &
675 &
"(1X,/1X,'REUSING ',A,'S FROM LAST STRESS PERIOD')"
676 character(len=*),
parameter :: fmtblkerr = &
677 &
"('Looking for BEGIN PERIOD iper. Found ', a, ' instead.')"
678 character(len=*),
parameter :: fmtisvflow = &
679 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
680 &WHENEVER ICBCFL IS NOT ZERO.')"
681 character(len=*),
parameter :: fmtflow = &
682 &
"(4x, 'FLOWS WILL BE SAVED TO FILE: ', a, /4x, 'OPENED ON UNIT: ', I7)"
686 if (this%inunit == 0)
return
689 if (this%ionper <
kper)
then
692 call this%parser%GetBlock(
'PERIOD', isfound, ierr, &
693 supportopenclose=.true., &
694 blockrequired=.false.)
698 call this%read_check_ionper()
704 this%ionper =
nper + 1
707 call this%parser%GetCurrentLine(line)
708 write (
errmsg, fmtblkerr) adjustl(trim(line))
710 call this%parser%StoreErrorUnit()
716 this%issflag = this%gwfiss
719 if (this%ionper ==
kper)
then
722 if (this%iprpak /= 0)
then
729 if (this%ietflag /= 0)
then
730 ntabcols = ntabcols + 3
731 if (this%ietflag == 2)
then
732 ntabcols = ntabcols + 3
735 if (this%inamedbound == 1)
then
736 ntabcols = ntabcols + 1
740 title = trim(adjustl(this%text))//
' PACKAGE ('// &
741 trim(adjustl(this%packName))//
') DATA FOR PERIOD'
742 write (title,
'(a,1x,i6)') trim(adjustl(title)),
kper
743 call table_cr(this%inputtab, this%packName, title)
744 call this%inputtab%table_df(ntabrows, ntabcols, this%iout, &
747 call this%inputtab%initialize_column(tag, 10)
749 call this%inputtab%initialize_column(tag, 20, alignment=
tableft)
751 call this%inputtab%initialize_column(tag, 12)
752 if (this%ietflag /= 0)
then
754 call this%inputtab%initialize_column(tag, 12)
756 call this%inputtab%initialize_column(tag, 12)
758 call this%inputtab%initialize_column(tag, 12)
759 if (this%ietflag == 2)
then
761 call this%inputtab%initialize_column(tag, 12)
763 call this%inputtab%initialize_column(tag, 12)
765 call this%inputtab%initialize_column(tag, 12)
768 if (this%inamedbound == 1)
then
770 call this%inputtab%initialize_column(tag,
lenboundname, &
777 call this%parser%GetNextLine(endofblock)
781 i = this%parser%GetInteger()
782 if (i < 1 .or. i > this%nodes)
then
783 tag = trim(adjustl(this%text))//
' PACKAGE ('// &
784 trim(adjustl(this%packName))//
') DATA FOR PERIOD'
785 write (tag,
'(a,1x,i0)') trim(adjustl(tag)),
kper
787 write (
errmsg,
'(a,a,i0,1x,a,i0,a)') &
788 trim(adjustl(tag)),
': UZFNO ', i, &
789 'must be greater than 0 and less than or equal to ', this%nodes,
'.'
795 if (this%inamedbound > 0)
then
796 bndname = this%boundname(i)
802 call this%parser%GetStringCaps(text)
804 bndelem => this%sinf_pvar(i)
806 'BND', this%tsManager, this%iprpak, &
810 call this%parser%GetStringCaps(text)
812 bndelem => this%pet_pvar(i)
814 'BND', this%tsManager, this%iprpak, &
818 call this%parser%GetStringCaps(text)
820 bndelem => this%extdp(i)
822 'BND', this%tsManager, this%iprpak, &
826 call this%parser%GetStringCaps(text)
828 bndelem => this%extwc_pvar(i)
830 'BND', this%tsManager, this%iprpak, &
834 call this%parser%GetStringCaps(text)
836 bndelem => this%ha_pvar(i)
838 'BND', this%tsManager, this%iprpak, &
842 call this%parser%GetStringCaps(text)
844 bndelem => this%hroot_pvar(i)
846 'BND', this%tsManager, this%iprpak, &
850 call this%parser%GetStringCaps(text)
852 bndelem => this%rootact_pvar(i)
854 'BND', this%tsManager, this%iprpak, &
859 call this%parser%GetStringCaps(text)
860 bndelem => this%uauxvar(j, i)
862 'AUX', this%tsManager, this%iprpak, &
867 if (this%iprpak /= 0)
then
870 node = this%igwfnode(i)
872 call this%dis%noder_to_string(node, cellid)
878 call this%inputtab%add_term(i)
879 call this%inputtab%add_term(cellid)
880 call this%inputtab%add_term(this%sinf_pvar(i))
881 if (this%ietflag /= 0)
then
882 call this%inputtab%add_term(this%pet_pvar(i))
883 call this%inputtab%add_term(this%extdp(i))
884 call this%inputtab%add_term(this%extwc_pvar(i))
885 if (this%ietflag == 2)
then
886 call this%inputtab%add_term(this%ha_pvar(i))
887 call this%inputtab%add_term(this%hroot_pvar(i))
888 call this%inputtab%add_term(this%rootact_pvar(i))
891 if (this%inamedbound == 1)
then
892 call this%inputtab%add_term(this%boundname(i))
899 if (this%iprpak /= 0)
then
900 call this%inputtab%finalize_table()
905 write (this%iout, fmtlsp) trim(this%filtyp)
911 call this%parser%StoreErrorUnit()
915 if ((this%issflag == 0 .AND.
kper == 1) .or. &
916 (
kper == 2 .AND. this%issflagold == 1))
then
918 call this%uzfobj%setwaves(i)
925 this%wcnew(i) = this%uzfobj%get_wcnew(i)
930 this%issflagold = this%issflag
945 integer(I4B) :: ivertflag
946 integer(I4B) :: n, iaux
947 real(DP) :: rval1, rval2, rval3
950 call this%TsManager%ad()
955 if (this%naux > 0)
then
956 do n = 1, this%maxbound
957 do iaux = 1, this%naux
958 if (this%noupdateauxvar(iaux) /= 0) cycle
959 this%auxvar(iaux, n) = this%uauxvar(iaux, n)
969 this%wcold(i) = this%wcnew(i)
978 this%wcnew(i) = this%wcold(i)
984 call this%uzfobj%advance(i)
991 ivertflag = this%uzfobj%ivertcon(i)
994 if (this%iauxmultcol > 0)
then
995 rval1 = this%uauxvar(this%iauxmultcol, i)
996 call this%uzfobj%setdatauzfarea(i, rval1)
1000 rval1 = this%sinf_pvar(i)
1001 call this%uzfobj%setdatafinf(i, rval1)
1004 rval1 = this%pet_pvar(i)
1005 rval2 = this%extdp(i)
1006 call this%uzfobj%setdataet(i, ivertflag, rval1, rval2)
1009 rval1 = this%extwc_pvar(i)
1010 call this%uzfobj%setdataetwc(i, ivertflag, rval1)
1013 rval1 = this%ha_pvar(i)
1014 rval2 = this%hroot_pvar(i)
1015 rval3 = this%rootact_pvar(i)
1016 call this%uzfobj%setdataetha(i, ivertflag, rval1, rval2, rval3)
1020 if (this%iauxmultcol > 0)
then
1021 call this%check_cell_area()
1025 if (this%imover == 1)
then
1026 call this%pakmvrobj%ad()
1032 call this%obs%obs_ad()
1051 if (this%nodes == 0)
return
1055 do n = 1, this%maxbound
1056 this%rejinf0(n) = this%rejinf(n)
1057 this%rch0(n) = this%rch(n)
1058 this%gwd0(n) = this%gwd(n)
1067 subroutine uzf_fc(this, rhs, ia, idxglo, matrix_sln)
1070 real(DP),
dimension(:),
intent(inout) :: rhs
1071 integer(I4B),
dimension(:),
intent(in) :: ia
1072 integer(I4B),
dimension(:),
intent(in) :: idxglo
1075 integer(I4B) :: i, n, ipos
1078 if (this%imover == 1)
then
1079 call this%pakmvrobj%fc()
1084 call this%uzf_solve(reset_state=.true.)
1087 do i = 1, this%nodes
1088 n = this%nodelist(i)
1089 rhs(n) = rhs(n) + this%rhs(i)
1091 call matrix_sln%add_value_pos(idxglo(ipos), this%hcof(i))
1100 subroutine uzf_fn(this, rhs, ia, idxglo, matrix_sln)
1103 real(DP),
dimension(:),
intent(inout) :: rhs
1104 integer(I4B),
dimension(:),
intent(in) :: ia
1105 integer(I4B),
dimension(:),
intent(in) :: idxglo
1108 integer(I4B) :: i, n
1109 integer(I4B) :: ipos
1112 do i = 1, this%nodes
1113 n = this%nodelist(i)
1115 call matrix_sln%add_value_pos(idxglo(ipos), this%deriv(i))
1116 rhs(n) = rhs(n) + this%deriv(i) * this%xnew(n)
1125 subroutine uzf_cc(this, innertot, kiter, iend, icnvgmod, cpak, ipak, dpak)
1129 class(
uzftype),
intent(inout) :: this
1130 integer(I4B),
intent(in) :: innertot
1131 integer(I4B),
intent(in) :: kiter
1132 integer(I4B),
intent(in) :: icnvgmod
1133 integer(I4B),
intent(in) :: iend
1134 character(len=LENPAKLOC),
intent(inout) :: cpak
1135 integer(I4B),
intent(inout) :: ipak
1136 real(DP),
intent(inout) :: dpak
1138 character(len=LENPAKLOC) :: cloc
1139 character(len=LINELENGTH) :: tag
1140 integer(I4B) :: icheck
1141 integer(I4B) :: ipakfail
1142 integer(I4B) :: locdrejinfmax
1143 integer(I4B) :: locdrchmax
1144 integer(I4B) :: locdseepmax
1145 integer(I4B) :: locdqfrommvrmax
1146 integer(I4B) :: ntabrows
1147 integer(I4B) :: ntabcols
1151 real(DP) :: qtolfact
1153 real(DP) :: drejinfmax
1157 real(DP) :: dseepmax
1158 real(DP) :: dqfrommvr
1159 real(DP) :: dqfrommvrmax
1162 icheck = this%iconvchk
1171 dqfrommvrmax =
dzero
1175 if (this%ipakcsv == 0)
then
1176 if (icnvgmod == 0)
then
1182 if (.not.
associated(this%pakcsvtab))
then
1187 if (this%iseepflag == 1)
then
1188 ntabcols = ntabcols + 2
1190 if (this%imover == 1)
then
1191 ntabcols = ntabcols + 2
1195 call table_cr(this%pakcsvtab, this%packName,
'')
1196 call this%pakcsvtab%table_df(ntabrows, ntabcols, this%ipakcsv, &
1197 lineseparator=.false., separator=
',', &
1201 tag =
'total_inner_iterations'
1202 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1204 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1206 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1208 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1210 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1212 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1213 tag =
'drejinfmax_loc'
1214 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1216 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1218 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1219 if (this%iseepflag == 1)
then
1221 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1222 tag =
'dseepmax_loc'
1223 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1225 if (this%imover == 1)
then
1226 tag =
'dqfrommvrmax'
1227 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1228 tag =
'dqfrommvrmax_loc'
1229 call this%pakcsvtab%initialize_column(tag, 16, alignment=
tableft)
1235 if (icheck /= 0)
then
1236 final_check:
do n = 1, this%nodes
1239 qtolfact =
delt / this%uzfobj%uzfarea(n)
1242 drejinf = qtolfact * (this%rejinf0(n) - this%rejinf(n))
1245 drch = qtolfact * (this%rch0(n) - this%rch(n))
1249 if (this%iseepflag == 1)
then
1250 dseep = qtolfact * (this%gwd0(n) - this%gwd(n))
1255 if (this%imover == 1)
then
1256 q = this%pakmvrobj%get_qfrommvr(n)
1257 q0 = this%pakmvrobj%get_qfrommvr0(n)
1258 dqfrommvr = qtolfact * (q0 - q)
1263 drejinfmax = drejinf
1269 dqfrommvrmax = dqfrommvr
1272 if (abs(drejinf) > abs(drejinfmax))
then
1273 drejinfmax = drejinf
1276 if (abs(drch) > abs(drchmax))
then
1280 if (abs(dseep) > abs(dseepmax))
then
1284 if (abs(dqfrommvr) > abs(dqfrommvrmax))
then
1285 dqfrommvrmax = dqfrommvr
1292 if (abs(drejinfmax) > abs(dpak))
then
1293 ipak = locdrejinfmax
1295 write (cloc,
"(a,'-',a)") trim(this%packName),
'rejinf'
1298 if (abs(drchmax) > abs(dpak))
then
1301 write (cloc,
"(a,'-',a)") trim(this%packName),
'rech'
1304 if (this%iseepflag == 1)
then
1305 if (abs(dseepmax) > abs(dpak))
then
1308 write (cloc,
"(a,'-',a)") trim(this%packName),
'seep'
1312 if (this%imover == 1)
then
1313 if (abs(dqfrommvrmax) > abs(dpak))
then
1314 ipak = locdqfrommvrmax
1316 write (cloc,
"(a,'-',a)") trim(this%packName),
'qfrommvr'
1322 if (this%ipakcsv /= 0)
then
1325 call this%pakcsvtab%add_term(innertot)
1326 call this%pakcsvtab%add_term(
totim)
1327 call this%pakcsvtab%add_term(
kper)
1328 call this%pakcsvtab%add_term(
kstp)
1329 call this%pakcsvtab%add_term(kiter)
1330 call this%pakcsvtab%add_term(drejinfmax)
1331 call this%pakcsvtab%add_term(locdrejinfmax)
1332 call this%pakcsvtab%add_term(drchmax)
1333 call this%pakcsvtab%add_term(locdrchmax)
1334 if (this%iseepflag == 1)
then
1335 call this%pakcsvtab%add_term(dseepmax)
1336 call this%pakcsvtab%add_term(locdseepmax)
1338 if (this%imover == 1)
then
1339 call this%pakcsvtab%add_term(dqfrommvrmax)
1340 call this%pakcsvtab%add_term(locdqfrommvrmax)
1345 call this%pakcsvtab%finalize_table()
1362 class(
uzftype),
intent(inout) :: this
1363 real(DP),
dimension(:),
intent(in) :: x
1364 real(DP),
dimension(:),
contiguous,
intent(inout) :: flowja
1365 integer(I4B),
optional,
intent(in) :: iadv
1375 character(len=*),
parameter :: fmttkk = &
1376 &
"(1X,/1X,A,' PERIOD ',I0,' STEP ',I0)"
1380 call this%uzf_solve(reset_state=.true.)
1384 call this%BndType%bnd_cq(x, flowja, iadv=1)
1387 do i = 1, this%nodes
1390 n = this%nodelist(i)
1393 if (this%ibound(n) < 1) cycle
1396 this%appliedinf(i) = this%uzfobj%sinf(i) * this%uzfobj%uzfarea(i)
1397 this%infiltration(i) = this%uzfobj%surflux(i) * this%uzfobj%uzfarea(i)
1400 qout = this%rejinf(i) + this%uzfobj%surfseep(i)
1402 if (this%imover == 1)
then
1403 qtomvr = this%pakmvrobj%get_qtomvr(i)
1408 if (qout >
dzero)
then
1409 qfact = this%rejinf(i) / qout
1412 this%rejinftomvr(i) = qfact * qtomvr
1415 q = q - this%rejinftomvr(i)
1425 this%gwd(i) = this%uzfobj%surfseep(i)
1427 if (qout >
dzero)
then
1428 qfact = this%gwd(i) / qout
1431 this%gwdtomvr(i) = qfact * qtomvr
1434 q = q - this%gwdtomvr(i)
1444 this%gwet_pvar(i) = this%uzfobj%gwet(i)
1445 this%uzet(i) = this%uzfobj%etact(i) * this%uzfobj%uzfarea(i) /
delt
1452 call this%uzf_fill_budobj()
1459 thtr, delt, iss)
result(qsto)
1461 real(dp),
intent(in) :: top
1462 real(dp),
intent(in) :: bot
1463 real(dp),
intent(in) :: hold
1464 real(dp),
intent(in) :: hnew
1465 real(dp),
intent(in) :: wcold
1466 real(dp),
intent(in) :: wcnew
1467 real(dp),
intent(in) :: thtr
1468 real(dp),
intent(in) :: carea
1469 real(dp),
intent(in) :: delt
1477 thknew = top - max(bot, hnew)
1478 thkold = top - max(bot, hold)
1480 if (thknew >
dzero)
then
1481 qsto = qsto + thknew * (wcnew - thtr)
1483 if (thkold >
dzero)
then
1484 qsto = qsto - thkold * (wcold - thtr)
1486 qsto = qsto * carea / delt
1502 type(
budgettype),
intent(inout) :: model_budget
1505 integer(I4B) :: isuppress_output
1506 isuppress_output = 0
1510 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(2), &
1511 isuppress_output, this%packName)
1514 if (this%iseepflag == 1)
then
1516 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(3), &
1517 isuppress_output, this%packName)
1518 if (this%imover == 1)
then
1520 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(5), &
1521 isuppress_output, this%packName)
1526 if (this%igwetflag /= 0)
then
1528 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(4), &
1529 isuppress_output, this%packName)
1544 integer(I4B),
intent(in) :: icbcfl
1545 integer(I4B),
intent(in) :: ibudfl
1546 integer(I4B),
intent(in) :: icbcun
1547 integer(I4B),
dimension(:),
optional,
intent(in) :: imap
1549 character(len=LINELENGTH) :: title
1550 integer(I4B) :: itxt
1554 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1555 trim(this%packName)//
') FLOW RATES'
1557 this%outputtab, this%nbound, this%nodelist, &
1558 this%rch, this%ibound, title, this%bdtxt(itxt), &
1559 this%ipakcb, this%dis, this%naux, &
1560 this%name_model, this%name_model, &
1561 this%name_model, this%packName, this%auxname, &
1562 this%auxvar, this%iout, this%inamedbound, &
1566 if (this%iseepflag == 1)
then
1568 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1569 trim(this%packName)//
') FLOW RATES'
1571 this%outputtab, this%nbound, this%nodelist, &
1572 -this%gwd, this%ibound, title, &
1573 this%bdtxt(itxt), this%ipakcb, this%dis, &
1574 this%naux, this%name_model, this%name_model, &
1575 this%name_model, this%packName, this%auxname, &
1576 this%auxvar, this%iout, this%inamedbound, &
1580 if (this%imover == 1)
then
1582 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1583 trim(this%packName)//
') FLOW RATES'
1585 this%outputtab, this%nbound, this%nodelist, &
1586 -this%gwdtomvr, this%ibound, title, &
1587 this%bdtxt(itxt), this%ipakcb, this%dis, &
1588 this%naux, this%name_model, this%name_model, &
1589 this%name_model, this%packName, &
1590 this%auxname, this%auxvar, this%iout, &
1591 this%inamedbound, this%boundname)
1596 if (this%igwetflag /= 0)
then
1598 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1599 trim(this%packName)//
') FLOW RATES'
1601 this%outputtab, this%nbound, this%nodelist, &
1602 -this%gwet_pvar, this%ibound, title, &
1603 this%bdtxt(itxt), this%ipakcb, this%dis, &
1604 this%naux, this%name_model, this%name_model, &
1605 this%name_model, this%packName, this%auxname, &
1606 this%auxvar, this%iout, this%inamedbound, &
1621 integer(I4B),
intent(in) :: icbcfl
1622 integer(I4B),
intent(in) :: ibudfl
1623 integer(I4B) :: ibinun
1627 if (this%ibudgetout /= 0)
then
1628 ibinun = this%ibudgetout
1630 if (icbcfl == 0) ibinun = 0
1631 if (ibinun > 0)
then
1632 call this%budobj%save_flows(this%dis, ibinun,
kstp,
kper,
delt, &
1637 if (ibudfl /= 0 .and. this%iprflow /= 0)
then
1638 call this%budobj%write_flowtable(this%dis,
kstp,
kper)
1653 integer(I4B),
intent(in) :: idvsave
1654 integer(I4B),
intent(in) :: idvprint
1656 integer(I4B) :: ibinun
1660 if (this%iwcontout /= 0)
then
1661 ibinun = this%iwcontout
1663 if (idvsave == 0) ibinun = 0
1666 if (ibinun > 0)
then
1668 totim, this%nodes, 1, 1, ibinun)
1682 integer(I4B),
intent(in) :: kstp
1683 integer(I4B),
intent(in) :: kper
1684 integer(I4B),
intent(in) :: iout
1685 integer(I4B),
intent(in) :: ibudfl
1687 call this%budobj%write_budtable(kstp, kper, iout, ibudfl,
totim,
delt)
1698 logical,
intent(in) :: reset_state
1702 integer(I4B) :: i, ivertflag
1703 integer(I4B) :: n, m, ierr
1704 real(DP) :: trhs1, thcof1, trhs2, thcof2
1705 real(DP) :: hgwf, uzderiv, derivgwet
1706 real(DP) :: qfrommvr
1709 real(DP) :: watabold
1713 do i = 1, this%nodes
1714 this%uzfobj%pet(i) = this%uzfobj%petmax(i)
1718 do i = 1, this%nodes
1721 this%hcof(i) =
dzero
1731 n = this%nodelist(i)
1732 ivertflag = this%uzfobj%ivertcon(i)
1733 watabold = this%uzfobj%watabold(i)
1735 if (this%ibound(n) > 0)
then
1740 if (this%imover == 1)
then
1741 qfrommvr = this%pakmvrobj%get_qfrommvr(i)
1748 call this%uzfobj%solve(this%uzfobjwork, ivertflag, i, &
1749 this%totfluxtot, this%ietflag, &
1750 this%issflag, this%iseepflag, hgwf, &
1752 reset_state=reset_state, &
1753 trhs=trhs1, thcof=thcof1, deriv=uzderiv, &
1759 errmsg =
'UZF variable NWAVESETS needs to be increased.'
1764 if (this%igwetflag > 0)
then
1765 call this%uzfobj%setgwpet(i)
1766 call this%uzfobj%simgwet(this%igwetflag, i, hgwf, trhs2, thcof2, &
1771 if (this%ietflag > 0)
then
1772 if (this%uzfobj%ivertcon(i) > 0)
then
1773 call this%uzfobj%setbelowpet(i, ivertflag)
1778 this%deriv(i) = uzderiv + derivgwet
1782 this%rejinf(i) = this%uzfobj%finf_rej(i) * this%uzfobj%uzfarea(i)
1783 this%rch(i) = this%uzfobj%totflux(i) * this%uzfobj%uzfarea(i) /
delt
1784 this%gwd(i) = this%uzfobj%surfseep(i)
1787 this%hcof(i) = thcof1 + thcof2
1788 this%rhs(i) = -trhs1 + trhs2
1791 if (this%imover == 1)
then
1792 qformvr = this%gwd(i) + this%rejinf(i)
1793 call this%pakmvrobj%accumulate_qformvr(i, qformvr)
1801 this%uzfobj%celbot(i), &
1802 this%uzfobj%uzfarea(i), &
1804 this%uzfobj%watab(i), &
1805 this%wcold(i), this%wcnew(i), &
1806 this%uzfobj%thtr(i),
delt, this%issflag)
1820 class(
uzftype),
intent(inout) :: this
1823 this%listlabel = trim(this%filtyp)//
' NO.'
1824 if (this%dis%ndim == 3)
then
1825 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
1826 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'ROW'
1827 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'COL'
1828 elseif (this%dis%ndim == 2)
then
1829 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
1830 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'CELL2D'
1832 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'NODE'
1834 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'STRESS RATE'
1835 if (this%inamedbound == 1)
then
1836 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'BOUNDARY NAME'
1848 integer(I4B),
intent(in) :: n
1849 integer(I4B),
intent(inout) :: nml
1851 integer(I4B) :: m, ipos
1855 do ipos = this%dis%con%ia(n) + 1, this%dis%con%ia(n + 1) - 1
1856 m = this%dis%con%ja(ipos)
1857 if (this%dis%con%ihc(ipos) /= 0)
then
1878 class(
uzftype),
intent(inout) :: this
1880 character(len=LINELENGTH) :: cellid
1881 integer(I4B) :: ierr
1882 integer(I4B) :: i, n
1885 integer(I4B) :: jcol
1886 logical :: isfound, endOfBlock
1887 integer(I4B) :: landflag
1888 integer(I4B) :: ivertcon
1889 real(DP) :: surfdep, vks, thtr, thts, thti, eps, hgwf
1890 integer(I4B),
dimension(:),
allocatable :: rowmaxnnz
1892 integer(I4B),
dimension(:),
allocatable :: nboundchk
1895 allocate (rowmaxnnz(this%dis%nodes))
1896 do n = 1, this%dis%nodes
1901 allocate (nboundchk(this%nodes))
1902 do n = 1, this%nodes
1918 call this%parser%GetBlock(
'PACKAGEDATA', isfound, ierr, &
1919 supportopenclose=.true.)
1923 write (this%iout,
'(/1x,3a)')
'PROCESSING ', trim(adjustl(this%text)), &
1926 call this%parser%GetNextLine(endofblock)
1927 if (endofblock)
exit
1930 i = this%parser%GetInteger()
1932 if (i < 1 .or. i > this%nodes)
then
1933 write (
errmsg,
'(2(a,1x),i0,a)') &
1934 'IUZNO must be greater than 0 and less than', &
1935 'or equal to', this%nodes,
'.'
1941 nboundchk(i) = nboundchk(i) + 1
1944 call this%parser%GetCellid(this%dis%ndim, cellid)
1945 ic = this%dis%noder_from_cellid(cellid, &
1946 this%parser%iuactive, this%iout)
1947 this%igwfnode(i) = ic
1948 rowmaxnnz(ic) = rowmaxnnz(ic) + 1
1951 landflag = this%parser%GetInteger()
1952 if (landflag < 0 .OR. landflag > 1)
then
1953 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,a)') &
1954 'LANDFLAG for uzf cell', i, &
1955 'must be 0 or 1 (specified value is', landflag,
').'
1960 ivertcon = this%parser%GetInteger()
1961 if (ivertcon < 0 .OR. ivertcon > this%nodes)
then
1962 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,a)') &
1963 'IVERTCON for uzf cell', i, &
1964 'must be 0 or less than NUZFCELLS (specified value is', &
1970 surfdep = this%parser%GetDouble()
1971 if (surfdep <=
dzero .and. landflag > 0)
then
1972 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1973 'SURFDEP for uzf cell', i, &
1974 'must be greater than 0 (specified value is', surfdep,
').'
1977 if (surfdep >= this%dis%top(ic) - this%dis%bot(ic))
then
1978 write (
errmsg,
'(a,1x,i0,1x,a)') &
1979 'SURFDEP for uzf cell', i, &
1980 'cannot be greater than the cell thickness.'
1985 vks = this%parser%GetDouble()
1986 if (vks <=
dzero)
then
1987 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1988 'VKS for uzf cell', i, &
1989 'must be greater than 0 (specified value ia', vks,
').'
1994 thtr = this%parser%GetDouble()
1995 if (thtr <=
dzero)
then
1996 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1997 'THTR for uzf cell', i, &
1998 'must be greater than 0 (specified value is', thtr,
').'
2003 thts = this%parser%GetDouble()
2004 if (thts <= thtr)
then
2005 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
2006 'THTS for uzf cell', i, &
2007 'must be greater than THTR (specified value is', thts,
').'
2012 thti = this%parser%GetDouble()
2013 if (thti < thtr .OR. thti > thts)
then
2014 write (
errmsg,
'(a,1x,i0,1x,a,1x,a,1x,g0,a)') &
2015 'THTI for uzf cell', i, &
2016 'must be greater than or equal to THTR AND less than THTS', &
2017 '(specified value is', thti,
').'
2022 eps = this%parser%GetDouble()
2023 if (eps < 3.5 .OR. eps > 14)
then
2024 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
2025 'EPSILON for uzf cell', i, &
2026 'must be between 3.5 and 14.0 (specified value is', eps,
').'
2031 if (this%inamedbound == 1)
then
2032 call this%parser%GetStringCaps(this%uzfname(i))
2037 n = this%igwfnode(i)
2038 call this%uzfobj%setdata(i, this%dis%area(n), this%dis%top(n), &
2039 this%dis%bot(n), surfdep, vks, thtr, thts, &
2040 thti, eps, this%ntrail_pvar, landflag, &
2042 if (ivertcon > 0)
then
2049 call store_error(
'Required packagedata block not found.')
2053 do i = 1, this%nodes
2054 if (nboundchk(i) == 0)
then
2055 write (
errmsg,
'(a,1x,i0,a)') &
2056 'No data specified for uzf cell', i,
'.'
2058 else if (nboundchk(i) > 1)
then
2059 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
2060 'Data for uzf cell', i,
'specified', nboundchk(i),
'times.'
2067 call this%parser%StoreErrorUnit()
2072 call sparse%init(this%dis%nodes, this%dis%nodes, rowmaxnnz)
2074 do i = 1, this%nodes
2075 ic = this%igwfnode(i)
2076 call sparse%addconnection(ic, i, 1)
2080 call sparse%filliaja(this%ia, this%ja, ierr)
2083 do i = 1, this%dis%nodes
2085 do j = this%ia(i), this%ia(i + 1) - 1
2088 if (jcol > this%imaxcellcnt)
then
2089 this%imaxcellcnt = jcol
2097 if (this%imaxcellcnt > 1 .and. this%iauxmultcol < 1)
then
2098 call this%check_cell_area()
2102 deallocate (rowmaxnnz)
2103 deallocate (nboundchk)
2113 class(
uzftype),
intent(inout) :: this
2115 character(len=20) :: cellid
2116 character(len=LINELENGTH) :: title
2117 character(len=LINELENGTH) :: tag
2118 integer(I4B) :: ntabrows
2119 integer(I4B) :: ntabcols
2121 integer(I4B) :: node
2126 ntabrows = this%nodes
2128 if (this%inamedbound == 1)
then
2129 ntabcols = ntabcols + 1
2133 title = trim(adjustl(this%text))//
' PACKAGE ('// &
2134 trim(adjustl(this%packName))//
') STATIC UZF CELL DATA'
2135 call table_cr(this%inputtab, this%packName, title)
2136 call this%inputtab%table_df(ntabrows, ntabcols, this%iout)
2138 call this%inputtab%initialize_column(tag, 10)
2140 call this%inputtab%initialize_column(tag, 20, alignment=
tableft)
2142 call this%inputtab%initialize_column(tag, 12)
2144 call this%inputtab%initialize_column(tag, 12)
2146 call this%inputtab%initialize_column(tag, 12)
2148 call this%inputtab%initialize_column(tag, 12)
2150 call this%inputtab%initialize_column(tag, 12)
2152 call this%inputtab%initialize_column(tag, 12)
2154 call this%inputtab%initialize_column(tag, 12)
2156 call this%inputtab%initialize_column(tag, 12)
2157 if (this%inamedbound == 1)
then
2163 do i = 1, this%nodes
2166 node = this%igwfnode(i)
2168 call this%dis%noder_to_string(node, cellid)
2174 call this%inputtab%add_term(i)
2175 call this%inputtab%add_term(cellid)
2176 call this%inputtab%add_term(this%uzfobj%landflag(i))
2177 call this%inputtab%add_term(this%uzfobj%ivertcon(i))
2178 call this%inputtab%add_term(this%uzfobj%surfdep(i))
2179 call this%inputtab%add_term(this%uzfobj%vks(i))
2180 call this%inputtab%add_term(this%uzfobj%thtr(i))
2181 call this%inputtab%add_term(this%uzfobj%thts(i))
2182 call this%inputtab%add_term(this%uzfobj%thti(i))
2183 call this%inputtab%add_term(this%uzfobj%eps(i))
2184 if (this%inamedbound == 1)
then
2185 call this%inputtab%add_term(this%uzfname(i))
2202 character(len=16) :: cuzf
2203 character(len=20) :: cellid
2204 character(len=LINELENGTH) :: cuzfcells
2214 real(DP) :: cellarea
2218 do i = 1, this%nodes
2221 i2 = this%uzfobj%ivertcon(i)
2222 area = this%uzfobj%uzfarea(i)
2226 area2 = this%uzfobj%uzfarea(i2)
2227 d = abs(area - area2)
2229 write (
errmsg,
'(2(a,1x,g0,1x,a,1x,i0,1x),a)') &
2230 'UZF cell area (', area,
') for cell ', i, &
2231 'does not equal uzf cell area (', area2,
') for cell ', i2,
'.'
2239 do n = 1, this%dis%nodes
2243 if ((i1 - i0) < 1) cycle
2249 write (cuzf,
'(i0)') i
2250 cuzfcells = trim(adjustl(cuzfcells))//
' '//trim(adjustl(cuzf))
2251 sumarea = sumarea + this%uzfobj%uzfarea(i)
2252 cellarea = this%uzfobj%cellarea(i)
2255 d = abs(sumarea - cellarea)
2257 call this%dis%noder_to_string(n, cellid)
2258 write (
errmsg,
'(a,1x,g0,1x,a,1x,g0,1x,a,1x,a,1x,a,a,a)') &
2259 'Total uzf cell area (', sumarea, &
2260 ') exceeds the gwf cell area (', cellarea,
') of cell', cellid, &
2261 'which includes uzf cell(s): ', trim(adjustl(cuzfcells)),
'.'
2268 call this%parser%StoreErrorUnit()
2299 integer(I4B) :: indx
2304 call this%obs%StoreObsType(
'uzf-gwrch', .true., indx)
2308 call this%obs%StoreObsType(
'uzf-gwd', .true., indx)
2312 call this%obs%StoreObsType(
'uzf-gwd-to-mvr', .true., indx)
2316 call this%obs%StoreObsType(
'uzf-gwet', .true., indx)
2320 call this%obs%StoreObsType(
'infiltration', .true., indx)
2324 call this%obs%StoreObsType(
'from-mvr', .true., indx)
2328 call this%obs%StoreObsType(
'rej-inf', .true., indx)
2332 call this%obs%StoreObsType(
'rej-inf-to-mvr', .true., indx)
2336 call this%obs%StoreObsType(
'uzet', .true., indx)
2340 call this%obs%StoreObsType(
'storage', .true., indx)
2344 call this%obs%StoreObsType(
'net-infiltration', .true., indx)
2348 call this%obs%StoreObsType(
'water-content', .false., indx)
2371 call this%uzf_solve(reset_state=.false.)
2374 if (this%obs%npakobs > 0)
then
2375 call this%obs%obs_bd_clear()
2376 do i = 1, this%obs%npakobs
2377 obsrv => this%obs%pakobs(i)%obsrv
2378 do ii = 1, obsrv%indxbnds_count
2379 n = obsrv%indxbnds(ii)
2381 select case (obsrv%ObsTypeId)
2389 case (
'UZF-GWD-TO-MVR')
2390 if (this%imover == 1)
then
2391 v = this%gwdtomvr(n)
2397 if (this%igwetflag > 0)
then
2398 v = this%gwet_pvar(n)
2403 case (
'INFILTRATION')
2404 v = this%appliedinf(n)
2406 if (this%imover == 1)
then
2407 v = this%pakmvrobj%get_qfrommvr(n)
2414 case (
'REJ-INF-TO-MVR')
2415 if (this%imover == 1)
then
2416 v = this%rejinftomvr(n)
2422 if (this%ietflag /= 0)
then
2430 case (
'NET-INFILTRATION')
2431 v = this%infiltration(n)
2432 case (
'WATER-CONTENT')
2433 v = this%uzfobj%get_water_content_at_depth(n, obsrv%obsDepth)
2435 errmsg =
'Unrecognized observation type: '//trim(obsrv%ObsTypeId)
2438 call this%obs%SaveOneSimval(obsrv, v)
2444 call this%parser%StoreErrorUnit()
2461 class(
uzftype),
intent(inout) :: this
2467 integer(I4B) :: iuzid
2468 real(DP) :: obsdepth
2470 character(len=LENBOUNDNAME) :: bname
2473 60
format(
'Invalid node number in OBS input: ', i0)
2476 do i = 1, this%obs%npakobs
2477 obsrv => this%obs%pakobs(i)%obsrv
2480 nn = obsrv%NodeNumber
2482 bname = obsrv%FeatureName
2487 do j = 1, this%nodes
2488 if (this%boundname(j) == bname)
then
2489 obsrv%BndFound = .true.
2490 obsrv%CurrentTimeStepEndValue =
dzero
2491 call obsrv%AddObsIndex(j)
2492 if (obsrv%indxbnds_count == 1)
then
2503 nn = obsrv%NodeNumber
2508 if (nn < 1 .or. nn > this%nodes)
then
2512 obsrv%BndFound = .true.
2514 obsrv%CurrentTimeStepEndValue =
dzero
2515 call obsrv%AddObsIndex(nn)
2520 if (obsrv%ObsTypeId ==
'WATER-CONTENT')
then
2521 n = obsrv%indxbnds_count
2523 write (
errmsg,
'(a,3(1x,a))') &
2524 trim(adjustl(obsrv%ObsTypeId)),
'for observation', &
2525 trim(adjustl(obsrv%Name)), &
2526 'must be assigned to a UZF cell with a unique boundname.'
2531 obsdepth = obsrv%Obsdepth
2534 obsrv%dblPak1 = obsdepth
2539 iuzid = obsrv%intPak1
2540 dmax = this%uzfobj%celtop(iuzid) - this%uzfobj%celbot(iuzid)
2546 if (obsdepth <=
dzero .or. obsdepth > dmax)
then
2547 write (
errmsg,
'(a,3(1x,a),1x,g0,1x,a,1x,g0,a)') &
2548 trim(adjustl(obsrv%ObsTypeId)),
'for observation', &
2549 trim(adjustl(obsrv%Name)),
'specified depth (', obsdepth, &
2550 ') must be greater than 0.0 and less than ', dmax,
'.'
2554 do j = 1, obsrv%indxbnds_count
2555 nn = obsrv%indxbnds(j)
2556 if (nn < 1 .or. nn > this%maxbound)
then
2557 write (
errmsg,
'(a,2(1x,a),1x,i0,1x,a,1x,i0,a)') &
2558 trim(adjustl(obsrv%ObsTypeId)),
'uzfno must be greater than 0 ', &
2559 'and less than or equal to', this%maxbound, &
2560 '(specified value is ', nn,
').'
2589 integer(I4B),
intent(in) :: inunitobs
2590 integer(I4B),
intent(in) :: iout
2592 integer(I4B) :: n, nn
2593 real(DP) :: obsdepth
2594 integer(I4B) :: icol, istart, istop, istat
2596 character(len=LINELENGTH) :: string
2600 string = obsrv%IDstring
2606 call urword(string, icol, istart, istop, 1, n, r, iout, inunitobs)
2607 read (string(istart:istop), 30, iostat=istat) nn
2608 if (istat == 0)
then
2610 obsrv%NodeNumber = nn
2614 obsrv%FeatureName = string(istart:istop)
2623 if (obsrv%ObsTypeId ==
'WATER-CONTENT')
then
2624 call urword(string, icol, istart, istop, 3, n, r, iout, inunitobs)
2627 obsrv%Obsdepth = obsdepth
2643 call this%BndType%allocate_scalars()
2646 call mem_allocate(this%iprwcont,
'IPRWCONT', this%memoryPath)
2647 call mem_allocate(this%iwcontout,
'IWCONTOUT', this%memoryPath)
2648 call mem_allocate(this%ibudgetout,
'IBUDGETOUT', this%memoryPath)
2649 call mem_allocate(this%ibudcsv,
'IBUDCSV', this%memoryPath)
2650 call mem_allocate(this%ipakcsv,
'IPAKCSV', this%memoryPath)
2651 call mem_allocate(this%ntrail_pvar,
'NTRAIL', this%memoryPath)
2652 call mem_allocate(this%nsets,
'NSETS', this%memoryPath)
2653 call mem_allocate(this%nodes,
'NODES', this%memoryPath)
2654 call mem_allocate(this%istocb,
'ISTOCB', this%memoryPath)
2655 call mem_allocate(this%nwav_pvar,
'NWAV_PVAR', this%memoryPath)
2656 call mem_allocate(this%totfluxtot,
'TOTFLUXTOT', this%memoryPath)
2657 call mem_allocate(this%bditems,
'BDITEMS', this%memoryPath)
2658 call mem_allocate(this%nbdtxt,
'NBDTXT', this%memoryPath)
2659 call mem_allocate(this%issflag,
'ISSFLAG', this%memoryPath)
2660 call mem_allocate(this%issflagold,
'ISSFLAGOLD', this%memoryPath)
2661 call mem_allocate(this%readflag,
'READFLAG', this%memoryPath)
2662 call mem_allocate(this%iseepflag,
'ISEEPFLAG', this%memoryPath)
2663 call mem_allocate(this%imaxcellcnt,
'IMAXCELLCNT', this%memoryPath)
2664 call mem_allocate(this%ietflag,
'IETFLAG', this%memoryPath)
2665 call mem_allocate(this%igwetflag,
'IGWETFLAG', this%memoryPath)
2666 call mem_allocate(this%iuzf2uzf,
'IUZF2UZF', this%memoryPath)
2667 call mem_allocate(this%cbcauxitems,
'CBCAUXITEMS', this%memoryPath)
2669 call mem_allocate(this%iconvchk,
'ICONVCHK', this%memoryPath)
2685 this%imaxcellcnt = 0
2687 this%cbcauxitems = 1
2706 call this%uzfobj%dealloc()
2707 deallocate (this%uzfobj)
2708 nullify (this%uzfobj)
2709 call this%uzfobjwork%dealloc()
2711 call this%budobj%budgetobject_da()
2712 deallocate (this%budobj)
2713 nullify (this%budobj)
2716 deallocate (this%bdtxt)
2717 deallocate (this%cauxcbc)
2718 deallocate (this%uzfname)
2721 if (this%ipakcsv > 0)
then
2722 if (
associated(this%pakcsvtab))
then
2723 call this%pakcsvtab%table_da()
2724 deallocate (this%pakcsvtab)
2725 nullify (this%pakcsvtab)
2791 call this%BndType%bnd_da()
2808 integer(I4B) :: nbudterm
2809 integer(I4B) :: maxlist, naux
2811 integer(I4B) :: nlen
2812 integer(I4B) :: n, n1, n2
2813 integer(I4B) :: ivertflag
2815 character(len=LENBUDTXT) :: text
2816 character(len=LENBUDTXT),
dimension(1) :: auxtxt
2820 do n = 1, this%nodes
2821 ivertflag = this%uzfobj%ivertcon(n)
2822 if (ivertflag > 0)
then
2832 if (nlen > 0) nbudterm = nbudterm + 1
2833 if (this%ietflag /= 0) nbudterm = nbudterm + 1
2834 if (this%imover == 1) nbudterm = nbudterm + 2
2835 if (this%naux > 0) nbudterm = nbudterm + 1
2839 call this%budobj%budgetobject_df(this%maxbound, nbudterm, 0, 0, &
2840 ibudcsv=this%ibudcsv)
2844 text =
' FLOW-JA-FACE'
2849 auxtxt(1) =
' FLOW-AREA'
2850 call this%budobj%budterm(idx)%initialize(text, &
2855 maxlist, .false., .false., &
2856 naux, auxtxt, ordered_id1=.false.)
2859 call this%budobj%budterm(idx)%reset(nlen * 2)
2861 do n = 1, this%nodes
2862 ivertflag = this%uzfobj%ivertcon(n)
2863 if (ivertflag > 0)
then
2866 call this%budobj%budterm(idx)%update_term(n1, n2, q)
2867 call this%budobj%budterm(idx)%update_term(n2, n1, -q)
2875 maxlist = this%nodes
2877 auxtxt(1) =
' FLOW-AREA'
2878 call this%budobj%budterm(idx)%initialize(text, &
2883 maxlist, .false., .true., &
2885 call this%budobj%budterm(idx)%reset(this%nodes)
2887 do n = 1, this%nodes
2888 n2 = this%igwfnode(n)
2889 call this%budobj%budterm(idx)%update_term(n, n2, q)
2893 text =
' INFILTRATION'
2895 maxlist = this%nodes
2897 call this%budobj%budterm(idx)%initialize(text, &
2902 maxlist, .false., .false., &
2908 maxlist = this%nodes
2910 call this%budobj%budterm(idx)%initialize(text, &
2915 maxlist, .false., .false., &
2920 if (this%ietflag /= 0)
then
2922 maxlist = this%maxbound
2924 call this%budobj%budterm(idx)%initialize(text, &
2929 maxlist, .false., .false., &
2936 maxlist = this%nodes
2938 auxtxt(1) =
' VOLUME'
2939 call this%budobj%budterm(idx)%initialize(text, &
2944 maxlist, .false., .false., &
2948 if (this%imover == 1)
then
2953 maxlist = this%nodes
2955 call this%budobj%budterm(idx)%initialize(text, &
2960 maxlist, .false., .false., &
2964 text =
' REJ-INF-TO-MVR'
2966 maxlist = this%nodes
2968 call this%budobj%budterm(idx)%initialize(text, &
2973 maxlist, .false., .false., &
2984 maxlist = this%maxbound
2985 call this%budobj%budterm(idx)%initialize(text, &
2990 maxlist, .false., .false., &
2995 if (this%iprflow /= 0)
then
2996 call this%budobj%flowtable_df(this%iout, cellids=
'GWF')
3009 integer(I4B) :: naux
3010 integer(I4B) :: nlen
3011 integer(I4B) :: ivertflag
3012 integer(I4B) :: n, n1, n2
3027 do n = 1, this%nodes
3028 ivertflag = this%uzfobj%ivertcon(n)
3029 if (ivertflag > 0)
then
3035 call this%budobj%budterm(idx)%reset(nlen * 2)
3036 do n = 1, this%nodes
3037 ivertflag = this%uzfobj%ivertcon(n)
3038 if (ivertflag > 0)
then
3039 a = this%uzfobj%uzfarea(n)
3040 q = this%uzfobj%surfluxbelow(n) * a
3047 call this%budobj%budterm(idx)%update_term(n1, n2, q, this%qauxcbc)
3048 call this%budobj%budterm(idx)%update_term(n2, n1, -q, this%qauxcbc)
3055 call this%budobj%budterm(idx)%reset(this%nodes)
3056 do n = 1, this%nodes
3057 this%qauxcbc(1) = this%uzfobj%uzfarea(n)
3058 n2 = this%igwfnode(n)
3060 call this%budobj%budterm(idx)%update_term(n, n2, q, this%qauxcbc)
3065 call this%budobj%budterm(idx)%reset(this%nodes)
3066 do n = 1, this%nodes
3067 q = this%appliedinf(n)
3068 call this%budobj%budterm(idx)%update_term(n, n, q)
3073 call this%budobj%budterm(idx)%reset(this%nodes)
3074 do n = 1, this%nodes
3079 call this%budobj%budterm(idx)%update_term(n, n, q)
3083 if (this%ietflag /= 0)
then
3085 call this%budobj%budterm(idx)%reset(this%nodes)
3086 do n = 1, this%nodes
3091 call this%budobj%budterm(idx)%update_term(n, n, q)
3097 call this%budobj%budterm(idx)%reset(this%nodes)
3098 do n = 1, this%nodes
3100 top = this%uzfobj%celtop(n)
3101 bot = this%uzfobj%watab(n)
3103 if (thick >
dzero)
then
3104 fm = thick * (this%wcnew(n) - this%uzfobj%thtr(n))
3105 v = fm * this%uzfobj%uzfarea(n)
3111 call this%budobj%budterm(idx)%update_term(n, n, q, this%qauxcbc)
3115 if (this%imover == 1)
then
3119 call this%budobj%budterm(idx)%reset(this%nodes)
3120 do n = 1, this%nodes
3121 q = this%pakmvrobj%get_qfrommvr(n)
3122 call this%budobj%budterm(idx)%update_term(n, n, q)
3127 call this%budobj%budterm(idx)%reset(this%nodes)
3128 do n = 1, this%nodes
3129 q = this%rejinftomvr(n)
3133 call this%budobj%budterm(idx)%update_term(n, n, q)
3142 call this%budobj%budterm(idx)%reset(this%nodes)
3143 do n = 1, this%nodes
3145 call this%budobj%budterm(idx)%update_term(n, n, q, this%auxvar(:, n))
3150 call this%budobj%accumulate_terms()
This module contains block parser methods.
This module contains the base boundary package.
subroutine, public save_print_model_flows(icbcfl, ibudfl, icbcun, iprflow, outputtab, nbound, nodelist, flow, ibound, title, text, ipakcb, dis, naux, textmodel, textpackage, dstmodel, dstpackage, auxname, auxvar, iout, inamedbound, boundname, imap)
Save and/or print flows for a package.
This module contains the BudgetModule.
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
subroutine, public budgetobject_cr(this, name)
Create a new budget object.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
real(dp), parameter dhdry
real dry cell constant
@ tabcenter
centered table column
@ tabright
right justified table column
@ tableft
left justified table column
@ mnormal
normal output mode
@ tabucstring
upper case string table data
@ tabstring
string table data
@ tabinteger
integer table data
integer(i4b), parameter lenpackagename
maximum length of the package name
integer(i4b), parameter namedboundflag
named bound flag
real(dp), parameter dnodata
real no data constant
real(dp), parameter dhnoflo
real no flow constant
real(dp), parameter dhundred
real constant 100
integer(i4b), parameter lenpakloc
maximum length of a package location
real(dp), parameter dem1
real constant 1e-1
real(dp), parameter dhalf
real constant 1/2
integer(i4b), parameter lenftype
maximum length of a package type (DIS, WEL, OC, etc.)
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dem4
real constant 1e-4
real(dp), parameter dem6
real constant 1e-6
real(dp), parameter dzero
real constant zero
integer(i4b), parameter maxcharlen
maximum length of char string
real(dp), parameter dem2
real constant 1e-2
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
real(dp), parameter done
real constant 1
This module defines variable data types.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
This module contains the derived types ObserveType and ObsDataType.
This module contains the derived type ObsType.
This module contains simulation methods.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public deprecation_warning(cblock, cvar, cver, endmsg, iunit)
Store deprecation warning message.
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
integer(i4b) ifailedstepretry
current retry for this time step
character(len=maxcharlen) warnmsg
warning message string
subroutine, public table_cr(this, name, title)
real(dp), pointer, public pertim
time relative to start of stress period
real(dp), pointer, public totim
time relative to start of simulation
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
real(dp), pointer, public delt
length of the current time step
integer(i4b), pointer, public nper
number of stress period
subroutine, public read_value_or_time_series_adv(textInput, ii, jj, bndElem, pkgName, auxOrBnd, tsManager, iprpak, varName)
Call this subroutine from advanced packages to define timeseries link for a variable (varName).
subroutine, public uzf_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname)
Create a New UZF Package and point packobj to the new package.
subroutine uzf_ar(this)
Allocate and Read.
subroutine uzf_fc(this, rhs, ia, idxglo, matrix_sln)
Copy rhs and hcof into solution rhs and amat.
subroutine uzf_ot_dv(this, idvsave, idvprint)
Save UZF-calculated values to binary file.
subroutine define_listlabel(this)
Define the list heading that is written to iout when PRINT_INPUT option is used.
subroutine uzf_da(this)
Deallocate objects.
logical function uzf_obs_supported(this)
Return true because uzf package supports observations.
subroutine uzf_setup_budobj(this)
Set up the budget object that stores all the uzf flows.
subroutine uzf_cq(this, x, flowja, iadv)
Calculate flows.
subroutine uzf_allocate_arrays(this)
Allocate arrays used for uzf.
character(len=lenftype) ftype
subroutine uzf_ot_bdsummary(this, kstp, kper, iout, ibudfl)
Write UZF budget to listing file.
subroutine uzf_process_obsid(obsrv, dis, inunitobs, iout)
This procedure is pointed to by ObsDataTypeProcesssIdPtr.
subroutine uzf_rp_obs(this)
Process each observation.
real(dp) function get_storage_change(top, bot, carea, hold, hnew, wcold, wcnew, thtr, delt, iss)
subroutine uzf_readdimensions(this)
Set dimensions specific to UzfType.
subroutine uzf_cf(this)
Formulate the HCOF and RHS terms.
subroutine uzf_fn(this, rhs, ia, idxglo, matrix_sln)
Fill newton terms.
subroutine uzf_fill_budobj(this)
Copy flow terms into thisbudobj.
subroutine uzf_df_obs(this)
Implements bnd_df_obs.
subroutine uzf_ot_model_flows(this, icbcfl, ibudfl, icbcun, imap)
Write flows to binary file and/or print flows to budget.
subroutine findcellabove(this, n, nml)
Identify overlying cell ID based on user-specified mapping.
subroutine print_cell_properties(this)
Read UZF cell properties and set them for UZFCellGroup type.
subroutine uzf_bd(this, model_budget)
Add package ratin/ratout to model budget.
subroutine uzf_allocate_scalars(this)
Allocate scalar members.
subroutine uzf_rp(this)
Read stress data.
subroutine uzf_cc(this, innertot, kiter, iend, icnvgmod, cpak, ipak, dpak)
Final convergence check for package.
subroutine check_cell_area(this)
Check UZF cell areas.
subroutine uzf_bd_obs(this)
Calculate observations this time step and call ObsTypeSaveOneSimval for each UzfType observation.
character(len=lenpackagename) text
subroutine uzf_ot_package_flows(this, icbcfl, ibudfl)
Output UZF package flow terms.
subroutine uzf_options(this, option, found)
Set options specific to UzfType.
subroutine uzf_solve(this, reset_state)
Formulate the HCOF and RHS terms.
subroutine uzf_ad(this)
Advance UZF Package.
subroutine read_cell_properties(this)
Read UZF cell properties and set them for UzfCellGroup type.
Derived type for the Budget object.