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 1459599516SKenneth E. Jansen include "common.h" 1559599516SKenneth E. Jansen include "mpif.h" 1659599516SKenneth E. Jansenc 1759599516SKenneth E. Jansenc arrays in the following 2 lines are now dimensioned in readnblk 1859599516SKenneth E. Jansenc dimension x(numnp,nsd) 1959599516SKenneth E. Jansenc dimension iper(nshg), ilwork(nlwork) 2059599516SKenneth E. Jansenc 2159599516SKenneth E. Jansen dimension y(nshg,ndof), 2259599516SKenneth E. Jansen & iBC(nshg), 2359599516SKenneth E. Jansen & BC(nshg,ndofBC), 2459599516SKenneth E. Jansen & ac(nshg,ndof) 2559599516SKenneth E. Jansenc 2659599516SKenneth E. Jansenc.... shape function declarations 2759599516SKenneth E. Jansenc 2859599516SKenneth E. Jansen dimension shp(MAXTOP,maxsh,MAXQPT), 2959599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 3059599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 3159599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 3259599516SKenneth E. Jansenc 3359599516SKenneth E. Jansenc stuff for dynamic model s.w.avg and wall model 3459599516SKenneth E. Jansenc 3559599516SKenneth E. Jansenc dimension ifath(numnp), velbar(nfath,nflow), 3659599516SKenneth E. Jansenc & nsons(nfath) 3759599516SKenneth E. Jansen 3859599516SKenneth E. Jansen dimension velbar(nfath,nflow) 3959599516SKenneth E. Jansenc 4059599516SKenneth E. Jansenc stuff to interpolate profiles at inlet 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansen real*8 bcinterp(100,ndof+1),interp_mask(ndof) 4359599516SKenneth E. Jansen logical exlog 4459599516SKenneth E. Jansen 4559599516SKenneth E. Jansenc if ((irscale .ge. 0) .and. (myrank.eq.master)) then 4659599516SKenneth E. Jansenc call setSPEBC(numnp, point2nfath, nsonmax) 4759599516SKenneth E. Jansenc endif 4859599516SKenneth E. Jansenc 4959599516SKenneth E. Jansenc.... generate the geometry and boundary conditions data 5059599516SKenneth E. Jansenc 5159599516SKenneth E. Jansen call gendat (y, ac, point2x, 5259599516SKenneth E. Jansen & iBC, BC, 5359599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 5459599516SKenneth E. Jansen & shgl, shpb, shglb, 5559599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 5659599516SKenneth E. Jansen call setper(nshg) 5759599516SKenneth E. Jansen call perprep(iBC,point2iper,nshg) 5859599516SKenneth E. Jansen if (iLES/10 .eq. 1) then 5959599516SKenneth E. Jansen call keeplhsG ! Allocating space for the mass (Gram) matrix to be 6059599516SKenneth E. Jansen ! used for projection filtering and reconstruction 6159599516SKenneth E. Jansen ! of the strain rate tensor. 6259599516SKenneth E. Jansen 6359599516SKenneth E. Jansen call setrls ! Allocating space for the resolved Leonard stresses 6459599516SKenneth E. Jansenc See bardmc.f 6559599516SKenneth E. Jansen endif 6659599516SKenneth E. Jansenc 6759599516SKenneth E. Jansenc.... time averaged statistics 6859599516SKenneth E. Jansenc 6959599516SKenneth E. Jansen if (ioform .eq. 2) then 7059599516SKenneth E. Jansen call initStats(point2x, iBC, point2iper, point2ilwork) 7159599516SKenneth E. Jansen endif 7259599516SKenneth E. Jansenc 7359599516SKenneth E. Jansenc.... RANS turbulence model 7459599516SKenneth E. Jansenc 7559599516SKenneth E. Jansen if (iRANS .lt. 0) then 7659599516SKenneth E. Jansen call initTurb( point2x ) 7759599516SKenneth E. Jansen endif 7859599516SKenneth E. Jansenc 7959599516SKenneth E. Jansenc.... p vs. Q boundary 8059599516SKenneth E. Jansenc 8159599516SKenneth E. Jansen call initNABI( point2x, shpb ) 8259599516SKenneth E. Jansenc 8359599516SKenneth E. Jansenc.... check for execution mode 8459599516SKenneth E. Jansenc 8559599516SKenneth E. Jansen if (iexec .eq. 0) then 8659599516SKenneth E. Jansen lstep = 0 8759599516SKenneth E. Jansen call restar ('out ', y ,ac) 8859599516SKenneth E. Jansen return 8959599516SKenneth E. Jansen endif 9059599516SKenneth E. Jansenc 9159599516SKenneth E. Jansenc.... initialize AutoSponge 9259599516SKenneth E. Jansenc 9359599516SKenneth E. Jansen if(matflg(5,1).ge.4) then ! cool case (sponge) 9459599516SKenneth E. Jansen call initSponge( y,point2x) 9559599516SKenneth E. Jansen endif 9659599516SKenneth E. Jansenc 9759599516SKenneth E. Jansenc 9859599516SKenneth E. Jansenc.... adjust BC's to interpolate from file 9959599516SKenneth E. Jansenc 10059599516SKenneth E. Jansen 10159599516SKenneth E. Jansen inquire(file="inlet.dat",exist=exlog) 10259599516SKenneth E. Jansen if(exlog) then 10359599516SKenneth E. Jansen open (unit=654,file="inlet.dat",status="old") 10459599516SKenneth E. Jansen read(654,*) ninterp,ibcmatch,(interp_mask(j),j=1,ndof) 10559599516SKenneth E. Jansen do i=1,ninterp 10659599516SKenneth E. Jansen read(654,*) (bcinterp(i,j),j=1,ndof+1) ! distance to wall+ 10759599516SKenneth E. Jansen ! ndof but note order of BC's 10859599516SKenneth E. Jansen ! p,t,u,v,w,scalars. Also note that must be in 10959599516SKenneth E. Jansen ! increasing distance from the wall order. 11059599516SKenneth E. Jansen 11159599516SKenneth E. Jansen enddo 11259599516SKenneth E. Jansen do i=1,nshg ! only correct for linears at this time 11359599516SKenneth E. Jansen if(mod(iBC(i),1024).eq.ibcmatch) then 11459599516SKenneth E. Jansen iupper=0 11559599516SKenneth E. Jansen do j=2,ninterp 11659599516SKenneth E. Jansen if(bcinterp(j,1).gt.d2wall(i)) then !bound found 11759599516SKenneth E. Jansen xi=(d2wall(i)-bcinterp(j-1,1))/ 11859599516SKenneth E. Jansen & (bcinterp(j,1)-bcinterp(j-1,1)) 11959599516SKenneth E. Jansen iupper=j 12059599516SKenneth E. Jansen exit 12159599516SKenneth E. Jansen endif 12259599516SKenneth E. Jansen enddo 12359599516SKenneth E. Jansen if(iupper.eq.0) then 12459599516SKenneth E. Jansen write(*,*) 'failure in finterp, ynint=',d2wall(i) 12559599516SKenneth E. Jansen stop 12659599516SKenneth E. Jansen endif 12759599516SKenneth E. Jansen if(interp_mask(1).ne.zero) then 12859599516SKenneth E. Jansen BC(i,1)=(xi*bcinterp(iupper,2) 12959599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,2))*interp_mask(1) 13059599516SKenneth E. Jansen endif 13159599516SKenneth E. Jansen if(interp_mask(2).ne.zero) then 13259599516SKenneth E. Jansen BC(i,2)=(xi*bcinterp(iupper,3) 13359599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,3))*interp_mask(2) 13459599516SKenneth E. Jansen endif 13559599516SKenneth E. Jansen if(interp_mask(3).ne.zero) then 13659599516SKenneth E. Jansen BC(i,3)=(xi*bcinterp(iupper,4) 13759599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,4))*interp_mask(3) 13859599516SKenneth E. Jansen endif 13959599516SKenneth E. Jansen if(interp_masK(4).ne.zero) then 14059599516SKenneth E. Jansen BC(i,4)=(xi*bcinterp(iupper,5) 14159599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,5))*interp_mask(4) 14259599516SKenneth E. Jansen endif 14359599516SKenneth E. Jansen if(interp_mask(5).ne.zero) then 14459599516SKenneth E. Jansen BC(i,5)=(xi*bcinterp(iupper,6) 14559599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,6))*interp_mask(5) 14659599516SKenneth E. Jansen endif 14759599516SKenneth E. Jansen if(interp_mask(6).ne.zero) then 14859599516SKenneth E. Jansen BC(i,7)=(xi*bcinterp(iupper,7) 14959599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,7))*interp_mask(6) 15059599516SKenneth E. Jansen endif 15159599516SKenneth E. Jansen if(interp_mask(7).ne.zero) then 15259599516SKenneth E. Jansen BC(i,8)=(xi*bcinterp(iupper,8) 15359599516SKenneth E. Jansen & +(one-xi)*bcinterp(iupper-1,8))*interp_mask(7) 15459599516SKenneth E. Jansen endif 15559599516SKenneth E. Jansen endif 15659599516SKenneth E. Jansen enddo 15759599516SKenneth E. Jansen endif 15859599516SKenneth E. Jansenc$$$$$$$$$$$$$$$$$$$$ 15959599516SKenneth E. Jansen 16059599516SKenneth E. Jansenc 16159599516SKenneth E. Jansenc 16259599516SKenneth E. Jansenc.... call the semi-discrete predictor multi-corrector iterative driver 16359599516SKenneth E. Jansenc 16459599516SKenneth E. Jansen call itrdrv (y, ac, 16559599516SKenneth E. Jansen & uold, point2x, 16659599516SKenneth E. Jansen & iBC, BC, 16759599516SKenneth E. Jansen & point2iper, point2ilwork, shp, 16859599516SKenneth E. Jansen & shgl, shpb, shglb, 16959599516SKenneth E. Jansen & point2ifath, velbar, point2nsons ) 17059599516SKenneth E. Jansenc 17159599516SKenneth E. Jansenc.... return 17259599516SKenneth E. Jansenc 17359599516SKenneth E. Jansenc 17459599516SKenneth E. Jansenc.... stop CPU-timer 17559599516SKenneth E. Jansenc 17659599516SKenneth E. JansenCAD call timer ('End ') 17759599516SKenneth E. Jansenc 17859599516SKenneth E. Jansenc.... close echo file 17959599516SKenneth E. Jansenc 18059599516SKenneth E. Jansen 18159599516SKenneth E. Jansen!MR CHANGE 18259599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 18359599516SKenneth E. Jansen if(myrank.eq.0) then 18459599516SKenneth E. Jansen write(*,*) 'process - before closing iecho' 18559599516SKenneth E. Jansen endif 18659599516SKenneth E. Jansen!MR CHANGE END 18759599516SKenneth E. Jansen 18859599516SKenneth E. Jansen close (iecho) 18959599516SKenneth E. Jansen 19059599516SKenneth E. Jansen!MR CHANGE 19159599516SKenneth E. Jansen if (numpe > 1) call MPI_BARRIER(MPI_COMM_WORLD, ierr) 19259599516SKenneth E. Jansen if(myrank.eq.0) then 19359599516SKenneth E. Jansen write(*,*) 'process - after closing iecho' 19459599516SKenneth E. Jansen endif 19559599516SKenneth E. Jansen!MR CHANGE END 19659599516SKenneth E. Jansen 19759599516SKenneth E. Jansen 19859599516SKenneth E. Jansenc 19959599516SKenneth E. Jansenc.... end of the program 20059599516SKenneth E. Jansenc 20159599516SKenneth E. JansenCAD write(6,*) 'Life: ', second(0) - ttim(100) 20259599516SKenneth E. Jansen deallocate(point2iper) 203*fcc77cc2SCameron Smith if(numpe.gt.1) then 204*fcc77cc2SCameron Smith call Dctypes(point2ilwork(1)) 205*fcc77cc2SCameron Smith deallocate(point2ilwork) 206*fcc77cc2SCameron Smith endif 20759599516SKenneth E. Jansen deallocate(point2x) 20859599516SKenneth E. Jansen 20959599516SKenneth E. Jansen if((irscale.ge.0).or. ((iLES .lt. 20) .and. (iLES.gt.0)) 21059599516SKenneth E. Jansen & .or. (itwmod.gt.0) ) then ! don't forget same 21159599516SKenneth E. Jansen ! conditional in 21259599516SKenneth E. Jansen ! readnblk2.f 21359599516SKenneth E. Jansen deallocate(point2nsons) 21459599516SKenneth E. Jansen deallocate(point2ifath) 21559599516SKenneth E. Jansen endif 21659599516SKenneth E. Jansen return 21759599516SKenneth E. Jansen end 21859599516SKenneth E. Jansen 21959599516SKenneth E. Jansen 220