1*59599516SKenneth E. Jansen subroutine bc3BDg (y, iBC, BC, BDiag, 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 block-diagonal preconditioning 6*59599516SKenneth E. Jansenc matrix for 3D elements. 7*59599516SKenneth E. Jansenc 8*59599516SKenneth E. Jansenc input: 9*59599516SKenneth E. Jansenc y (nshg,ndof) : Y variables 10*59599516SKenneth E. Jansenc iBC (nshg) : boundary condition code 11*59599516SKenneth E. Jansenc BC (nshg,ndofBC) : Dirichlet BC constraint parameters 12*59599516SKenneth E. Jansenc BDiag (nshg,nflow,nflow) : preconditionning matrix before BC 13*59599516SKenneth E. Jansenc (only upper part) 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc output: 16*59599516SKenneth E. Jansenc BDiag (nshg,nflow,nflow) : preconditionning matrix after BC 17*59599516SKenneth E. Jansenc is satisfied 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from g3bce.f) 21*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 22*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansen include "common.h" 25*59599516SKenneth E. Jansenc 26*59599516SKenneth E. Jansen dimension y(nshg,ndof), iBC(nshg), 27*59599516SKenneth E. Jansen & BC(nshg,ndofBC), 28*59599516SKenneth E. Jansen & BDiag(nshg,nflow,nflow), ilwork(nlwork), 29*59599516SKenneth E. Jansen & iper(nshg) 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansen real*8 a5(nshg) 32*59599516SKenneth E. Jansenc 33*59599516SKenneth E. Jansenc.... density 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansen do i = 1, nshg 36*59599516SKenneth E. Jansen a5(i) = - y(i,5) * (Rgas * gamma / gamma1) !IDEAL GAS ASSUMED 37*59599516SKenneth E. Jansen end do 38*59599516SKenneth E. Jansen 39*59599516SKenneth E. Jansen where (btest(iBC,0)) 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansenc.... engbc was replaced for a5 by following 42*59599516SKenneth E. Jansen 43*59599516SKenneth E. Jansen BDiag(:,5,5) = BDiag(:,5,5) + a5 * a5 * BDiag(:,1,1) + 44*59599516SKenneth E. Jansen & a5 * BDiag(:,1,5) + 45*59599516SKenneth E. Jansen & a5 * BDiag(:,5,1) 46*59599516SKenneth E. Jansen BDiag(:,4,5) = BDiag(:,4,5) + a5 * BDiag(:,4,1) 47*59599516SKenneth E. Jansen BDiag(:,3,5) = BDiag(:,3,5) + a5 * BDiag(:,3,1) 48*59599516SKenneth E. Jansen BDiag(:,2,5) = BDiag(:,2,5) + a5 * BDiag(:,2,1) 49*59599516SKenneth E. Jansen BDiag(:,5,4) = BDiag(:,5,4) + a5 * BDiag(:,1,4) 50*59599516SKenneth E. Jansen BDiag(:,5,3) = BDiag(:,5,3) + a5 * BDiag(:,1,3) 51*59599516SKenneth E. Jansen BDiag(:,5,2) = BDiag(:,5,2) + a5 * BDiag(:,1,2) 52*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 53*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 54*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 55*59599516SKenneth E. Jansen BDiag(:,1,5) = zero 56*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 57*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 58*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 59*59599516SKenneth E. Jansen BDiag(:,5,1) = zero 60*59599516SKenneth E. Jansen BDiag(:,1,1) = one 61*59599516SKenneth E. Jansen endwhere 62*59599516SKenneth E. Jansen 63*59599516SKenneth E. Jansenc where (btest(iBC,11)) ! pressure to deactivate 64*59599516SKenneth E. Jansen where (btest(iBC,2)) ! pressure 65*59599516SKenneth E. Jansen 66*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 67*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 68*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 69*59599516SKenneth E. Jansen BDiag(:,1,5) = zero 70*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 71*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 72*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 73*59599516SKenneth E. Jansen BDiag(:,5,1) = zero 74*59599516SKenneth E. Jansen BDiag(:,1,1) = one 75*59599516SKenneth E. Jansen endwhere 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansenc 78*59599516SKenneth E. Jansenc.... velocities 79*59599516SKenneth E. Jansenc 80*59599516SKenneth E. Jansenc.... x1-velocity 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 1) 83*59599516SKenneth E. Jansen BDiag(:,5,4) = BDiag(:,5,4) - BC(:,5) * BDiag(:,5,2) 84*59599516SKenneth E. Jansen BDiag(:,5,3) = BDiag(:,5,3) - BC(:,4) * BDiag(:,5,2) 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen BDiag(:,4,5) = BDiag(:,4,5) - BC(:,5) * BDiag(:,2,5) 87*59599516SKenneth E. Jansen BDiag(:,3,5) = BDiag(:,3,5) - BC(:,4) * BDiag(:,2,5) 88*59599516SKenneth E. Jansen 89*59599516SKenneth E. Jansen BDiag(:,4,1) = BDiag(:,4,1) - BC(:,5) * BDiag(:,2,1) 90*59599516SKenneth E. Jansen BDiag(:,3,1) = BDiag(:,3,1) - BC(:,4) * BDiag(:,2,1) 91*59599516SKenneth E. Jansen 92*59599516SKenneth E. Jansen BDiag(:,1,4) = BDiag(:,1,4) - BC(:,5) * BDiag(:,1,2) 93*59599516SKenneth E. Jansen BDiag(:,1,3) = BDiag(:,1,3) - BC(:,4) * BDiag(:,1,2) 94*59599516SKenneth E. Jansen 95*59599516SKenneth E. Jansen BDiag(:,4,4) = BDiag(:,4,4) + BC(:,5) * BC(:,5) * BDiag(:,2,2) 96*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,2,4) 97*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,4,2) 98*59599516SKenneth E. Jansen BDiag(:,3,4) = BDiag(:,3,4) + BC(:,4) * BC(:,5) * BDiag(:,2,2) 99*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,3,2) 100*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,2,4) 101*59599516SKenneth E. Jansen BDiag(:,4,3) = BDiag(:,4,3) + BC(:,4) * BC(:,5) * BDiag(:,2,2) 102*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,2,3) 103*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,4,2) 104*59599516SKenneth E. Jansen BDiag(:,3,3) = BDiag(:,3,3) + BC(:,4) * BC(:,4) * BDiag(:,2,2) 105*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,2,3) 106*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,3,2) 107*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 108*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 109*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 110*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 111*59599516SKenneth E. Jansen BDiag(:,2,5) = zero 112*59599516SKenneth E. Jansen BDiag(:,3,2) = zero 113*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 114*59599516SKenneth E. Jansen BDiag(:,5,2) = zero 115*59599516SKenneth E. Jansen BDiag(:,2,2) = one 116*59599516SKenneth E. Jansen endwhere 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansenc.... x2-velocity 119*59599516SKenneth E. Jansenc 120*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 2) 121*59599516SKenneth E. Jansen BDiag(:,5,4) = BDiag(:,5,4) - BC(:,5) * BDiag(:,5,3) 122*59599516SKenneth E. Jansen BDiag(:,5,2) = BDiag(:,5,2) - BC(:,4) * BDiag(:,5,3) 123*59599516SKenneth E. Jansen 124*59599516SKenneth E. Jansen BDiag(:,4,5) = BDiag(:,4,5) - BC(:,5) * BDiag(:,3,5) 125*59599516SKenneth E. Jansen BDiag(:,2,5) = BDiag(:,2,5) - BC(:,4) * BDiag(:,3,5) 126*59599516SKenneth E. Jansen 127*59599516SKenneth E. Jansen BDiag(:,4,1) = BDiag(:,4,1) - BC(:,5) * BDiag(:,3,1) 128*59599516SKenneth E. Jansen BDiag(:,2,1) = BDiag(:,2,1) - BC(:,4) * BDiag(:,3,1) 129*59599516SKenneth E. Jansen 130*59599516SKenneth E. Jansen BDiag(:,1,4) = BDiag(:,1,4) - BC(:,5) * BDiag(:,1,3) 131*59599516SKenneth E. Jansen BDiag(:,1,2) = BDiag(:,1,2) - BC(:,4) * BDiag(:,1,3) 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansen BDiag(:,4,4) = BDiag(:,4,4) + BC(:,5) * BC(:,5) * BDiag(:,3,3) 134*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,3,4) 135*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,4,3) 136*59599516SKenneth E. Jansen BDiag(:,2,4) = BDiag(:,2,4) + BC(:,4) * BC(:,5) * BDiag(:,3,3) 137*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,2,3) 138*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,3,4) 139*59599516SKenneth E. Jansen BDiag(:,4,2) = BDiag(:,4,2) + BC(:,4) * BC(:,5) * BDiag(:,3,3) 140*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,3,2) 141*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,4,3) 142*59599516SKenneth E. Jansen BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,3,3) 143*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,2,3) 144*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,3,2) 145*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 146*59599516SKenneth E. Jansen BDiag(:,3,2) = zero 147*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 148*59599516SKenneth E. Jansen BDiag(:,3,5) = zero 149*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 150*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 151*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 152*59599516SKenneth E. Jansen BDiag(:,5,3) = zero 153*59599516SKenneth E. Jansen BDiag(:,3,3) = one 154*59599516SKenneth E. Jansen endwhere 155*59599516SKenneth E. Jansenc 156*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 3) 159*59599516SKenneth E. Jansen BDiag(:,4,4) = BDiag(:,4,4) + BC(:,4) * BC(:,4) * BDiag(:,2,2) 160*59599516SKenneth E. Jansen & + BC(:,6) * BC(:,6) * BDiag(:,3,3) 161*59599516SKenneth E. Jansen & + BC(:,4) * BC(:,6) * ( BDiag(:,2,3) * BDiag(:,3,2)) 162*59599516SKenneth E. Jansen & - BC(:,6) * ( BDiag(:,4,3) * BDiag(:,3,4)) 163*59599516SKenneth E. Jansen & - BC(:,4) * ( BDiag(:,4,2) * BDiag(:,2,4)) 164*59599516SKenneth E. Jansen BDiag(:,1,4) = BDiag(:,1,4) - BC(:,4) * BDiag(:,1,2) 165*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,1,3) 166*59599516SKenneth E. Jansen BDiag(:,4,1) = BDiag(:,4,1) - BC(:,4) * BDiag(:,2,1) 167*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,3,1) 168*59599516SKenneth E. Jansen BDiag(:,5,4) = BDiag(:,5,4) - BC(:,4) * BDiag(:,5,2) 169*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,5,3) 170*59599516SKenneth E. Jansen BDiag(:,4,5) = BDiag(:,4,5) - BC(:,4) * BDiag(:,2,5) 171*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,3,5) 172*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 173*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 174*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 175*59599516SKenneth E. Jansen BDiag(:,2,5) = zero 176*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 177*59599516SKenneth E. Jansen BDiag(:,3,2) = zero 178*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 179*59599516SKenneth E. Jansen BDiag(:,3,5) = zero 180*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 181*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 182*59599516SKenneth E. Jansen BDiag(:,5,2) = zero 183*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 184*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 185*59599516SKenneth E. Jansen BDiag(:,5,3) = zero 186*59599516SKenneth E. Jansen BDiag(:,3,3) = one 187*59599516SKenneth E. Jansen BDiag(:,2,2) = one 188*59599516SKenneth E. Jansen endwhere 189*59599516SKenneth E. Jansenc 190*59599516SKenneth E. Jansenc.... x3-velocity 191*59599516SKenneth E. Jansenc 192*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 4) 193*59599516SKenneth E. Jansen BDiag(:,5,3) = BDiag(:,5,3) - BC(:,5) * BDiag(:,5,4) 194*59599516SKenneth E. Jansen BDiag(:,5,2) = BDiag(:,5,2) - BC(:,4) * BDiag(:,5,4) 195*59599516SKenneth E. Jansen 196*59599516SKenneth E. Jansen BDiag(:,3,5) = BDiag(:,3,5) - BC(:,5) * BDiag(:,4,5) 197*59599516SKenneth E. Jansen BDiag(:,2,5) = BDiag(:,2,5) - BC(:,4) * BDiag(:,4,5) 198*59599516SKenneth E. Jansen 199*59599516SKenneth E. Jansen BDiag(:,3,1) = BDiag(:,3,1) - BC(:,5) * BDiag(:,4,1) 200*59599516SKenneth E. Jansen BDiag(:,2,1) = BDiag(:,2,1) - BC(:,4) * BDiag(:,4,1) 201*59599516SKenneth E. Jansen 202*59599516SKenneth E. Jansen BDiag(:,1,3) = BDiag(:,1,3) - BC(:,5) * BDiag(:,1,4) 203*59599516SKenneth E. Jansen BDiag(:,1,2) = BDiag(:,1,2) - BC(:,4) * BDiag(:,1,4) 204*59599516SKenneth E. Jansen 205*59599516SKenneth E. Jansen BDiag(:,3,3) = BDiag(:,3,3) + BC(:,5) * BC(:,5) * BDiag(:,4,4) 206*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,3,4) 207*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,4,3) 208*59599516SKenneth E. Jansen BDiag(:,2,3) = BDiag(:,2,3) + BC(:,4) * BC(:,5) * BDiag(:,4,4) 209*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,2,4) 210*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,4,3) 211*59599516SKenneth E. Jansen BDiag(:,3,2) = BDiag(:,3,2) + BC(:,4) * BC(:,5) * BDiag(:,4,4) 212*59599516SKenneth E. Jansen & - BC(:,5) * BDiag(:,4,2) 213*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,3,4) 214*59599516SKenneth E. Jansen BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,4,4) 215*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,2,4) 216*59599516SKenneth E. Jansen & - BC(:,4) * BDiag(:,4,2) 217*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 218*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 219*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 220*59599516SKenneth E. Jansen BDiag(:,4,5) = zero 221*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 222*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 223*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 224*59599516SKenneth E. Jansen BDiag(:,5,4) = zero 225*59599516SKenneth E. Jansen BDiag(:,4,4) = one 226*59599516SKenneth E. Jansen endwhere 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansenc.... x1-velocity and x3-velocity 229*59599516SKenneth E. Jansenc 230*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 5) 231*59599516SKenneth E. Jansen BDiag(:,3,3) = BDiag(:,3,3) + BC(:,4) * BC(:,4) * BDiag(:,2,2) 232*59599516SKenneth E. Jansen & + BC(:,6) * BC(:,6) * BDiag(:,4,4) 233*59599516SKenneth E. Jansen & + BC(:,4) * BC(:,6) *(BDiag(:,2,4) + BDiag(:,4,2)) 234*59599516SKenneth E. Jansen & - BC(:,4) *(BDiag(:,2,3) + BDiag(:,3,2)) 235*59599516SKenneth E. Jansen & - BC(:,6) *(BDiag(:,4,3) + BDiag(:,3,4)) 236*59599516SKenneth E. Jansen BDiag(:,1,3) = BDiag(:,1,3) - BC(:,4) * BDiag(:,1,2) 237*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,1,4) 238*59599516SKenneth E. Jansen BDiag(:,3,1) = BDiag(:,3,1) - BC(:,4) * BDiag(:,2,1) 239*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,4,1) 240*59599516SKenneth E. Jansen BDiag(:,5,3) = BDiag(:,5,3) - BC(:,4) * BDiag(:,5,2) 241*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,5,4) 242*59599516SKenneth E. Jansen BDiag(:,3,5) = BDiag(:,3,5) - BC(:,4) * BDiag(:,2,5) 243*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,4,5) 244*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 245*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 246*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 247*59599516SKenneth E. Jansen BDiag(:,2,5) = zero 248*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 249*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 250*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 251*59599516SKenneth E. Jansen BDiag(:,4,5) = zero 252*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 253*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 254*59599516SKenneth E. Jansen BDiag(:,5,2) = zero 255*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 256*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 257*59599516SKenneth E. Jansen BDiag(:,5,4) = zero 258*59599516SKenneth E. Jansen BDiag(:,4,4) = one 259*59599516SKenneth E. Jansen BDiag(:,2,2) = one 260*59599516SKenneth E. Jansen endwhere 261*59599516SKenneth E. Jansenc 262*59599516SKenneth E. Jansenc.... x2-velocity and x3-velocity 263*59599516SKenneth E. Jansenc 264*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 6) 265*59599516SKenneth E. Jansen BDiag(:,2,2) = BDiag(:,2,2) + BC(:,4) * BC(:,4) * BDiag(:,3,3) 266*59599516SKenneth E. Jansen & + BC(:,6) * BC(:,6) * BDiag(:,4,4) 267*59599516SKenneth E. Jansen & + BC(:,4) * BC(:,6) * (BDiag(:,3,4) + BDiag(:,4,3)) 268*59599516SKenneth E. Jansen & - BC(:,4) *(BDiag(:,2,3) + BDiag(:,3,2)) 269*59599516SKenneth E. Jansen & - BC(:,6) *(BDiag(:,4,2) + BDiag(:,2,4)) 270*59599516SKenneth E. Jansen BDiag(:,1,2) = BDiag(:,1,2) - BC(:,4) * BDiag(:,1,3) 271*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,1,4) 272*59599516SKenneth E. Jansen BDiag(:,2,1) = BDiag(:,2,1) - BC(:,4) * BDiag(:,3,1) 273*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,4,1) 274*59599516SKenneth E. Jansen BDiag(:,5,2) = BDiag(:,5,2) - BC(:,4) * BDiag(:,5,3) 275*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,5,4) 276*59599516SKenneth E. Jansen BDiag(:,2,5) = BDiag(:,2,5) - BC(:,4) * BDiag(:,3,5) 277*59599516SKenneth E. Jansen & - BC(:,6) * BDiag(:,4,5) 278*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 279*59599516SKenneth E. Jansen BDiag(:,3,2) = zero 280*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 281*59599516SKenneth E. Jansen BDiag(:,3,5) = zero 282*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 283*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 284*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 285*59599516SKenneth E. Jansen BDiag(:,4,5) = zero 286*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 287*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 288*59599516SKenneth E. Jansen BDiag(:,5,3) = zero 289*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 290*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 291*59599516SKenneth E. Jansen BDiag(:,5,4) = zero 292*59599516SKenneth E. Jansen BDiag(:,4,4) = one 293*59599516SKenneth E. Jansen BDiag(:,3,3) = one 294*59599516SKenneth E. Jansen endwhere 295*59599516SKenneth E. Jansenc 296*59599516SKenneth E. Jansenc.... x1-velocity and x2-velocity and x3-velocity 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen where (ibits(iBC,3,3) .eq. 7) 299*59599516SKenneth E. Jansen BDiag(:,2,1) = zero 300*59599516SKenneth E. Jansen BDiag(:,2,3) = zero 301*59599516SKenneth E. Jansen BDiag(:,2,4) = zero 302*59599516SKenneth E. Jansen BDiag(:,2,5) = zero 303*59599516SKenneth E. Jansen BDiag(:,3,1) = zero 304*59599516SKenneth E. Jansen BDiag(:,3,2) = zero 305*59599516SKenneth E. Jansen BDiag(:,3,4) = zero 306*59599516SKenneth E. Jansen BDiag(:,3,5) = zero 307*59599516SKenneth E. Jansen BDiag(:,4,1) = zero 308*59599516SKenneth E. Jansen BDiag(:,4,2) = zero 309*59599516SKenneth E. Jansen BDiag(:,4,3) = zero 310*59599516SKenneth E. Jansen BDiag(:,4,5) = zero 311*59599516SKenneth E. Jansen BDiag(:,1,2) = zero 312*59599516SKenneth E. Jansen BDiag(:,5,2) = zero 313*59599516SKenneth E. Jansen BDiag(:,1,3) = zero 314*59599516SKenneth E. Jansen BDiag(:,5,3) = zero 315*59599516SKenneth E. Jansen BDiag(:,1,4) = zero 316*59599516SKenneth E. Jansen BDiag(:,5,4) = zero 317*59599516SKenneth E. Jansen BDiag(:,2,2) = one 318*59599516SKenneth E. Jansen BDiag(:,3,3) = one 319*59599516SKenneth E. Jansen BDiag(:,4,4) = one 320*59599516SKenneth E. Jansen endwhere 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansenc.... temperature 323*59599516SKenneth E. Jansenc 324*59599516SKenneth E. Jansen where (btest(iBC,1)) 325*59599516SKenneth E. Jansen BDiag(:,5,5) = one 326*59599516SKenneth E. Jansen BDiag(:,1,5) = zero 327*59599516SKenneth E. Jansen BDiag(:,2,5) = zero 328*59599516SKenneth E. Jansen BDiag(:,3,5) = zero 329*59599516SKenneth E. Jansen BDiag(:,4,5) = zero 330*59599516SKenneth E. Jansen BDiag(:,5,1) = zero 331*59599516SKenneth E. Jansen BDiag(:,5,2) = zero 332*59599516SKenneth E. Jansen BDiag(:,5,3) = zero 333*59599516SKenneth E. Jansen BDiag(:,5,4) = zero 334*59599516SKenneth E. Jansen endwhere 335*59599516SKenneth E. Jansenc 336*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications) 337*59599516SKenneth E. Jansenc 338*59599516SKenneth E. Jansen 339*59599516SKenneth E. Jansen do j = 1,nshg 340*59599516SKenneth E. Jansen if (btest(iBC(j),10)) then 341*59599516SKenneth E. Jansen i = iper(j) 342*59599516SKenneth E. Jansen BDiag(i, :,:) = BDiag(i,:,:) + BDiag(j,:,:) 343*59599516SKenneth E. Jansen endif 344*59599516SKenneth E. Jansen enddo 345*59599516SKenneth E. Jansenc 346*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters 347*59599516SKenneth E. Jansenc 348*59599516SKenneth E. Jansen do j = 1,nshg 349*59599516SKenneth E. Jansen if (btest(iBC(j),10)) then 350*59599516SKenneth E. Jansen i=iper(j) 351*59599516SKenneth E. Jansen BDiag(j,:,:) = BDiag(i,:,:) 352*59599516SKenneth E. Jansen endif 353*59599516SKenneth E. Jansen enddo 354*59599516SKenneth E. Jansenc$$$ endif 355*59599516SKenneth E. Jansen 356*59599516SKenneth E. Jansen if(numpe.gt.1) then 357*59599516SKenneth E. Jansenc 358*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated 359*59599516SKenneth E. Jansenc 360*59599516SKenneth E. Jansen numtask = ilwork(1) 361*59599516SKenneth E. Jansen itkbeg = 1 362*59599516SKenneth E. Jansen 363*59599516SKenneth E. Jansen do itask = 1, numtask 364*59599516SKenneth E. Jansen 365*59599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 366*59599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 367*59599516SKenneth E. Jansen 368*59599516SKenneth E. Jansen if (iacc .eq. 0) then 369*59599516SKenneth E. Jansen do is = 1,numseg 370*59599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 371*59599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 372*59599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 373*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,:,:) = zero 374*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,1,1) = one 375*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,2,2) = one 376*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,3,3) = one 377*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,4,4) = one 378*59599516SKenneth E. Jansen BDiag(isgbeg:isgend,5,5) = one 379*59599516SKenneth E. Jansen enddo 380*59599516SKenneth E. Jansen endif 381*59599516SKenneth E. Jansen 382*59599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 383*59599516SKenneth E. Jansen 384*59599516SKenneth E. Jansen enddo 385*59599516SKenneth E. Jansen endif 386*59599516SKenneth E. Jansenc 387*59599516SKenneth E. Jansenc.... return 388*59599516SKenneth E. Jansenc 389*59599516SKenneth E. Jansen return 390*59599516SKenneth E. Jansen end 391*59599516SKenneth E. Jansenc 392*59599516SKenneth E. Jansenc 393*59599516SKenneth E. Jansenc 394*59599516SKenneth E. Jansen subroutine bc3BDgSclr (iBC, Diag, iper, ilwork) 395*59599516SKenneth E. Jansenc 396*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 397*59599516SKenneth E. Jansenc 398*59599516SKenneth E. Jansenc This routine satisfies the BC of the block-diagonal preconditioning 399*59599516SKenneth E. Jansenc matrix for 3D elements. 400*59599516SKenneth E. Jansenc 401*59599516SKenneth E. Jansenc input: 402*59599516SKenneth E. Jansenc iBC (numnp) : boundary condition code 403*59599516SKenneth E. Jansenc BC (numnp,ndofBC) : Dirichlet BC constraint parameters 404*59599516SKenneth E. Jansenc Diag (numnp) : preconditionning diagonal matrix before BC 405*59599516SKenneth E. Jansenc 406*59599516SKenneth E. Jansenc output: 407*59599516SKenneth E. Jansenc Diag (numnp) : preconditionning matrix after BC 408*59599516SKenneth E. Jansenc is satisfied 409*59599516SKenneth E. Jansenc 410*59599516SKenneth E. Jansenc 411*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from g3bce.f) 412*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 413*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 414*59599516SKenneth E. Jansenc 415*59599516SKenneth E. Jansen include "common.h" 416*59599516SKenneth E. Jansenc 417*59599516SKenneth E. Jansen dimension iBC(nshg), 418*59599516SKenneth E. Jansen & Diag(nshg), ilwork(nlwork), 419*59599516SKenneth E. Jansen & iper(nshg) 420*59599516SKenneth E. Jansenc 421*59599516SKenneth E. Jansenc 422*59599516SKenneth E. Jansen id = isclr+5 423*59599516SKenneth E. Jansenc 424*59599516SKenneth E. Jansenc.... scalar variable 425*59599516SKenneth E. Jansenc 426*59599516SKenneth E. Jansen where (btest(iBC,id)) 427*59599516SKenneth E. Jansen Diag(:) = one 428*59599516SKenneth E. Jansen endwhere 429*59599516SKenneth E. Jansenc 430*59599516SKenneth E. Jansenc.... local periodic boundary conditions (no communications) 431*59599516SKenneth E. Jansenc 432*59599516SKenneth E. Jansen do j = 1,nshg 433*59599516SKenneth E. Jansen if (btest(iBC(j),10)) then 434*59599516SKenneth E. Jansen i = iper(j) 435*59599516SKenneth E. Jansen Diag(i) = Diag(i) + Diag(j) 436*59599516SKenneth E. Jansen endif 437*59599516SKenneth E. Jansen enddo 438*59599516SKenneth E. Jansenc 439*59599516SKenneth E. Jansenc.... periodic slaves get the residual values of the masters 440*59599516SKenneth E. Jansenc 441*59599516SKenneth E. Jansen do i = 1,nshg 442*59599516SKenneth E. Jansen if (btest(iBC(i),10)) then 443*59599516SKenneth E. Jansen Diag(i) = Diag(iper(i)) 444*59599516SKenneth E. Jansen endif 445*59599516SKenneth E. Jansen enddo 446*59599516SKenneth E. Jansenc 447*59599516SKenneth E. Jansenc.... nodes treated on another processor are eliminated 448*59599516SKenneth E. Jansenc 449*59599516SKenneth E. Jansen if(numpe.gt.1) then 450*59599516SKenneth E. Jansen numtask = ilwork(1) 451*59599516SKenneth E. Jansen itkbeg = 1 452*59599516SKenneth E. Jansen 453*59599516SKenneth E. Jansen do itask = 1, numtask 454*59599516SKenneth E. Jansen 455*59599516SKenneth E. Jansen iacc = ilwork (itkbeg + 2) 456*59599516SKenneth E. Jansen numseg = ilwork (itkbeg + 4) 457*59599516SKenneth E. Jansen 458*59599516SKenneth E. Jansen if (iacc .eq. 0) then 459*59599516SKenneth E. Jansen do is = 1,numseg 460*59599516SKenneth E. Jansen isgbeg = ilwork (itkbeg + 3 + 2*is) 461*59599516SKenneth E. Jansen lenseg = ilwork (itkbeg + 4 + 2*is) 462*59599516SKenneth E. Jansen isgend = isgbeg + lenseg - 1 463*59599516SKenneth E. Jansen Diag(isgbeg:isgend) = one 464*59599516SKenneth E. Jansen enddo 465*59599516SKenneth E. Jansen endif 466*59599516SKenneth E. Jansen 467*59599516SKenneth E. Jansen itkbeg = itkbeg + 4 + 2*numseg 468*59599516SKenneth E. Jansen 469*59599516SKenneth E. Jansen enddo 470*59599516SKenneth E. Jansen endif 471*59599516SKenneth E. Jansenc 472*59599516SKenneth E. Jansenc.... return 473*59599516SKenneth E. Jansenc 474*59599516SKenneth E. Jansen return 475*59599516SKenneth E. Jansen end 476*59599516SKenneth E. Jansen 477*59599516SKenneth E. Jansen 478*59599516SKenneth E. Jansen 479