1*59599516SKenneth E. Jansen subroutine bc3Res (y, iBC, BC, res, iper, ilwork) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc This routine satisfies the BC of the residual vector for 3D elements. 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc input: 8*59599516SKenneth E. Jansenc y (nshg,ndof) : Y variables 9*59599516SKenneth E. Jansenc iBC (nshg) : Boundary Condition Code 10*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : the boundary condition constraint parameters 11*59599516SKenneth E. Jansenc res (nshg,nflow) : residual before BC is applied 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansenc output: 14*59599516SKenneth E. Jansenc res (nshg,nflow) : residual after satisfaction of BC 15*59599516SKenneth E. Jansenc 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansenc Thuc Bui, Winter 1989. 18*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 19*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 20*59599516SKenneth E. Jansenc 21*59599516SKenneth E. Jansen include "common.h" 22*59599516SKenneth E. Jansenc 23*59599516SKenneth E. Jansen dimension y(nshg,ndof), iBC(nshg), 24*59599516SKenneth E. Jansen & BC(nshg,ndofBC), 25*59599516SKenneth E. Jansen & res(nshg,nflow), ilwork(nlwork), 26*59599516SKenneth E. Jansen & iper(nshg) 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansenc.... density 29*59599516SKenneth E. Jansenc 30*59599516SKenneth E. Jansen where (btest(iBC,0)) 31*59599516SKenneth E. Jansen res(:,5) = res(:,5) + BC(:,1)*Rgas* res(:,1) !IDEAL GAS ASSUMED 32*59599516SKenneth E. Jansen res(:,1) = zero 33*59599516SKenneth E. Jansen endwhere 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc.... pressure 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansen if(EntropyPressure.eq.1) then 38*59599516SKenneth E. Jansen where (btest(iBC,2)) 39*59599516SKenneth E. Jansen 40*59599516SKenneth E. Jansenc Thought this would be correct if W was in the tangent space of V 41*59599516SKenneth E. Jansenc as described in Shakib's thesis it does not work for primitive 42*59599516SKenneth E. Jansenc variables 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansenc Instead we use the entropy variable W 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansen res(:,2) = res(:,2) -y(:,1)*res(:,1) 47*59599516SKenneth E. Jansen res(:,3) = res(:,3) -y(:,2)*res(:,1) 48*59599516SKenneth E. Jansen res(:,4) = res(:,4) -y(:,3)*res(:,1) 49*59599516SKenneth E. Jansen res(:,5) = res(:,5) - 50*59599516SKenneth E. Jansen & (gamma*Rgas/gamma1*y(:,5) 51*59599516SKenneth E. Jansen & + pt5 * ( y(:,1)**2 + y(:,2)**2 + y(:,3)**2))*res(:,1) 52*59599516SKenneth E. Jansen res(:,1) = zero 53*59599516SKenneth E. Jansen endwhere 54*59599516SKenneth E. Jansen else 55*59599516SKenneth E. Jansen where (btest(iBC,2)) 56*59599516SKenneth E. Jansen res(:,1) = zero 57*59599516SKenneth E. Jansen endwhere 58*59599516SKenneth E. Jansen endif 59*59599516SKenneth E. Jansenc 60*59599516SKenneth E. Jansenc.... velocities 61*59599516SKenneth E. Jansenc 62*59599516SKenneth E. Jansenc ibits(n1,n2,n3) extracts bits n2+1 through n2+n3 (extending to the left 63*59599516SKenneth E. Jansenc as is traditional in binary) of the integer n1 64*59599516SKenneth E. Jansenc and returns the base 10 integer. In examples below x y z a b can 65*59599516SKenneth E. Jansenc be 1 or zero without any effect. 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansenc.... x1-velocity 68*59599516SKenneth E. Jansenc 69*59599516SKenneth E. Jansenc if iBC=4 bits of ibc =00000100 => ibits(4,3,3)=0 70*59599516SKenneth E. Jansenc if iBC=40 bits of ibc =00101000 => ibits(4,3,3)=5 71*59599516SKenneth E. Jansenc if iBC=40 bits of ibc =00101000 => ibits(4,3,2)=1 72*59599516SKenneth E. Jansenc 73*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 1) ! bits of iBC= xy001zab 74*59599516SKenneth E. Jansenc 75*59599516SKenneth E. Jansenc notice that the extracted 3 bits form the number 1. below 76*59599516SKenneth E. Jansenc you will see the combinations which make up 2-7, all of the 77*59599516SKenneth E. Jansenc possible velocity combinations 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,4) * res(:,2) 80*59599516SKenneth E. Jansen res(:,4) = res(:,4) - BC(:,5) * res(:,2) 81*59599516SKenneth E. Jansen res(:,2) = zero 82*59599516SKenneth E. Jansen endwhere 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansenc.... x2-velocity 85*59599516SKenneth E. Jansenc 86*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 2) ! bits of iBC= xy010zab 87*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,4) * res(:,3) 88*59599516SKenneth E. Jansen res(:,4) = res(:,4) - BC(:,5) * res(:,3) 89*59599516SKenneth E. Jansen res(:,3) = zero 90*59599516SKenneth E. Jansen endwhere 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity 93*59599516SKenneth E. Jansenc 94*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 3) ! bits of iBC= xy011zab 95*59599516SKenneth E. Jansen res(:,4) = res(:,4) - BC(:,4) * res(:,2) - BC(:,6) * res(:,3) 96*59599516SKenneth E. Jansen res(:,2) = zero 97*59599516SKenneth E. Jansen res(:,3) = zero 98*59599516SKenneth E. Jansen endwhere 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansenc.... x3-velocity 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 4) ! bits of iBC= xy100zab 103*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,4) * res(:,4) 104*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,5) * res(:,4) 105*59599516SKenneth E. Jansen res(:,4) = zero 106*59599516SKenneth E. Jansen endwhere 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity 109*59599516SKenneth E. Jansenc 110*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 5) ! bits of iBC= xy101zab 111*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,4) * res(:,2) - BC(:,6) * res(:,4) 112*59599516SKenneth E. Jansen res(:,2) = zero 113*59599516SKenneth E. Jansen res(:,4) = zero 114*59599516SKenneth E. Jansen endwhere 115*59599516SKenneth E. Jansenc 116*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 6) ! bits of iBC= xy110zab 119*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,4) * res(:,3) - BC(:,6) * res(:,4) 120*59599516SKenneth E. Jansen res(:,3) = zero 121*59599516SKenneth E. Jansen res(:,4) = zero 122*59599516SKenneth E. Jansen endwhere 123*59599516SKenneth E. Jansenc 124*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity 125*59599516SKenneth E. Jansenc 126*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 7) ! bits of iBC= xy111zab 127*59599516SKenneth E. Jansen res(:,2) = zero 128*59599516SKenneth E. Jansen res(:,3) = zero 129*59599516SKenneth E. Jansen res(:,4) = zero 130*59599516SKenneth E. Jansen endwhere 131*59599516SKenneth E. Jansenc 132*59599516SKenneth E. Jansenc.... scaled plane extraction boundary condition 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansen if(intpres.eq.1) then ! interpolating pressure so zero continuity res 135*59599516SKenneth E. Jansen where (btest(iBC,11)) 136*59599516SKenneth E. Jansen res(:,1) = zero 137*59599516SKenneth E. Jansen res(:,2) = zero 138*59599516SKenneth E. Jansen res(:,3) = zero 139*59599516SKenneth E. Jansen res(:,4) = zero 140*59599516SKenneth E. Jansen res(:,5) = zero ! added to correspond to genscale (Elaine) 141*59599516SKenneth E. Jansen endwhere 142*59599516SKenneth E. Jansen else ! leave residual in continuity equation 143*59599516SKenneth E. Jansen where (btest(iBC,11)) 144*59599516SKenneth E. Jansen res(:,2) = zero 145*59599516SKenneth E. Jansen res(:,3) = zero 146*59599516SKenneth E. Jansen res(:,4) = zero 147*59599516SKenneth E. Jansen res(:,5) = zero ! added to correspond to genscale (Elaine) 148*59599516SKenneth E. Jansen endwhere 149*59599516SKenneth E. Jansen endif 150*59599516SKenneth E. Jansenc 151*59599516SKenneth E. Jansenc.... temperature 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansen where (btest(iBC,1)) res(:,5) = zero 154*59599516SKenneth E. Jansenc 155*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications) 156*59599516SKenneth E. Jansenc 157*59599516SKenneth E. Jansen do j = 1,nshg 158*59599516SKenneth E. Jansen if (btest(iBC(j),10)) then 159*59599516SKenneth E. Jansen i = iper(j) 160*59599516SKenneth E. Jansen res(i,:) = res(i,:) + res(j,:) 161*59599516SKenneth E. Jansen res(j,:) = zero 162*59599516SKenneth E. Jansen endif 163*59599516SKenneth E. Jansen enddo 164*59599516SKenneth E. Jansenc 165*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters 166*59599516SKenneth E. Jansenc 167*59599516SKenneth E. Jansenc do i = 1,nshg 168*59599516SKenneth E. Jansenc if (btest(iBC(i),10)) then 169*59599516SKenneth E. Jansenc res(i,:) = res(iper(i),:) 170*59599516SKenneth E. Jansenc endif 171*59599516SKenneth E. Jansenc enddo 172*59599516SKenneth E. Jansen if(numpe.gt.1) then 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. Jansen numtask = ilwork(1) 177*59599516SKenneth E. Jansen itkbeg = 1 178*59599516SKenneth E. Jansen 179*59599516SKenneth E. Jansen do itask = 1, numtask 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 182*59599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 183*59599516SKenneth E. Jansen 184*59599516SKenneth E. Jansen if (iacc .eq. 0) then 185*59599516SKenneth E. Jansen do is = 1,numseg 186*59599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 187*59599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 188*59599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 189*59599516SKenneth E. Jansen res(isgbeg:isgend,:) = zero 190*59599516SKenneth E. Jansen enddo 191*59599516SKenneth E. Jansen endif 192*59599516SKenneth E. Jansen 193*59599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansen enddo 196*59599516SKenneth E. Jansen endif 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansenc.... return 199*59599516SKenneth E. Jansenc 200*59599516SKenneth E. Jansen return 201*59599516SKenneth E. Jansen end 202*59599516SKenneth E. Jansenc 203*59599516SKenneth E. Jansenc 204*59599516SKenneth E. Jansenc 205*59599516SKenneth E. Jansen subroutine bc3ResSclr (y, iBC, BC, rest, 206*59599516SKenneth E. Jansen & iper, ilwork) 207*59599516SKenneth E. Jansenc 208*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 209*59599516SKenneth E. Jansenc 210*59599516SKenneth E. Jansenc This routine satisfies the BC of the residual vector for 3D elements. 211*59599516SKenneth E. Jansenc 212*59599516SKenneth E. Jansenc input: 213*59599516SKenneth E. Jansenc Y (nshg,ndof) : Y Variables 214*59599516SKenneth E. Jansenc iBC (nshg) : Boundary Condition Code 215*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : the boundary condition constraint parameters 216*59599516SKenneth E. Jansenc rest (nshg) : residual before BC is applied 217*59599516SKenneth E. Jansenc 218*59599516SKenneth E. Jansenc output: 219*59599516SKenneth E. Jansenc rest (nshg) : residual after satisfaction of BC 220*59599516SKenneth E. Jansenc 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansenc Thuc Bui, Winter 1989. 223*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 224*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 225*59599516SKenneth E. Jansenc 226*59599516SKenneth E. Jansen include "common.h" 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansen dimension y(nshg,ndof), iBC(nshg), 229*59599516SKenneth E. Jansen & BC(nshg,ndofBC), 230*59599516SKenneth E. Jansen & rest(nshg), ilwork(nlwork), 231*59599516SKenneth E. Jansen & iper(nshg) 232*59599516SKenneth E. Jansenc 233*59599516SKenneth E. Jansenc 234*59599516SKenneth E. Jansen id = isclr+5 235*59599516SKenneth E. Jansenc.... Scalar Variable 236*59599516SKenneth E. Jansenc 237*59599516SKenneth E. Jansen where (btest(iBC,id)) 238*59599516SKenneth E. Jansen rest(:) = zero 239*59599516SKenneth E. Jansen endwhere 240*59599516SKenneth E. Jansenc 241*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications) 242*59599516SKenneth E. Jansenc 243*59599516SKenneth E. Jansen do j = 1,nshg 244*59599516SKenneth E. Jansen if (btest(iBC(j),10)) then 245*59599516SKenneth E. Jansen i = iper(j) 246*59599516SKenneth E. Jansen rest(i) = rest(i) + rest(j) 247*59599516SKenneth E. Jansen rest(j) = zero !changed 248*59599516SKenneth E. Jansen endif 249*59599516SKenneth E. Jansen enddo 250*59599516SKenneth E. Jansenc 251*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansenc$$$ do i = 1,nshg 254*59599516SKenneth E. Jansenc$$$ if (btest(iBC(i),10)) then 255*59599516SKenneth E. Jansenc$$$ rest(i) = rest(iper(i)) 256*59599516SKenneth E. Jansenc$$$ endif 257*59599516SKenneth E. Jansenc$$$ enddo 258*59599516SKenneth E. Jansenc 259*59599516SKenneth E. Jansenc removed for impl=4 as we have set the loops over ntopsh 260*59599516SKenneth E. Jansenc 261*59599516SKenneth E. Jansen if(numpe.gt.1 ) then 262*59599516SKenneth E. Jansenc 263*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated 264*59599516SKenneth E. Jansenc 265*59599516SKenneth E. Jansen numtask = ilwork(1) 266*59599516SKenneth E. Jansen itkbeg = 1 267*59599516SKenneth E. Jansen 268*59599516SKenneth E. Jansen do itask = 1, numtask 269*59599516SKenneth E. Jansen 270*59599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 271*59599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 272*59599516SKenneth E. Jansen 273*59599516SKenneth E. Jansen if (iacc .eq. 0) then 274*59599516SKenneth E. Jansen do is = 1,numseg 275*59599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 276*59599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 277*59599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 278*59599516SKenneth E. Jansen rest(isgbeg:isgend) = zero 279*59599516SKenneth E. Jansen enddo 280*59599516SKenneth E. Jansen endif 281*59599516SKenneth E. Jansen 282*59599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 283*59599516SKenneth E. Jansen 284*59599516SKenneth E. Jansen enddo 285*59599516SKenneth E. Jansen endif 286*59599516SKenneth E. Jansenc 287*59599516SKenneth E. Jansenc 288*59599516SKenneth E. Jansenc.... return 289*59599516SKenneth E. Jansenc 290*59599516SKenneth E. Jansen return 291*59599516SKenneth E. Jansen end 292*59599516SKenneth E. Jansen 293