xref: /phasta/phSolver/common/proces.f (revision b4542ea82c77e372ce7105f8acc0203afe56d668)
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