37 logical(LGP) :: ts_active
51 subroutine ainit(this, mf6_input, component_name, component_input_name, &
52 input_name, iperblock, parser, iout)
59 character(len=*),
intent(in) :: component_name
60 character(len=*),
intent(in) :: component_input_name
61 character(len=*),
intent(in) :: input_name
62 integer(I4B),
intent(in) :: iperblock
64 integer(I4B),
intent(in) :: iout
66 character(len=LINELENGTH) :: fname
67 integer(I4B) :: ts6_size, n
70 call this%DynamicPkgLoadType%init(mf6_input, component_name, &
71 component_input_name, input_name, &
74 this%ts_active = .false.
77 allocate (this%tsmanager)
81 call this%static_loader%load(parser, mf6_input, this%nc_vars, &
82 this%input_name, iout)
85 if (this%static_loader%ts_active)
then
86 this%ts_active = .true.
87 call get_isize(
'TS6_FILENAME', mf6_input%mempath, ts6_size)
88 if (ts6_size > 0)
then
89 call mem_setptr(ts_fnames,
'TS6_FILENAME', mf6_input%mempath)
90 do n = 1,
size(ts_fnames)
92 call this%tsmanager%add_tsfile(fname,
getunit())
98 call this%ctx%init(mf6_input)
101 this%param_names = this%ctx%params
102 this%nparam =
size(this%ctx%params)
103 call this%ctx%check_developmode(this%input_name)
106 call this%create_structarray()
109 call this%ctx%allocate_arrays()
118 call this%tsmanager%tsmanager_df()
120 do n = 1, this%static_loader%ts_sa_count()
121 sa => this%static_loader%get_ts_sa(n)
122 if (
associated(sa))
then
123 call sa%ts_update(this%tsmanager, &
124 this%mf6_input%subcomponent_name, &
125 this%ctx%iprpak, this%input_name, &
126 this%ctx%auxname_cst, &
127 clear_strlocs=.false.)
135 call this%tsmanager%ad()
144 if (.not. this%ctx%is_advanced)
then
145 call this%tsmanager%reset(this%mf6_input%subcomponent_name)
148 if (this%ts_active)
then
149 do n = 1, this%static_loader%ts_sa_count()
150 sa => this%static_loader%get_ts_sa(n)
151 if (
associated(sa))
then
152 call sa%ts_update(this%tsmanager, &
153 this%mf6_input%subcomponent_name, &
154 this%ctx%iprpak, this%input_name, &
155 this%ctx%auxname_cst, &
156 clear_strlocs=.false.)
162 subroutine rp(this, parser)
169 integer(I4B) :: ibinary
170 integer(I4B) :: oc_inunit
177 this%mf6_input%subcomponent_name, this%iout)
179 if (ibinary == 1)
then
181 this%structarray%read_from_binary(oc_inunit, this%iout)
182 call parser%terminateblock()
186 this%structarray%read_from_parser(parser, this%ts_active, this%iout, &
192 call this%apply_persistent_settings()
195 if (this%ts_active)
then
196 call this%structarray%ts_update(this%tsmanager, &
197 this%mf6_input%subcomponent_name, &
198 this%ctx%iprpak, this%input_name, &
199 this%ctx%auxname_cst)
204 this%mf6_input%subcomponent_name, this%iout)
211 call this%static_loader%cleanup()
214 call this%tsmanager%da()
215 deallocate (this%tsmanager)
216 nullify (this%tsmanager)
220 call this%ctx%destroy()
228 real(DP),
dimension(:),
pointer,
contiguous :: featarr
229 real(DP),
dimension(:, :),
pointer,
contiguous :: featarr2d
230 integer(I4B),
pointer :: naux
231 integer(I4B) :: icol, isize
235 this%ctx%maxbound, 0, &
236 this%mf6_input%mempath, &
237 this%mf6_input%component_mempath)
239 do icol = 1, this%nparam
241 this%mf6_input%component_type, &
242 this%mf6_input%subcomponent_type, &
244 this%param_names(icol), this%input_name)
247 if (this%ctx%is_advanced .and. idt%datatype ==
'DOUBLE' .and. &
249 call get_isize(trim(idt%mf6varname), this%mf6_input%mempath, isize)
251 call mem_allocate(featarr, this%ctx%maxbound, trim(idt%mf6varname), &
252 this%mf6_input%mempath)
255 else if (this%ctx%is_advanced .and. idt%datatype ==
'DOUBLE1D' .and. &
259 call get_isize(trim(idt%tagname)//
'VAR', this%mf6_input%mempath, &
262 call mem_setptr(naux, trim(idt%shape), this%mf6_input%mempath)
264 trim(idt%tagname)//
'VAR', this%mf6_input%mempath)
269 if (this%ctx%is_advanced .and. idt%datatype ==
'DOUBLE' .and. &
271 call this%structarray%mem_create_vector(icol, idt, &
274 call this%structarray%mem_create_vector(icol, idt)
290 integer(I4B),
dimension(:),
pointer,
contiguous :: ifno
291 integer(I4B),
dimension(:),
allocatable :: row_ifno
292 real(DP),
dimension(:),
pointer,
contiguous :: featarr
293 real(DP),
dimension(:, :),
pointer,
contiguous :: featarr2d
294 integer(I4B),
pointer :: naux
295 integer(I4B) :: icol, n, i, j, nfeatures
297 if (.not. this%ctx%is_advanced)
return
302 this%mf6_input%component_type, &
303 this%mf6_input%subcomponent_type, &
304 'PERIOD', this%param_names(1), &
306 call mem_setptr(ifno, trim(idt%mf6varname), this%mf6_input%mempath)
308 nfeatures = this%ctx%maxbound
309 allocate (row_ifno(this%ctx%nbound))
310 do n = 1, this%ctx%nbound
311 if (ifno(n) >= 1 .and. ifno(n) <= nfeatures)
then
312 row_ifno(n) = ifno(n)
314 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a,1x,i0,a)') &
315 trim(idt%tagname), ifno(n),
'on row', n, &
316 'must be greater than 0 and less than or equal to', nfeatures,
'.'
326 do icol = 1, this%nparam
328 this%mf6_input%component_type, &
329 this%mf6_input%subcomponent_type, &
331 this%param_names(icol), this%input_name)
332 if (idt%datatype ==
'DOUBLE' .and. idt%timeseries)
then
333 call mem_setptr(featarr, trim(idt%mf6varname), this%mf6_input%mempath)
334 if (this%ts_active)
then
335 call this%structarray%ts_update_indexed( &
336 icol, this%tsmanager, this%mf6_input%subcomponent_name, &
337 this%ctx%iprpak, this%ctx%nbound, row_ifno, &
338 varname=trim(idt%tagname), featarr=featarr)
340 do n = 1, this%ctx%nbound
343 if (this%structarray%struct_vectors(icol)%dbl1d(n) ==
dnodata) cycle
344 featarr(i) = this%structarray%struct_vectors(icol)%dbl1d(n)
347 else if (idt%datatype ==
'DOUBLE1D' .and. idt%timeseries)
then
348 call mem_setptr(featarr2d, trim(idt%tagname)//
'VAR', &
349 this%mf6_input%mempath)
350 if (this%ts_active)
then
351 call this%structarray%ts_update_adv( &
352 icol, this%tsmanager, this%mf6_input%subcomponent_name, &
353 this%ctx%iprpak, this%ctx%nbound, row_ifno, &
354 auxname_cst=this%ctx%auxname_cst, featarr2d=featarr2d)
356 call mem_setptr(naux, trim(idt%shape), this%mf6_input%mempath)
357 do n = 1, this%ctx%nbound
361 if (this%structarray%struct_vectors(icol)%dbl2d(j, n) ==
dnodata) &
364 this%structarray%struct_vectors(icol)%dbl2d(j, n)
370 deallocate (row_ifno)
This module contains block parser methods.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
real(dp), parameter dnodata
real no data constant
real(dp), parameter dzero
real constant zero
This module contains the DefinitionSelectModule.
type(inputparamdefinitiontype) function, pointer, public get_param_definition_type(input_definition_types, component_type, subcomponent_type, blockname, tagname, filename, found)
Return parameter definition.
This module contains the Input Data Model Logger Module.
subroutine, public idm_log_close(component, subcomponent, iout)
@ brief log the closing message
subroutine, public idm_log_header(component, subcomponent, iout)
@ brief log a header message
This module defines variable data types.
This module contains the ListLoadModule.
subroutine ainit(this, mf6_input, component_name, component_input_name, input_name, iperblock, parser, iout)
subroutine apply_persistent_settings(this)
Resolve this period's rows for an advanced package's TS-capable fields into their permanent,...
subroutine ts_advance(this)
subroutine rp(this, parser)
subroutine create_structarray(this)
Load context for IDM generic dynamic loaders.
This module contains the LoadMf6FileModule.
integer(i4b) function, public read_control_record(parser, oc_inunit, iout)
subroutine, public get_isize(name, mem_path, isize)
@ brief Get the number of elements for this variable
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
This module contains the StructArrayModule.
character(len=lenvarname) function, public idm_input_varname(idt)
Derive a TS-capable setting's raw input array name, distinct from its persistent array (allocated und...
subroutine, public destructstructarray(struct_array)
destructor for a struct_array
type(structarraytype) function, pointer, public constructstructarray(mf6_input, ncol, nrow, blocknum, mempath, component_mempath, size_init)
constructor for a struct_array
This module contains the StructVectorModule.
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 tsmanager_cr(this, iout, removeTsLinksOnCompletion, extendTsToEndOfSimulation)
Create the tsmanager.
This class is used to store a single deferred-length character string. It was designed to work in an ...
list input loader for dynamic packages.
Input load context for generic dynamic loaders and StructArray based static loads....
Static parser based input loader.
type for structured array
derived type for generic vector