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 :: igwfspdis => null()
38 integer(I4B),
pointer :: igwfstrgss => null()
39 integer(I4B),
pointer :: igwfstrgsy => null()
40 integer(I4B),
pointer :: iubud => null()
41 integer(I4B),
pointer :: iuhds => null()
42 integer(I4B),
pointer :: iumvr => null()
43 integer(I4B),
pointer :: iugrb => null()
44 integer(I4B),
pointer :: nflowpack => null()
45 integer(I4B),
dimension(:),
pointer,
contiguous :: igwfmvrterm => null()
51 character(len=16),
dimension(:),
allocatable :: flowpacknamearray
52 character(len=LENVARNAME) :: depvartype =
''
82 subroutine fmi_df(this, dis, idryinactive)
87 integer(I4B),
intent(in) :: idryinactive
89 character(len=*),
parameter :: fmtfmi = &
90 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE, VERSION 2, 8/17/2023', &
91 &' INPUT READ FROM MEMPATH: ', A, //)"
92 character(len=*),
parameter :: fmtfmi0 = &
93 "(1x,/1x,'FMI -- FLOW MODEL INTERFACE,'&
94 &' VERSION 2, 8/17/2023')"
97 if (this%iout > 0)
then
98 if (this%inunit /= 0)
then
99 write (this%iout, fmtfmi) this%input_mempath
101 write (this%iout, fmtfmi0)
102 if (this%flows_from_file)
then
103 write (this%iout,
'(a)')
' FLOWS ARE ASSUMED TO BE ZERO.'
105 write (this%iout,
'(a)')
' FLOWS PROVIDED BY A GWF MODEL IN THIS &
115 if (this%inunit /= 0)
then
116 call this%source_options()
120 if (this%inunit /= 0 .and. this%flows_from_file)
then
121 call this%source_packagedata()
122 call this%initialize_gwfterms_from_bfr()
126 if (.not. this%flows_from_file)
then
127 call this%initialize_gwfterms_from_gwfbndlist()
133 this%idryinactive = idryinactive
142 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
145 this%ibound => ibound
148 call this%allocate_arrays(this%dis%nodes)
161 call this%deallocate_gwfpackages()
164 deallocate (this%gwfpackages)
165 deallocate (this%flowpacknamearray)
169 if (this%flows_from_file)
then
194 call this%NumericalPackageType%da()
208 call this%NumericalPackageType%allocate_scalars()
211 call mem_allocate(this%flows_from_file,
'FLOWS_FROM_FILE', this%memoryPath)
212 call mem_allocate(this%iflowsupdated,
'IFLOWSUPDATED', this%memoryPath)
213 call mem_allocate(this%igwfspdis,
'IGWFSPDIS', this%memoryPath)
214 call mem_allocate(this%igwfstrgss,
'IGWFSTRGSS', this%memoryPath)
215 call mem_allocate(this%igwfstrgsy,
'IGWFSTRGSY', this%memoryPath)
220 call mem_allocate(this%nflowpack,
'NFLOWPACK', this%memoryPath)
221 call mem_allocate(this%idryinactive,
"IDRYINACTIVE", this%memoryPath)
225 this%flows_from_file = .true.
226 this%iflowsupdated = 1
235 this%idryinactive = 1
246 integer(I4B),
intent(in) :: nodes
252 call mem_allocate(this%ibdgwfsat0, nodes,
'IBDGWFSAT0', this%memoryPath)
254 this%ibdgwfsat0(n) = 1
259 if (this%flows_from_file)
then
261 'GWFFLOWJA', this%memoryPath)
262 call mem_allocate(this%gwfsat, nodes,
'GWFSAT', this%memoryPath)
263 call mem_allocate(this%gwfhead, nodes,
'GWFHEAD', this%memoryPath)
264 call mem_allocate(this%gwfspdis, 3, nodes,
'GWFSPDIS', this%memoryPath)
266 this%gwfsat(n) = done
267 this%gwfhead(n) =
dzero
268 this%gwfspdis(:, n) =
dzero
270 do n = 1,
size(this%gwfflowja)
271 this%gwfflowja(n) =
dzero
275 if (this%igwfstrgss == 0)
then
276 call mem_allocate(this%gwfstrgss, 1,
'GWFSTRGSS', this%memoryPath)
278 call mem_allocate(this%gwfstrgss, nodes,
'GWFSTRGSS', this%memoryPath)
280 if (this%igwfstrgsy == 0)
then
281 call mem_allocate(this%gwfstrgsy, 1,
'GWFSTRGSY', this%memoryPath)
283 call mem_allocate(this%gwfstrgsy, nodes,
'GWFSTRGSY', this%memoryPath)
285 do n = 1,
size(this%gwfstrgss)
286 this%gwfstrgss(n) =
dzero
288 do n = 1,
size(this%gwfstrgsy)
289 this%gwfstrgsy(n) =
dzero
294 if (this%inunit == 0)
call this%allocate_gwfpackages(this%nflowpack)
306 logical(LGP) :: found_ipakcb
307 character(len=*),
parameter :: fmtisvflow = &
308 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
309 &WHENEVER ICBCFL IS NOT ZERO AND FLOW IMBALANCE CORRECTION ACTIVE.')"
312 call mem_set_value(this%ipakcb,
'SAVE_FLOWS', this%input_mempath, &
315 write (this%iout,
'(1x,a)')
'PROCESSING FMI OPTIONS'
317 if (found_ipakcb)
then
319 write (this%iout, fmtisvflow)
322 write (this%iout,
'(1x,a)')
'END OF FMI OPTIONS'
344 character(len=LINELENGTH) :: flowtype, fileop, fname
345 integer(I4B) :: inunit, n
346 logical(LGP) :: exist
348 call mem_setptr(flowtypes,
'FLOWTYPE', this%input_mempath)
349 call mem_setptr(fileops,
'FILEIN', this%input_mempath)
350 call mem_setptr(fnames,
'FNAME', this%input_mempath)
352 write (this%iout,
'(1x,a)')
'PROCESSING FMI PACKAGEDATA'
354 do n = 1,
size(flowtypes)
355 flowtype = flowtypes(n)
359 inquire (file=trim(fname), exist=exist)
360 if (.not. exist)
then
361 call store_error(
'Could not find file '//trim(fname))
365 if (fileop /=
'FILEIN')
then
366 call store_error(
'Unexpected packagedata input keyword read: "' &
367 //trim(fileop)//
'".')
371 select case (flowtype)
374 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
377 call this%initialize_bfr()
380 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
383 call this%initialize_hfr()
386 call openfile(inunit, this%iout, fname,
'DATA(BINARY)',
form, &
391 call this%mvrbudobj%fill_from_bfr(this%dis, this%iout)
394 call openfile(inunit, this%iout, fname,
'DATA(BINARY)', &
397 call this%read_grid()
399 write (
errmsg,
'(a,3(1x,a))') &
400 'UNKNOWN', trim(adjustl(this%text)),
'PACKAGEDATA:', trim(flowtype)
405 write (this%iout,
'(1x,a)')
'END OF FMI PACKAGEDATA'
425 integer(I4B) :: user_nodes
426 integer(I4B),
allocatable :: idomain1d(:), idomain2d(:, :), idomain3d(:, :, :)
428 character(len=*),
parameter :: fmtdiserr = &
429 "('Error in ',a,': Models do not have the same discretization. &
430 &GWF model has ', i0, ' user nodes, this model has ', i0, '. &
431 &Ensure discretization packages, including IDOMAIN, are identical.')"
432 character(len=*),
parameter :: fmtidomerr = &
433 "('Error in ',a,': models do not have the same discretization. &
434 &Models have different IDOMAIN arrays. &
435 &Ensure discretization packages, including IDOMAIN, are identical.')"
437 call this%gfr%initialize(this%iugrb)
440 select case (this%gfr%grid_type)
442 select type (dis => this%dis)
444 user_nodes = this%gfr%read_int(
"NCELLS")
445 if (user_nodes /= this%dis%nodesuser)
then
446 write (
errmsg, fmtdiserr) &
447 trim(this%text), user_nodes, this%dis%nodesuser
450 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
451 idomain3d = reshape(idomain1d, [ &
452 this%gfr%read_int(
"NCOL"), &
453 this%gfr%read_int(
"NROW"), &
454 this%gfr%read_int(
"NLAY") &
456 if (.not. all(dis%idomain == idomain3d))
then
457 write (
errmsg, fmtidomerr) trim(this%text)
462 select type (dis => this%dis)
464 user_nodes = this%gfr%read_int(
"NCELLS")
465 if (user_nodes /= this%dis%nodesuser)
then
466 write (
errmsg, fmtdiserr) &
467 trim(this%text), user_nodes, this%dis%nodesuser
470 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
471 idomain2d = reshape(idomain1d, [ &
472 this%gfr%read_int(
"NCPL"), &
473 this%gfr%read_int(
"NLAY") &
475 if (.not. all(dis%idomain == idomain2d))
then
476 write (
errmsg, fmtidomerr) trim(this%text)
481 select type (dis => this%dis)
483 user_nodes = this%gfr%read_int(
"NODES")
484 if (user_nodes /= this%dis%nodesuser)
then
485 write (
errmsg, fmtdiserr) &
486 trim(this%text), user_nodes, this%dis%nodesuser
489 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
490 if (.not. all(dis%idomain == idomain1d))
then
491 write (
errmsg, fmtidomerr) trim(this%text)
496 select type (dis => this%dis)
498 user_nodes = this%gfr%read_int(
"NCELLS")
499 if (user_nodes /= this%dis%nodesuser)
then
500 write (
errmsg, fmtdiserr) &
501 trim(this%text), user_nodes, this%dis%nodesuser
504 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
505 idomain2d = reshape(idomain1d, [ &
506 this%gfr%read_int(
"NCOL"), &
507 this%gfr%read_int(
"NROW") &
509 if (.not. all(dis%idomain == idomain2d))
then
510 write (
errmsg, fmtidomerr) trim(this%text)
515 select type (dis => this%dis)
517 user_nodes = this%gfr%read_int(
"NODES")
518 if (user_nodes /= this%dis%nodesuser)
then
519 write (
errmsg, fmtdiserr) &
520 trim(this%text), user_nodes, this%dis%nodesuser
523 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
524 if (.not. all(dis%idomain == idomain1d))
then
525 write (
errmsg, fmtidomerr) trim(this%text)
530 select type (dis => this%dis)
532 user_nodes = this%gfr%read_int(
"NCELLS")
533 if (user_nodes /= this%dis%nodesuser)
then
534 write (
errmsg, fmtdiserr) &
535 trim(this%text), user_nodes, this%dis%nodesuser
538 idomain1d = this%gfr%read_int_1d(
"IDOMAIN")
539 if (.not. all(dis%idomain == idomain1d))
then
540 write (
errmsg, fmtidomerr) trim(this%text)
546 if (
allocated(idomain3d))
deallocate (idomain3d)
547 if (
allocated(idomain2d))
deallocate (idomain2d)
548 if (
allocated(idomain1d))
deallocate (idomain1d)
550 call this%gfr%finalize()
556 integer(I4B) :: ncrbud
557 call this%bfr%initialize(this%iubud, this%iout, ncrbud)
576 integer(I4B) :: nu, nr
577 integer(I4B) :: ip, i
580 character(len=*),
parameter :: fmtkstpkper = &
581 "(1x,/1x,'FMI READING BUDGET TERMS &
582 &FOR KSTP ', i0, ' KPER ', i0)"
583 character(len=*),
parameter :: fmtbudkstpkper = &
584 "(1x,/1x, 'FMI SETTING BUDGET TERMS &
585 &FOR KSTP ', i0, ' AND KPER ', &
586 &i0, ' TO BUDGET FILE TERMS FROM &
587 &KSTP ', i0, ' AND KPER ', i0)"
595 if (this%bfr%header%kstp == 1)
then
596 if (this%bfr%endoffile)
then
598 else if (this%bfr%headernext%kper ==
kper + 1)
then
601 else if (this%bfr%endoffile)
then
602 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF BUDGET &
603 &FILE BEFORE READING SUFFICIENT BUDGET INFORMATION FOR THIS &
614 write (this%iout, fmtkstpkper)
kstp,
kper
619 do n = 1, this%bfr%nbudterms
620 call this%bfr%read_record(success, this%iout)
621 if (.not. success)
then
622 write (
errmsg,
'(4x,a)')
'GWF BUDGET READ NOT SUCCESSFUL'
628 if (
kper /= this%bfr%header%kper)
then
629 write (
errmsg,
'(4x,a)')
'PERIOD NUMBER IN BUDGET FILE &
630 &DOES NOT MATCH PERIOD NUMBER IN TRANSPORT MODEL. IF THERE &
631 &IS MORE THAN ONE TIME STEP IN THE BUDGET FILE FOR A GIVEN &
632 &STRESS PERIOD, BUDGET FILE TIME STEPS MUST MATCH GWT MODEL &
633 &TIME STEPS ONE-FOR-ONE IN THAT STRESS PERIOD.'
639 if (this%bfr%header%kstp > 1 .and. (
kstp /= this%bfr%header%kstp))
then
640 write (
errmsg,
'(4x,a)')
'TIME STEP NUMBER IN BUDGET FILE &
641 &DOES NOT MATCH TIME STEP NUMBER IN TRANSPORT MODEL. IF THERE &
642 &IS MORE THAN ONE TIME STEP IN THE BUDGET FILE FOR A GIVEN STRESS &
643 &PERIOD, BUDGET FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
644 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
651 select type (h => this%bfr%header)
653 select case (trim(adjustl(h%budtxt)))
654 case (
'FLOW-JA-FACE')
658 do ipos = 1,
size(this%bfr%flowja)
659 this%gwfflowja(ipos) = this%bfr%flowja(ipos)
663 nu = this%bfr%nodesrc(i)
664 nr = this%dis%get_nodenumber(nu, 0)
666 this%gwfspdis(1, nr) = this%bfr%auxvar(1, i)
667 this%gwfspdis(2, nr) = this%bfr%auxvar(2, i)
668 this%gwfspdis(3, nr) = this%bfr%auxvar(3, i)
672 nu = this%bfr%nodesrc(i)
673 nr = this%dis%get_nodenumber(nu, 0)
675 this%gwfsat(nr) = this%bfr%auxvar(1, i)
678 do nu = 1, this%dis%nodesuser
679 nr = this%dis%get_nodenumber(nu, 0)
681 this%gwfstrgss(nr) = this%bfr%flow(nu)
684 do nu = 1, this%dis%nodesuser
685 nr = this%dis%get_nodenumber(nu, 0)
687 this%gwfstrgsy(nr) = this%bfr%flow(nu)
690 call this%gwfpackages(ip)%copy_values( &
695 do i = 1, this%gwfpackages(ip)%nbound
696 nu = this%gwfpackages(ip)%nodelist(i)
697 nr = this%dis%get_nodenumber(nu, 0)
698 this%gwfpackages(ip)%nodelist(i) = nr
707 write (this%iout, fmtbudkstpkper)
kstp,
kper, &
708 this%bfr%header%kstp, this%bfr%header%kper
711 this%iflowsupdated = 0
718 call this%bfr%finalize()
724 call this%hfr%initialize(this%iuhds, this%iout)
734 integer(I4B) :: nu, nr, i, ilay
739 character(len=*),
parameter :: fmtkstpkper = &
740 "(1x,/1x,'FMI READING HEAD FOR &
741 &KSTP ', i0, ' KPER ', i0)"
742 character(len=*),
parameter :: fmthdskstpkper = &
743 "(1x,/1x, 'FMI SETTING HEAD FOR KSTP ', i0, ' AND KPER ', &
744 &i0, ' TO BINARY FILE HEADS FROM KSTP ', i0, ' AND KPER ', i0)"
752 if (this%hfr%header%kstp == 1)
then
753 if (this%hfr%endoffile)
then
755 else if (this%hfr%headernext%kper ==
kper + 1)
then
758 else if (this%hfr%endoffile)
then
759 write (
errmsg,
'(4x,a)')
'REACHED END OF GWF HEAD &
760 &FILE BEFORE READING SUFFICIENT HEAD INFORMATION FOR THIS &
771 write (this%iout, fmtkstpkper)
kstp,
kper
774 do ilay = 1, this%hfr%nlay
777 call this%hfr%read_record(success, this%iout)
778 if (.not. success)
then
779 write (
errmsg,
'(4x,a)')
'GWF HEAD READ NOT SUCCESSFUL'
785 if (
kper /= this%hfr%header%kper)
then
786 write (
errmsg,
'(4x,a)')
'PERIOD NUMBER IN HEAD FILE &
787 &DOES NOT MATCH PERIOD NUMBER IN TRANSPORT MODEL. IF THERE &
788 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
789 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
790 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
796 if (this%hfr%header%kstp > 1 .and. (
kstp /= this%hfr%header%kstp))
then
797 write (
errmsg,
'(4x,a)')
'TIME STEP NUMBER IN HEAD FILE &
798 &DOES NOT MATCH TIME STEP NUMBER IN TRANSPORT MODEL. IF THERE &
799 &IS MORE THAN ONE TIME STEP IN THE HEAD FILE FOR A GIVEN STRESS &
800 &PERIOD, HEAD FILE TIME STEPS MUST MATCH GWT MODEL TIME STEPS &
801 &ONE-FOR-ONE IN THAT STRESS PERIOD.'
808 ncpl =
size(this%hfr%head)
810 nu = (ilay - 1) * ncpl + i
811 nr = this%dis%get_nodenumber(nu, 0)
812 val = this%hfr%head(i)
813 if (nr > 0) this%gwfhead(nr) = val
817 write (this%iout, fmthdskstpkper)
kstp,
kper, &
818 this%hfr%header%kstp, this%hfr%header%kper
839 integer(I4B) :: nflowpack
840 integer(I4B) :: i, ip
842 logical :: found_flowja
843 logical :: found_dataspdis
844 logical :: found_datasat
845 logical :: found_stoss
846 logical :: found_stosy
847 integer(I4B),
dimension(:),
allocatable :: imap
850 allocate (imap(this%bfr%nbudterms))
853 found_flowja = .false.
854 found_dataspdis = .false.
855 found_datasat = .false.
856 found_stoss = .false.
857 found_stosy = .false.
858 do i = 1, this%bfr%nbudterms
859 select case (trim(adjustl(this%bfr%budtxtarray(i))))
860 case (
'FLOW-JA-FACE')
861 found_flowja = .true.
863 found_dataspdis = .true.
866 found_datasat = .true.
874 nflowpack = nflowpack + 1
880 call this%allocate_gwfpackages(nflowpack)
885 do i = 1, this%bfr%nbudterms
886 if (imap(i) == 0) cycle
887 call this%gwfpackages(ip)%set_name(this%bfr%dstpackagenamearray(i), &
888 this%bfr%budtxtarray(i))
889 naux = this%bfr%nauxarray(i)
890 call this%gwfpackages(ip)%set_auxname(naux, this%bfr%auxtxtarray(1:naux, i))
898 if (imap(i) == 1)
then
899 this%flowpacknamearray(ip) = this%bfr%dstpackagenamearray(i)
905 if (.not. found_dataspdis)
then
906 write (
errmsg,
'(4x,a)')
'SPECIFIC DISCHARGE NOT FOUND IN &
907 &BUDGET FILE. SAVE_SPECIFIC_DISCHARGE AND &
908 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
911 if (.not. found_datasat)
then
912 write (
errmsg,
'(4x,a)')
'SATURATION NOT FOUND IN &
913 &BUDGET FILE. SAVE_SATURATION AND &
914 &SAVE_FLOWS MUST BE ACTIVATED IN THE NPF PACKAGE.'
917 if (.not. found_flowja)
then
918 write (
errmsg,
'(4x,a)')
'FLOWJA NOT FOUND IN &
919 &BUDGET FILE. SAVE_FLOWS MUST &
920 &BE ACTIVATED IN THE NPF PACKAGE.'
935 integer(I4B) :: ngwfpack
936 integer(I4B) :: ngwfterms
938 integer(I4B) :: imover
939 integer(I4B) :: ntomvr
940 integer(I4B) :: iterm
941 character(len=LENPACKAGENAME) :: budtxt
942 class(
bndtype),
pointer :: packobj => null()
945 ngwfpack = this%gwfbndlist%Count()
953 imover = packobj%imover
954 if (packobj%isadvpak /= 0) imover = 0
955 if (imover /= 0)
then
962 ngwfterms = ngwfpack + ntomvr
963 call this%allocate_gwfpackages(ngwfterms)
971 budtxt = adjustl(packobj%text)
972 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
973 this%flowpacknamearray(iterm) = packobj%packName
978 imover = packobj%imover
979 if (packobj%isadvpak /= 0) imover = 0
980 if (imover /= 0)
then
981 budtxt = trim(adjustl(packobj%text))//
'-TO-MVR'
982 call this%gwfpackages(iterm)%set_name(packobj%packName, budtxt)
983 this%flowpacknamearray(iterm) = packobj%packName
984 this%igwfmvrterm(iterm) = 1
1002 integer(I4B),
intent(in) :: ngwfterms
1005 character(len=LENMEMPATH) :: memPath
1008 allocate (this%gwfpackages(ngwfterms))
1009 allocate (this%flowpacknamearray(ngwfterms))
1012 call mem_allocate(this%igwfmvrterm, ngwfterms,
'IGWFMVRTERM', this%memoryPath)
1015 this%nflowpack = ngwfterms
1016 do n = 1, this%nflowpack
1017 this%igwfmvrterm(n) = 0
1018 this%flowpacknamearray(n) =
''
1022 write (mempath,
'(a, i0)') trim(this%memoryPath)//
'-FT', n
1023 call this%gwfpackages(n)%initialize(mempath)
1032 do n = 1, this%nflowpack
1033 call this%gwfpackages(n)%da()
1041 character(len=*),
intent(in) :: name
1042 integer(I4B),
intent(inout) :: idx
1048 do ip = 1,
size(this%flowpacknamearray)
1049 if (this%flowpacknamearray(ip) == name)
then
1055 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.