ADflow  v1.0
ADflow is a finite volume RANS solver tailored for gradient-based aerodynamic design optimization.
smoothers.F90
Go to the documentation of this file.
1 module smoothers
2 
3 contains
4  subroutine rungekuttasmoother
5  !
6  ! RungeKuttaSmoother performs one multi-stage runge kutta
7  ! explicit time step for the current multigrid level. On
8  ! entrance it is assumed that the residual and time step are
9  ! already computed. On exit the solution in the halo's contain
10  ! the latest values. However, the residual corresponding to
11  ! these values is not computed.
12  !
13  use constants
14  use blockpointers, only: w, p, wn, pn, il, jl, kl, ndom
15  use flowvarrefstate, only: nwf
16  use inputiteration, only: nrkstages
18  use iteration, only: currentlevel, rkstage
19  use utils, only: setpointers
21  use bcroutines, only: applyallbc
22  implicit none
23  !
24  ! Local variables.
25  !
26  integer(kind=intType) :: sps, nn, i, j, k, l
27 
28  ! Store the variables of the zeroth runge kutta stage.
29 
30  spectralloop: do sps = 1, ntimeintervalsspectral
31  domains: do nn = 1, ndom
32 
33  ! Set the pointers to this block.
34 
35  call setpointers(nn, currentlevel, sps)
36 
37  ! The variables stored in w.
38 
39  do l = 1, nwf
40  do k = 2, kl
41  do j = 2, jl
42  do i = 2, il
43  wn(i, j, k, l) = w(i, j, k, l)
44  end do
45  end do
46  end do
47  end do
48 
49  ! And the pressure.
50 
51  do k = 2, kl
52  do j = 2, jl
53  do i = 2, il
54  pn(i, j, k) = p(i, j, k)
55  end do
56  end do
57  end do
58 
59  end do domains
60  end do spectralloop
61 
62  ! Loop over all but the last Runge Kutta stages. Note that the
63  ! counter variable rkStage is defined in the module iteration.
64 
65  do rkstage = 1, (nrkstages - 1)
66 
67  ! Execute a Runge Kutta stage and exchange the externals.
68 
69  call executerkstage
70 
71  ! Compute the residuals for the next stage.
72 
73  call initres(1_inttype, nwf)
74  call sourceterms()
75  call residual
76 
77  end do
78 
79  ! Execute the last RK stage. Set rkStage to nRKStages, for
80  ! clarity; after the previous loop rkStage == nRKStages.
81 
83 
84  call executerkstage
85 
86  end subroutine rungekuttasmoother
87 
88  ! ==================================================================
89 
90  subroutine executerkstage
91  !
92  ! executeRkStage executes one runge kutta stage. The stage
93  ! number, rkStage, is defined in the local module iteration.
94  !
95  use blockpointers
96  use constants
97  use flowvarrefstate
98  use inputiteration
99  use inputphysics
101  use inputunsteady
102  use iteration
104  use haloexchange, only: whalo1, whalo2
105  use utils, only: setpointers
108  use residuals, only: residualaveraging
109  use bcroutines, only: applyallbc
110 
111  implicit none
112  !
113  ! Local parameter.
114  !
115  real(kind=realtype), parameter :: fivethird = five * third
116  !
117  ! Local variables.
118  !
119  integer(kind=intType) :: sps, nn, i, j, k, l
120 
121  real(kind=realtype) :: tmp, unsteadyimpl, mult
122  real(kind=realtype) :: dt, currentcfl, gm1, gm53
123  real(kind=realtype) :: v2, ovr, dp, factk, ru, rv, rw
124 
125  logical :: secondHalo, smoothResidual, correctForK
126 
127  ! Set the value of secondHalo and the current cfl number,
128  ! depending on the situation. On the finest grid in the mg cycle
129  ! the second halo is computed, otherwise not.
130 
131  if (currentlevel <= groundlevel) then
132  secondhalo = .true.
133  else
134  secondhalo = .false.
135  end if
136 
137  currentcfl = cflcoarse
138  if (currentlevel == 1) then
139  currentcfl = cfl
140  end if
141 
142  ! Determine whether or not residual averaging must be applied.
143 
144  if (resaveraging == noresaveraging) then
145  smoothresidual = .false.
146  else if (resaveraging == alwaysresaveraging) then
147  smoothresidual = .true.
148  else if (mod(rkstage, 2_inttype) == 1) then
149  smoothresidual = .true.
150  else
151  smoothresidual = .false.
152  end if
153 
154  ! Determine whether or not the total energy must be corrected
155  ! for the presence of the turbulent kinetic energy.
156 
157  if (kpresent) then
158  if ((currentlevel <= groundlevel)) then
159  correctfork = .true.
160  else
161  correctfork = .false.
162  end if
163  else
164  correctfork = .false.
165  end if
166  !
167  ! Compute the updates of the conservative variables.
168  !
169  ! Loop over the local number of blocks.
170 
171  domainsupdate: do nn = 1, ndom
172 
173  ! Determine the equation mode solved.
174 
175  select case (equationmode)
176 
177  case (steady, timespectral)
178 
179  ! Steady equations, including time spectral. Everything is
180  ! solved explicitly. Store the cfl number times the RK
181  ! coefficient in tmp.
182 
183  tmp = currentcfl * etark(rkstage)
184 
185  ! Loop over the number of spectral solutions. Note that
186  ! for the steady mode this value is 1.
187 
188  spectralsteady: do sps = 1, ntimeintervalsspectral
189 
190  ! Set the pointers to this block.
191 
192  call setpointers(nn, currentlevel, sps)
193 
194  ! Loop over the owned cells of this block.
195 
196  do k = 2, kl
197  do j = 2, jl
198  do i = 2, il
199 
200  ! Determine the local time step (multiplied by the
201  ! current rk coefficient).
202  if (lowspeedpreconditioner) then
203  dt = 0.8 * tmp * dtl(i, j, k)
204  else
205  dt = tmp * dtl(i, j, k)
206  end if
207 
208  ! Compute the updates of the flow field variables.
209 
210  dw(i, j, k, irho) = dw(i, j, k, irho) * dt
211  dw(i, j, k, imx) = dw(i, j, k, imx) * dt
212  dw(i, j, k, imy) = dw(i, j, k, imy) * dt
213  dw(i, j, k, imz) = dw(i, j, k, imz) * dt
214  dw(i, j, k, irhoe) = dw(i, j, k, irhoe) * dt
215 
216  end do
217  end do
218  end do
219 
220  end do spectralsteady
221 
222  !=============================================================
223 
224  case (unsteady)
225 
226  ! Unsteady equations are solved via the dual time
227  ! stepping technique. The leading term of the time
228  ! integrator must be treated implicitly for stability
229  ! reasons. This leads to a different multiplication
230  ! factor of the residual compared to the steady case.
231  ! Compute this additional term and store the cfl number
232  ! times the rk coefficient in tmp.
233 
234  unsteadyimpl = coeftime(0) * timeref / deltat
235  tmp = currentcfl * etark(rkstage)
236 
237  ! Loop over the number of spectral modes, although this is
238  ! always 1 for the unsteady mode. The loop is executed for
239  ! consistency reasons.
240 
241  spectralunsteady: do sps = 1, ntimeintervalsspectral
242 
243  ! Set the pointers to this block.
244 
245  call setpointers(nn, currentlevel, sps)
246 
247  ! Determine the updates of the flow field variables.
248  ! Owned cells only. The result is stored in dw.
249 
250  do k = 2, kl
251  do j = 2, jl
252  do i = 2, il
253 
254  ! Determine the local time step (multiplied by the
255  ! current rk coefficient) and the multiplication
256  ! factor for the residuals.
257 
258  dt = tmp * dtl(i, j, k)
259  mult = dt / (dt * unsteadyimpl * vol(i, j, k) + one)
260 
261  ! Compute the updates of the flow field variables.
262 
263  dw(i, j, k, irho) = dw(i, j, k, irho) * mult
264  dw(i, j, k, imx) = dw(i, j, k, imx) * mult
265  dw(i, j, k, imy) = dw(i, j, k, imy) * mult
266  dw(i, j, k, imz) = dw(i, j, k, imz) * mult
267  dw(i, j, k, irhoe) = dw(i, j, k, irhoe) * mult
268 
269  end do
270  end do
271  end do
272 
273  end do spectralunsteady
274 
275  end select
276 
277  end do domainsupdate
278  !
279  ! Compute the new state vector.
280  !
281  ! Loop over the number of spectral solutions and local blocks.
282 
283  spectralloop: do sps = 1, ntimeintervalsspectral
284  domainsstate: do nn = 1, ndom
285 
286  ! Set the pointers to this block.
287 
288  call setpointers(nn, currentlevel, sps)
289 
290  ! Possibility to smooth the updates.
291 
292  if (smoothresidual) then
293  call residualaveraging
294  end if
295  ! Flow variables.
296 
297  factk = zero
298  do k = 2, kl
299  do j = 2, jl
300  do i = 2, il
301 
302  ! Store gamma -1 and gamma - 5/3 a bit easier.
303 
304  gm1 = gamma(i, j, k) - one
305  gm53 = gamma(i, j, k) - fivethird
306 
307  ! Compute the pressure update from the conservative
308  ! updates. The expression used below is valid even if
309  ! cp is not constant. For the calorically perfect case,
310  ! cp is constant, it can be simplified to the usual
311  ! expression, but not for variable cp.
312 
313  ovr = one / w(i, j, k, irho)
314  v2 = w(i, j, k, ivx)**2 + w(i, j, k, ivy)**2 + w(i, j, k, ivz)**2
315  if (correctfork) factk = gm53 * w(i, j, k, itu1)
316 
317  dp = (ovr * p(i, j, k) + factk &
318  - gm1 * (ovr * w(i, j, k, irhoe) - v2)) * dw(i, j, k, irho) &
319  + gm1 * (dw(i, j, k, irhoe) - w(i, j, k, ivx) * dw(i, j, k, imx) &
320  - w(i, j, k, ivy) * dw(i, j, k, imy) &
321  - w(i, j, k, ivz) * dw(i, j, k, imz))
322 
323  ! Compute the density. Correct for negative values.
324 
325  w(i, j, k, irho) = wn(i, j, k, irho) - dw(i, j, k, irho)
326  w(i, j, k, irho) = max(w(i, j, k, irho), 1.e-4_realtype * rhoinf)
327 
328  ! Compute the velocities.
329 
330  ru = wn(i, j, k, irho) * wn(i, j, k, ivx) - dw(i, j, k, imx)
331  rv = wn(i, j, k, irho) * wn(i, j, k, ivy) - dw(i, j, k, imy)
332  rw = wn(i, j, k, irho) * wn(i, j, k, ivz) - dw(i, j, k, imz)
333 
334  ovr = one / w(i, j, k, irho)
335  w(i, j, k, ivx) = ovr * ru
336  w(i, j, k, ivy) = ovr * rv
337  w(i, j, k, ivz) = ovr * rw
338 
339  ! Compute the pressure. Correct for negative values.
340 
341  p(i, j, k) = pn(i, j, k) - dp
342  p(i, j, k) = max(p(i, j, k), 1.e-4_realtype * pinfcorr)
343 
344  end do
345  end do
346  end do
347 
348  ! Compute the total energy and possibly the laminar and eddy
349  ! viscosity in the owned cells.
350 
351  call computeetotblock(2_inttype, il, 2_inttype, jl, &
352  2_inttype, kl, correctfork)
353  call computelamviscosity(.false.)
354  call computeeddyviscosity(.false.)
355 
356  end do domainsstate
357  end do spectralloop
358 
359  ! Exchange the pressure if the pressure must be exchanged early.
360  ! Only the first halo's are needed, thus whalo1 is called.
361  ! Only on the fine grid.
362 
364  call whalo1(currentlevel, 1_inttype, 0_inttype, .true., &
365  .false., .false.)
366 
367  ! Apply all boundary conditions to all blocks on this level.
368 
369  call applyallbc(secondhalo)
370 
371  ! Exchange the solution. Either whalo1 or whalo2
372  ! must be called.
373 
374  if (secondhalo) then
375  call whalo2(currentlevel, 1_inttype, nwf, .true., &
376  .true., .true.)
377  else
378  call whalo1(currentlevel, 1_inttype, nwf, .true., &
379  .true., .true.)
380  end if
381 
382  end subroutine executerkstage
383  subroutine dadismoother
384  !
385  ! RungeKuttaSmoother performs one multi-stage runge kutta
386  ! explicit time step for the current multigrid level. On
387  ! entrance it is assumed that the residual and time step are
388  ! already computed. On exit the solution in the halo's contain
389  ! the latest values. However, the residual corresponding to
390  ! these values is not computed.
391  !
392  use blockpointers
393  use flowvarrefstate
394  use inputiteration
396  use iteration
398  implicit none
399 
400  if (groundlevel == 1) then
401  do subit = 1, nsubiterations - 1
402 
403  ! Execute a DADI step and exchange the externals.
404 
405  call executedadistep
406 
407  ! Compute the residuals for the next stage.
408  call initres(1_inttype, nwf)
409  call sourceterms()
410  call residual
411 
412  end do
413 
414  ! Set Subit to nSubiterations, for clarity;
416  end if
417 
418  ! Execute the last subiteration.
419  call executedadistep
420 
421  end subroutine dadismoother
422 
423  ! ==================================================================
424 
425  subroutine executedadistep
426  !
427  ! executeDADIStep executes one DADI step.
428  !
429  use blockpointers
430  use constants
431  use flowvarrefstate
432  use inputiteration
433  use inputphysics
435  use inputunsteady
436  use iteration
437  use utils, only: getcorrectfork, setpointers
438  use haloexchange, only: whalo1, whalo2
442  use bcroutines, only: applyallbc
443  implicit none
444  !
445  ! Local parameter.
446  !
447  real(kind=realtype), parameter :: fivethird = five * third
448  !
449  ! Local variables.
450  !
451  integer(kind=intType) :: sps, nn, i, j, k, l
452 
453  real(kind=realtype) :: unsteadyimpl, mult
454  real(kind=realtype) :: dt, currentcfl, gm1, gm53
455  real(kind=realtype) :: v2, ovr, dp, factk, ru, rv, rw
456 
457  logical :: secondHalo, smoothResidual, correctForK
458 
459  ! Set the value of secondHalo and the current cfl number,
460  ! depending on the situation. On the finest grid in the mg cycle
461  ! the second halo is computed, otherwise not.
462 
463  if (currentlevel <= groundlevel) then
464  secondhalo = .true.
465  else
466  secondhalo = .false.
467  end if
468 
469  currentcfl = cflcoarse
470  if (currentlevel == 1) then
471  currentcfl = cfl
472  end if
473 
474  ! Determine whether or not residual averaging must be applied.
475 
476  if (resaveraging == noresaveraging) then
477  smoothresidual = .false.
478  else if (resaveraging == alwaysresaveraging) then
479  smoothresidual = .true.
480  else if (mod(rkstage, 2_inttype) == 1) then
481  smoothresidual = .true.
482  else
483  smoothresidual = .false.
484  end if
485 
486  ! Determine whether or not the total energy must be corrected
487  ! for the presence of the turbulent kinetic energy.
488  correctfork = getcorrectfork()
489 
490  !
491  ! Compute the updates of the conservative variables.
492  !
493  ! Loop over the local number of blocks.
494 
495  domainsupdate: do nn = 1, ndom
496 
497  ! Determine the equation mode solved.
498 
499  select case (equationmode)
500 
501  case (steady, timespectral)
502 
503  ! Loop over the number of spectral solutions. Note that
504  ! for the steady mode this value is 1.
505 
506  spectralsteady: do sps = 1, ntimeintervalsspectral
507 
508  ! Set the pointers to this block.
509 
510  call setpointers(nn, currentlevel, sps)
511 
512  ! Loop over the owned cells of this block.
513 
514  do k = 2, kl
515  do j = 2, jl
516  do i = 2, il
517 
518  ! Determine the local time step
519 
520  dt = -currentcfl * dtl(i, j, k) * vol(i, j, k)
521 
522  ! Compute the updates of the flow field variables.
523 
524  dw(i, j, k, irho) = dw(i, j, k, irho) * dt
525  dw(i, j, k, imx) = dw(i, j, k, imx) * dt
526  dw(i, j, k, imy) = dw(i, j, k, imy) * dt
527  dw(i, j, k, imz) = dw(i, j, k, imz) * dt
528  dw(i, j, k, irhoe) = dw(i, j, k, irhoe) * dt
529 
530  end do
531  end do
532  end do
533 
534  call computedwdadi
535 
536  end do spectralsteady
537 
538  !=============================================================
539 
540  case (unsteady)
541 
542  ! Unsteady equations are solved via the dual time
543  ! stepping technique. The leading term of the time
544  ! integrator must be treated implicitly for stability
545  ! reasons. This leads to a different multiplication
546  ! factor of the residual compared to the steady case.
547 
548  unsteadyimpl = coeftime(0) * timeref / deltat
549 
550  ! Loop over the number of spectral modes, although this is
551  ! always 1 for the unsteady mode. The loop is executed for
552  ! consistency reasons.
553 
554  spectralunsteady: do sps = 1, ntimeintervalsspectral
555 
556  ! Set the pointers to this block.
557 
558  call setpointers(nn, currentlevel, sps)
559 
560  ! Determine the updates of the flow field variables.
561  ! Owned cells only. The result is stored in dw.
562 
563  do k = 2, kl
564  do j = 2, jl
565  do i = 2, il
566 
567  ! Determine the local time step
568 
569  dt = currentcfl * dtl(i, j, k)
570  mult = dt / (dt * unsteadyimpl * vol(i, j, k) + one)
571  mult = -mult * vol(i, j, k)
572 
573  dw(i, j, k, irho) = dw(i, j, k, irho) * mult
574  dw(i, j, k, imx) = dw(i, j, k, imx) * mult
575  dw(i, j, k, imy) = dw(i, j, k, imy) * mult
576  dw(i, j, k, imz) = dw(i, j, k, imz) * mult
577  dw(i, j, k, irhoe) = dw(i, j, k, irhoe) * mult
578 
579  end do
580  end do
581  end do
582 
583  call computedwdadi
584 
585  end do spectralunsteady
586 
587  end select
588 
589  end do domainsupdate
590  !
591  ! Compute the new state vector.
592  !
593  ! Loop over the number of spectral solutions and local blocks.
594 
595  spectralloop: do sps = 1, ntimeintervalsspectral
596  domainsstate: do nn = 1, ndom
597 
598  ! Set the pointers to this block.
599 
600  call setpointers(nn, currentlevel, sps)
601 
602  ! Possibility to smooth the updates.
603 
604  if (smoothresidual) call residualaveraging
605 
606  ! Flow variables.
607 
608  factk = zero
609  do k = 2, kl
610  do j = 2, jl
611  do i = 2, il
612 
613  ! Store gamma -1 and gamma - 5/3 a bit easier.
614 
615  gm1 = gamma(i, j, k) - one
616  gm53 = gamma(i, j, k) - fivethird
617 
618  ! Compute the pressure update from the conservative
619  ! updates. The expression used below is valid even if
620  ! cp is not constant. For the calorically perfect case,
621  ! cp is constant, it can be simplified to the usual
622  ! expression, but not for variable cp.
623 
624  ovr = one / w(i, j, k, irho)
625  v2 = w(i, j, k, ivx)**2 + w(i, j, k, ivy)**2 + w(i, j, k, ivz)**2
626  if (correctfork) factk = gm53 * w(i, j, k, itu1)
627 
628  dp = (ovr * p(i, j, k) + factk &
629  - gm1 * (ovr * w(i, j, k, irhoe) - v2)) * dw(i, j, k, irho) &
630  + gm1 * (dw(i, j, k, irhoe) - w(i, j, k, ivx) * dw(i, j, k, imx) &
631  - w(i, j, k, ivy) * dw(i, j, k, imy) &
632  - w(i, j, k, ivz) * dw(i, j, k, imz))
633 
634  ! Compute the velocities.
635 
636  ru = w(i, j, k, irho) * w(i, j, k, ivx) - dw(i, j, k, imx)
637  rv = w(i, j, k, irho) * w(i, j, k, ivy) - dw(i, j, k, imy)
638  rw = w(i, j, k, irho) * w(i, j, k, ivz) - dw(i, j, k, imz)
639 
640  ! Compute the density. Correct for negative values.
641 
642  w(i, j, k, irho) = w(i, j, k, irho) - dw(i, j, k, irho)
643  w(i, j, k, irho) = max(w(i, j, k, irho), 1.e-4_realtype * rhoinf)
644 
645  ovr = one / w(i, j, k, irho)
646  w(i, j, k, ivx) = ovr * ru
647  w(i, j, k, ivy) = ovr * rv
648  w(i, j, k, ivz) = ovr * rw
649 
650  ! Compute the pressure. Correct for negative values.
651 
652  p(i, j, k) = p(i, j, k) - dp
653  p(i, j, k) = max(p(i, j, k), 1.e-4_realtype * pinfcorr)
654 
655  end do
656  end do
657  end do
658 
659  ! Compute the total energy and possibly the laminar and eddy
660  ! viscosity in the owned cells.
661 
662  call computeetotblock(2_inttype, il, 2_inttype, jl, &
663  2_inttype, kl, correctfork)
664  call computelamviscosity(.false.)
665  call computeeddyviscosity(.false.)
666 
667  end do domainsstate
668  end do spectralloop
669 
670  ! Exchange the pressure if the pressure must be exchanged early.
671  ! Only the first halo's are needed, thus whalo1 is called.
672  ! Only on the fine grid.
673 
675  call whalo1(currentlevel, 1_inttype, 0_inttype, .true., &
676  .false., .false.)
677 
678  ! Apply all boundary conditions to all blocks on this level.
679 
680  call applyallbc(secondhalo)
681 
682  ! Exchange the solution. Either whalo1 or whalo2
683  ! must be called.
684 
685  if (secondhalo) then
686  call whalo2(currentlevel, 1_inttype, nwf, .true., &
687  .true., .true.)
688  else
689  call whalo1(currentlevel, 1_inttype, nwf, .true., &
690  .true., .true.)
691  end if
692 
693  end subroutine executedadistep
694 
695 end module smoothers
subroutine applyallbc(secondHalo)
Definition: BCRoutines.F90:16
real(kind=realtype), dimension(:, :, :), pointer gamma
integer(kind=inttype) jl
real(kind=realtype), dimension(:, :, :), pointer p
real(kind=realtype), dimension(:, :, :, :), pointer w
real(kind=realtype), dimension(:, :, :, :), pointer wn
real(kind=realtype), dimension(:, :, :, :), pointer dw
real(kind=realtype), dimension(:, :, :), pointer vol
real(kind=realtype), dimension(:, :, :), pointer dtl
real(kind=realtype), dimension(:, :, :), pointer pn
integer(kind=inttype) kl
integer(kind=inttype) il
real(kind=realtype), parameter zero
Definition: constants.F90:71
real(kind=realtype), parameter third
Definition: constants.F90:81
integer, parameter itu1
Definition: constants.F90:40
integer(kind=inttype), parameter alwaysresaveraging
Definition: constants.F90:218
integer, parameter irho
Definition: constants.F90:34
integer, parameter imx
Definition: constants.F90:65
integer(kind=inttype), parameter timespectral
Definition: constants.F90:115
integer, parameter ivx
Definition: constants.F90:35
integer(kind=inttype), parameter unsteady
Definition: constants.F90:115
integer, parameter irhoe
Definition: constants.F90:38
integer(kind=inttype), parameter noresaveraging
Definition: constants.F90:218
real(kind=realtype), parameter five
Definition: constants.F90:76
real(kind=realtype), parameter one
Definition: constants.F90:72
integer(kind=inttype), parameter steady
Definition: constants.F90:115
integer, parameter ivz
Definition: constants.F90:37
integer, parameter imz
Definition: constants.F90:67
integer, parameter imy
Definition: constants.F90:66
integer, parameter ivy
Definition: constants.F90:36
subroutine computelamviscosity(includeHalos)
Definition: flowUtils.F90:1202
subroutine computeetotblock(iStart, iEnd, jStart, jEnd, kStart, kEnd, correctForK)
Definition: flowUtils.F90:553
real(kind=realtype) pinfcorr
integer(kind=inttype) nwf
real(kind=realtype) rhoinf
real(kind=realtype) timeref
subroutine whalo2(level, start, end, commPressure, commGamma, commViscous)
subroutine whalo1(level, start, end, commPressure, commGamma, commViscous)
Definition: haloExchange.F90:7
logical lowspeedpreconditioner
Definition: inputParam.F90:96
real(kind=realtype) cflcoarse
Definition: inputParam.F90:275
integer(kind=inttype) resaveraging
Definition: inputParam.F90:267
integer(kind=inttype) nsubiterations
Definition: inputParam.F90:265
real(kind=realtype), dimension(:), allocatable etark
Definition: inputParam.F90:283
integer(kind=inttype) nrkstages
Definition: inputParam.F90:264
real(kind=realtype) cfl
Definition: inputParam.F90:275
integer(kind=inttype) equationmode
Definition: inputParam.F90:583
integer(kind=inttype) ntimeintervalsspectral
Definition: inputParam.F90:645
real(kind=realtype) deltat
Definition: inputParam.F90:733
integer(kind=inttype) currentlevel
Definition: iteration.f90:18
integer(kind=inttype) subit
Definition: iteration.f90:19
integer(kind=inttype) groundlevel
Definition: iteration.f90:18
integer(kind=inttype) rkstage
Definition: iteration.f90:19
real(kind=realtype), dimension(:), allocatable coeftime
Definition: iteration.f90:80
logical exchangepressureearly
Definition: iteration.f90:53
subroutine residualaveraging
Definition: residuals.F90:1786
subroutine sourceterms
Definition: residuals.F90:1004
subroutine computedwdadi
Definition: residuals.F90:1063
subroutine residual
Definition: residuals.F90:1029
subroutine initres(varStart, varEnd)
Definition: residuals.F90:965
subroutine executerkstage
Definition: smoothers.F90:91
subroutine executedadistep
Definition: smoothers.F90:426
subroutine rungekuttasmoother
Definition: smoothers.F90:5
subroutine dadismoother
Definition: smoothers.F90:384
subroutine computeeddyviscosity(includeHalos)
Definition: turbUtils.F90:581
Definition: utils.F90:1
logical function getcorrectfork()
Definition: utils.F90:487
subroutine setpointers(nn, mm, ll)
Definition: utils.F90:3237