159599516SKenneth E. Jansen subroutine genini (iBC, BC, y, ac, iper, ilwork, 259599516SKenneth E. Jansen & ifath, velbar, nsons,x, 359599516SKenneth E. Jansen & shp, shgl, shpb, shglb ) 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc---------------------------------------------------------------------- 659599516SKenneth E. Jansenc This routine reads the initial values in primitive form (density, 759599516SKenneth E. Jansenc velocity and temperature), satisfies the boundary conditions and 859599516SKenneth E. Jansenc converts them to Y-variables. 959599516SKenneth E. Jansenc 1059599516SKenneth E. Jansenc input: 1159599516SKenneth E. Jansenc iBC (nshg) : boundary condition code 1259599516SKenneth E. Jansenc BC (nshg,ndofBC) : boundary condition constrain data 1359599516SKenneth E. Jansenc x (numnp,nsd) : locations of nodes, numnp-> # of node 1459599516SKenneth E. Jansenc nsd-> space dimension, 1=x, 2=y, 3=z 1559599516SKenneth E. JansenC 1659599516SKenneth E. Jansenc 1759599516SKenneth E. Jansenc output: 1859599516SKenneth E. Jansenc y (nshg,ndof) : initial values of Y variables 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansenc 2159599516SKenneth E. Jansenc Farzin Shakib, Winter 1986. 2259599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 2359599516SKenneth E. Jansenc---------------------------------------------------------------------- 2459599516SKenneth E. Jansenc 2559599516SKenneth E. Jansen use specialBC ! gets itvn from here 2659599516SKenneth E. Jansen use convolImpFlow ! brings in ntimeptpT and other variables 2759599516SKenneth E. Jansen use convolRCRFlow ! brings RCR variables 2859599516SKenneth E. Jansen include "common.h" 2959599516SKenneth E. Jansen include "mpif.h" 3059599516SKenneth E. Jansen include "auxmpi.h" 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansen dimension iBC(nshg), iper(nshg), 3359599516SKenneth E. Jansen & BC(nshg,ndofBC), y(nshg,ndof), 3459599516SKenneth E. Jansen & ac(nshg,ndof), x(numnp,nsd), 3559599516SKenneth E. Jansen & shp(MAXTOP,maxsh,MAXQPT), 3659599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 3759599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 3859599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT) 3959599516SKenneth E. Jansen 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansen dimension ilwork(nlwork) 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansenc stuff for dynamic model s.w.avg and wall model 4459599516SKenneth E. Jansenc 4559599516SKenneth E. Jansen dimension ifath(numnp), velbar(nfath,nflow), 4659599516SKenneth E. Jansen & nsons(nfath) 4759599516SKenneth E. Jansen 4859599516SKenneth E. Jansen character*20 fname1 4959599516SKenneth E. Jansen character*10 cname2 5059599516SKenneth E. Jansen character*5 cname 5159599516SKenneth E. Jansenc 5259599516SKenneth E. Jansenc.... --------------------------> Restart <--------------------------- 5359599516SKenneth E. Jansenc 5459599516SKenneth E. Jansenc.... read q from [RESTAR.INP], reset LSTEP 5559599516SKenneth E. Jansenc 5659599516SKenneth E. Jansen call restar ('in ', y, ac) 57*dcce770dSKenneth E. Jansen 58*dcce770dSKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 59*dcce770dSKenneth E. Jansen if(matflg(1,1).eq.0)then ! compressible code 60*dcce770dSKenneth E. Jansen call INIprofile(BC,y,x) 61*dcce770dSKenneth E. Jansen call MPI_BARRIER(MPI_COMM_WORLD,ierr) 62*dcce770dSKenneth E. Jansen endif 63*dcce770dSKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 6459599516SKenneth E. Jansenc 6559599516SKenneth E. Jansen if((itwmod.gt.0) 6659599516SKenneth E. Jansen & .or. (nsonmax.eq.1 .and. iLES.gt.0) ) then 6759599516SKenneth E. Jansen call rwvelb('in ',velbar,ifail) 6859599516SKenneth E. Jansenc 6959599516SKenneth E. Jansenc if the read failed calculate velbar 7059599516SKenneth E. Jansenc 7159599516SKenneth E. Jansen if(ifail.eq.1) then 7259599516SKenneth E. Jansen call getvel (y, ilwork, iBC, 7359599516SKenneth E. Jansen & nsons, ifath, velbar) 7459599516SKenneth E. Jansen endif 7559599516SKenneth E. Jansen 7659599516SKenneth E. Jansen endif ! for the itwmod or irscale 7759599516SKenneth E. Jansenc 7859599516SKenneth E. Jansenc.... time varying boundary conditions as set from file bct.dat and impt.dat 7959599516SKenneth E. Jansenc (see function for format in file bctint.f) 8059599516SKenneth E. Jansenc 8159599516SKenneth E. Jansen if (itvn .gt. 0 ) then !for inlet velocities 8259599516SKenneth E. Jansen call initBCt( x, iBC, BC) 8359599516SKenneth E. Jansen call BCint(lstep*Delt(1),shp,shgl,shpb,shglb,x, BC, iBC) 8459599516SKenneth E. Jansen endif 8559599516SKenneth E. Jansen if (impfile .gt. 0 ) then !for impedance BC 8659599516SKenneth E. Jansen if(myrank.eq.master) then 8759599516SKenneth E. Jansen write(*,*) 'reading Qhistor.dat' 8859599516SKenneth E. Jansen endif 8959599516SKenneth E. Jansen open(unit=816, file='Qhistor.dat',status='old') 9059599516SKenneth E. Jansen read (816,*) ntimeptpT 9159599516SKenneth E. Jansen allocate (QHistImp(ntimeptpT+1,numImpSrfs)) 9259599516SKenneth E. Jansen allocate (QHistTry(ntimeptpT,numImpSrfs)) 9359599516SKenneth E. Jansen allocate (QHistTryF(ntimeptpT,numImpSrfs)) 9459599516SKenneth E. Jansen do j=1,ntimeptpT+1 9559599516SKenneth E. Jansen read(816,*) (QHistImp(j,n),n=1,numImpSrfs) !read flow history 9659599516SKenneth E. Jansen enddo 9759599516SKenneth E. Jansen close(816) 9859599516SKenneth E. Jansen call initImpt() !read impedance data and initialize begin/end values 9959599516SKenneth E. Jansen do i=2,ntimeptpT 10059599516SKenneth E. Jansen call Impint((ntimeptpT-i+1)*Delt(1),i) !return Imp values in reverse order ZN->Z0 10159599516SKenneth E. Jansen enddo 10259599516SKenneth E. Jansen 10359599516SKenneth E. Jansen allocate (poldImp(0:MAXSURF)) !for pressure part that depends on the history only 10459599516SKenneth E. Jansen endif 10559599516SKenneth E. Jansen if (ircrfile .gt. 0 ) then !for RCR BC 10659599516SKenneth E. Jansen call initRCRt() !read RCR data 10759599516SKenneth E. Jansen dtRCR(:) = Delt(1)/(ValueListRCR(2,:)*ValueListRCR(3,:)) 10859599516SKenneth E. Jansen allocate (RCRConvCoef(nstep(1)+lstep+2,numRCRSrfs)) !for convolution coeff 10959599516SKenneth E. Jansen !last one needed only to have array of same size as imp BC 11059599516SKenneth E. Jansen allocate (QHistRCR(nstep(1)+lstep+1,numRCRSrfs)) !for flow history 11159599516SKenneth E. Jansen QHistRCR = zero 11259599516SKenneth E. Jansen if(lstep.ne.0) then 11359599516SKenneth E. Jansen fname1 = 'Qhistor' 11459599516SKenneth E. Jansen fname1 = trim(fname1)//trim(cname2(lstep))//'.dat' 11559599516SKenneth E. Jansen fname1 = trim(fname1) 11659599516SKenneth E. Jansen if(myrank.eq.master) then 11759599516SKenneth E. Jansen write(*,*) 'reading ', fname1 11859599516SKenneth E. Jansen endif 11959599516SKenneth E. Jansen open(unit=816, file=fname1, status='old') 12059599516SKenneth E. Jansen read(816,*) k 12159599516SKenneth E. Jansen do j=1,lstep+1 12259599516SKenneth E. Jansen read(816,*) (QHistRCR(j,n),n=1,numRCRSrfs) !read flow history 12359599516SKenneth E. Jansen enddo 12459599516SKenneth E. Jansen close(816) 12559599516SKenneth E. Jansen endif 12659599516SKenneth E. Jansen allocate (poldRCR(0:MAXSURF)) !for pressure part that depends on the history only 12759599516SKenneth E. Jansen allocate (HopRCR(0:MAXSURF)) !for H operator contribution 12859599516SKenneth E. Jansen endif 12959599516SKenneth E. Jansen 13059599516SKenneth E. Jansen 13159599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 13259599516SKenneth E. Jansenc this subroutine initBCprofileScale is called to generate the correct 13359599516SKenneth E. Jansenc BC array, including the siuation of Take BC from IC for inlet. 13459599516SKenneth E. Jansenc so this subroutine must be called before BCs are applied to ICs 13559599516SKenneth E. Jansenc as those following lines do 13659599516SKenneth E. Jansenc call INIBCprofile(BC,y,x) 13759599516SKenneth E. Jansenc call MPI_BARRIER(MPI_COMM_WORLD,ierr) 13859599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 13959599516SKenneth E. Jansenc 14059599516SKenneth E. Jansenc.... satisfy the boundary conditions 14159599516SKenneth E. Jansenc 14259599516SKenneth E. Jansen call itrBC (y, ac, iBC, BC, iper, ilwork) 14359599516SKenneth E. Jansen 14459599516SKenneth E. Jansen itempr=mod(impl(1),2) ! tempr solve if impl odd 14559599516SKenneth E. Jansen if(itempr.eq.1) then 14659599516SKenneth E. Jansen isclr=0 14759599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 14859599516SKenneth E. Jansen endif 14959599516SKenneth E. Jansen do isclr=1,nsclr 15059599516SKenneth E. Jansen call itrBCSclr (y, ac, iBC, BC, iper, ilwork) 15159599516SKenneth E. Jansen enddo 15259599516SKenneth E. Jansen 15359599516SKenneth E. Jansen if((irscale.ge.0) .and. (myrank.eq.master)) then 15459599516SKenneth E. Jansen call genscale(y, x, iBC) 15559599516SKenneth E. Jansen endif 15659599516SKenneth E. Jansenc 15759599516SKenneth E. Jansenc.... ---------------------------> Echo <---------------------------- 15859599516SKenneth E. Jansenc 15959599516SKenneth E. Jansenc.... echo the initial data 16059599516SKenneth E. Jansenc 16159599516SKenneth E. Jansen if ((necho .lt. 0).and.(myrank.eq.master)) then 16259599516SKenneth E. Jansen do n = 1, nshg 16359599516SKenneth E. Jansen if (mod(n,50) .eq. 1) write(iecho,1000) ititle,(i,i=1,ndof) 16459599516SKenneth E. Jansen write (iecho,1100) n, (y(n,i),i=1,ndof) 16559599516SKenneth E. Jansen enddo 16659599516SKenneth E. Jansen endif 16759599516SKenneth E. Jansenc 16859599516SKenneth E. Jansenc.... return 16959599516SKenneth E. Jansenc 17059599516SKenneth E. Jansen return 17159599516SKenneth E. Jansenc 17259599516SKenneth E. Jansen1000 format(a80,//, 17359599516SKenneth E. Jansen & ' I n i t i a l V a l u e s ',//, 17459599516SKenneth E. Jansen & ' Node ',/, 17559599516SKenneth E. Jansen & ' Number ',6x,6('dof',i1,:,10x)) 17659599516SKenneth E. Jansen1100 format(1p,2x,i5,5x,5(e12.5,2x)) 17759599516SKenneth E. Jansenc 17859599516SKenneth E. Jansen end 179