17 character(len=LENFTYPE) ::
ftype =
'ESL'
18 character(len=16) ::
text =
' ESL'
23 real(dp),
dimension(:),
pointer,
contiguous :: senerrate => null()
48 subroutine esl_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, &
49 gwecommon, input_mempath)
53 class(
bndtype),
pointer :: packobj
54 integer(I4B),
intent(in) :: id
55 integer(I4B),
intent(in) :: ibcnum
56 integer(I4B),
intent(in) :: inunit
57 integer(I4B),
intent(in) :: iout
58 character(len=*),
intent(in) :: namemodel
59 character(len=*),
intent(in) :: pakname
61 character(len=*),
intent(in) :: input_mempath
70 call packobj%set_names(ibcnum, namemodel, pakname,
ftype, input_mempath)
74 call eslobj%allocate_scalars()
77 call packobj%pack_initialize()
79 packobj%inunit = inunit
82 packobj%ibcnum = ibcnum
89 eslobj%gwecommon => gwecommon
101 call this%BndExtType%bnd_da()
115 call this%BndExtType%allocate_scalars()
129 integer(I4B),
dimension(:),
pointer,
contiguous,
optional :: nodelist
130 real(DP),
dimension(:, :),
pointer,
contiguous,
optional :: auxvar
133 call this%BndExtType%allocate_arrays(nodelist, auxvar)
136 call mem_setptr(this%senerrate,
'SENERRATE', this%input_mempath)
139 call mem_checkin(this%senerrate,
'SENERRATE', this%memoryPath, &
140 'SENERRATE', this%input_mempath)
152 character(len=*),
parameter :: fmtenermulterr = &
153 "('ESL BOUNDARY (',i0,') ESL MULTIPLIER (',g10.3,') IS &
154 &LESS THAN ZERO THEREBY REVERSING THE ORIGINAL SIGN ON THE &
155 &AMOUNT OF ENERGY ENTERING OR EXITING THE MODEL.')"
158 do i = 1, this%nbound
159 node = this%nodelist(i)
162 if (this%iauxmultcol > 0)
then
163 if (this%auxvar(this%iauxmultcol, i) <
dzero)
then
164 write (
warnmsg, fmt=fmtenermulterr) &
165 i, this%auxvar(this%iauxmultcol, i)
167 write (this%iout,
'(/1x,a)')
'WARNING: '//trim(
warnmsg)
183 integer(I4B) :: i, node
187 if (this%nbound == 0)
return
190 do i = 1, this%nbound
191 node = this%nodelist(i)
193 if (this%ibound(node) <= 0)
then
199 q = this%ener_mult(i)
209 subroutine esl_fc(this, rhs, ia, idxglo, matrix_sln)
212 real(DP),
dimension(:),
intent(inout) :: rhs
213 integer(I4B),
dimension(:),
intent(in) :: ia
214 integer(I4B),
dimension(:),
intent(in) :: idxglo
217 integer(I4B) :: i, n, ipos
220 if (this%imover == 1)
then
221 call this%pakmvrobj%fc()
225 do i = 1, this%nbound
227 rhs(n) = rhs(n) + this%rhs(i)
229 call matrix_sln%add_value_pos(idxglo(ipos), this%hcof(i))
233 if (this%imover == 1 .and. this%rhs(i) >
dzero)
then
234 call this%pakmvrobj%accumulate_qformvr(i, this%rhs(i))
249 this%listlabel = trim(this%filtyp)//
' NO.'
250 if (this%dis%ndim == 3)
then
251 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
252 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'ROW'
253 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'COL'
254 elseif (this%dis%ndim == 2)
then
255 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
256 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'CELL2D'
258 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'NODE'
260 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'STRESS RATE'
261 if (this%inamedbound == 1)
then
262 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'BOUNDARY NAME'
295 call this%obs%StoreObsType(
'esl', .true., indx)
300 call this%obs%StoreObsType(
'to-mvr', .true., indx)
314 integer(I4B),
intent(in) :: col
315 integer(I4B),
intent(in) :: row
321 bndval = this%senerrate(row)
336 integer(I4B),
intent(in) :: row
340 if (this%iauxmultcol > 0)
then
341 ener = this%senerrate(row) * this%auxvar(this%iauxmultcol, row)
343 ener = this%senerrate(row)
This module contains the extended boundary package.
This module contains the base boundary package.
This module contains simulation constants.
real(dp), parameter dem1
real constant 1e-1
integer(i4b), parameter lenftype
maximum length of a package type (DIS, WEL, OC, etc.)
real(dp), parameter dzero
real constant zero
real(dp), parameter done
real constant 1
real(dp) function ener_mult(this, row)
Return a value that applies a multiplier.
subroutine, public esl_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, gwecommon, input_mempath)
Create an energy source loading package.
real(dp) function esl_bound_value(this, col, row)
@ brief Return a bound value
subroutine esl_da(this)
Deallocate memory.
subroutine esl_ck(this)
Check energy source loading boundary condition data.
subroutine esl_allocate_arrays(this, nodelist, auxvar)
Allocate arrays.
subroutine esl_cf(this)
Formulate the HCOF and RHS terms.
character(len=lenftype) ftype
subroutine define_listlabel(this)
Define list labels.
subroutine esl_df_obs(this)
Define observations.
subroutine esl_fc(this, rhs, ia, idxglo, matrix_sln)
Add matrix terms related to specified energy source loading.
logical function esl_obs_supported(this)
Support function for specified energy source loading observations.
subroutine esl_allocate_scalars(this)
Allocate scalars.
This module defines variable data types.
This module contains the derived type ObsType.
subroutine, public defaultobsidprocessor(obsrv, dis, inunitobs, iout)
@ brief Process IDstring provided for each observation
This module contains simulation methods.
subroutine, public store_warning(msg, substring)
Store warning message.
This module contains simulation variables.
character(len=maxcharlen) warnmsg
warning message string