1*59599516SKenneth E. Jansen subroutine proces 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc This subroutine generates the problem data and calls the solution 6*59599516SKenneth E. Jansenc driver. 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 10*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 11*59599516SKenneth E. Jansenc 12*59599516SKenneth E. Jansen use readarrays ! used to access x, iper, ilwork 13*59599516SKenneth E. Jansen use turbsa ! used to access d2wall 14*59599516SKenneth E. Jansen include "common.h" 15*59599516SKenneth E. Jansen include "mpif.h" 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansenc arrays in the following 2 lines are now dimensioned in readnblk 18*59599516SKenneth E. Jansenc dimension x(numnp,nsd) 19*59599516SKenneth E. Jansenc dimension iper(nshg), ilwork(nlwork) 20*59599516SKenneth E. Jansenc 21*59599516SKenneth E. Jansen dimension y(nshg,ndof), 22*59599516SKenneth E. Jansen & iBC(nshg), 23*59599516SKenneth E. Jansen & BC(nshg,ndofBC), 24*59599516SKenneth E. Jansen & ac(nshg,ndof) 25*59599516SKenneth E. Jansenc 26*59599516SKenneth E. Jansenc.... shape function declarations 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 29*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 30*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 31*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansenc stuff for dynamic model s.w.avg and wall model 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc dimension ifath(numnp), velbar(nfath,nflow), 36*59599516SKenneth E. Jansenc & nsons(nfath) 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen dimension velbar(nfath,nflow) 39*59599516SKenneth E. Jansenc 40*59599516SKenneth E. Jansenc stuff to interpolate profiles at inlet 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansen real*8 bcinterp(100,ndof+1),interp_mask(ndof) 43*59599516SKenneth E. Jansen logical exlog 44*59599516SKenneth E. Jansen 45*59599516SKenneth E. Jansenc if ((irscale .ge. 0) .and. (myrank.eq.master)) then 46*59599516SKenneth E. Jansenc call setSPEBC(numnp, point2nfath, nsonmax) 47*59599516SKenneth E. Jansenc endif 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansenc.... generate the geometry and boundary conditions data 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansen call gendat (y, ac, point2x, 52*59599516SKenneth E. Jansen & iBC, BC, 53*59599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 54*59599516SKenneth E. Jansen & shgl, shpb, shglb, 55*59599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 56*59599516SKenneth E. Jansen call setper(nshg) 57*59599516SKenneth E. Jansen call perprep(iBC,point2iper,nshg) 58*59599516SKenneth E. Jansen if (iLES/10 .eq. 1) then 59*59599516SKenneth E. Jansen call keeplhsG ! Allocating space for the mass (Gram) matrix to be 60*59599516SKenneth E. Jansen ! used for projection filtering and reconstruction 61*59599516SKenneth E. Jansen ! of the strain rate tensor. 62*59599516SKenneth E. Jansen 63*59599516SKenneth E. Jansen call setrls ! Allocating space for the resolved Leonard stresses 64*59599516SKenneth E. Jansenc See bardmc.f 65*59599516SKenneth E. Jansen endif 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansenc.... time averaged statistics 68*59599516SKenneth E. Jansenc 69*59599516SKenneth E. Jansen if (ioform .eq. 2) then 70*59599516SKenneth E. Jansen call initStats(point2x, iBC, point2iper, point2ilwork) 71*59599516SKenneth E. Jansen endif 72*59599516SKenneth E. Jansenc 73*59599516SKenneth E. Jansenc.... RANS turbulence model 74*59599516SKenneth E. Jansenc 75*59599516SKenneth E. Jansen if (iRANS .lt. 0) then 76*59599516SKenneth E. Jansen call initTurb( point2x ) 77*59599516SKenneth E. Jansen endif 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansenc.... p vs. Q boundary 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansen call initNABI( point2x, shpb ) 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansenc.... check for execution mode 84*59599516SKenneth E. Jansenc 85*59599516SKenneth E. Jansen if (iexec .eq. 0) then 86*59599516SKenneth E. Jansen lstep = 0 87*59599516SKenneth E. Jansen call restar ('out ', y ,ac) 88*59599516SKenneth E. Jansen return 89*59599516SKenneth E. Jansen endif 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansenc.... initialize AutoSponge 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansen if(matflg(5,1).ge.4) then ! cool case (sponge) 94*59599516SKenneth E. Jansen call initSponge( y,point2x) 95*59599516SKenneth E. Jansen endif 96*59599516SKenneth E. Jansenc 97*59599516SKenneth E. Jansenc 98*59599516SKenneth E. Jansenc.... adjust BC's to interpolate from file 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansen 101*59599516SKenneth E. Jansen inquire(file="inlet.dat",exist=exlog) 102*59599516SKenneth E. Jansen if(exlog) then 103*59599516SKenneth E. Jansen open (unit=654,file="inlet.dat",status="old") 104*59599516SKenneth E. Jansen read(654,*) ninterp,ibcmatch,(interp_mask(j),j=1,ndof) 105*59599516SKenneth E. Jansen do i=1,ninterp 106*59599516SKenneth E. Jansen read(654,*) (bcinterp(i,j),j=1,ndof+1) ! distance to wall+ 107*59599516SKenneth E. Jansen ! ndof but note order of BC's 108*59599516SKenneth E. Jansen ! p,t,u,v,w,scalars. Also note that must be in 109*59599516SKenneth E. Jansen ! increasing distance from the wall order. 110*59599516SKenneth E. Jansen 111*59599516SKenneth E. Jansen enddo 112*59599516SKenneth E. Jansen do i=1,nshg ! only correct for linears at this time 113*59599516SKenneth E. Jansen if(mod(iBC(i),1024).eq.ibcmatch) then 114*59599516SKenneth E. Jansen iupper=0 115*59599516SKenneth E. Jansen do j=2,ninterp 116*59599516SKenneth E. Jansen if(bcinterp(j,1).gt.d2wall(i)) then !bound found 117*59599516SKenneth E. Jansen xi=(d2wall(i)-bcinterp(j-1,1))/ 118*59599516SKenneth E. Jansen & (bcinterp(j,1)-bcinterp(j-1,1)) 119*59599516SKenneth E. Jansen iupper=j 120*59599516SKenneth E. Jansen exit 121*59599516SKenneth E. Jansen endif 122*59599516SKenneth E. Jansen enddo 123*59599516SKenneth E. Jansen if(iupper.eq.0) then 124*59599516SKenneth E. Jansen write(*,*) 'failure in finterp, ynint=',d2wall(i) 125*59599516SKenneth E. Jansen stop 126*59599516SKenneth E. Jansen endif 127*59599516SKenneth E. Jansen if(interp_mask(1).ne.zero) then 128*59599516SKenneth E. Jansen BC(i,1)=(xi*bcinterp(iupper,2) 129*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,2))*interp_mask(1) 130*59599516SKenneth E. Jansen endif 131*59599516SKenneth E. Jansen if(interp_mask(2).ne.zero) then 132*59599516SKenneth E. Jansen BC(i,2)=(xi*bcinterp(iupper,3) 133*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,3))*interp_mask(2) 134*59599516SKenneth E. Jansen endif 135*59599516SKenneth E. Jansen if(interp_mask(3).ne.zero) then 136*59599516SKenneth E. Jansen BC(i,3)=(xi*bcinterp(iupper,4) 137*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,4))*interp_mask(3) 138*59599516SKenneth E. Jansen endif 139*59599516SKenneth E. Jansen if(interp_masK(4).ne.zero) then 140*59599516SKenneth E. Jansen BC(i,4)=(xi*bcinterp(iupper,5) 141*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,5))*interp_mask(4) 142*59599516SKenneth E. Jansen endif 143*59599516SKenneth E. Jansen if(interp_mask(5).ne.zero) then 144*59599516SKenneth E. Jansen BC(i,5)=(xi*bcinterp(iupper,6) 145*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,6))*interp_mask(5) 146*59599516SKenneth E. Jansen endif 147*59599516SKenneth E. Jansen if(interp_mask(6).ne.zero) then 148*59599516SKenneth E. Jansen BC(i,7)=(xi*bcinterp(iupper,7) 149*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,7))*interp_mask(6) 150*59599516SKenneth E. Jansen endif 151*59599516SKenneth E. Jansen if(interp_mask(7).ne.zero) then 152*59599516SKenneth E. Jansen BC(i,8)=(xi*bcinterp(iupper,8) 153*59599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,8))*interp_mask(7) 154*59599516SKenneth E. Jansen endif 155*59599516SKenneth E. Jansen endif 156*59599516SKenneth E. Jansen enddo 157*59599516SKenneth E. Jansen endif 158*59599516SKenneth E. Jansenc$$$$$$$$$$$$$$$$$$$$ 159*59599516SKenneth E. Jansen 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansenc 162*59599516SKenneth E. Jansenc.... call the semi-discrete predictor multi-corrector iterative driver 163*59599516SKenneth E. Jansenc 164*59599516SKenneth E. Jansen call itrdrv (y, ac, 165*59599516SKenneth E. Jansen & uold, point2x, 166*59599516SKenneth E. Jansen & iBC, BC, 167*59599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 168*59599516SKenneth E. Jansen & shgl, shpb, shglb, 169*59599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansenc.... return 172*59599516SKenneth E. Jansenc 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansenc.... stop CPU-timer 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. JansenCAD call timer ('End ') 177*59599516SKenneth E. Jansenc 178*59599516SKenneth E. Jansenc.... close echo file 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansen!MR CHANGE 182*59599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 183*59599516SKenneth E. Jansen if(myrank.eq.0) then 184*59599516SKenneth E. Jansen write(*,*) 'process - before closing iecho' 185*59599516SKenneth E. Jansen endif 186*59599516SKenneth E. Jansen!MR CHANGE END 187*59599516SKenneth E. Jansen 188*59599516SKenneth E. Jansen close (iecho) 189*59599516SKenneth E. Jansen 190*59599516SKenneth E. Jansen!MR CHANGE 191*59599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 192*59599516SKenneth E. Jansen if(myrank.eq.0) then 193*59599516SKenneth E. Jansen write(*,*) 'process - after closing iecho' 194*59599516SKenneth E. Jansen endif 195*59599516SKenneth E. Jansen!MR CHANGE END 196*59599516SKenneth E. Jansen 197*59599516SKenneth E. Jansen 198*59599516SKenneth E. Jansenc 199*59599516SKenneth E. Jansenc.... end of the program 200*59599516SKenneth E. Jansenc 201*59599516SKenneth E. JansenCAD write(6,*) 'Life: ', second(0) - ttim(100) 202*59599516SKenneth E. Jansen deallocate(point2iper) 203*59599516SKenneth E. Jansen if(numpe.gt.1) deallocate(point2ilwork) 204*59599516SKenneth E. Jansen deallocate(point2x) 205*59599516SKenneth E. Jansen 206*59599516SKenneth E. Jansen if((irscale.ge.0).or. ((iLES .lt. 20) .and. (iLES.gt.0)) 207*59599516SKenneth E. Jansen & .or. (itwmod.gt.0) ) then ! don't forget same 208*59599516SKenneth E. Jansen ! conditional in 209*59599516SKenneth E. Jansen ! readnblk2.f 210*59599516SKenneth E. Jansen deallocate(point2nsons) 211*59599516SKenneth E. Jansen deallocate(point2ifath) 212*59599516SKenneth E. Jansen endif 213*59599516SKenneth E. Jansen return 214*59599516SKenneth E. Jansen end 215*59599516SKenneth E. Jansen 216*59599516SKenneth E. Jansen 217