xref: /phasta/phSolver/common/genini.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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