25 character(len=LENPACKAGENAME) :: text =
''
26 logical,
pointer :: flows_from_file => null()
27 type(
listtype),
pointer :: gwfbndlist => null()
28 integer(I4B),
pointer :: iflowsupdated => null()
29 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound => null()
30 real(dp),
dimension(:),
pointer,
contiguous :: gwfflowja => null()
31 real(dp),
dimension(:, :),
pointer,
contiguous :: gwfspdis => null()
32 real(dp),
dimension(:),
pointer,
contiguous :: gwfhead => null()
33 real(dp),
dimension(:),
pointer,
contiguous :: gwfsat => null()
34 integer(I4B),
dimension(:),
pointer,
contiguous :: ibdgwfsat0 => null()
35 integer(I4B),
pointer :: idryinactive => null()
36 real(dp),
dimension(:),
pointer,
contiguous :: gwfstrgss => null()
37 real(dp),
dimension(:),
pointer,
contiguous :: gwfstrgsy => null()
38 integer(I4B),
dimension(:),
pointer,
contiguous :: gwfceltyp => null()
39 integer(I4B),
pointer :: igwfspdis => null()
40 integer(I4B),
pointer :: igwfstrgss => null()
41 integer(I4B),
pointer :: igwfstrgsy => null()
42 integer(I4B),
pointer :: igwfceltyp => null()
43 integer(I4B),
pointer :: iubud => null()
44 integer(I4B),
pointer :: iuhds => null()
45 integer(I4B),
pointer :: iumvr => null()
46 integer(I4B),
pointer :: iugrb => null()
47 integer(I4B),
pointer :: nflowpack => null()
48 integer(I4B),
dimension(:),
pointer,
contiguous :: igwfmvrterm => null()
54 character(len=16),
dimension(:),
allocatable :: flowpacknamearray
55 character(len=LENVARNAME) :: depvartype =
''
85 subroutine fmi_df(this, dis, idryinactive)
90 integer(I4B),
intent(in) :: idryinactive
92 character(len=*),
parameter :: fmtfmi = &
93 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE, VERSION 2, 8/17/2023', &
94 &' INPUT READ FROM MEMPATH: ', A, //)"
95 character(len=*),
parameter :: fmtfmi0 = &
96 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE,'&
97 &' VERSION 2, 8/17/2023')"
100 if (this%iout > 0)
then
101 if (this%inunit /= 0)
then
102 write (this%iout, fmtfmi) this%input_mempath
104 write (this%iout, fmtfmi0)
105 if (this%flows_from_file)
then
106 write (this%iout,
'(a)')
' FLOWS ARE ASSUMED TO BE ZERO.'
108 write (this%iout,
'(a)')
' FLOWS PROVIDED BY A GWF MODEL IN THIS &
118 if (this%inunit /= 0)
then
119 call this%source_options()
123 if (this%inunit /= 0 .and. this%flows_from_file)
then
124 call this%source_packagedata()
125 call this%initialize_gwfterms_from_bfr()
129 if (.not. this%flows_from_file)
then
130 call this%initialize_gwfterms_from_gwfbndlist()
136 this%idryinactive = idryinactive
145 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
148 this%ibound => ibound
151 call this%allocate_arrays(this%dis%nodes)
164 call this%deallocate_gwfpackages()
167 deallocate (this%gwfpackages)
168 deallocate (this%flowpacknamearray)
172 if (this%flows_from_file)
then
199 call this%NumericalPackageType%da()
213 call this%NumericalPackageType%allocate_scalars()
216 call mem_allocate(this%flows_from_file,
'FLOWS_FROM_FILE', this%memoryPath)
217 call mem_allocate(this%iflowsupdated,
'IFLOWSUPDATED', this%memoryPath)
218 call mem_allocate(this%igwfspdis,
'IGWFSPDIS', this%memoryPath)
219 call mem_allocate(this%igwfstrgss,
'IGWFSTRGSS', this%memoryPath)
220 call mem_allocate(this%igwfstrgsy,
'IGWFSTRGSY', this%memoryPath)
221 call mem_allocate(this%igwfceltyp,
'IGWFCELTYP', this%memoryPath)
226 call mem_allocate(this%nflowpack,
'NFLOWPACK', this%memoryPath)
227 call mem_allocate(this%idryinactive,
"IDRYINACTIVE", this%memoryPath)
231 this%flows_from_file = .true.
232 this%iflowsupdated = 1
242 this%idryinactive = 1
253 integer(I4B),
intent(in) :: nodes
259 call mem_allocate(this%ibdgwfsat0, nodes,
'IBDGWFSAT0', this%memoryPath)
261 this%ibdgwfsat0(n) = 1
266 if (this%flows_from_file)
then
268 'GWFFLOWJA', this%memoryPath)
269 call mem_allocate(this%gwfsat, nodes,
'GWFSAT', this%memoryPath)
270 call mem_allocate(this%gwfhead, nodes,
'GWFHEAD', this%memoryPath)
271 call mem_allocate(this%gwfspdis, 3, nodes,
'GWFSPDIS', this%memoryPath)
273 this%gwfsat(n) = done
274 this%gwfhead(n) =
dzero
275 this%gwfspdis(:, n) =
dzero
277 do n = 1,
size(this%gwfflowja)
278 this%gwfflowja(n) =
dzero
282 if (this%igwfstrgss == 0)
then
283 call mem_allocate(this%gwfstrgss, 1,
'GWFSTRGSS', this%memoryPath)
285 call mem_allocate(this%gwfstrgss, nodes,
'GWFSTRGSS', this%memoryPath)
287 if (this%igwfstrgsy == 0)
then
288 call mem_allocate(this%gwfstrgsy, 1,
'GWFSTRGSY', this%memoryPath)
290 call mem_allocate(this%gwfstrgsy, nodes,
'GWFSTRGSY', this%memoryPath)
292 do n = 1,
size(this%gwfstrgss)
293 this%gwfstrgss(n) =
dzero
295 do n = 1,
size(this%gwfstrgsy)
296 this%gwfstrgsy(n) =
dzero
304 if (this%igwfceltyp == 0) &
305 call mem_allocate(this%gwfceltyp, nodes,
'GWFCELTYP', this%memoryPath)
309 if (this%inunit == 0)
call this%allocate_gwfpackages(this%nflowpack)
321 logical(LGP) :: found_ipakcb
322 character(len=*),
parameter :: fmtisvflow = &
323 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
324 &WHENEVER ICBCFL IS NOT ZERO AND FLOW IMBALANCE CORRECTION ACTIVE.')"
327 call mem_set_value(this%ipakcb,
'SAVE_FLOWS', this%input_mempath, &
330 write (this%iout,
'(1x,a)')
'PROCESSING FMI OPTIONS'
332 if (found_ipakcb)
then
334 write (this%iout, fmtisvflow)
337 write (this%iout,
'(1x,a)')
'END OF FMI OPTIONS'
359 character(len=LINELENGTH) :: flowtype, fileop, fname
360 integer(I4B) :: inunit, n
361 logical(LGP) :: exist
363 call mem_setptr(flowtypes,
'FLOWTYPE', this%input_mempath)
364 call mem_setptr(fileops,
'FILEIN', this%input_mempath)
365 call mem_setptr(fnames,
'FNAME', this%input_mempath)
367 write (this%iout,
'(1x,a)')
'PROCESSING FMI PACKAGEDATA'
369 do n = 1,
size(flowtypes)
370 flowtype = flowtypes(n)
374 inquire (file=trim(fname), exist=exist)
375 if (.not. exist)
then
376 call store_error(
'Could not find file '//trim(fname))
380 if (fileop /=
'FILEIN')
then
381 call store_error(
'Unexpected packagedata input keyword read: "' &
382 //trim(fileop)//
'".')
386 select case (flowtype)
389 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
392 call this%initialize_bfr()
395 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
398 call this%initialize_hfr()
401 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
406 call this%mvrbudobj%fill_from_bfr(this%dis, this%iout)
409 call openfile(inunit, this%iout, fname,
'DATA(BINARY)', &
412 call this%read_grid()
414 write (
errmsg,
'(a,3(1x,a))') &
415 'UNKNOWN', trim(adjustl(this%text)),
'PACKAGEDATA:', trim(flowtype)
420 write (this%iout,
'(1x,a)')
'END OF FMI PACKAGEDATA'
444 integer(I4B) :: user_nodes
445 integer(I4B),
allocatable :: idomain1d(:), idomain2d(:, :), idomain3d(:, :, :)
447 character(len=*),
parameter :: fmticterr = &
448 &
"('Error in ',a,': Binary grid file does not contain ICELLTYPE.')"
449 character(len=*),
parameter :: fmtdiserr = &
450 "('Error in ',a,': Models do not have the same discretization. &
451 &GWF model has ', i0, ' user nodes, this model has ', i0, '. &
452 &Ensure discretization packages, including IDOMAIN, are identical.')"
453 character(len=*),
parameter :: fmtidomerr = &
454 "('Error in ',a,': models do not have the same discretization. &
455 &Models have different IDOMAIN arrays. &
456 &Ensure discretization packages, including IDOMAIN, are identical.')"
458 call this%gfr%initialize(this%iugrb)
461 if (.not. this%gfr%has_variable(
"ICELLTYPE"))
then
462 write (
errmsg, fmticterr) trim(this%text)
467 'GWFCELTYP', this%memoryPath)
468 call this%gfr%read_int_1d_into(
"ICELLTYPE", this%gwfceltyp)
471 select case (this%gfr%grid_type)
473 select type (dis => this%dis)
475 user_nodes = this%gfr%read_int(
"NCELLS")
476 if (user_nodes /= this%dis%nodesuser)
then
477 write (
errmsg, fmtdiserr) &
478 trim(this%text), user_nodes, this%dis%nodesuser
481 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
482 idomain3d = reshape(idomain1d, [ &
483 this%gfr%read_int(
"NCOL"), &
484 this%gfr%read_int(
"NROW"), &
485 this%gfr%read_int(
"NLAY") &
487 if (.not. all(dis%idomain == idomain3d))
then
488 write (
errmsg, fmtidomerr) trim(this%text)
493 select type (dis => this%dis)
495 user_nodes = this%gfr%read_int(
"NCELLS")
496 if (user_nodes /= this%dis%nodesuser)
then
497 write (
errmsg, fmtdiserr) &
498 trim(this%text), user_nodes, this%dis%nodesuser
501 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
502 idomain2d = reshape(idomain1d, [ &
503 this%gfr%read_int(
"NCPL"), &
504 this%gfr%read_int(
"NLAY") &
506 if (.not. all(dis%idomain == idomain2d))
then
507 write (
errmsg, fmtidomerr) trim(this%text)
512 select type (dis => this%dis)
514 user_nodes = this%gfr%read_int(
"NODES")
515 if (user_nodes /= this%dis%nodesuser)
then
516 write (
errmsg, fmtdiserr) &
517 trim(this%text), user_nodes, this%dis%nodesuser
520 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
521 if (.not. all(dis%idomain == idomain1d))
then
522 write (
errmsg, fmtidomerr) trim(this%text)
527 select type (dis => this%dis)
529 user_nodes = this%gfr%read_int(
"NCELLS")
530 if (user_nodes /= this%dis%nodesuser)
then
531 write (
errmsg, fmtdiserr) &
532 trim(this%text), user_nodes, this%dis%nodesuser
535 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
536 idomain2d = reshape(idomain1d, [ &
537 this%gfr%read_int(
"NCOL"), &
538 this%gfr%read_int(
"NROW") &
540 if (.not. all(dis%idomain == idomain2d))
then
541 write (
errmsg, fmtidomerr) trim(this%text)
546 select type (dis => this%dis)
548 user_nodes = this%gfr%read_int(
"NODES")
549 if (user_nodes /= this%dis%nodesuser)
then
550 write (
errmsg, fmtdiserr) &
551 trim(this%text), user_nodes, this%dis%nodesuser
554 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
555 if (.not. all(dis%idomain == idomain1d))
then
556 write (
errmsg, fmtidomerr) trim(this%text)
561 select type (dis => this%dis)
563 user_nodes = this%gfr%read_int(
"NCELLS")
564 if (user_nodes /= this%dis%nodesuser)
then
565 write (
errmsg, fmtdiserr) &
566 trim(this%text), user_nodes, this%dis%nodesuser
569 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
570 if (.not. all(dis%idomain == idomain1d))
then
571 write (
errmsg, fmtidomerr) trim(this%text)
577 if (
allocated(idomain3d))
deallocate (idomain3d)
578 if (
allocated(idomain2d))
deallocate (idomain2d)
579 if (
allocated(idomain1d))
deallocate (idomain1d)
581 call this%gfr%finalize()
587 integer(I4B) :: ncrbud
588 call this%bfr%initialize(this%iubud, this%iout, ncrbud)
607 integer(I4B) :: nu, nr
608 integer(I4B) :: ip, i
611 character(len=*),
parameter :: fmtkstpkper = &
612 "(1x,/1x,'FMI READING BUDGET TERMS &
613 &FOR KSTP ', i0, ' KPER ', i0)"
614 character(len=*),
parameter :: fmtbudkstpkper = &
615 "(1x,/1x, 'FMI SETTING BUDGET TERMS &
616 &FOR KSTP ', i0, ' AND KPER ', &
617 &i0, ' TO BUDGET FILE TERMS FROM &
618 &KSTP ', i0, ' AND KPER ', i0)"
619 character(len=*),
parameter :: fmtbadtdis = &
620 "(4x, 'TIME DISCRETIZATION IN BUDGET FILE &
621 &IS INCOMPATIBLE WITH TIME DISCRETIZATION IN COUPLED MODEL. &
622 &IF THERE IS MORE THAN ONE TIME STEP IN THE BUDGET FILE FOR A &
623 &GIVEN STRESS PERIOD, BUDGET FILE TIME STEPS MUST MATCH THE &
624 &COUPLED MODEL TIME STEPS ONE-FOR-ONE IN THAT STRESS PERIOD.')"
632 if (this%bfr%header%kstp == 1)
then
633 if (this%bfr%endoffile)
then
635 else if (this%bfr%headernext%kper ==
kper + 1)
then
638 else if (this%bfr%endoffile)
then
639 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF BUDGET &
640 &FILE BEFORE READING SUFFICIENT BUDGET INFORMATION FOR THIS &
651 write (this%iout, fmtkstpkper)
kstp,
kper
656 do n = 1, this%bfr%nbudterms
657 call this%bfr%read_record(success, this%iout)
658 if (.not. success)
then
659 write (
errmsg,
'(4x,a)')
'GWF BUDGET READ NOT SUCCESSFUL'
665 if (
kper /= this%bfr%header%kper)
then
666 write (
errmsg, fmtbadtdis)
672 if (this%bfr%header%kstp > 1 .and. (
kstp /= this%bfr%header%kstp))
then
673 write (
errmsg, fmtbadtdis)
680 select type (h => this%bfr%header)
682 select case (trim(adjustl(h%budtxt)))
683 case (
'FLOW-JA-FACE')
687 do ipos = 1,
size(this%bfr%flowja)
688 this%gwfflowja(ipos) = this%bfr%flowja(ipos)
692 nu = this%bfr%nodesrc(i)
693 nr = this%dis%get_nodenumber(nu, 0)
695 this%gwfspdis(1, nr) = this%bfr%auxvar(1, i)
696 this%gwfspdis(2, nr) = this%bfr%auxvar(2, i)
697 this%gwfspdis(3, nr) = this%bfr%auxvar(3, i)
701 nu = this%bfr%nodesrc(i)
702 nr = this%dis%get_nodenumber(nu, 0)
704 this%gwfsat(nr) = this%bfr%auxvar(1, i)
707 do nu = 1, this%dis%nodesuser
708 nr = this%dis%get_nodenumber(nu, 0)
710 this%gwfstrgss(nr) = this%bfr%flow(nu)
713 do nu = 1, this%dis%nodesuser
714 nr = this%dis%get_nodenumber(nu, 0)
716 this%gwfstrgsy(nr) = this%bfr%flow(nu)
719 call this%gwfpackages(ip)%copy_values( &
724 do i = 1, this%gwfpackages(ip)%nbound
725 nu = this%gwfpackages(ip)%nodelist(i)
726 nr = this%dis%get_nodenumber(nu, 0)
727 this%gwfpackages(ip)%nodelist(i) = nr
737 if (this%bfr%headernext%kper ==
kper)
then
738 write (
errmsg, fmtbadtdis)
746 write (this%iout, fmtbudkstpkper)
kstp,
kper, &
747 this%bfr%header%kstp, this%bfr%header%kper
750 this%iflowsupdated = 0
757 call this%bfr%finalize()
763 call this%hfr%initialize(this%iuhds, this%iout)
773 integer(I4B) :: nu, nr, i, ilay
778 character(len=*),
parameter :: fmtkstpkper = &
779 "(1x,/1x,'FMI READING HEAD FOR &
780 &KSTP ', i0, ' KPER ', i0)"
781 character(len=*),
parameter :: fmthdskstpkper = &
782 "(1x,/1x, 'FMI SETTING HEAD FOR KSTP ', i0, ' AND KPER ', &
783 &i0, ' TO BINARY FILE HEADS FROM KSTP ', i0, ' AND KPER ', i0)"
791 if (this%hfr%header%kstp == 1)
then
792 if (this%hfr%endoffile)
then
794 else if (this%hfr%headernext%kper ==
kper + 1)
then
797 else if (this%hfr%endoffile)
then
798 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF HEAD &
799 &FILE BEFORE READING SUFFICIENT HEAD INFORMATION FOR THIS &
810 write (this%iout, fmtkstpkper)
kstp,
kper
813 do ilay = 1, this%hfr%nlay
816 call this%hfr%read_record(success, this%iout)
817 if (.not. success)
then
818 write (
errmsg,
'(4x,a)')
'GWF HEAD READ NOT SUCCESSFUL'
824 if (
kper /= this%hfr%header%kper)
then
825 write (
errmsg,
'(4x,a)')
'PERIOD NUMBER IN HEAD FILE &
826 &DOES NOT MATCH PERIOD NUMBER IN TRANSPORT MODEL. IF THERE &
827 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
828 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
829 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
835 if (this%hfr%header%kstp > 1 .and. (
kstp /= this%hfr%header%kstp))
then
836 write (
errmsg,
'(4x,a)')
'TIME STEP NUMBER IN HEAD FILE &
837 &DOES NOT MATCH TIME STEP NUMBER IN TRANSPORT MODEL. IF THERE &
838 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
839 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
840 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
847 ncpl =
size(this%hfr%head)
849 nu = (ilay - 1) * ncpl + i
850 nr = this%dis%get_nodenumber(nu, 0)
851 val = this%hfr%head(i)
852 if (nr > 0) this%gwfhead(nr) = val
856 write (this%iout, fmthdskstpkper)
kstp,
kper, &
857 this%hfr%header%kstp, this%hfr%header%kper
876 integer(I4B) :: nflowpack
877 integer(I4B) :: i, ip
879 logical :: found_flowja
880 logical :: found_dataspdis
881 logical :: found_datasat
882 logical :: found_stoss
883 logical :: found_stosy
884 integer(I4B),
dimension(:),
allocatable :: imap
887 allocate (imap(this%bfr%nbudterms))
890 found_flowja = .false.
891 found_dataspdis = .false.
892 found_datasat = .false.
893 found_stoss = .false.
894 found_stosy = .false.
895 do i = 1, this%bfr%nbudterms
896 select case (trim(adjustl(this%bfr%budtxtarray(i))))
897 case (
'FLOW-JA-FACE')
898 found_flowja = .true.
900 found_dataspdis = .true.
903 found_datasat = .true.
911 nflowpack = nflowpack + 1
917 call this%allocate_gwfpackages(nflowpack)
922 do i = 1, this%bfr%nbudterms
923 if (imap(i) == 0) cycle
924 call this%gwfpackages(ip)%set_name(this%bfr%dstpackagenamearray(i), &
925 this%bfr%budtxtarray(i))
926 naux = this%bfr%nauxarray(i)
927 call this%gwfpackages(ip)%set_auxname(naux, this%bfr%auxtxtarray(1:naux, i))
935 if (imap(i) == 1)
then
936 this%flowpacknamearray(ip) = this%bfr%dstpackagenamearray(i)
942 if (.not. found_dataspdis)
then
943 write (
errmsg,
'(4x,a)')
'SPECIFIC DISCHARGE NOT FOUND IN &
944 &BUDGET FILE. SAVE_SPECIFIC_DISCHARGE AND &
945 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
948 if (.not. found_datasat)
then
949 write (
errmsg,
'(4x,a)')
'SATURATION NOT FOUND IN &
950 &BUDGET FILE. SAVE_SATURATION AND &
951 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
954 if (.not. found_flowja)
then
955 write (
errmsg,
'(4x,a)')
'FLOWJA NOT FOUND IN &
956 &BUDGET FILE. SAVE_FLOWS MUST &
957 &BE ACTIVATED IN THE NPF PACKAGE.'
972 integer(I4B) :: ngwfpack
973 integer(I4B) :: ngwfterms
975 integer(I4B) :: imover
976 integer(I4B) :: ntomvr
977 integer(I4B) :: iterm
978 character(len=LENPACKAGENAME) :: budtxt
979 class(
bndtype),
pointer :: packobj => null()
982 ngwfpack = this%gwfbndlist%Count()
990 imover = packobj%imover
991 if (packobj%isadvpak /= 0) imover = 0
992 if (imover /= 0)
then
999 ngwfterms = ngwfpack + ntomvr
1000 call this%allocate_gwfpackages(ngwfterms)
1008 budtxt = adjustl(packobj%text)
1009 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
1010 this%flowpacknamearray(iterm) = packobj%packName
1015 imover = packobj%imover
1016 if (packobj%isadvpak /= 0) imover = 0
1017 if (imover /= 0)
then
1018 budtxt = trim(adjustl(packobj%text))//
'-TO-MVR'
1019 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
1020 this%flowpacknamearray(iterm) = packobj%packName
1021 this%igwfmvrterm(iterm) = 1
1039 integer(I4B),
intent(in) :: ngwfterms
1042 character(len=LENMEMPATH) :: memPath
1045 allocate (this%gwfpackages(ngwfterms))
1046 allocate (this%flowpacknamearray(ngwfterms))
1049 call mem_allocate(this%igwfmvrterm, ngwfterms,
'IGWFMVRTERM', this%memoryPath)
1052 this%nflowpack = ngwfterms
1053 do n = 1, this%nflowpack
1054 this%igwfmvrterm(n) = 0
1055 this%flowpacknamearray(n) =
''
1059 write (mempath,
'(a, i0)') trim(this%memoryPath)//
'-FT', n
1060 call this%gwfpackages(n)%initialize(mempath)
1069 do n = 1, this%nflowpack
1070 call this%gwfpackages(n)%da()
1078 character(len=*),
intent(in) :: name
1079 integer(I4B),
intent(inout) :: idx
1085 do ip = 1,
size(this%flowpacknamearray)
1086 if (this%flowpacknamearray(ip) == name)
then
1092 call store_error(
'Error in get_package_index. Could not find '//name, &
This module contains the base boundary package.
class(bndtype) function, pointer, public getbndfromlist(list, idx)
Get boundary from package list.
subroutine, public budgetobject_cr_bfr(this, name, ibinun, iout, colconv1, colconv2)
Create a new budget object from a binary flow file.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lenpackagename
maximum length of the package name
integer(i4b), parameter lenvarname
maximum length of a variable name
real(dp), parameter dhalf
real constant 1/2
real(dp), parameter dem6
real constant 1e-6
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
integer(i4b), parameter lenmempath
maximum length of the memory path
real(dp), parameter done
real constant 1
subroutine allocate_scalars(this)
Allocate scalars.
subroutine fmi_ar(this, ibound)
Allocate the package.
subroutine allocate_gwfpackages(this, ngwfterms)
Allocate budget packages.
subroutine read_grid(this)
Read/validate flow model grid.
subroutine deallocate_gwfpackages(this)
Deallocate memory in the gwfpackages array.
subroutine finalize_hfr(this)
Finalize the head file reader.
subroutine fmi_df(this, dis, idryinactive)
Define the flow model interface.
subroutine get_package_index(this, name, idx)
Find the package index for the package with the given name.
subroutine advance_bfr(this)
Advance the budget file reader.
subroutine initialize_gwfterms_from_gwfbndlist(this)
Initialize gwf terms from a GWF exchange.
subroutine initialize_hfr(this)
Initialize the head file reader.
subroutine source_options(this)
@ brief Source input options for package
subroutine fmi_da(this)
Deallocate variables.
subroutine source_packagedata(this)
@ brief Source input options for package
subroutine advance_hfr(this)
Advance the head file reader.
subroutine initialize_gwfterms_from_bfr(this)
Initialize gwf terms from budget file.
subroutine finalize_bfr(this)
Finalize the budget file reader.
subroutine allocate_arrays(this, nodes)
Allocate arrays.
subroutine initialize_bfr(this)
Initialize the budget file reader.
This module defines variable data types.
subroutine, public memorystore_release(varname, memory_path)
Release a single variable from the memory store.
This module contains the base numerical package type.
This module contains the PackageBudgetModule Module.
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 store_error_filename(filename, terminate)
Store the erroring file name.
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
logical(lgp), pointer, public endofsimulation
flag indicating end of simulation
integer(i4b), pointer, public kstp
current time step number
integer(i4b), pointer, public kper
current stress period number
This class is used to store a single deferred-length character string. It was designed to work in an ...
Structured grid discretization.
Structured grid discretization.
Unstructured grid discretization.
Vertex grid discretization.
Vertex grid discretization.
A generic heterogeneous doubly-linked list.
Derived type for storing flows.