32 integer(I4B) :: tas_active
34 pointer :: aux_tasnames
36 pointer :: param_tasnames
56 subroutine ainit(this, mf6_input, component_name, &
57 component_input_name, input_name, &
58 iperblock, parser, iout)
64 character(len=*),
intent(in) :: component_name
65 character(len=*),
intent(in) :: component_input_name
66 character(len=*),
intent(in) :: input_name
67 integer(I4B),
intent(in) :: iperblock
69 integer(I4B),
intent(in) :: iout
72 contiguous :: tas_fnames
73 character(len=LINELENGTH) :: fname
74 integer(I4B) :: tas6_size, n
77 call this%DynamicPkgLoadType%init(mf6_input, component_name, &
78 component_input_name, &
79 input_name, iperblock, iout)
81 nullify (this%aux_tasnames)
82 nullify (this%param_tasnames)
87 call loader%load(parser, mf6_input, this%nc_vars, this%input_name, iout)
90 allocate (this%tasmanager)
91 call tasmanager_cr(this%tasmanager, modelname=this%mf6_input%component_name, &
95 call get_isize(
'TAS6_FILENAME', this%mf6_input%mempath, tas6_size)
96 if (tas6_size > 0)
then
98 call mem_setptr(tas_fnames,
'TAS6_FILENAME', this%mf6_input%mempath)
100 do n = 1,
size(tas_fnames)
101 fname = tas_fnames(n)
102 call this%tasmanager%add_tasfile(fname)
107 call this%ctx%init(mf6_input)
110 call this%params_alloc()
113 call this%tas_arrays_alloc()
118 call this%tasmanager%tasmanager_df()
123 call this%tasmanager%ad()
126 subroutine rp(this, parser)
136 logical(LGP) :: endOfBlock, netcdf
137 character(len=LINELENGTH) :: keyword, param_tag
139 integer(I4B) :: iaux, iparam
140 character(len=LENTIMESERIESNAME) :: tas_name
141 integer(I4B),
dimension(:),
pointer,
contiguous :: int1d
148 this%mf6_input%subcomponent_name, this%iout)
157 call parser%GetNextLine(endofblock)
160 call parser%GetStringCaps(param_tag)
165 if (iaux > 0) param_tag =
'AUX'
169 this%mf6_input%component_type, &
170 this%mf6_input%subcomponent_type, &
171 'PERIOD', param_tag, this%input_name)
173 call parser%GetStringCaps(keyword)
174 if (keyword ==
'TIMEARRAYSERIES')
then
175 if (this%tas_active /= 0)
then
176 call parser%GetStringCaps(tas_name)
177 if (param_tag ==
'AUX')
then
178 this%aux_tasnames(iaux) = tas_name
180 iparam =
ifind(this%param_names, param_tag)
181 this%param_tasnames(iparam) = tas_name
182 this%param_reads(iparam)%invar = 2
185 call idm_log_var(param_tag, this%mf6_input%mempath, this%iout, .true., &
192 else if (keyword ==
'NETCDF')
then
197 call this%param_load(parser, idt, this%mf6_input%mempath, netcdf, iaux)
203 if (this%param_reads(1)%invar == 0)
then
204 if (this%param_names(1) == &
205 'I'//trim(this%mf6_input%subcomponent_type(1:3)))
then
207 this%mf6_input%component_type, &
208 this%mf6_input%subcomponent_type, &
209 'PERIOD', this%param_names(1), &
212 call mem_setptr(int1d, idt%mf6varname, this%mf6_input%mempath)
217 if (this%tas_active /= 0)
then
218 call this%tas_links_create(parser%iuactive)
223 this%mf6_input%subcomponent_name, this%iout)
230 call this%ctx%destroy()
233 call this%tasmanager%da()
234 deallocate (this%tasmanager)
235 nullify (this%tasmanager)
242 if (this%tas_active /= 0)
then
244 call this%tasmanager%reset(this%mf6_input%subcomponent_name)
246 call this%init_charstr1d(
'AUXTASNAME', this%input_name)
247 call this%init_charstr1d(
'PARAMTASNAME', this%input_name)
250 do n = 1, this%nparam
252 this%param_reads(n)%invar = 0
256 do m = 1, this%ctx%ncpl
257 do n = 1, this%ctx%naux
258 this%ctx%auxvar(n, m) =
dzero
266 character(len=*),
intent(in) :: varname
267 character(len=*),
intent(in) :: input_name
269 contiguous :: charstr1d
271 call mem_setptr(charstr1d, varname, this%mf6_input%mempath)
272 do n = 1,
size(charstr1d)
279 character(len=LENVARNAME) :: rs_varname
280 integer(I4B),
pointer :: intvar
281 integer(I4B) :: iparam
284 call this%ctx%tags(this%param_names, this%nparam, this%input_name, &
286 call this%ctx%allocate_arrays()
289 allocate (this%param_reads(this%nparam))
292 do iparam = 1, this%nparam
294 rs_varname = this%ctx%rsv_alloc(this%param_names(iparam))
295 call mem_setptr(intvar, rs_varname, this%mf6_input%mempath)
296 this%param_reads(iparam)%invar => intvar
297 this%param_reads(iparam)%invar = 0
301 subroutine param_load(this, parser, idt, mempath, netcdf, iaux)
315 character(len=*),
intent(in) :: mempath
316 logical(LGP),
intent(in) :: netcdf
317 integer(I4B),
intent(in) :: iaux
318 integer(I4B),
dimension(:),
pointer,
contiguous :: int1d
319 real(DP),
dimension(:),
pointer,
contiguous :: dbl1d
320 real(DP),
dimension(:, :),
pointer,
contiguous :: dbl2d
321 integer(I4B) :: iparam, n
323 select case (idt%datatype)
325 call mem_setptr(int1d, idt%mf6varname, mempath)
328 this%mf6_input, this%nc_vars, this%input_name, &
331 call read_int1d(parser, int1d, idt%mf6varname)
333 call idm_log_var(int1d, idt%tagname, mempath, this%iout)
335 call mem_setptr(dbl1d, idt%mf6varname, mempath)
338 this%mf6_input, this%nc_vars, this%input_name, &
341 call read_dbl1d(parser, dbl1d, idt%mf6varname)
343 call idm_log_var(dbl1d, idt%tagname, mempath, this%iout)
345 call mem_setptr(dbl2d, idt%mf6varname, mempath)
346 allocate (dbl1d(this%ctx%ncpl))
349 this%mf6_input, this%nc_vars, this%input_name, &
350 this%iout,
kper, iaux)
352 call read_dbl1d(parser, dbl1d, idt%mf6varname)
354 do n = 1, this%ctx%ncpl
355 dbl2d(iaux, n) = dbl1d(n)
357 call idm_log_var(dbl1d, idt%tagname, mempath, this%iout)
360 errmsg =
'IDM unimplemented. LayerArrayLoad::param_load &
361 &datatype='//trim(idt%datatype)
367 iparam =
ifind(this%param_names, idt%tagname)
369 this%param_reads(iparam)%invar = 1
378 if (this%tas_active /= 0)
then
380 this%ctx%naux,
'AUXTASNAME', &
381 this%mf6_input%mempath)
383 'PARAMTASNAME', this%mf6_input%mempath)
384 call this%init_charstr1d(
'AUXTASNAME', this%input_name)
385 call this%init_charstr1d(
'PARAMTASNAME', this%input_name)
388 'AUXTASNAME', this%mf6_input%mempath)
390 'PARAMTASNAME', this%mf6_input%mempath)
399 integer(I4B),
intent(in) :: inunit
402 real(DP),
dimension(:),
pointer :: auxArrayPtr, bndArrayPtr
403 real(DP),
dimension(:),
pointer,
contiguous :: bound
404 integer(I4B),
dimension(:),
pointer,
contiguous :: nodelist
405 character(len=LENTIMESERIESNAME) :: tas_name
406 character(len=LENAUXNAME) :: aux_name
407 logical :: convertFlux
411 nullify (auxarrayptr)
412 nullify (bndarrayptr)
414 convertflux = .false.
417 do n = 1, this%ctx%naux
418 tas_name = this%aux_tasnames(n)
419 if (tas_name /=
'')
then
421 auxarrayptr => this%ctx%auxvar(n, :)
422 aux_name = this%ctx%auxname_cst(n)
423 call this%tasmanager%MakeTasLink(this%mf6_input%subcomponent_name, &
424 auxarrayptr, this%ctx%iprpak, &
425 tas_name, aux_name, convertflux, &
431 do n = 1, this%nparam
434 this%mf6_input%component_type, &
435 this%mf6_input%subcomponent_type, &
436 'PERIOD', this%param_names(n), &
438 if (idt%timeseries)
then
439 if (this%param_reads(n)%invar == 2)
then
440 tas_name = this%param_tasnames(n)
441 call mem_setptr(bound, idt%mf6varname, this%mf6_input%mempath)
443 bndarrayptr => bound(:)
444 call this%tasmanager%MakeTasLink(this%mf6_input%subcomponent_name, &
447 tas_name, idt%mf6varname, &
448 convertflux, nodelist, inunit)
This module contains block parser methods.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
integer(i4b), parameter lentimeseriesname
maximum length of a time series name
integer(i4b), parameter lenvarname
maximum length of a variable name
integer(i4b), parameter lenauxname
maximum length of a aux variable
integer(i4b), parameter izero
integer constant zero
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.
subroutine, public read_dbl1d(parser, dbl1d, aname)
subroutine, public read_dbl2d(parser, dbl2d, aname)
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
subroutine, public read_int1d(parser, int1d, aname)
This module defines variable data types.
This module contains the LayerArrayLoadModule.
subroutine param_load(this, parser, idt, mempath, netcdf, iaux)
subroutine tas_arrays_alloc(this)
subroutine tas_links_create(this, inunit)
subroutine ainit(this, mf6_input, component_name, component_input_name, input_name, iperblock, parser, iout)
subroutine rp(this, parser)
subroutine init_charstr1d(this, varname, input_name)
subroutine params_alloc(this)
This module contains the LoadContextModule.
This module contains the LoadMf6FileModule.
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.
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 SourceCommonModule.
integer(i4b) function, public ifind_charstr(array, str)
integer(i4b), pointer, public kper
current stress period number
subroutine, public tasmanager_cr(this, dis, modelname, iout)
Create the time-array series manager.
This class is used to store a single deferred-length character string. It was designed to work in an ...
Ascii array layer dynamic loader type.
derived type for boundary package input context
Pointer type for read state variable.
Static parser based input loader.