159599516SKenneth E. Jansen subroutine itrdrv (y, ac, uold, x, 259599516SKenneth E. Jansen & iBC, BC, 359599516SKenneth E. Jansen & iper, ilwork, shp, 459599516SKenneth E. Jansen & shgl, shpb, shglb, 559599516SKenneth E. Jansen & ifath, velbar, nsons ) 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc---------------------------------------------------------------------- 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc This iterative driver is the semi-discrete, predictor multi-corrector 1059599516SKenneth E. Jansenc algorithm. It contains the Hulbert Generalized Alpha method which 1159599516SKenneth E. Jansenc is 2nd order accurate for Rho_inf from 0 to 1. The method can be 1259599516SKenneth E. Jansenc made first-order accurate by setting Rho_inf=-1. It uses a 1359599516SKenneth E. Jansenc GMRES iterative solver. 1459599516SKenneth E. Jansenc 1559599516SKenneth E. Jansenc working arrays: 1659599516SKenneth E. Jansenc y (nshg,ndof) : Y variables 1759599516SKenneth E. Jansenc x (nshg,nsd) : node coordinates 1859599516SKenneth E. Jansenc iBC (nshg) : BC codes 1959599516SKenneth E. Jansenc BC (nshg,ndofBC) : BC constraint parameters 2059599516SKenneth E. Jansenc iper (nshg) : periodicity table 2159599516SKenneth E. Jansenc 2259599516SKenneth E. Jansenc shape functions: 2359599516SKenneth E. Jansenc shp (nshape,ngauss) : interior element shape functions 2459599516SKenneth E. Jansenc shgl (nsd,nshape,ngauss) : local shape function gradients 2559599516SKenneth E. Jansenc shpb (nshapeb,ngaussb) : boundary element shape functions 2659599516SKenneth E. Jansenc shglb (nsd,nshapeb,ngaussb) : bdry. elt. shape gradients 2759599516SKenneth E. Jansenc 2859599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 2959599516SKenneth E. Jansenc---------------------------------------------------------------------- 3059599516SKenneth E. Jansenc 3159599516SKenneth E. Jansen use pvsQbi !gives us splag (the spmass at the end of this run 3259599516SKenneth E. Jansen use specialBC !gives us itvn 33*0d32f9a8SKenneth E. Jansen use timedataC !allows collection of time series 34513954efSKenneth E. Jansen use MachControl !PID to control the inlet velocity. 35513954efSKenneth E. Jansen use blowerControl !gives us BC_enable 3659599516SKenneth E. Jansen use turbSA 37513954efSKenneth E. Jansen use wallData 38513954efSKenneth E. Jansen use fncorpmod 3959599516SKenneth E. Jansen 4059599516SKenneth E. Jansen include "common.h" 4159599516SKenneth E. Jansen include "mpif.h" 4259599516SKenneth E. Jansen include "auxmpi.h" 4359599516SKenneth E. Jansen 4459599516SKenneth E. Jansenc 4559599516SKenneth E. Jansen dimension y(nshg,ndof), ac(nshg,ndof), 4659599516SKenneth E. Jansen & yold(nshg,ndof), acold(nshg,ndof), 4759599516SKenneth E. Jansen & x(numnp,nsd), iBC(nshg), 4859599516SKenneth E. Jansen & BC(nshg,ndofBC), ilwork(nlwork), 4959599516SKenneth E. Jansen & iper(nshg), uold(nshg,nsd) 5059599516SKenneth E. Jansenc 51513954efSKenneth E. Jansen dimension res(nshg,nflow), 5259599516SKenneth E. Jansen & rest(nshg), solinc(nshg,ndof) 5359599516SKenneth E. Jansenc 5459599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 5559599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 5659599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 5759599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 5859599516SKenneth E. Jansen real*8 almit, alfit, gamit 5959599516SKenneth E. Jansen dimension ifath(numnp), velbar(nfath,ndof), nsons(nfath) 6059599516SKenneth E. Jansen real*8 rerr(nshg,10),ybar(nshg,ndof+8) ! 8 is for avg. of square as uu, vv, ww, pp, TT, uv, uw, and vw 61513954efSKenneth E. Jansen real*8, allocatable, dimension(:,:) :: vortG 62513954efSKenneth E. Jansen real*8, allocatable, dimension(:,:,:) :: BDiag 63513954efSKenneth E. Jansen 64513954efSKenneth E. Jansen! integer, allocatable, dimension(:) :: iv_rank !used with MRasquin's version of probe points 65513954efSKenneth E. Jansen! integer :: iv_rankpernode, iv_totnodes, iv_totcores 66513954efSKenneth E. Jansen! integer :: iv_node, iv_core, iv_thread 67513954efSKenneth E. Jansen 6859599516SKenneth E. Jansen! assuming three profiles to control (inlet, bottom FC and top FC) 6959599516SKenneth E. Jansen! store velocity profile set via BC 7059599516SKenneth E. Jansen real*8 vbc_prof(nshg,3) 71513954efSKenneth E. Jansen character(len=60) fvarts 7259599516SKenneth E. Jansen integer ifuncs(6), iarray(10) 7359599516SKenneth E. Jansen real*8 elDw(numel) ! element average of DES d variable 7459599516SKenneth E. Jansenc 7559599516SKenneth E. Jansenc Here are the data structures for sparse matrix GMRES 7659599516SKenneth E. Jansenc 7759599516SKenneth E. Jansen integer, allocatable, dimension(:,:) :: rowp 7859599516SKenneth E. Jansen integer, allocatable, dimension(:) :: colm 7959599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: lhsK 8059599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: EGmass 8159599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: EGmasst 8259599516SKenneth E. Jansen 83513954efSKenneth E. Jansen integer iTurbWall(nshg) 84513954efSKenneth E. Jansen real*8 yInlet(3), yInletg(3) 85513954efSKenneth E. Jansen integer imapped, imapInlet(nshg) !for now, used for setting Blower conditions 86513954efSKenneth E. Jansen! real*8 M_th, M_tc, M_tt 87513954efSKenneth E. Jansen! logical exMc 88513954efSKenneth E. Jansen! real*8 vBC, vBCg 89513954efSKenneth E. Jansen real*8 vortmax, vortmaxg 9059599516SKenneth E. Jansen 91513954efSKenneth E. Jansen iprec=0 !PETSc - Disable PHASTA's BDiag. TODO: Preprocssor Switch 9259599516SKenneth E. Jansen 93513954efSKenneth E. Jansen call findTurbWall(iTurbWall) 9459599516SKenneth E. Jansen 95513954efSKenneth E. Jansen!------- 96513954efSKenneth E. Jansen! SETUP 97513954efSKenneth E. Jansen!------- 9859599516SKenneth E. Jansen 99513954efSKenneth E. Jansen !HACK for debugging suction 100513954efSKenneth E. Jansen! call Write_Debug(myrank, 'wallNormal'//char(0), 101513954efSKenneth E. Jansen! & 'wnorm'//char(0), wnorm, 102513954efSKenneth E. Jansen! & 'd', nshg, 3, lstep) 103513954efSKenneth E. Jansen 104513954efSKenneth E. Jansen !Probe Point Setup 105513954efSKenneth E. Jansen call initProbePoints() 106513954efSKenneth E. Jansen if(exts) then !exts is set in initProbePoints 107513954efSKenneth E. Jansen write(fvarts, "('./varts/varts.', I0, '.dat')") lstep 108513954efSKenneth E. Jansen fvarts = trim(fvarts) 10959599516SKenneth E. Jansen 11059599516SKenneth E. Jansen if(myrank .eq. master) then 111513954efSKenneth E. Jansen call TD_writeHeader(fvarts) 112513954efSKenneth E. Jansen endif 11359599516SKenneth E. Jansen endif 11459599516SKenneth E. Jansen 115513954efSKenneth E. Jansen !Mach Control Setup 116513954efSKenneth E. Jansen call MC_init(Delt, lstep, BC) 117513954efSKenneth E. Jansen exMC = exMC .and. exts !If probe points aren't available, turn 118513954efSKenneth E. Jansen !the Mach Control off 119513954efSKenneth E. Jansen if(exMC) then 120513954efSKenneth E. Jansen call MC_applyBC(BC) 121513954efSKenneth E. Jansen call MC_printState() 12259599516SKenneth E. Jansen endif 12359599516SKenneth E. Jansen 124513954efSKenneth E. Jansen 12559599516SKenneth E. Jansenc 12659599516SKenneth E. Jansenc.... open history and aerodynamic forces files 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansen if (myrank .eq. master) then 12959599516SKenneth E. Jansen open (unit=ihist, file=fhist, status='unknown') 13059599516SKenneth E. Jansen open (unit=iforce, file=fforce, status='unknown') 13159599516SKenneth E. Jansen endif 13259599516SKenneth E. Jansenc 13359599516SKenneth E. Jansenc 13459599516SKenneth E. Jansenc.... initialize 13559599516SKenneth E. Jansenc 13659599516SKenneth E. Jansen ifuncs = 0 ! func. evaluation counter 13759599516SKenneth E. Jansen istep = 0 13859599516SKenneth E. Jansen ntotGM = 0 ! number of GMRES iterations 13959599516SKenneth E. Jansen time = 0 14059599516SKenneth E. Jansen yold = y 14159599516SKenneth E. Jansen acold = ac 142513954efSKenneth E. Jansen 143513954efSKenneth E. Jansen!Blower Setup 144513954efSKenneth E. Jansen call BC_init(Delt, lstep, BC) !Note: sets BC_enable 145513954efSKenneth E. Jansen! fix the yold values to the reset BC 146513954efSKenneth E. Jansen if(BC_enable) call itrBC (yold, ac, iBC, BC, iper, ilwork) 147513954efSKenneth E. Jansen! without the above, second solve of first steps is fouled up 148513954efSKenneth E. Jansen! 14959599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 1) then 15059599516SKenneth E. Jansenc 15159599516SKenneth E. Jansenc generate the sparse data fill vectors 15259599516SKenneth E. Jansenc 15359599516SKenneth E. Jansen allocate (rowp(nshg,nnz)) 15459599516SKenneth E. Jansen allocate (colm(nshg+1)) 15559599516SKenneth E. Jansen call genadj(colm, rowp, icnt ) ! preprocess the adjacency list 15659599516SKenneth E. Jansen 15759599516SKenneth E. Jansen nnz_tot=icnt ! this is exactly the number of non-zero 15859599516SKenneth E. Jansen ! blocks on this proc 159513954efSKenneth E. Jansen if(usingpetsc.eq.1) then 160513954efSKenneth E. Jansen allocate (BDiag(1,1,1)) 161513954efSKenneth E. Jansen else 162513954efSKenneth E. Jansen allocate (BDiag(nshg,nflow,nflow)) 16359599516SKenneth E. Jansen allocate (lhsK(nflow*nflow,nnz_tot)) 16459599516SKenneth E. Jansen endif 165513954efSKenneth E. Jansen endif 16659599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 3) then 16759599516SKenneth E. Jansenc 16859599516SKenneth E. Jansenc generate the ebe data fill vectors 16959599516SKenneth E. Jansenc 17059599516SKenneth E. Jansen nedof=nflow*nshape 17159599516SKenneth E. Jansen allocate (EGmass(numel,nedof*nedof)) 17259599516SKenneth E. Jansen endif 17359599516SKenneth E. Jansen 17459599516SKenneth E. Jansenc.......................................... 17559599516SKenneth E. Jansen rerr = zero 17659599516SKenneth E. Jansen ybar(:,1:ndof) = y(:,1:ndof) 17759599516SKenneth E. Jansen do idof=1,5 17859599516SKenneth E. Jansen ybar(:,ndof+idof) = y(:,idof)*y(:,idof) 17959599516SKenneth E. Jansen enddo 18059599516SKenneth E. Jansen ybar(:,ndof+6) = y(:,1)*y(:,2) 18159599516SKenneth E. Jansen ybar(:,ndof+7) = y(:,1)*y(:,3) 18259599516SKenneth E. Jansen ybar(:,ndof+8) = y(:,2)*y(:,3) 18359599516SKenneth E. Jansenc......................................... 18459599516SKenneth E. Jansen 185513954efSKenneth E. Jansen! change the freestream and inflow eddy viscosity to reflect different 186513954efSKenneth E. Jansen! levels of freestream turbulence 187513954efSKenneth E. Jansen! 188513954efSKenneth E. Jansen! First override boundary condition values 189513954efSKenneth E. Jansen! USES imapInlet from Mach Control so if that gets conditionaled away 190513954efSKenneth E. Jansen! it has to know if it is needed here 191513954efSKenneth E. Jansen! 192513954efSKenneth E. Jansen if(isetEV_IC_BC.eq.1) then 193513954efSKenneth E. Jansen allocate(vortG(nshg, 4)) 194513954efSKenneth E. Jansen call vortGLB(yold, x, shp, shgl, ilwork, vortG) 195513954efSKenneth E. Jansen vortmax=maxval(abs(vortG(:,4))) !column 4 is the magnitude of the shear tensor - should actually probably be calld shearmax instead of vortmax 196513954efSKenneth E. Jansen write(*,*) "vortmax = ", vortmax 19759599516SKenneth E. Jansen 198513954efSKenneth E. Jansen !Find the maximum shear in the simulation 199513954efSKenneth E. Jansen if(numpe.gt.1) then 200513954efSKenneth E. Jansen call MPI_ALLREDUCE(vortmax, vortmaxg, 1, 201513954efSKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD, ierr ) 202513954efSKenneth E. Jansen vortmax = vortmaxg 203513954efSKenneth E. Jansen endif 20459599516SKenneth E. Jansen 205513954efSKenneth E. Jansen !Apply eddy viscosity at the inlet 206513954efSKenneth E. Jansen do i=1,icountInlet ! for now only coded to catch primary inlet, not blower 207513954efSKenneth E. Jansen BC(imapInlet(i),7)=evis_IC_BC 208513954efSKenneth E. Jansen enddo 209513954efSKenneth E. Jansen 210513954efSKenneth E. Jansen !Apply eddy viscosity through the quasi-inviscid portion of the domain 211513954efSKenneth E. Jansen do i = 1,nshg 212513954efSKenneth E. Jansen if(abs(vortG(i,4)).ge.vortmax*0.01) yold(i,6)=evis_IC_BC 213513954efSKenneth E. Jansen enddo 214513954efSKenneth E. Jansen isclr=1 ! fix scalar 215513954efSKenneth E. Jansen call itrBCsclr(yold,ac,iBC,BC,iper,ilwork) 216513954efSKenneth E. Jansen 217513954efSKenneth E. Jansen deallocate(vortG) 218513954efSKenneth E. Jansen endif 21959599516SKenneth E. Jansenc 22059599516SKenneth E. Jansenc.... loop through the time sequences 22159599516SKenneth E. Jansenc 22259599516SKenneth E. Jansen do 3000 itsq = 1, ntseq 22359599516SKenneth E. Jansen itseq = itsq 22459599516SKenneth E. Jansenc 22559599516SKenneth E. Jansenc.... set up the current parameters 22659599516SKenneth E. Jansenc 22759599516SKenneth E. Jansen nstp = nstep(itseq) 22859599516SKenneth E. Jansen nitr = niter(itseq) 22959599516SKenneth E. Jansen LCtime = loctim(itseq) 23059599516SKenneth E. Jansenc 23159599516SKenneth E. Jansen call itrSetup ( y, acold) 23259599516SKenneth E. Jansen isclr=0 23359599516SKenneth E. Jansen 23459599516SKenneth E. Jansen niter(itseq)=0 ! count number of flow solves in a step 23559599516SKenneth E. Jansen ! (# of iterations) 23659599516SKenneth E. Jansen do i=1,seqsize 23759599516SKenneth E. Jansen if(stepseq(i).eq.0) niter(itseq)=niter(itseq)+1 23859599516SKenneth E. Jansen enddo 23959599516SKenneth E. Jansen nitr = niter(itseq) 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansenc.... determine how many scalar equations we are going to need to solve 24259599516SKenneth E. Jansenc 24359599516SKenneth E. Jansen nsclrsol=nsclr ! total number of scalars solved. At 24459599516SKenneth E. Jansen ! some point we probably want to create 24559599516SKenneth E. Jansen ! a map, considering stepseq(), to find 24659599516SKenneth E. Jansen ! what is actually solved and only 24759599516SKenneth E. Jansen ! dimension EGmasst to the appropriate 24859599516SKenneth E. Jansen ! size. 24959599516SKenneth E. Jansen 25059599516SKenneth E. Jansen if(nsclrsol.gt.0)allocate (EGmasst(numel*nshape*nshape 25159599516SKenneth E. Jansen & ,nsclrsol)) 25259599516SKenneth E. Jansen 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansenc.... loop through the time steps 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansen ttim(1) = REAL(secs(0.0)) / 100. 25759599516SKenneth E. Jansen ttim(2) = secs(0.0) 25859599516SKenneth E. Jansen 25959599516SKenneth E. Jansenc tcorecp1 = REAL(secs(0.0)) / 100. 26059599516SKenneth E. Jansenc tcorewc1 = secs(0.0) 26159599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 262513954efSKenneth E. Jansen if(myrank.eq.master) then 26359599516SKenneth E. Jansen tcorecp1 = TMRC() 26459599516SKenneth E. Jansen endif 26559599516SKenneth E. Jansen 26659599516SKenneth E. Jansen rmub=datmat(1,2,1) 26759599516SKenneth E. Jansen if(rmutarget.gt.0) then 26859599516SKenneth E. Jansen rmue=rmutarget 26959599516SKenneth E. Jansen xmulfact=(rmue/rmub)**(1.0/nstp) 270513954efSKenneth E. Jansen if(myrank.eq.master) then 27159599516SKenneth E. Jansen write(*,*) 'viscosity will by multiplied by ', xmulfact 27259599516SKenneth E. Jansen write(*,*) 'to bring it from ', rmub,' down to ', rmue 27359599516SKenneth E. Jansen endif 27459599516SKenneth E. Jansen datmat(1,2,1)=datmat(1,2,1)/xmulfact ! make first step right 27559599516SKenneth E. Jansen else 27659599516SKenneth E. Jansen rmue=datmat(1,2,1) ! keep constant 27759599516SKenneth E. Jansen xmulfact=one 27859599516SKenneth E. Jansen endif 27959599516SKenneth E. Jansen if(iramp.eq.1) then 28059599516SKenneth E. Jansen call initBCprofileScale(vbc_prof,BC,yold,x) 28159599516SKenneth E. Jansen! fix the yold values to the reset BC 28259599516SKenneth E. Jansen call itrBC (yold, ac, iBC, BC, iper, ilwork) 28359599516SKenneth E. Jansen isclr=1 ! fix scalar 28459599516SKenneth E. Jansen call itrBCsclr(yold,ac,iBC,BC,iper,ilwork) 28559599516SKenneth E. Jansen endif 28659599516SKenneth E. Jansen 28759599516SKenneth E. Jansen867 continue 288513954efSKenneth E. Jansen 289513954efSKenneth E. Jansen 290513954efSKenneth E. Jansenc============ Start the loop of time steps============================c 291513954efSKenneth E. Jansen! edamp2=.99 292513954efSKenneth E. Jansen! edamp3=0.05 293513954efSKenneth E. Jansen deltaInlInv=one/(0.125*0.0254) 29459599516SKenneth E. Jansen do 2000 istp = 1, nstp 295513954efSKenneth E. Jansen 296513954efSKenneth E. Jansen 29759599516SKenneth E. Jansen if(iramp.eq.1) 29859599516SKenneth E. Jansen & call BCprofileScale(vbc_prof,BC,yold) 29959599516SKenneth E. Jansen 30059599516SKenneth E. Jansenc call rerun_check(stopjob) 30159599516SKenneth E. Jansencc if(stopjob.ne.0) goto 2001 30259599516SKenneth E. Jansenc 30359599516SKenneth E. Jansenc Decay of scalars 30459599516SKenneth E. Jansenc 30559599516SKenneth E. Jansen if(nsclr.gt.0 .and. tdecay.ne.1) then 30659599516SKenneth E. Jansen yold(:,6:ndof)=y(:,6:ndof)*tdecay 30759599516SKenneth E. Jansen BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*tdecay 30859599516SKenneth E. Jansen endif 30959599516SKenneth E. Jansen 31059599516SKenneth E. Jansen if(nosource.eq.1) BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*0.8 31159599516SKenneth E. Jansen 31259599516SKenneth E. Jansen 31359599516SKenneth E. Jansenc xi=istp*one/nstp 31459599516SKenneth E. Jansenc datmat(1,2,1)=rmub*(1.0-xi)+xi*rmue 31559599516SKenneth E. Jansen datmat(1,2,1)=xmulfact*datmat(1,2,1) 31659599516SKenneth E. Jansen 31759599516SKenneth E. Jansenc.... if we have time varying boundary conditions update the values of BC. 31859599516SKenneth E. Jansenc these will be for time step n+1 so use lstep+1 31959599516SKenneth E. Jansenc 32059599516SKenneth E. Jansen if(itvn.gt.0) call BCint((lstep+1)*Delt(1), shp, shgl, 32159599516SKenneth E. Jansen & shpb, shglb, x, BC, iBC) 32259599516SKenneth E. Jansen 32359599516SKenneth E. Jansen if(iLES.gt.0) then 32459599516SKenneth E. Jansenc 32559599516SKenneth E. Jansenc.... get dynamic model coefficient 32659599516SKenneth E. Jansenc 32759599516SKenneth E. Jansen ilesmod=iLES/10 32859599516SKenneth E. Jansenc 32959599516SKenneth E. Jansenc digit bit set filter rule, 10 bit set model 33059599516SKenneth E. Jansenc 33159599516SKenneth E. Jansen if (ilesmod.eq.0) then ! 0 < iLES < 10 => dyn. model calculated 33259599516SKenneth E. Jansen ! at nodes based on discrete filtering 33359599516SKenneth E. Jansen call getdmc (yold, shgl, shp, 33459599516SKenneth E. Jansen & iper, ilwork, nsons, 33559599516SKenneth E. Jansen & ifath, x) 33659599516SKenneth E. Jansen endif 33759599516SKenneth E. Jansen if (ilesmod .eq. 1) then ! 10 < iLES < 20 => dynamic-mixed 33859599516SKenneth E. Jansen ! at nodes based on discrete filtering 33959599516SKenneth E. Jansen call bardmc (yold, shgl, shp, 34059599516SKenneth E. Jansen & iper, ilwork, 34159599516SKenneth E. Jansen & nsons, ifath, x) 34259599516SKenneth E. Jansen endif 34359599516SKenneth E. Jansen if (ilesmod .eq. 2) then ! 20 < iLES < 30 => dynamic at quad 34459599516SKenneth E. Jansen ! pts based on lumped projection filt. 34559599516SKenneth E. Jansen call projdmc (yold, shgl, shp, 34659599516SKenneth E. Jansen & iper, ilwork, x) 34759599516SKenneth E. Jansen endif 34859599516SKenneth E. Jansenc 349513954efSKenneth E. Jansen endif ! endif of iLES 35059599516SKenneth E. Jansen 35159599516SKenneth E. Jansen 35259599516SKenneth E. Jansenc 35359599516SKenneth E. Jansenc.... set traction BCs for modeled walls 35459599516SKenneth E. Jansenc 35559599516SKenneth E. Jansen if (itwmod.ne.0) then !wallfn check 35659599516SKenneth E. Jansen call asbwmod(yold, acold, x, BC, iBC, 35759599516SKenneth E. Jansen & iper, ilwork, ifath, velbar) 35859599516SKenneth E. Jansen endif 35959599516SKenneth E. Jansenc 36059599516SKenneth E. Jansenc.... -----------------------> predictor phase <----------------------- 36159599516SKenneth E. Jansenc 36259599516SKenneth E. Jansen call itrPredict( yold, acold, y, ac ) 36359599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 36459599516SKenneth E. Jansen isclr = zero 36559599516SKenneth E. Jansen if (nsclr.gt.zero) then 36659599516SKenneth E. Jansen do isclr=1,nsclr 36759599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 36859599516SKenneth E. Jansen enddo 36959599516SKenneth E. Jansen endif 37059599516SKenneth E. Jansenc 37159599516SKenneth E. Jansenc.... --------------------> multi-corrector phase <-------------------- 37259599516SKenneth E. Jansenc 37359599516SKenneth E. Jansen iter=0 37459599516SKenneth E. Jansen ilss=0 ! this is a switch thrown on first solve of LS redistance 37559599516SKenneth E. Jansenc 37659599516SKenneth E. JansencHACK to make it keep solving RANS until tolerance is reached 37759599516SKenneth E. Jansenc 37859599516SKenneth E. Jansen istop=0 379513954efSKenneth E. Jansen! blocking extra RANS steps for now iMoreRANS=0 380513954efSKenneth E. Jansen iMoreRANS=6 38159599516SKenneth E. Jansenc 38259599516SKenneth E. Jansenc find the the RANS portion of the sequence 38359599516SKenneth E. Jansenc 38459599516SKenneth E. Jansen do istepc=1,seqsize 38559599516SKenneth E. Jansen if(stepseq(istepc).eq.10) iLastRANS=istepc 38659599516SKenneth E. Jansen enddo 38759599516SKenneth E. Jansen 38859599516SKenneth E. Jansen iseqStart=1 38959599516SKenneth E. Jansen9876 continue 39059599516SKenneth E. Jansenc 39159599516SKenneth E. Jansen do istepc=iseqStart,seqsize 39259599516SKenneth E. Jansen icode=stepseq(istepc) 39359599516SKenneth E. Jansen if(mod(icode,10).eq.0) then ! this is a solve 39459599516SKenneth E. Jansen isolve=icode/10 39559599516SKenneth E. Jansen if(isolve.eq.0) then ! flow solve (encoded as 0) 39659599516SKenneth E. Jansenc 39759599516SKenneth E. Jansen etol=epstol(1) 39859599516SKenneth E. Jansen iter = iter+1 39959599516SKenneth E. Jansen ifuncs(1) = ifuncs(1) + 1 40059599516SKenneth E. Jansenc 40159599516SKenneth E. Jansenc.... reset the aerodynamic forces 40259599516SKenneth E. Jansenc 40359599516SKenneth E. Jansen Force(1) = zero 40459599516SKenneth E. Jansen Force(2) = zero 40559599516SKenneth E. Jansen Force(3) = zero 40659599516SKenneth E. Jansen HFlux = zero 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansenc.... form the element data and solve the matrix problem 40959599516SKenneth E. Jansenc 41059599516SKenneth E. Jansenc.... explicit solver 41159599516SKenneth E. Jansenc 41259599516SKenneth E. Jansen if (impl(itseq) .eq. 0) then 41359599516SKenneth E. Jansen if (myrank .eq. master) 41459599516SKenneth E. Jansen & call error('itrdrv ','impl ',impl(itseq)) 41559599516SKenneth E. Jansen endif 41659599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 1) then ! sparse solve 41759599516SKenneth E. Jansenc 41859599516SKenneth E. Jansenc.... preconditioned sparse matrix GMRES solver 41959599516SKenneth E. Jansenc 42059599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 42159599516SKenneth E. Jansen iprec=lhs 42259599516SKenneth E. Jansen nedof = nflow*nshape 42359599516SKenneth E. Jansenc write(*,*) 'lhs=',lhs 424513954efSKenneth E. Jansen if(usingpetsc.eq.1) then 42517860365SKenneth E. Jansen#if (HAVE_PETSC) 426513954efSKenneth E. Jansen call SolGMRp (y, ac, yold, 427513954efSKenneth E. Jansen & x, 428513954efSKenneth E. Jansen & iBC, BC, 429513954efSKenneth E. Jansen & colm, rowp, lhsk, 430513954efSKenneth E. Jansen & res, 431513954efSKenneth E. Jansen & BDiag, 432513954efSKenneth E. Jansen & iper, ilwork, 433513954efSKenneth E. Jansen & shp, shgl, 434513954efSKenneth E. Jansen & shpb, shglb, solinc, 435513954efSKenneth E. Jansen & rerr, fncorp ) 43617860365SKenneth E. Jansen#else 43717860365SKenneth E. Jansen write(*,*) 'exiting because run time input asked for PETSc, not linked in exec' 43817860365SKenneth E. Jansen call error('itrdrv ','noPETSc',usingpetsc) 43917860365SKenneth E. Jansen#endif 440513954efSKenneth E. Jansen else 44159599516SKenneth E. Jansen call SolGMRs (y, ac, yold, 44259599516SKenneth E. Jansen & acold, x, 44359599516SKenneth E. Jansen & iBC, BC, 44459599516SKenneth E. Jansen & colm, rowp, lhsk, 44559599516SKenneth E. Jansen & res, 44659599516SKenneth E. Jansen & BDiag, a(mHBrg), a(meBrg), 44759599516SKenneth E. Jansen & a(myBrg), a(mRcos), a(mRsin), 44859599516SKenneth E. Jansen & iper, ilwork, 44959599516SKenneth E. Jansen & shp, shgl, 45059599516SKenneth E. Jansen & shpb, shglb, solinc, 45159599516SKenneth E. Jansen & rerr) 452513954efSKenneth E. Jansen endif 45359599516SKenneth E. Jansen else if (mod(impl(1),100)/10 .eq. 2) then ! mfg solve 45459599516SKenneth E. Jansenc 45559599516SKenneth E. Jansenc.... preconditioned matrix-free GMRES solver 45659599516SKenneth E. Jansenc 45759599516SKenneth E. Jansen lhs=0 45859599516SKenneth E. Jansen iprec = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 45959599516SKenneth E. Jansen nedof = 0 46059599516SKenneth E. Jansen call SolMFG (y, ac, yold, 46159599516SKenneth E. Jansen & acold, x, 46259599516SKenneth E. Jansen & iBC, BC, 46359599516SKenneth E. Jansen & res, 46459599516SKenneth E. Jansen & BDiag, a(mHBrg), a(meBrg), 46559599516SKenneth E. Jansen & a(myBrg), a(mRcos), a(mRsin), 46659599516SKenneth E. Jansen & iper, ilwork, 46759599516SKenneth E. Jansen & shp, shgl, 46859599516SKenneth E. Jansen & shpb, shglb, solinc, 46959599516SKenneth E. Jansen & rerr) 47059599516SKenneth E. Jansenc 47159599516SKenneth E. Jansen else if (mod(impl(1),100)/10 .eq. 3) then ! ebe solve 47259599516SKenneth E. Jansenc.... preconditioned ebe matrix GMRES solver 47359599516SKenneth E. Jansenc 47459599516SKenneth E. Jansen 47559599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 47659599516SKenneth E. Jansen iprec = lhs 47759599516SKenneth E. Jansen nedof = nflow*nshape 47859599516SKenneth E. Jansenc write(*,*) 'lhs=',lhs 47959599516SKenneth E. Jansen call SolGMRe (y, ac, yold, 48059599516SKenneth E. Jansen & acold, x, 48159599516SKenneth E. Jansen & iBC, BC, 48259599516SKenneth E. Jansen & EGmass, res, 48359599516SKenneth E. Jansen & BDiag, a(mHBrg), a(meBrg), 48459599516SKenneth E. Jansen & a(myBrg), a(mRcos), a(mRsin), 48559599516SKenneth E. Jansen & iper, ilwork, 48659599516SKenneth E. Jansen & shp, shgl, 48759599516SKenneth E. Jansen & shpb, shglb, solinc, 48859599516SKenneth E. Jansen & rerr) 48959599516SKenneth E. Jansen endif 49059599516SKenneth E. Jansenc 49159599516SKenneth E. Jansen else ! solve a scalar (encoded at isclr*10) 49259599516SKenneth E. Jansen isclr=isolve 493513954efSKenneth E. Jansen etol=epstol(isclr+2) ! note that for both epstol and LHSupd 1 is flow 2 temp isclr+2 for scalars 494513954efSKenneth E. Jansen ifuncs(isclr+2) = ifuncs(isclr+2) + 1 49559599516SKenneth E. Jansen if((iLSet.eq.2).and.(ilss.eq.0) 49659599516SKenneth E. Jansen & .and.(isclr.eq.2)) then 49759599516SKenneth E. Jansen ilss=1 ! throw switch (once per step) 49859599516SKenneth E. Jansenc 49959599516SKenneth E. Jansenc... copy the first scalar at t=n+1 into the second scalar of the 50059599516SKenneth E. Jansenc... level sets 50159599516SKenneth E. Jansenc 50259599516SKenneth E. Jansen y(:,6) = yold(:,6) + (y(:,6)-yold(:,6))/alfi 50359599516SKenneth E. Jansen y(:,7) = y(:,6) 50459599516SKenneth E. Jansen yold(:,7) = y(:,7) 50559599516SKenneth E. Jansen ac(:,7) = zero 50659599516SKenneth E. Jansenc 50759599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 50859599516SKenneth E. Jansenc 50959599516SKenneth E. Jansenc....store the flow alpha, gamma parameter values and assigm them the 51059599516SKenneth E. Jansenc....Backward Euler parameters to solve the second levelset scalar 51159599516SKenneth E. Jansenc 51259599516SKenneth E. Jansen alfit=alfi 51359599516SKenneth E. Jansen gamit=gami 51459599516SKenneth E. Jansen almit=almi 51559599516SKenneth E. Jansen alfi = 1 51659599516SKenneth E. Jansen gami = 1 51759599516SKenneth E. Jansen almi = 1 51859599516SKenneth E. Jansen endif 51959599516SKenneth E. Jansenc 52059599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(isclr+2)-1, 52159599516SKenneth E. Jansen & LHSupd(isclr+2))) 52259599516SKenneth E. Jansen iprec = lhs 52359599516SKenneth E. Jansen istop=0 524513954efSKenneth E. Jansen if(usingPETSc.eq.1) then 52517860365SKenneth E. Jansen#if (HAVE_PETSC) 526513954efSKenneth E. Jansen call SolGMRpSclr(y, ac, 527513954efSKenneth E. Jansen & x, elDw, 528513954efSKenneth E. Jansen & iBC, BC, 529513954efSKenneth E. Jansen & colm, rowp, 530513954efSKenneth E. Jansen & iper, ilwork, 531513954efSKenneth E. Jansen & shp, shgl, 532513954efSKenneth E. Jansen & shpb, shglb, rest, 533513954efSKenneth E. Jansen & solinc(1,isclr+5),fncorp) 53417860365SKenneth E. Jansen#else 53517860365SKenneth E. Jansen write(*,*) 'exiting because run time input asked for PETSc, not linked in exec' 53617860365SKenneth E. Jansen call error('itrdrv ','noPETSc',usingpetsc) 53717860365SKenneth E. Jansen#endif 538513954efSKenneth E. Jansen else 53959599516SKenneth E. Jansen call SolGMRSclr(y, ac, yold, 54059599516SKenneth E. Jansen & acold, EGmasst(1,isclr), 54159599516SKenneth E. Jansen & x, elDw, 54259599516SKenneth E. Jansen & iBC, BC, 54359599516SKenneth E. Jansen & rest, 54459599516SKenneth E. Jansen & a(mHBrg), a(meBrg), 54559599516SKenneth E. Jansen & a(myBrg), a(mRcos), a(mRsin), 54659599516SKenneth E. Jansen & iper, ilwork, 54759599516SKenneth E. Jansen & shp, shgl, 54859599516SKenneth E. Jansen & shpb, shglb, solinc(1,isclr+5)) 549513954efSKenneth E. Jansen endif 55059599516SKenneth E. Jansenc 55159599516SKenneth E. Jansen endif ! end of scalar type solve 55259599516SKenneth E. Jansenc 55359599516SKenneth E. Jansenc 55459599516SKenneth E. Jansenc.... end of the multi-corrector loop 55559599516SKenneth E. Jansenc 55659599516SKenneth E. Jansen 1000 continue !check this 55759599516SKenneth E. Jansen 55859599516SKenneth E. Jansen else ! this is an update (mod did not equal zero) 55959599516SKenneth E. Jansen iupdate=icode/10 ! what to update 56059599516SKenneth E. Jansen if(iupdate.eq.0) then !update flow 56159599516SKenneth E. Jansen call itrCorrect ( y, ac, yold, acold, solinc) 56259599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 56359599516SKenneth E. Jansen call tnanq(y, 5, 'y_updbc') 56459599516SKenneth E. Jansenc Elaine-SPEBC 56559599516SKenneth E. Jansen if((irscale.ge.0).and.(myrank.eq.master)) then 56659599516SKenneth E. Jansen call genscale(y, x, iBC) 56759599516SKenneth E. Jansenc call itrBC (y, ac, iBC, BC, iper, ilwork) 56859599516SKenneth E. Jansen endif 56959599516SKenneth E. Jansen else ! update scalar 57059599516SKenneth E. Jansen isclr=iupdate !unless 57159599516SKenneth E. Jansen if(iupdate.eq.nsclr+1) isclr=0 57259599516SKenneth E. Jansen call itrCorrectSclr ( y, ac, yold, acold, 57359599516SKenneth E. Jansen & solinc(1,isclr+5)) 57459599516SKenneth E. Jansen if (ilset.eq.2 .and. isclr.eq.2) then 57559599516SKenneth E. Jansen fct2=one/almi 57659599516SKenneth E. Jansen fct3=one/alfi 57759599516SKenneth E. Jansen acold(:,7) = acold(:,7) 57859599516SKenneth E. Jansen & + (ac(:,7)-acold(:,7))*fct2 57959599516SKenneth E. Jansen yold(:,7) = yold(:,7) 58059599516SKenneth E. Jansen & + (y(:,7)-yold(:,7))*fct3 58159599516SKenneth E. Jansen call itrBCSclr ( yold, acold, iBC, BC, 58259599516SKenneth E. Jansen & iper, ilwork) 58359599516SKenneth E. Jansen ac(:,7) = acold(:,7)*(one-almi/gami) 58459599516SKenneth E. Jansen y(:,7) = yold(:,7) 58559599516SKenneth E. Jansen ac(:,7) = zero 58659599516SKenneth E. Jansen if (ivconstraint .eq. 1) then 58759599516SKenneth E. Jansen & 58859599516SKenneth E. Jansenc ... applying the volume constraint 58959599516SKenneth E. Jansenc 59059599516SKenneth E. Jansen call solvecon (y, x, iBC, BC, 59159599516SKenneth E. Jansen & iper, ilwork, shp, shgl) 59259599516SKenneth E. Jansenc 59359599516SKenneth E. Jansen endif ! end of volume constraint calculations 59459599516SKenneth E. Jansen endif 59559599516SKenneth E. Jansen call itrBCSclr ( y, ac, iBC, BC, iper, ilwork) 59659599516SKenneth E. Jansen endif 59759599516SKenneth E. Jansen endif !end of switch between solve or update 59859599516SKenneth E. Jansen enddo ! loop over sequence in step 59959599516SKenneth E. Jansen if((istop.lt.0).and.(iMoreRANS.lt.5)) then 60059599516SKenneth E. Jansen iMoreRANS=iMoreRANS+1 601513954efSKenneth E. Jansen if(myrank.eq.master) write(*,*) 'istop =', istop 60259599516SKenneth E. Jansen iseqStart=iLastRANS 60359599516SKenneth E. Jansen goto 9876 60459599516SKenneth E. Jansen endif 60559599516SKenneth E. Jansenc 60659599516SKenneth E. Jansenc Find the solution at the end of the timestep and move it to old 60759599516SKenneth E. Jansenc 60859599516SKenneth E. Jansenc.... First to reassign the parameters for the original time integrator scheme 60959599516SKenneth E. Jansenc 61059599516SKenneth E. Jansen if((iLSet.eq.2).and.(ilss.eq.1)) then 61159599516SKenneth E. Jansen alfi =alfit 61259599516SKenneth E. Jansen gami =gamit 61359599516SKenneth E. Jansen almi =almit 61459599516SKenneth E. Jansen endif 61559599516SKenneth E. Jansen call itrUpdate( yold, acold, y, ac) 61659599516SKenneth E. Jansen call itrBC (yold, acold, iBC, BC, iper,ilwork) 61759599516SKenneth E. Jansenc Elaine-SPEBC 61859599516SKenneth E. Jansen if((irscale.ge.0).and.(myrank.eq.master)) then 61959599516SKenneth E. Jansen call genscale(yold, x, iBC) 62059599516SKenneth E. Jansenc call itrBC (y, ac, iBC, BC, iper, ilwork) 62159599516SKenneth E. Jansen endif 62259599516SKenneth E. Jansen do isclr=1,nsclr 62359599516SKenneth E. Jansen call itrBCSclr (yold, acold, iBC, BC, iper, ilwork) 62459599516SKenneth E. Jansen enddo 62559599516SKenneth E. Jansenc 62659599516SKenneth E. Jansen istep = istep + 1 62759599516SKenneth E. Jansen lstep = lstep + 1 62859599516SKenneth E. Jansen ntoutv=max(ntout,100) 629513954efSKenneth E. Jansen !boundary flux output moved after the error calculation so 630513954efSKenneth E. Jansen !everything can be written out in a single chunk of code - 631513954efSKenneth E. Jansen !Nicholas Mati 63259599516SKenneth E. Jansen 633513954efSKenneth E. Jansen !dump TIME SERIES 63459599516SKenneth E. Jansen if (exts) then 635513954efSKenneth E. Jansen !Write the probe data to disc. Note that IO to disc only 636513954efSKenneth E. Jansen !occurs when mod(lstep, nbuff) == 0. However, this 637513954efSKenneth E. Jansen !function also does data buffering and must be called 638513954efSKenneth E. Jansen !every time step. 639513954efSKenneth E. Jansen call TD_bufferData() 640513954efSKenneth E. Jansen call TD_writeData(fvarts, .false.) 64159599516SKenneth E. Jansen endif 64259599516SKenneth E. Jansen 643513954efSKenneth E. Jansen !Update the Mach Control 644513954efSKenneth E. Jansen if(exts .and. exMC) then 645513954efSKenneth E. Jansen !Note: the function MC_updateState must be called after 646513954efSKenneth E. Jansen !the function TD_bufferData due to dependencies on 647513954efSKenneth E. Jansen !vartsbuff(:,:,:). 648513954efSKenneth E. Jansen call MC_updateState() 649513954efSKenneth E. Jansen call MC_applyBC(BC) 650513954efSKenneth E. Jansen call MC_printState() 65159599516SKenneth E. Jansen 652513954efSKenneth E. Jansen !Write the state if a restart is also being written. 653513954efSKenneth E. Jansen if(mod(lstep,ntout).eq.0 ) call MC_writeState(lstep) 654513954efSKenneth E. Jansen endif 65559599516SKenneth E. Jansen 656513954efSKenneth E. Jansen !update blower control 657513954efSKenneth E. Jansen if(BC_enable) then 658513954efSKenneth E. Jansen !Update the blower boundary conditions for the next 659513954efSKenneth E. Jansen !iteration. 660513954efSKenneth E. Jansen call BC_iter(BC) 66159599516SKenneth E. Jansen 662513954efSKenneth E. Jansen !Also write the current phases of the blowers if a 663513954efSKenneth E. Jansen !restart is also being written. 664513954efSKenneth E. Jansen if(mod(lstep, ntout) == 0) call BC_writePhase(lstep) 665513954efSKenneth E. Jansen endif 66659599516SKenneth E. Jansen 667513954efSKenneth E. Jansen !.... Yi Chen Duct geometry8 668513954efSKenneth E. Jansen if(isetBlowing_Duct.gt.0)then 669513954efSKenneth E. Jansen if(ifixBlowingVel_Duct.eq.0)then 670513954efSKenneth E. Jansen if(nstp.gt.nBlowingStepsDuct)then 671513954efSKenneth E. Jansen nBlowingStepsDuct = nstp-2 672513954efSKenneth E. Jansen endif 673513954efSKenneth E. Jansen call setBlowing_Duct2(x,BC,yold,iTurbWall,istp) 67459599516SKenneth E. Jansen endif 67559599516SKenneth E. Jansen endif 676513954efSKenneth E. Jansen !... Yi Chen Duct geometry8 67759599516SKenneth E. Jansen 67859599516SKenneth E. Jansenc 67959599516SKenneth E. Jansenc.... -------------------> error calculation <----------------- 68059599516SKenneth E. Jansen if(ierrcalc.eq.1.or.ioybar.eq.1) then 68159599516SKenneth E. Jansen tfact=one/istep 68259599516SKenneth E. Jansen do idof=1,ndof 68359599516SKenneth E. Jansen ybar(:,idof) =tfact*yold(:,idof) + 68459599516SKenneth E. Jansen & (one-tfact)*ybar(:,idof) 68559599516SKenneth E. Jansen enddo 68659599516SKenneth E. Jansenc....compute average 68759599516SKenneth E. Jansenc... ybar(:,ndof+1:ndof+8) is for avg. of square as uu, vv, ww, pp, TT, uv, uw, and vw 68859599516SKenneth E. Jansen do idof=1,5 ! avg. of square for 5 flow variables 68959599516SKenneth E. Jansen ybar(:,ndof+idof) = tfact*yold(:,idof)**2 + 69059599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+idof) 69159599516SKenneth E. Jansen enddo 69259599516SKenneth E. Jansen ybar(:,ndof+6) = tfact*yold(:,1)*yold(:,2) + !uv 69359599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+6) 69459599516SKenneth E. Jansen ybar(:,ndof+7) = tfact*yold(:,1)*yold(:,3) + !uw 69559599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+7) 69659599516SKenneth E. Jansen ybar(:,ndof+8) = tfact*yold(:,2)*yold(:,3) + !vw 69759599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+8) 69859599516SKenneth E. Jansenc... compute err 699513954efSKenneth E. Jansen rerr(:, 7)=rerr(:, 7)+(yold(:,1)-ybar(:,1))**2 700513954efSKenneth E. Jansen rerr(:, 8)=rerr(:, 8)+(yold(:,2)-ybar(:,2))**2 701513954efSKenneth E. Jansen rerr(:, 9)=rerr(:, 9)+(yold(:,3)-ybar(:,3))**2 702513954efSKenneth E. Jansen rerr(:,10)=rerr(:,10)+(yold(:,4)-ybar(:,4))**2 70359599516SKenneth E. Jansen endif 704513954efSKenneth E. Jansen 705513954efSKenneth E. Jansenc.. writing ybar field if requested in each restart file 706513954efSKenneth E. Jansen 707513954efSKenneth E. Jansen !here is where we save our averaged field. In some cases we want to 708513954efSKenneth E. Jansen !write it less frequently 709513954efSKenneth E. Jansen if( (irs >= 1) .and. ( 710513954efSKenneth E. Jansen & mod(lstep, ntout) == 0 .or. !Checkpoint 711513954efSKenneth E. Jansen & istep == nstp) )then !End of simulation 712513954efSKenneth E. Jansen 713513954efSKenneth E. Jansen if( (mod(lstep, ntoutv) .eq. 0) .and. 714513954efSKenneth E. Jansen & ((irscale.ge.0).or.(itwmod.gt.0) .or. 715513954efSKenneth E. Jansen & ((nsonmax.eq.1).and.(iLES.gt.0)))) 716513954efSKenneth E. Jansen & call rwvelb ('out ', velbar ,ifail) 717513954efSKenneth E. Jansen 718513954efSKenneth E. Jansen !BUG: need to update new_interface to work with SyncIO. 719513954efSKenneth E. Jansen !Bflux is presently completely crippled. Note that restar 720513954efSKenneth E. Jansen !has also been moved here for readability. 721513954efSKenneth E. Jansen! call Bflux (yold, acold, x, compute boundary fluxes and print out 722513954efSKenneth E. Jansen! & shp, shgl, shpb, 723513954efSKenneth E. Jansen! & shglb, nodflx, ilwork) 724513954efSKenneth E. Jansen 725513954efSKenneth E. Jansen call timer ('Output ') !set up the timer 726513954efSKenneth E. Jansen 727513954efSKenneth E. Jansen !write the solution and time derivative 728513954efSKenneth E. Jansen call restar ('out ', yold, acold) 729513954efSKenneth E. Jansen 730513954efSKenneth E. Jansen !Write the distance to wall field in each restart 731513954efSKenneth E. Jansen if((istep==nstp) .and. (irans < 0 )) then !d2wall is allocated 732513954efSKenneth E. Jansen call write_field(myrank,'a'//char(0),'dwal'//char(0),4, 733513954efSKenneth E. Jansen & d2wall,'d'//char(0), nshg, 1, lstep) 734513954efSKenneth E. Jansen endif 735513954efSKenneth E. Jansen 736513954efSKenneth E. Jansen !Write the time average in each restart. 737513954efSKenneth E. Jansen if(ioybar.eq.1)then 738513954efSKenneth E. Jansen call write_field(myrank,'a'//char(0),'ybar'//char(0),4, 739513954efSKenneth E. Jansen & ybar,'d'//char(0),nshg,ndof+8,lstep) 740513954efSKenneth E. Jansen endif 741513954efSKenneth E. Jansen 742513954efSKenneth E. Jansen !Write the error feild at the end of each step sequence 743513954efSKenneth E. Jansen if(ierrcalc.eq.1 .and. istep == nstp) then 744513954efSKenneth E. Jansen !smooth the error indicators 745513954efSKenneth E. Jansen 746513954efSKenneth E. Jansen do i=1,ierrsmooth 747513954efSKenneth E. Jansen call errsmooth( rerr, x, iper, ilwork, shp, shgl, iBC ) 748513954efSKenneth E. Jansen enddo 749513954efSKenneth E. Jansen 750513954efSKenneth E. Jansen! call write_error(myrank, lstep, nshg, 10, rerr ) 751513954efSKenneth E. Jansen call write_field( 752513954efSKenneth E. Jansen & myrank, 'a'//char(0), 'errors'//char(0), 6, 753513954efSKenneth E. Jansen & rerr, 'd'//char(0), nshg, 10, lstep) 754513954efSKenneth E. Jansen endif 755513954efSKenneth E. Jansen 756513954efSKenneth E. Jansenc the following is a future way to have the number of steps in the header...done for posix but not yet for syncio 757513954efSKenneth E. Jansenc 758513954efSKenneth E. Jansenc call write_field2(myrank,'a'//char(0),'ybar'//char(0), 759513954efSKenneth E. Jansenc & 4,ybar,'d'//char(0),nshg,ndof+8, 760513954efSKenneth E. Jansenc & lstep,istep) 761513954efSKenneth E. Jansen endif 762513954efSKenneth E. Jansen 763513954efSKenneth E. Jansen 2000 continue !end of NSTEP loop 76459599516SKenneth E. Jansen 2001 continue 76559599516SKenneth E. Jansen 76659599516SKenneth E. Jansen ttim(1) = REAL(secs(0.0)) / 100. - ttim(1) 76759599516SKenneth E. Jansen ttim(2) = secs(0.0) - ttim(2) 76859599516SKenneth E. Jansen 76959599516SKenneth E. Jansenc tcorecp2 = REAL(secs(0.0)) / 100. 77059599516SKenneth E. Jansenc tcorewc2 = secs(0.0) 77159599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 772513954efSKenneth E. Jansen if(myrank.eq.master) then 77359599516SKenneth E. Jansen tcorecp2 = TMRC() 77459599516SKenneth E. Jansen write(6,*) 'T(core) cpu = ',tcorecp2-tcorecp1 77559599516SKenneth E. Jansen endif 77659599516SKenneth E. Jansen 77759599516SKenneth E. Jansenc call wtime 77859599516SKenneth E. Jansen 779513954efSKenneth E. Jansen 3000 continue !end of NTSEQ loop 78059599516SKenneth E. Jansenc 78159599516SKenneth E. Jansenc.... ----------------------> Post Processing <---------------------- 78259599516SKenneth E. Jansenc 78359599516SKenneth E. Jansenc.... print out the last step 78459599516SKenneth E. Jansenc 785513954efSKenneth E. Jansen! if ( (irs .ge. 1) .and. ((mod(lstep, ntout) .ne. 0) .or. 786513954efSKenneth E. Jansen! & (nstp .eq. 0))) then 787513954efSKenneth E. Jansen! if( (mod(lstep, ntoutv) .eq. 0) .and. 788513954efSKenneth E. Jansen! & ((irscale.ge.0).or.(itwmod.gt.0) .or. 789513954efSKenneth E. Jansen! & ((nsonmax.eq.1).and.(iLES.gt.0)))) 790513954efSKenneth E. Jansen! & call rwvelb ('out ', velbar ,ifail) 791513954efSKenneth E. Jansen! 792513954efSKenneth E. Jansen! call Bflux (yold, acold, x, 793513954efSKenneth E. Jansen! & shp, shgl, shpb, 794513954efSKenneth E. Jansen! & shglb, nodflx, ilwork) 795513954efSKenneth E. Jansen! endif 79659599516SKenneth E. Jansen 797513954efSKenneth E. Jansen 798513954efSKenneth E. Jansen 799513954efSKenneth E. Jansenc if(ioybar.eq.1) then 800513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'ybar'//char(0),4, 801513954efSKenneth E. Jansenc & ybar,'d'//char(0),nshg,ndof+8,lstep) 802513954efSKenneth E. Jansenc endif 803513954efSKenneth E. Jansen 804513954efSKenneth E. Jansenc if(iRANS.lt.0 .and. idistcalc.eq.1) then 805513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'DESd'//char(0),4, 806513954efSKenneth E. Jansenc & elDw,'d'//char(0),numel,1,lstep) 80759599516SKenneth E. Jansenc 808513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'dwal'//char(0),4, 809513954efSKenneth E. Jansenc & d2wall,'d'//char(0),nshg,1,lstep) 810513954efSKenneth E. Jansenc endif 81159599516SKenneth E. Jansen 81259599516SKenneth E. Jansenc 81359599516SKenneth E. Jansenc.... close history and aerodynamic forces files 81459599516SKenneth E. Jansenc 81559599516SKenneth E. Jansen if (myrank .eq. master) then 81659599516SKenneth E. Jansen close (ihist) 81759599516SKenneth E. Jansen close (iforce) 818513954efSKenneth E. Jansen 819513954efSKenneth E. Jansen if(exMC) then 820513954efSKenneth E. Jansen call MC_writeState(lstep) 821513954efSKenneth E. Jansen call MC_finalize 822513954efSKenneth E. Jansen endif 823513954efSKenneth E. Jansen 82459599516SKenneth E. Jansen if(exts) then 825513954efSKenneth E. Jansen call TD_writeData(fvarts, .true.) !force the flush of the buffer. 826513954efSKenneth E. Jansen call TD_finalize 82759599516SKenneth E. Jansen endif 82859599516SKenneth E. Jansen endif 829513954efSKenneth E. Jansen 830513954efSKenneth E. Jansen if(BC_enable) then !blower is allocated on all processes. 831513954efSKenneth E. Jansen if(mod(lstep, ntout) /= 0) then !May have already written file. 832513954efSKenneth E. Jansen call BC_writePhase(lstep) 833513954efSKenneth E. Jansen endif 834513954efSKenneth E. Jansen 835513954efSKenneth E. Jansen call BC_finalize 836513954efSKenneth E. Jansen endif 837513954efSKenneth E. Jansen 83859599516SKenneth E. Jansen close (iecho) 83959599516SKenneth E. Jansen if(iabc==1) deallocate(acs) 84059599516SKenneth E. Jansenc 84159599516SKenneth E. Jansenc.... end 84259599516SKenneth E. Jansenc 84359599516SKenneth E. Jansen return 84459599516SKenneth E. Jansen end 845513954efSKenneth E. Jansen 846513954efSKenneth E. Jansen 847