1*59599516SKenneth E. Jansen subroutine e3DC (g1yi, g2yi, g3yi, A0, raLS, 2*59599516SKenneth E. Jansen & rtLS, giju, DC, ri, 3*59599516SKenneth E. Jansen & rmi, stiff, A0DC) 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc This routine calculates the contribution of the Discontinuity- 8*59599516SKenneth E. Jansenc Capturing operator to RHS and preconditioner. 9*59599516SKenneth E. Jansenc 10*59599516SKenneth E. Jansenc g1yi (nflow,npro) : grad-y in direction 1 11*59599516SKenneth E. Jansenc g2yi (nflow,npro) : grad-y in direction 2 12*59599516SKenneth E. Jansenc g3yi (nflow,npro) : grad-y in direction 3 13*59599516SKenneth E. Jansenc A0 (nsymdf,npro) : A0 matrix (Symm. storage) 14*59599516SKenneth E. Jansenc raLS (npro) : square of LS residual (A0inv norm) 15*59599516SKenneth E. Jansenc rtLS (npro) : square of LS residual (Tau norm) 16*59599516SKenneth E. Jansenc giju (6,npro) : metric matrix 17*59599516SKenneth E. Jansenc DC (ngauss,npro) : discontinuity-capturing factor 18*59599516SKenneth E. Jansenc intp : integration point number 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansenc output: 21*59599516SKenneth E. Jansenc ri (nflow*(nsd+1),npro) : partial residual 22*59599516SKenneth E. Jansenc rmi (nflow*(nsd+1),npro) : partial modified residual 23*59599516SKenneth E. Jansenc stiff (nsymdf,6,npro) : diffusivity matrix 24*59599516SKenneth E. Jansenc DC (npro) : discontinuity-capturing factor 25*59599516SKenneth E. Jansenc 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2dc.f) 28*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Recoded) 29*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 30*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 31*59599516SKenneth E. Jansenc 32*59599516SKenneth E. Jansen include "common.h" 33*59599516SKenneth E. Jansenc 34*59599516SKenneth E. Jansen dimension g1yi(npro,nflow), g2yi(npro,nflow), 35*59599516SKenneth E. Jansen & g3yi(npro,nflow), A0(npro,5,5), 36*59599516SKenneth E. Jansen & raLS(npro), rtLS(npro), 37*59599516SKenneth E. Jansen & giju(npro,6), DC(npro,ngauss), 38*59599516SKenneth E. Jansen & ri(npro,nflow*(nsd+1)), rmi(npro,nflow*(nsd+1)), 39*59599516SKenneth E. Jansen & stiff(npro,3*nflow,3*nflow),dtmp(npro) 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansen 42*59599516SKenneth E. Jansen dimension ggyi(npro,nflow), gAgyi(npro,15), 43*59599516SKenneth E. Jansen & gnorm(npro), A0gyi(npro,15), 44*59599516SKenneth E. Jansen & yiA0DCyj(npro,6), A0DC(npro,4) 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansenc ... -----------------------> initialize <---------------------------- 47*59599516SKenneth E. Jansenc 48*59599516SKenneth E. Jansen A0gyi = zero 49*59599516SKenneth E. Jansen gAgyi = zero 50*59599516SKenneth E. Jansen yiA0DCyj = zero 51*59599516SKenneth E. Jansen DC = zero 52*59599516SKenneth E. Jansenc.... -----------------------> global gradient <---------------------- 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansenc.... calculate (A0 y_,j) --> A0gyi 55*59599516SKenneth E. Jansenc 56*59599516SKenneth E. Jansenc A0 Y_{,1} 57*59599516SKenneth E. Jansenc 58*59599516SKenneth E. Jansen A0gyi( :,1) = A0(:,1,1)*g1yi(:,1) 59*59599516SKenneth E. Jansen & + A0(:,1,2)*g1yi(:,2) 60*59599516SKenneth E. Jansen & + A0(:,1,3)*g1yi(:,3) 61*59599516SKenneth E. Jansen & + A0(:,1,4)*g1yi(:,4) 62*59599516SKenneth E. Jansen & + A0(:,1,5)*g1yi(:,5) 63*59599516SKenneth E. Jansen A0gyi( :,2) = A0(:,2,1)*g1yi(:,1) 64*59599516SKenneth E. Jansen & + A0(:,2,2)*g1yi(:,2) 65*59599516SKenneth E. Jansen & + A0(:,2,3)*g1yi(:,3) 66*59599516SKenneth E. Jansen & + A0(:,2,4)*g1yi(:,4) 67*59599516SKenneth E. Jansen & + A0(:,2,5)*g1yi(:,5) 68*59599516SKenneth E. Jansen A0gyi( :,3) = A0(:,3,1)*g1yi(:,1) 69*59599516SKenneth E. Jansen & + A0(:,3,2)*g1yi(:,2) 70*59599516SKenneth E. Jansen & + A0(:,3,3)*g1yi(:,3) 71*59599516SKenneth E. Jansen & + A0(:,3,4)*g1yi(:,4) 72*59599516SKenneth E. Jansen & + A0(:,3,5)*g1yi(:,5) 73*59599516SKenneth E. Jansen A0gyi( :,4) = A0(:,4,1)*g1yi(:,1) 74*59599516SKenneth E. Jansen & + A0(:,4,2)*g1yi(:,2) 75*59599516SKenneth E. Jansen & + A0(:,4,3)*g1yi(:,3) 76*59599516SKenneth E. Jansen & + A0(:,4,4)*g1yi(:,4) 77*59599516SKenneth E. Jansen & + A0(:,4,5)*g1yi(:,5) 78*59599516SKenneth E. Jansen A0gyi( :,5) = A0(:,5,1)*g1yi(:,1) 79*59599516SKenneth E. Jansen & + A0(:,5,2)*g1yi(:,2) 80*59599516SKenneth E. Jansen & + A0(:,5,3)*g1yi(:,3) 81*59599516SKenneth E. Jansen & + A0(:,5,4)*g1yi(:,4) 82*59599516SKenneth E. Jansen & + A0(:,5,5)*g1yi(:,5) 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansenc A0 Y_{,2} 85*59599516SKenneth E. Jansenc 86*59599516SKenneth E. Jansen A0gyi( :,6) = A0(:,1,1)*g2yi(:,1) 87*59599516SKenneth E. Jansen & + A0(:,1,2)*g2yi(:,2) 88*59599516SKenneth E. Jansen & + A0(:,1,3)*g2yi(:,3) 89*59599516SKenneth E. Jansen & + A0(:,1,4)*g2yi(:,4) 90*59599516SKenneth E. Jansen & + A0(:,1,5)*g2yi(:,5) 91*59599516SKenneth E. Jansen A0gyi( :,7) = A0(:,2,1)*g2yi(:,1) 92*59599516SKenneth E. Jansen & + A0(:,2,2)*g2yi(:,2) 93*59599516SKenneth E. Jansen & + A0(:,2,3)*g2yi(:,3) 94*59599516SKenneth E. Jansen & + A0(:,2,4)*g2yi(:,4) 95*59599516SKenneth E. Jansen & + A0(:,2,5)*g2yi(:,5) 96*59599516SKenneth E. Jansen A0gyi( :,8) = A0(:,3,1)*g2yi(:,1) 97*59599516SKenneth E. Jansen & + A0(:,3,2)*g2yi(:,2) 98*59599516SKenneth E. Jansen & + A0(:,3,3)*g2yi(:,3) 99*59599516SKenneth E. Jansen & + A0(:,3,4)*g2yi(:,4) 100*59599516SKenneth E. Jansen & + A0(:,3,5)*g2yi(:,5) 101*59599516SKenneth E. Jansen A0gyi( :,9) = A0(:,4,1)*g2yi(:,1) 102*59599516SKenneth E. Jansen & + A0(:,4,2)*g2yi(:,2) 103*59599516SKenneth E. Jansen & + A0(:,4,3)*g2yi(:,3) 104*59599516SKenneth E. Jansen & + A0(:,4,4)*g2yi(:,4) 105*59599516SKenneth E. Jansen & + A0(:,4,5)*g2yi(:,5) 106*59599516SKenneth E. Jansen A0gyi(:,10) = A0(:,5,1)*g2yi(:,1) 107*59599516SKenneth E. Jansen & + A0(:,5,2)*g2yi(:,2) 108*59599516SKenneth E. Jansen & + A0(:,5,3)*g2yi(:,3) 109*59599516SKenneth E. Jansen & + A0(:,5,4)*g2yi(:,4) 110*59599516SKenneth E. Jansen & + A0(:,5,5)*g2yi(:,5) 111*59599516SKenneth E. Jansenc 112*59599516SKenneth E. Jansenc A0 Y_{,3} 113*59599516SKenneth E. Jansenc 114*59599516SKenneth E. Jansen A0gyi(:,11) = A0(:,1,1)*g3yi(:,1) 115*59599516SKenneth E. Jansen & + A0(:,1,2)*g3yi(:,2) 116*59599516SKenneth E. Jansen & + A0(:,1,3)*g3yi(:,3) 117*59599516SKenneth E. Jansen & + A0(:,1,4)*g3yi(:,4) 118*59599516SKenneth E. Jansen & + A0(:,1,5)*g3yi(:,5) 119*59599516SKenneth E. Jansen A0gyi(:,12) = A0(:,2,1)*g3yi(:,1) 120*59599516SKenneth E. Jansen & + A0(:,2,2)*g3yi(:,2) 121*59599516SKenneth E. Jansen & + A0(:,2,3)*g3yi(:,3) 122*59599516SKenneth E. Jansen & + A0(:,2,4)*g3yi(:,4) 123*59599516SKenneth E. Jansen & + A0(:,2,5)*g3yi(:,5) 124*59599516SKenneth E. Jansen A0gyi(:,13) = A0(:,3,1)*g3yi(:,1) 125*59599516SKenneth E. Jansen & + A0(:,3,2)*g3yi(:,2) 126*59599516SKenneth E. Jansen & + A0(:,3,3)*g3yi(:,3) 127*59599516SKenneth E. Jansen & + A0(:,3,4)*g3yi(:,4) 128*59599516SKenneth E. Jansen & + A0(:,3,5)*g3yi(:,5) 129*59599516SKenneth E. Jansen A0gyi(:,14) = A0(:,4,1)*g3yi(:,1) 130*59599516SKenneth E. Jansen & + A0(:,4,2)*g3yi(:,2) 131*59599516SKenneth E. Jansen & + A0(:,4,3)*g3yi(:,3) 132*59599516SKenneth E. Jansen & + A0(:,4,4)*g3yi(:,4) 133*59599516SKenneth E. Jansen & + A0(:,4,5)*g3yi(:,5) 134*59599516SKenneth E. Jansen A0gyi(:,15) = A0(:,5,1)*g3yi(:,1) 135*59599516SKenneth E. Jansen & + A0(:,5,2)*g3yi(:,2) 136*59599516SKenneth E. Jansen & + A0(:,5,3)*g3yi(:,3) 137*59599516SKenneth E. Jansen & + A0(:,5,4)*g3yi(:,4) 138*59599516SKenneth E. Jansen & + A0(:,5,5)*g3yi(:,5) 139*59599516SKenneth E. Jansenc 140*59599516SKenneth E. Jansenc.... calculate (giju A0 y_,j) --> gAgyi 141*59599516SKenneth E. Jansenc 142*59599516SKenneth E. Jansen 143*59599516SKenneth E. Jansen gAgyi( :,1) = giju(:,1)*A0gyi( :,1) 144*59599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,6) 145*59599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,11) 146*59599516SKenneth E. Jansen 147*59599516SKenneth E. Jansen gAgyi( :,2) = giju(:,1)*A0gyi( :,2) 148*59599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,7) 149*59599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,12) 150*59599516SKenneth E. Jansen 151*59599516SKenneth E. Jansen gAgyi( :,3) = giju(:,1)*A0gyi( :,3) 152*59599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,8) 153*59599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,13) 154*59599516SKenneth E. Jansen 155*59599516SKenneth E. Jansen gAgyi( :,4) = giju(:,1)*A0gyi( :,4) 156*59599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,9) 157*59599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,14) 158*59599516SKenneth E. Jansen 159*59599516SKenneth E. Jansen gAgyi( :,5) = giju(:,1)*A0gyi( :,5) 160*59599516SKenneth E. Jansen & + giju(:,4)*A0gyi(:,10) 161*59599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,15) 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansen gAgyi( :,6) = giju(:,4)*A0gyi( :,1) 164*59599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,6) 165*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,11) 166*59599516SKenneth E. Jansen 167*59599516SKenneth E. Jansen gAgyi( :,7) = giju(:,4)*A0gyi( :,2) 168*59599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,7) 169*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,12) 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen gAgyi( :,8) = giju(:,4)*A0gyi( :,3) 172*59599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,8) 173*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,13) 174*59599516SKenneth E. Jansen 175*59599516SKenneth E. Jansen gAgyi( :,9) = giju(:,4)*A0gyi( :,4) 176*59599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,9) 177*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,14) 178*59599516SKenneth E. Jansen 179*59599516SKenneth E. Jansen gAgyi(:,10) = giju(:,4)*A0gyi( :,5) 180*59599516SKenneth E. Jansen & + giju(:,2)*A0gyi(:,10) 181*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,15) 182*59599516SKenneth E. Jansen 183*59599516SKenneth E. Jansen gAgyi(:,11) = giju(:,5)*A0gyi( :,1) 184*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,6) 185*59599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,11) 186*59599516SKenneth E. Jansen 187*59599516SKenneth E. Jansen gAgyi(:,12) = giju(:,5)*A0gyi( :,2) 188*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,7) 189*59599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,12) 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansen gAgyi(:,13) = giju(:,5)*A0gyi( :,3) 192*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,8) 193*59599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,13) 194*59599516SKenneth E. Jansen 195*59599516SKenneth E. Jansen gAgyi(:,14) = giju(:,5)*A0gyi( :,4) 196*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,9) 197*59599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,14) 198*59599516SKenneth E. Jansen 199*59599516SKenneth E. Jansen gAgyi(:,15) = giju(:,5)*A0gyi( :,5) 200*59599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,10) 201*59599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,15) 202*59599516SKenneth E. Jansenc 203*59599516SKenneth E. Jansenc... the denominator term of the DC factor 204*59599516SKenneth E. Jansenc... evaluation of the term Y,i.A0DC Y,j 205*59599516SKenneth E. Jansenc 206*59599516SKenneth E. Jansen yiA0DCyj(:,1) = A0DC(:,1)*g1yi(:,1)**2 207*59599516SKenneth E. Jansen & + two*g1yi(:,1)*A0DC(:,2)*g1yi(:,5) 208*59599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,2)**2 209*59599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,3)**2 210*59599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,4)**2 211*59599516SKenneth E. Jansen & + A0DC(:,4)*g1yi(:,5)**2 212*59599516SKenneth E. Jansen 213*59599516SKenneth E. Jansen yiA0DCyj(:,2) = A0DC(:,1)*g2yi(:,1)**2 214*59599516SKenneth E. Jansen & + two*g2yi(:,1)*A0DC(:,2)*g2yi(:,5) 215*59599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,2)**2 216*59599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,3)**2 217*59599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,4)**2 218*59599516SKenneth E. Jansen & + A0DC(:,4)*g2yi(:,5)**2 219*59599516SKenneth E. Jansen 220*59599516SKenneth E. Jansen yiA0DCyj(:,3) = A0DC(:,1)*g3yi(:,1)**2 221*59599516SKenneth E. Jansen & + two*g3yi(:,1)*A0DC(:,2)*g3yi(:,5) 222*59599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,2)**2 223*59599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,3)**2 224*59599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,4)**2 225*59599516SKenneth E. Jansen & + A0DC(:,4)*g3yi(:,5)**2 226*59599516SKenneth E. Jansen 227*59599516SKenneth E. Jansen yiA0DCyj(:,4) = g1yi(:,1)*A0DC(:,1)*g2yi(:,1) 228*59599516SKenneth E. Jansen & + g1yi(:,1)*A0DC(:,2)*g2yi(:,5) 229*59599516SKenneth E. Jansen & + g1yi(:,2)*A0DC(:,3)*g2yi(:,2) 230*59599516SKenneth E. Jansen & + g1yi(:,3)*A0DC(:,3)*g2yi(:,3) 231*59599516SKenneth E. Jansen & + g1yi(:,4)*A0DC(:,3)*g2yi(:,4) 232*59599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,2)*g2yi(:,1) 233*59599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,4)*g2yi(:,5) 234*59599516SKenneth E. Jansen 235*59599516SKenneth E. Jansen yiA0DCyj(:,5) = g1yi(:,1)*A0DC(:,1)*g3yi(:,1) 236*59599516SKenneth E. Jansen & + g1yi(:,1)*A0DC(:,2)*g3yi(:,5) 237*59599516SKenneth E. Jansen & + g1yi(:,2)*A0DC(:,3)*g3yi(:,2) 238*59599516SKenneth E. Jansen & + g1yi(:,3)*A0DC(:,3)*g3yi(:,3) 239*59599516SKenneth E. Jansen & + g1yi(:,4)*A0DC(:,3)*g3yi(:,4) 240*59599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,2)*g3yi(:,1) 241*59599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,4)*g3yi(:,5) 242*59599516SKenneth E. Jansen 243*59599516SKenneth E. Jansen yiA0DCyj(:,6) = g2yi(:,1)*A0DC(:,1)*g3yi(:,1) 244*59599516SKenneth E. Jansen & + g2yi(:,1)*A0DC(:,2)*g3yi(:,5) 245*59599516SKenneth E. Jansen & + g2yi(:,2)*A0DC(:,3)*g3yi(:,2) 246*59599516SKenneth E. Jansen & + g2yi(:,3)*A0DC(:,3)*g3yi(:,3) 247*59599516SKenneth E. Jansen & + g2yi(:,4)*A0DC(:,3)*g3yi(:,4) 248*59599516SKenneth E. Jansen & + g2yi(:,5)*A0DC(:,2)*g3yi(:,1) 249*59599516SKenneth E. Jansen & + g2yi(:,5)*A0DC(:,4)*g3yi(:,5) 250*59599516SKenneth E. Jansenc 251*59599516SKenneth E. Jansenc.... -------------------------> DC factor <-------------------------- 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansenc if ((ires .ne. 2) .or. (Jactyp .eq. 1)) then 254*59599516SKenneth E. Jansenc 255*59599516SKenneth E. Jansenc.... calculate 2-norm of Grad-local-V with respect to A0 256*59599516SKenneth E. Jansenc 257*59599516SKenneth E. Jansenc.... DC-mallet 258*59599516SKenneth E. Jansenc 259*59599516SKenneth E. Jansen if (iDC .eq. 1) then 260*59599516SKenneth E. Jansenc 261*59599516SKenneth E. Jansen fact = one 262*59599516SKenneth E. Jansen if (ipord .eq. 2) fact = 0.9 263*59599516SKenneth E. Jansen if (ipord .eq. 3) fact = 0.75 264*59599516SKenneth E. Jansen 265*59599516SKenneth E. Jansenc 266*59599516SKenneth E. Jansen gnorm = one / ( 267*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 268*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 269*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 270*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 271*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 272*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 273*59599516SKenneth E. Jansen & + epsM ) 274*59599516SKenneth E. Jansenc 275*59599516SKenneth E. Jansenc DC(:,intp)=dim((fact*sqrt(raLS*gnorm)),(rtLS*gnorm)) 276*59599516SKenneth E. Jansen DC(:,intp)=max(zero,(fact*sqrt(raLS*gnorm))-(rtLS*gnorm)) 277*59599516SKenneth E. Jansenc 278*59599516SKenneth E. Jansenc.... flop count 279*59599516SKenneth E. Jansenc 280*59599516SKenneth E. Jansen flops = flops + 46*npro 281*59599516SKenneth E. Jansenc 282*59599516SKenneth E. Jansen endif 283*59599516SKenneth E. Jansenc 284*59599516SKenneth E. Jansenc.... DC-quadratic 285*59599516SKenneth E. Jansenc 286*59599516SKenneth E. Jansen if (iDC .eq. 2) then 287*59599516SKenneth E. Jansenc 288*59599516SKenneth E. Jansen gnorm = one / ( 289*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 290*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 291*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 292*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 293*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 294*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 295*59599516SKenneth E. Jansen & + epsM ) 296*59599516SKenneth E. Jansen 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen DC(:,intp) = two * rtLS * gnorm 299*59599516SKenneth E. Jansenc 300*59599516SKenneth E. Jansenc.... flop count 301*59599516SKenneth E. Jansenc 302*59599516SKenneth E. Jansen flops = flops + 36*npro 303*59599516SKenneth E. Jansenc 304*59599516SKenneth E. Jansen endif 305*59599516SKenneth E. Jansenc 306*59599516SKenneth E. Jansenc.... DC-min 307*59599516SKenneth E. Jansenc 308*59599516SKenneth E. Jansen if (iDC .eq. 3) then 309*59599516SKenneth E. Jansenc 310*59599516SKenneth E. Jansen fact = one 311*59599516SKenneth E. Jansen if (ipord .eq. 2) fact = pt5 312*59599516SKenneth E. Jansenc 313*59599516SKenneth E. Jansen gnorm = one / ( 314*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 315*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 316*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 317*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 318*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 319*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 320*59599516SKenneth E. Jansen & + epsM ) 321*59599516SKenneth E. Jansen 322*59599516SKenneth E. Jansenc 323*59599516SKenneth E. Jansenc DC(:,intp) = min( dim(fact * sqrt(raLS * gnorm), 324*59599516SKenneth E. Jansen DC(:,intp) = min( max(zero,fact * sqrt(raLS * gnorm)- 325*59599516SKenneth E. Jansen & rtLS * gnorm), two * rtLS * gnorm ) 326*59599516SKenneth E. Jansenc 327*59599516SKenneth E. Jansenc.... flop count 328*59599516SKenneth E. Jansenc 329*59599516SKenneth E. Jansen flops = flops + 48*npro 330*59599516SKenneth E. Jansenc 331*59599516SKenneth E. Jansen endif 332*59599516SKenneth E. Jansenc 333*59599516SKenneth E. Jansenc endif 334*59599516SKenneth E. Jansenc 335*59599516SKenneth E. Jansenc.... ----------------------------> RHS <---------------------------- 336*59599516SKenneth E. Jansenc 337*59599516SKenneth E. Jansenc.... add the contribution of DC to ri and/or rmi 338*59599516SKenneth E. Jansenc 339*59599516SKenneth E. Jansenc.... ires = 1 or 3 340*59599516SKenneth E. Jansenc 341*59599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 342*59599516SKenneth E. Jansenc 343*59599516SKenneth E. Jansen ri ( :,1) = ri ( :,1) + DC(:,intp) * gAgyi( :,1) 344*59599516SKenneth E. Jansen rmi( :,1) = rmi( :,1) + DC(:,intp) * gAgyi( :,1) 345*59599516SKenneth E. Jansen ri ( :,2) = ri ( :,2) + DC(:,intp) * gAgyi( :,2) 346*59599516SKenneth E. Jansen rmi( :,2) = rmi( :,2) + DC(:,intp) * gAgyi( :,2) 347*59599516SKenneth E. Jansen ri ( :,3) = ri ( :,3) + DC(:,intp) * gAgyi( :,3) 348*59599516SKenneth E. Jansen rmi( :,3) = rmi( :,3) + DC(:,intp) * gAgyi( :,3) 349*59599516SKenneth E. Jansen ri ( :,4) = ri ( :,4) + DC(:,intp) * gAgyi( :,4) 350*59599516SKenneth E. Jansen rmi( :,4) = rmi( :,4) + DC(:,intp) * gAgyi( :,4) 351*59599516SKenneth E. Jansen ri ( :,5) = ri ( :,5) + DC(:,intp) * gAgyi( :,5) 352*59599516SKenneth E. Jansen rmi( :,5) = rmi( :,5) + DC(:,intp) * gAgyi( :,5) 353*59599516SKenneth E. Jansenc 354*59599516SKenneth E. Jansen ri ( :,6) = ri ( :,6) + DC(:,intp) * gAgyi( :,6) 355*59599516SKenneth E. Jansen rmi( :,6) = rmi( :,6) + DC(:,intp) * gAgyi( :,6) 356*59599516SKenneth E. Jansen ri ( :,7) = ri ( :,7) + DC(:,intp) * gAgyi( :,7) 357*59599516SKenneth E. Jansen rmi( :,7) = rmi( :,7) + DC(:,intp) * gAgyi( :,7) 358*59599516SKenneth E. Jansen ri ( :,8) = ri ( :,8) + DC(:,intp) * gAgyi( :,8) 359*59599516SKenneth E. Jansen rmi( :,8) = rmi( :,8) + DC(:,intp) * gAgyi( :,8) 360*59599516SKenneth E. Jansen ri ( :,9) = ri ( :,9) + DC(:,intp) * gAgyi( :,9) 361*59599516SKenneth E. Jansen rmi( :,9) = rmi( :,9) + DC(:,intp) * gAgyi( :,9) 362*59599516SKenneth E. Jansen ri (:,10) = ri (:,10) + DC(:,intp) * gAgyi(:,10) 363*59599516SKenneth E. Jansen rmi(:,10) = rmi(:,10) + DC(:,intp) * gAgyi(:,10) 364*59599516SKenneth E. Jansenc 365*59599516SKenneth E. Jansen ri (:,11) = ri (:,11) + DC(:,intp) * gAgyi(:,11) 366*59599516SKenneth E. Jansen rmi(:,11) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 367*59599516SKenneth E. Jansen ri (:,12) = ri (:,12) + DC(:,intp) * gAgyi(:,12) 368*59599516SKenneth E. Jansen rmi(:,12) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 369*59599516SKenneth E. Jansen ri (:,13) = ri (:,13) + DC(:,intp) * gAgyi(:,13) 370*59599516SKenneth E. Jansen rmi(:,13) = rmi(:,13) + DC(:,intp) * gAgyi(:,13) 371*59599516SKenneth E. Jansen ri (:,14) = ri (:,14) + DC(:,intp) * gAgyi(:,14) 372*59599516SKenneth E. Jansen rmi(:,14) = rmi(:,14) + DC(:,intp) * gAgyi(:,14) 373*59599516SKenneth E. Jansen ri (:,15) = ri (:,15) + DC(:,intp) * gAgyi(:,15) 374*59599516SKenneth E. Jansen rmi(:,15) = rmi(:,15) + DC(:,intp) * gAgyi(:,15) 375*59599516SKenneth E. Jansenc 376*59599516SKenneth E. Jansen flops = flops + 45*npro 377*59599516SKenneth E. Jansenc 378*59599516SKenneth E. Jansen endif 379*59599516SKenneth E. Jansenc 380*59599516SKenneth E. Jansenc.... ires = 2 381*59599516SKenneth E. Jansenc 382*59599516SKenneth E. Jansen if (ires .eq. 2) then 383*59599516SKenneth E. Jansenc 384*59599516SKenneth E. Jansen rmi( :,1) = rmi( :,1) + DC(:,intp) * gAgyi( :,1) 385*59599516SKenneth E. Jansen rmi( :,2) = rmi( :,2) + DC(:,intp) * gAgyi( :,2) 386*59599516SKenneth E. Jansen rmi( :,3) = rmi( :,3) + DC(:,intp) * gAgyi( :,3) 387*59599516SKenneth E. Jansen rmi( :,4) = rmi( :,4) + DC(:,intp) * gAgyi( :,4) 388*59599516SKenneth E. Jansen rmi( :,5) = rmi( :,5) + DC(:,intp) * gAgyi( :,5) 389*59599516SKenneth E. Jansenc 390*59599516SKenneth E. Jansen rmi( :,6) = rmi( :,6) + DC(:,intp) * gAgyi( :,6) 391*59599516SKenneth E. Jansen rmi( :,7) = rmi( :,7) + DC(:,intp) * gAgyi( :,7) 392*59599516SKenneth E. Jansen rmi( :,8) = rmi( :,8) + DC(:,intp) * gAgyi( :,8) 393*59599516SKenneth E. Jansen rmi( :,9) = rmi( :,9) + DC(:,intp) * gAgyi( :,9) 394*59599516SKenneth E. Jansen rmi(:,10) = rmi(:,10) + DC(:,intp) * gAgyi(:,10) 395*59599516SKenneth E. Jansenc 396*59599516SKenneth E. Jansen rmi(:,11) = rmi(:,11) + DC(:,intp) * gAgyi(:,11) 397*59599516SKenneth E. Jansen rmi(:,12) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 398*59599516SKenneth E. Jansen rmi(:,13) = rmi(:,13) + DC(:,intp) * gAgyi(:,13) 399*59599516SKenneth E. Jansen rmi(:,14) = rmi(:,14) + DC(:,intp) * gAgyi(:,14) 400*59599516SKenneth E. Jansen rmi(:,15) = rmi(:,15) + DC(:,intp) * gAgyi(:,15) 401*59599516SKenneth E. Jansenc 402*59599516SKenneth E. Jansen flops = flops + 30*npro 403*59599516SKenneth E. Jansenc 404*59599516SKenneth E. Jansen endif 405*59599516SKenneth E. Jansenc 406*59599516SKenneth E. Jansenc.... -------------------------> Stiffness <-------------------------- 407*59599516SKenneth E. Jansenc 408*59599516SKenneth E. Jansenc.... add the contribution of DC to stiff 409*59599516SKenneth E. Jansenc 410*59599516SKenneth E. Jansen if (iprec .eq. 1) then ! leave out of LHS, when called from itrres 411*59599516SKenneth E. Jansen nflow2=two*nflow 412*59599516SKenneth E. Jansen do j = 1, nflow 413*59599516SKenneth E. Jansen do i = 1, nflow 414*59599516SKenneth E. Jansen dtmp(:)=A0(:,i,j)*DC(:,intp) 415*59599516SKenneth E. Jansenc 416*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,1] 417*59599516SKenneth E. Jansenc 418*59599516SKenneth E. Jansen stiff(:,i,j) = stiff(:,i,j) 419*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,1) 420*59599516SKenneth E. Jansenc 421*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,2] 422*59599516SKenneth E. Jansenc 423*59599516SKenneth E. Jansen 424*59599516SKenneth E. Jansen stiff(:,i,j+nflow) = stiff(:,i,j+nflow) 425*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 426*59599516SKenneth E. Jansenc 427*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,3] 428*59599516SKenneth E. Jansenc 429*59599516SKenneth E. Jansen 430*59599516SKenneth E. Jansen stiff(:,i,j+nflow2) = stiff(:,i,j+nflow2) 431*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 432*59599516SKenneth E. Jansen 433*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [2,1] (similarly below) 434*59599516SKenneth E. Jansenc 435*59599516SKenneth E. Jansen 436*59599516SKenneth E. Jansen stiff(:,i+nflow,j) = stiff(:,i+nflow,j) 437*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 438*59599516SKenneth E. Jansen 439*59599516SKenneth E. Jansen stiff(:,i+nflow,j+nflow) = stiff(:,i+nflow,j+nflow) 440*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,2) 441*59599516SKenneth E. Jansen 442*59599516SKenneth E. Jansen stiff(:,i+nflow,j+nflow2) = stiff(:,i+nflow,j+nflow2) 443*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 444*59599516SKenneth E. Jansen 445*59599516SKenneth E. Jansen stiff(:,i+nflow2,j) = stiff(:,i+nflow2,j) 446*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 447*59599516SKenneth E. Jansen 448*59599516SKenneth E. Jansen stiff(:,i+nflow2,j+nflow) = stiff(:,i+nflow2,j+nflow) 449*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 450*59599516SKenneth E. Jansen 451*59599516SKenneth E. Jansen stiff(:,i+nflow2,j+nflow2) = stiff(:,i+nflow2,j+nflow2) 452*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,3) 453*59599516SKenneth E. Jansen enddo 454*59599516SKenneth E. Jansen enddo 455*59599516SKenneth E. Jansenc 456*59599516SKenneth E. Jansenc.... flop count 457*59599516SKenneth E. Jansenc 458*59599516SKenneth E. Jansen flops = flops + 210*npro 459*59599516SKenneth E. Jansenc 460*59599516SKenneth E. Jansenc.... end of stiffness 461*59599516SKenneth E. Jansenc 462*59599516SKenneth E. Jansen endif 463*59599516SKenneth E. Jansenc 464*59599516SKenneth E. Jansenc.... return 465*59599516SKenneth E. Jansenc 466*59599516SKenneth E. Jansen return 467*59599516SKenneth E. Jansen end 468*59599516SKenneth E. Jansenc 469*59599516SKenneth E. Jansen subroutine e3dcSclr ( g1yti, g2yti, g3yti, 470*59599516SKenneth E. Jansen & A0t, raLSt, rTLSt, 471*59599516SKenneth E. Jansen & DCt, giju, 472*59599516SKenneth E. Jansen & rti, rmti, stifft) 473*59599516SKenneth E. Jansenc 474*59599516SKenneth E. Jansenc 475*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 476*59599516SKenneth E. Jansenc 477*59599516SKenneth E. Jansenc This routine calculates the contribution of the Discontinuity- 478*59599516SKenneth E. Jansenc Capturing operator to RHS and preconditioner for the scalar solve. 479*59599516SKenneth E. Jansenc 480*59599516SKenneth E. Jansenc g1yti (nflow,npro) : grad-y in direction 1 481*59599516SKenneth E. Jansenc g2yti (nflow,npro) : grad-y in direction 2 482*59599516SKenneth E. Jansenc g3yti (nflow,npro) : grad-y in direction 3 483*59599516SKenneth E. Jansenc A0 (nsymdf,npro) : A0 matrix (Symm. storage) 484*59599516SKenneth E. Jansenc raLS (npro) : square of LS residual (A0inv norm) 485*59599516SKenneth E. Jansenc rtLS (npro) : square of LS residual (Tau norm) 486*59599516SKenneth E. Jansenc giju (6,npro) : metric matrix 487*59599516SKenneth E. Jansenc DC (ngauss,npro) : discontinuity-capturing factor 488*59599516SKenneth E. Jansenc intp : integration point number 489*59599516SKenneth E. Jansenc 490*59599516SKenneth E. Jansenc output: 491*59599516SKenneth E. Jansenc ri (nflow*(nsd+1),npro) : partial residual 492*59599516SKenneth E. Jansenc rmi (nflow*(nsd+1),npro) : partial modified residual 493*59599516SKenneth E. Jansenc stiff (nsymdf,6,npro) : diffusivity matrix 494*59599516SKenneth E. Jansenc DC (npro) : discontinuity-capturing factor 495*59599516SKenneth E. Jansenc 496*59599516SKenneth E. Jansenc 497*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2dc.f) 498*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Recoded) 499*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 500*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 501*59599516SKenneth E. Jansenc 502*59599516SKenneth E. Jansen include "common.h" 503*59599516SKenneth E. Jansenc 504*59599516SKenneth E. Jansen dimension g1yti(npro), g2yti(npro), 505*59599516SKenneth E. Jansen & g3yti(npro), A0t(npro), 506*59599516SKenneth E. Jansen & raLSt(npro), rtLSt(npro), 507*59599516SKenneth E. Jansen & giju(npro,6), DCt(npro,ngauss), 508*59599516SKenneth E. Jansen & rti(npro,nsd+1), rmti(npro,nsd+1), 509*59599516SKenneth E. Jansen & stifft(npro,nsd,nsd), dtmp(npro) 510*59599516SKenneth E. Jansenc 511*59599516SKenneth E. Jansen 512*59599516SKenneth E. Jansen dimension ggyit(npro,nflow), gAgyit(npro,3), 513*59599516SKenneth E. Jansen & gnormt(npro), A0gyit(npro,3), 514*59599516SKenneth E. Jansen & yiA0DCyjt(npro,6), A0DCt(npro) 515*59599516SKenneth E. Jansenc 516*59599516SKenneth E. Jansenc ... -----------------------> initialize <---------------------------- 517*59599516SKenneth E. Jansenc 518*59599516SKenneth E. Jansen A0gyit = zero 519*59599516SKenneth E. Jansen gAgyit = zero 520*59599516SKenneth E. Jansen yiA0DCyjt = zero 521*59599516SKenneth E. Jansen DCt = zero 522*59599516SKenneth E. Jansen A0DCt = A0t 523*59599516SKenneth E. Jansenc.... -----------------------> global gradient <---------------------- 524*59599516SKenneth E. Jansenc 525*59599516SKenneth E. Jansenc.... calculate (A0 y_,j) --> A0gyit 526*59599516SKenneth E. Jansenc 527*59599516SKenneth E. Jansenc A0 Y_{,1} 528*59599516SKenneth E. Jansenc 529*59599516SKenneth E. Jansen A0gyit( :,1) = A0t(:)*g1yti(:) 530*59599516SKenneth E. Jansenc A0 Y_{,2} 531*59599516SKenneth E. Jansen A0gyit( :,2) = A0t(:)*g2yti(:) 532*59599516SKenneth E. Jansenc A0 Y_{,3} 533*59599516SKenneth E. Jansen A0gyit( :,3) = A0t(:)*g3yti(:) 534*59599516SKenneth E. Jansenc 535*59599516SKenneth E. Jansenc.... calculate (giju A0 y_,j) --> gAgyit 536*59599516SKenneth E. Jansenc 537*59599516SKenneth E. Jansen 538*59599516SKenneth E. Jansen gAgyit( :,1) = giju(:,1)*A0gyit( :,1) 539*59599516SKenneth E. Jansen & + giju(:,4)*A0gyit( :,2) 540*59599516SKenneth E. Jansen & + giju(:,5)*A0gyit( :,3) 541*59599516SKenneth E. Jansen 542*59599516SKenneth E. Jansen gAgyit( :,2) = giju(:,4)*A0gyit( :,1) 543*59599516SKenneth E. Jansen & + giju(:,2)*A0gyit( :,2) 544*59599516SKenneth E. Jansen & + giju(:,6)*A0gyit( :,3) 545*59599516SKenneth E. Jansen 546*59599516SKenneth E. Jansen gAgyit( :,3) = giju(:,5)*A0gyit( :,1) 547*59599516SKenneth E. Jansen & + giju(:,6)*A0gyit( :,2) 548*59599516SKenneth E. Jansen & + giju(:,3)*A0gyit( :,3) 549*59599516SKenneth E. Jansenc 550*59599516SKenneth E. Jansenc... the denominator term of the DC factor 551*59599516SKenneth E. Jansenc... evaluation of the term Y,i.A0DC Y,j 552*59599516SKenneth E. Jansenc 553*59599516SKenneth E. Jansen yiA0DCyjt(:,1) = A0DCt(:)*g1yti(:)**2 554*59599516SKenneth E. Jansenc 555*59599516SKenneth E. Jansen yiA0DCyjt(:,2) = A0DCt(:)*g2yti(:)**2 556*59599516SKenneth E. Jansenc 557*59599516SKenneth E. Jansen yiA0DCyjt(:,3) = A0DCt(:)*g3yti(:)**2 558*59599516SKenneth E. Jansenc 559*59599516SKenneth E. Jansen yiA0DCyjt(:,4) = A0DCt(:)*g1yti(:)*g2yti(:) 560*59599516SKenneth E. Jansenc 561*59599516SKenneth E. Jansen yiA0DCyjt(:,5) = A0DCt(:)*g1yti(:)*g3yti(:) 562*59599516SKenneth E. Jansenc 563*59599516SKenneth E. Jansen yiA0DCyjt(:,6) = A0DCt(:)*g2yti(:)*g3yti(:) 564*59599516SKenneth E. Jansenc 565*59599516SKenneth E. Jansenc 566*59599516SKenneth E. Jansenc.... -------------------------> DC factor <-------------------------- 567*59599516SKenneth E. Jansenc 568*59599516SKenneth E. Jansenc if ((ires .ne. 2) .or. (Jactyp .eq. 1)) then 569*59599516SKenneth E. Jansenc 570*59599516SKenneth E. Jansenc.... calculate 2-norm of Grad-local-V with respect to A0 571*59599516SKenneth E. Jansenc 572*59599516SKenneth E. Jansenc.... DC-mallet 573*59599516SKenneth E. Jansenc 574*59599516SKenneth E. Jansen if (iDCsclr(1) .eq. 1) then 575*59599516SKenneth E. Jansenc 576*59599516SKenneth E. Jansen fact = one 577*59599516SKenneth E. Jansen if (ipord .eq. 2) fact = 0.9 578*59599516SKenneth E. Jansen if (ipord .eq. 3) fact = 0.75 579*59599516SKenneth E. Jansen 580*59599516SKenneth E. Jansenc 581*59599516SKenneth E. Jansen gnormt = one / ( 582*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 583*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 584*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 585*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 586*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 587*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 588*59599516SKenneth E. Jansen & + epsM ) 589*59599516SKenneth E. Jansenc 590*59599516SKenneth E. Jansenc DCt(:,intp)=dim((fact*sqrt(raLSt*gnormt)),(rtLSt*gnormt)) 591*59599516SKenneth E. Jansen DCt(:,intp)=max(zero,(fact*sqrt(raLSt*gnormt))-(rtLSt*gnormt)) 592*59599516SKenneth E. Jansenc 593*59599516SKenneth E. Jansenc.... flop count 594*59599516SKenneth E. Jansenc 595*59599516SKenneth E. Jansen flops = flops + 46*npro 596*59599516SKenneth E. Jansenc 597*59599516SKenneth E. Jansen endif 598*59599516SKenneth E. Jansenc 599*59599516SKenneth E. Jansenc.... DC-quadratic 600*59599516SKenneth E. Jansenc 601*59599516SKenneth E. Jansen if (iDCSclr(1) .eq. 2) then 602*59599516SKenneth E. Jansenc 603*59599516SKenneth E. Jansen gnormt = one / ( 604*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 605*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 606*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 607*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 608*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 609*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 610*59599516SKenneth E. Jansen & + epsM ) 611*59599516SKenneth E. Jansen 612*59599516SKenneth E. Jansenc 613*59599516SKenneth E. Jansen DCt(:,intp) = two * rtLSt * gnormt 614*59599516SKenneth E. Jansenc 615*59599516SKenneth E. Jansenc.... flop count 616*59599516SKenneth E. Jansenc 617*59599516SKenneth E. Jansen flops = flops + 36*npro 618*59599516SKenneth E. Jansenc 619*59599516SKenneth E. Jansen endif 620*59599516SKenneth E. Jansenc 621*59599516SKenneth E. Jansenc.... DC-min 622*59599516SKenneth E. Jansenc 623*59599516SKenneth E. Jansen if (iDCSclr(1) .eq. 3) then 624*59599516SKenneth E. Jansenc 625*59599516SKenneth E. Jansen fact = one 626*59599516SKenneth E. Jansen if (ipord .eq. 2) fact = pt5 627*59599516SKenneth E. Jansenc 628*59599516SKenneth E. Jansen gnormt = one / ( 629*59599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 630*59599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 631*59599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 632*59599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 633*59599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 634*59599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 635*59599516SKenneth E. Jansen & + epsM ) 636*59599516SKenneth E. Jansen 637*59599516SKenneth E. Jansenc 638*59599516SKenneth E. Jansenc DCt(:,intp) = min( dim(fact * sqrt(raLSt * gnormt), 639*59599516SKenneth E. Jansen DCt(:,intp) = min( max(zero,fact * sqrt(raLSt * gnormt)- 640*59599516SKenneth E. Jansen & rtLSt * gnormt), two * rtLSt * gnormt ) 641*59599516SKenneth E. Jansenc 642*59599516SKenneth E. Jansenc.... flop count 643*59599516SKenneth E. Jansenc 644*59599516SKenneth E. Jansen flops = flops + 48*npro 645*59599516SKenneth E. Jansenc 646*59599516SKenneth E. Jansen endif 647*59599516SKenneth E. Jansenc 648*59599516SKenneth E. Jansenc endif 649*59599516SKenneth E. Jansenc DCt=DCt*two 650*59599516SKenneth E. Jansenc 651*59599516SKenneth E. Jansenc.... ----------------------------> RHS <---------------------------- 652*59599516SKenneth E. Jansenc 653*59599516SKenneth E. Jansenc.... add the contribution of DC to ri and/or rmi 654*59599516SKenneth E. Jansenc 655*59599516SKenneth E. Jansenc.... ires = 1 or 3 656*59599516SKenneth E. Jansenc 657*59599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 658*59599516SKenneth E. Jansenc 659*59599516SKenneth E. Jansen rti ( :,1) = rti ( :,1) + DCt(:,intp) * gAgyit( :,1) 660*59599516SKenneth E. Jansen rmti( :,1) = rmti( :,1) + DCt(:,intp) * gAgyit( :,1) 661*59599516SKenneth E. Jansen rti ( :,2) = rti ( :,2) + DCt(:,intp) * gAgyit( :,2) 662*59599516SKenneth E. Jansen rmti( :,2) = rmti( :,2) + DCt(:,intp) * gAgyit( :,2) 663*59599516SKenneth E. Jansen rti ( :,3) = rti ( :,3) + DCt(:,intp) * gAgyit( :,3) 664*59599516SKenneth E. Jansen rmti( :,3) = rmti( :,3) + DCt(:,intp) * gAgyit( :,3) 665*59599516SKenneth E. Jansen 666*59599516SKenneth E. Jansenc 667*59599516SKenneth E. Jansen flops = flops + 45*npro 668*59599516SKenneth E. Jansenc 669*59599516SKenneth E. Jansen endif 670*59599516SKenneth E. Jansenc 671*59599516SKenneth E. Jansenc.... ires = 2 672*59599516SKenneth E. Jansenc 673*59599516SKenneth E. Jansen if (ires .eq. 2) then 674*59599516SKenneth E. Jansenc 675*59599516SKenneth E. Jansen rmti( :,1) = rmti( :,1) + DCt(:,intp) * gAgyit( :,1) 676*59599516SKenneth E. Jansen rmti( :,2) = rmti( :,2) + DCt(:,intp) * gAgyit( :,2) 677*59599516SKenneth E. Jansen rmti( :,3) = rmti( :,3) + DCt(:,intp) * gAgyit( :,3) 678*59599516SKenneth E. Jansen 679*59599516SKenneth E. Jansenc 680*59599516SKenneth E. Jansen flops = flops + 30*npro 681*59599516SKenneth E. Jansenc 682*59599516SKenneth E. Jansen endif 683*59599516SKenneth E. Jansenc 684*59599516SKenneth E. Jansenc.... -------------------------> Stiffness <-------------------------- 685*59599516SKenneth E. Jansenc 686*59599516SKenneth E. Jansenc.... add the contribution of DC to stiff 687*59599516SKenneth E. Jansenc$$$c 688*59599516SKenneth E. Jansenc if (iprec .eq. 1) then !leave out of LHS, if called from itrres 689*59599516SKenneth E. Jansen !anyway matrix free not implemented for scalar 690*59599516SKenneth E. Jansen dtmp(:)=A0t(:)*DCt(:,intp) 691*59599516SKenneth E. Jansenc 692*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,1] 693*59599516SKenneth E. Jansenc 694*59599516SKenneth E. Jansen stifft(:,1,1) = stifft(:,1,1) 695*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,1) 696*59599516SKenneth E. Jansenc 697*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,2] 698*59599516SKenneth E. Jansenc 699*59599516SKenneth E. Jansen stifft(:,1,2) = stifft(:,1,2) 700*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 701*59599516SKenneth E. Jansenc 702*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,3] 703*59599516SKenneth E. Jansenc 704*59599516SKenneth E. Jansen stifft(:,1,3) = stifft(:,1,3) 705*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 706*59599516SKenneth E. Jansen 707*59599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [2,1] (similarly below) 708*59599516SKenneth E. Jansenc 709*59599516SKenneth E. Jansen stifft(:,2,1) = stifft(:,2,1) 710*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 711*59599516SKenneth E. Jansen 712*59599516SKenneth E. Jansen stifft(:,2,2) = stifft(:,2,2) 713*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,2) 714*59599516SKenneth E. Jansen 715*59599516SKenneth E. Jansen stifft(:,2,3) = stifft(:,2,3) 716*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 717*59599516SKenneth E. Jansen 718*59599516SKenneth E. Jansen stifft(:,3,1) = stifft(:,3,1) 719*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 720*59599516SKenneth E. Jansen 721*59599516SKenneth E. Jansen stifft(:,3,2) = stifft(:,3,2) 722*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 723*59599516SKenneth E. Jansen 724*59599516SKenneth E. Jansen stifft(:,3,3) = stifft(:,3,3) 725*59599516SKenneth E. Jansen & + dtmp(:)*giju(:,3) 726*59599516SKenneth E. Jansenc 727*59599516SKenneth E. Jansenc.... flop count 728*59599516SKenneth E. Jansenc 729*59599516SKenneth E. Jansen flops = flops + 210*npro 730*59599516SKenneth E. Jansenc 731*59599516SKenneth E. Jansenc.... end of stiffness 732*59599516SKenneth E. Jansenc 733*59599516SKenneth E. Jansenc endif 734*59599516SKenneth E. Jansenc 735*59599516SKenneth E. Jansenc.... return 736*59599516SKenneth E. Jansenc 737*59599516SKenneth E. Jansen return 738*59599516SKenneth E. Jansen end 739*59599516SKenneth E. Jansenc 740