MODFLOW 6  version 6.5.0.dev2
MODFLOW 6 Code Documentation
adaptivetimestepmodule Module Reference

Functions/Subroutines

logical(lgp) function, public isadaptiveperiod (kper)
 @ brief Determine if period is adaptive More...
 
subroutine, public ats_cr (inunit, nper_tdis)
 @ brief Create ATS object More...
 
subroutine ats_allocate_scalars ()
 @ brief Allocate scalars More...
 
subroutine ats_allocate_arrays ()
 @ brief Allocate arrays More...
 
subroutine, public ats_da ()
 @ brief Deallocate variables More...
 
subroutine ats_read_options ()
 @ brief Read options More...
 
subroutine ats_read_dimensions ()
 @ brief Read dimensions More...
 
subroutine ats_read_timing ()
 @ brief Read timing More...
 
subroutine ats_process_input ()
 @ brief Process input More...
 
subroutine ats_input_table ()
 @ brief Write input table More...
 
subroutine ats_check_timing ()
 @ brief Check timing More...
 
subroutine, public ats_period_message (kper)
 @ brief Write period message More...
 
subroutine, public ats_submit_delt (kstp, kper, dt, sloc, idir)
 @ brief Allow and external caller to submit preferred time step More...
 
subroutine, public ats_set_delt (kstp, kper, pertim, perlencurrent, delt)
 @ brief Set time step More...
 
subroutine, public ats_reset_delt (kstp, kper, lastStepFailed, delt, finishedTrying)
 @ brief Reset time step because failure has occurred More...
 
subroutine, public ats_set_endofperiod (kper, pertim, perlencurrent, endofperiod)
 @ brief Set end of period indicator More...
 

Variables

integer(i4b), pointer nper => null()
 set equal to nper More...
 
integer(i4b), pointer maxats => null()
 number of ats entries More...
 
real(dp), pointer, public dtstable => null()
 delt value required for stability More...
 
integer(i4b), dimension(:), pointer, contiguous kperats => null()
 array of stress period numbers to apply ats (size NPER) More...
 
integer(i4b), dimension(:), pointer, contiguous iperats => null()
 array of stress period numbers to apply ats (size MAXATS) More...
 
real(dp), dimension(:), pointer, contiguous dt0 => null()
 input array of initial time step sizes More...
 
real(dp), dimension(:), pointer, contiguous dtmin => null()
 input array of minimum time step sizes More...
 
real(dp), dimension(:), pointer, contiguous dtmax => null()
 input array of maximum time step sizes More...
 
real(dp), dimension(:), pointer, contiguous dtadj => null()
 input array of time step factors for shortening or increasing More...
 
real(dp), dimension(:), pointer, contiguous dtfailadj => null()
 input array of time step factors for shortening due to nonconvergence More...
 
type(blockparsertypeparser
 block parser for reading input file More...
 

Function/Subroutine Documentation

◆ ats_allocate_arrays()

subroutine adaptivetimestepmodule::ats_allocate_arrays

Allocate and initialize arrays for the ATS package.

Definition at line 138 of file ats.f90.

139  ! -- modules
141  ! -- local
142  integer(I4B) :: n
143  !
144  call mem_allocate(kperats, nper, 'KPERATS', 'ATS')
145  call mem_allocate(iperats, maxats, 'IPERATS', 'ATS')
146  call mem_allocate(dt0, maxats, 'DT0', 'ATS')
147  call mem_allocate(dtmin, maxats, 'DTMIN', 'ATS')
148  call mem_allocate(dtmax, maxats, 'DTMAX', 'ATS')
149  call mem_allocate(dtadj, maxats, 'DTADJ', 'ATS')
150  call mem_allocate(dtfailadj, maxats, 'DTFAILADJ', 'ATS')
151  !
152  ! -- initialize kperats
153  do n = 1, nper
154  kperats(n) = 0
155  end do
156  !
157  ! -- initialize
158  do n = 1, maxats
159  iperats(n) = 0
160  dt0(n) = dzero
161  dtmin(n) = dzero
162  dtmax(n) = dzero
163  dtadj(n) = dzero
164  dtfailadj(n) = dzero
165  end do
166  !
167  ! -- return
168  return
Here is the caller graph for this function:

◆ ats_allocate_scalars()

subroutine adaptivetimestepmodule::ats_allocate_scalars
private

Allocate and initialize scalars for the ATS package.

Definition at line 115 of file ats.f90.

116  ! -- modules
118  !
119  ! -- memory manager variables
120  call mem_allocate(nper, 'NPER', 'ATS')
121  call mem_allocate(maxats, 'MAXATS', 'ATS')
122  call mem_allocate(dtstable, 'DTSTABLE', 'ATS')
123  !
124  ! -- Initialize variables
125  nper = 0
126  maxats = 0
127  dtstable = dnodata
128  !
129  ! -- return
130  return
Here is the caller graph for this function:

◆ ats_check_timing()

subroutine adaptivetimestepmodule::ats_check_timing

Perform a check on the input data to make sure values are within required ranges.

Definition at line 409 of file ats.f90.

410  integer(I4B) :: n
411  write (iout, '(1x,a)') 'PROCESSING ATS INPUT'
412  do n = 1, maxats
413  !
414  ! -- check iperats
415  if (iperats(n) < 1) then
416  write (errmsg, '(a, i0, a, i0)') &
417  'IPERATS must be greater than zero. Found ', iperats(n), &
418  ' for ATS PERIODDATA record ', n
419  call store_error(errmsg)
420  end if
421  if (iperats(n) > nper) then
422  write (warnmsg, '(a, i0, a, i0)') &
423  'IPERATS greater than NPER. Found ', iperats(n), &
424  ' for ATS PERIODDATA record ', n
425  call store_warning(warnmsg)
426  end if
427  !
428  ! -- check dt0
429  if (dt0(n) < dzero) then
430  write (errmsg, '(a, g15.7, a, i0)') &
431  'DT0 must be >= zero. Found ', dt0(n), &
432  ' for ATS PERIODDATA record ', n
433  call store_error(errmsg)
434  end if
435  !
436  ! -- check dtmin
437  if (dtmin(n) <= dzero) then
438  write (errmsg, '(a, g15.7, a, i0)') &
439  'DTMIN must be > zero. Found ', dtmin(n), &
440  ' for ATS PERIODDATA record ', n
441  call store_error(errmsg)
442  end if
443  !
444  ! -- check dtmax
445  if (dtmax(n) <= dzero) then
446  write (errmsg, '(a, g15.7, a, i0)') &
447  'DTMAX must be > zero. Found ', dtmax(n), &
448  ' for ATS PERIODDATA record ', n
449  call store_error(errmsg)
450  end if
451  !
452  ! -- check dtmin <= dtmax
453  if (dtmin(n) > dtmax(n)) then
454  write (errmsg, '(a, 2g15.7, a, i0)') &
455  'DTMIN must be < dtmax. Found ', dtmin(n), dtmax(n), &
456  ' for ATS PERIODDATA record ', n
457  call store_error(errmsg)
458  end if
459  !
460  ! -- check dtadj
461  if (dtadj(n) .ne. dzero .and. dtadj(n) < done) then
462  write (errmsg, '(a, g15.7, a, i0)') &
463  'DTADJ must be 0 or >= 1.0. Found ', dtadj(n), &
464  ' for ATS PERIODDATA record ', n
465  call store_error(errmsg)
466  end if
467  !
468  ! -- check dtfailadj
469  if (dtfailadj(n) .ne. dzero .and. dtfailadj(n) < done) then
470  write (errmsg, '(a, g15.7, a, i0)') &
471  'DTFAILADJ must be 0 or >= 1.0. Found ', dtfailadj(n), &
472  ' for ATS PERIODDATA record ', n
473  call store_error(errmsg)
474  end if
475 
476  end do
477  !
478  ! -- Check for errors
479  if (count_errors() > 0) then
480  call parser%StoreErrorUnit()
481  end if
482  write (iout, '(1x,a)') 'DONE PROCESSING ATS INPUT'
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_cr()

subroutine, public adaptivetimestepmodule::ats_cr ( integer(i4b), intent(in)  inunit,
integer(i4b), intent(in)  nper_tdis 
)

Create a new ATS object, and read and check input.

Definition at line 61 of file ats.f90.

62  ! -- modules
63  ! -- dummy
64  integer(I4B), intent(in) :: inunit
65  integer(I4B), intent(in) :: nper_tdis
66  ! -- local
67  ! -- formats
68  character(len=*), parameter :: fmtheader = &
69  "(1X,/1X,'ATS -- ADAPTIVE TIME STEP PACKAGE,', / &
70  &' VERSION 1 : 03/18/2021 - INPUT READ FROM UNIT ',I0)"
71  !
72  ! -- Allocate the scalar variables
73  call ats_allocate_scalars()
74  !
75  ! -- Identify package
76  write (iout, fmtheader) inunit
77  !
78  ! -- Initialize block parser
79  call parser%initialize(inunit, iout)
80  !
81  ! -- Read options
82  call ats_read_options()
83  !
84  ! -- store tdis nper in nper
85  nper = nper_tdis
86  !
87  ! -- Read dimensions and then allocate arrays
88  call ats_read_dimensions()
89  call ats_allocate_arrays()
90  !
91  ! -- Read timing
92  call ats_read_timing()
93  !
94  ! -- Echo input data to table
95  call ats_input_table()
96  !
97  ! -- Check timing
98  call ats_check_timing()
99  !
100  ! -- Process input
101  call ats_process_input()
102  !
103  ! -- Close the file
104  call parser%Clear()
105  !
106  ! -- return
107  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_da()

subroutine, public adaptivetimestepmodule::ats_da

Deallocate all ATS variables.

Definition at line 176 of file ats.f90.

178  !
179  ! -- Scalars
180  call mem_deallocate(nper)
181  call mem_deallocate(maxats)
182  call mem_deallocate(dtstable)
183  !
184  ! -- Arrays
185  call mem_deallocate(kperats)
186  call mem_deallocate(iperats)
187  call mem_deallocate(dt0)
188  call mem_deallocate(dtmin)
189  call mem_deallocate(dtmax)
190  call mem_deallocate(dtadj)
191  call mem_deallocate(dtfailadj)
192  !
193  ! -- Return
194  return
Here is the caller graph for this function:

◆ ats_input_table()

subroutine adaptivetimestepmodule::ats_input_table
private

Write a table showing the ATS input read from the perioddata block.

Definition at line 359 of file ats.f90.

360  use tablemodule, only: tabletype, table_cr
361  integer(I4B) :: n
362  character(len=LINELENGTH) :: tag
363  type(TableType), pointer :: inputtab => null()
364  !
365  ! -- setup table
366  call table_cr(inputtab, 'ATS', 'ATS PERIOD DATA')
367  call inputtab%table_df(maxats, 7, iout)
368  !
369  ! add columns
370  tag = 'RECORD'
371  call inputtab%initialize_column(tag, 10, alignment=tableft)
372  tag = 'IPERATS'
373  call inputtab%initialize_column(tag, 10, alignment=tableft)
374  tag = 'DT0'
375  call inputtab%initialize_column(tag, 10, alignment=tabcenter)
376  tag = 'DTMIN'
377  call inputtab%initialize_column(tag, 10, alignment=tabcenter)
378  tag = 'DTMAX'
379  call inputtab%initialize_column(tag, 10, alignment=tabcenter)
380  tag = 'DTADJ'
381  call inputtab%initialize_column(tag, 10, alignment=tabcenter)
382  tag = 'DTFAILADJ'
383  call inputtab%initialize_column(tag, 10, alignment=tabcenter)
384  !
385  ! -- write the data
386  do n = 1, maxats
387  call inputtab%add_term(n)
388  call inputtab%add_term(iperats(n))
389  call inputtab%add_term(dt0(n))
390  call inputtab%add_term(dtmin(n))
391  call inputtab%add_term(dtmax(n))
392  call inputtab%add_term(dtadj(n))
393  call inputtab%add_term(dtfailadj(n))
394  end do
395  !
396  ! -- deallocate the table
397  call inputtab%table_da()
398  deallocate (inputtab)
399  nullify (inputtab)
400  return
subroutine, public table_cr(this, name, title)
Definition: Table.f90:85
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_period_message()

subroutine, public adaptivetimestepmodule::ats_period_message ( integer(i4b), intent(in)  kper)

Write message to mfsim.lst file with information on ATS settings for this period.

Definition at line 491 of file ats.f90.

492  ! -- dummy
493  integer(I4B), intent(in) :: kper
494  ! -- local
495  integer(I4B) :: n
496  character(len=*), parameter :: fmtspts = &
497  "(28X,'ATS IS OVERRIDING TIME STEPPING FOR THIS PERIOD',/ &
498  &28X,'INITIAL TIME STEP SIZE (DT0) = ',G15.7,/ &
499  &28X,'MINIMUM TIME STEP SIZE (DTMIN) = ',G15.7,/ &
500  &28X,'MAXIMUM TIME STEP SIZE (DTMAX) = ',G15.7,/ &
501  &28X,'MULTIPLIER/DIVIDER FOR TIME STEP (DTADJ) = ',G15.7,/ &
502  &28X,'DIVIDER FOR FAILED TIME STEP (DTFAILADJ) = ',G15.7,/ &
503  &)"
504  n = kperats(kper)
505  write (iout, fmtspts) dt0(n), dtmin(n), dtmax(n), dtadj(n), dtfailadj(n)
506  return
Here is the caller graph for this function:

◆ ats_process_input()

subroutine adaptivetimestepmodule::ats_process_input
private

Process ATS input by filling the kperats array.

Definition at line 341 of file ats.f90.

342  integer(I4B) :: kkper
343  integer(I4B) :: n
344  !
345  ! -- fill kperats for valid iperats values
346  do n = 1, maxats
347  kkper = iperats(n)
348  if (kkper > 0 .and. kkper <= nper) then
349  kperats(kkper) = n
350  end if
351  end do
Here is the caller graph for this function:

◆ ats_read_dimensions()

subroutine adaptivetimestepmodule::ats_read_dimensions
private

Read dimensions from ATS input file.

Definition at line 241 of file ats.f90.

242  ! -- dummy
243  ! -- local
244  character(len=LINELENGTH) :: keyword
245  integer(I4B) :: ierr
246  logical :: isfound, endOfBlock
247  ! -- formats
248  character(len=*), parameter :: fmtmaxats = &
249  &"(1X,I0,' ADAPTIVE TIME STEP RECORDS(S) WILL FOLLOW IN PERIODDATA')"
250  !
251  ! -- get DIMENSIONS block
252  call parser%GetBlock('DIMENSIONS', isfound, ierr, &
253  supportopenclose=.true.)
254  !
255  ! -- parse block if detected
256  if (isfound) then
257  write (iout, '(1x,a)') 'PROCESSING ATS DIMENSIONS'
258  do
259  call parser%GetNextLine(endofblock)
260  if (endofblock) exit
261  call parser%GetStringCaps(keyword)
262  select case (keyword)
263  case ('MAXATS')
264  maxats = parser%GetInteger()
265  write (iout, fmtmaxats) maxats
266  case default
267  write (errmsg, '(a,a)') 'Unknown ATS dimension: ', &
268  trim(keyword)
269  call store_error(errmsg)
270  call parser%StoreErrorUnit()
271  end select
272  end do
273  write (iout, '(1x,a)') 'END OF ATS DIMENSIONS'
274  else
275  write (errmsg, '(a)') 'Required DIMENSIONS block not found.'
276  call store_error(errmsg)
277  call parser%StoreErrorUnit()
278  end if
279  !
280  ! -- Return
281  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_read_options()

subroutine adaptivetimestepmodule::ats_read_options

Read options from ATS input file.

Definition at line 202 of file ats.f90.

203  ! -- dummy
204  ! -- local
205  character(len=LINELENGTH) :: keyword
206  integer(I4B) :: ierr
207  logical :: isfound, endOfBlock
208  ! -- formats
209  !
210  ! -- get options block
211  call parser%GetBlock('OPTIONS', isfound, ierr, &
212  supportopenclose=.true., blockrequired=.false.)
213  !
214  ! -- parse options block if detected
215  if (isfound) then
216  write (iout, '(1x,a)') 'PROCESSING ATS OPTIONS'
217  do
218  call parser%GetNextLine(endofblock)
219  if (endofblock) exit
220  call parser%GetStringCaps(keyword)
221  select case (keyword)
222  case default
223  write (errmsg, '(a,a)') 'Unknown ATS option: ', &
224  trim(keyword)
225  call store_error(errmsg)
226  call parser%StoreErrorUnit()
227  end select
228  end do
229  write (iout, '(1x,a)') 'END OF ATS OPTIONS'
230  end if
231  !
232  ! -- Return
233  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_read_timing()

subroutine adaptivetimestepmodule::ats_read_timing
private

Read timing information from ATS input file.

Definition at line 289 of file ats.f90.

290  ! -- modules
291  ! -- dummy
292  ! -- local
293  integer(I4B) :: ierr
294  integer(I4B) :: n
295  logical :: isfound, endOfBlock
296  ! -- formats
297  !
298  ! -- get PERIODDATA block
299  call parser%GetBlock('PERIODDATA', isfound, ierr, &
300  supportopenclose=.true.)
301  !
302  ! -- parse block if detected
303  if (isfound) then
304  write (iout, '(1x,a)') 'READING ATS PERIODDATA'
305  do n = 1, maxats
306  call parser%GetNextLine(endofblock)
307  if (endofblock) exit
308  !
309  ! -- fill the ats data arrays
310  iperats(n) = parser%GetInteger()
311  dt0(n) = parser%GetDouble()
312  dtmin(n) = parser%GetDouble()
313  dtmax(n) = parser%GetDouble()
314  dtadj(n) = parser%GetDouble()
315  dtfailadj(n) = parser%GetDouble()
316  end do
317  !
318  ! -- Close the block
319  call parser%terminateblock()
320  !
321  ! -- Check for errors
322  if (count_errors() > 0) then
323  call parser%StoreErrorUnit()
324  end if
325  write (iout, '(1x,a)') 'END READING ATS PERIODDATA'
326  else
327  write (errmsg, '(a)') 'Required PERIODDATA block not found.'
328  call store_error(errmsg)
329  call parser%StoreErrorUnit()
330  end if
331  !
332  ! -- Return
333  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_reset_delt()

subroutine, public adaptivetimestepmodule::ats_reset_delt ( integer(i4b), intent(in)  kstp,
integer(i4b), intent(in)  kper,
integer(i4b), intent(in)  lastStepFailed,
real(dp), intent(inout)  delt,
logical, intent(inout)  finishedTrying 
)

Reset the time step using dtfailadj because the time step did not converge.

Definition at line 632 of file ats.f90.

633  ! -- modules
634  ! -- dummy
635  integer(I4B), intent(in) :: kstp
636  integer(I4B), intent(in) :: kper
637  integer(I4B), intent(in) :: lastStepFailed
638  real(DP), intent(inout) :: delt
639  logical, intent(inout) :: finishedTrying
640  ! -- local
641  integer(I4B) :: n
642  real(DP) :: delt_temp
643  real(DP) :: tsfact
644  ! -- formats
645  character(len=*), parameter :: fmttsi = &
646  "(1X, 'Failed solution for step ', i0, ' and period ', i0, &
647  &' will be retried using time step of ', G15.7)"
648  if (isadaptiveperiod(kper)) then
649  if (laststepfailed /= 0) then
650  delt_temp = delt
651  n = kperats(kper)
652  tsfact = dtfailadj(n)
653  if (tsfact > done) then
654  delt_temp = delt / tsfact
655  if (delt_temp >= dtmin(n)) then
656  finishedtrying = .false.
657  delt = delt_temp
658  write (iout, fmttsi) kstp, kper, delt
659  end if
660  end if
661 
662  end if
663  end if
664  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_set_delt()

subroutine, public adaptivetimestepmodule::ats_set_delt ( integer(i4b), intent(in)  kstp,
integer(i4b), intent(in)  kper,
real(dp), intent(inout)  pertim,
real(dp), intent(in)  perlencurrent,
real(dp), intent(inout)  delt 
)

Set the time step length (delt) for this time step using the ATS controls.

Definition at line 565 of file ats.f90.

566  ! -- modules
567  ! -- dummy
568  integer(I4B), intent(in) :: kstp
569  integer(I4B), intent(in) :: kper
570  real(DP), intent(inout) :: pertim
571  real(DP), intent(in) :: perlencurrent
572  real(DP), intent(inout) :: delt
573  ! -- local
574  integer(I4B) :: n
575  real(DP) :: tstart
576  ! -- formats
577  character(len=*), parameter :: fmtdt = &
578  "(1x, 'ATS: time step set to ', G15.7, ' for step ', i0, &
579  &' and period ', i0)"
580  !
581  ! -- initialize the record position (n) for this stress period
582  n = kperats(kper)
583  !
584  ! -- set tstart to the end of the last time step.
585  tstart = pertim
586  !
587  ! -- Calculate delt
588  !
589  ! -- Setup new stress period if kstp is 1
590  if (kstp == 1) then
591  !
592  ! -- Assign first value of delt for this stress period
593  if (dt0(n) /= dzero) then
594  delt = dt0(n)
595  else
596  ! leave delt the way it was
597  end if
598  else
599  !
600  ! -- Assign delt based on stability
601  if (dtstable /= dnodata) then
602  delt = dtstable
603  dtstable = dnodata
604  end if
605  end if
606  !
607  ! -- Ensure tsmin < delt < tsmax
608  if (delt < dtmin(n)) then
609  delt = dtmin(n)
610  end if
611  if (delt > dtmax(n)) then
612  delt = dtmax(n)
613  end if
614  !
615  ! -- Cut timestep down to meet end of period
616  if (tstart + delt > perlencurrent - dtmin(n)) then
617  delt = perlencurrent - tstart
618  end if
619  !
620  ! -- Write time step size information
621  write (iout, fmtdt) delt, kstp, kper
622  !
623  return
Here is the caller graph for this function:

◆ ats_set_endofperiod()

subroutine, public adaptivetimestepmodule::ats_set_endofperiod ( integer(i4b), intent(in)  kper,
real(dp), intent(inout)  pertim,
real(dp), intent(in)  perlencurrent,
logical(lgp), intent(inout)  endofperiod 
)

Determine if it is the end of the stress period and set the endofperiod logical variable if so.

Definition at line 673 of file ats.f90.

674  integer(I4B), intent(in) :: kper
675  real(DP), intent(inout) :: pertim
676  real(DP), intent(in) :: perlencurrent
677  logical(LGP), intent(inout) :: endofperiod
678  ! -- local
679  integer(I4B) :: n
680  !
681  ! -- End of stress period and/or simulation?
682  n = kperats(kper)
683  if (abs(pertim - perlencurrent) < dtmin(n)) then
684  endofperiod = .true.
685  end if
686  return
Here is the caller graph for this function:

◆ ats_submit_delt()

subroutine, public adaptivetimestepmodule::ats_submit_delt ( integer(i4b), intent(in)  kstp,
integer(i4b), intent(in)  kper,
real(dp), intent(in)  dt,
character(len=*), intent(in)  sloc,
integer(i4b), intent(in), optional  idir 
)

Submit a preferred time step length. Alternatively, if idir is is passed, then either increase or decrease the submitted time step by the dtadj input variable.

Definition at line 516 of file ats.f90.

517  integer(I4B), intent(in) :: kstp
518  integer(I4B), intent(in) :: kper
519  real(DP), intent(in) :: dt
520  character(len=*), intent(in) :: sloc
521  integer(I4B), intent(in), optional :: idir
522  ! -- local
523  integer(I4B) :: n
524  real(DP) :: tsfact
525  real(DP) :: dt_temp
526  character(len=*), parameter :: fmtdtsubmit = &
527  &"(1x, 'ATS: ', A,' submitted a preferred time step size of ', G15.7)"
528 
529  if (isadaptiveperiod(kper)) then
530  n = kperats(kper)
531  tsfact = dtadj(n)
532  if (tsfact > done) then
533  !
534  ! -- if idir is present, then dt is a length that should be adjusted
535  ! (divided by or multiplied by) by dtadj. If idir is not present
536  ! then dt is the submitted time step.
537  if (present(idir)) then
538  dt_temp = dzero
539  if (idir == -1) then
540  dt_temp = dt / tsfact
541  else if (idir == 1) then
542  dt_temp = dt * tsfact
543  end if
544  else
545  dt_temp = dt
546  end if
547  if (kstp > 1 .and. dt_temp > dzero) then
548  write (iout, fmtdtsubmit) trim(adjustl(sloc)), dt_temp
549  end if
550  if (dt_temp > dzero .and. dt_temp < dtstable) then
551  ! -- Reset dtstable to a smaller value
552  dtstable = dt_temp
553  end if
554  end if
555  end if
556  return
Here is the call graph for this function:
Here is the caller graph for this function:

◆ isadaptiveperiod()

logical(lgp) function, public adaptivetimestepmodule::isadaptiveperiod ( integer(i4b), intent(in)  kper)

Check settings and determine if kper is an adaptive stress period.

Definition at line 44 of file ats.f90.

45  integer(I4B), intent(in) :: kper
46  logical(LGP) :: lv
47  lv = .false.
48  if (associated(kperats)) then
49  if (kperats(kper) > 0) then
50  lv = .true.
51  end if
52  end if
53  return
Here is the caller graph for this function:

Variable Documentation

◆ dt0

real(dp), dimension(:), pointer, contiguous adaptivetimestepmodule::dt0 => null()
private

Definition at line 29 of file ats.f90.

29  real(DP), dimension(:), pointer, contiguous :: dt0 => null() !< input array of initial time step sizes

◆ dtadj

real(dp), dimension(:), pointer, contiguous adaptivetimestepmodule::dtadj => null()
private

Definition at line 32 of file ats.f90.

32  real(DP), dimension(:), pointer, contiguous :: dtadj => null() !< input array of time step factors for shortening or increasing

◆ dtfailadj

real(dp), dimension(:), pointer, contiguous adaptivetimestepmodule::dtfailadj => null()
private

Definition at line 33 of file ats.f90.

33  real(DP), dimension(:), pointer, contiguous :: dtfailadj => null() !< input array of time step factors for shortening due to nonconvergence

◆ dtmax

real(dp), dimension(:), pointer, contiguous adaptivetimestepmodule::dtmax => null()
private

Definition at line 31 of file ats.f90.

31  real(DP), dimension(:), pointer, contiguous :: dtmax => null() !< input array of maximum time step sizes

◆ dtmin

real(dp), dimension(:), pointer, contiguous adaptivetimestepmodule::dtmin => null()
private

Definition at line 30 of file ats.f90.

30  real(DP), dimension(:), pointer, contiguous :: dtmin => null() !< input array of minimum time step sizes

◆ dtstable

real(dp), pointer, public adaptivetimestepmodule::dtstable => null()

Definition at line 26 of file ats.f90.

26  real(DP), public, pointer :: dtstable => null() !< delt value required for stability

◆ iperats

integer(i4b), dimension(:), pointer, contiguous adaptivetimestepmodule::iperats => null()
private

Definition at line 28 of file ats.f90.

28  integer(I4B), dimension(:), pointer, contiguous :: iperats => null() !< array of stress period numbers to apply ats (size MAXATS)

◆ kperats

integer(i4b), dimension(:), pointer, contiguous adaptivetimestepmodule::kperats => null()
private

Definition at line 27 of file ats.f90.

27  integer(I4B), dimension(:), pointer, contiguous :: kperats => null() !< array of stress period numbers to apply ats (size NPER)

◆ maxats

integer(i4b), pointer adaptivetimestepmodule::maxats => null()
private

Definition at line 25 of file ats.f90.

25  integer(I4B), pointer :: maxats => null() !< number of ats entries

◆ nper

integer(i4b), pointer adaptivetimestepmodule::nper => null()
private

Definition at line 24 of file ats.f90.

24  integer(I4B), pointer :: nper => null() !< set equal to nper

◆ parser

type(blockparsertype) adaptivetimestepmodule::parser
private

Definition at line 34 of file ats.f90.

34  type(BlockParserType) :: parser !< block parser for reading input file