34 character(len=LENFTYPE) ::
ftype =
'UZF'
35 character(len=LENPACKAGENAME) ::
text =
' UZF CELLS'
43 integer(I4B),
pointer :: iprwcont => null()
44 integer(I4B),
pointer :: iwcontout => null()
45 integer(I4B),
pointer :: ibudgetout => null()
46 integer(I4B),
pointer :: ibudcsv => null()
47 integer(I4B),
pointer :: ipakcsv => null()
50 integer(I4B),
pointer :: bditems => null()
51 integer(I4B),
pointer :: nbdtxt => null()
52 character(len=LENBUDTXT),
dimension(:),
pointer, &
53 contiguous :: bdtxt => null()
54 character(len=LENBOUNDNAME),
dimension(:),
pointer, &
55 contiguous :: uzfname => null()
65 integer(I4B),
pointer :: gwfiss => null()
66 real(dp),
dimension(:),
pointer,
contiguous :: gwfhcond => null()
69 integer(I4B),
pointer :: nwav_pvar => null()
70 integer(I4B),
pointer :: ntrail_pvar => null()
71 integer(I4B),
pointer :: nsets => null()
72 integer(I4B),
pointer :: nodes => null()
73 integer(I4B),
pointer :: readflag => null()
74 integer(I4B),
pointer :: ietflag => null()
75 integer(I4B),
pointer :: igwetflag => null()
76 integer(I4B),
pointer :: iseepflag => null()
77 integer(I4B),
pointer :: imaxcellcnt => null()
78 integer(I4B),
pointer :: iuzf2uzf => null()
80 integer(I4B),
dimension(:),
pointer,
contiguous :: igwfnode => null()
81 integer(I4B),
dimension(:),
pointer,
contiguous :: ia => null()
82 integer(I4B),
dimension(:),
pointer,
contiguous :: ja => null()
84 real(dp),
dimension(:),
pointer,
contiguous :: appliedinf => null()
85 real(dp),
dimension(:),
pointer,
contiguous :: rejinf => null()
86 real(dp),
dimension(:),
pointer,
contiguous :: rejinf0 => null()
87 real(dp),
dimension(:),
pointer,
contiguous :: rejinftomvr => null()
88 real(dp),
dimension(:),
pointer,
contiguous :: infiltration => null()
89 real(dp),
dimension(:),
pointer,
contiguous :: gwet_pvar => null()
90 real(dp),
dimension(:),
pointer,
contiguous :: uzet => null()
91 real(dp),
dimension(:),
pointer,
contiguous :: gwd => null()
92 real(dp),
dimension(:),
pointer,
contiguous :: gwd0 => null()
93 real(dp),
dimension(:),
pointer,
contiguous :: gwdtomvr => null()
94 real(dp),
dimension(:),
pointer,
contiguous :: rch => null()
95 real(dp),
dimension(:),
pointer,
contiguous :: rch0 => null()
96 real(dp),
dimension(:),
pointer,
contiguous :: qsto => null()
97 real(dp),
dimension(:),
pointer,
contiguous :: wcnew => null()
98 real(dp),
dimension(:),
pointer,
contiguous :: wcold => null()
102 real(dp),
dimension(:),
pointer,
contiguous :: sinf_pvar => null()
103 real(dp),
dimension(:),
pointer,
contiguous :: pet_pvar => null()
104 real(dp),
dimension(:),
pointer,
contiguous :: extdp => null()
105 real(dp),
dimension(:),
pointer,
contiguous :: extwc_pvar => null()
106 real(dp),
dimension(:),
pointer,
contiguous :: ha_pvar => null()
107 real(dp),
dimension(:),
pointer,
contiguous :: hroot_pvar => null()
108 real(dp),
dimension(:),
pointer,
contiguous :: rootact_pvar => null()
111 real(dp),
dimension(:, :),
pointer,
contiguous :: uauxvar => null()
114 integer(I4B),
pointer :: iconvchk => null()
117 real(dp),
dimension(:),
pointer,
contiguous :: deriv => null()
120 real(dp),
pointer :: totfluxtot => null()
121 integer(I4B),
pointer :: issflag => null()
122 integer(I4B),
pointer :: issflagold => null()
123 integer(I4B),
pointer :: istocb => null()
126 integer(I4B),
pointer :: cbcauxitems => null()
127 character(len=16),
dimension(:),
pointer,
contiguous :: cauxcbc => null()
128 real(dp),
dimension(:),
pointer,
contiguous :: qauxcbc => null()
175 subroutine uzf_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname)
179 class(
bndtype),
pointer :: packobj
180 integer(I4B),
intent(in) :: id
181 integer(I4B),
intent(in) :: ibcnum
182 integer(I4B),
intent(in) :: inunit
183 integer(I4B),
intent(in) :: iout
184 character(len=*),
intent(in) :: namemodel
185 character(len=*),
intent(in) :: pakname
187 type(
uzftype),
pointer :: uzfobj
194 call packobj%set_names(ibcnum, namemodel, pakname,
ftype)
198 call uzfobj%uzf_allocate_scalars()
201 call packobj%pack_initialize()
203 packobj%inunit = inunit
206 packobj%ibcnum = ibcnum
219 class(
uzftype),
intent(inout) :: this
224 call this%obs%obs_ar()
227 call this%BndType%allocate_arrays()
235 if (this%inamedbound /= 0)
then
237 this%boundname(n) = this%uzfname(n)
242 call this%copy_boundname()
246 this%nodelist(i) = this%igwfnode(i)
249 call this%uzfobj%sethead(i, hgwf)
253 if (this%imover /= 0)
then
254 allocate (this%pakmvrobj)
255 call this%pakmvrobj%ar(this%maxbound, this%maxbound, this%memoryPath)
263 class(
uzftype),
intent(inout) :: this
272 call mem_allocate(this%igwfnode, this%nodes,
'IGWFNODE', this%memoryPath)
273 call mem_allocate(this%appliedinf, this%nodes,
'APPLIEDINF', this%memoryPath)
274 call mem_allocate(this%rejinf, this%nodes,
'REJINF', this%memoryPath)
275 call mem_allocate(this%rejinf0, this%nodes,
'REJINF0', this%memoryPath)
276 call mem_allocate(this%rejinftomvr, this%nodes,
'REJINFTOMVR', &
278 call mem_allocate(this%infiltration, this%nodes,
'INFILTRATION', &
280 call mem_allocate(this%gwet_pvar, this%nodes,
'GWET_PVAR', this%memoryPath)
281 call mem_allocate(this%uzet, this%nodes,
'UZET', this%memoryPath)
282 call mem_allocate(this%gwd, this%nodes,
'GWD', this%memoryPath)
283 call mem_allocate(this%gwd0, this%nodes,
'GWD0', this%memoryPath)
284 call mem_allocate(this%gwdtomvr, this%nodes,
'GWDTOMVR', this%memoryPath)
285 call mem_allocate(this%rch, this%nodes,
'RCH', this%memoryPath)
286 call mem_allocate(this%rch0, this%nodes,
'RCH0', this%memoryPath)
287 call mem_allocate(this%qsto, this%nodes,
'QSTO', this%memoryPath)
288 call mem_allocate(this%deriv, this%nodes,
'DERIV', this%memoryPath)
291 call mem_allocate(this%ia, this%dis%nodes + 1,
'IA', this%memoryPath)
292 call mem_allocate(this%ja, this%nodes,
'JA', this%memoryPath)
295 call mem_allocate(this%sinf_pvar, this%nodes,
'SINF_PVAR', this%memoryPath)
296 call mem_allocate(this%pet_pvar, this%nodes,
'PET_PVAR', this%memoryPath)
297 call mem_allocate(this%extdp, this%nodes,
'EXDP_PVAR', this%memoryPath)
298 call mem_allocate(this%extwc_pvar, this%nodes,
'EXTWC_PVAR', this%memoryPath)
299 call mem_allocate(this%ha_pvar, this%nodes,
'HA_PVAR', this%memoryPath)
300 call mem_allocate(this%hroot_pvar, this%nodes,
'HROOT_PVAR', this%memoryPath)
301 call mem_allocate(this%rootact_pvar, this%nodes,
'ROOTACT_PVAR', &
303 call mem_allocate(this%uauxvar, this%naux, this%nodes,
'UAUXVAR', &
308 this%appliedinf(i) =
dzero
309 this%rejinf(i) =
dzero
310 this%rejinf0(i) =
dzero
311 this%rejinftomvr(i) =
dzero
312 this%gwet_pvar(i) =
dzero
316 this%gwdtomvr(i) =
dzero
320 this%deriv(i) =
dzero
324 this%sinf_pvar(i) =
dzero
325 this%pet_pvar(i) =
dzero
326 this%extdp(i) =
dzero
327 this%extwc_pvar(i) =
dzero
328 this%ha_pvar(i) =
dzero
329 this%hroot_pvar(i) =
dzero
330 this%rootact_pvar(i) =
dzero
332 if (this%iauxmultcol > 0 .and. j == this%iauxmultcol)
then
333 this%uauxvar(j, i) =
done
335 this%uauxvar(j, i) =
dzero
339 do i = 1, this%dis%nodes + 1
344 allocate (this%bdtxt(this%nbdtxt))
345 this%bdtxt(1) =
' UZF-INF'
346 this%bdtxt(2) =
' UZF-GWRCH'
347 this%bdtxt(3) =
' UZF-GWD'
348 this%bdtxt(4) =
' UZF-GWET'
349 this%bdtxt(5) =
' UZF-GWD TO-MVR'
352 call mem_allocate(this%wcnew, this%nodes,
'WCNEW', this%memoryPath)
353 call mem_allocate(this%wcold, this%nodes,
'WCOLD', this%memoryPath)
355 this%wcnew(i) =
dzero
356 this%wcold(i) =
dzero
360 allocate (this%cauxcbc(this%cbcauxitems))
361 allocate (this%uzfname(this%nodes))
364 call mem_allocate(this%qauxcbc, this%cbcauxitems,
'QAUXCBC', this%memoryPath)
365 do i = 1, this%cbcauxitems
366 this%qauxcbc(i) =
dzero
382 class(
uzftype),
intent(inout) :: this
383 character(len=*),
intent(inout) :: option
384 logical,
intent(inout) :: found
386 character(len=MAXCHARLEN) :: fname, keyword
388 character(len=*),
parameter :: fmtnotfound = &
389 &
"(4x, 'NO UZF OPTIONS WERE FOUND.')"
390 character(len=*),
parameter :: fmtet = &
391 "(4x, 'ET WILL BE SIMULATED WITHIN UZ AND GW ZONES, WITH LINEAR ', &
392 &'GWET IF OPTION NOT SPECIFIED OTHERWISE.')"
393 character(len=*),
parameter :: fmtgwetlin = &
394 &
"(4x, 'GROUNDWATER ET FUNCTION WILL BE LINEAR.')"
395 character(len=*),
parameter :: fmtgwetsquare = &
396 &
"(4x, 'GROUNDWATER ET FUNCTION WILL BE SQUARE WITH SMOOTHING.')"
397 character(len=*),
parameter :: fmtgwseepout = &
398 &
"(4x, 'GROUNDWATER DISCHARGE TO LAND SURFACE WILL BE SIMULATED.')"
399 character(len=*),
parameter :: fmtuzetwc = &
400 &
"(4x, 'UNSATURATED ET FUNCTION OF WATER CONTENT.')"
401 character(len=*),
parameter :: fmtuzetae = &
402 &
"(4x, 'UNSATURATED ET FUNCTION OF AIR ENTRY PRESSURE.')"
403 character(len=*),
parameter :: fmtuznlay = &
404 &
"(4x, 'UNSATURATED FLOW WILL BE SIMULATED SEPARATELY IN EACH LAYER.')"
405 character(len=*),
parameter :: fmtuzfbin = &
406 "(4x, 'UZF ', 1x, a, 1x, ' WILL BE SAVED TO FILE: ', &
407 &a, /4x, 'OPENED ON UNIT: ', I0)"
408 character(len=*),
parameter :: fmtuzfopt = &
409 &
"(4x, 'UZF ', a, ' VALUE (',g15.7,') SPECIFIED.')"
418 case (
'WATER_CONTENT')
419 call this%parser%GetStringCaps(keyword)
420 if (keyword ==
'FILEOUT')
then
421 call this%parser%GetString(fname)
423 call openfile(this%iwcontout, this%iout, fname,
'DATA(BINARY)', &
425 write (this%iout, fmtuzfbin)
'WATER-CONTENT', trim(adjustl(fname)), &
429 &MUST BE FOLLOWED BY FILEOUT')
432 call this%parser%GetStringCaps(keyword)
433 if (keyword ==
'FILEOUT')
then
434 call this%parser%GetString(fname)
435 call assign_iounit(this%ibudgetout, this%inunit,
"BUDGET fileout")
436 call openfile(this%ibudgetout, this%iout, fname,
'DATA(BINARY)', &
438 write (this%iout, fmtuzfbin)
'BUDGET', trim(adjustl(fname)), &
441 call store_error(
'OPTIONAL BUDGET KEYWORD MUST BE FOLLOWED BY FILEOUT')
444 call this%parser%GetStringCaps(keyword)
445 if (keyword ==
'FILEOUT')
then
446 call this%parser%GetString(fname)
447 call assign_iounit(this%ibudcsv, this%inunit,
"BUDGETCSV fileout")
448 call openfile(this%ibudcsv, this%iout, fname,
'CSV', &
449 filstat_opt=
'REPLACE')
450 write (this%iout, fmtuzfbin)
'BUDGET CSV', trim(adjustl(fname)), &
453 call store_error(
'OPTIONAL BUDGETCSV KEYWORD MUST BE FOLLOWED BY &
456 case (
'PACKAGE_CONVERGENCE')
457 call this%parser%GetStringCaps(keyword)
458 if (keyword ==
'FILEOUT')
then
459 call this%parser%GetString(fname)
461 call openfile(this%ipakcsv, this%iout, fname,
'CSV', &
462 filstat_opt=
'REPLACE', mode_opt=
mnormal)
463 write (this%iout, fmtuzfbin)
'PACKAGE_CONVERGENCE', &
464 trim(adjustl(fname)), this%ipakcsv
466 call store_error(
'OPTIONAL PACKAGE_CONVERGENCE KEYWORD MUST BE '// &
467 'FOLLOWED BY FILEOUT')
472 write (this%iout, fmtet)
475 write (this%iout, fmtgwetlin)
478 write (this%iout, fmtgwetsquare)
479 case (
'SIMULATE_GWSEEP')
481 write (this%iout, fmtgwseepout)
485 'USE DRN PACKAGE TO SIMULATE GROUNDWATER DISCHARGE TO LAND SURFACE '// &
489 call deprecation_warning(
'OPTIONS',
'SIMULATE_GWSEEP',
'6.5.0', &
490 warnmsg, this%parser%GetUnit())
493 write (this%iout, fmtuzetwc)
496 write (this%iout, fmtuzetae)
502 case (
'DEV_NO_FINAL_CHECK')
503 call this%parser%DevOpt()
505 write (this%iout,
'(4x,a)') &
506 'A FINAL CONVERGENCE CHECK OF THE CHANGE IN UZF RECHARGE &
530 class(
uzftype),
intent(inout) :: this
531 character(len=LINELENGTH) :: keyword
533 logical :: isfound, endOfBlock
541 call this%parser%GetBlock(
'DIMENSIONS', isfound, ierr, &
542 supportopenclose=.true.)
546 write (this%iout,
'(/1x,a)') &
547 'PROCESSING '//trim(adjustl(this%text))//
' DIMENSIONS'
549 call this%parser%GetNextLine(endofblock)
551 call this%parser%GetStringCaps(keyword)
552 select case (keyword)
554 this%nodes = this%parser%GetInteger()
555 write (this%iout,
'(4x,a,i0)')
'NUZFCELLS = ', this%nodes
557 this%ntrail_pvar = this%parser%GetInteger()
558 write (this%iout,
'(4x,a,i0)')
'NTRAILWAVES = ', this%ntrail_pvar
560 this%nsets = this%parser%GetInteger()
561 write (this%iout,
'(4x,a,i0)')
'NTRAILSETS = ', this%nsets
564 'Unknown '//trim(this%text)//
' dimension: ', trim(keyword)
567 write (this%iout,
'(1x,a)') &
568 'END OF '//trim(adjustl(this%text))//
' DIMENSIONS'
570 call store_error(
'Required dimensions block not found.')
574 this%maxbound = this%maxbound + this%nodes
575 this%nbound = this%maxbound
578 if (this%nodes <= 0)
then
580 'NUZFCELLS was not specified or was specified incorrectly.'
584 if (this%ntrail_pvar <= 0)
then
586 'NTRAILWAVES was not specified or was specified incorrectly.'
590 if (this%nsets <= 0)
then
592 'NWAVESETS was not specified or was specified incorrectly.'
598 call this%parser%StoreErrorUnit()
602 this%nwav_pvar = this%ntrail_pvar * this%nsets
606 call this%define_listlabel()
609 call this%uzf_allocate_arrays()
612 allocate (this%uzfobj)
613 call this%uzfobj%init(this%nodes, this%nwav_pvar, this%memoryPath)
614 call this%uzfobjwork%init(1, this%nwav_pvar)
617 call this%read_cell_properties()
620 if (this%iprpak /= 0)
then
621 call this%print_cell_properties()
625 call this%uzf_setup_budobj()
641 class(
uzftype),
intent(inout) :: this
643 character(len=LENBOUNDNAME) :: bndName
644 character(len=LINELENGTH) :: text
645 character(len=LINELENGTH) :: line
647 logical :: endOfBlock
652 real(DP),
pointer :: bndElem => null()
654 character(len=20) :: cellid
655 character(len=LINELENGTH) :: title
656 character(len=LINELENGTH) :: tag
657 integer(I4B) :: ntabrows
658 integer(I4B) :: ntabcols
661 character(len=*),
parameter :: fmtlsp = &
662 &
"(1X,/1X,'REUSING ',A,'S FROM LAST STRESS PERIOD')"
663 character(len=*),
parameter :: fmtblkerr = &
664 &
"('Looking for BEGIN PERIOD iper. Found ', a, ' instead.')"
665 character(len=*),
parameter :: fmtisvflow = &
666 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
667 &WHENEVER ICBCFL IS NOT ZERO.')"
668 character(len=*),
parameter :: fmtflow = &
669 &
"(4x, 'FLOWS WILL BE SAVED TO FILE: ', a, /4x, 'OPENED ON UNIT: ', I7)"
673 if (this%inunit == 0)
return
676 if (this%ionper <
kper)
then
679 call this%parser%GetBlock(
'PERIOD', isfound, ierr, &
680 supportopenclose=.true., &
681 blockrequired=.false.)
685 call this%read_check_ionper()
691 this%ionper =
nper + 1
694 call this%parser%GetCurrentLine(line)
695 write (
errmsg, fmtblkerr) adjustl(trim(line))
697 call this%parser%StoreErrorUnit()
703 this%issflag = this%gwfiss
706 if (this%ionper ==
kper)
then
709 if (this%iprpak /= 0)
then
716 if (this%ietflag /= 0)
then
717 ntabcols = ntabcols + 3
718 if (this%ietflag == 2)
then
719 ntabcols = ntabcols + 3
722 if (this%inamedbound == 1)
then
723 ntabcols = ntabcols + 1
727 title = trim(adjustl(this%text))//
' PACKAGE ('// &
728 trim(adjustl(this%packName))//
') DATA FOR PERIOD'
729 write (title,
'(a,1x,i6)') trim(adjustl(title)),
kper
730 call table_cr(this%inputtab, this%packName, title)
731 call this%inputtab%table_df(ntabrows, ntabcols, this%iout, &
734 call this%inputtab%initialize_column(tag, 10)
736 call this%inputtab%initialize_column(tag, 20, alignment=
tableft)
738 call this%inputtab%initialize_column(tag, 12)
739 if (this%ietflag /= 0)
then
741 call this%inputtab%initialize_column(tag, 12)
743 call this%inputtab%initialize_column(tag, 12)
745 call this%inputtab%initialize_column(tag, 12)
746 if (this%ietflag == 2)
then
748 call this%inputtab%initialize_column(tag, 12)
750 call this%inputtab%initialize_column(tag, 12)
752 call this%inputtab%initialize_column(tag, 12)
755 if (this%inamedbound == 1)
then
757 call this%inputtab%initialize_column(tag,
lenboundname, &
764 call this%parser%GetNextLine(endofblock)
768 i = this%parser%GetInteger()
769 if (i < 1 .or. i > this%nodes)
then
770 tag = trim(adjustl(this%text))//
' PACKAGE ('// &
771 trim(adjustl(this%packName))//
') DATA FOR PERIOD'
772 write (tag,
'(a,1x,i0)') trim(adjustl(tag)),
kper
774 write (
errmsg,
'(a,a,i0,1x,a,i0,a)') &
775 trim(adjustl(tag)),
': UZFNO ', i, &
776 'must be greater than 0 and less than or equal to ', this%nodes,
'.'
782 if (this%inamedbound > 0)
then
783 bndname = this%boundname(i)
789 call this%parser%GetStringCaps(text)
791 bndelem => this%sinf_pvar(i)
793 'BND', this%tsManager, this%iprpak, &
797 call this%parser%GetStringCaps(text)
799 bndelem => this%pet_pvar(i)
801 'BND', this%tsManager, this%iprpak, &
805 call this%parser%GetStringCaps(text)
807 bndelem => this%extdp(i)
809 'BND', this%tsManager, this%iprpak, &
813 call this%parser%GetStringCaps(text)
815 bndelem => this%extwc_pvar(i)
817 'BND', this%tsManager, this%iprpak, &
821 call this%parser%GetStringCaps(text)
823 bndelem => this%ha_pvar(i)
825 'BND', this%tsManager, this%iprpak, &
829 call this%parser%GetStringCaps(text)
831 bndelem => this%hroot_pvar(i)
833 'BND', this%tsManager, this%iprpak, &
837 call this%parser%GetStringCaps(text)
839 bndelem => this%rootact_pvar(i)
841 'BND', this%tsManager, this%iprpak, &
846 call this%parser%GetStringCaps(text)
847 bndelem => this%uauxvar(j, i)
849 'AUX', this%tsManager, this%iprpak, &
854 if (this%iprpak /= 0)
then
857 node = this%igwfnode(i)
859 call this%dis%noder_to_string(node, cellid)
865 call this%inputtab%add_term(i)
866 call this%inputtab%add_term(cellid)
867 call this%inputtab%add_term(this%sinf_pvar(i))
868 if (this%ietflag /= 0)
then
869 call this%inputtab%add_term(this%pet_pvar(i))
870 call this%inputtab%add_term(this%extdp(i))
871 call this%inputtab%add_term(this%extwc_pvar(i))
872 if (this%ietflag == 2)
then
873 call this%inputtab%add_term(this%ha_pvar(i))
874 call this%inputtab%add_term(this%hroot_pvar(i))
875 call this%inputtab%add_term(this%rootact_pvar(i))
878 if (this%inamedbound == 1)
then
879 call this%inputtab%add_term(this%boundname(i))
886 if (this%iprpak /= 0)
then
887 call this%inputtab%finalize_table()
892 write (this%iout, fmtlsp) trim(this%filtyp)
898 call this%parser%StoreErrorUnit()
902 if ((this%issflag == 0 .AND.
kper == 1) .or. &
903 (
kper == 2 .AND. this%issflagold == 1))
then
905 call this%uzfobj%setwaves(i)
912 this%wcnew(i) = this%uzfobj%get_wcnew(i)
917 this%issflagold = this%issflag
929 integer(I4B) :: ivertflag
930 integer(I4B) :: n, iaux
931 real(DP) :: rval1, rval2, rval3
934 call this%TsManager%ad()
939 if (this%naux > 0)
then
940 do n = 1, this%maxbound
941 do iaux = 1, this%naux
942 if (this%noupdateauxvar(iaux) /= 0) cycle
943 this%auxvar(iaux, n) = this%uauxvar(iaux, n)
953 this%wcold(i) = this%wcnew(i)
962 this%wcnew(i) = this%wcold(i)
968 call this%uzfobj%advance(i)
975 ivertflag = this%uzfobj%ivertcon(i)
978 if (this%iauxmultcol > 0)
then
979 rval1 = this%uauxvar(this%iauxmultcol, i)
980 call this%uzfobj%setdatauzfarea(i, rval1)
984 rval1 = this%sinf_pvar(i)
985 call this%uzfobj%setdatafinf(i, rval1)
988 rval1 = this%pet_pvar(i)
989 rval2 = this%extdp(i)
990 call this%uzfobj%setdataet(i, ivertflag, rval1, rval2)
993 rval1 = this%extwc_pvar(i)
994 call this%uzfobj%setdataetwc(i, ivertflag, rval1)
997 rval1 = this%ha_pvar(i)
998 rval2 = this%hroot_pvar(i)
999 rval3 = this%rootact_pvar(i)
1000 call this%uzfobj%setdataetha(i, ivertflag, rval1, rval2, rval3)
1004 if (this%iauxmultcol > 0)
then
1005 call this%check_cell_area()
1009 if (this%imover == 1)
then
1010 call this%pakmvrobj%ad()
1016 call this%obs%obs_ad()
1032 if (this%nodes == 0)
return
1036 do n = 1, this%maxbound
1037 this%rejinf0(n) = this%rejinf(n)
1038 this%rch0(n) = this%rch(n)
1039 this%gwd0(n) = this%gwd(n)
1045 subroutine uzf_fc(this, rhs, ia, idxglo, matrix_sln)
1048 real(DP),
dimension(:),
intent(inout) :: rhs
1049 integer(I4B),
dimension(:),
intent(in) :: ia
1050 integer(I4B),
dimension(:),
intent(in) :: idxglo
1053 integer(I4B) :: i, n, ipos
1056 if (this%imover == 1)
then
1057 call this%pakmvrobj%fc()
1062 call this%uzf_solve(reset_state=.true.)
1065 do i = 1, this%nodes
1066 n = this%nodelist(i)
1067 rhs(n) = rhs(n) + this%rhs(i)
1069 call matrix_sln%add_value_pos(idxglo(ipos), this%hcof(i))
1075 subroutine uzf_fn(this, rhs, ia, idxglo, matrix_sln)
1078 real(DP),
dimension(:),
intent(inout) :: rhs
1079 integer(I4B),
dimension(:),
intent(in) :: ia
1080 integer(I4B),
dimension(:),
intent(in) :: idxglo
1083 integer(I4B) :: i, n
1084 integer(I4B) :: ipos
1087 do i = 1, this%nodes
1088 n = this%nodelist(i)
1090 call matrix_sln%add_value_pos(idxglo(ipos), this%deriv(i))
1091 rhs(n) = rhs(n) + this%deriv(i) * this%xnew(n)
1097 subroutine uzf_cc(this, innertot, kiter, iend, icnvgmod, cpak, ipak, dpak)
1101 class(
uzftype),
intent(inout) :: this
1102 integer(I4B),
intent(in) :: innertot
1103 integer(I4B),
intent(in) :: kiter
1104 integer(I4B),
intent(in) :: icnvgmod
1105 integer(I4B),
intent(in) :: iend
1106 character(len=LENPAKLOC),
intent(inout) :: cpak
1107 integer(I4B),
intent(inout) :: ipak
1108 real(DP),
intent(inout) :: dpak
1110 character(len=LENPAKLOC) :: cloc
1111 character(len=LINELENGTH) :: tag
1112 integer(I4B) :: icheck
1113 integer(I4B) :: ipakfail
1114 integer(I4B) :: locdrejinfmax
1115 integer(I4B) :: locdrchmax
1116 integer(I4B) :: locdseepmax
1117 integer(I4B) :: locdqfrommvrmax
1118 integer(I4B) :: ntabrows
1119 integer(I4B) :: ntabcols
1123 real(DP) :: qtolfact
1125 real(DP) :: drejinfmax
1129 real(DP) :: dseepmax
1130 real(DP) :: dqfrommvr
1131 real(DP) :: dqfrommvrmax
1134 icheck = this%iconvchk
1143 dqfrommvrmax =
dzero
1147 if (this%ipakcsv == 0)
then
1148 if (icnvgmod == 0)
then
1154 if (.not.
associated(this%pakcsvtab))
then
1159 if (this%iseepflag == 1)
then
1160 ntabcols = ntabcols + 2
1162 if (this%imover == 1)
then
1163 ntabcols = ntabcols + 2
1167 call table_cr(this%pakcsvtab, this%packName,
'')
1168 call this%pakcsvtab%table_df(ntabrows, ntabcols, this%ipakcsv, &
1169 lineseparator=.false., separator=
',', &
1173 tag =
'total_inner_iterations'
1174 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1176 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1178 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1180 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1182 call this%pakcsvtab%initialize_column(tag, 10, alignment=
tableft)
1184 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1185 tag =
'drejinfmax_loc'
1186 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1188 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1190 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1191 if (this%iseepflag == 1)
then
1193 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1194 tag =
'dseepmax_loc'
1195 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1197 if (this%imover == 1)
then
1198 tag =
'dqfrommvrmax'
1199 call this%pakcsvtab%initialize_column(tag, 15, alignment=
tableft)
1200 tag =
'dqfrommvrmax_loc'
1201 call this%pakcsvtab%initialize_column(tag, 16, alignment=
tableft)
1207 if (icheck /= 0)
then
1208 final_check:
do n = 1, this%nodes
1211 qtolfact =
delt / this%uzfobj%uzfarea(n)
1214 drejinf = qtolfact * (this%rejinf0(n) - this%rejinf(n))
1217 drch = qtolfact * (this%rch0(n) - this%rch(n))
1221 if (this%iseepflag == 1)
then
1222 dseep = qtolfact * (this%gwd0(n) - this%gwd(n))
1227 if (this%imover == 1)
then
1228 q = this%pakmvrobj%get_qfrommvr(n)
1229 q0 = this%pakmvrobj%get_qfrommvr0(n)
1230 dqfrommvr = qtolfact * (q0 - q)
1235 drejinfmax = drejinf
1241 dqfrommvrmax = dqfrommvr
1244 if (abs(drejinf) > abs(drejinfmax))
then
1245 drejinfmax = drejinf
1248 if (abs(drch) > abs(drchmax))
then
1252 if (abs(dseep) > abs(dseepmax))
then
1256 if (abs(dqfrommvr) > abs(dqfrommvrmax))
then
1257 dqfrommvrmax = dqfrommvr
1264 if (abs(drejinfmax) > abs(dpak))
then
1265 ipak = locdrejinfmax
1267 write (cloc,
"(a,'-',a)") trim(this%packName),
'rejinf'
1270 if (abs(drchmax) > abs(dpak))
then
1273 write (cloc,
"(a,'-',a)") trim(this%packName),
'rech'
1276 if (this%iseepflag == 1)
then
1277 if (abs(dseepmax) > abs(dpak))
then
1280 write (cloc,
"(a,'-',a)") trim(this%packName),
'seep'
1284 if (this%imover == 1)
then
1285 if (abs(dqfrommvrmax) > abs(dpak))
then
1286 ipak = locdqfrommvrmax
1288 write (cloc,
"(a,'-',a)") trim(this%packName),
'qfrommvr'
1294 if (this%ipakcsv /= 0)
then
1297 call this%pakcsvtab%add_term(innertot)
1298 call this%pakcsvtab%add_term(
totim)
1299 call this%pakcsvtab%add_term(
kper)
1300 call this%pakcsvtab%add_term(
kstp)
1301 call this%pakcsvtab%add_term(kiter)
1302 call this%pakcsvtab%add_term(drejinfmax)
1303 call this%pakcsvtab%add_term(locdrejinfmax)
1304 call this%pakcsvtab%add_term(drchmax)
1305 call this%pakcsvtab%add_term(locdrchmax)
1306 if (this%iseepflag == 1)
then
1307 call this%pakcsvtab%add_term(dseepmax)
1308 call this%pakcsvtab%add_term(locdseepmax)
1310 if (this%imover == 1)
then
1311 call this%pakcsvtab%add_term(dqfrommvrmax)
1312 call this%pakcsvtab%add_term(locdqfrommvrmax)
1317 call this%pakcsvtab%finalize_table()
1331 class(
uzftype),
intent(inout) :: this
1332 real(DP),
dimension(:),
intent(in) :: x
1333 real(DP),
dimension(:),
contiguous,
intent(inout) :: flowja
1334 integer(I4B),
optional,
intent(in) :: iadv
1344 character(len=*),
parameter :: fmttkk = &
1345 &
"(1X,/1X,A,' PERIOD ',I0,' STEP ',I0)"
1349 call this%uzf_solve(reset_state=.true.)
1353 call this%BndType%bnd_cq(x, flowja, iadv=1)
1356 do i = 1, this%nodes
1359 n = this%nodelist(i)
1362 if (this%ibound(n) < 1) cycle
1365 this%appliedinf(i) = this%uzfobj%sinf(i) * this%uzfobj%uzfarea(i)
1366 this%infiltration(i) = this%uzfobj%surflux(i) * this%uzfobj%uzfarea(i)
1369 qout = this%rejinf(i) + this%uzfobj%surfseep(i)
1371 if (this%imover == 1)
then
1372 qtomvr = this%pakmvrobj%get_qtomvr(i)
1377 if (qout >
dzero)
then
1378 qfact = this%rejinf(i) / qout
1381 this%rejinftomvr(i) = qfact * qtomvr
1384 q = q - this%rejinftomvr(i)
1394 this%gwd(i) = this%uzfobj%surfseep(i)
1396 if (qout >
dzero)
then
1397 qfact = this%gwd(i) / qout
1400 this%gwdtomvr(i) = qfact * qtomvr
1403 q = q - this%gwdtomvr(i)
1413 this%gwet_pvar(i) = this%uzfobj%gwet(i)
1414 this%uzet(i) = this%uzfobj%etact(i) * this%uzfobj%uzfarea(i) /
delt
1421 call this%uzf_fill_budobj()
1425 thtr, delt, iss)
result(qsto)
1427 real(dp),
intent(in) :: top
1428 real(dp),
intent(in) :: bot
1429 real(dp),
intent(in) :: hold
1430 real(dp),
intent(in) :: hnew
1431 real(dp),
intent(in) :: wcold
1432 real(dp),
intent(in) :: wcnew
1433 real(dp),
intent(in) :: thtr
1434 real(dp),
intent(in) :: carea
1435 real(dp),
intent(in) :: delt
1443 thknew = top - max(bot, hnew)
1444 thkold = top - max(bot, hold)
1446 if (thknew >
dzero)
then
1447 qsto = qsto + thknew * (wcnew - thtr)
1449 if (thkold >
dzero)
then
1450 qsto = qsto - thkold * (wcold - thtr)
1452 qsto = qsto * carea / delt
1465 type(
budgettype),
intent(inout) :: model_budget
1468 integer(I4B) :: isuppress_output
1469 isuppress_output = 0
1473 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(2), &
1474 isuppress_output, this%packName)
1477 if (this%iseepflag == 1)
then
1479 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(3), &
1480 isuppress_output, this%packName)
1481 if (this%imover == 1)
then
1483 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(5), &
1484 isuppress_output, this%packName)
1489 if (this%igwetflag /= 0)
then
1491 call model_budget%addentry(ratin, ratout,
delt, this%bdtxt(4), &
1492 isuppress_output, this%packName)
1504 integer(I4B),
intent(in) :: icbcfl
1505 integer(I4B),
intent(in) :: ibudfl
1506 integer(I4B),
intent(in) :: icbcun
1507 integer(I4B),
dimension(:),
optional,
intent(in) :: imap
1509 character(len=LINELENGTH) :: title
1510 integer(I4B) :: itxt
1514 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1515 trim(this%packName)//
') FLOW RATES'
1517 this%outputtab, this%nbound, this%nodelist, &
1518 this%rch, this%ibound, title, this%bdtxt(itxt), &
1519 this%ipakcb, this%dis, this%naux, &
1520 this%name_model, this%name_model, &
1521 this%name_model, this%packName, this%auxname, &
1522 this%auxvar, this%iout, this%inamedbound, &
1526 if (this%iseepflag == 1)
then
1528 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1529 trim(this%packName)//
') FLOW RATES'
1531 this%outputtab, this%nbound, this%nodelist, &
1532 -this%gwd, this%ibound, title, &
1533 this%bdtxt(itxt), this%ipakcb, this%dis, &
1534 this%naux, this%name_model, this%name_model, &
1535 this%name_model, this%packName, this%auxname, &
1536 this%auxvar, this%iout, this%inamedbound, &
1540 if (this%imover == 1)
then
1542 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1543 trim(this%packName)//
') FLOW RATES'
1545 this%outputtab, this%nbound, this%nodelist, &
1546 -this%gwdtomvr, this%ibound, title, &
1547 this%bdtxt(itxt), this%ipakcb, this%dis, &
1548 this%naux, this%name_model, this%name_model, &
1549 this%name_model, this%packName, &
1550 this%auxname, this%auxvar, this%iout, &
1551 this%inamedbound, this%boundname)
1556 if (this%igwetflag /= 0)
then
1558 title = trim(adjustl(this%bdtxt(itxt)))//
' PACKAGE ('// &
1559 trim(this%packName)//
') FLOW RATES'
1561 this%outputtab, this%nbound, this%nodelist, &
1562 -this%gwet_pvar, this%ibound, title, &
1563 this%bdtxt(itxt), this%ipakcb, this%dis, &
1564 this%naux, this%name_model, this%name_model, &
1565 this%name_model, this%packName, this%auxname, &
1566 this%auxvar, this%iout, this%inamedbound, &
1578 integer(I4B),
intent(in) :: icbcfl
1579 integer(I4B),
intent(in) :: ibudfl
1580 integer(I4B) :: ibinun
1584 if (this%ibudgetout /= 0)
then
1585 ibinun = this%ibudgetout
1587 if (icbcfl == 0) ibinun = 0
1588 if (ibinun > 0)
then
1589 call this%budobj%save_flows(this%dis, ibinun,
kstp,
kper,
delt, &
1594 if (ibudfl /= 0 .and. this%iprflow /= 0)
then
1595 call this%budobj%write_flowtable(this%dis,
kstp,
kper)
1607 integer(I4B),
intent(in) :: idvsave
1608 integer(I4B),
intent(in) :: idvprint
1610 integer(I4B) :: ibinun
1614 if (this%iwcontout /= 0)
then
1615 ibinun = this%iwcontout
1617 if (idvsave == 0) ibinun = 0
1620 if (ibinun > 0)
then
1622 totim, this%nodes, 1, 1, ibinun)
1633 integer(I4B),
intent(in) :: kstp
1634 integer(I4B),
intent(in) :: kper
1635 integer(I4B),
intent(in) :: iout
1636 integer(I4B),
intent(in) :: ibudfl
1638 call this%budobj%write_budtable(kstp, kper, iout, ibudfl,
totim,
delt)
1646 logical,
intent(in) :: reset_state
1650 integer(I4B) :: i, ivertflag
1651 integer(I4B) :: n, m, ierr
1652 real(DP) :: trhs1, thcof1, trhs2, thcof2
1653 real(DP) :: hgwf, uzderiv, derivgwet
1654 real(DP) :: qfrommvr
1657 real(DP) :: watabold
1661 do i = 1, this%nodes
1662 this%uzfobj%pet(i) = this%uzfobj%petmax(i)
1666 do i = 1, this%nodes
1669 this%hcof(i) =
dzero
1679 n = this%nodelist(i)
1680 ivertflag = this%uzfobj%ivertcon(i)
1681 watabold = this%uzfobj%watabold(i)
1683 if (this%ibound(n) > 0)
then
1688 if (this%imover == 1)
then
1689 qfrommvr = this%pakmvrobj%get_qfrommvr(i)
1696 call this%uzfobj%solve(this%uzfobjwork, ivertflag, i, &
1697 this%totfluxtot, this%ietflag, &
1698 this%issflag, this%iseepflag, hgwf, &
1700 reset_state=reset_state, &
1701 trhs=trhs1, thcof=thcof1, deriv=uzderiv, &
1707 errmsg =
'UZF variable NWAVESETS needs to be increased.'
1712 if (this%igwetflag > 0)
then
1713 call this%uzfobj%setgwpet(i)
1714 call this%uzfobj%simgwet(this%igwetflag, i, hgwf, trhs2, thcof2, &
1719 if (this%ietflag > 0)
then
1720 if (this%uzfobj%ivertcon(i) > 0)
then
1721 call this%uzfobj%setbelowpet(i, ivertflag)
1726 this%deriv(i) = uzderiv + derivgwet
1730 this%rejinf(i) = this%uzfobj%finf_rej(i) * this%uzfobj%uzfarea(i)
1731 this%rch(i) = this%uzfobj%totflux(i) * this%uzfobj%uzfarea(i) /
delt
1732 this%gwd(i) = this%uzfobj%surfseep(i)
1735 this%hcof(i) = thcof1 + thcof2
1736 this%rhs(i) = -trhs1 + trhs2
1739 if (this%imover == 1)
then
1740 qformvr = this%gwd(i) + this%rejinf(i)
1741 call this%pakmvrobj%accumulate_qformvr(i, qformvr)
1749 this%uzfobj%celbot(i), &
1750 this%uzfobj%uzfarea(i), &
1752 this%uzfobj%watab(i), &
1753 this%wcold(i), this%wcnew(i), &
1754 this%uzfobj%thtr(i),
delt, this%issflag)
1765 class(
uzftype),
intent(inout) :: this
1768 this%listlabel = trim(this%filtyp)//
' NO.'
1769 if (this%dis%ndim == 3)
then
1770 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
1771 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'ROW'
1772 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'COL'
1773 elseif (this%dis%ndim == 2)
then
1774 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
1775 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'CELL2D'
1777 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'NODE'
1779 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'STRESS RATE'
1780 if (this%inamedbound == 1)
then
1781 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'BOUNDARY NAME'
1790 integer(I4B),
intent(in) :: n
1791 integer(I4B),
intent(inout) :: nml
1793 integer(I4B) :: m, ipos
1797 do ipos = this%dis%con%ia(n) + 1, this%dis%con%ia(n + 1) - 1
1798 m = this%dis%con%ja(ipos)
1799 if (this%dis%con%ihc(ipos) /= 0)
then
1817 class(
uzftype),
intent(inout) :: this
1819 character(len=LINELENGTH) :: cellid
1820 integer(I4B) :: ierr
1821 integer(I4B) :: i, n
1824 integer(I4B) :: jcol
1825 logical :: isfound, endOfBlock
1826 integer(I4B) :: landflag
1827 integer(I4B) :: ivertcon
1828 real(DP) :: surfdep, vks, thtr, thts, thti, eps, hgwf
1829 integer(I4B),
dimension(:),
allocatable :: rowmaxnnz
1831 integer(I4B),
dimension(:),
allocatable :: nboundchk
1834 allocate (rowmaxnnz(this%dis%nodes))
1835 do n = 1, this%dis%nodes
1840 allocate (nboundchk(this%nodes))
1841 do n = 1, this%nodes
1857 call this%parser%GetBlock(
'PACKAGEDATA', isfound, ierr, &
1858 supportopenclose=.true.)
1862 write (this%iout,
'(/1x,3a)')
'PROCESSING ', trim(adjustl(this%text)), &
1865 call this%parser%GetNextLine(endofblock)
1866 if (endofblock)
exit
1869 i = this%parser%GetInteger()
1871 if (i < 1 .or. i > this%nodes)
then
1872 write (
errmsg,
'(2(a,1x),i0,a)') &
1873 'IUZNO must be greater than 0 and less than', &
1874 'or equal to', this%nodes,
'.'
1880 nboundchk(i) = nboundchk(i) + 1
1883 call this%parser%GetCellid(this%dis%ndim, cellid)
1884 ic = this%dis%noder_from_cellid(cellid, &
1885 this%parser%iuactive, this%iout)
1886 this%igwfnode(i) = ic
1887 rowmaxnnz(ic) = rowmaxnnz(ic) + 1
1890 landflag = this%parser%GetInteger()
1891 if (landflag < 0 .OR. landflag > 1)
then
1892 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,a)') &
1893 'LANDFLAG for uzf cell', i, &
1894 'must be 0 or 1 (specified value is', landflag,
').'
1899 ivertcon = this%parser%GetInteger()
1900 if (ivertcon < 0 .OR. ivertcon > this%nodes)
then
1901 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,a)') &
1902 'IVERTCON for uzf cell', i, &
1903 'must be 0 or less than NUZFCELLS (specified value is', &
1909 surfdep = this%parser%GetDouble()
1910 if (surfdep <=
dzero .and. landflag > 0)
then
1911 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1912 'SURFDEP for uzf cell', i, &
1913 'must be greater than 0 (specified value is', surfdep,
').'
1916 if (surfdep >= this%dis%top(ic) - this%dis%bot(ic))
then
1917 write (
errmsg,
'(a,1x,i0,1x,a)') &
1918 'SURFDEP for uzf cell', i, &
1919 'cannot be greater than the cell thickness.'
1924 vks = this%parser%GetDouble()
1925 if (vks <=
dzero)
then
1926 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1927 'VKS for uzf cell', i, &
1928 'must be greater than 0 (specified value ia', vks,
').'
1933 thtr = this%parser%GetDouble()
1934 if (thtr <=
dzero)
then
1935 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1936 'THTR for uzf cell', i, &
1937 'must be greater than 0 (specified value is', thtr,
').'
1942 thts = this%parser%GetDouble()
1943 if (thts <= thtr)
then
1944 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1945 'THTS for uzf cell', i, &
1946 'must be greater than THTR (specified value is', thts,
').'
1951 thti = this%parser%GetDouble()
1952 if (thti < thtr .OR. thti > thts)
then
1953 write (
errmsg,
'(a,1x,i0,1x,a,1x,a,1x,g0,a)') &
1954 'THTI for uzf cell', i, &
1955 'must be greater than or equal to THTR AND less than THTS', &
1956 '(specified value is', thti,
').'
1961 eps = this%parser%GetDouble()
1962 if (eps < 3.5 .OR. eps > 14)
then
1963 write (
errmsg,
'(a,1x,i0,1x,a,1x,g0,a)') &
1964 'EPSILON for uzf cell', i, &
1965 'must be between 3.5 and 14.0 (specified value is', eps,
').'
1970 if (this%inamedbound == 1)
then
1971 call this%parser%GetStringCaps(this%uzfname(i))
1976 n = this%igwfnode(i)
1977 call this%uzfobj%setdata(i, this%dis%area(n), this%dis%top(n), &
1978 this%dis%bot(n), surfdep, vks, thtr, thts, &
1979 thti, eps, this%ntrail_pvar, landflag, &
1981 if (ivertcon > 0)
then
1987 write (this%iout,
'(1x,3a)') &
1988 'END OF ', trim(adjustl(this%text)),
' PACKAGEDATA'
1990 call store_error(
'Required packagedata block not found.')
1994 do i = 1, this%nodes
1995 if (nboundchk(i) == 0)
then
1996 write (
errmsg,
'(a,1x,i0,a)') &
1997 'No data specified for uzf cell', i,
'.'
1999 else if (nboundchk(i) > 1)
then
2000 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
2001 'Data for uzf cell', i,
'specified', nboundchk(i),
'times.'
2008 call this%parser%StoreErrorUnit()
2013 call sparse%init(this%dis%nodes, this%dis%nodes, rowmaxnnz)
2015 do i = 1, this%nodes
2016 ic = this%igwfnode(i)
2017 call sparse%addconnection(ic, i, 1)
2021 call sparse%filliaja(this%ia, this%ja, ierr)
2024 do i = 1, this%dis%nodes
2026 do j = this%ia(i), this%ia(i + 1) - 1
2029 if (jcol > this%imaxcellcnt)
then
2030 this%imaxcellcnt = jcol
2038 if (this%imaxcellcnt > 1 .and. this%iauxmultcol < 1)
then
2039 call this%check_cell_area()
2043 deallocate (rowmaxnnz)
2044 deallocate (nboundchk)
2051 class(
uzftype),
intent(inout) :: this
2053 character(len=20) :: cellid
2054 character(len=LINELENGTH) :: title
2055 character(len=LINELENGTH) :: tag
2056 integer(I4B) :: ntabrows
2057 integer(I4B) :: ntabcols
2059 integer(I4B) :: node
2064 ntabrows = this%nodes
2066 if (this%inamedbound == 1)
then
2067 ntabcols = ntabcols + 1
2071 title = trim(adjustl(this%text))//
' PACKAGE ('// &
2072 trim(adjustl(this%packName))//
') STATIC UZF CELL DATA'
2073 call table_cr(this%inputtab, this%packName, title)
2074 call this%inputtab%table_df(ntabrows, ntabcols, this%iout)
2076 call this%inputtab%initialize_column(tag, 10)
2078 call this%inputtab%initialize_column(tag, 20, alignment=
tableft)
2080 call this%inputtab%initialize_column(tag, 12)
2082 call this%inputtab%initialize_column(tag, 12)
2084 call this%inputtab%initialize_column(tag, 12)
2086 call this%inputtab%initialize_column(tag, 12)
2088 call this%inputtab%initialize_column(tag, 12)
2090 call this%inputtab%initialize_column(tag, 12)
2092 call this%inputtab%initialize_column(tag, 12)
2094 call this%inputtab%initialize_column(tag, 12)
2095 if (this%inamedbound == 1)
then
2101 do i = 1, this%nodes
2104 node = this%igwfnode(i)
2106 call this%dis%noder_to_string(node, cellid)
2112 call this%inputtab%add_term(i)
2113 call this%inputtab%add_term(cellid)
2114 call this%inputtab%add_term(this%uzfobj%landflag(i))
2115 call this%inputtab%add_term(this%uzfobj%ivertcon(i))
2116 call this%inputtab%add_term(this%uzfobj%surfdep(i))
2117 call this%inputtab%add_term(this%uzfobj%vks(i))
2118 call this%inputtab%add_term(this%uzfobj%thtr(i))
2119 call this%inputtab%add_term(this%uzfobj%thts(i))
2120 call this%inputtab%add_term(this%uzfobj%thti(i))
2121 call this%inputtab%add_term(this%uzfobj%eps(i))
2122 if (this%inamedbound == 1)
then
2123 call this%inputtab%add_term(this%uzfname(i))
2137 character(len=16) :: cuzf
2138 character(len=20) :: cellid
2139 character(len=LINELENGTH) :: cuzfcells
2149 real(DP) :: cellarea
2153 do i = 1, this%nodes
2156 i2 = this%uzfobj%ivertcon(i)
2157 area = this%uzfobj%uzfarea(i)
2161 area2 = this%uzfobj%uzfarea(i2)
2162 d = abs(area - area2)
2164 write (
errmsg,
'(2(a,1x,g0,1x,a,1x,i0,1x),a)') &
2165 'UZF cell area (', area,
') for cell ', i, &
2166 'does not equal uzf cell area (', area2,
') for cell ', i2,
'.'
2174 do n = 1, this%dis%nodes
2178 if ((i1 - i0) < 1) cycle
2184 write (cuzf,
'(i0)') i
2185 cuzfcells = trim(adjustl(cuzfcells))//
' '//trim(adjustl(cuzf))
2186 sumarea = sumarea + this%uzfobj%uzfarea(i)
2187 cellarea = this%uzfobj%cellarea(i)
2190 d = sumarea - cellarea
2192 call this%dis%noder_to_string(n, cellid)
2193 write (
errmsg,
'(a,1x,g0,1x,a,1x,g0,1x,a,1x,a,1x,a,a,a)') &
2194 'Total uzf cell area (', sumarea, &
2195 ') exceeds the gwf cell area (', cellarea,
') of cell', cellid, &
2196 'which includes uzf cell(s): ', trim(adjustl(cuzfcells)),
'.'
2203 call this%parser%StoreErrorUnit()
2229 integer(I4B) :: indx
2234 call this%obs%StoreObsType(
'uzf-gwrch', .true., indx)
2238 call this%obs%StoreObsType(
'uzf-gwd', .true., indx)
2242 call this%obs%StoreObsType(
'uzf-gwd-to-mvr', .true., indx)
2246 call this%obs%StoreObsType(
'uzf-gwet', .true., indx)
2250 call this%obs%StoreObsType(
'infiltration', .true., indx)
2254 call this%obs%StoreObsType(
'from-mvr', .true., indx)
2258 call this%obs%StoreObsType(
'rej-inf', .true., indx)
2262 call this%obs%StoreObsType(
'rej-inf-to-mvr', .true., indx)
2266 call this%obs%StoreObsType(
'uzet', .true., indx)
2270 call this%obs%StoreObsType(
'storage', .true., indx)
2274 call this%obs%StoreObsType(
'net-infiltration', .true., indx)
2278 call this%obs%StoreObsType(
'water-content', .false., indx)
2298 call this%uzf_solve(reset_state=.false.)
2301 if (this%obs%npakobs > 0)
then
2302 call this%obs%obs_bd_clear()
2303 do i = 1, this%obs%npakobs
2304 obsrv => this%obs%pakobs(i)%obsrv
2305 do ii = 1, obsrv%indxbnds_count
2306 n = obsrv%indxbnds(ii)
2308 select case (obsrv%ObsTypeId)
2316 case (
'UZF-GWD-TO-MVR')
2317 if (this%imover == 1)
then
2318 v = this%gwdtomvr(n)
2324 if (this%igwetflag > 0)
then
2325 v = this%gwet_pvar(n)
2330 case (
'INFILTRATION')
2331 v = this%appliedinf(n)
2333 if (this%imover == 1)
then
2334 v = this%pakmvrobj%get_qfrommvr(n)
2341 case (
'REJ-INF-TO-MVR')
2342 if (this%imover == 1)
then
2343 v = this%rejinftomvr(n)
2349 if (this%ietflag /= 0)
then
2357 case (
'NET-INFILTRATION')
2358 v = this%infiltration(n)
2359 case (
'WATER-CONTENT')
2360 v = this%uzfobj%get_water_content_at_depth(n, obsrv%obsDepth)
2362 errmsg =
'Unrecognized observation type: '//trim(obsrv%ObsTypeId)
2365 call this%obs%SaveOneSimval(obsrv, v)
2371 call this%parser%StoreErrorUnit()
2385 class(
uzftype),
intent(inout) :: this
2391 integer(I4B) :: iuzid
2392 real(DP) :: obsdepth
2394 character(len=LENBOUNDNAME) :: bname
2397 60
format(
'Invalid node number in OBS input: ', i0)
2400 do i = 1, this%obs%npakobs
2401 obsrv => this%obs%pakobs(i)%obsrv
2404 nn = obsrv%NodeNumber
2406 bname = obsrv%FeatureName
2411 do j = 1, this%nodes
2412 if (this%boundname(j) == bname)
then
2413 obsrv%BndFound = .true.
2414 obsrv%CurrentTimeStepEndValue =
dzero
2415 call obsrv%AddObsIndex(j)
2416 if (obsrv%indxbnds_count == 1)
then
2427 nn = obsrv%NodeNumber
2432 if (nn < 1 .or. nn > this%nodes)
then
2436 obsrv%BndFound = .true.
2438 obsrv%CurrentTimeStepEndValue =
dzero
2439 call obsrv%AddObsIndex(nn)
2444 if (obsrv%ObsTypeId ==
'WATER-CONTENT')
then
2445 n = obsrv%indxbnds_count
2447 write (
errmsg,
'(a,3(1x,a))') &
2448 trim(adjustl(obsrv%ObsTypeId)),
'for observation', &
2449 trim(adjustl(obsrv%Name)), &
2450 'must be assigned to a UZF cell with a unique boundname.'
2455 obsdepth = obsrv%Obsdepth
2458 obsrv%dblPak1 = obsdepth
2463 iuzid = obsrv%intPak1
2464 dmax = this%uzfobj%celtop(iuzid) - this%uzfobj%celbot(iuzid)
2470 if (obsdepth <=
dzero .or. obsdepth > dmax)
then
2471 write (
errmsg,
'(a,3(1x,a),1x,g0,1x,a,1x,g0,a)') &
2472 trim(adjustl(obsrv%ObsTypeId)),
'for observation', &
2473 trim(adjustl(obsrv%Name)),
'specified depth (', obsdepth, &
2474 ') must be greater than 0.0 and less than ', dmax,
'.'
2478 do j = 1, obsrv%indxbnds_count
2479 nn = obsrv%indxbnds(j)
2480 if (nn < 1 .or. nn > this%maxbound)
then
2481 write (
errmsg,
'(a,2(1x,a),1x,i0,1x,a,1x,i0,a)') &
2482 trim(adjustl(obsrv%ObsTypeId)),
'uzfno must be greater than 0 ', &
2483 'and less than or equal to', this%maxbound, &
2484 '(specified value is ', nn,
').'
2510 integer(I4B),
intent(in) :: inunitobs
2511 integer(I4B),
intent(in) :: iout
2513 integer(I4B) :: n, nn
2514 real(DP) :: obsdepth
2515 integer(I4B) :: icol, istart, istop, istat
2517 character(len=LINELENGTH) :: string
2521 string = obsrv%IDstring
2527 call urword(string, icol, istart, istop, 1, n, r, iout, inunitobs)
2528 read (string(istart:istop), 30, iostat=istat) nn
2529 if (istat == 0)
then
2531 obsrv%NodeNumber = nn
2535 obsrv%FeatureName = string(istart:istop)
2544 if (obsrv%ObsTypeId ==
'WATER-CONTENT')
then
2545 call urword(string, icol, istart, istop, 3, n, r, iout, inunitobs)
2548 obsrv%Obsdepth = obsdepth
2561 call this%BndType%allocate_scalars()
2564 call mem_allocate(this%iprwcont,
'IPRWCONT', this%memoryPath)
2565 call mem_allocate(this%iwcontout,
'IWCONTOUT', this%memoryPath)
2566 call mem_allocate(this%ibudgetout,
'IBUDGETOUT', this%memoryPath)
2567 call mem_allocate(this%ibudcsv,
'IBUDCSV', this%memoryPath)
2568 call mem_allocate(this%ipakcsv,
'IPAKCSV', this%memoryPath)
2569 call mem_allocate(this%ntrail_pvar,
'NTRAIL_PVAR', this%memoryPath)
2570 call mem_allocate(this%nsets,
'NSETS', this%memoryPath)
2571 call mem_allocate(this%nodes,
'NODES', this%memoryPath)
2572 call mem_allocate(this%istocb,
'ISTOCB', this%memoryPath)
2573 call mem_allocate(this%nwav_pvar,
'NWAV_PVAR', this%memoryPath)
2574 call mem_allocate(this%totfluxtot,
'TOTFLUXTOT', this%memoryPath)
2575 call mem_allocate(this%bditems,
'BDITEMS', this%memoryPath)
2576 call mem_allocate(this%nbdtxt,
'NBDTXT', this%memoryPath)
2577 call mem_allocate(this%issflag,
'ISSFLAG', this%memoryPath)
2578 call mem_allocate(this%issflagold,
'ISSFLAGOLD', this%memoryPath)
2579 call mem_allocate(this%readflag,
'READFLAG', this%memoryPath)
2580 call mem_allocate(this%iseepflag,
'ISEEPFLAG', this%memoryPath)
2581 call mem_allocate(this%imaxcellcnt,
'IMAXCELLCNT', this%memoryPath)
2582 call mem_allocate(this%ietflag,
'IETFLAG', this%memoryPath)
2583 call mem_allocate(this%igwetflag,
'IGWETFLAG', this%memoryPath)
2584 call mem_allocate(this%iuzf2uzf,
'IUZF2UZF', this%memoryPath)
2585 call mem_allocate(this%cbcauxitems,
'CBCAUXITEMS', this%memoryPath)
2587 call mem_allocate(this%iconvchk,
'ICONVCHK', this%memoryPath)
2603 this%imaxcellcnt = 0
2605 this%cbcauxitems = 1
2621 call this%uzfobj%dealloc()
2622 deallocate (this%uzfobj)
2623 nullify (this%uzfobj)
2624 call this%uzfobjwork%dealloc()
2626 call this%budobj%budgetobject_da()
2627 deallocate (this%budobj)
2628 nullify (this%budobj)
2631 deallocate (this%bdtxt)
2632 deallocate (this%cauxcbc)
2633 deallocate (this%uzfname)
2636 if (this%ipakcsv > 0)
then
2637 if (
associated(this%pakcsvtab))
then
2638 call this%pakcsvtab%table_da()
2639 deallocate (this%pakcsvtab)
2640 nullify (this%pakcsvtab)
2706 call this%BndType%bnd_da()
2720 integer(I4B) :: nbudterm
2721 integer(I4B) :: maxlist, naux
2723 integer(I4B) :: nlen
2724 integer(I4B) :: n, n1, n2
2725 integer(I4B) :: ivertflag
2727 character(len=LENBUDTXT) :: text
2728 character(len=LENBUDTXT),
dimension(1) :: auxtxt
2732 do n = 1, this%nodes
2733 ivertflag = this%uzfobj%ivertcon(n)
2734 if (ivertflag > 0)
then
2744 if (nlen > 0) nbudterm = nbudterm + 1
2745 if (this%ietflag /= 0) nbudterm = nbudterm + 1
2746 if (this%imover == 1) nbudterm = nbudterm + 2
2747 if (this%naux > 0) nbudterm = nbudterm + 1
2751 call this%budobj%budgetobject_df(this%maxbound, nbudterm, 0, 0, &
2752 ibudcsv=this%ibudcsv)
2756 text =
' FLOW-JA-FACE'
2761 auxtxt(1) =
' FLOW-AREA'
2762 call this%budobj%budterm(idx)%initialize(text, &
2767 maxlist, .false., .false., &
2768 naux, auxtxt, ordered_id1=.false.)
2771 call this%budobj%budterm(idx)%reset(nlen * 2)
2773 do n = 1, this%nodes
2774 ivertflag = this%uzfobj%ivertcon(n)
2775 if (ivertflag > 0)
then
2778 call this%budobj%budterm(idx)%update_term(n1, n2, q)
2779 call this%budobj%budterm(idx)%update_term(n2, n1, -q)
2787 maxlist = this%nodes
2789 auxtxt(1) =
' FLOW-AREA'
2790 call this%budobj%budterm(idx)%initialize(text, &
2795 maxlist, .false., .true., &
2797 call this%budobj%budterm(idx)%reset(this%nodes)
2799 do n = 1, this%nodes
2800 n2 = this%igwfnode(n)
2801 this%qauxcbc(1) = this%uzfobj%uzfarea(n)
2802 call this%budobj%budterm(idx)%update_term(n, n2, q, this%qauxcbc)
2806 text =
' INFILTRATION'
2808 maxlist = this%nodes
2810 call this%budobj%budterm(idx)%initialize(text, &
2815 maxlist, .false., .false., &
2821 maxlist = this%nodes
2823 call this%budobj%budterm(idx)%initialize(text, &
2828 maxlist, .false., .false., &
2833 if (this%ietflag /= 0)
then
2835 maxlist = this%maxbound
2837 call this%budobj%budterm(idx)%initialize(text, &
2842 maxlist, .false., .false., &
2849 maxlist = this%nodes
2851 auxtxt(1) =
' VOLUME'
2852 call this%budobj%budterm(idx)%initialize(text, &
2857 maxlist, .false., .false., &
2861 if (this%imover == 1)
then
2866 maxlist = this%nodes
2868 call this%budobj%budterm(idx)%initialize(text, &
2873 maxlist, .false., .false., &
2877 text =
' REJ-INF-TO-MVR'
2879 maxlist = this%nodes
2881 call this%budobj%budterm(idx)%initialize(text, &
2886 maxlist, .false., .false., &
2897 maxlist = this%maxbound
2898 call this%budobj%budterm(idx)%initialize(text, &
2903 maxlist, .false., .false., &
2908 if (this%iprflow /= 0)
then
2909 call this%budobj%flowtable_df(this%iout, cellids=
'GWF')
2919 integer(I4B) :: naux
2920 integer(I4B) :: nlen
2921 integer(I4B) :: ivertflag
2922 integer(I4B) :: n, n1, n2
2937 do n = 1, this%nodes
2938 ivertflag = this%uzfobj%ivertcon(n)
2939 if (ivertflag > 0)
then
2945 call this%budobj%budterm(idx)%reset(nlen * 2)
2946 do n = 1, this%nodes
2947 ivertflag = this%uzfobj%ivertcon(n)
2948 if (ivertflag > 0)
then
2949 a = this%uzfobj%uzfarea(n)
2950 q = this%uzfobj%surfluxbelow(n) * a
2957 call this%budobj%budterm(idx)%update_term(n1, n2, q, this%qauxcbc)
2958 call this%budobj%budterm(idx)%update_term(n2, n1, -q, this%qauxcbc)
2965 call this%budobj%budterm(idx)%reset(this%nodes)
2966 do n = 1, this%nodes
2967 this%qauxcbc(1) = this%uzfobj%uzfarea(n)
2968 n2 = this%igwfnode(n)
2970 call this%budobj%budterm(idx)%update_term(n, n2, q, this%qauxcbc)
2975 call this%budobj%budterm(idx)%reset(this%nodes)
2976 do n = 1, this%nodes
2977 q = this%appliedinf(n)
2978 call this%budobj%budterm(idx)%update_term(n, n, q)
2983 call this%budobj%budterm(idx)%reset(this%nodes)
2984 do n = 1, this%nodes
2989 call this%budobj%budterm(idx)%update_term(n, n, q)
2993 if (this%ietflag /= 0)
then
2995 call this%budobj%budterm(idx)%reset(this%nodes)
2996 do n = 1, this%nodes
3001 call this%budobj%budterm(idx)%update_term(n, n, q)
3007 call this%budobj%budterm(idx)%reset(this%nodes)
3008 do n = 1, this%nodes
3010 top = this%uzfobj%celtop(n)
3011 bot = this%uzfobj%watab(n)
3013 if (thick >
dzero)
then
3014 fm = thick * (this%wcnew(n) - this%uzfobj%thtr(n))
3015 v = fm * this%uzfobj%uzfarea(n)
3021 call this%budobj%budterm(idx)%update_term(n, n, q, this%qauxcbc)
3025 if (this%imover == 1)
then
3029 call this%budobj%budterm(idx)%reset(this%nodes)
3030 do n = 1, this%nodes
3031 q = this%pakmvrobj%get_qfrommvr(n)
3032 call this%budobj%budterm(idx)%update_term(n, n, q)
3037 call this%budobj%budterm(idx)%reset(this%nodes)
3038 do n = 1, this%nodes
3039 q = this%rejinftomvr(n)
3043 call this%budobj%budterm(idx)%update_term(n, n, q)
3052 call this%budobj%budterm(idx)%reset(this%nodes)
3053 do n = 1, this%nodes
3055 call this%budobj%budterm(idx)%update_term(n, n, q, this%auxvar(:, n))
3060 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.