159599516SKenneth E. Jansen subroutine proces 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc---------------------------------------------------------------------- 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc This subroutine generates the problem data and calls the solution 659599516SKenneth E. Jansenc driver. 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 1059599516SKenneth E. Jansenc---------------------------------------------------------------------- 1159599516SKenneth E. Jansenc 1259599516SKenneth E. Jansen use readarrays ! used to access x, iper, ilwork 1359599516SKenneth E. Jansen use turbsa ! used to access d2wall 146b966dd8SCameron Smith use dtnmod 15bd5c8633SCameron Smith use periodicity 16bd5c8633SCameron Smith use pvsQbi 1759599516SKenneth E. Jansen include "common.h" 1859599516SKenneth E. Jansen include "mpif.h" 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansenc arrays in the following 2 lines are now dimensioned in readnblk 2159599516SKenneth E. Jansenc dimension x(numnp,nsd) 2259599516SKenneth E. Jansenc dimension iper(nshg), ilwork(nlwork) 2359599516SKenneth E. Jansenc 2459599516SKenneth E. Jansen dimension y(nshg,ndof), 2559599516SKenneth E. Jansen & iBC(nshg), 2659599516SKenneth E. Jansen & BC(nshg,ndofBC), 2759599516SKenneth E. Jansen & ac(nshg,ndof) 2859599516SKenneth E. Jansenc 2959599516SKenneth E. Jansenc.... shape function declarations 3059599516SKenneth E. Jansenc 3159599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 3259599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 3359599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 3459599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 3559599516SKenneth E. Jansenc 3659599516SKenneth E. Jansenc stuff for dynamic model s.w.avg and wall model 3759599516SKenneth E. Jansenc 3859599516SKenneth E. Jansenc dimension ifath(numnp), velbar(nfath,nflow), 3959599516SKenneth E. Jansenc & nsons(nfath) 4059599516SKenneth E. Jansen 4159599516SKenneth E. Jansen dimension velbar(nfath,nflow) 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansenc stuff to interpolate profiles at inlet 4459599516SKenneth E. Jansenc 4559599516SKenneth E. Jansen real*8 bcinterp(100,ndof+1),interp_mask(ndof) 4659599516SKenneth E. Jansen logical exlog 4759599516SKenneth E. Jansen 48513954efSKenneth E. Jansen !Duct 49513954efSKenneth E. Jansen real*8 c0, c1, c2, c3, x1, x2 50513954efSKenneth E. Jansen integer nn 51513954efSKenneth E. Jansen 5259599516SKenneth E. Jansenc if ((irscale .ge. 0) .and. (myrank.eq.master)) then 5359599516SKenneth E. Jansenc call setSPEBC(numnp, point2nfath, nsonmax) 5459599516SKenneth E. Jansenc endif 5559599516SKenneth E. Jansenc 5659599516SKenneth E. Jansenc.... generate the geometry and boundary conditions data 5759599516SKenneth E. Jansenc 5859599516SKenneth E. Jansen call gendat (y, ac, point2x, 5959599516SKenneth E. Jansen & iBC, BC, 6059599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 6159599516SKenneth E. Jansen & shgl, shpb, shglb, 6259599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 6359599516SKenneth E. Jansen call setper(nshg) 6459599516SKenneth E. Jansen call perprep(iBC,point2iper,nshg) 6559599516SKenneth E. Jansen if (iLES/10 .eq. 1) then 6659599516SKenneth E. Jansen call keeplhsG ! Allocating space for the mass (Gram) matrix to be 6759599516SKenneth E. Jansen ! used for projection filtering and reconstruction 6859599516SKenneth E. Jansen ! of the strain rate tensor. 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen call setrls ! Allocating space for the resolved Leonard stresses 7159599516SKenneth E. Jansenc See bardmc.f 7259599516SKenneth E. Jansen endif 7359599516SKenneth E. Jansenc 7459599516SKenneth E. Jansenc.... time averaged statistics 7559599516SKenneth E. Jansenc 7659599516SKenneth E. Jansen if (ioform .eq. 2) then 7759599516SKenneth E. Jansen call initStats(point2x, iBC, point2iper, point2ilwork) 7859599516SKenneth E. Jansen endif 7959599516SKenneth E. Jansenc 8059599516SKenneth E. Jansenc.... RANS turbulence model 8159599516SKenneth E. Jansenc 82*b4542ea8SKenneth E. Jansen! if (iRANS .lt. 0) then 8359599516SKenneth E. Jansen call initTurb( point2x ) 84*b4542ea8SKenneth E. Jansen! endif 8559599516SKenneth E. Jansenc 8659599516SKenneth E. Jansenc.... p vs. Q boundary 8759599516SKenneth E. Jansenc 8859599516SKenneth E. Jansen call initNABI( point2x, shpb ) 8959599516SKenneth E. Jansenc 9059599516SKenneth E. Jansenc.... check for execution mode 9159599516SKenneth E. Jansenc 9259599516SKenneth E. Jansen if (iexec .eq. 0) then 9359599516SKenneth E. Jansen lstep = 0 9459599516SKenneth E. Jansen call restar ('out ', y ,ac) 9559599516SKenneth E. Jansen return 9659599516SKenneth E. Jansen endif 9759599516SKenneth E. Jansenc 9859599516SKenneth E. Jansenc.... initialize AutoSponge 9959599516SKenneth E. Jansenc 10059599516SKenneth E. Jansen if(matflg(5,1).ge.4) then ! cool case (sponge) 10159599516SKenneth E. Jansen call initSponge( y,point2x) 10259599516SKenneth E. Jansen endif 10359599516SKenneth E. Jansenc 10459599516SKenneth E. Jansenc 10559599516SKenneth E. Jansenc.... adjust BC's to interpolate from file 10659599516SKenneth E. Jansenc 10759599516SKenneth E. Jansen 10859599516SKenneth E. Jansen inquire(file="inlet.dat",exist=exlog) 10959599516SKenneth E. Jansen if(exlog) then 11059599516SKenneth E. Jansen open (unit=654,file="inlet.dat",status="old") 11159599516SKenneth E. Jansen read(654,*) ninterp,ibcmatch,(interp_mask(j),j=1,ndof) 112*b4542ea8SKenneth E. Jansen! with no surfID control, this will also get applied to isothermal walls but! usually ok and can be extended if not. 113*b4542ea8SKenneth E. Jansen 11459599516SKenneth E. Jansen do i=1,ninterp 11559599516SKenneth E. Jansen read(654,*) (bcinterp(i,j),j=1,ndof+1) ! distance to wall+ 11659599516SKenneth E. Jansen ! ndof but note order of BC's 11759599516SKenneth E. Jansen ! p,t,u,v,w,scalars. Also note that must be in 11859599516SKenneth E. Jansen ! increasing distance from the wall order. 11959599516SKenneth E. Jansen 12059599516SKenneth E. Jansen enddo 12159599516SKenneth E. Jansen do i=1,nshg ! only correct for linears at this time 12259599516SKenneth E. Jansen if(mod(iBC(i),1024).eq.ibcmatch) then 12359599516SKenneth E. Jansen iupper=0 12459599516SKenneth E. Jansen do j=2,ninterp 12559599516SKenneth E. Jansen if(bcinterp(j,1).gt.d2wall(i)) then !bound found 12659599516SKenneth E. Jansen xi=(d2wall(i)-bcinterp(j-1,1))/ 12759599516SKenneth E. Jansen & (bcinterp(j,1)-bcinterp(j-1,1)) 12859599516SKenneth E. Jansen iupper=j 12959599516SKenneth E. Jansen exit 13059599516SKenneth E. Jansen endif 13159599516SKenneth E. Jansen enddo 13259599516SKenneth E. Jansen if(iupper.eq.0) then 13359599516SKenneth E. Jansen write(*,*) 'failure in finterp, ynint=',d2wall(i) 13459599516SKenneth E. Jansen stop 13559599516SKenneth E. Jansen endif 136*b4542ea8SKenneth E. Jansen if(lstep.eq.0) then ! apply this inlet bl as an IC if on step 0 137*b4542ea8SKenneth E. Jansen y(i,1:3)=(xi*bcinterp(iupper,4:6) 138*b4542ea8SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,4:6)) 139*b4542ea8SKenneth E. Jansen y(i,4)=(xi*bcinterp(iupper,2) 140*b4542ea8SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,2)) 141*b4542ea8SKenneth E. Jansen y(i,5)=(xi*bcinterp(iupper,3) 142*b4542ea8SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,3)) 14359599516SKenneth E. Jansen endif 144*b4542ea8SKenneth E. Jansen if(point2x(i,1).lt.1.0e-5 .and. mod(iBC(i),1024).eq.ibcmatch) then 145*b4542ea8SKenneth E. Jansen do j=1,ndof 146*b4542ea8SKenneth E. Jansen if(interp_mask(j).ne.zero) then 147*b4542ea8SKenneth E. Jansen BC(i,j)=(xi*bcinterp(iupper,j+1) 148*b4542ea8SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,j+1)) 14959599516SKenneth E. Jansen endif 150*b4542ea8SKenneth E. Jansen enddo 15159599516SKenneth E. Jansen endif 15259599516SKenneth E. Jansen enddo 15359599516SKenneth E. Jansen endif 15459599516SKenneth E. Jansenc$$$$$$$$$$$$$$$$$$$$ 15559599516SKenneth E. Jansen 156513954efSKenneth E. Jansen!====================================================================== 157513954efSKenneth E. Jansen!Modifications for Duct. Need to encapsulate in a function call. 158513954efSKenneth E. Jansen !specify an initial eddy viscosity ramp 159513954efSKenneth E. Jansen if(isetEVramp .gt. 0) then 160513954efSKenneth E. Jansen if(myrank .eq. 0) then 161513954efSKenneth E. Jansen write(*,*) "Setting eddy viscosity ramp with:" 162513954efSKenneth E. Jansen write(*,*) " - ramp X min = ", EVrampXmin 163513954efSKenneth E. Jansen write(*,*) " - ramp X max = ", EVrampXmax 164513954efSKenneth E. Jansen write(*,*) " - EV min = ", EVrampMin 165513954efSKenneth E. Jansen write(*,*) " - EV max = ", EVrampMax 166513954efSKenneth E. Jansen endif 167513954efSKenneth E. Jansen 168513954efSKenneth E. Jansen x1 = EVrampXmin !stuff in a shorter variable name to 169513954efSKenneth E. Jansen x2 = EVrampXmax !make the formulas cleaner 170513954efSKenneth E. Jansen !Newton Divided differences to generate a polynomial of 171513954efSKenneth E. Jansen !the form P(x) = c0 + x*(c1 + x*(c2 + (x - (x2 - x1))*c3)) 172513954efSKenneth E. Jansen !satisfying P(x1) = EVrampMin, P(x2) = EVrampMax, 173513954efSKenneth E. Jansen ! P'(x1) = 0, and P'(x2) = 0 174513954efSKenneth E. Jansen 175513954efSKenneth E. Jansen c0 = EVrampMin 176513954efSKenneth E. Jansen c1 = 0 !zero derivative 177513954efSKenneth E. Jansen c2 = (EVrampMax - EVrampMin)/(x2 - x1) 178513954efSKenneth E. Jansen c3 = 0 !zero derivative 179513954efSKenneth E. Jansen c3 = (c3 - c2)/(x2 - x1) 180513954efSKenneth E. Jansen c2 = (c2 - c1)/(x2 - x1) 181513954efSKenneth E. Jansen c3 = (c3 - c2)/(x2 - x1) 182513954efSKenneth E. Jansen 183513954efSKenneth E. Jansen do nn = 1,nshg 184513954efSKenneth E. Jansen if(y(nn,6) .eq. 0) cycle !don't change wall boundary conditions, should be iTurbWall == 1 185513954efSKenneth E. Jansen 186513954efSKenneth E. Jansen if(point2x(nn,1) .gt. EVrampXmax) then !downstream of the ramp 187513954efSKenneth E. Jansen y(nn,6) = EVrampMax 188513954efSKenneth E. Jansen elseif(point2x(nn,1) .gt. EVrampXmin) then !and x(:,1) <= EVrampXmax 189513954efSKenneth E. Jansen 190513954efSKenneth E. Jansen !P(x) = c0 + x*(c1 + x*(c2 + (x - (x2 - x1))*c3)) 191513954efSKenneth E. Jansen ! = c0 + x*(c1 + x*(c2 - (x2 - x1)*c3 + x*c3 192513954efSKenneth E. Jansen y(nn,6) = c0 + (point2x(nn,1) - x1)*( 193513954efSKenneth E. Jansen & c1 + (point2x(nn,1) - x1)*( 194513954efSKenneth E. Jansen & (c2 - (x2 - x1)*c3) + (point2x(nn,1) - x1)*c3)) 195513954efSKenneth E. Jansen else 196513954efSKenneth E. Jansen y(nn,6) = EVrampMin 197513954efSKenneth E. Jansen endif 198513954efSKenneth E. Jansen enddo 199513954efSKenneth E. Jansen endif 200513954efSKenneth E. Jansen!End modifications for Duct 201513954efSKenneth E. Jansen!====================================================================== 20259599516SKenneth E. Jansenc 20359599516SKenneth E. Jansenc 20459599516SKenneth E. Jansenc.... call the semi-discrete predictor multi-corrector iterative driver 20559599516SKenneth E. Jansenc 20659599516SKenneth E. Jansen call itrdrv (y, ac, 20759599516SKenneth E. Jansen & uold, point2x, 20859599516SKenneth E. Jansen & iBC, BC, 20959599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 21059599516SKenneth E. Jansen & shgl, shpb, shglb, 21159599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansenc.... return 21459599516SKenneth E. Jansenc 21559599516SKenneth E. Jansenc 21659599516SKenneth E. Jansenc.... stop CPU-timer 21759599516SKenneth E. Jansenc 21859599516SKenneth E. JansenCAD call timer ('End ') 21959599516SKenneth E. Jansenc 22059599516SKenneth E. Jansenc.... close echo file 22159599516SKenneth E. Jansenc 22259599516SKenneth E. Jansen 22359599516SKenneth E. Jansen!MR CHANGE 22459599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 22559599516SKenneth E. Jansen if(myrank.eq.0) then 22659599516SKenneth E. Jansen write(*,*) 'process - before closing iecho' 22759599516SKenneth E. Jansen endif 22859599516SKenneth E. Jansen!MR CHANGE END 22959599516SKenneth E. Jansen 23059599516SKenneth E. Jansen close (iecho) 23159599516SKenneth E. Jansen 23259599516SKenneth E. Jansen!MR CHANGE 23359599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 23459599516SKenneth E. Jansen if(myrank.eq.0) then 23559599516SKenneth E. Jansen write(*,*) 'process - after closing iecho' 23659599516SKenneth E. Jansen endif 23759599516SKenneth E. Jansen!MR CHANGE END 23859599516SKenneth E. Jansen 23959599516SKenneth E. Jansen 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansenc.... end of the program 24259599516SKenneth E. Jansenc 24359599516SKenneth E. JansenCAD write(6,*) 'Life: ', second(0) - ttim(100) 24459599516SKenneth E. Jansen deallocate(point2iper) 245fcc77cc2SCameron Smith if(numpe.gt.1) then 246fcc77cc2SCameron Smith call Dctypes(point2ilwork(1)) 247fcc77cc2SCameron Smith endif 2484c52ab14SKenneth E. Jansen deallocate(point2ilwork) 24959599516SKenneth E. Jansen deallocate(point2x) 25059599516SKenneth E. Jansen deallocate(point2nsons) 25159599516SKenneth E. Jansen deallocate(point2ifath) 2526b966dd8SCameron Smith deallocate(uold) 2536b966dd8SCameron Smith deallocate(wnrm) 2546b966dd8SCameron Smith deallocate(otwn) 2556b966dd8SCameron Smith call finalizeDtN 256bd5c8633SCameron Smith call clearper 257bd5c8633SCameron Smith call finalizeNABI 2586b966dd8SCameron Smith 25959599516SKenneth E. Jansen return 26059599516SKenneth E. Jansen end 26159599516SKenneth E. Jansen 26259599516SKenneth E. Jansen 263