1*59599516SKenneth E. Jansen subroutine genBC1 (BCtmp, iBC, BC) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc This subroutine adjusts the boundary conditions to accommodate for 6*59599516SKenneth E. Jansenc the velocity constraints in the non-axes directions. It copies the 7*59599516SKenneth E. Jansenc reduced constraint parameters in BC. 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc input: 10*59599516SKenneth E. Jansenc BCtmp (nshg,6+5*I3nsd) : input BC parameters (density, temperature, 11*59599516SKenneth E. Jansenc pressure, (nsd-1)(nsd+1) velocity params, 12*59599516SKenneth E. Jansenc upto 4 scalar params) 13*59599516SKenneth E. Jansenc iBC (nshg) : boundary condition code 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc output: 16*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : the constraint eq's parameters 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansenc Farzin Shakib, Winter 1986. 20*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 21*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 22*59599516SKenneth E. Jansenc 23*59599516SKenneth E. Jansen include "common.h" 24*59599516SKenneth E. Jansen 25*59599516SKenneth E. Jansenc 26*59599516SKenneth E. Jansen dimension BCtmp(nshg,ndof+7), iBC(nshg), 27*59599516SKenneth E. Jansen & BC(nshg,ndofBC),tmpbc(4) 28*59599516SKenneth E. Jansenc 29*59599516SKenneth E. Jansen dimension tmp(nshg) 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansenc.... scalars 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansen do isclr=1,nsclr 34*59599516SKenneth E. Jansen where (btest(iBC,5+isclr)) BC(:,6+isclr) = BCtmp(:,12+isclr) 35*59599516SKenneth E. Jansen enddo 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansenc.... set up the thermodynamic properties 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansen where (btest(iBC,0)) BC(:,1) = BCtmp(:,1) ! density 40*59599516SKenneth E. Jansen where (btest(iBC,1)) BC(:,2) = BCtmp(:,2) ! temperature 41*59599516SKenneth E. Jansen where (btest(iBC,2)) BC(:,1) = BCtmp(:,3) ! pressure 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc.... if the velocity in the x1-direction is specified 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 1) 46*59599516SKenneth E. Jansen tmp = BCtmp(:,4)**2 + BCtmp(:,5)**2 + BCtmp(:,6)**2 47*59599516SKenneth E. Jansen BC(:,3) = tmp * BCtmp(:,7) / BCtmp(:,4) 48*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:,5) / BCtmp(:,4) 49*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,6) / BCtmp(:,4) 50*59599516SKenneth E. Jansen endwhere 51*59599516SKenneth E. Jansenc 52*59599516SKenneth E. Jansenc.... if the velocity in the x2-direction is specified 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 2) 55*59599516SKenneth E. Jansen tmp = BCtmp(:,4)**2 + BCtmp(:,5)**2 + BCtmp(:,6)**2 56*59599516SKenneth E. Jansen BC(:,3) = tmp * BCtmp(:,7) / BCtmp(:,5) 57*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:,4) / BCtmp(:,5) 58*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,6) / BCtmp(:,5) 59*59599516SKenneth E. Jansen endwhere 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansenc.... if the two velocities are specified (x1 & x2-direction) 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansenc Protect against user flipping the order of x1 and x2 in 65*59599516SKenneth E. Jansenc the vector 1 and vector 2. Without this it will blow up. 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansen do i=1,nshg 68*59599516SKenneth E. Jansen if(ibits(iBC(i),3,3) .eq. 3 .and. 69*59599516SKenneth E. Jansen & (BCtmp(i,4).eq.0 .or. BCtmp(i,9).eq.0)) then !flip them 70*59599516SKenneth E. Jansen tmpbc(1:4)=BCtmp(i,4:7) 71*59599516SKenneth E. Jansen BCtmp(i,4:7)=BCtmp(i,8:11) 72*59599516SKenneth E. Jansen BCtmp(i,8:11)=tmpbc(1:4) 73*59599516SKenneth E. Jansen endif 74*59599516SKenneth E. Jansen enddo 75*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 3) 76*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 4)**2 + BCtmp(:, 5)**2 77*59599516SKenneth E. Jansen & + BCtmp(:, 6)**2) 78*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:, 4) / tmp 79*59599516SKenneth E. Jansen BCtmp(:, 5) = BCtmp(:, 5) / tmp 80*59599516SKenneth E. Jansen BCtmp(:, 6) = BCtmp(:, 6) / tmp 81*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:, 7) * tmp 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 8)**2 + BCtmp(:, 9)**2 84*59599516SKenneth E. Jansen & + BCtmp(:,10)**2) 85*59599516SKenneth E. Jansen BCtmp(:, 8) = BCtmp(:, 8) / tmp 86*59599516SKenneth E. Jansen BCtmp(:, 9) = BCtmp(:, 9) / tmp 87*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:,10) / tmp 88*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:,11) * tmp 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:, 9) * BCtmp(:, 4) 91*59599516SKenneth E. Jansen & - BCtmp(:, 5) * BCtmp(:, 8) 92*59599516SKenneth E. Jansen BCtmp(:, 6) = BCtmp(:, 9) * BCtmp(:, 6) 93*59599516SKenneth E. Jansen & - BCtmp(:, 5) * BCtmp(:,10) 94*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:, 9) * BCtmp(:, 7) 95*59599516SKenneth E. Jansen & - BCtmp(:, 5) * BCtmp(:,11) 96*59599516SKenneth E. Jansen BC(:,3) = BCtmp(:, 7) / BCtmp(:, 4) 97*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:, 6) / BCtmp(:, 4) 98*59599516SKenneth E. Jansenc 99*59599516SKenneth E. Jansen BCtmp(:, 9) = BCtmp(:, 4) * BCtmp(:, 9) 100*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:, 4) * BCtmp(:,10) 101*59599516SKenneth E. Jansen & - BCtmp(:, 8) * BCtmp(:, 6) 102*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:, 4) * BCtmp(:,11) 103*59599516SKenneth E. Jansen & - BCtmp(:, 8) * BCtmp(:, 7) 104*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,11) / BCtmp(:, 9) 105*59599516SKenneth E. Jansen BC(:,6) = BCtmp(:,10) / BCtmp(:, 9) 106*59599516SKenneth E. Jansen endwhere 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansenc.... if the velocity in the x3-direction is specified 109*59599516SKenneth E. Jansenc 110*59599516SKenneth E. Jansen if (nsd .eq. 3) then 111*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 4) 112*59599516SKenneth E. Jansen tmp = BCtmp(:,4)**2 + BCtmp(:,5)**2 + BCtmp(:,6)**2 113*59599516SKenneth E. Jansen BC(:,3) = tmp * BCtmp(:,7) / BCtmp(:,6) 114*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:,4) / BCtmp(:,6) 115*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,5) / BCtmp(:,6) 116*59599516SKenneth E. Jansen endwhere 117*59599516SKenneth E. Jansen endif 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansenc.... if two velocities are specified (x1 & x3-direction) 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansen if (nsd .eq. 3) then 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansenc Protect against user flipping the order of x1 and x3 in 124*59599516SKenneth E. Jansenc the vector 1 and vector 2. Without this it will blow up. 125*59599516SKenneth E. Jansenc 126*59599516SKenneth E. Jansen do i=1,nshg 127*59599516SKenneth E. Jansen if(ibits(iBC(i),3,3) .eq. 5 .and. 128*59599516SKenneth E. Jansen & (BCtmp(i,4).eq.0 .or. BCtmp(i,10).eq.0)) then !flip them 129*59599516SKenneth E. Jansen tmpbc(1:4)=BCtmp(i,4:7) 130*59599516SKenneth E. Jansen BCtmp(i,4:7)=BCtmp(i,8:11) 131*59599516SKenneth E. Jansen BCtmp(i,8:11)=tmpbc(1:4) 132*59599516SKenneth E. Jansen endif 133*59599516SKenneth E. Jansen enddo 134*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 5) 135*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 4)**2 + BCtmp(:, 5)**2 136*59599516SKenneth E. Jansen & + BCtmp(:, 6)**2) 137*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:, 4) / tmp 138*59599516SKenneth E. Jansen BCtmp(:, 5) = BCtmp(:, 5) / tmp 139*59599516SKenneth E. Jansen BCtmp(:, 6) = BCtmp(:, 6) / tmp 140*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:, 7) * tmp 141*59599516SKenneth E. Jansenc 142*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 8)**2 + BCtmp(:, 9)**2 143*59599516SKenneth E. Jansen & + BCtmp(:,10)**2) 144*59599516SKenneth E. Jansen BCtmp(:, 8) = BCtmp(:, 8) / tmp 145*59599516SKenneth E. Jansen BCtmp(:, 9) = BCtmp(:, 9) / tmp 146*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:,10) / tmp 147*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:,11) * tmp 148*59599516SKenneth E. Jansenc 149*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:,10) * BCtmp(:, 4) 150*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:, 8) 151*59599516SKenneth E. Jansen BCtmp(:, 5) = BCtmp(:,10) * BCtmp(:, 5) 152*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:, 9) 153*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:,10) * BCtmp(:, 7) 154*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:,11) 155*59599516SKenneth E. Jansen BC(:,3) = BCtmp(:, 7) / BCtmp(:, 4) 156*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:, 5) / BCtmp(:, 4) 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansen BCtmp(:, 9) = BCtmp(:, 4) * BCtmp(:, 9) 159*59599516SKenneth E. Jansen & - BCtmp(:, 8) * BCtmp(:, 5) 160*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:, 4) * BCtmp(:,10) 161*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:, 4) * BCtmp(:,11) 162*59599516SKenneth E. Jansen & - BCtmp(:, 8) * BCtmp(:, 7) 163*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,11) / BCtmp(:,10) 164*59599516SKenneth E. Jansen BC(:,6) = BCtmp(:, 9) / BCtmp(:,10) 165*59599516SKenneth E. Jansen endwhere 166*59599516SKenneth E. Jansen endif 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansenc.... if two velocities are specified (x2 & x3-direction) 169*59599516SKenneth E. Jansenc 170*59599516SKenneth E. Jansen if (nsd .eq. 3) then 171*59599516SKenneth E. Jansenc 172*59599516SKenneth E. Jansenc Protect against user flipping the order of x2 and x3 in 173*59599516SKenneth E. Jansenc the vector 1 and vector 2. Without this it will blow up. 174*59599516SKenneth E. Jansenc 175*59599516SKenneth E. Jansen do i=1,nshg 176*59599516SKenneth E. Jansen if(ibits(iBC(i),3,3) .eq. 6 .and. ( 177*59599516SKenneth E. Jansen & BCtmp(i,5).eq.0 .or. BCtmp(i,10).eq.0)) then !flip them 178*59599516SKenneth E. Jansen tmpbc(1:4)=BCtmp(i,4:7) 179*59599516SKenneth E. Jansen BCtmp(i,4:7)=BCtmp(i,8:11) 180*59599516SKenneth E. Jansen BCtmp(i,8:11)=tmpbc(1:4) 181*59599516SKenneth E. Jansen endif 182*59599516SKenneth E. Jansen enddo 183*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 6) 184*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 4)**2 + BCtmp(:, 5)**2 185*59599516SKenneth E. Jansen & + BCtmp(:, 6)**2) 186*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:, 4) / tmp 187*59599516SKenneth E. Jansen BCtmp(:, 5) = BCtmp(:, 5) / tmp 188*59599516SKenneth E. Jansen BCtmp(:, 6) = BCtmp(:, 6) / tmp 189*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:, 7) * tmp 190*59599516SKenneth E. Jansenc 191*59599516SKenneth E. Jansen tmp = sqrt (BCtmp(:, 8)**2 + BCtmp(:, 9)**2 192*59599516SKenneth E. Jansen & + BCtmp(:,10)**2) 193*59599516SKenneth E. Jansen BCtmp(:, 8) = BCtmp(:, 8) / tmp 194*59599516SKenneth E. Jansen BCtmp(:, 9) = BCtmp(:, 9) / tmp 195*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:,10) / tmp 196*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:,11) * tmp 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansen BCtmp(:, 4) = BCtmp(:,10) * BCtmp(:, 4) 199*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:, 8) 200*59599516SKenneth E. Jansen BCtmp(:, 5) = BCtmp(:,10) * BCtmp(:, 5) 201*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:, 9) 202*59599516SKenneth E. Jansen BCtmp(:, 7) = BCtmp(:,10) * BCtmp(:, 7) 203*59599516SKenneth E. Jansen & - BCtmp(:, 6) * BCtmp(:,11) 204*59599516SKenneth E. Jansen BC(:,3) = BCtmp(:, 7) / BCtmp(:, 5) 205*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:, 4) / BCtmp(:, 5) 206*59599516SKenneth E. Jansenc 207*59599516SKenneth E. Jansen BCtmp(:, 8) = BCtmp(:, 5) * BCtmp(:, 8) 208*59599516SKenneth E. Jansen & - BCtmp(:, 9) * BCtmp(:, 4) 209*59599516SKenneth E. Jansen BCtmp(:,10) = BCtmp(:, 5) * BCtmp(:,10) 210*59599516SKenneth E. Jansen BCtmp(:,11) = BCtmp(:, 5) * BCtmp(:,11) 211*59599516SKenneth E. Jansen & - BCtmp(:, 9) * BCtmp(:, 7) 212*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,11) / BCtmp(:,10) 213*59599516SKenneth E. Jansen BC(:,6) = BCtmp(:, 8) / BCtmp(:,10) 214*59599516SKenneth E. Jansen endwhere 215*59599516SKenneth E. Jansen endif 216*59599516SKenneth E. Jansenc 217*59599516SKenneth E. Jansenc.... if all velocities are specified 218*59599516SKenneth E. Jansenc 219*59599516SKenneth E. Jansen if (nsd .eq. 3) then 220*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 7) 221*59599516SKenneth E. Jansen BC(:,3) = BCtmp(:,7) * BCtmp(:,4) 222*59599516SKenneth E. Jansen BC(:,4) = BCtmp(:,7) * BCtmp(:,5) 223*59599516SKenneth E. Jansen BC(:,5) = BCtmp(:,7) * BCtmp(:,6) 224*59599516SKenneth E. Jansen endwhere 225*59599516SKenneth E. Jansen endif 226*59599516SKenneth E. Jansenc 227*59599516SKenneth E. Jansenc.... end 228*59599516SKenneth E. Jansenc 229*59599516SKenneth E. Jansen return 230*59599516SKenneth E. Jansen end 231