[Nek5000-users] Full restart during a simulation
nek5000-users at lists.mcs.anl.gov
nek5000-users at lists.mcs.anl.gov
Mon Jun 24 09:17:51 CDT 2013
Hi Andrea,
I'm glad you're making progress. Like you, I was surprised that just copying
pressure & velocity for 4 timesteps did not suffice. It should, in my opinion,
but I've not had a chance to figure out why just yet.
Regarding moving meshes, there are mass matrices to be lagged (bm1lag), and
of course you'll need to store the geometry, just as you did velocity/pressure.
There may be some other arrays but I can't think of exactly which those would
be at the moment.
A quick
grep -i lag *.f | grep -v Lagrang
shows several.... I notice "dtlag()" ... which would be important if you
don't have fixed dt.
Paul
----- Original Message -----
From: nek5000-users at lists.mcs.anl.gov
To: nek5000-users at lists.mcs.anl.gov
Sent: Monday, June 24, 2013 8:18:52 AM
Subject: Re: [Nek5000-users] Full restart during a simulation
Hi Neks,
I manage to solve part of the issue. Now I'm copyng all the variables (vx, vxlag, pr ,prlag, abx1,abx2) at a certain step (let's say istep=10). At istep=20 I replace the variables with the old ones and I call the routines setup_convect to save the new convective velocities. For a simulation with no moving boundaries the procedure works fine.
I tried to use the same method also for a simulation where I have a moving boundary (forcing the regenation of the jacobians with call geom_reset(1)), but I have correct results only if I set torder=1. Any hints?
Andrea
subroutine userchk
include 'SIZE'
include 'TOTAL'
include 'RESTART'
parameter (lt=lx1*ly1*lz1*lelv)
common /scrns/ vort(lt,3), w1(lt), w2(lt)
common /body/ ycyl,ycylold,vcyl,vcylold,vcylk,vrif
real x0(3)
save x0
data x0 /3*0/
real scale
integer iostept
integer maxsotiter
common /indici/ indcyl(lx1,ly1,lz1,lelv)
common /contatori/ icont,istepold,timeold
integer icont, istepold,n,npre,firstit
common /olddati/ vxo(lx1,ly1,lz1,lelv),vyo(lx1,ly1,lz1,lelv),
$ vzo(lx1,ly1,lz1,lelv),xm1o(lx1,ly1,lz1,lelv),
$ ym1o(lx1,ly1,lz1,lelv),zm1o(lx1,ly1,lz1,lelv),
$ vxlago(lx1,ly1,lz1,lelv,2),vylago(lx1,ly1,lz1,lelv,2),
$ vzlago(lx1,ly1,lz1,lelv,2)
$ , ABX1o (LX1,LY1,LZ1,LELV)
$ , ABY1o (LX1,LY1,LZ1,LELV)
$ , ABZ1o (LX1,LY1,LZ1,LELV)
$ , ABX2o (LX1,LY1,LZ1,LELV)
$ , ABY2o (LX1,LY1,LZ1,LELV)
$ , ABZ2o (LX1,LY1,LZ1,LELV)
$ , PRLAGo (LX2,LY2,LZ2,LELV,LORDER2),pro(lx2,ly2,lz2,lelv)
$ , wxo(lx1m,ly1m,lz1m,lelt),wyo(lx1m,ly1m,lz1m,lelt),
$ wzo(lx1m,ly1m,lz1m,lelt)
$ , WXLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WYLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WZLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , W1MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W2MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W3MASKo(LX1M,LY1M,LZ1M,LELT)
$ , WMULTo (LX1M,LY1M,LZ1M,LELT)
real alpha
real tollit
real errvc
integer npcyl
if (istep.eq.0) then
call findcyl(indcyl)
endif
scale=1.
call evalYcyl
write(6,*) "ycyl=",ycyl
n=lx1*ly1*lz1*lelv
npre=lx2*ly2*lz2*lelv
if (istep.eq.10) then
call copy_step
endif
if(istep.eq.20) then
call load_step
endif
call torque_calc(scale,x0,.true.,.false.)
return
end
c -------------------------------------------------------------------------
subroutine copy_step
include 'SIZE'
include 'TOTAL'
include 'RESTART'
common /indici/ indcyl(lx1,ly1,lz1,lelv)
common /contatori/ icont,istepold,timeold,firstit
integer icont, istepold,n,npre,firstit
common /olddati/ vxo(lx1,ly1,lz1,lelv),vyo(lx1,ly1,lz1,lelv),
$ vzo(lx1,ly1,lz1,lelv),xm1o(lx1,ly1,lz1,lelv),
$ ym1o(lx1,ly1,lz1,lelv),zm1o(lx1,ly1,lz1,lelv),
$ vxlago(lx1,ly1,lz1,lelv,2),vylago(lx1,ly1,lz1,lelv,2),
$ vzlago(lx1,ly1,lz1,lelv,2)
$ , ABX1o (LX1,LY1,LZ1,LELV)
$ , ABY1o (LX1,LY1,LZ1,LELV)
$ , ABZ1o (LX1,LY1,LZ1,LELV)
$ , ABX2o (LX1,LY1,LZ1,LELV)
$ , ABY2o (LX1,LY1,LZ1,LELV)
$ , ABZ2o (LX1,LY1,LZ1,LELV)
$ , PRLAGo (LX2,LY2,LZ2,LELV,LORDER2),pro(lx2,ly2,lz2,lelv)
$ , wxo(lx1m,ly1m,lz1m,lelt),wyo(lx1m,ly1m,lz1m,lelt),
$ wzo(lx1m,ly1m,lz1m,lelt)
$ , WXLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WYLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WZLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , W1MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W2MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W3MASKo(LX1M,LY1M,LZ1M,LELT)
$ , WMULTo (LX1M,LY1M,LZ1M,LELT), fyold
n=lx1*ly1*lz1*lelv
npre=lx2*ly2*lz2*lelv
call opcopy(vxo,vyo,vzo,vx,vy,vz)
call opcopy(wxo,wyo,wzo,wx,wy,wz)
do i=1,lorder-1
call opcopy(vxlago(1,1,1,1,i),vylago(1,1,1,1,i),
$ vzlago(1,1,1,1,i),vxlag(1,1,1,1,i),vylag(1,1,1,1,i),
$ vzlag(1,1,1,1,i))
call opcopy(wxlago(1,1,1,1,i),wylago(1,1,1,1,i),
$ wzlago(1,1,1,1,i),wxlag(1,1,1,1,i),wylag(1,1,1,1,i),
$ wzlag(1,1,1,1,i))
enddo
call copy(w1masko,w1mask,n)
call copy(w2masko,w2mask,n)
call copy(w3masko,w3mask,n)
call copy(wmulto,wmult,n)
call copy(abx1o,abx1,n)
call copy(aby1o,aby1,n)
call copy(abz1o,abz1,n)
call copy(abx2o,abx2,n)
call copy(aby2o,aby2,n)
call copy(abz2o,abz2,n)
do i=1,lorder2
call copy(prlago(1,1,1,1,i),prlag(1,1,1,1,i),npre)
enddo
call copy(pro,pr,npre)
call opcopy(xm1o,ym1o,zm1o,xm1,ym1,zm1)
return
end
c--------------------------------------------
subroutine load_step
include 'SIZE'
include 'TOTAL'
include 'RESTART'
parameter (lt=lx1*ly1*lz1*lelv)
common /indici/ indcyl(lx1,ly1,lz1,lelv)
common /contatori/ icont,istepold,timeold,firstit
integer icont, istepold,n,npre,firstit
common /olddati/ vxo(lx1,ly1,lz1,lelv),vyo(lx1,ly1,lz1,lelv),
$ vzo(lx1,ly1,lz1,lelv),xm1o(lx1,ly1,lz1,lelv),
$ ym1o(lx1,ly1,lz1,lelv),zm1o(lx1,ly1,lz1,lelv),
$ vxlago(lx1,ly1,lz1,lelv,2),vylago(lx1,ly1,lz1,lelv,2),
$ vzlago(lx1,ly1,lz1,lelv,2)
$ , ABX1o (LX1,LY1,LZ1,LELV)
$ , ABY1o (LX1,LY1,LZ1,LELV)
$ , ABZ1o (LX1,LY1,LZ1,LELV)
$ , ABX2o (LX1,LY1,LZ1,LELV)
$ , ABY2o (LX1,LY1,LZ1,LELV)
$ , ABZ2o (LX1,LY1,LZ1,LELV)
$ , PRLAGo (LX2,LY2,LZ2,LELV,LORDER2),pro(lx2,ly2,lz2,lelv)
$ , wxo(lx1m,ly1m,lz1m,lelt),wyo(lx1m,ly1m,lz1m,lelt),
$ wzo(lx1m,ly1m,lz1m,lelt)
$ , WXLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WYLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , WZLAGo (LX1M,LY1M,LZ1M,LELT,LORDER-1)
$ , W1MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W2MASKo(LX1M,LY1M,LZ1M,LELT)
$ , W3MASKo(LX1M,LY1M,LZ1M,LELT)
$ , WMULTo (LX1M,LY1M,LZ1M,LELT), fyold
n=lx1*ly1*lz1*lelv
npre=lx2*ly2*lz2*lelv
call opcopy(vx,vy,vz,vxo,vyo,vzo)
call opcopy(wx,wy,wz,wxo,wyo,wzo)
do i=1,lorder-1
call opcopy(vxlag(1,1,1,1,i),vylag(1,1,1,1,i),
$ vzlag(1,1,1,1,i),vxlago(1,1,1,1,i),vylago(1,1,1,1,i),
$ vzlago(1,1,1,1,i))
call opcopy(wxlag(1,1,1,1,i),wylag(1,1,1,1,i),
$ wzlag(1,1,1,1,i),wxlago(1,1,1,1,i),wylago(1,1,1,1,i),
$ wzlago(1,1,1,1,i))
enddo
call copy(abz1,abz1o,n)
call copy(abx1,abx1o,n)
call copy(aby1,aby1o,n)
call copy(abz1,abz1o,n)
call copy(abx2,abx2o,n)
call copy(aby2,aby2o,n)
call copy(abz2,abz2o,n)
call copy(w1mask,w1masko,n)
call copy(w2mask,w2masko,n)
call copy(w3mask,w3masko,n)
call copy(wmult,wmulto,n)
do i=1,lorder2
call copy(prlag(1,1,1,1,i),prlago(1,1,1,1,i),npre)
enddo
call copy(pr,pro,npre)
call opcopy(xm1,ym1,zm1,xm1o,ym1o,zm1o)
call geom_reset(1)
call setup_convect(1)
call setup_convect(2)
c call setup_convect(3)
return
end
_______________________________________________
Nek5000-users mailing list
Nek5000-users at lists.mcs.anl.gov
https://lists.mcs.anl.gov/mailman/listinfo/nek5000-users
More information about the Nek5000-users
mailing list