24 character(len=LENPACKAGENAME) :: text =
''
25 logical,
pointer :: flows_from_file => null()
26 type(
listtype),
pointer :: gwfbndlist => null()
27 integer(I4B),
pointer :: iflowsupdated => null()
28 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound => null()
29 real(dp),
dimension(:),
pointer,
contiguous :: gwfflowja => null()
30 real(dp),
dimension(:, :),
pointer,
contiguous :: gwfspdis => null()
31 real(dp),
dimension(:),
pointer,
contiguous :: gwfhead => null()
32 real(dp),
dimension(:),
pointer,
contiguous :: gwfsat => null()
33 integer(I4B),
dimension(:),
pointer,
contiguous :: ibdgwfsat0 => null()
34 integer(I4B),
pointer :: idryinactive => null()
35 real(dp),
dimension(:),
pointer,
contiguous :: gwfstrgss => null()
36 real(dp),
dimension(:),
pointer,
contiguous :: gwfstrgsy => null()
37 integer(I4B),
pointer :: igwfstrgss => null()
38 integer(I4B),
pointer :: igwfstrgsy => null()
39 integer(I4B),
pointer :: iubud => null()
40 integer(I4B),
pointer :: iuhds => null()
41 integer(I4B),
pointer :: iumvr => null()
42 integer(I4B),
pointer :: iugrb => null()
43 integer(I4B),
pointer :: nflowpack => null()
44 integer(I4B),
dimension(:),
pointer,
contiguous :: igwfmvrterm => null()
50 character(len=16),
dimension(:),
allocatable :: flowpacknamearray
51 character(len=LENVARNAME) :: depvartype =
''
81 subroutine fmi_df(this, dis, idryinactive)
86 integer(I4B),
intent(in) :: idryinactive
88 character(len=*),
parameter :: fmtfmi = &
89 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE, VERSION 2, 8/17/2023', &
90 &' INPUT READ FROM MEMPATH: ', A, //)"
91 character(len=*),
parameter :: fmtfmi0 = &
92 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE,'&
93 &' VERSION 2, 8/17/2023')"
96 if (this%iout > 0)
then
97 if (this%inunit /= 0)
then
98 write (this%iout, fmtfmi) this%input_mempath
100 write (this%iout, fmtfmi0)
101 if (this%flows_from_file)
then
102 write (this%iout,
'(a)')
' FLOWS ARE ASSUMED TO BE ZERO.'
104 write (this%iout,
'(a)')
' FLOWS PROVIDED BY A GWF MODEL IN THIS &
114 if (this%inunit /= 0)
then
115 call this%source_options()
119 if (this%inunit /= 0 .and. this%flows_from_file)
then
120 call this%source_packagedata()
121 call this%initialize_gwfterms_from_bfr()
125 if (.not. this%flows_from_file)
then
126 call this%initialize_gwfterms_from_gwfbndlist()
132 this%idryinactive = idryinactive
141 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
144 this%ibound => ibound
147 call this%allocate_arrays(this%dis%nodes)
160 call this%deallocate_gwfpackages()
163 deallocate (this%gwfpackages)
164 deallocate (this%flowpacknamearray)
168 if (this%flows_from_file)
then
192 call this%NumericalPackageType%da()
206 call this%NumericalPackageType%allocate_scalars()
209 call mem_allocate(this%flows_from_file,
'FLOWS_FROM_FILE', this%memoryPath)
210 call mem_allocate(this%iflowsupdated,
'IFLOWSUPDATED', this%memoryPath)
211 call mem_allocate(this%igwfstrgss,
'IGWFSTRGSS', this%memoryPath)
212 call mem_allocate(this%igwfstrgsy,
'IGWFSTRGSY', this%memoryPath)
217 call mem_allocate(this%nflowpack,
'NFLOWPACK', this%memoryPath)
218 call mem_allocate(this%idryinactive,
"IDRYINACTIVE", this%memoryPath)
222 this%flows_from_file = .true.
223 this%iflowsupdated = 1
231 this%idryinactive = 1
242 integer(I4B),
intent(in) :: nodes
248 call mem_allocate(this%ibdgwfsat0, nodes,
'IBDGWFSAT0', this%memoryPath)
250 this%ibdgwfsat0(n) = 1
255 if (this%flows_from_file)
then
257 'GWFFLOWJA', this%memoryPath)
258 call mem_allocate(this%gwfsat, nodes,
'GWFSAT', this%memoryPath)
259 call mem_allocate(this%gwfhead, nodes,
'GWFHEAD', this%memoryPath)
260 call mem_allocate(this%gwfspdis, 3, nodes,
'GWFSPDIS', this%memoryPath)
262 this%gwfsat(n) = done
263 this%gwfhead(n) =
dzero
264 this%gwfspdis(:, n) =
dzero
266 do n = 1,
size(this%gwfflowja)
267 this%gwfflowja(n) =
dzero
271 if (this%igwfstrgss == 0)
then
272 call mem_allocate(this%gwfstrgss, 1,
'GWFSTRGSS', this%memoryPath)
274 call mem_allocate(this%gwfstrgss, nodes,
'GWFSTRGSS', this%memoryPath)
276 if (this%igwfstrgsy == 0)
then
277 call mem_allocate(this%gwfstrgsy, 1,
'GWFSTRGSY', this%memoryPath)
279 call mem_allocate(this%gwfstrgsy, nodes,
'GWFSTRGSY', this%memoryPath)
281 do n = 1,
size(this%gwfstrgss)
282 this%gwfstrgss(n) =
dzero
284 do n = 1,
size(this%gwfstrgsy)
285 this%gwfstrgsy(n) =
dzero
290 if (this%inunit == 0)
call this%allocate_gwfpackages(this%nflowpack)
302 logical(LGP) :: found_ipakcb
303 character(len=*),
parameter :: fmtisvflow = &
304 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
305 &WHENEVER ICBCFL IS NOT ZERO AND FLOW IMBALANCE CORRECTION ACTIVE.')"
308 call mem_set_value(this%ipakcb,
'SAVE_FLOWS', this%input_mempath, &
311 write (this%iout,
'(1x,a)')
'PROCESSING FMI OPTIONS'
313 if (found_ipakcb)
then
315 write (this%iout, fmtisvflow)
318 write (this%iout,
'(1x,a)')
'END OF FMI OPTIONS'
340 character(len=LINELENGTH) :: flowtype, fileop, fname
341 integer(I4B) :: inunit, n
342 logical(LGP) :: exist
344 call mem_setptr(flowtypes,
'FLOWTYPE', this%input_mempath)
345 call mem_setptr(fileops,
'FILEIN', this%input_mempath)
346 call mem_setptr(fnames,
'FNAME', this%input_mempath)
348 write (this%iout,
'(1x,a)')
'PROCESSING FMI PACKAGEDATA'
350 do n = 1,
size(flowtypes)
351 flowtype = flowtypes(n)
355 inquire (file=trim(fname), exist=exist)
356 if (.not. exist)
then
357 call store_error(
'Could not find file '//trim(fname))
361 if (fileop /=
'FILEIN')
then
362 call store_error(
'Unexpected packagedata input keyword read: "' &
363 //trim(fileop)//
'".')
367 select case (flowtype)
370 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
373 call this%initialize_bfr()
376 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
379 call this%initialize_hfr()
382 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
387 call this%mvrbudobj%fill_from_bfr(this%dis, this%iout)
390 call openfile(inunit, this%iout, fname,
'DATA(BINARY)', &
393 call this%read_grid()
395 write (
errmsg,
'(a,3(1x,a))') &
396 'UNKNOWN', trim(adjustl(this%text)),
'PACKAGEDATA:', trim(flowtype)
401 write (this%iout,
'(1x,a)')
'END OF FMI PACKAGEDATA'
421 integer(I4B) :: user_nodes
422 integer(I4B),
allocatable :: idomain1d(:), idomain2d(:, :), idomain3d(:, :, :)
424 character(len=*),
parameter :: fmtdiserr = &
425 "('Error in ',a,': Models do not have the same discretization. &
426 &GWF model has ', i0, ' user nodes, this model has ', i0, '. &
427 &Ensure discretization packages, including IDOMAIN, are identical.')"
428 character(len=*),
parameter :: fmtidomerr = &
429 "('Error in ',a,': models do not have the same discretization. &
430 &Models have different IDOMAIN arrays. &
431 &Ensure discretization packages, including IDOMAIN, are identical.')"
433 call this%gfr%initialize(this%iugrb)
436 select case (this%gfr%grid_type)
438 select type (dis => this%dis)
440 user_nodes = this%gfr%read_int(
"NCELLS")
441 if (user_nodes /= this%dis%nodesuser)
then
442 write (
errmsg, fmtdiserr) &
443 trim(this%text), user_nodes, this%dis%nodesuser
446 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
447 idomain3d = reshape(idomain1d, [ &
448 this%gfr%read_int(
"NCOL"), &
449 this%gfr%read_int(
"NROW"), &
450 this%gfr%read_int(
"NLAY") &
452 if (.not. all(dis%idomain == idomain3d))
then
453 write (
errmsg, fmtidomerr) trim(this%text)
458 select type (dis => this%dis)
460 user_nodes = this%gfr%read_int(
"NCELLS")
461 if (user_nodes /= this%dis%nodesuser)
then
462 write (
errmsg, fmtdiserr) &
463 trim(this%text), user_nodes, this%dis%nodesuser
466 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
467 idomain2d = reshape(idomain1d, [ &
468 this%gfr%read_int(
"NCPL"), &
469 this%gfr%read_int(
"NLAY") &
471 if (.not. all(dis%idomain == idomain2d))
then
472 write (
errmsg, fmtidomerr) trim(this%text)
477 select type (dis => this%dis)
479 user_nodes = this%gfr%read_int(
"NODES")
480 if (user_nodes /= this%dis%nodesuser)
then
481 write (
errmsg, fmtdiserr) &
482 trim(this%text), user_nodes, this%dis%nodesuser
485 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
486 if (.not. all(dis%idomain == idomain1d))
then
487 write (
errmsg, fmtidomerr) trim(this%text)
492 select type (dis => this%dis)
494 user_nodes = this%gfr%read_int(
"NCELLS")
495 if (user_nodes /= this%dis%nodesuser)
then
496 write (
errmsg, fmtdiserr) &
497 trim(this%text), user_nodes, this%dis%nodesuser
500 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
501 idomain2d = reshape(idomain1d, [ &
502 this%gfr%read_int(
"NCOL"), &
503 this%gfr%read_int(
"NROW") &
505 if (.not. all(dis%idomain == idomain2d))
then
506 write (
errmsg, fmtidomerr) trim(this%text)
511 select type (dis => this%dis)
513 user_nodes = this%gfr%read_int(
"NODES")
514 if (user_nodes /= this%dis%nodesuser)
then
515 write (
errmsg, fmtdiserr) &
516 trim(this%text), user_nodes, this%dis%nodesuser
519 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
520 if (.not. all(dis%idomain == idomain1d))
then
521 write (
errmsg, fmtidomerr) trim(this%text)
526 select type (dis => this%dis)
528 user_nodes = this%gfr%read_int(
"NCELLS")
529 if (user_nodes /= this%dis%nodesuser)
then
530 write (
errmsg, fmtdiserr) &
531 trim(this%text), user_nodes, this%dis%nodesuser
534 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
535 if (.not. all(dis%idomain == idomain1d))
then
536 write (
errmsg, fmtidomerr) trim(this%text)
542 if (
allocated(idomain3d))
deallocate (idomain3d)
543 if (
allocated(idomain2d))
deallocate (idomain2d)
544 if (
allocated(idomain1d))
deallocate (idomain1d)
546 call this%gfr%finalize()
552 integer(I4B) :: ncrbud
553 call this%bfr%initialize(this%iubud, this%iout, ncrbud)
572 integer(I4B) :: nu, nr
573 integer(I4B) :: ip, i
576 character(len=*),
parameter :: fmtkstpkper = &
577 "(1x,/1x,'FMI READING BUDGET TERMS &
578 &FOR KSTP ', i0, ' KPER ', i0)"
579 character(len=*),
parameter :: fmtbudkstpkper = &
580 "(1x,/1x, 'FMI SETTING BUDGET TERMS &
581 &FOR KSTP ', i0, ' AND KPER ', &
582 &i0, ' TO BUDGET FILE TERMS FROM &
583 &KSTP ', i0, ' AND KPER ', i0)"
591 if (this%bfr%header%kstp == 1)
then
592 if (this%bfr%endoffile)
then
594 else if (this%bfr%headernext%kper ==
kper + 1)
then
597 else if (this%bfr%endoffile)
then
598 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF BUDGET &
599 &FILE BEFORE READING SUFFICIENT BUDGET INFORMATION FOR THIS &
610 write (this%iout, fmtkstpkper)
kstp,
kper
615 do n = 1, this%bfr%nbudterms
616 call this%bfr%read_record(success, this%iout)
617 if (.not. success)
then
618 write (
errmsg,
'(4x,a)')
'GWF BUDGET READ NOT SUCCESSFUL'
624 if (
kper /= this%bfr%header%kper)
then
625 write (
errmsg,
'(4x,a)')
'PERIOD NUMBER IN BUDGET FILE &
626 &DOES NOT MATCH PERIOD NUMBER IN TRANSPORT MODEL. IF THERE &
627 &IS MORE THAN ONE TIME STEP IN THE BUDGET FILE FOR A GIVEN &
628 &STRESS PERIOD, BUDGET FILE TIME STEPS MUST MATCH GWT MODEL &
629 &TIME STEPS ONE-FOR-ONE IN THAT STRESS PERIOD.'
635 if (this%bfr%header%kstp > 1 .and. (
kstp /= this%bfr%header%kstp))
then
636 write (
errmsg,
'(4x,a)')
'TIME STEP NUMBER IN BUDGET FILE &
637 &DOES NOT MATCH TIME STEP NUMBER IN TRANSPORT MODEL. IF THERE &
638 &IS MORE THAN ONE TIME STEP IN THE BUDGET FILE FOR A GIVEN STRESS &
639 &PERIOD, BUDGET FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
640 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
647 select type (h => this%bfr%header)
649 select case (trim(adjustl(h%budtxt)))
650 case (
'FLOW-JA-FACE')
654 do ipos = 1,
size(this%bfr%flowja)
655 this%gwfflowja(ipos) = this%bfr%flowja(ipos)
659 nu = this%bfr%nodesrc(i)
660 nr = this%dis%get_nodenumber(nu, 0)
662 this%gwfspdis(1, nr) = this%bfr%auxvar(1, i)
663 this%gwfspdis(2, nr) = this%bfr%auxvar(2, i)
664 this%gwfspdis(3, nr) = this%bfr%auxvar(3, i)
668 nu = this%bfr%nodesrc(i)
669 nr = this%dis%get_nodenumber(nu, 0)
671 this%gwfsat(nr) = this%bfr%auxvar(1, i)
674 do nu = 1, this%dis%nodesuser
675 nr = this%dis%get_nodenumber(nu, 0)
677 this%gwfstrgss(nr) = this%bfr%flow(nu)
680 do nu = 1, this%dis%nodesuser
681 nr = this%dis%get_nodenumber(nu, 0)
683 this%gwfstrgsy(nr) = this%bfr%flow(nu)
686 call this%gwfpackages(ip)%copy_values( &
691 do i = 1, this%gwfpackages(ip)%nbound
692 nu = this%gwfpackages(ip)%nodelist(i)
693 nr = this%dis%get_nodenumber(nu, 0)
694 this%gwfpackages(ip)%nodelist(i) = nr
703 write (this%iout, fmtbudkstpkper)
kstp,
kper, &
704 this%bfr%header%kstp, this%bfr%header%kper
707 this%iflowsupdated = 0
714 call this%bfr%finalize()
720 call this%hfr%initialize(this%iuhds, this%iout)
730 integer(I4B) :: nu, nr, i, ilay
735 character(len=*),
parameter :: fmtkstpkper = &
736 "(1x,/1x,'FMI READING HEAD FOR &
737 &KSTP ', i0, ' KPER ', i0)"
738 character(len=*),
parameter :: fmthdskstpkper = &
739 "(1x,/1x, 'FMI SETTING HEAD FOR KSTP ', i0, ' AND KPER ', &
740 &i0, ' TO BINARY FILE HEADS FROM KSTP ', i0, ' AND KPER ', i0)"
748 if (this%hfr%header%kstp == 1)
then
749 if (this%hfr%endoffile)
then
751 else if (this%hfr%headernext%kper ==
kper + 1)
then
754 else if (this%hfr%endoffile)
then
755 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF HEAD &
756 &FILE BEFORE READING SUFFICIENT HEAD INFORMATION FOR THIS &
767 write (this%iout, fmtkstpkper)
kstp,
kper
770 do ilay = 1, this%hfr%nlay
773 call this%hfr%read_record(success, this%iout)
774 if (.not. success)
then
775 write (
errmsg,
'(4x,a)')
'GWF HEAD READ NOT SUCCESSFUL'
781 if (
kper /= this%hfr%header%kper)
then
782 write (
errmsg,
'(4x,a)')
'PERIOD NUMBER IN HEAD FILE &
783 &DOES NOT MATCH PERIOD NUMBER IN TRANSPORT MODEL. IF THERE &
784 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
785 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
786 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
792 if (this%hfr%header%kstp > 1 .and. (
kstp /= this%hfr%header%kstp))
then
793 write (
errmsg,
'(4x,a)')
'TIME STEP NUMBER IN HEAD FILE &
794 &DOES NOT MATCH TIME STEP NUMBER IN TRANSPORT MODEL. IF THERE &
795 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
796 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
797 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
804 ncpl =
size(this%hfr%head)
806 nu = (ilay - 1) * ncpl + i
807 nr = this%dis%get_nodenumber(nu, 0)
808 val = this%hfr%head(i)
809 if (nr > 0) this%gwfhead(nr) = val
813 write (this%iout, fmthdskstpkper)
kstp,
kper, &
814 this%hfr%header%kstp, this%hfr%header%kper
835 integer(I4B) :: nflowpack
836 integer(I4B) :: i, ip
838 logical :: found_flowja
839 logical :: found_dataspdis
840 logical :: found_datasat
841 logical :: found_stoss
842 logical :: found_stosy
843 integer(I4B),
dimension(:),
allocatable :: imap
846 allocate (imap(this%bfr%nbudterms))
849 found_flowja = .false.
850 found_dataspdis = .false.
851 found_datasat = .false.
852 found_stoss = .false.
853 found_stosy = .false.
854 do i = 1, this%bfr%nbudterms
855 select case (trim(adjustl(this%bfr%budtxtarray(i))))
856 case (
'FLOW-JA-FACE')
857 found_flowja = .true.
859 found_dataspdis = .true.
861 found_datasat = .true.
869 nflowpack = nflowpack + 1
875 call this%allocate_gwfpackages(nflowpack)
880 do i = 1, this%bfr%nbudterms
881 if (imap(i) == 0) cycle
882 call this%gwfpackages(ip)%set_name(this%bfr%dstpackagenamearray(i), &
883 this%bfr%budtxtarray(i))
884 naux = this%bfr%nauxarray(i)
885 call this%gwfpackages(ip)%set_auxname(naux, this%bfr%auxtxtarray(1:naux, i))
893 if (imap(i) == 1)
then
894 this%flowpacknamearray(ip) = this%bfr%dstpackagenamearray(i)
900 if (.not. found_dataspdis)
then
901 write (
errmsg,
'(4x,a)')
'SPECIFIC DISCHARGE NOT FOUND IN &
902 &BUDGET FILE. SAVE_SPECIFIC_DISCHARGE AND &
903 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
906 if (.not. found_datasat)
then
907 write (
errmsg,
'(4x,a)')
'SATURATION NOT FOUND IN &
908 &BUDGET FILE. SAVE_SATURATION AND &
909 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
912 if (.not. found_flowja)
then
913 write (
errmsg,
'(4x,a)')
'FLOWJA NOT FOUND IN &
914 &BUDGET FILE. SAVE_FLOWS MUST &
915 &BE ACTIVATED IN THE NPF PACKAGE.'
930 integer(I4B) :: ngwfpack
931 integer(I4B) :: ngwfterms
933 integer(I4B) :: imover
934 integer(I4B) :: ntomvr
935 integer(I4B) :: iterm
936 character(len=LENPACKAGENAME) :: budtxt
937 class(
bndtype),
pointer :: packobj => null()
940 ngwfpack = this%gwfbndlist%Count()
948 imover = packobj%imover
949 if (packobj%isadvpak /= 0) imover = 0
950 if (imover /= 0)
then
957 ngwfterms = ngwfpack + ntomvr
958 call this%allocate_gwfpackages(ngwfterms)
966 budtxt = adjustl(packobj%text)
967 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
968 this%flowpacknamearray(iterm) = packobj%packName
973 imover = packobj%imover
974 if (packobj%isadvpak /= 0) imover = 0
975 if (imover /= 0)
then
976 budtxt = trim(adjustl(packobj%text))//
'-TO-MVR'
977 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
978 this%flowpacknamearray(iterm) = packobj%packName
979 this%igwfmvrterm(iterm) = 1
997 integer(I4B),
intent(in) :: ngwfterms
1000 character(len=LENMEMPATH) :: memPath
1003 allocate (this%gwfpackages(ngwfterms))
1004 allocate (this%flowpacknamearray(ngwfterms))
1007 call mem_allocate(this%igwfmvrterm, ngwfterms,
'IGWFMVRTERM', this%memoryPath)
1010 this%nflowpack = ngwfterms
1011 do n = 1, this%nflowpack
1012 this%igwfmvrterm(n) = 0
1013 this%flowpacknamearray(n) =
''
1017 write (mempath,
'(a, i0)') trim(this%memoryPath)//
'-FT', n
1018 call this%gwfpackages(n)%initialize(mempath)
1027 do n = 1, this%nflowpack
1028 call this%gwfpackages(n)%da()
1036 character(len=*),
intent(in) :: name
1037 integer(I4B),
intent(inout) :: idx
1043 do ip = 1,
size(this%flowpacknamearray)
1044 if (this%flowpacknamearray(ip) == name)
then
1050 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)
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.
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
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.