21 character(len=LENFTYPE) ::
ftype =
'CNC'
22 character(len=LENPACKAGENAME) ::
text =
' CNC'
26 real(dp),
dimension(:),
pointer,
contiguous :: tspvar => null()
27 real(dp),
dimension(:),
pointer,
contiguous :: ratecncin => null()
28 real(dp),
dimension(:),
pointer,
contiguous :: ratecncout => null()
29 character(len=LENVARNAME) :: depvartype =
''
55 subroutine cnc_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, &
58 class(
bndtype),
pointer :: packobj
59 integer(I4B),
intent(in) :: id
60 integer(I4B),
intent(in) :: ibcnum
61 integer(I4B),
intent(in) :: inunit
62 integer(I4B),
intent(in) :: iout
63 character(len=*),
intent(in) :: namemodel
64 character(len=*),
intent(in) :: pakname
65 character(len=LENVARNAME),
intent(in) :: depvartype
66 character(len=*),
intent(in) :: mempath
75 call packobj%set_names(ibcnum, namemodel, pakname,
ftype, mempath)
79 call cncobj%allocate_scalars()
82 call packobj%pack_initialize()
85 packobj%inunit = inunit
88 packobj%ibcnum = ibcnum
92 cncobj%depvartype = depvartype
103 integer(I4B),
dimension(:),
pointer,
contiguous,
optional :: nodelist
104 real(DP),
dimension(:, :),
pointer,
contiguous,
optional :: auxvar
109 call this%BndExtType%allocate_arrays(nodelist, auxvar)
112 call mem_allocate(this%ratecncin, this%maxbound,
'RATECNCIN', this%memoryPath)
113 call mem_allocate(this%ratecncout, this%maxbound,
'RATECNCOUT', &
115 do i = 1, this%maxbound
116 this%ratecncin(i) =
dzero
117 this%ratecncout(i) =
dzero
121 call mem_setptr(this%tspvar,
'TSPVAR', this%input_mempath)
124 call mem_checkin(this%tspvar,
'TSPVAR', this%memoryPath, &
125 'TSPVAR', this%input_mempath)
138 integer(I4B) :: i, node, ibd, ierr
139 character(len=30) :: nodestr
140 character(len=LENVARNAME) :: dvtype
143 do i = 1, this%nbound
144 node = this%nodelist(i)
145 this%ibound(node) = this%ibcnum
149 call this%BndExtType%bnd_rp()
153 do i = 1, this%nbound
154 node = this%nodelist(i)
155 ibd = this%ibound(node)
157 call this%dis%noder_to_string(node, nodestr)
158 dvtype = trim(this%depvartype)
161 //dvtype//
': '//trim(adjustl(nodestr)))
164 this%ibound(node) = -this%ibcnum
170 call store_error_filename(this%input_fname)
183 integer(I4B) :: i, node
188 call this%TsManager%ad()
191 do i = 1, this%nbound
192 node = this%nodelist(i)
193 cb = this%conc_mult(i)
196 this%xold(node) = this%xnew(node)
202 call this%obs%obs_ad()
212 character(len=30) :: nodestr
216 character(len=*),
parameter :: fmtcncerr = &
217 &
"('Specified dependent variable boundary ',i0, &
218 &' conc (',g0,') is less than zero for cell', a)"
221 do i = 1, this%nbound
222 node = this%nodelist(i)
224 if (this%conc_mult(i) <
dzero)
then
225 call this%dis%noder_to_string(node, nodestr)
226 write (
errmsg, fmt=fmtcncerr) i, this%tspvar(i), trim(nodestr)
242 subroutine cnc_fc(this, rhs, ia, idxglo, matrix_sln)
245 real(DP),
dimension(:),
intent(inout) :: rhs
246 integer(I4B),
dimension(:),
intent(in) :: ia
247 integer(I4B),
dimension(:),
intent(in) :: idxglo
261 real(DP),
dimension(:),
intent(in) :: x
262 real(DP),
dimension(:),
contiguous,
intent(inout) :: flowja
263 integer(I4B),
optional,
intent(in) :: iadv
269 integer(I4B) :: idiag
271 real(DP) :: ratein, rateout
275 if (this%nbound > 0)
then
278 do i = 1, this%nbound
279 node = this%nodelist(i)
280 idiag = this%dis%con%ia(node)
286 do ipos = this%dis%con%ia(node) + 1, &
287 this%dis%con%ia(node + 1) - 1
292 n2 = this%dis%con%ja(ipos)
293 if (this%ibound(n2) > 0)
then
297 rateout = rateout + q
308 this%simvals(i) = rate
309 this%ratecncin(i) = ratein
310 this%ratecncout(i) = rateout
311 flowja(idiag) = flowja(idiag) + rate
327 type(
budgettype),
intent(inout) :: model_budget
331 integer(I4B) :: isuppress_output
336 call model_budget%addentry(ratin, ratout,
delt, this%text, &
337 isuppress_output, this%packName)
351 call this%BndExtType%bnd_da()
369 this%listlabel = trim(this%filtyp)//
' NO.'
370 if (this%dis%ndim == 3)
then
371 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
372 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'ROW'
373 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'COL'
374 elseif (this%dis%ndim == 2)
then
375 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
376 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'CELL2D'
378 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'NODE'
380 write (this%listlabel,
'(a, a16)') trim(this%listlabel), &
381 trim(this%depvartype)
382 if (this%inamedbound == 1)
then
383 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'BOUNDARY NAME'
413 call this%obs%StoreObsType(this%filtyp, .true., indx)
430 integer(I4B) :: i, nlinks
433 nlinks = this%TsManager%boundtslinks%Count()
436 if (
associated(tslink))
then
437 select case (tslink%JCol)
439 tslink%Text = trim(this%depvartype)
452 integer(I4B),
intent(in) :: row
456 if (this%iauxmultcol > 0)
then
457 conc = this%tspvar(row) * this%auxvar(this%iauxmultcol, row)
459 conc = this%tspvar(row)
472 integer(I4B),
intent(in) :: col
473 integer(I4B),
intent(in) :: row
479 bndval = this%conc_mult(row)
481 write (
errmsg,
'(3a)')
'Programming error. ', &
482 & adjustl(trim(this%filtyp)),
' bound value requested column '&
483 &
'outside range of ncolbnd (1).'
This module contains the extended boundary package.
This module contains the base boundary package.
This module contains the BudgetModule.
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
This module contains simulation constants.
integer(i4b), parameter lenpackagename
maximum length of the package name
integer(i4b), parameter namedboundflag
named bound flag
integer(i4b), parameter lenvarname
maximum length of a variable name
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
logical function cnc_obs_supported(this)
Procedure related to observation processing.
real(dp) function cnc_bound_value(this, col, row)
@ brief Return a bound value
subroutine define_listlabel(this)
Define labels used in list file.
character(len=lenpackagename) text
subroutine cnc_df_obs(this)
Procedure related to observation processing.
real(dp) function conc_mult(this, row)
Apply auxiliary multiplier to specified concentration if.
character(len=lenftype) ftype
subroutine cnc_ad(this)
Constant concentration/temperature package advance routine.
subroutine cnc_cq(this, x, flowja, iadv)
Calculate flow associated with constant concentration/temperature boundary.
subroutine cnc_rp_ts(this)
Procedure related to time series.
subroutine cnc_ck(this)
Check constant concentration/temperature boundary condition data.
subroutine, public cnc_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, depvartype, mempath)
Create a new constant concentration or temperature package.
subroutine cnc_da(this)
Deallocate memory.
subroutine cnc_allocate_arrays(this, nodelist, auxvar)
Allocate arrays specific to the constant concentration/tempeature package.
subroutine cnc_rp(this)
Constant concentration/temperature read and prepare (rp) routine.
subroutine cnc_bd(this, model_budget)
Add package ratin/ratout to model budget.
subroutine cnc_fc(this, rhs, ia, idxglo, matrix_sln)
Override bnd_fc and do nothing.
This module defines variable data types.
This module contains the derived types ObserveType and ObsDataType.
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_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), pointer, public delt
length of the current time step
type(timeserieslinktype) function, pointer, public gettimeserieslinkfromlist(list, indx)
Get time series link from a list.
Derived type for the Budget object.