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