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 330d32f9a8SKenneth 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 74e72fd12cSBen Matthews 75e72fd12cSBen Matthews real*8, allocatable, dimension(:,:) :: HBrg 76e72fd12cSBen Matthews real*8, allocatable, dimension(:) :: eBrg 77e72fd12cSBen Matthews real*8, allocatable, dimension(:) :: yBrg 78e72fd12cSBen Matthews real*8, allocatable, dimension(:) :: Rcos, Rsin 7959599516SKenneth E. Jansenc 8059599516SKenneth E. Jansenc Here are the data structures for sparse matrix GMRES 8159599516SKenneth E. Jansenc 8259599516SKenneth E. Jansen integer, allocatable, dimension(:,:) :: rowp 8359599516SKenneth E. Jansen integer, allocatable, dimension(:) :: colm 8459599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: lhsK 8559599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: EGmass 8659599516SKenneth E. Jansen real*8, allocatable, dimension(:,:) :: EGmasst 8759599516SKenneth E. Jansen 88513954efSKenneth E. Jansen integer iTurbWall(nshg) 89513954efSKenneth E. Jansen real*8 yInlet(3), yInletg(3) 90513954efSKenneth E. Jansen integer imapped, imapInlet(nshg) !for now, used for setting Blower conditions 91513954efSKenneth E. Jansen! real*8 M_th, M_tc, M_tt 92513954efSKenneth E. Jansen! logical exMc 93513954efSKenneth E. Jansen! real*8 vBC, vBCg 94513954efSKenneth E. Jansen real*8 vortmax, vortmaxg 9559599516SKenneth E. Jansen 96513954efSKenneth E. Jansen iprec=0 !PETSc - Disable PHASTA's BDiag. TODO: Preprocssor Switch 9759599516SKenneth E. Jansen 98513954efSKenneth E. Jansen call findTurbWall(iTurbWall) 9959599516SKenneth E. Jansen 100513954efSKenneth E. Jansen!------- 101513954efSKenneth E. Jansen! SETUP 102513954efSKenneth E. Jansen!------- 10359599516SKenneth E. Jansen 104513954efSKenneth E. Jansen !HACK for debugging suction 105513954efSKenneth E. Jansen! call Write_Debug(myrank, 'wallNormal'//char(0), 106513954efSKenneth E. Jansen! & 'wnorm'//char(0), wnorm, 107513954efSKenneth E. Jansen! & 'd', nshg, 3, lstep) 108513954efSKenneth E. Jansen 109513954efSKenneth E. Jansen !Probe Point Setup 110513954efSKenneth E. Jansen call initProbePoints() 111513954efSKenneth E. Jansen if(exts) then !exts is set in initProbePoints 112513954efSKenneth E. Jansen write(fvarts, "('./varts/varts.', I0, '.dat')") lstep 113513954efSKenneth E. Jansen fvarts = trim(fvarts) 11459599516SKenneth E. Jansen 11559599516SKenneth E. Jansen if(myrank .eq. master) then 116513954efSKenneth E. Jansen call TD_writeHeader(fvarts) 117513954efSKenneth E. Jansen endif 11859599516SKenneth E. Jansen endif 11959599516SKenneth E. Jansen 120513954efSKenneth E. Jansen !Mach Control Setup 121513954efSKenneth E. Jansen call MC_init(Delt, lstep, BC) 122513954efSKenneth E. Jansen exMC = exMC .and. exts !If probe points aren't available, turn 123513954efSKenneth E. Jansen !the Mach Control off 124513954efSKenneth E. Jansen if(exMC) then 125513954efSKenneth E. Jansen call MC_applyBC(BC) 126513954efSKenneth E. Jansen call MC_printState() 12759599516SKenneth E. Jansen endif 12859599516SKenneth E. Jansen 129513954efSKenneth E. Jansen 13059599516SKenneth E. Jansenc 13159599516SKenneth E. Jansenc.... open history and aerodynamic forces files 13259599516SKenneth E. Jansenc 13359599516SKenneth E. Jansen if (myrank .eq. master) then 13459599516SKenneth E. Jansen open (unit=ihist, file=fhist, status='unknown') 13559599516SKenneth E. Jansen open (unit=iforce, file=fforce, status='unknown') 13659599516SKenneth E. Jansen endif 13759599516SKenneth E. Jansenc 13859599516SKenneth E. Jansenc 13959599516SKenneth E. Jansenc.... initialize 14059599516SKenneth E. Jansenc 14159599516SKenneth E. Jansen ifuncs = 0 ! func. evaluation counter 14259599516SKenneth E. Jansen istep = 0 14359599516SKenneth E. Jansen ntotGM = 0 ! number of GMRES iterations 14459599516SKenneth E. Jansen time = 0 14559599516SKenneth E. Jansen yold = y 14659599516SKenneth E. Jansen acold = ac 147513954efSKenneth E. Jansen 148513954efSKenneth E. Jansen!Blower Setup 149513954efSKenneth E. Jansen call BC_init(Delt, lstep, BC) !Note: sets BC_enable 150513954efSKenneth E. Jansen! fix the yold values to the reset BC 151513954efSKenneth E. Jansen if(BC_enable) call itrBC (yold, ac, iBC, BC, iper, ilwork) 152513954efSKenneth E. Jansen! without the above, second solve of first steps is fouled up 153513954efSKenneth E. Jansen! 154e72fd12cSBen Matthews allocate(HBrg(Kspace+1,Kspace)) 155e72fd12cSBen Matthews allocate(eBrg(Kspace+1)) 156e72fd12cSBen Matthews allocate(yBrg(Kspace)) 157e72fd12cSBen Matthews allocate(Rcos(Kspace)) 158e72fd12cSBen Matthews allocate(Rsin(Kspace)) 159e72fd12cSBen Matthews 16059599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 1) then 16159599516SKenneth E. Jansenc 16259599516SKenneth E. Jansenc generate the sparse data fill vectors 16359599516SKenneth E. Jansenc 16459599516SKenneth E. Jansen allocate (rowp(nshg,nnz)) 16559599516SKenneth E. Jansen allocate (colm(nshg+1)) 16659599516SKenneth E. Jansen call genadj(colm, rowp, icnt ) ! preprocess the adjacency list 16759599516SKenneth E. Jansen 16859599516SKenneth E. Jansen nnz_tot=icnt ! this is exactly the number of non-zero 16959599516SKenneth E. Jansen ! blocks on this proc 170513954efSKenneth E. Jansen if(usingpetsc.eq.1) then 171513954efSKenneth E. Jansen allocate (BDiag(1,1,1)) 172513954efSKenneth E. Jansen else 173513954efSKenneth E. Jansen allocate (BDiag(nshg,nflow,nflow)) 17459599516SKenneth E. Jansen allocate (lhsK(nflow*nflow,nnz_tot)) 17559599516SKenneth E. Jansen endif 176513954efSKenneth E. Jansen endif 17759599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 3) then 17859599516SKenneth E. Jansenc 17959599516SKenneth E. Jansenc generate the ebe data fill vectors 18059599516SKenneth E. Jansenc 18159599516SKenneth E. Jansen nedof=nflow*nshape 18259599516SKenneth E. Jansen allocate (EGmass(numel,nedof*nedof)) 18359599516SKenneth E. Jansen endif 18459599516SKenneth E. Jansen 18559599516SKenneth E. Jansenc.......................................... 18659599516SKenneth E. Jansen rerr = zero 18759599516SKenneth E. Jansen ybar(:,1:ndof) = y(:,1:ndof) 18859599516SKenneth E. Jansen do idof=1,5 18959599516SKenneth E. Jansen ybar(:,ndof+idof) = y(:,idof)*y(:,idof) 19059599516SKenneth E. Jansen enddo 19159599516SKenneth E. Jansen ybar(:,ndof+6) = y(:,1)*y(:,2) 19259599516SKenneth E. Jansen ybar(:,ndof+7) = y(:,1)*y(:,3) 19359599516SKenneth E. Jansen ybar(:,ndof+8) = y(:,2)*y(:,3) 19459599516SKenneth E. Jansenc......................................... 19559599516SKenneth E. Jansen 196513954efSKenneth E. Jansen! change the freestream and inflow eddy viscosity to reflect different 197513954efSKenneth E. Jansen! levels of freestream turbulence 198513954efSKenneth E. Jansen! 199513954efSKenneth E. Jansen! First override boundary condition values 200513954efSKenneth E. Jansen! USES imapInlet from Mach Control so if that gets conditionaled away 201513954efSKenneth E. Jansen! it has to know if it is needed here 202513954efSKenneth E. Jansen! 203513954efSKenneth E. Jansen if(isetEV_IC_BC.eq.1) then 204513954efSKenneth E. Jansen allocate(vortG(nshg, 4)) 205513954efSKenneth E. Jansen call vortGLB(yold, x, shp, shgl, ilwork, vortG) 206513954efSKenneth 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 207513954efSKenneth E. Jansen write(*,*) "vortmax = ", vortmax 20859599516SKenneth E. Jansen 209513954efSKenneth E. Jansen !Find the maximum shear in the simulation 210513954efSKenneth E. Jansen if(numpe.gt.1) then 211513954efSKenneth E. Jansen call MPI_ALLREDUCE(vortmax, vortmaxg, 1, 212513954efSKenneth E. Jansen & MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD, ierr ) 213513954efSKenneth E. Jansen vortmax = vortmaxg 214513954efSKenneth E. Jansen endif 21559599516SKenneth E. Jansen 216513954efSKenneth E. Jansen !Apply eddy viscosity at the inlet 217513954efSKenneth E. Jansen do i=1,icountInlet ! for now only coded to catch primary inlet, not blower 218513954efSKenneth E. Jansen BC(imapInlet(i),7)=evis_IC_BC 219513954efSKenneth E. Jansen enddo 220513954efSKenneth E. Jansen 221513954efSKenneth E. Jansen !Apply eddy viscosity through the quasi-inviscid portion of the domain 222513954efSKenneth E. Jansen do i = 1,nshg 223513954efSKenneth E. Jansen if(abs(vortG(i,4)).ge.vortmax*0.01) yold(i,6)=evis_IC_BC 224513954efSKenneth E. Jansen enddo 225513954efSKenneth E. Jansen isclr=1 ! fix scalar 226513954efSKenneth E. Jansen call itrBCsclr(yold,ac,iBC,BC,iper,ilwork) 227513954efSKenneth E. Jansen 228513954efSKenneth E. Jansen deallocate(vortG) 229513954efSKenneth E. Jansen endif 23059599516SKenneth E. Jansenc 23159599516SKenneth E. Jansenc.... loop through the time sequences 23259599516SKenneth E. Jansenc 23359599516SKenneth E. Jansen do 3000 itsq = 1, ntseq 23459599516SKenneth E. Jansen itseq = itsq 23559599516SKenneth E. Jansenc 23659599516SKenneth E. Jansenc.... set up the current parameters 23759599516SKenneth E. Jansenc 23859599516SKenneth E. Jansen nstp = nstep(itseq) 23959599516SKenneth E. Jansen nitr = niter(itseq) 24059599516SKenneth E. Jansen LCtime = loctim(itseq) 24159599516SKenneth E. Jansenc 24259599516SKenneth E. Jansen call itrSetup ( y, acold) 24359599516SKenneth E. Jansen isclr=0 24459599516SKenneth E. Jansen 24559599516SKenneth E. Jansen niter(itseq)=0 ! count number of flow solves in a step 24659599516SKenneth E. Jansen ! (# of iterations) 24759599516SKenneth E. Jansen do i=1,seqsize 24859599516SKenneth E. Jansen if(stepseq(i).eq.0) niter(itseq)=niter(itseq)+1 24959599516SKenneth E. Jansen enddo 25059599516SKenneth E. Jansen nitr = niter(itseq) 25159599516SKenneth E. Jansenc 25259599516SKenneth E. Jansenc.... determine how many scalar equations we are going to need to solve 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansen nsclrsol=nsclr ! total number of scalars solved. At 25559599516SKenneth E. Jansen ! some point we probably want to create 25659599516SKenneth E. Jansen ! a map, considering stepseq(), to find 25759599516SKenneth E. Jansen ! what is actually solved and only 25859599516SKenneth E. Jansen ! dimension EGmasst to the appropriate 25959599516SKenneth E. Jansen ! size. 26059599516SKenneth E. Jansen 26159599516SKenneth E. Jansen if(nsclrsol.gt.0)allocate (EGmasst(numel*nshape*nshape 26259599516SKenneth E. Jansen & ,nsclrsol)) 26359599516SKenneth E. Jansen 26459599516SKenneth E. Jansenc 26559599516SKenneth E. Jansenc.... loop through the time steps 26659599516SKenneth E. Jansenc 26759599516SKenneth E. Jansen ttim(1) = REAL(secs(0.0)) / 100. 26859599516SKenneth E. Jansen ttim(2) = secs(0.0) 26959599516SKenneth E. Jansen 27059599516SKenneth E. Jansenc tcorecp1 = REAL(secs(0.0)) / 100. 27159599516SKenneth E. Jansenc tcorewc1 = secs(0.0) 27259599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 273513954efSKenneth E. Jansen if(myrank.eq.master) then 27459599516SKenneth E. Jansen tcorecp1 = TMRC() 27559599516SKenneth E. Jansen endif 27659599516SKenneth E. Jansen 27759599516SKenneth E. Jansen rmub=datmat(1,2,1) 27859599516SKenneth E. Jansen if(rmutarget.gt.0) then 27959599516SKenneth E. Jansen rmue=rmutarget 28059599516SKenneth E. Jansen xmulfact=(rmue/rmub)**(1.0/nstp) 281513954efSKenneth E. Jansen if(myrank.eq.master) then 28259599516SKenneth E. Jansen write(*,*) 'viscosity will by multiplied by ', xmulfact 28359599516SKenneth E. Jansen write(*,*) 'to bring it from ', rmub,' down to ', rmue 28459599516SKenneth E. Jansen endif 28559599516SKenneth E. Jansen datmat(1,2,1)=datmat(1,2,1)/xmulfact ! make first step right 28659599516SKenneth E. Jansen else 28759599516SKenneth E. Jansen rmue=datmat(1,2,1) ! keep constant 28859599516SKenneth E. Jansen xmulfact=one 28959599516SKenneth E. Jansen endif 29059599516SKenneth E. Jansen if(iramp.eq.1) then 29159599516SKenneth E. Jansen call initBCprofileScale(vbc_prof,BC,yold,x) 29259599516SKenneth E. Jansen! fix the yold values to the reset BC 29359599516SKenneth E. Jansen call itrBC (yold, ac, iBC, BC, iper, ilwork) 29459599516SKenneth E. Jansen isclr=1 ! fix scalar 29559599516SKenneth E. Jansen call itrBCsclr(yold,ac,iBC,BC,iper,ilwork) 29659599516SKenneth E. Jansen endif 29759599516SKenneth E. Jansen 29859599516SKenneth E. Jansen867 continue 299513954efSKenneth E. Jansen 300513954efSKenneth E. Jansen 301513954efSKenneth E. Jansenc============ Start the loop of time steps============================c 302513954efSKenneth E. Jansen! edamp2=.99 303513954efSKenneth E. Jansen! edamp3=0.05 304513954efSKenneth E. Jansen deltaInlInv=one/(0.125*0.0254) 30559599516SKenneth E. Jansen do 2000 istp = 1, nstp 306513954efSKenneth E. Jansen 307513954efSKenneth E. Jansen 30859599516SKenneth E. Jansen if(iramp.eq.1) 30959599516SKenneth E. Jansen & call BCprofileScale(vbc_prof,BC,yold) 31059599516SKenneth E. Jansen 31159599516SKenneth E. Jansenc call rerun_check(stopjob) 31259599516SKenneth E. Jansencc if(stopjob.ne.0) goto 2001 31359599516SKenneth E. Jansenc 31459599516SKenneth E. Jansenc Decay of scalars 31559599516SKenneth E. Jansenc 31659599516SKenneth E. Jansen if(nsclr.gt.0 .and. tdecay.ne.1) then 31759599516SKenneth E. Jansen yold(:,6:ndof)=y(:,6:ndof)*tdecay 31859599516SKenneth E. Jansen BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*tdecay 31959599516SKenneth E. Jansen endif 32059599516SKenneth E. Jansen 32159599516SKenneth E. Jansen if(nosource.eq.1) BC(:,7:6+nsclr)= BC(:,7:6+nsclr)*0.8 32259599516SKenneth E. Jansen 32359599516SKenneth E. Jansen 32459599516SKenneth E. Jansenc xi=istp*one/nstp 32559599516SKenneth E. Jansenc datmat(1,2,1)=rmub*(1.0-xi)+xi*rmue 32659599516SKenneth E. Jansen datmat(1,2,1)=xmulfact*datmat(1,2,1) 32759599516SKenneth E. Jansen 32859599516SKenneth E. Jansenc.... if we have time varying boundary conditions update the values of BC. 32959599516SKenneth E. Jansenc these will be for time step n+1 so use lstep+1 33059599516SKenneth E. Jansenc 33159599516SKenneth E. Jansen if(itvn.gt.0) call BCint((lstep+1)*Delt(1), shp, shgl, 33259599516SKenneth E. Jansen & shpb, shglb, x, BC, iBC) 33359599516SKenneth E. Jansen 33459599516SKenneth E. Jansen if(iLES.gt.0) then 33559599516SKenneth E. Jansenc 33659599516SKenneth E. Jansenc.... get dynamic model coefficient 33759599516SKenneth E. Jansenc 33859599516SKenneth E. Jansen ilesmod=iLES/10 33959599516SKenneth E. Jansenc 34059599516SKenneth E. Jansenc digit bit set filter rule, 10 bit set model 34159599516SKenneth E. Jansenc 34259599516SKenneth E. Jansen if (ilesmod.eq.0) then ! 0 < iLES < 10 => dyn. model calculated 34359599516SKenneth E. Jansen ! at nodes based on discrete filtering 34459599516SKenneth E. Jansen call getdmc (yold, shgl, shp, 34559599516SKenneth E. Jansen & iper, ilwork, nsons, 34659599516SKenneth E. Jansen & ifath, x) 34759599516SKenneth E. Jansen endif 34859599516SKenneth E. Jansen if (ilesmod .eq. 1) then ! 10 < iLES < 20 => dynamic-mixed 34959599516SKenneth E. Jansen ! at nodes based on discrete filtering 35059599516SKenneth E. Jansen call bardmc (yold, shgl, shp, 35159599516SKenneth E. Jansen & iper, ilwork, 35259599516SKenneth E. Jansen & nsons, ifath, x) 35359599516SKenneth E. Jansen endif 35459599516SKenneth E. Jansen if (ilesmod .eq. 2) then ! 20 < iLES < 30 => dynamic at quad 35559599516SKenneth E. Jansen ! pts based on lumped projection filt. 35659599516SKenneth E. Jansen call projdmc (yold, shgl, shp, 35759599516SKenneth E. Jansen & iper, ilwork, x) 35859599516SKenneth E. Jansen endif 35959599516SKenneth E. Jansenc 360513954efSKenneth E. Jansen endif ! endif of iLES 36159599516SKenneth E. Jansen 36259599516SKenneth E. Jansen 36359599516SKenneth E. Jansenc 36459599516SKenneth E. Jansenc.... set traction BCs for modeled walls 36559599516SKenneth E. Jansenc 36659599516SKenneth E. Jansen if (itwmod.ne.0) then !wallfn check 36759599516SKenneth E. Jansen call asbwmod(yold, acold, x, BC, iBC, 36859599516SKenneth E. Jansen & iper, ilwork, ifath, velbar) 36959599516SKenneth E. Jansen endif 37059599516SKenneth E. Jansenc 37159599516SKenneth E. Jansenc.... -----------------------> predictor phase <----------------------- 37259599516SKenneth E. Jansenc 37359599516SKenneth E. Jansen call itrPredict( yold, acold, y, ac ) 37459599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 37559599516SKenneth E. Jansen isclr = zero 37659599516SKenneth E. Jansen if (nsclr.gt.zero) then 37759599516SKenneth E. Jansen do isclr=1,nsclr 37859599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 37959599516SKenneth E. Jansen enddo 38059599516SKenneth E. Jansen endif 38159599516SKenneth E. Jansenc 38259599516SKenneth E. Jansenc.... --------------------> multi-corrector phase <-------------------- 38359599516SKenneth E. Jansenc 38459599516SKenneth E. Jansen iter=0 38559599516SKenneth E. Jansen ilss=0 ! this is a switch thrown on first solve of LS redistance 38659599516SKenneth E. Jansenc 38759599516SKenneth E. JansencHACK to make it keep solving RANS until tolerance is reached 38859599516SKenneth E. Jansenc 38959599516SKenneth E. Jansen istop=0 390513954efSKenneth E. Jansen! blocking extra RANS steps for now iMoreRANS=0 391513954efSKenneth E. Jansen iMoreRANS=6 39259599516SKenneth E. Jansenc 39359599516SKenneth E. Jansenc find the the RANS portion of the sequence 39459599516SKenneth E. Jansenc 39559599516SKenneth E. Jansen do istepc=1,seqsize 39659599516SKenneth E. Jansen if(stepseq(istepc).eq.10) iLastRANS=istepc 39759599516SKenneth E. Jansen enddo 39859599516SKenneth E. Jansen 39959599516SKenneth E. Jansen iseqStart=1 40059599516SKenneth E. Jansen9876 continue 40159599516SKenneth E. Jansenc 40259599516SKenneth E. Jansen do istepc=iseqStart,seqsize 40359599516SKenneth E. Jansen icode=stepseq(istepc) 40459599516SKenneth E. Jansen if(mod(icode,10).eq.0) then ! this is a solve 40559599516SKenneth E. Jansen isolve=icode/10 40659599516SKenneth E. Jansen if(isolve.eq.0) then ! flow solve (encoded as 0) 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansen etol=epstol(1) 40959599516SKenneth E. Jansen iter = iter+1 41059599516SKenneth E. Jansen ifuncs(1) = ifuncs(1) + 1 41159599516SKenneth E. Jansenc 41259599516SKenneth E. Jansenc.... reset the aerodynamic forces 41359599516SKenneth E. Jansenc 41459599516SKenneth E. Jansen Force(1) = zero 41559599516SKenneth E. Jansen Force(2) = zero 41659599516SKenneth E. Jansen Force(3) = zero 41759599516SKenneth E. Jansen HFlux = zero 41859599516SKenneth E. Jansenc 41959599516SKenneth E. Jansenc.... form the element data and solve the matrix problem 42059599516SKenneth E. Jansenc 42159599516SKenneth E. Jansenc.... explicit solver 42259599516SKenneth E. Jansenc 42359599516SKenneth E. Jansen if (impl(itseq) .eq. 0) then 42459599516SKenneth E. Jansen if (myrank .eq. master) 42559599516SKenneth E. Jansen & call error('itrdrv ','impl ',impl(itseq)) 42659599516SKenneth E. Jansen endif 42759599516SKenneth E. Jansen if (mod(impl(1),100)/10 .eq. 1) then ! sparse solve 42859599516SKenneth E. Jansenc 42959599516SKenneth E. Jansenc.... preconditioned sparse matrix GMRES solver 43059599516SKenneth E. Jansenc 43159599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 43259599516SKenneth E. Jansen iprec=lhs 43359599516SKenneth E. Jansen nedof = nflow*nshape 43459599516SKenneth E. Jansenc write(*,*) 'lhs=',lhs 435513954efSKenneth E. Jansen if(usingpetsc.eq.1) then 43617860365SKenneth E. Jansen#if (HAVE_PETSC) 437513954efSKenneth E. Jansen call SolGMRp (y, ac, yold, 438513954efSKenneth E. Jansen & x, 439513954efSKenneth E. Jansen & iBC, BC, 440513954efSKenneth E. Jansen & colm, rowp, lhsk, 441513954efSKenneth E. Jansen & res, 442513954efSKenneth E. Jansen & BDiag, 443513954efSKenneth E. Jansen & iper, ilwork, 444513954efSKenneth E. Jansen & shp, shgl, 445513954efSKenneth E. Jansen & shpb, shglb, solinc, 446513954efSKenneth E. Jansen & rerr, fncorp ) 44717860365SKenneth E. Jansen#else 448*79f1763eSKenneth E. Jansen if(myrank.eq.0) write(*,*) 'exiting because run time input asked for PETSc, not linked in exec' 44917860365SKenneth E. Jansen call error('itrdrv ','noPETSc',usingpetsc) 45017860365SKenneth E. Jansen#endif 451513954efSKenneth E. Jansen else 45259599516SKenneth E. Jansen call SolGMRs (y, ac, yold, 45359599516SKenneth E. Jansen & acold, x, 45459599516SKenneth E. Jansen & iBC, BC, 45559599516SKenneth E. Jansen & colm, rowp, lhsk, 45659599516SKenneth E. Jansen & res, 457e72fd12cSBen Matthews & BDiag, hBrg, eBrg, 458e72fd12cSBen Matthews & yBrg, Rcos, Rsin, 45959599516SKenneth E. Jansen & iper, ilwork, 46059599516SKenneth E. Jansen & shp, shgl, 46159599516SKenneth E. Jansen & shpb, shglb, solinc, 46259599516SKenneth E. Jansen & rerr) 463513954efSKenneth E. Jansen endif 46459599516SKenneth E. Jansen else if (mod(impl(1),100)/10 .eq. 2) then ! mfg solve 46559599516SKenneth E. Jansenc 46659599516SKenneth E. Jansenc.... preconditioned matrix-free GMRES solver 46759599516SKenneth E. Jansenc 46859599516SKenneth E. Jansen lhs=0 46959599516SKenneth E. Jansen iprec = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 47059599516SKenneth E. Jansen nedof = 0 47159599516SKenneth E. Jansen call SolMFG (y, ac, yold, 47259599516SKenneth E. Jansen & acold, x, 47359599516SKenneth E. Jansen & iBC, BC, 47459599516SKenneth E. Jansen & res, 475e72fd12cSBen Matthews & BDiag, HBrg, eBrg, 476e72fd12cSBen Matthews & yBrg, Rcos, Rsin, 47759599516SKenneth E. Jansen & iper, ilwork, 47859599516SKenneth E. Jansen & shp, shgl, 47959599516SKenneth E. Jansen & shpb, shglb, solinc, 48059599516SKenneth E. Jansen & rerr) 48159599516SKenneth E. Jansenc 48259599516SKenneth E. Jansen else if (mod(impl(1),100)/10 .eq. 3) then ! ebe solve 48359599516SKenneth E. Jansenc.... preconditioned ebe matrix GMRES solver 48459599516SKenneth E. Jansenc 48559599516SKenneth E. Jansen 48659599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(1)-1,LHSupd(1))) 48759599516SKenneth E. Jansen iprec = lhs 48859599516SKenneth E. Jansen nedof = nflow*nshape 48959599516SKenneth E. Jansenc write(*,*) 'lhs=',lhs 49059599516SKenneth E. Jansen call SolGMRe (y, ac, yold, 49159599516SKenneth E. Jansen & acold, x, 49259599516SKenneth E. Jansen & iBC, BC, 49359599516SKenneth E. Jansen & EGmass, res, 494e72fd12cSBen Matthews & BDiag, HBrg, eBrg, 495e72fd12cSBen Matthews & yBrg, Rcos, Rsin, 49659599516SKenneth E. Jansen & iper, ilwork, 49759599516SKenneth E. Jansen & shp, shgl, 49859599516SKenneth E. Jansen & shpb, shglb, solinc, 49959599516SKenneth E. Jansen & rerr) 50059599516SKenneth E. Jansen endif 50159599516SKenneth E. Jansenc 50259599516SKenneth E. Jansen else ! solve a scalar (encoded at isclr*10) 50359599516SKenneth E. Jansen isclr=isolve 504513954efSKenneth E. Jansen etol=epstol(isclr+2) ! note that for both epstol and LHSupd 1 is flow 2 temp isclr+2 for scalars 505513954efSKenneth E. Jansen ifuncs(isclr+2) = ifuncs(isclr+2) + 1 50659599516SKenneth E. Jansen if((iLSet.eq.2).and.(ilss.eq.0) 50759599516SKenneth E. Jansen & .and.(isclr.eq.2)) then 50859599516SKenneth E. Jansen ilss=1 ! throw switch (once per step) 50959599516SKenneth E. Jansenc 51059599516SKenneth E. Jansenc... copy the first scalar at t=n+1 into the second scalar of the 51159599516SKenneth E. Jansenc... level sets 51259599516SKenneth E. Jansenc 51359599516SKenneth E. Jansen y(:,6) = yold(:,6) + (y(:,6)-yold(:,6))/alfi 51459599516SKenneth E. Jansen y(:,7) = y(:,6) 51559599516SKenneth E. Jansen yold(:,7) = y(:,7) 51659599516SKenneth E. Jansen ac(:,7) = zero 51759599516SKenneth E. Jansenc 51859599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 51959599516SKenneth E. Jansenc 52059599516SKenneth E. Jansenc....store the flow alpha, gamma parameter values and assigm them the 52159599516SKenneth E. Jansenc....Backward Euler parameters to solve the second levelset scalar 52259599516SKenneth E. Jansenc 52359599516SKenneth E. Jansen alfit=alfi 52459599516SKenneth E. Jansen gamit=gami 52559599516SKenneth E. Jansen almit=almi 52659599516SKenneth E. Jansen alfi = 1 52759599516SKenneth E. Jansen gami = 1 52859599516SKenneth E. Jansen almi = 1 52959599516SKenneth E. Jansen endif 53059599516SKenneth E. Jansenc 53159599516SKenneth E. Jansen lhs = 1 - min(1,mod(ifuncs(isclr+2)-1, 53259599516SKenneth E. Jansen & LHSupd(isclr+2))) 53359599516SKenneth E. Jansen iprec = lhs 53459599516SKenneth E. Jansen istop=0 535513954efSKenneth E. Jansen if(usingPETSc.eq.1) then 53617860365SKenneth E. Jansen#if (HAVE_PETSC) 537513954efSKenneth E. Jansen call SolGMRpSclr(y, ac, 538513954efSKenneth E. Jansen & x, elDw, 539513954efSKenneth E. Jansen & iBC, BC, 540513954efSKenneth E. Jansen & colm, rowp, 541513954efSKenneth E. Jansen & iper, ilwork, 542513954efSKenneth E. Jansen & shp, shgl, 543513954efSKenneth E. Jansen & shpb, shglb, rest, 544513954efSKenneth E. Jansen & solinc(1,isclr+5),fncorp) 54517860365SKenneth E. Jansen#else 54617860365SKenneth E. Jansen write(*,*) 'exiting because run time input asked for PETSc, not linked in exec' 54717860365SKenneth E. Jansen call error('itrdrv ','noPETSc',usingpetsc) 54817860365SKenneth E. Jansen#endif 549513954efSKenneth E. Jansen else 55059599516SKenneth E. Jansen call SolGMRSclr(y, ac, yold, 55159599516SKenneth E. Jansen & acold, EGmasst(1,isclr), 55259599516SKenneth E. Jansen & x, elDw, 55359599516SKenneth E. Jansen & iBC, BC, 55459599516SKenneth E. Jansen & rest, 555e72fd12cSBen Matthews & HBrg, eBrg, 556e72fd12cSBen Matthews & yBrg, Rcos, Rsin, 55759599516SKenneth E. Jansen & iper, ilwork, 55859599516SKenneth E. Jansen & shp, shgl, 55959599516SKenneth E. Jansen & shpb, shglb, solinc(1,isclr+5)) 560513954efSKenneth E. Jansen endif 56159599516SKenneth E. Jansenc 56259599516SKenneth E. Jansen endif ! end of scalar type solve 56359599516SKenneth E. Jansenc 56459599516SKenneth E. Jansenc 56559599516SKenneth E. Jansenc.... end of the multi-corrector loop 56659599516SKenneth E. Jansenc 56759599516SKenneth E. Jansen 1000 continue !check this 56859599516SKenneth E. Jansen 56959599516SKenneth E. Jansen else ! this is an update (mod did not equal zero) 57059599516SKenneth E. Jansen iupdate=icode/10 ! what to update 57159599516SKenneth E. Jansen if(iupdate.eq.0) then !update flow 57259599516SKenneth E. Jansen call itrCorrect ( y, ac, yold, acold, solinc) 57359599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 57459599516SKenneth E. Jansen call tnanq(y, 5, 'y_updbc') 57559599516SKenneth E. Jansenc Elaine-SPEBC 57659599516SKenneth E. Jansen if((irscale.ge.0).and.(myrank.eq.master)) then 57759599516SKenneth E. Jansen call genscale(y, x, iBC) 57859599516SKenneth E. Jansenc call itrBC (y, ac, iBC, BC, iper, ilwork) 57959599516SKenneth E. Jansen endif 58059599516SKenneth E. Jansen else ! update scalar 58159599516SKenneth E. Jansen isclr=iupdate !unless 58259599516SKenneth E. Jansen if(iupdate.eq.nsclr+1) isclr=0 58359599516SKenneth E. Jansen call itrCorrectSclr ( y, ac, yold, acold, 58459599516SKenneth E. Jansen & solinc(1,isclr+5)) 58559599516SKenneth E. Jansen if (ilset.eq.2 .and. isclr.eq.2) then 58659599516SKenneth E. Jansen fct2=one/almi 58759599516SKenneth E. Jansen fct3=one/alfi 58859599516SKenneth E. Jansen acold(:,7) = acold(:,7) 58959599516SKenneth E. Jansen & + (ac(:,7)-acold(:,7))*fct2 59059599516SKenneth E. Jansen yold(:,7) = yold(:,7) 59159599516SKenneth E. Jansen & + (y(:,7)-yold(:,7))*fct3 59259599516SKenneth E. Jansen call itrBCSclr ( yold, acold, iBC, BC, 59359599516SKenneth E. Jansen & iper, ilwork) 59459599516SKenneth E. Jansen ac(:,7) = acold(:,7)*(one-almi/gami) 59559599516SKenneth E. Jansen y(:,7) = yold(:,7) 59659599516SKenneth E. Jansen ac(:,7) = zero 59759599516SKenneth E. Jansen if (ivconstraint .eq. 1) then 59859599516SKenneth E. Jansen & 59959599516SKenneth E. Jansenc ... applying the volume constraint 60059599516SKenneth E. Jansenc 60159599516SKenneth E. Jansen call solvecon (y, x, iBC, BC, 60259599516SKenneth E. Jansen & iper, ilwork, shp, shgl) 60359599516SKenneth E. Jansenc 60459599516SKenneth E. Jansen endif ! end of volume constraint calculations 60559599516SKenneth E. Jansen endif 60659599516SKenneth E. Jansen call itrBCSclr ( y, ac, iBC, BC, iper, ilwork) 60759599516SKenneth E. Jansen endif 60859599516SKenneth E. Jansen endif !end of switch between solve or update 60959599516SKenneth E. Jansen enddo ! loop over sequence in step 61059599516SKenneth E. Jansen if((istop.lt.0).and.(iMoreRANS.lt.5)) then 61159599516SKenneth E. Jansen iMoreRANS=iMoreRANS+1 612513954efSKenneth E. Jansen if(myrank.eq.master) write(*,*) 'istop =', istop 61359599516SKenneth E. Jansen iseqStart=iLastRANS 61459599516SKenneth E. Jansen goto 9876 61559599516SKenneth E. Jansen endif 61659599516SKenneth E. Jansenc 61759599516SKenneth E. Jansenc Find the solution at the end of the timestep and move it to old 61859599516SKenneth E. Jansenc 61959599516SKenneth E. Jansenc.... First to reassign the parameters for the original time integrator scheme 62059599516SKenneth E. Jansenc 62159599516SKenneth E. Jansen if((iLSet.eq.2).and.(ilss.eq.1)) then 62259599516SKenneth E. Jansen alfi =alfit 62359599516SKenneth E. Jansen gami =gamit 62459599516SKenneth E. Jansen almi =almit 62559599516SKenneth E. Jansen endif 62659599516SKenneth E. Jansen call itrUpdate( yold, acold, y, ac) 62759599516SKenneth E. Jansen call itrBC (yold, acold, iBC, BC, iper,ilwork) 62859599516SKenneth E. Jansenc Elaine-SPEBC 62959599516SKenneth E. Jansen if((irscale.ge.0).and.(myrank.eq.master)) then 63059599516SKenneth E. Jansen call genscale(yold, x, iBC) 63159599516SKenneth E. Jansenc call itrBC (y, ac, iBC, BC, iper, ilwork) 63259599516SKenneth E. Jansen endif 63359599516SKenneth E. Jansen do isclr=1,nsclr 63459599516SKenneth E. Jansen call itrBCSclr (yold, acold, iBC, BC, iper, ilwork) 63559599516SKenneth E. Jansen enddo 63659599516SKenneth E. Jansenc 63759599516SKenneth E. Jansen istep = istep + 1 63859599516SKenneth E. Jansen lstep = lstep + 1 63959599516SKenneth E. Jansen ntoutv=max(ntout,100) 640513954efSKenneth E. Jansen !boundary flux output moved after the error calculation so 641513954efSKenneth E. Jansen !everything can be written out in a single chunk of code - 642513954efSKenneth E. Jansen !Nicholas Mati 64359599516SKenneth E. Jansen 644513954efSKenneth E. Jansen !dump TIME SERIES 64559599516SKenneth E. Jansen if (exts) then 646513954efSKenneth E. Jansen !Write the probe data to disc. Note that IO to disc only 647513954efSKenneth E. Jansen !occurs when mod(lstep, nbuff) == 0. However, this 648513954efSKenneth E. Jansen !function also does data buffering and must be called 649513954efSKenneth E. Jansen !every time step. 650513954efSKenneth E. Jansen call TD_bufferData() 651513954efSKenneth E. Jansen call TD_writeData(fvarts, .false.) 65259599516SKenneth E. Jansen endif 65359599516SKenneth E. Jansen 654513954efSKenneth E. Jansen !Update the Mach Control 655513954efSKenneth E. Jansen if(exts .and. exMC) then 656513954efSKenneth E. Jansen !Note: the function MC_updateState must be called after 657513954efSKenneth E. Jansen !the function TD_bufferData due to dependencies on 658513954efSKenneth E. Jansen !vartsbuff(:,:,:). 659513954efSKenneth E. Jansen call MC_updateState() 660513954efSKenneth E. Jansen call MC_applyBC(BC) 661513954efSKenneth E. Jansen call MC_printState() 66259599516SKenneth E. Jansen 663513954efSKenneth E. Jansen !Write the state if a restart is also being written. 664513954efSKenneth E. Jansen if(mod(lstep,ntout).eq.0 ) call MC_writeState(lstep) 665513954efSKenneth E. Jansen endif 66659599516SKenneth E. Jansen 667513954efSKenneth E. Jansen !update blower control 668513954efSKenneth E. Jansen if(BC_enable) then 669513954efSKenneth E. Jansen !Update the blower boundary conditions for the next 670513954efSKenneth E. Jansen !iteration. 671513954efSKenneth E. Jansen call BC_iter(BC) 67259599516SKenneth E. Jansen 673513954efSKenneth E. Jansen !Also write the current phases of the blowers if a 674513954efSKenneth E. Jansen !restart is also being written. 675513954efSKenneth E. Jansen if(mod(lstep, ntout) == 0) call BC_writePhase(lstep) 676513954efSKenneth E. Jansen endif 67759599516SKenneth E. Jansen 678513954efSKenneth E. Jansen !.... Yi Chen Duct geometry8 679513954efSKenneth E. Jansen if(isetBlowing_Duct.gt.0)then 680513954efSKenneth E. Jansen if(ifixBlowingVel_Duct.eq.0)then 681513954efSKenneth E. Jansen if(nstp.gt.nBlowingStepsDuct)then 682513954efSKenneth E. Jansen nBlowingStepsDuct = nstp-2 683513954efSKenneth E. Jansen endif 684513954efSKenneth E. Jansen call setBlowing_Duct2(x,BC,yold,iTurbWall,istp) 68559599516SKenneth E. Jansen endif 68659599516SKenneth E. Jansen endif 687513954efSKenneth E. Jansen !... Yi Chen Duct geometry8 68859599516SKenneth E. Jansen 68959599516SKenneth E. Jansenc 69059599516SKenneth E. Jansenc.... -------------------> error calculation <----------------- 69159599516SKenneth E. Jansen if(ierrcalc.eq.1.or.ioybar.eq.1) then 69259599516SKenneth E. Jansen tfact=one/istep 69359599516SKenneth E. Jansen do idof=1,ndof 69459599516SKenneth E. Jansen ybar(:,idof) =tfact*yold(:,idof) + 69559599516SKenneth E. Jansen & (one-tfact)*ybar(:,idof) 69659599516SKenneth E. Jansen enddo 69759599516SKenneth E. Jansenc....compute average 69859599516SKenneth E. Jansenc... ybar(:,ndof+1:ndof+8) is for avg. of square as uu, vv, ww, pp, TT, uv, uw, and vw 69959599516SKenneth E. Jansen do idof=1,5 ! avg. of square for 5 flow variables 70059599516SKenneth E. Jansen ybar(:,ndof+idof) = tfact*yold(:,idof)**2 + 70159599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+idof) 70259599516SKenneth E. Jansen enddo 70359599516SKenneth E. Jansen ybar(:,ndof+6) = tfact*yold(:,1)*yold(:,2) + !uv 70459599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+6) 70559599516SKenneth E. Jansen ybar(:,ndof+7) = tfact*yold(:,1)*yold(:,3) + !uw 70659599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+7) 70759599516SKenneth E. Jansen ybar(:,ndof+8) = tfact*yold(:,2)*yold(:,3) + !vw 70859599516SKenneth E. Jansen & (one-tfact)*ybar(:,ndof+8) 70959599516SKenneth E. Jansenc... compute err 710513954efSKenneth E. Jansen rerr(:, 7)=rerr(:, 7)+(yold(:,1)-ybar(:,1))**2 711513954efSKenneth E. Jansen rerr(:, 8)=rerr(:, 8)+(yold(:,2)-ybar(:,2))**2 712513954efSKenneth E. Jansen rerr(:, 9)=rerr(:, 9)+(yold(:,3)-ybar(:,3))**2 713513954efSKenneth E. Jansen rerr(:,10)=rerr(:,10)+(yold(:,4)-ybar(:,4))**2 71459599516SKenneth E. Jansen endif 715513954efSKenneth E. Jansen 716513954efSKenneth E. Jansenc.. writing ybar field if requested in each restart file 717513954efSKenneth E. Jansen 718513954efSKenneth E. Jansen !here is where we save our averaged field. In some cases we want to 719513954efSKenneth E. Jansen !write it less frequently 720513954efSKenneth E. Jansen if( (irs >= 1) .and. ( 721513954efSKenneth E. Jansen & mod(lstep, ntout) == 0 .or. !Checkpoint 722513954efSKenneth E. Jansen & istep == nstp) )then !End of simulation 723513954efSKenneth E. Jansen 724513954efSKenneth E. Jansen if( (mod(lstep, ntoutv) .eq. 0) .and. 725513954efSKenneth E. Jansen & ((irscale.ge.0).or.(itwmod.gt.0) .or. 726513954efSKenneth E. Jansen & ((nsonmax.eq.1).and.(iLES.gt.0)))) 727513954efSKenneth E. Jansen & call rwvelb ('out ', velbar ,ifail) 728513954efSKenneth E. Jansen 729513954efSKenneth E. Jansen !BUG: need to update new_interface to work with SyncIO. 730513954efSKenneth E. Jansen !Bflux is presently completely crippled. Note that restar 731513954efSKenneth E. Jansen !has also been moved here for readability. 732513954efSKenneth E. Jansen! call Bflux (yold, acold, x, compute boundary fluxes and print out 733513954efSKenneth E. Jansen! & shp, shgl, shpb, 734513954efSKenneth E. Jansen! & shglb, nodflx, ilwork) 735513954efSKenneth E. Jansen 736513954efSKenneth E. Jansen call timer ('Output ') !set up the timer 737513954efSKenneth E. Jansen 738513954efSKenneth E. Jansen !write the solution and time derivative 739513954efSKenneth E. Jansen call restar ('out ', yold, acold) 740513954efSKenneth E. Jansen 741513954efSKenneth E. Jansen !Write the distance to wall field in each restart 742513954efSKenneth E. Jansen if((istep==nstp) .and. (irans < 0 )) then !d2wall is allocated 743513954efSKenneth E. Jansen call write_field(myrank,'a'//char(0),'dwal'//char(0),4, 744513954efSKenneth E. Jansen & d2wall,'d'//char(0), nshg, 1, lstep) 745513954efSKenneth E. Jansen endif 746513954efSKenneth E. Jansen 747513954efSKenneth E. Jansen !Write the time average in each restart. 748513954efSKenneth E. Jansen if(ioybar.eq.1)then 749513954efSKenneth E. Jansen call write_field(myrank,'a'//char(0),'ybar'//char(0),4, 750513954efSKenneth E. Jansen & ybar,'d'//char(0),nshg,ndof+8,lstep) 751513954efSKenneth E. Jansen endif 752513954efSKenneth E. Jansen 753513954efSKenneth E. Jansen !Write the error feild at the end of each step sequence 754513954efSKenneth E. Jansen if(ierrcalc.eq.1 .and. istep == nstp) then 755513954efSKenneth E. Jansen !smooth the error indicators 756513954efSKenneth E. Jansen 757513954efSKenneth E. Jansen do i=1,ierrsmooth 758513954efSKenneth E. Jansen call errsmooth( rerr, x, iper, ilwork, shp, shgl, iBC ) 759513954efSKenneth E. Jansen enddo 760513954efSKenneth E. Jansen 761513954efSKenneth E. Jansen! call write_error(myrank, lstep, nshg, 10, rerr ) 762513954efSKenneth E. Jansen call write_field( 763513954efSKenneth E. Jansen & myrank, 'a'//char(0), 'errors'//char(0), 6, 764513954efSKenneth E. Jansen & rerr, 'd'//char(0), nshg, 10, lstep) 765513954efSKenneth E. Jansen endif 766513954efSKenneth E. Jansen 767513954efSKenneth 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 768513954efSKenneth E. Jansenc 769513954efSKenneth E. Jansenc call write_field2(myrank,'a'//char(0),'ybar'//char(0), 770513954efSKenneth E. Jansenc & 4,ybar,'d'//char(0),nshg,ndof+8, 771513954efSKenneth E. Jansenc & lstep,istep) 772513954efSKenneth E. Jansen endif 773513954efSKenneth E. Jansen 774513954efSKenneth E. Jansen 2000 continue !end of NSTEP loop 77559599516SKenneth E. Jansen 2001 continue 77659599516SKenneth E. Jansen 77759599516SKenneth E. Jansen ttim(1) = REAL(secs(0.0)) / 100. - ttim(1) 77859599516SKenneth E. Jansen ttim(2) = secs(0.0) - ttim(2) 77959599516SKenneth E. Jansen 78059599516SKenneth E. Jansenc tcorecp2 = REAL(secs(0.0)) / 100. 78159599516SKenneth E. Jansenc tcorewc2 = secs(0.0) 78259599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 783513954efSKenneth E. Jansen if(myrank.eq.master) then 78459599516SKenneth E. Jansen tcorecp2 = TMRC() 78559599516SKenneth E. Jansen write(6,*) 'T(core) cpu = ',tcorecp2-tcorecp1 78659599516SKenneth E. Jansen endif 78759599516SKenneth E. Jansen 78859599516SKenneth E. Jansenc call wtime 78959599516SKenneth E. Jansen 790513954efSKenneth E. Jansen 3000 continue !end of NTSEQ loop 79159599516SKenneth E. Jansenc 79259599516SKenneth E. Jansenc.... ----------------------> Post Processing <---------------------- 79359599516SKenneth E. Jansenc 79459599516SKenneth E. Jansenc.... print out the last step 79559599516SKenneth E. Jansenc 796513954efSKenneth E. Jansen! if ( (irs .ge. 1) .and. ((mod(lstep, ntout) .ne. 0) .or. 797513954efSKenneth E. Jansen! & (nstp .eq. 0))) then 798513954efSKenneth E. Jansen! if( (mod(lstep, ntoutv) .eq. 0) .and. 799513954efSKenneth E. Jansen! & ((irscale.ge.0).or.(itwmod.gt.0) .or. 800513954efSKenneth E. Jansen! & ((nsonmax.eq.1).and.(iLES.gt.0)))) 801513954efSKenneth E. Jansen! & call rwvelb ('out ', velbar ,ifail) 802513954efSKenneth E. Jansen! 803513954efSKenneth E. Jansen! call Bflux (yold, acold, x, 804513954efSKenneth E. Jansen! & shp, shgl, shpb, 805513954efSKenneth E. Jansen! & shglb, nodflx, ilwork) 806513954efSKenneth E. Jansen! endif 80759599516SKenneth E. Jansen 808513954efSKenneth E. Jansen 809513954efSKenneth E. Jansen 810513954efSKenneth E. Jansenc if(ioybar.eq.1) then 811513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'ybar'//char(0),4, 812513954efSKenneth E. Jansenc & ybar,'d'//char(0),nshg,ndof+8,lstep) 813513954efSKenneth E. Jansenc endif 814513954efSKenneth E. Jansen 815513954efSKenneth E. Jansenc if(iRANS.lt.0 .and. idistcalc.eq.1) then 816513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'DESd'//char(0),4, 817513954efSKenneth E. Jansenc & elDw,'d'//char(0),numel,1,lstep) 81859599516SKenneth E. Jansenc 819513954efSKenneth E. Jansenc call write_field(myrank,'a'//char(0),'dwal'//char(0),4, 820513954efSKenneth E. Jansenc & d2wall,'d'//char(0),nshg,1,lstep) 821513954efSKenneth E. Jansenc endif 82259599516SKenneth E. Jansen 82359599516SKenneth E. Jansenc 82459599516SKenneth E. Jansenc.... close history and aerodynamic forces files 82559599516SKenneth E. Jansenc 82659599516SKenneth E. Jansen if (myrank .eq. master) then 82759599516SKenneth E. Jansen close (ihist) 82859599516SKenneth E. Jansen close (iforce) 829513954efSKenneth E. Jansen 830513954efSKenneth E. Jansen if(exMC) then 831513954efSKenneth E. Jansen call MC_writeState(lstep) 832513954efSKenneth E. Jansen call MC_finalize 833513954efSKenneth E. Jansen endif 834513954efSKenneth E. Jansen 83559599516SKenneth E. Jansen if(exts) then 836513954efSKenneth E. Jansen call TD_writeData(fvarts, .true.) !force the flush of the buffer. 837513954efSKenneth E. Jansen call TD_finalize 83859599516SKenneth E. Jansen endif 83959599516SKenneth E. Jansen endif 840513954efSKenneth E. Jansen 841513954efSKenneth E. Jansen if(BC_enable) then !blower is allocated on all processes. 842513954efSKenneth E. Jansen if(mod(lstep, ntout) /= 0) then !May have already written file. 843513954efSKenneth E. Jansen call BC_writePhase(lstep) 844513954efSKenneth E. Jansen endif 845513954efSKenneth E. Jansen 846513954efSKenneth E. Jansen call BC_finalize 847513954efSKenneth E. Jansen endif 848513954efSKenneth E. Jansen 84959599516SKenneth E. Jansen close (iecho) 85059599516SKenneth E. Jansen if(iabc==1) deallocate(acs) 85159599516SKenneth E. Jansenc 85259599516SKenneth E. Jansenc.... end 85359599516SKenneth E. Jansenc 85459599516SKenneth E. Jansen return 85559599516SKenneth E. Jansen end 856513954efSKenneth E. Jansen 857513954efSKenneth E. Jansen 858