xref: /phasta/phSolver/common/INIprofile.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
1*10167291SKenneth E. Jansen        subroutine INIprofile(BC,y,x)
2*10167291SKenneth E. Jansen
3*10167291SKenneth E. Jansen         include "common.h"
4*10167291SKenneth E. Jansen         real*8 BC(nshg,ndofBC)
5*10167291SKenneth E. Jansen         real*8 y(nshg,ndof)
6*10167291SKenneth E. Jansen         real*8 x(nshg,nsd)
7*10167291SKenneth E. Jansen
8*10167291SKenneth E. Jansen         if(iI2Binlet .gt. 0)then ! useless for geometry with contraction
9*10167291SKenneth E. Jansen              call TakeBCfromIC_ScaleInlVelX(BC,y,x)
10*10167291SKenneth E. Jansen         endif
11*10167291SKenneth E. Jansen
12*10167291SKenneth E. Jansen         if(isetInitial .gt.0)then ! obscure
13*10167291SKenneth E. Jansen              call setInitial(x,y)
14*10167291SKenneth E. Jansen         endif
15*10167291SKenneth E. Jansen
16*10167291SKenneth E. Jansen        return
17*10167291SKenneth E. Jansen        end
18*10167291SKenneth E. Jansenc..............................................................................
19*10167291SKenneth E. Jansen        subroutine TakeBCfromIC_ScaleInlVelX(BC,y,x)
20*10167291SKenneth E. Jansen
21*10167291SKenneth E. Jansen        use BCsfIDmap
22*10167291SKenneth E. Jansen        include "common.h"
23*10167291SKenneth E. Jansen        include "mpif.h"
24*10167291SKenneth E. Jansen        include "auxmpi.h"
25*10167291SKenneth E. Jansen
26*10167291SKenneth E. Jansen        integer inlf_tmp(nshg)
27*10167291SKenneth E. Jansen        real*8 BC(nshg,ndofBC)
28*10167291SKenneth E. Jansen        real*8 y(nshg,ndof)
29*10167291SKenneth E. Jansen        real*8 x(nshg,nsd)
30*10167291SKenneth E. Jansen        real*8 u_max,u_max_all
31*10167291SKenneth E. Jansen
32*10167291SKenneth E. Jansen         call sfID2np(iI2Binlet,ninlet,inlf_tmp)
33*10167291SKenneth E. Jansen         if(ninlet.gt.0) then  ! only for process including inlet nodes
34*10167291SKenneth E. Jansen            allocate(inlf(ninlet))
35*10167291SKenneth E. Jansen            inlf(1:ninlet)=inlf_tmp(1:ninlet) ! generate map mapping inlet nodes to nshg nodes
36*10167291SKenneth E. Jansen            do i=1,ninlet
37*10167291SKenneth E. Jansen               nn=inlf(i)
38*10167291SKenneth E. Jansen               if(y(nn,1).gt.u_max)u_max=y(nn,1)
39*10167291SKenneth E. Jansen            enddo
40*10167291SKenneth E. Jansen         endif
41*10167291SKenneth E. Jansen         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
42*10167291SKenneth E. Jansen         call MPI_ALLREDUCE( u_max, u_max_all, 1,
43*10167291SKenneth E. Jansen     &        MPI_REAL8, MPI_MAX, MPI_COMM_WORLD,ierr)
44*10167291SKenneth E. Jansen         if(myrank.eq.0)then
45*10167291SKenneth E. Jansen           write(*,*)''
46*10167291SKenneth E. Jansen           write(*,556)'u_max_all=',u_max_all ! find the largest x velocity at inlet
47*10167291SKenneth E. Jansen         endif
48*10167291SKenneth E. Jansenc apply IC to BC, must be run before applying BC to IC later in genini
49*10167291SKenneth E. Jansen         if(ninlet.gt.0) then
50*10167291SKenneth E. Jansen            BC(inlf(:),2) = y(inlf(:),5) ! set temp
51*10167291SKenneth E. Jansen            BC(inlf(:),3) = y(inlf(:),1)/u_max_all*inletVelX  ! set and scale x velocity
52*10167291SKenneth E. Jansen            BC(inlf(:),4) = 0             ! set y velocity
53*10167291SKenneth E. Jansen            BC(inlf(:),5) = 0             ! set z velocity
54*10167291SKenneth E. Jansen            if(nsclr.eq.1)then
55*10167291SKenneth E. Jansen              BC(inlf(:),7) = y(inlf(:),6)  ! set scalar_1
56*10167291SKenneth E. Jansen            endif
57*10167291SKenneth E. Jansen         endif
58*10167291SKenneth E. Jansen555          format(I3,F10.3)
59*10167291SKenneth E. Jansen556          format(A,F10.3)
60*10167291SKenneth E. Jansen
61*10167291SKenneth E. Jansen        return
62*10167291SKenneth E. Jansen        end
63*10167291SKenneth E. Jansen
64*10167291SKenneth E. Jansenc..............................................................................
65*10167291SKenneth E. Jansenc... this subroutine gives the formular of initial conditions, user may want to
66*10167291SKenneth E. Jansenc... change this file and recompile the code, just like other commercial code which
67*10167291SKenneth E. Jansenc... supports User Defined Function, you need to recompile and relink the code
68*10167291SKenneth E. Jansen        subroutine setInitial(x,y)
69*10167291SKenneth E. Jansen
70*10167291SKenneth E. Jansen        use turbSA   ! this gives us d2wall(1:nshg) nodal distance to the closest wall
71*10167291SKenneth E. Jansen        use BCsfIDmap
72*10167291SKenneth E. Jansen        include "common.h"
73*10167291SKenneth E. Jansen        include "mpif.h"
74*10167291SKenneth E. Jansen        include "auxmpi.h"
75*10167291SKenneth E. Jansen
76*10167291SKenneth E. Jansen        real*8 x(nshg,nsd)
77*10167291SKenneth E. Jansen        real*8 y(nshg,ndof)
78*10167291SKenneth E. Jansen        if(isetinitial.eq.1) then
79*10167291SKenneth E. Jansen
80*10167291SKenneth E. Jansenc... user gives the formular of initial conditions from here
81*10167291SKenneth E. Jansen           y(:,1)= xvel_ini
82*10167291SKenneth E. Jansen           y(:,4)= pres_ini
83*10167291SKenneth E. Jansen           y(:,2)=yvel_ini
84*10167291SKenneth E. Jansen           y(:,3)=zvel_ini
85*10167291SKenneth E. Jansen           y(:,5)=temp_ini
86*10167291SKenneth E. Jansen           if(nsclr.eq.1)then
87*10167291SKenneth E. Jansen              y(:,6)=evis_ini
88*10167291SKenneth E. Jansen           endif
89*10167291SKenneth E. Jansen!moving previously coded spatially varying pressure to 10 so that 1 is simple
90*10167291SKenneth E. Jansen        elseif (isetInitial.eq.10) then
91*10167291SKenneth E. Jansen        if(ninlet.gt.0)then
92*10167291SKenneth E. Jansen           xinlet=x(inlf(1),1)
93*10167291SKenneth E. Jansen        else
94*10167291SKenneth E. Jansen           xinlet=1e18
95*10167291SKenneth E. Jansen        endif
96*10167291SKenneth E. Jansen
97*10167291SKenneth E. Jansen        if(noutlet.gt.0)then
98*10167291SKenneth E. Jansen           xoutlet=x(outf(1),1)
99*10167291SKenneth E. Jansen        else
100*10167291SKenneth E. Jansen           xoutlet=-1e18
101*10167291SKenneth E. Jansen        endif
102*10167291SKenneth E. Jansen
103*10167291SKenneth E. Jansen        call MPI_BARRIER(MPI_COMM_WORLD,ierr)
104*10167291SKenneth E. Jansen        call MPI_ALLREDUCE(xinlet, xinlet_all, 1,
105*10167291SKenneth E. Jansen     &       MPI_REAL8, MPI_MIN, MPI_COMM_WORLD,ierr)
106*10167291SKenneth E. Jansen        call MPI_ALLREDUCE(xoutlet, xoutlet_all, 1,
107*10167291SKenneth E. Jansen     &       MPI_REAL8, MPI_MAX, MPI_COMM_WORLD,ierr)
108*10167291SKenneth E. Jansen        call MPI_BARRIER(MPI_COMM_WORLD,ierr)
109*10167291SKenneth E. Jansen        do nn=1,nshg
110*10167291SKenneth E. Jansen           xdel=(x(nn,1)-xinlet_all)/(xoutlet_all-xinlet_all)
111*10167291SKenneth E. Jansen           xdel=1-tanh(7*xdel)
112*10167291SKenneth E. Jansen           y(nn,1)= xvel_ini + (inletVelX-xvel_ini)*xdel
113*10167291SKenneth E. Jansen           y(nn,4)= outPres1 + (pres_ini-outPres1)*xdel
114*10167291SKenneth E. Jansen        enddo
115*10167291SKenneth E. Jansen           y(:,2)=yvel_ini
116*10167291SKenneth E. Jansen           y(:,3)=zvel_ini
117*10167291SKenneth E. Jansen           y(:,5)=temp_ini
118*10167291SKenneth E. Jansen           if(nsclr.eq.1)then
119*10167291SKenneth E. Jansen              y(:,6)=evis_ini
120*10167291SKenneth E. Jansen           endif
121*10167291SKenneth E. Jansen        elseif (isetInitial.eq.2) then
122*10167291SKenneth E. Jansen            !----------------------------------
123*10167291SKenneth E. Jansen            ! set initial condition for blower
124*10167291SKenneth E. Jansen            !----------------------------------
125*10167291SKenneth E. Jansen
126*10167291SKenneth E. Jansen!            blthickness=1.0e-4
127*10167291SKenneth E. Jansen!            yfloor=-0.0333375 - 1e-7
128*10167291SKenneth E. Jansen!            xthroat=-0.3048 + 1e-5
129*10167291SKenneth E. Jansen!            xSlit = 0.025            !x-coordinate of the blower slit
130*10167291SKenneth E. Jansen!
131*10167291SKenneth E. Jansen!            p0 = 121800       !total pressure in blower
132*10167291SKenneth E. Jansen!            T0 = 305          !total temperature
133*10167291SKenneth E. Jansen!
134*10167291SKenneth E. Jansen!            do nn=1,nshg
135*10167291SKenneth E. Jansen!                xcoor = x(nn,1)
136*10167291SKenneth E. Jansen!
137*10167291SKenneth E. Jansen!                if((xcoor .gt. xthroat) .and. (x(nn,2).lt.yfloor)) then
138*10167291SKenneth E. Jansen!                    y(nn,3:4)=0  !velocity
139*10167291SKenneth E. Jansen!                    y(nn,6)=1e-3 !eddy viscosity
140*10167291SKenneth E. Jansen!
141*10167291SKenneth E. Jansen!                    if(xcoor .le. xSlit) then  !test whether the point is infront of or behind the slit. If infront, use M = 0.8
142*10167291SKenneth E. Jansen!                        !4th order polynomial best fit for an exit Mach number of 0.8
143*10167291SKenneth E. Jansen!                        MEuler=0.0806961 + xcoor*(2.96302 + xcoor*(72.5101 + xcoor*(13914.6 + xcoor*1.09778e6)))
144*10167291SKenneth E. Jansen!                    else
145*10167291SKenneth E. Jansen!                        MEuler = 0.8
146*10167291SKenneth E. Jansen!                    endif
147*10167291SKenneth E. Jansen!
148*10167291SKenneth E. Jansen!                    pEuler = p0/((1 + 0.2*M*M)**3.5)
149*10167291SKenneth E. Jansen!                    TEuler = T0/(1 + 0.2*M*M)
150*10167291SKenneth E. Jansen!                    uEuler = MEuler*sqrt(1.4*287.06*TEuler)
151*10167291SKenneth E. Jansen!
152*10167291SKenneth E. Jansen!                    bldamper=min(one, d2wall(nn)/blthickness)
153*10167291SKenneth E. Jansen!                    y(nn,2)=uEuler*bldamper
154*10167291SKenneth E. Jansen!                    y(nn,1)=pEuler
155*10167291SKenneth E. Jansen!                    y(nn,5)=TEuler
156*10167291SKenneth E. Jansen!                endif
157*10167291SKenneth E. Jansen!             enddo
158*10167291SKenneth E. Jansen        endif
159*10167291SKenneth E. Jansen
160*10167291SKenneth E. Jansen        return
161*10167291SKenneth E. Jansen        end
162*10167291SKenneth E. Jansen
163*10167291SKenneth E. Jansenc=========================================================================
164*10167291SKenneth E. Jansenc Set the initial condition based on coordiantes
165*10167291SKenneth E. Jansenc=========================================================================
166*10167291SKenneth E. Jansen
167*10167291SKenneth E. Jansen        subroutine setInitial_Duct(x)
168*10167291SKenneth E. Jansen
169*10167291SKenneth E. Jansen        use readarrays
170*10167291SKenneth E. Jansen        include "common.h"
171*10167291SKenneth E. Jansen        include "mpif.h"
172*10167291SKenneth E. Jansen        include "auxmpi.h"
173*10167291SKenneth E. Jansen
174*10167291SKenneth E. Jansen        real*8 x(nshg,nsd)
175*10167291SKenneth E. Jansen        real*8 xcoor,ycoor,zcoor
176*10167291SKenneth E. Jansen        integer nn
177*10167291SKenneth E. Jansen        real*8 xVel, pres, Temp
178*10167291SKenneth E. Jansen!p u v w T s(calar_1) in array qold
179*10167291SKenneth E. Jansen!x y z in array x
180*10167291SKenneth E. Jansen
181*10167291SKenneth E. Jansen
182*10167291SKenneth E. Jansen
183*10167291SKenneth E. Jansen        a1 =       329.7
184*10167291SKenneth E. Jansen        b1 =    -0.07732
185*10167291SKenneth E. Jansen        c1 =        9.82
186*10167291SKenneth E. Jansen        a2 =       6.431
187*10167291SKenneth E. Jansen        b2 =       1.621
188*10167291SKenneth E. Jansen        c2 =      0.8998
189*10167291SKenneth E. Jansen        a3 =      -4.637
190*10167291SKenneth E. Jansen        b3 =       1.728
191*10167291SKenneth E. Jansen        c3 =      0.2168
192*10167291SKenneth E. Jansen
193*10167291SKenneth E. Jansen
194*10167291SKenneth E. Jansen        if (iDuctgeometryType .eq. 6) then
195*10167291SKenneth E. Jansen           xContraStart = -74*0.0254;
196*10167291SKenneth E. Jansen        elseif (iDuctgeometryType .eq. 8) then
197*10167291SKenneth E. Jansen           xContraStart = -84*0.0254;
198*10167291SKenneth E. Jansen        endif
199*10167291SKenneth E. Jansen        xContraEnd = xContraStart + 72*0.0254
200*10167291SKenneth E. Jansen
201*10167291SKenneth E. Jansen        do nn=1,nshg
202*10167291SKenneth E. Jansen
203*10167291SKenneth E. Jansen           xcoor=x(nn,1)
204*10167291SKenneth E. Jansen           ycoor=x(nn,2)
205*10167291SKenneth E. Jansen           zcoor=x(nn,3)
206*10167291SKenneth E. Jansenc.... [xVel,pres,Temp] are functions of [xcoor,ycoor,zcoor]
207*10167291SKenneth E. Jansen
208*10167291SKenneth E. Jansenc          if(ycoor<(-0.587375+1.0e-4))then
209*10167291SKenneth E. Jansenc             ry=(ycoor+0.587375)/1.0e-4
210*10167291SKenneth E. Jansenc          elseif(ycoor>(0.587375+1.0e-4))then
211*10167291SKenneth E. Jansenc             ry=(0.587375-ycoor)/1.0e-4
212*10167291SKenneth E. Jansenc          else
213*10167291SKenneth E. Jansenc             ry=1.0
214*10167291SKenneth E. Jansenc          endif
215*10167291SKenneth E. Jansen
216*10167291SKenneth E. Jansenc          if(zcoor<(-0.587375+1.0e-4))then
217*10167291SKenneth E. Jansenc             rz=(zcoor+0.587375)/1.0e-4
218*10167291SKenneth E. Jansenc          elseif(zcoor>(0.587375+1.0e-4))then
219*10167291SKenneth E. Jansenc             rz=(0.587375-zcoor)/1.0e-4
220*10167291SKenneth E. Jansenc          else
221*10167291SKenneth E. Jansenc             rz=1.0
222*10167291SKenneth E. Jansenc          endif
223*10167291SKenneth E. Jansen
224*10167291SKenneth E. Jansenc          ry=max(0.0,ry)
225*10167291SKenneth E. Jansenc          rz=max(0.0,rz)
226*10167291SKenneth E. Jansen
227*10167291SKenneth E. Jansenc          if(xcoor.le.0.0.and.xcoor.gt.-12*0.0254)then
228*10167291SKenneth E. Jansenc             xVel=120
229*10167291SKenneth E. Jansenc          elseif(xcoor.lt.-12*0.0254)then
230*10167291SKenneth E. Jansenc             xVel=(1.013158+120)/2+(120-1.013158)/2*
231*10167291SKenneth E. Jansenc     &       tanh((xcoor-(-84*0.0254-12*0.0254)/2)*4)
232*10167291SKenneth E. Jansenc          else
233*10167291SKenneth E. Jansenc             xVel=max(0.0,120*(1-(xcoor/(1.6*4.5*0.0254+0.85))**2))
234*10167291SKenneth E. Jansenc          endif
235*10167291SKenneth E. Jansen
236*10167291SKenneth E. Jansenc          Temp=317+(-tanh(4*(xcoor+0.35+0.254))*
237*10167291SKenneth E. Jansenc     &       (13.578+5)*0.5+(13.578-5)*0.5)*ry*rz
238*10167291SKenneth E. Jansenc          pres=-tanh(4*(xcoor+0.35+0.254))*
239*10167291SKenneth E. Jansenc     &    (116600-97000)*0.5+(116600+97000)*0.5
240*10167291SKenneth E. Jansenc... above, Onkar's method
241*10167291SKenneth E. Jansen
242*10167291SKenneth E. Jansenc         if(xcoor.lt.0.0 .and.
243*10167291SKenneth E. Jansenc     &    xcoor.gt.12*0.0254 .and.
244*10167291SKenneth E. Jansenc     &    ycoor .lt. -0.04446)then
245*10167291SKenneth E. Jansenc            xVel=0
246*10167291SKenneth E. Jansenc            pres=97800
247*10167291SKenneth E. Jansenc            Temp=317
248*10167291SKenneth E. Jansenc         else
249*10167291SKenneth E. Jansenc            if(xcoor .ge. -0.0254)then
250*10167291SKenneth E. Jansenc             xVel=158
251*10167291SKenneth E. Jansenc             pres=97800
252*10167291SKenneth E. Jansenc             Temp=318
253*10167291SKenneth E. Jansenc            elseif(xcoor .le. -1.0163)then
254*10167291SKenneth E. Jansenc             Temp=330
255*10167291SKenneth E. Jansenc             pres=111896
256*10167291SKenneth E. Jansenc             xVel=1.0132
257*10167291SKenneth E. Jansenc            else
258*10167291SKenneth E. Jansenc             pres=97800+0.5*(111896-97800)*
259*10167291SKenneth E. Jansenc     &       (tanh(-3.4*((xcoor+0.52085)/0.49545))+1)
260*10167291SKenneth E. Jansenc             Temp=318+0.5*(330-318)*
261*10167291SKenneth E. Jansenc     &       (tanh(-3.4*((xcoor+0.52085)/0.49545))+1)
262*10167291SKenneth E. Jansenc             xVel=158+0.5*(1.0132-158)*
263*10167291SKenneth E. Jansenc     &       (tanh(-3.4*((xcoor+0.52085)/0.49545))+1)
264*10167291SKenneth E. Jansenc            endif
265*10167291SKenneth E. Jansenc         endif
266*10167291SKenneth E. Jansenc....................
267*10167291SKenneth E. Jansen
268*10167291SKenneth E. Jansen
269*10167291SKenneth E. Jansenc             pres= 97000
270*10167291SKenneth E. Jansenc             xvel= 0.1
271*10167291SKenneth E. Jansen
272*10167291SKenneth E. Jansenc             if (xcoor .gt. xContraEnd)then
273*10167291SKenneth E. Jansenc                 Temp = 320
274*10167291SKenneth E. Jansenc             elseif (xcoor . le. xContraEnd)then
275*10167291SKenneth E. Jansenc                 xSim = xcoor - xContraStart
276*10167291SKenneth E. Jansenc                 Temp = a1*exp(-((xSim-b1)/c1)**2) +
277*10167291SKenneth E. Jansenc     &                  a2*exp(-((xSim-b2)/c2)**2) +
278*10167291SKenneth E. Jansenc     &                  a3*exp(-((xSim-b3)/c3)**2)
279*10167291SKenneth E. Jansenc             endif
280*10167291SKenneth E. Jansenc             varSA = 0.0
281*10167291SKenneth E. Jansen
282*10167291SKenneth E. Jansenc             qold(nn,1)=pres
283*10167291SKenneth E. Jansenc             qold(nn,2)=xvel
284*10167291SKenneth E. Jansenc             qold(nn,3)=0
285*10167291SKenneth E. Jansenc             qold(nn,4)=0
286*10167291SKenneth E. Jansenc             qold(nn,5)=Temp
287*10167291SKenneth E. Jansenc             qold(nn,6)=varSA
288*10167291SKenneth E. Jansen
289*10167291SKenneth E. Jansenc... above Yi Chen's Method
290*10167291SKenneth E. Jansen
291*10167291SKenneth E. Jansen          if(xcoor .lt. 0.0 .and.
292*10167291SKenneth E. Jansen     &       xcoor .gt. (-12*0.0254) .and.
293*10167291SKenneth E. Jansen     &       ycoor .lt. -0.044449)then ! this is the jet device
294*10167291SKenneth E. Jansen             qold(nn,1)=97000
295*10167291SKenneth E. Jansen             qold(nn,2)=0
296*10167291SKenneth E. Jansen             qold(nn,3)=0
297*10167291SKenneth E. Jansen             qold(nn,4)=0
298*10167291SKenneth E. Jansen             qold(nn,5)=320
299*10167291SKenneth E. Jansen             qold(nn,6)=1.825e-5
300*10167291SKenneth E. Jansen          endif
301*10167291SKenneth E. Jansen
302*10167291SKenneth E. Jansenc... above, used for restart from M2M
303*10167291SKenneth E. Jansen
304*10167291SKenneth E. Jansen        enddo ! end of loop over all nshg points
305*10167291SKenneth E. Jansenc...........................
306*10167291SKenneth E. Jansen
307*10167291SKenneth E. Jansen        return
308*10167291SKenneth E. Jansen        end
309*10167291SKenneth E. Jansen
310*10167291SKenneth E. Jansen
311