31 character(len=LENBUDTXT),
dimension(2) ::
budtxt = & !< text labels for budget terms
32 &[
' STO-SS',
' STO-SY']
35 integer(I4B),
pointer :: istor_coef => null()
36 integer(I4B),
pointer :: iconf_ss => null()
37 integer(I4B),
pointer :: iorig_ss => null()
38 integer(I4B),
pointer :: iss => null()
39 integer(I4B),
pointer :: iusesy => null()
40 integer(I4B),
dimension(:),
pointer,
contiguous :: iconvert => null()
41 real(dp),
dimension(:),
pointer,
contiguous :: ss => null()
42 real(dp),
dimension(:),
pointer,
contiguous :: sy => null()
43 real(dp),
dimension(:),
pointer,
contiguous :: strgss => null()
44 real(dp),
dimension(:),
pointer,
contiguous :: strgsy => null()
45 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound => null()
46 real(dp),
pointer :: satomega => null()
47 integer(I4B),
pointer :: integratechanges => null()
48 integer(I4B),
pointer :: intvs => null()
50 real(dp),
dimension(:),
pointer,
contiguous,
private :: oldss => null()
51 real(dp),
dimension(:),
pointer,
contiguous,
private :: oldsy => null()
52 integer(I4B),
pointer :: iper => null()
53 character(len=:),
pointer :: storage
55 integer(I4B),
dimension(:),
pointer,
contiguous :: iformulation => null()
108 subroutine sto_cr(stoobj, name_model, mempath, inunit, iout)
111 character(len=*),
intent(in) :: name_model
112 character(len=*),
intent(in) :: mempath
113 integer(I4B),
intent(in) :: inunit
114 integer(I4B),
intent(in) :: iout
120 call stoobj%set_names(1, name_model,
'STO',
'STO', mempath)
123 call stoobj%allocate_scalars()
126 stoobj%inunit = inunit
142 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
145 character(len=*),
parameter :: fmtsto = &
146 "(1x,/1x,'STO -- STORAGE PACKAGE, VERSION 1, 5/19/2014', &
147 &' INPUT READ FROM MEMPATH: ', A, //)"
150 write (this%iout, fmtsto) this%input_mempath
154 this%ibound => ibound
160 call this%allocate_arrays(dis%nodes)
166 call this%source_options()
169 call this%source_data()
172 if (this%intvs /= 0)
then
173 call this%tvs%ar(this%dis)
190 character(len=16) :: css(0:1)
192 data css(0)/
' TRANSIENT'/
193 data css(1)/
' STEADY-STATE'/
196 if (this%integratechanges /= 0)
then
197 call this%save_old_ss_sy()
201 if (this%inunit <= 0)
return
204 if (this%iper ==
kper)
then
205 write (this%iout,
'(//,1x,a)')
'PROCESSING STORAGE PERIOD DATA'
208 if (this%storage ==
'STEADY-STATE')
then
210 else if (this%storage ==
'TRANSIENT')
then
213 write (
errmsg,
'(a,a)')
'Unknown STORAGE data tag: ', &
219 write (this%iout,
'(1x,a)')
'END PROCESSING STORAGE PERIOD DATA'
221 write (this%iout,
'(//1X,A,I0,A,A,/)') &
222 'STRESS PERIOD ',
kper,
' IS ', trim(adjustl(css(this%iss)))
226 if (this%intvs /= 0)
then
243 if (this%integratechanges /= 0 .and.
kstp > 1)
then
244 call this%save_old_ss_sy()
248 if (this%intvs /= 0)
then
258 subroutine sto_fc(this, kiter, hold, hnew, matrix_sln, idxglo, rhs)
262 integer(I4B),
intent(in) :: kiter
263 real(DP),
intent(in),
dimension(:) :: hold
264 real(DP),
intent(in),
dimension(:) :: hnew
266 integer(I4B),
intent(in),
dimension(:) :: idxglo
267 real(DP),
intent(inout),
dimension(:) :: rhs
269 integer(I4B) :: iform
271 character(len=*),
parameter :: fmtsperror = &
272 &
"('DETECTED TIME STEP LENGTH OF ZERO. GWF STORAGE PACKAGE CANNOT BE ', &
273 &'USED UNLESS DELT IS NON-ZERO.')"
276 if (this%iss /= 0)
return
280 write (
errmsg, fmtsperror)
286 call this%default_form%fc(kiter, matrix_sln, rhs, idxglo, hold, hnew)
288 if (this%sto_formulations(iform)%is_active)
then
289 call this%sto_formulations(iform)%form%fc( &
290 kiter, matrix_sln, rhs, idxglo, hold, hnew)
301 idxglo, h_old, h_new)
303 integer(I4B),
intent(in) :: kiter
305 real(DP),
dimension(:),
intent(inout) :: rhs
306 integer(I4B),
dimension(:),
intent(in) :: idxglo
307 real(DP),
dimension(:),
intent(in) :: h_old
308 real(DP),
dimension(:),
intent(in) :: h_new
312 do n = 1, this%sto%dis%nodes
313 if (this%sto%ibound(n) < 1) cycle
316 call this%sto%fc_default_sto(n, matrix_sln, rhs, idxglo, h_old, h_new)
326 integer(I4B),
intent(in) :: n
328 real(DP),
dimension(:),
intent(inout) :: rhs
329 integer(I4B),
dimension(:),
intent(in) :: idxglo
330 real(DP),
dimension(:),
intent(in) :: hold
331 real(DP),
dimension(:),
intent(in) :: hnew
333 integer(I4B) :: idiag
336 real(DP) :: rho1, rho2
337 real(DP) :: sc1old, sc2old, rho1old, rho2old
339 real(DP) :: snold, snnew
340 real(DP) :: aterm, rhsterm
344 idiag = this%dis%con%ia(n)
351 if (this%iconvert(n) == 0)
then
360 sc1 =
sscapacity(this%istor_coef, tp, bt, this%dis%area(n), this%ss(n))
363 if (this%integratechanges /= 0)
then
367 sc1old =
sscapacity(this%istor_coef, tp, bt, this%dis%area(n), &
369 rho1old = sc1old * tled
377 call ssterms(this%iconvert(n), this%iorig_ss, this%iconf_ss, tp, bt, &
378 rho1, rho1old, snnew, snold, hnew(n), hold(n), &
382 call matrix_sln%add_value_pos(idxglo(idiag), aterm)
383 rhs(n) = rhs(n) + rhsterm
386 if (this%iconvert(n) /= 0)
then
390 sc2 =
sycapacity(this%dis%area(n), this%sy(n))
393 if (this%integratechanges /= 0)
then
397 sc2old =
sycapacity(this%dis%area(n), this%oldsy(n))
398 rho2old = sc2old * tled
406 call syterms(tp, bt, rho2, rho2old, snnew, snold, &
410 call matrix_sln%add_value_pos(idxglo(idiag), aterm)
411 rhs(n) = rhs(n) + rhsterm
422 subroutine sto_fn(this, kiter, hold, hnew, matrix_sln, idxglo, rhs)
425 integer(I4B),
intent(in) :: kiter
426 real(DP),
intent(in),
dimension(:) :: hold
427 real(DP),
intent(in),
dimension(:) :: hnew
429 integer(I4B),
intent(in),
dimension(:) :: idxglo
430 real(DP),
intent(inout),
dimension(:) :: rhs
432 integer(I4B) :: iform
435 if (this%iss /= 0)
return
439 call this%default_form%fn(kiter, matrix_sln, rhs, idxglo, hold, hnew)
441 if (this%sto_formulations(iform)%is_active)
then
442 call this%sto_formulations(iform)%form%fn( &
443 kiter, matrix_sln, rhs, idxglo, hold, hnew)
454 idxglo, h_old, h_new)
456 integer(I4B),
intent(in) :: kiter
458 real(DP),
dimension(:),
intent(inout) :: rhs
459 integer(I4B),
dimension(:),
intent(in) :: idxglo
460 real(DP),
dimension(:),
intent(in) :: h_old
461 real(DP),
dimension(:),
intent(in) :: h_new
465 do n = 1, this%sto%dis%nodes
466 if (this%sto%ibound(n) <= 0) cycle
469 call this%sto%fn_default_sto(n, matrix_sln, rhs, idxglo, h_old, h_new)
477 integer(I4B),
intent(in) :: n
479 real(DP),
dimension(:),
intent(inout) :: rhs
480 integer(I4B),
dimension(:),
intent(in) :: idxglo
481 real(DP),
dimension(:),
intent(in) :: hold
482 real(DP),
dimension(:),
intent(in) :: hnew
484 integer(I4B) :: idiag
486 real(DP) :: sc1, sc2, rho1, rho2
491 real(DP) :: derv, rterm, drterm
495 idiag = this%dis%con%ia(n)
507 sc1 =
sscapacity(this%istor_coef, tp, bt, this%dis%area(n), this%ss(n))
508 sc2 =
sycapacity(this%dis%area(n), this%sy(n))
514 if (this%iconvert(n) /= 0)
then
520 if (this%iconf_ss == 0)
then
521 if (this%iorig_ss == 0)
then
522 drterm = -rho1 * derv * (h - bt) + rho1 * tthk * snnew * derv
524 drterm = -(rho1 * derv * h)
526 call matrix_sln%add_value_pos(idxglo(idiag), drterm)
527 rhs(n) = rhs(n) + drterm * h
533 if (snnew <
done)
then
535 if (snnew >
dzero)
then
536 rterm = -rho2 * tthk * snnew
537 drterm = -rho2 * tthk * derv
538 call matrix_sln%add_value_pos(idxglo(idiag), drterm + rho2)
539 rhs(n) = rhs(n) - rterm + drterm * h + rho2 * bt
552 subroutine sto_cq(this, flowja, hnew, hold)
555 real(DP),
dimension(:),
contiguous,
intent(inout) :: flowja
556 real(DP),
dimension(:),
contiguous,
intent(in) :: hnew
557 real(DP),
dimension(:),
contiguous,
intent(in) :: hold
560 integer(I4B) :: iform
563 do n = 1, this%dis%nodes
564 this%strgss(n) =
dzero
565 this%strgsy(n) =
dzero
568 if (this%iss == 1)
return
572 call this%default_form%cq(flowja, hnew, hold)
574 if (this%sto_formulations(iform)%is_active)
then
575 call this%sto_formulations(iform)%form%cq(flowja, hnew, hold)
587 real(DP),
dimension(:),
intent(inout) :: flowja
588 real(DP),
dimension(:),
intent(in) :: h_new
589 real(DP),
dimension(:),
intent(in) :: h_old
593 do n = 1, this%sto%dis%nodes
594 if (this%sto%ibound(n) <= 0) cycle
597 call this%sto%cq_default_sto(n, flowja, h_new, h_old)
606 integer(I4B),
intent(in) :: n
607 logical(LGP) :: is_active
616 integer(I4B),
intent(in) :: isuppress_output
617 type(
budgettype),
intent(inout) :: model_budget
624 integer(I4B),
intent(in) :: iprint
625 integer(I4B),
intent(in) :: ibinun
633 integer(I4B),
intent(in) :: n
634 real(DP),
dimension(:),
intent(inout) :: flowja
635 real(DP),
dimension(:),
intent(in) :: hnew
636 real(DP),
dimension(:),
intent(in) :: hold
638 integer(I4B) :: idiag
641 real(DP) :: sc1, sc2, rho1, rho2
642 real(DP) :: sc1old, sc2old, rho1old, rho2old
644 real(DP) :: snold, snnew
645 real(DP) :: aterm, rhsterm
654 if (this%iconvert(n) == 0)
then
663 sc1 =
sscapacity(this%istor_coef, tp, bt, this%dis%area(n), this%ss(n))
666 if (this%integratechanges /= 0)
then
670 sc1old =
sscapacity(this%istor_coef, tp, bt, this%dis%area(n), &
672 rho1old = sc1old * tled
680 call ssterms(this%iconvert(n), this%iorig_ss, this%iconf_ss, tp, bt, &
681 rho1, rho1old, snnew, snold, hnew(n), hold(n), &
682 aterm, rhsterm, rate)
685 this%strgss(n) = rate
688 idiag = this%dis%con%ia(n)
689 flowja(idiag) = flowja(idiag) + rate
693 if (this%iconvert(n) /= 0)
then
696 sc2 =
sycapacity(this%dis%area(n), this%sy(n))
699 if (this%integratechanges /= 0)
then
703 sc2old =
sycapacity(this%dis%area(n), this%oldsy(n))
704 rho2old = sc2old * tled
712 call syterms(tp, bt, rho2, rho2old, snnew, snold, &
713 aterm, rhsterm, rate)
716 this%strgsy(n) = rate
719 idiag = this%dis%con%ia(n)
720 flowja(idiag) = flowja(idiag) + rate
730 subroutine sto_bd(this, isuppress_output, model_budget)
736 integer(I4B),
intent(in) :: isuppress_output
737 type(
budgettype),
intent(inout) :: model_budget
745 if (this%sto_formulations(i)%is_active)
then
746 call this%sto_formulations(i)%form%bd(isuppress_output, model_budget)
752 call model_budget%addentry(rin, rout,
delt,
budtxt(1), &
753 isuppress_output,
' STORAGE')
756 if (this%iusesy == 1)
then
758 call model_budget%addentry(rin, rout,
delt,
budtxt(2), &
759 isuppress_output,
' STORAGE')
771 integer(I4B),
intent(in) :: icbcfl
772 integer(I4B),
intent(in) :: icbcun
774 integer(I4B) :: iform
775 integer(I4B) :: ibinun
776 integer(I4B) :: iprint, nvaluesp, nwidthp
777 character(len=1) :: cdatafmp =
' ', editdesc =
' '
781 if (this%ipakcb < 0)
then
783 elseif (this%ipakcb == 0)
then
788 if (icbcfl == 0) ibinun = 0
791 if (ibinun /= 0)
then
797 if (this%sto_formulations(iform)%is_active)
then
798 call this%sto_formulations(iform)%form%save_flows(iprint, ibinun)
803 call this%dis%record_array(this%strgss, this%iout, iprint, -ibinun, &
804 budtxt(1), cdatafmp, nvaluesp, &
805 nwidthp, editdesc, dinact)
808 if (this%iusesy == 1)
then
809 call this%dis%record_array(this%strgsy, this%iout, iprint, -ibinun, &
810 budtxt(2), cdatafmp, nvaluesp, &
811 nwidthp, editdesc, dinact)
828 if (this%intvs /= 0)
then
830 deallocate (this%tvs)
834 if (this%inunit > 0)
then
843 if (
associated(this%default_form))
then
844 deallocate (this%default_form)
845 this%default_form => null()
849 if (
associated(this%oldss))
then
852 if (
associated(this%oldsy))
then
858 nullify (this%storage)
871 call this%NumericalPackageType%da()
887 call this%NumericalPackageType%allocate_scalars()
890 call mem_allocate(this%istor_coef,
'ISTOR_COEF', this%memoryPath)
891 call mem_allocate(this%iconf_ss,
'ICONF_SS', this%memoryPath)
892 call mem_allocate(this%iorig_ss,
'IORIG_SS', this%memoryPath)
893 call mem_allocate(this%iusesy,
'IUSESY', this%memoryPath)
894 call mem_allocate(this%satomega,
'SATOMEGA', this%memoryPath)
895 call mem_allocate(this%integratechanges,
'INTEGRATECHANGES', &
904 this%satomega =
dzero
905 this%integratechanges = 0
919 integer(I4B),
intent(in) :: nodes
924 call mem_allocate(this%iconvert, nodes,
'ICONVERT', this%memoryPath)
925 call mem_allocate(this%ss, nodes,
'SS', this%memoryPath)
926 call mem_allocate(this%sy, nodes,
'SY', this%memoryPath)
927 call mem_allocate(this%strgss, nodes,
'STRGSS', this%memoryPath)
928 call mem_allocate(this%strgsy, nodes,
'STRGSY', this%memoryPath)
929 call mem_allocate(this%iformulation, nodes,
'IFORM', this%memoryPath)
932 if (this%inunit > 0)
then
933 call mem_setptr(this%iper,
'IPER', this%input_mempath)
934 call mem_setptr(this%storage,
'STORAGE', this%input_mempath)
943 this%strgss(n) =
dzero
944 this%strgsy(n) =
dzero
945 if (this%integratechanges /= 0)
then
946 this%oldss(n) =
dzero
947 if (this%iusesy /= 0)
then
948 this%oldsy(n) =
dzero
957 select type (form => this%default_form)
981 character(len=LINELENGTH) :: tvs6_filename
982 character(len=LENMEMPATH) :: tvs6_mempath
985 call mem_set_value(this%ipakcb,
'IPAKCB', this%input_mempath, found%ipakcb)
986 call mem_set_value(this%istor_coef,
'ISTOR_COEF', this%input_mempath, &
988 call mem_set_value(this%iconf_ss,
'SS_CONFINED_ONLY', this%input_mempath, &
989 found%ss_confined_only)
990 call mem_set_value(this%iorig_ss,
'IORIG_SS', this%input_mempath, &
992 call mem_set_value(this%iconf_ss,
'ICONF_SS', this%input_mempath, &
995 if (found%ipakcb)
then
999 if (found%ss_confined_only)
then
1005 this%input_mempath, this%input_fname))
then
1006 call mem_setptr(tvs6_mempaths,
'TVS6_MEMPATH', this%input_mempath)
1007 tvs6_mempath = tvs6_mempaths(1)
1009 call tvs_cr(this%tvs, this%name_model, tvs6_mempath, this%intvs, this%iout)
1012 if (found%iconf_ss)
then
1017 call this%log_options(found)
1020 if (this%inewton > 0)
then
1021 this%satomega = dem6
1039 character(len=*),
parameter :: fmtisvflow = &
1040 "(4x,'CELL-BY-CELL FLOW INFORMATION WILL BE SAVED TO BINARY FILE &
1041 &WHENEVER ICBCFL IS NOT ZERO.')"
1042 character(len=*),
parameter :: fmtflow = &
1043 &
"(4x, 'FLOWS WILL BE SAVED TO FILE: ', a, /4x, 'OPENED ON UNIT: ', I7)"
1044 character(len=*),
parameter :: fmtorigss = &
1045 "(4X,'ORIGINAL_SPECIFIC_STORAGE OPTION:',/, &
1046 &1X,'The original specific storage formulation will be used')"
1047 character(len=*),
parameter :: fmtstoc = &
1048 "(4X,'STORAGECOEFFICIENT OPTION:',/, &
1049 &1X,'Read storage coefficient rather than specific storage')"
1050 character(len=*),
parameter :: fmtconfss = &
1051 "(4X,'SS_CONFINED_ONLY OPTION:',/, &
1052 &1X,'Specific storage changes only occur under confined conditions')"
1054 write (this%iout,
'(1x,a)')
'PROCESSING STORAGE OPTIONS'
1056 if (found%ipakcb)
then
1057 write (this%iout, fmtisvflow)
1060 if (found%istor_coef)
then
1061 write (this%iout, fmtstoc)
1064 if (found%ss_confined_only)
then
1065 write (this%iout, fmtconfss)
1068 if (found%iorig_ss)
then
1069 write (this%iout, fmtorigss)
1072 if (found%iconf_ss)
then
1073 write (this%iout, fmtconfss)
1076 write (this%iout,
'(1x,a)')
'END OF STORAGE OPTIONS'
1091 character(len=LINELENGTH) :: cellstr
1092 logical(LGP) :: isconv
1093 character(len=24),
dimension(4) :: aname
1095 integer(I4B),
dimension(:),
pointer,
contiguous :: map
1099 data aname(1)/
' ICONVERT'/
1100 data aname(2)/
' SPECIFIC STORAGE'/
1101 data aname(3)/
' SPECIFIC YIELD'/
1105 if (this%dis%nodes < this%dis%nodesuser) map => this%dis%nodeuser
1108 call mem_set_value(this%iconvert,
'ICONVERT', this%input_mempath, map, &
1110 call mem_set_value(this%ss,
'SS', this%input_mempath, map, found%ss)
1111 call mem_set_value(this%sy,
'SY', this%input_mempath, map, found%sy)
1114 if (found%iconvert)
then
1116 do n = 1, this%dis%nodes
1117 if (this%iconvert(n) /= 0)
then
1124 write (
errmsg,
'(a, a, a)')
'Error in GRIDDATA block: ', &
1125 trim(adjustl(aname(1))),
' not found.'
1133 write (
errmsg,
'(a, a, a)')
'Error in GRIDDATA block: ', &
1134 trim(adjustl(aname(2))),
' not found.'
1143 write (
errmsg,
'(a, a, a)')
'Error in GRIDDATA block: ', &
1144 trim(adjustl(aname(3))),
' not found.'
1154 do n = 1, this%dis%nodes
1155 if (this%ss(n) <
dzero)
then
1156 call this%dis%noder_to_string(n, cellstr)
1157 write (
errmsg,
'(a,2(1x,a),1x,g0,1x,a)') &
1158 'Error in SS DATA: SS value in cell', trim(adjustl(cellstr)), &
1159 'is less than zero (', this%ss(n),
').'
1163 if (this%sy(n) <
dzero)
then
1164 call this%dis%noder_to_string(n, cellstr)
1165 write (
errmsg,
'(a,2(1x,a),1x,g0,1x,a)') &
1166 'Error in SY DATA: SY value in cell', trim(adjustl(cellstr)), &
1167 'is less than zero (', this%sy(n),
').'
1189 if (.not.
associated(this%oldss))
then
1190 call mem_allocate(this%oldss, this%dis%nodes,
'OLDSS', this%memoryPath)
1192 if (this%iusesy == 1 .and. .not.
associated(this%oldsy))
then
1193 call mem_allocate(this%oldsy, this%dis%nodes,
'OLDSY', this%memoryPath)
1197 do n = 1, this%dis%nodes
1198 this%oldss(n) = this%ss(n)
1202 if (this%iusesy == 1)
then
1203 do n = 1, this%dis%nodes
1204 this%oldsy(n) = this%sy(n)
1212 integer(I4B) :: form_id
1214 this%sto_formulations(form_id)%is_active = .true.
1215 this%sto_formulations(form_id)%form => sto_form
This module contains the BudgetModule.
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
real(dp), parameter dhalf
real constant 1/2
real(dp), parameter dem4
real constant 1e-4
real(dp), parameter dem6
real constant 1e-6
real(dp), parameter dzero
real constant zero
real(dp), parameter dtwo
real constant 2
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
integer(i4b), parameter, public max_ext_sto_forms
'cause default is not part of the (external) storage formulations
integer(i4b), parameter, public default_storage
This module contains the storage package methods.
subroutine, public sto_cr(stoobj, name_model, mempath, inunit, iout)
@ brief Create a new package object
subroutine sto_bd(this, isuppress_output, model_budget)
@ brief Model budget calculation for package
subroutine add_sto_formulation(this, sto_form, form_id)
subroutine default_storage_fn(this, kiter, matrix_sln, rhs, idxglo, h_old, h_new)
Fill newton terms for the default storage formulation.
subroutine source_data(this)
@ brief Source input data for package
subroutine sto_ar(this, dis, ibound)
@ brief Allocate and read method for package
subroutine sto_da(this)
@ brief Deallocate package memory
subroutine sto_fc(this, kiter, hold, hnew, matrix_sln, idxglo, rhs)
@ brief Fill A and right-hand side for the package
subroutine default_storage_save_flows(this, iprint, ibinun)
Default storage flows are saved directly by sto_save_model_flows.
subroutine log_options(this, found)
@ brief Log found options for package
subroutine default_storage_cq(this, flowja, h_new, h_old)
Calculate flows for the default storage formulation.
subroutine default_storage_bd(this, isuppress_output, model_budget)
Default storage budget is handled directly by sto_bd.
logical(lgp) function default_storage_is_active(this, n)
The default formulation uses the claim mask, not is_active.
subroutine sto_fn(this, kiter, hold, hnew, matrix_sln, idxglo, rhs)
@ brief Fill Newton-Raphson terms in A and right-hand side for the package
subroutine sto_rp(this)
@ brief Read and prepare method for package
subroutine sto_cq(this, flowja, hnew, hold)
@ brief Calculate flows for package
subroutine cq_default_sto(this, n, flowja, hnew, hold)
Standard flow calculation for the storage.
subroutine save_old_ss_sy(this)
@ brief Save old storage property values
subroutine fn_default_sto(this, n, matrix_sln, rhs, idxglo, hold, hnew)
subroutine sto_save_model_flows(this, icbcfl, icbcun)
@ brief Save model flows for package
subroutine default_storage_fc(this, kiter, matrix_sln, rhs, idxglo, h_old, h_new)
Fill coefficients for the default storage formulation.
subroutine allocate_scalars(this)
@ brief Allocate scalars
subroutine allocate_arrays(this, nodes)
@ brief Allocate package arrays
subroutine sto_ad(this)
@ brief Advance the package
character(len=lenbudtxt), dimension(2) budtxt
subroutine fc_default_sto(this, n, matrix_sln, rhs, idxglo, hold, hnew)
Default storage FC.
subroutine source_options(this)
@ brief Source input options for package
This module contains stateless storage subroutines and functions.
pure real(dp) function, public sycapacity(area, sy)
Calculate the specific yield capacity.
pure subroutine, public syterms(top, bot, rho2, rho2old, snnew, snold, aterm, rhsterm, rate)
Calculate the specific yield storage terms.
pure subroutine, public ssterms(iconvert, iorig_ss, iconf_ss, top, bot, rho1, rho1old, snnew, snold, hnew, hold, aterm, rhsterm, rate)
Calculate the specific storage terms.
pure real(dp) function, public sscapacity(istor_coef, top, bot, area, ss)
Calculate the specific storage capacity.
This module defines variable data types.
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
subroutine, public get_isize(name, mem_path, isize)
@ brief Get the number of elements for this variable
This module contains the base numerical package type.
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.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
real(dp) function squadraticsaturation(top, bot, x, eps)
@ brief sQuadraticSaturation
real(dp) function slinearsaturation(top, bot, x)
@ brief sLinearSaturation
real(dp) function squadraticsaturationderivative(top, bot, x, eps)
@ brief Derivative of the quadratic saturation function
real(dp) function sqsaturation(top, bot, x, c1, c2)
@ brief sQSaturation
This module contains the SourceCommonModule.
logical(lgp) function, public filein_fname(filename, tagname, input_mempath, input_fname)
enforce and set a single input filename provided via FILEIN keyword
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
This module contains the time-varying storage package methods.
subroutine, public tvs_cr(tvs, name_model, mempath, inunit, iout)
Create a new TvsType object.
Derived type for the Budget object.
This class is used to store a single deferred-length character string. It was designed to work in an ...