54 character(len=*),
parameter ::
ftype =
'MWE'
55 character(len=*),
parameter ::
flowtype =
'MAW'
56 character(len=16) ::
text =
' MWE'
62 integer(I4B),
pointer :: idxbudrate => null()
63 integer(I4B),
pointer :: idxbudfwrt => null()
64 integer(I4B),
pointer :: idxbudrtmv => null()
65 integer(I4B),
pointer :: idxbudfrtm => null()
66 integer(I4B),
pointer :: idxbudmwcd => null()
67 real(dp),
dimension(:),
pointer,
contiguous :: ktf => null()
68 real(dp),
dimension(:),
pointer,
contiguous :: rfeatthk => null()
69 real(dp),
dimension(:),
pointer,
contiguous :: temprate => null()
98 subroutine mwe_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, &
99 fmi, eqnsclfac, gwecommon, dvt, dvu, dvua)
101 class(
bndtype),
pointer :: packobj
102 integer(I4B),
intent(in) :: id
103 integer(I4B),
intent(in) :: ibcnum
104 integer(I4B),
intent(in) :: inunit
105 integer(I4B),
intent(in) :: iout
106 character(len=*),
intent(in) :: namemodel
107 character(len=*),
intent(in) :: pakname
109 real(dp),
intent(in),
pointer :: eqnsclfac
111 character(len=*),
intent(in) :: dvt
112 character(len=*),
intent(in) :: dvu
113 character(len=*),
intent(in) :: dvua
122 call packobj%set_names(ibcnum, namemodel, pakname,
ftype)
126 call mweobj%allocate_scalars()
129 call packobj%pack_initialize()
131 packobj%inunit = inunit
134 packobj%ibcnum = ibcnum
144 mweobj%eqnsclfac => eqnsclfac
149 mweobj%gwecommon => gwecommon
152 mweobj%depvartype = dvt
153 mweobj%depvarunit = dvu
154 mweobj%depvarunitabbrev = dvua
165 character(len=LINELENGTH) :: errmsg
166 class(
bndtype),
pointer :: packobj
167 integer(I4B) :: ip, icount
168 integer(I4B) :: nbudterm
178 if (this%fmi%flows_from_file)
then
179 call this%fmi%set_aptbudobj_pointer(this%flowpackagename, this%flowbudptr)
180 if (
associated(this%flowbudptr)) found = .true.
183 if (
associated(this%fmi%gwfbndlist))
then
186 do ip = 1, this%fmi%gwfbndlist%Count()
188 if (packobj%packName == this%flowpackagename)
then
193 this%flowpackagebnd => packobj
194 select type (packobj)
196 this%flowbudptr => packobj%budobj
205 if (.not. found)
then
206 write (errmsg,
'(a)')
'Could not find flow package with name '&
207 &//trim(adjustl(this%flowpackagename))//
'.'
209 call this%parser%StoreErrorUnit()
214 nbudterm = this%flowbudptr%nbudterm
215 call mem_allocate(this%idxbudssm, nbudterm,
'IDXBUDSSM', this%memoryPath)
218 write (this%iout,
'(/, a, a)') &
219 'PROCESSING '//
ftype//
' INFORMATION FOR ', this%packName
220 write (this%iout,
'(a)')
' IDENTIFYING FLOW TERMS IN '//
flowtype//
' PACKAGE'
221 write (this%iout,
'(a, i0)') &
222 ' NUMBER OF '//
flowtype//
' = ', this%flowbudptr%ncv
224 do ip = 1, this%flowbudptr%nbudterm
225 select case (trim(adjustl(this%flowbudptr%budterm(ip)%flowtype)))
226 case (
'FLOW-JA-FACE')
228 this%idxbudssm(ip) = 0
231 this%idxbudssm(ip) = 0
234 this%idxbudssm(ip) = 0
237 this%idxbudssm(ip) = 0
240 this%idxbudssm(ip) = 0
243 this%idxbudssm(ip) = 0
244 case (
'FW-RATE-TO-MVR')
246 this%idxbudssm(ip) = 0
249 this%idxbudssm(ip) = 0
252 this%idxbudssm(ip) = 0
255 this%idxbudssm(ip) = 0
260 this%idxbudssm(ip) = icount
263 write (this%iout,
'(a, i0, " = ", a,/, a, i0)') &
264 ' TERM ', ip, trim(adjustl(this%flowbudptr%budterm(ip)%flowtype)), &
265 ' MAX NO. OF ENTRIES = ', this%flowbudptr%budterm(ip)%maxlist
267 write (this%iout,
'(a, //)')
'DONE PROCESSING '//
ftype//
' INFORMATION'
270 this%idxbudmwcd = this%idxbudgwf
281 real(DP),
dimension(:),
intent(inout) :: rhs
282 integer(I4B),
dimension(:),
intent(in) :: ia
283 integer(I4B),
dimension(:),
intent(in) :: idxglo
286 integer(I4B) :: j, n, n1, n2
288 integer(I4B) :: iposd, iposoffd
289 integer(I4B) :: ipossymd, ipossymoffd
290 integer(I4B) :: auxpos
300 if (this%idxbudrate /= 0)
then
301 do j = 1, this%flowbudptr%budterm(this%idxbudrate)%nlist
302 call this%mwe_rate_term(j, n1, n2, rrate, rhsval, hcofval)
303 iloc = this%idxlocnode(n1)
304 iposd = this%idxpakdiag(n1)
305 call matrix_sln%add_value_pos(iposd, hcofval)
306 rhs(iloc) = rhs(iloc) + rhsval
311 if (this%idxbudfwrt /= 0)
then
312 do j = 1, this%flowbudptr%budterm(this%idxbudfwrt)%nlist
313 call this%mwe_fwrt_term(j, n1, n2, rrate, rhsval, hcofval)
314 iloc = this%idxlocnode(n1)
315 iposd = this%idxpakdiag(n1)
316 call matrix_sln%add_value_pos(iposd, hcofval)
317 rhs(iloc) = rhs(iloc) + rhsval
322 if (this%idxbudrtmv /= 0)
then
323 do j = 1, this%flowbudptr%budterm(this%idxbudrtmv)%nlist
324 call this%mwe_rtmv_term(j, n1, n2, rrate, rhsval, hcofval)
325 iloc = this%idxlocnode(n1)
326 iposd = this%idxpakdiag(n1)
327 call matrix_sln%add_value_pos(iposd, hcofval)
328 rhs(iloc) = rhs(iloc) + rhsval
333 if (this%idxbudfrtm /= 0)
then
334 do j = 1, this%flowbudptr%budterm(this%idxbudfrtm)%nlist
335 call this%mwe_frtm_term(j, n1, n2, rrate, rhsval, hcofval)
336 iloc = this%idxlocnode(n1)
337 iposd = this%idxpakdiag(n1)
338 call matrix_sln%add_value_pos(iposd, hcofval)
339 rhs(iloc) = rhs(iloc) + rhsval
344 do j = 1, this%flowbudptr%budterm(this%idxbudgwf)%nlist
347 n = this%flowbudptr%budterm(this%idxbudgwf)%id1(j)
348 if (this%iboundpak(n) /= 0)
then
351 auxpos = this%flowbudptr%budterm(this%idxbudgwf)%naux
352 wa = this%flowbudptr%budterm(this%idxbudgwf)%auxvar(auxpos, j)
355 ctherm = ktf * wa / s
358 iposd = this%idxdglo(j)
359 iposoffd = this%idxoffdglo(j)
360 call matrix_sln%add_value_pos(iposd, -ctherm)
361 call matrix_sln%add_value_pos(iposoffd, ctherm)
364 ipossymd = this%idxsymdglo(j)
365 ipossymoffd = this%idxsymoffdglo(j)
366 call matrix_sln%add_value_pos(ipossymd, -ctherm)
367 call matrix_sln%add_value_pos(ipossymoffd, ctherm)
380 integer(I4B) :: n1, n2
384 if (this%idxbudrate /= 0)
then
385 do j = 1, this%flowbudptr%budterm(this%idxbudrate)%nlist
386 call this%mwe_rate_term(j, n1, n2, rrate)
387 this%dbuff(n1) = this%dbuff(n1) + rrate
392 if (this%idxbudfwrt /= 0)
then
393 do j = 1, this%flowbudptr%budterm(this%idxbudfwrt)%nlist
394 call this%mwe_fwrt_term(j, n1, n2, rrate)
395 this%dbuff(n1) = this%dbuff(n1) + rrate
400 if (this%idxbudrtmv /= 0)
then
401 do j = 1, this%flowbudptr%budterm(this%idxbudrtmv)%nlist
402 call this%mwe_rtmv_term(j, n1, n2, rrate)
403 this%dbuff(n1) = this%dbuff(n1) + rrate
408 if (this%idxbudfrtm /= 0)
then
409 do j = 1, this%flowbudptr%budterm(this%idxbudfrtm)%nlist
410 call this%mwe_frtm_term(j, n1, n2, rrate)
411 this%dbuff(n1) = this%dbuff(n1) + rrate
424 integer(I4B) :: nbudterms
428 if (this%idxbudfwrt /= 0) nbudterms = nbudterms + 1
429 if (this%idxbudrtmv /= 0) nbudterms = nbudterms + 1
430 if (this%idxbudfrtm /= 0) nbudterms = nbudterms + 1
431 if (this%idxbudmwcd /= 0) nbudterms = nbudterms + 1
441 integer(I4B),
intent(inout) :: idx
443 integer(I4B) :: n, n1, n2
444 integer(I4B) :: maxlist, naux
446 character(len=LENBUDTXT) :: text
451 maxlist = this%flowbudptr%budterm(this%idxbudrate)%maxlist
453 call this%budobj%budterm(idx)%initialize(text, &
458 maxlist, .false., .false., &
462 if (this%idxbudfwrt /= 0)
then
465 maxlist = this%flowbudptr%budterm(this%idxbudfwrt)%maxlist
467 call this%budobj%budterm(idx)%initialize(text, &
472 maxlist, .false., .false., &
477 if (this%idxbudrtmv /= 0)
then
478 text =
' RATE-TO-MVR'
480 maxlist = this%flowbudptr%budterm(this%idxbudrtmv)%maxlist
482 call this%budobj%budterm(idx)%initialize(text, &
487 maxlist, .false., .false., &
492 if (this%idxbudfrtm /= 0)
then
493 text =
' FW-RATE-TO-MVR'
495 maxlist = this%flowbudptr%budterm(this%idxbudfrtm)%maxlist
497 call this%budobj%budterm(idx)%initialize(text, &
502 maxlist, .false., .false., &
507 text =
' WELLBORE-COND'
509 maxlist = this%flowbudptr%budterm(this%idxbudmwcd)%maxlist
511 call this%budobj%budterm(idx)%initialize(text, &
516 maxlist, .false., .false., &
518 call this%budobj%budterm(idx)%reset(maxlist)
521 n1 = this%flowbudptr%budterm(this%idxbudgwf)%id1(n)
522 n2 = this%flowbudptr%budterm(this%idxbudgwf)%id2(n)
523 call this%budobj%budterm(idx)%update_term(n1, n2, q)
532 integer(I4B),
intent(inout) :: idx
533 real(DP),
dimension(:),
intent(in) :: x
534 real(DP),
dimension(:),
contiguous,
intent(inout) :: flowja
535 real(DP),
intent(inout) :: ccratin
536 real(DP),
intent(inout) :: ccratout
538 integer(I4B) :: j, n1, n2
539 integer(I4B) :: nlist
540 integer(I4B) :: igwfnode
541 integer(I4B) :: idiag
542 integer(I4B) :: auxpos
551 nlist = this%flowbudptr%budterm(this%idxbudrate)%nlist
552 call this%budobj%budterm(idx)%reset(nlist)
554 call this%mwe_rate_term(j, n1, n2, q)
555 call this%budobj%budterm(idx)%update_term(n1, n2, q)
556 call this%apt_accumulate_ccterm(n1, q, ccratin, ccratout)
560 if (this%idxbudfwrt /= 0)
then
562 nlist = this%flowbudptr%budterm(this%idxbudfwrt)%nlist
563 call this%budobj%budterm(idx)%reset(nlist)
565 call this%mwe_fwrt_term(j, n1, n2, q)
566 call this%budobj%budterm(idx)%update_term(n1, n2, q)
567 call this%apt_accumulate_ccterm(n1, q, ccratin, ccratout)
572 if (this%idxbudrtmv /= 0)
then
574 nlist = this%flowbudptr%budterm(this%idxbudrtmv)%nlist
575 call this%budobj%budterm(idx)%reset(nlist)
577 call this%mwe_rtmv_term(j, n1, n2, q)
578 call this%budobj%budterm(idx)%update_term(n1, n2, q)
579 call this%apt_accumulate_ccterm(n1, q, ccratin, ccratout)
584 if (this%idxbudfrtm /= 0)
then
586 nlist = this%flowbudptr%budterm(this%idxbudfrtm)%nlist
587 call this%budobj%budterm(idx)%reset(nlist)
589 call this%mwe_frtm_term(j, n1, n2, q)
590 call this%budobj%budterm(idx)%update_term(n1, n2, q)
591 call this%apt_accumulate_ccterm(n1, q, ccratin, ccratout)
597 call this%budobj%budterm(idx)%reset(this%maxbound)
598 do j = 1, this%flowbudptr%budterm(this%idxbudmwcd)%nlist
600 n1 = this%flowbudptr%budterm(this%idxbudmwcd)%id1(j)
601 if (this%iboundpak(n1) /= 0)
then
602 igwfnode = this%flowbudptr%budterm(this%idxbudmwcd)%id2(j)
603 auxpos = this%flowbudptr%budterm(this%idxbudgwf)%naux
604 wa = this%flowbudptr%budterm(this%idxbudgwf)%auxvar(auxpos, j)
606 s = this%rfeatthk(n1)
607 ctherm = ktf * wa / s
608 q = ctherm * (x(igwfnode) - this%xnewpak(n1))
610 call this%budobj%budterm(idx)%update_term(n1, igwfnode, q)
611 call this%apt_accumulate_ccterm(n1, q, ccratin, ccratout)
612 if (this%iboundpak(n1) /= 0)
then
614 this%simvals(j) = this%simvals(j) - q
615 idiag = this%dis%con%ia(igwfnode)
616 flowja(idiag) = flowja(idiag) - q
631 call this%TspAptType%allocate_scalars()
634 call mem_allocate(this%idxbudrate,
'IDXBUDRATE', this%memoryPath)
635 call mem_allocate(this%idxbudfwrt,
'IDXBUDFWRT', this%memoryPath)
636 call mem_allocate(this%idxbudrtmv,
'IDXBUDRTMV', this%memoryPath)
637 call mem_allocate(this%idxbudfrtm,
'IDXBUDFRTM', this%memoryPath)
638 call mem_allocate(this%idxbudmwcd,
'IDXBUDMWCD', this%memoryPath)
660 call mem_allocate(this%temprate, this%ncv,
'TEMPRATE', this%memoryPath)
663 call this%TspAptType%apt_allocate_arrays()
667 this%temprate(n) =
dzero
694 call this%TspAptType%bnd_da()
703 integer(I4B),
intent(in) :: ientry
704 integer(I4B),
intent(inout) :: n1
705 integer(I4B),
intent(inout) :: n2
706 real(DP),
intent(inout),
optional :: rrate
707 real(DP),
intent(inout),
optional :: rhsval
708 real(DP),
intent(inout),
optional :: hcofval
714 n1 = this%flowbudptr%budterm(this%idxbudrate)%id1(ientry)
715 n2 = this%flowbudptr%budterm(this%idxbudrate)%id2(ientry)
717 qbnd = this%flowbudptr%budterm(this%idxbudrate)%flow(ientry)
718 if (qbnd <
dzero)
then
719 ctmp = this%xnewpak(n1)
723 ctmp = this%temprate(n1)
727 if (
present(rrate)) rrate = qbnd * ctmp * this%eqnsclfac
728 if (
present(rhsval)) rhsval = r * this%eqnsclfac
729 if (
present(hcofval)) hcofval = h * this%eqnsclfac
738 integer(I4B),
intent(in) :: ientry
739 integer(I4B),
intent(inout) :: n1
740 integer(I4B),
intent(inout) :: n2
741 real(DP),
intent(inout),
optional :: rrate
742 real(DP),
intent(inout),
optional :: rhsval
743 real(DP),
intent(inout),
optional :: hcofval
748 n1 = this%flowbudptr%budterm(this%idxbudfwrt)%id1(ientry)
749 n2 = this%flowbudptr%budterm(this%idxbudfwrt)%id2(ientry)
750 qbnd = this%flowbudptr%budterm(this%idxbudfwrt)%flow(ientry)
751 ctmp = this%xnewpak(n1)
752 if (
present(rrate)) rrate = ctmp * qbnd * this%eqnsclfac
753 if (
present(rhsval)) rhsval =
dzero
754 if (
present(hcofval)) hcofval = qbnd * this%eqnsclfac
763 integer(I4B),
intent(in) :: ientry
764 integer(I4B),
intent(inout) :: n1
765 integer(I4B),
intent(inout) :: n2
766 real(DP),
intent(inout),
optional :: rrate
767 real(DP),
intent(inout),
optional :: rhsval
768 real(DP),
intent(inout),
optional :: hcofval
773 n1 = this%flowbudptr%budterm(this%idxbudrtmv)%id1(ientry)
774 n2 = this%flowbudptr%budterm(this%idxbudrtmv)%id2(ientry)
775 qbnd = this%flowbudptr%budterm(this%idxbudrtmv)%flow(ientry)
776 ctmp = this%xnewpak(n1)
777 if (
present(rrate)) rrate = ctmp * qbnd * this%eqnsclfac
778 if (
present(rhsval)) rhsval =
dzero
779 if (
present(hcofval)) hcofval = qbnd * this%eqnsclfac
788 integer(I4B),
intent(in) :: ientry
789 integer(I4B),
intent(inout) :: n1
790 integer(I4B),
intent(inout) :: n2
791 real(DP),
intent(inout),
optional :: rrate
792 real(DP),
intent(inout),
optional :: rhsval
793 real(DP),
intent(inout),
optional :: hcofval
798 n1 = this%flowbudptr%budterm(this%idxbudfrtm)%id1(ientry)
799 n2 = this%flowbudptr%budterm(this%idxbudfrtm)%id2(ientry)
800 qbnd = this%flowbudptr%budterm(this%idxbudfrtm)%flow(ientry)
801 ctmp = this%xnewpak(n1)
802 if (
present(rrate)) rrate = ctmp * qbnd * this%eqnsclfac
803 if (
present(rhsval)) rhsval =
dzero
804 if (
present(hcofval)) hcofval = qbnd * this%eqnsclfac
820 call this%obs%StoreObsType(
'temperature', .false., indx)
829 call this%obs%StoreObsType(
'from-mvr', .true., indx)
838 call this%obs%StoreObsType(
'storage', .true., indx)
843 call this%obs%StoreObsType(
'constant', .true., indx)
848 call this%obs%StoreObsType(
'mwe', .true., indx)
853 call this%obs%StoreObsType(
'rate', .true., indx)
858 call this%obs%StoreObsType(
'fw-rate', .true., indx)
863 call this%obs%StoreObsType(
'rate-to-mvr', .true., indx)
868 call this%obs%StoreObsType(
'fw-rate-to-mvr', .true., indx)
880 logical,
intent(inout) :: found
883 select case (obsrv%ObsTypeId)
885 call this%rp_obs_byfeature(obsrv)
887 call this%rp_obs_byfeature(obsrv)
889 call this%rp_obs_byfeature(obsrv)
890 case (
'FW-RATE-TO-MVR')
891 call this%rp_obs_byfeature(obsrv)
902 character(len=*),
intent(in) :: obstypeid
903 real(DP),
intent(inout) :: v
904 integer(I4B),
intent(in) :: jj
905 logical,
intent(inout) :: found
907 integer(I4B) :: n1, n2
910 select case (obstypeid)
912 if (this%iboundpak(jj) /= 0)
then
913 call this%mwe_rate_term(jj, n1, n2, v)
916 if (this%iboundpak(jj) /= 0 .and. this%idxbudfwrt > 0)
then
917 call this%mwe_fwrt_term(jj, n1, n2, v)
920 if (this%iboundpak(jj) /= 0 .and. this%idxbudrtmv > 0)
then
921 call this%mwe_rtmv_term(jj, n1, n2, v)
923 case (
'FW-RATE-TO-MVR')
924 if (this%iboundpak(jj) /= 0 .and. this%idxbudfrtm > 0)
then
925 call this%mwe_frtm_term(jj, n1, n2, v)
939 integer(I4B),
intent(in) :: itemno
940 character(len=*),
intent(in) :: keyword
941 logical,
intent(inout) :: found
943 character(len=LINELENGTH) :: text
946 real(DP),
pointer :: bndElem => null()
951 select case (keyword)
953 ierr = this%apt_check_valid(itemno)
957 call this%parser%GetString(text)
959 bndelem => this%temprate(itemno)
961 this%packName,
'BND', this%tsManager, &
981 character(len=LINELENGTH) :: text
982 character(len=LENBOUNDNAME) :: bndName, bndNameTemp
983 character(len=9) :: cno
984 character(len=50),
dimension(:),
allocatable :: caux
986 logical :: isfound, endOfBlock
988 integer(I4B) :: ii, jj
992 integer(I4B) :: nconn
993 integer(I4B),
dimension(:),
pointer,
contiguous :: nboundchk
994 real(DP),
pointer :: bndElem => null()
1000 call mem_allocate(this%strt, this%ncv,
'STRT', this%memoryPath)
1001 call mem_allocate(this%ktf, this%ncv,
'KTF', this%memoryPath)
1002 call mem_allocate(this%rfeatthk, this%ncv,
'RFEATTHK', this%memoryPath)
1003 call mem_allocate(this%lauxvar, this%naux, this%ncv,
'LAUXVAR', &
1007 if (this%imatrows == 0)
then
1008 call mem_allocate(this%iboundpak, this%ncv,
'IBOUND', this%memoryPath)
1009 call mem_allocate(this%xnewpak, this%ncv,
'XNEWPAK', this%memoryPath)
1011 call mem_allocate(this%xoldpak, this%ncv,
'XOLDPAK', this%memoryPath)
1014 allocate (this%featname(this%ncv))
1018 this%strt(n) =
dep20
1020 this%rfeatthk(n) =
dzero
1021 this%lauxvar(:, n) =
dzero
1022 this%xoldpak(n) =
dep20
1023 if (this%imatrows == 0)
then
1024 this%iboundpak(n) = 1
1025 this%xnewpak(n) =
dep20
1030 if (this%naux > 0)
then
1031 allocate (caux(this%naux))
1035 allocate (nboundchk(this%ncv))
1041 call this%parser%GetBlock(
'PACKAGEDATA', isfound, ierr, &
1042 supportopenclose=.true.)
1046 write (this%iout,
'(/1x,a)')
'PROCESSING '//trim(adjustl(this%text))// &
1051 call this%parser%GetNextLine(endofblock)
1052 if (endofblock)
exit
1053 n = this%parser%GetInteger()
1055 if (n < 1 .or. n > this%ncv)
then
1056 write (
errmsg,
'(a,1x,i6)') &
1057 'Itemno must be > 0 and <= ', this%ncv
1063 nboundchk(n) = nboundchk(n) + 1
1066 this%strt(n) = this%parser%GetDouble()
1069 this%ktf(n) = this%parser%GetDouble()
1070 this%rfeatthk(n) = this%parser%GetDouble()
1071 if (this%rfeatthk(n) <=
dzero)
then
1072 write (
errmsg,
'(4x,a)') &
1073 '****ERROR. Specified thickness used for thermal &
1074 &conduction MUST BE > 0 else divide by zero error occurs'
1080 do iaux = 1, this%naux
1081 call this%parser%GetString(caux(iaux))
1085 write (cno,
'(i9.9)') n
1086 bndname =
'Feature'//cno
1089 if (this%inamedbound /= 0)
then
1090 call this%parser%GetStringCaps(bndnametemp)
1091 if (bndnametemp /=
'')
then
1092 bndname = bndnametemp
1095 this%featname(n) = bndname
1099 do jj = 1, this%naux
1102 bndelem => this%lauxvar(jj, ii)
1104 this%packName,
'AUX', &
1105 this%tsManager, this%iprpak, &
1114 if (nboundchk(n) == 0)
then
1115 write (
errmsg,
'(a,1x,i0)')
'No data specified for feature', n
1117 else if (nboundchk(n) > 1)
then
1118 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
1119 'Data for feature', n,
'specified', nboundchk(n),
'times'
1124 write (this%iout,
'(1x,a)') &
1125 'END OF '//trim(adjustl(this%text))//
' PACKAGEDATA'
1127 call store_error(
'Required packagedata block not found.')
1132 call this%parser%StoreErrorUnit()
1136 if (this%naux > 0)
then
1141 deallocate (nboundchk)
This module contains the base boundary package.
class(bndtype) function, pointer, public getbndfromlist(list, idx)
Get boundary from package list.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
real(dp), parameter dep20
real constant 1e20
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
subroutine allocate_scalars(this)
Allocate scalars specific to the multi-aquifer well energy transport (MWE) package.
character(len= *), parameter flowtype
subroutine mwe_rp_obs(this, obsrv, found)
Process package specific obs.
subroutine mwe_rtmv_term(this, ientry, n1, n2, rrate, rhsval, hcofval)
Thermal transport matrix term(s) associated with pumped-water- to-mover term (mwe_rtmv_term)
subroutine mwe_allocate_arrays(this)
Allocate arrays specific to the streamflow mass transport (SFT) package.
subroutine, public mwe_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, fmi, eqnsclfac, gwecommon, dvt, dvu, dvua)
Create new MWE package.
subroutine mwe_bd_obs(this, obstypeid, jj, v, found)
Calculate observation value and pass it back to APT.
subroutine find_mwe_package(this)
Find corresponding mwe package.
subroutine mwe_fill_budobj(this, idx, x, flowja, ccratin, ccratout)
Copy flow terms into thisbudobj.
character(len= *), parameter ftype
subroutine mwe_da(this)
Deallocate memory associated with MWE package.
subroutine mwe_setup_budobj(this, idx)
Set up the budget object that stores all the mwe flows.
integer(i4b) function mwe_get_nbudterms(this)
Function to return the number of budget terms just for this package.
subroutine mwe_frtm_term(this, ientry, n1, n2, rrate, rhsval, hcofval)
Thermal transport matrix term(s) associated with the flowing- well-rate-to-mover term (mwe_frtm_term)
subroutine mwe_solve(this)
Add terms specific to multi-aquifer wells to the explicit multi- aquifer well energy transport solve.
subroutine mwe_fc_expanded(this, rhs, ia, idxglo, matrix_sln)
Add matrix terms related to MWE.
subroutine mwe_set_stressperiod(this, itemno, keyword, found)
Sets the stress period attributes for keyword use.
subroutine mwe_fwrt_term(this, ientry, n1, n2, rrate, rhsval, hcofval)
Thermal transport matrix term(s) associated with a flowing- well rate term associated with pumping (o...
subroutine mwe_read_cvs(this)
Read feature information for this advanced package.
subroutine mwe_rate_term(this, ientry, n1, n2, rrate, rhsval, hcofval)
Thermal transport matrix term(s) associated with a user-specified flow rate (mwe_rate_term)
subroutine mwe_df_obs(this)
Observations.
This module defines variable data types.
This module contains the derived types ObserveType and ObsDataType.
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.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
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 apt_process_obsid(obsrv, dis, inunitobs, iout)
Process observation IDs for an advanced package.
subroutine, public apt_process_obsid12(obsrv, dis, inunitobs, iout)
Process observation IDs for a package.