[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 10:08:25 CDT 2010
This routine sounds like what I need to get past the first few 100 steps and then get back to where I want to be. Is this all that needs to be added to usr?
Also, If I wanted to, can I access the max courrant number by 'COURNO'?
----- Original Message -----
From: nek5000-users at lists.mcs.anl.gov
To: "Nekton User List" <nek5000-users at lists.mcs.anl.gov>
Sent: Friday, July 9, 2010 9:57:09 AM GMT -06:00 US/Canada Central
Subject: Re: [Nek5000-users] Increase DT in Usrchk based on CFL
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-----------------------------------------------------------------------
_______________________________________________ Nek5000-users mailing list Nek5000-users at lists.mcs.anl.gov https://lists.mcs.anl.gov/mailman/listinfo/nek5000-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/nek5000-users/attachments/20100709/eb0c8fd5/attachment.html>
More information about the Nek5000-users
mailing list