[Nek5000-users] Increase DT in Usrchk based on CFL
nek5000-users at lists.mcs.anl.gov
nek5000-users at lists.mcs.anl.gov
Fri Jul 9 09:57:09 CDT 2010
On Fri, 9 Jul 2010, nek5000-users at lists.mcs.anl.gov wrote:
> Hi,
>
> I would like to increase my DT dynamically by checking the current CFL
> at each step. For example:
>
>
> if C < 0.15 then param(12) = param(12) + 1E-05Â
>
> I know I can adjust the time step in usrchk by setting param(12), but
> can I access C in the same manner by param(26)? Or is this only the
> parameter I set in the rea, and it is accessed by another variable?
>
> This issue occurs after a few 100 steps where my C drops and starts to
> settle around 0.1-0.15. The problem is I'm not sure that it always
> occurs around the same time steps, and there for would like to adjust
> it based on the actual value. I know nek will adjust DT if my C
> becomes too large, but when C becomes too small is the issue DT is
> not adjusted so long as it meets what I set in the rea .
>
Michael,
I use the following routine, which I call w/no arguments from userchk.
It takes your initial dt and sets it to dt/(scale^2), then ramps back
to your target dt value.
Paul
c-----------------------------------------------------------------------
subroutine usr_dt
c Reduce initial dt by scale*scale.
c Then ramp up by 5% each step to dt/scale.
c Then resume ramping after Step 120 till dt = dtmax.
include 'SIZE'
include 'TOTAL'
real dtmx1,dtmax,p93,p94,p95,p103
save dtmx1,dtmax,p93,p94,p95,p103
if (istep.eq.0) then
scale = 10.
dtmax = abs(param(12))
dtmx1 = dtmax/scale
dt = dtmx1/scale
p93 = param(93)
p94 = param(94)
p95 = param(95)
p103 = param(103)
endif
dt = dt*1.05
dt = min(dtmx1,dt)
param(12) = -dt
param(93) = p93 ! turn off projection till dt is fixed
param(94) = p94
param(95) = p95
if (dt.lt.dtmx1) then
param(93) = 0
param(94) = 0
param(95) = 0
p95 = istep
endif
if (istep.gt.120) dtmx1 = dtmax
if (nid.eq.0.and.istep.le.20) write(6,*) istep,dt,dtmax,' dtmax'
fexp = 0.85 ! filter strength doubled for first few steps
param(103) = p103*(dt/dtmax)**fexp ! adjust filter weight
if (nid.eq.0.and.istep.le.110)
$ write(6,*) istep,param(103),p103,' p103'
param(103) = p103 ! std filter weight
return
end
c-----------------------------------------------------------------------
More information about the Nek5000-users
mailing list