1*59599516SKenneth E. Jansen subroutine bc3Diag (iBC, BC, res) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc This routine satisfies the BC of the diagonal vector for 3D elements. 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc input: 8*59599516SKenneth E. Jansenc iBC (nshg) : Boundary Condition Code 9*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : the boundary condition constraint parameters 10*59599516SKenneth E. Jansenc res (nshg,nflow) : residual before BC is applied 11*59599516SKenneth E. Jansenc 12*59599516SKenneth E. Jansenc output: 13*59599516SKenneth E. Jansenc res (nshg,nflow) : residual after satisfaction of BC 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc 16*59599516SKenneth E. Jansenc Thuc Bui, Winter 1989. 17*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 18*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansen include "common.h" 21*59599516SKenneth E. Jansenc 22*59599516SKenneth E. Jansen dimension iBC(nshg), BC(nshg,ndofBC), 23*59599516SKenneth E. Jansen & res(nshg,4) 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansenc.... pressure 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansen where (btest(iBC,2)) 28*59599516SKenneth E. Jansen res(:,4) = zero 29*59599516SKenneth E. Jansen endwhere 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansenc.... velocities 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansenc ibits(n1,n2,n3) extracts bits n2+1 through n2+n3 (extending to the left 34*59599516SKenneth E. Jansenc as is traditional in binary) of the integer n1 35*59599516SKenneth E. Jansenc and returns the base 10 integer. In examples below x y z a b can 36*59599516SKenneth E. Jansenc be 1 or zero without any effect. 37*59599516SKenneth E. Jansenc 38*59599516SKenneth E. Jansenc.... x1-velocity 39*59599516SKenneth E. Jansenc 40*59599516SKenneth E. Jansenc if iBC=4 bits of ibc =00000100 => ibits(4,3,3)=0 41*59599516SKenneth E. Jansenc if iBC=40 bits of ibc =00101000 => ibits(4,3,3)=5 42*59599516SKenneth E. Jansenc if iBC=40 bits of ibc =00101000 => ibits(4,3,2)=1 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 1) ! bits of iBC= xy001zab 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansenc notice that the extracted 3 bits form the number 1. below 47*59599516SKenneth E. Jansenc you will see the combinations which make up 2-7, all of the 48*59599516SKenneth E. Jansenc possible velocity combinations 49*59599516SKenneth E. Jansenc 50*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,4) * res(:,1) 51*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,5) * res(:,1) 52*59599516SKenneth E. Jansen res(:,1) = zero 53*59599516SKenneth E. Jansen endwhere 54*59599516SKenneth E. Jansenc 55*59599516SKenneth E. Jansenc.... x2-velocity 56*59599516SKenneth E. Jansenc 57*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 2) ! bits of iBC= xy010zab 58*59599516SKenneth E. Jansen res(:,1) = res(:,1) - BC(:,4) * res(:,2) 59*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,5) * res(:,2) 60*59599516SKenneth E. Jansen res(:,2) = zero 61*59599516SKenneth E. Jansen endwhere 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity 64*59599516SKenneth E. Jansenc 65*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 3) ! bits of iBC= xy011zab 66*59599516SKenneth E. Jansen res(:,3) = res(:,3) - BC(:,4) * res(:,1) - BC(:,6) * res(:,2) 67*59599516SKenneth E. Jansen res(:,1) = zero 68*59599516SKenneth E. Jansen res(:,2) = zero 69*59599516SKenneth E. Jansen endwhere 70*59599516SKenneth E. Jansenc 71*59599516SKenneth E. Jansenc.... x3-velocity 72*59599516SKenneth E. Jansenc 73*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 4) ! bits of iBC= xy100zab 74*59599516SKenneth E. Jansen res(:,1) = res(:,1) - BC(:,4) * res(:,3) 75*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,5) * res(:,3) 76*59599516SKenneth E. Jansen res(:,3) = zero 77*59599516SKenneth E. Jansen endwhere 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 5) ! bits of iBC= xy101zab 82*59599516SKenneth E. Jansen res(:,2) = res(:,2) - BC(:,4) * res(:,1) - BC(:,6) * res(:,3) 83*59599516SKenneth E. Jansen res(:,1) = zero 84*59599516SKenneth E. Jansen res(:,3) = zero 85*59599516SKenneth E. Jansen endwhere 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 6) ! bits of iBC= xy110zab 90*59599516SKenneth E. Jansen res(:,1) = res(:,1) - BC(:,4) * res(:,2) - BC(:,6) * res(:,3) 91*59599516SKenneth E. Jansen res(:,2) = zero 92*59599516SKenneth E. Jansen res(:,3) = zero 93*59599516SKenneth E. Jansen endwhere 94*59599516SKenneth E. Jansenc 95*59599516SKenneth E. Jansenc.... x1-velocity, x2-velocity and x3-velocity 96*59599516SKenneth E. Jansenc 97*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 7) ! bits of iBC= xy111zab 98*59599516SKenneth E. Jansen res(:,1) = zero 99*59599516SKenneth E. Jansen res(:,2) = zero 100*59599516SKenneth E. Jansen res(:,3) = zero 101*59599516SKenneth E. Jansen endwhere 102*59599516SKenneth E. Jansenc 103*59599516SKenneth E. Jansenc.... scaled plane extraction boundary condition 104*59599516SKenneth E. Jansenc 105*59599516SKenneth E. Jansen if(intpres.eq.1) then ! interpolating pressure so zero continuity res 106*59599516SKenneth E. Jansen where (btest(iBC,11)) 107*59599516SKenneth E. Jansen res(:,1) = zero 108*59599516SKenneth E. Jansen res(:,2) = zero 109*59599516SKenneth E. Jansen res(:,3) = zero 110*59599516SKenneth E. Jansen res(:,4) = zero 111*59599516SKenneth E. Jansen endwhere 112*59599516SKenneth E. Jansen else ! leave residual in continuity equation 113*59599516SKenneth E. Jansen where (btest(iBC,11)) 114*59599516SKenneth E. Jansen res(:,1) = zero 115*59599516SKenneth E. Jansen res(:,2) = zero 116*59599516SKenneth E. Jansen res(:,3) = zero 117*59599516SKenneth E. Jansen endwhere 118*59599516SKenneth E. Jansen endif 119*59599516SKenneth E. Jansen 120*59599516SKenneth E. Jansenc.... return 121*59599516SKenneth E. Jansenc 122*59599516SKenneth E. Jansen return 123*59599516SKenneth E. Jansen end 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen 126*59599516SKenneth E. Jansen subroutine bc3SclrDiag (iBC, res) 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 129*59599516SKenneth E. Jansenc 130*59599516SKenneth E. Jansenc This routine satisfies the BC of the diagonal vector for 3D elements. 131*59599516SKenneth E. Jansenc 132*59599516SKenneth E. Jansenc input: 133*59599516SKenneth E. Jansenc iBC (nshg) : Boundary Condition Code 134*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : the boundary condition constraint parameters 135*59599516SKenneth E. Jansenc res (nshg) : residual before BC is applied 136*59599516SKenneth E. Jansenc 137*59599516SKenneth E. Jansenc output: 138*59599516SKenneth E. Jansenc res (nshg) : residual after satisfaction of BC 139*59599516SKenneth E. Jansenc 140*59599516SKenneth E. Jansenc 141*59599516SKenneth E. Jansenc Thuc Bui, Winter 1989. 142*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 143*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 144*59599516SKenneth E. Jansenc 145*59599516SKenneth E. Jansen include "common.h" 146*59599516SKenneth E. Jansenc 147*59599516SKenneth E. Jansen dimension iBC(nshg), BC(nshg,ndofBC), 148*59599516SKenneth E. Jansen & res(nshg) 149*59599516SKenneth E. Jansen 150*59599516SKenneth E. Jansen if(isclr.eq.0) then 151*59599516SKenneth E. Jansenc 152*59599516SKenneth E. Jansenc.... temperature 153*59599516SKenneth E. Jansenc 154*59599516SKenneth E. Jansen where (btest(iBC,1)) 155*59599516SKenneth E. Jansen res = zero 156*59599516SKenneth E. Jansen endwhere 157*59599516SKenneth E. Jansen else 158*59599516SKenneth E. Jansenc 159*59599516SKenneth E. Jansenc.... scalar 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansen ib=5+isclr 162*59599516SKenneth E. Jansen where (btest(iBC,ib)) 163*59599516SKenneth E. Jansen res = zero 164*59599516SKenneth E. Jansen endwhere 165*59599516SKenneth E. Jansen endif 166*59599516SKenneth E. Jansenc 167*59599516SKenneth E. Jansenc.... return 168*59599516SKenneth E. Jansenc 169*59599516SKenneth E. Jansen return 170*59599516SKenneth E. Jansen end 171