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