159599516SKenneth E. Jansen subroutine e3DC (g1yi, g2yi, g3yi, A0, raLS, 259599516SKenneth E. Jansen & rtLS, giju, DC, ri, 359599516SKenneth E. Jansen & rmi, stiff, A0DC) 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc---------------------------------------------------------------------- 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc This routine calculates the contribution of the Discontinuity- 859599516SKenneth E. Jansenc Capturing operator to RHS and preconditioner. 959599516SKenneth E. Jansenc 1059599516SKenneth E. Jansenc g1yi (nflow,npro) : grad-y in direction 1 1159599516SKenneth E. Jansenc g2yi (nflow,npro) : grad-y in direction 2 1259599516SKenneth E. Jansenc g3yi (nflow,npro) : grad-y in direction 3 1359599516SKenneth E. Jansenc A0 (nsymdf,npro) : A0 matrix (Symm. storage) 1459599516SKenneth E. Jansenc raLS (npro) : square of LS residual (A0inv norm) 1559599516SKenneth E. Jansenc rtLS (npro) : square of LS residual (Tau norm) 1659599516SKenneth E. Jansenc giju (6,npro) : metric matrix 1759599516SKenneth E. Jansenc DC (ngauss,npro) : discontinuity-capturing factor 1859599516SKenneth E. Jansenc intp : integration point number 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansenc output: 2159599516SKenneth E. Jansenc ri (nflow*(nsd+1),npro) : partial residual 2259599516SKenneth E. Jansenc rmi (nflow*(nsd+1),npro) : partial modified residual 2359599516SKenneth E. Jansenc stiff (nsymdf,6,npro) : diffusivity matrix 2459599516SKenneth E. Jansenc DC (npro) : discontinuity-capturing factor 2559599516SKenneth E. Jansenc 2659599516SKenneth E. Jansenc 2759599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2dc.f) 2859599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Recoded) 2959599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 3059599516SKenneth E. Jansenc---------------------------------------------------------------------- 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansen include "common.h" 3359599516SKenneth E. Jansenc 3459599516SKenneth E. Jansen dimension g1yi(npro,nflow), g2yi(npro,nflow), 3559599516SKenneth E. Jansen & g3yi(npro,nflow), A0(npro,5,5), 3659599516SKenneth E. Jansen & raLS(npro), rtLS(npro), 3759599516SKenneth E. Jansen & giju(npro,6), DC(npro,ngauss), 3859599516SKenneth E. Jansen & ri(npro,nflow*(nsd+1)), rmi(npro,nflow*(nsd+1)), 3959599516SKenneth E. Jansen & stiff(npro,3*nflow,3*nflow),dtmp(npro) 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansen 4259599516SKenneth E. Jansen dimension ggyi(npro,nflow), gAgyi(npro,15), 4359599516SKenneth E. Jansen & gnorm(npro), A0gyi(npro,15), 4459599516SKenneth E. Jansen & yiA0DCyj(npro,6), A0DC(npro,4) 4559599516SKenneth E. Jansenc 4659599516SKenneth E. Jansenc ... -----------------------> initialize <---------------------------- 4759599516SKenneth E. Jansenc 4859599516SKenneth E. Jansen A0gyi = zero 4959599516SKenneth E. Jansen gAgyi = zero 5059599516SKenneth E. Jansen yiA0DCyj = zero 5159599516SKenneth E. Jansen DC = zero 5259599516SKenneth E. Jansenc.... -----------------------> global gradient <---------------------- 5359599516SKenneth E. Jansenc 5459599516SKenneth E. Jansenc.... calculate (A0 y_,j) --> A0gyi 5559599516SKenneth E. Jansenc 5659599516SKenneth E. Jansenc A0 Y_{,1} 5759599516SKenneth E. Jansenc 5859599516SKenneth E. Jansen A0gyi( :,1) = A0(:,1,1)*g1yi(:,1) 5959599516SKenneth E. Jansen & + A0(:,1,2)*g1yi(:,2) 6059599516SKenneth E. Jansen & + A0(:,1,3)*g1yi(:,3) 6159599516SKenneth E. Jansen & + A0(:,1,4)*g1yi(:,4) 6259599516SKenneth E. Jansen & + A0(:,1,5)*g1yi(:,5) 6359599516SKenneth E. Jansen A0gyi( :,2) = A0(:,2,1)*g1yi(:,1) 6459599516SKenneth E. Jansen & + A0(:,2,2)*g1yi(:,2) 6559599516SKenneth E. Jansen & + A0(:,2,3)*g1yi(:,3) 6659599516SKenneth E. Jansen & + A0(:,2,4)*g1yi(:,4) 6759599516SKenneth E. Jansen & + A0(:,2,5)*g1yi(:,5) 6859599516SKenneth E. Jansen A0gyi( :,3) = A0(:,3,1)*g1yi(:,1) 6959599516SKenneth E. Jansen & + A0(:,3,2)*g1yi(:,2) 7059599516SKenneth E. Jansen & + A0(:,3,3)*g1yi(:,3) 7159599516SKenneth E. Jansen & + A0(:,3,4)*g1yi(:,4) 7259599516SKenneth E. Jansen & + A0(:,3,5)*g1yi(:,5) 7359599516SKenneth E. Jansen A0gyi( :,4) = A0(:,4,1)*g1yi(:,1) 7459599516SKenneth E. Jansen & + A0(:,4,2)*g1yi(:,2) 7559599516SKenneth E. Jansen & + A0(:,4,3)*g1yi(:,3) 7659599516SKenneth E. Jansen & + A0(:,4,4)*g1yi(:,4) 7759599516SKenneth E. Jansen & + A0(:,4,5)*g1yi(:,5) 7859599516SKenneth E. Jansen A0gyi( :,5) = A0(:,5,1)*g1yi(:,1) 7959599516SKenneth E. Jansen & + A0(:,5,2)*g1yi(:,2) 8059599516SKenneth E. Jansen & + A0(:,5,3)*g1yi(:,3) 8159599516SKenneth E. Jansen & + A0(:,5,4)*g1yi(:,4) 8259599516SKenneth E. Jansen & + A0(:,5,5)*g1yi(:,5) 8359599516SKenneth E. Jansenc 8459599516SKenneth E. Jansenc A0 Y_{,2} 8559599516SKenneth E. Jansenc 8659599516SKenneth E. Jansen A0gyi( :,6) = A0(:,1,1)*g2yi(:,1) 8759599516SKenneth E. Jansen & + A0(:,1,2)*g2yi(:,2) 8859599516SKenneth E. Jansen & + A0(:,1,3)*g2yi(:,3) 8959599516SKenneth E. Jansen & + A0(:,1,4)*g2yi(:,4) 9059599516SKenneth E. Jansen & + A0(:,1,5)*g2yi(:,5) 9159599516SKenneth E. Jansen A0gyi( :,7) = A0(:,2,1)*g2yi(:,1) 9259599516SKenneth E. Jansen & + A0(:,2,2)*g2yi(:,2) 9359599516SKenneth E. Jansen & + A0(:,2,3)*g2yi(:,3) 9459599516SKenneth E. Jansen & + A0(:,2,4)*g2yi(:,4) 9559599516SKenneth E. Jansen & + A0(:,2,5)*g2yi(:,5) 9659599516SKenneth E. Jansen A0gyi( :,8) = A0(:,3,1)*g2yi(:,1) 9759599516SKenneth E. Jansen & + A0(:,3,2)*g2yi(:,2) 9859599516SKenneth E. Jansen & + A0(:,3,3)*g2yi(:,3) 9959599516SKenneth E. Jansen & + A0(:,3,4)*g2yi(:,4) 10059599516SKenneth E. Jansen & + A0(:,3,5)*g2yi(:,5) 10159599516SKenneth E. Jansen A0gyi( :,9) = A0(:,4,1)*g2yi(:,1) 10259599516SKenneth E. Jansen & + A0(:,4,2)*g2yi(:,2) 10359599516SKenneth E. Jansen & + A0(:,4,3)*g2yi(:,3) 10459599516SKenneth E. Jansen & + A0(:,4,4)*g2yi(:,4) 10559599516SKenneth E. Jansen & + A0(:,4,5)*g2yi(:,5) 10659599516SKenneth E. Jansen A0gyi(:,10) = A0(:,5,1)*g2yi(:,1) 10759599516SKenneth E. Jansen & + A0(:,5,2)*g2yi(:,2) 10859599516SKenneth E. Jansen & + A0(:,5,3)*g2yi(:,3) 10959599516SKenneth E. Jansen & + A0(:,5,4)*g2yi(:,4) 11059599516SKenneth E. Jansen & + A0(:,5,5)*g2yi(:,5) 11159599516SKenneth E. Jansenc 11259599516SKenneth E. Jansenc A0 Y_{,3} 11359599516SKenneth E. Jansenc 11459599516SKenneth E. Jansen A0gyi(:,11) = A0(:,1,1)*g3yi(:,1) 11559599516SKenneth E. Jansen & + A0(:,1,2)*g3yi(:,2) 11659599516SKenneth E. Jansen & + A0(:,1,3)*g3yi(:,3) 11759599516SKenneth E. Jansen & + A0(:,1,4)*g3yi(:,4) 11859599516SKenneth E. Jansen & + A0(:,1,5)*g3yi(:,5) 11959599516SKenneth E. Jansen A0gyi(:,12) = A0(:,2,1)*g3yi(:,1) 12059599516SKenneth E. Jansen & + A0(:,2,2)*g3yi(:,2) 12159599516SKenneth E. Jansen & + A0(:,2,3)*g3yi(:,3) 12259599516SKenneth E. Jansen & + A0(:,2,4)*g3yi(:,4) 12359599516SKenneth E. Jansen & + A0(:,2,5)*g3yi(:,5) 12459599516SKenneth E. Jansen A0gyi(:,13) = A0(:,3,1)*g3yi(:,1) 12559599516SKenneth E. Jansen & + A0(:,3,2)*g3yi(:,2) 12659599516SKenneth E. Jansen & + A0(:,3,3)*g3yi(:,3) 12759599516SKenneth E. Jansen & + A0(:,3,4)*g3yi(:,4) 12859599516SKenneth E. Jansen & + A0(:,3,5)*g3yi(:,5) 12959599516SKenneth E. Jansen A0gyi(:,14) = A0(:,4,1)*g3yi(:,1) 13059599516SKenneth E. Jansen & + A0(:,4,2)*g3yi(:,2) 13159599516SKenneth E. Jansen & + A0(:,4,3)*g3yi(:,3) 13259599516SKenneth E. Jansen & + A0(:,4,4)*g3yi(:,4) 13359599516SKenneth E. Jansen & + A0(:,4,5)*g3yi(:,5) 13459599516SKenneth E. Jansen A0gyi(:,15) = A0(:,5,1)*g3yi(:,1) 13559599516SKenneth E. Jansen & + A0(:,5,2)*g3yi(:,2) 13659599516SKenneth E. Jansen & + A0(:,5,3)*g3yi(:,3) 13759599516SKenneth E. Jansen & + A0(:,5,4)*g3yi(:,4) 13859599516SKenneth E. Jansen & + A0(:,5,5)*g3yi(:,5) 13959599516SKenneth E. Jansenc 14059599516SKenneth E. Jansenc.... calculate (giju A0 y_,j) --> gAgyi 14159599516SKenneth E. Jansenc 14259599516SKenneth E. Jansen 14359599516SKenneth E. Jansen gAgyi( :,1) = giju(:,1)*A0gyi( :,1) 14459599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,6) 14559599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,11) 14659599516SKenneth E. Jansen 14759599516SKenneth E. Jansen gAgyi( :,2) = giju(:,1)*A0gyi( :,2) 14859599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,7) 14959599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,12) 15059599516SKenneth E. Jansen 15159599516SKenneth E. Jansen gAgyi( :,3) = giju(:,1)*A0gyi( :,3) 15259599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,8) 15359599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,13) 15459599516SKenneth E. Jansen 15559599516SKenneth E. Jansen gAgyi( :,4) = giju(:,1)*A0gyi( :,4) 15659599516SKenneth E. Jansen & + giju(:,4)*A0gyi( :,9) 15759599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,14) 15859599516SKenneth E. Jansen 15959599516SKenneth E. Jansen gAgyi( :,5) = giju(:,1)*A0gyi( :,5) 16059599516SKenneth E. Jansen & + giju(:,4)*A0gyi(:,10) 16159599516SKenneth E. Jansen & + giju(:,5)*A0gyi(:,15) 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansen gAgyi( :,6) = giju(:,4)*A0gyi( :,1) 16459599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,6) 16559599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,11) 16659599516SKenneth E. Jansen 16759599516SKenneth E. Jansen gAgyi( :,7) = giju(:,4)*A0gyi( :,2) 16859599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,7) 16959599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,12) 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen gAgyi( :,8) = giju(:,4)*A0gyi( :,3) 17259599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,8) 17359599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,13) 17459599516SKenneth E. Jansen 17559599516SKenneth E. Jansen gAgyi( :,9) = giju(:,4)*A0gyi( :,4) 17659599516SKenneth E. Jansen & + giju(:,2)*A0gyi( :,9) 17759599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,14) 17859599516SKenneth E. Jansen 17959599516SKenneth E. Jansen gAgyi(:,10) = giju(:,4)*A0gyi( :,5) 18059599516SKenneth E. Jansen & + giju(:,2)*A0gyi(:,10) 18159599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,15) 18259599516SKenneth E. Jansen 18359599516SKenneth E. Jansen gAgyi(:,11) = giju(:,5)*A0gyi( :,1) 18459599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,6) 18559599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,11) 18659599516SKenneth E. Jansen 18759599516SKenneth E. Jansen gAgyi(:,12) = giju(:,5)*A0gyi( :,2) 18859599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,7) 18959599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,12) 19059599516SKenneth E. Jansen 19159599516SKenneth E. Jansen gAgyi(:,13) = giju(:,5)*A0gyi( :,3) 19259599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,8) 19359599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,13) 19459599516SKenneth E. Jansen 19559599516SKenneth E. Jansen gAgyi(:,14) = giju(:,5)*A0gyi( :,4) 19659599516SKenneth E. Jansen & + giju(:,6)*A0gyi( :,9) 19759599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,14) 19859599516SKenneth E. Jansen 19959599516SKenneth E. Jansen gAgyi(:,15) = giju(:,5)*A0gyi( :,5) 20059599516SKenneth E. Jansen & + giju(:,6)*A0gyi(:,10) 20159599516SKenneth E. Jansen & + giju(:,3)*A0gyi(:,15) 20259599516SKenneth E. Jansenc 20359599516SKenneth E. Jansenc... the denominator term of the DC factor 20459599516SKenneth E. Jansenc... evaluation of the term Y,i.A0DC Y,j 20559599516SKenneth E. Jansenc 20659599516SKenneth E. Jansen yiA0DCyj(:,1) = A0DC(:,1)*g1yi(:,1)**2 20759599516SKenneth E. Jansen & + two*g1yi(:,1)*A0DC(:,2)*g1yi(:,5) 20859599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,2)**2 20959599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,3)**2 21059599516SKenneth E. Jansen & + A0DC(:,3)*g1yi(:,4)**2 21159599516SKenneth E. Jansen & + A0DC(:,4)*g1yi(:,5)**2 21259599516SKenneth E. Jansen 21359599516SKenneth E. Jansen yiA0DCyj(:,2) = A0DC(:,1)*g2yi(:,1)**2 21459599516SKenneth E. Jansen & + two*g2yi(:,1)*A0DC(:,2)*g2yi(:,5) 21559599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,2)**2 21659599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,3)**2 21759599516SKenneth E. Jansen & + A0DC(:,3)*g2yi(:,4)**2 21859599516SKenneth E. Jansen & + A0DC(:,4)*g2yi(:,5)**2 21959599516SKenneth E. Jansen 22059599516SKenneth E. Jansen yiA0DCyj(:,3) = A0DC(:,1)*g3yi(:,1)**2 22159599516SKenneth E. Jansen & + two*g3yi(:,1)*A0DC(:,2)*g3yi(:,5) 22259599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,2)**2 22359599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,3)**2 22459599516SKenneth E. Jansen & + A0DC(:,3)*g3yi(:,4)**2 22559599516SKenneth E. Jansen & + A0DC(:,4)*g3yi(:,5)**2 22659599516SKenneth E. Jansen 22759599516SKenneth E. Jansen yiA0DCyj(:,4) = g1yi(:,1)*A0DC(:,1)*g2yi(:,1) 22859599516SKenneth E. Jansen & + g1yi(:,1)*A0DC(:,2)*g2yi(:,5) 22959599516SKenneth E. Jansen & + g1yi(:,2)*A0DC(:,3)*g2yi(:,2) 23059599516SKenneth E. Jansen & + g1yi(:,3)*A0DC(:,3)*g2yi(:,3) 23159599516SKenneth E. Jansen & + g1yi(:,4)*A0DC(:,3)*g2yi(:,4) 23259599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,2)*g2yi(:,1) 23359599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,4)*g2yi(:,5) 23459599516SKenneth E. Jansen 23559599516SKenneth E. Jansen yiA0DCyj(:,5) = g1yi(:,1)*A0DC(:,1)*g3yi(:,1) 23659599516SKenneth E. Jansen & + g1yi(:,1)*A0DC(:,2)*g3yi(:,5) 23759599516SKenneth E. Jansen & + g1yi(:,2)*A0DC(:,3)*g3yi(:,2) 23859599516SKenneth E. Jansen & + g1yi(:,3)*A0DC(:,3)*g3yi(:,3) 23959599516SKenneth E. Jansen & + g1yi(:,4)*A0DC(:,3)*g3yi(:,4) 24059599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,2)*g3yi(:,1) 24159599516SKenneth E. Jansen & + g1yi(:,5)*A0DC(:,4)*g3yi(:,5) 24259599516SKenneth E. Jansen 24359599516SKenneth E. Jansen yiA0DCyj(:,6) = g2yi(:,1)*A0DC(:,1)*g3yi(:,1) 24459599516SKenneth E. Jansen & + g2yi(:,1)*A0DC(:,2)*g3yi(:,5) 24559599516SKenneth E. Jansen & + g2yi(:,2)*A0DC(:,3)*g3yi(:,2) 24659599516SKenneth E. Jansen & + g2yi(:,3)*A0DC(:,3)*g3yi(:,3) 24759599516SKenneth E. Jansen & + g2yi(:,4)*A0DC(:,3)*g3yi(:,4) 24859599516SKenneth E. Jansen & + g2yi(:,5)*A0DC(:,2)*g3yi(:,1) 24959599516SKenneth E. Jansen & + g2yi(:,5)*A0DC(:,4)*g3yi(:,5) 25059599516SKenneth E. Jansenc 25159599516SKenneth E. Jansenc.... -------------------------> DC factor <-------------------------- 25259599516SKenneth E. Jansenc 25359599516SKenneth E. Jansenc if ((ires .ne. 2) .or. (Jactyp .eq. 1)) then 25459599516SKenneth E. Jansenc 25559599516SKenneth E. Jansenc.... calculate 2-norm of Grad-local-V with respect to A0 25659599516SKenneth E. Jansenc 25759599516SKenneth E. Jansenc.... DC-mallet 25859599516SKenneth E. Jansenc 25959599516SKenneth E. Jansen if (iDC .eq. 1) then 26059599516SKenneth E. Jansenc 26159599516SKenneth E. Jansen fact = one 26259599516SKenneth E. Jansen if (ipord .eq. 2) fact = 0.9 26359599516SKenneth E. Jansen if (ipord .eq. 3) fact = 0.75 26459599516SKenneth E. Jansen 26559599516SKenneth E. Jansenc 26659599516SKenneth E. Jansen gnorm = one / ( 26759599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 26859599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 26959599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 27059599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 27159599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 27259599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 27359599516SKenneth E. Jansen & + epsM ) 27459599516SKenneth E. Jansenc 27559599516SKenneth E. Jansenc DC(:,intp)=dim((fact*sqrt(raLS*gnorm)),(rtLS*gnorm)) 27659599516SKenneth E. Jansen DC(:,intp)=max(zero,(fact*sqrt(raLS*gnorm))-(rtLS*gnorm)) 27759599516SKenneth E. Jansenc 27859599516SKenneth E. Jansenc.... flop count 27959599516SKenneth E. Jansenc 280*f4d0b58bSKenneth E. Jansen! flops = flops + 46*npro 28159599516SKenneth E. Jansenc 28259599516SKenneth E. Jansen endif 28359599516SKenneth E. Jansenc 28459599516SKenneth E. Jansenc.... DC-quadratic 28559599516SKenneth E. Jansenc 28659599516SKenneth E. Jansen if (iDC .eq. 2) then 28759599516SKenneth E. Jansenc 28859599516SKenneth E. Jansen gnorm = one / ( 28959599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 29059599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 29159599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 29259599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 29359599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 29459599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 29559599516SKenneth E. Jansen & + epsM ) 29659599516SKenneth E. Jansen 29759599516SKenneth E. Jansenc 29859599516SKenneth E. Jansen DC(:,intp) = two * rtLS * gnorm 29959599516SKenneth E. Jansenc 30059599516SKenneth E. Jansenc.... flop count 30159599516SKenneth E. Jansenc 302*f4d0b58bSKenneth E. Jansen! flops = flops + 36*npro 30359599516SKenneth E. Jansenc 30459599516SKenneth E. Jansen endif 30559599516SKenneth E. Jansenc 30659599516SKenneth E. Jansenc.... DC-min 30759599516SKenneth E. Jansenc 30859599516SKenneth E. Jansen if (iDC .eq. 3) then 30959599516SKenneth E. Jansenc 31059599516SKenneth E. Jansen fact = one 31159599516SKenneth E. Jansen if (ipord .eq. 2) fact = pt5 31259599516SKenneth E. Jansenc 31359599516SKenneth E. Jansen gnorm = one / ( 31459599516SKenneth E. Jansen & giju(:,1)*yiA0DCyj(:,1) 31559599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyj(:,4) 31659599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyj(:,5) 31759599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyj(:,2) 31859599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyj(:,6) 31959599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyj(:,3) 32059599516SKenneth E. Jansen & + epsM ) 32159599516SKenneth E. Jansen 32259599516SKenneth E. Jansenc 32359599516SKenneth E. Jansenc DC(:,intp) = min( dim(fact * sqrt(raLS * gnorm), 32459599516SKenneth E. Jansen DC(:,intp) = min( max(zero,fact * sqrt(raLS * gnorm)- 32559599516SKenneth E. Jansen & rtLS * gnorm), two * rtLS * gnorm ) 32659599516SKenneth E. Jansenc 32759599516SKenneth E. Jansenc.... flop count 32859599516SKenneth E. Jansenc 329*f4d0b58bSKenneth E. Jansen! flops = flops + 48*npro 33059599516SKenneth E. Jansenc 33159599516SKenneth E. Jansen endif 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansenc endif 33459599516SKenneth E. Jansenc 33559599516SKenneth E. Jansenc.... ----------------------------> RHS <---------------------------- 33659599516SKenneth E. Jansenc 33759599516SKenneth E. Jansenc.... add the contribution of DC to ri and/or rmi 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansenc.... ires = 1 or 3 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 34259599516SKenneth E. Jansenc 34359599516SKenneth E. Jansen ri ( :,1) = ri ( :,1) + DC(:,intp) * gAgyi( :,1) 34459599516SKenneth E. Jansen rmi( :,1) = rmi( :,1) + DC(:,intp) * gAgyi( :,1) 34559599516SKenneth E. Jansen ri ( :,2) = ri ( :,2) + DC(:,intp) * gAgyi( :,2) 34659599516SKenneth E. Jansen rmi( :,2) = rmi( :,2) + DC(:,intp) * gAgyi( :,2) 34759599516SKenneth E. Jansen ri ( :,3) = ri ( :,3) + DC(:,intp) * gAgyi( :,3) 34859599516SKenneth E. Jansen rmi( :,3) = rmi( :,3) + DC(:,intp) * gAgyi( :,3) 34959599516SKenneth E. Jansen ri ( :,4) = ri ( :,4) + DC(:,intp) * gAgyi( :,4) 35059599516SKenneth E. Jansen rmi( :,4) = rmi( :,4) + DC(:,intp) * gAgyi( :,4) 35159599516SKenneth E. Jansen ri ( :,5) = ri ( :,5) + DC(:,intp) * gAgyi( :,5) 35259599516SKenneth E. Jansen rmi( :,5) = rmi( :,5) + DC(:,intp) * gAgyi( :,5) 35359599516SKenneth E. Jansenc 35459599516SKenneth E. Jansen ri ( :,6) = ri ( :,6) + DC(:,intp) * gAgyi( :,6) 35559599516SKenneth E. Jansen rmi( :,6) = rmi( :,6) + DC(:,intp) * gAgyi( :,6) 35659599516SKenneth E. Jansen ri ( :,7) = ri ( :,7) + DC(:,intp) * gAgyi( :,7) 35759599516SKenneth E. Jansen rmi( :,7) = rmi( :,7) + DC(:,intp) * gAgyi( :,7) 35859599516SKenneth E. Jansen ri ( :,8) = ri ( :,8) + DC(:,intp) * gAgyi( :,8) 35959599516SKenneth E. Jansen rmi( :,8) = rmi( :,8) + DC(:,intp) * gAgyi( :,8) 36059599516SKenneth E. Jansen ri ( :,9) = ri ( :,9) + DC(:,intp) * gAgyi( :,9) 36159599516SKenneth E. Jansen rmi( :,9) = rmi( :,9) + DC(:,intp) * gAgyi( :,9) 36259599516SKenneth E. Jansen ri (:,10) = ri (:,10) + DC(:,intp) * gAgyi(:,10) 36359599516SKenneth E. Jansen rmi(:,10) = rmi(:,10) + DC(:,intp) * gAgyi(:,10) 36459599516SKenneth E. Jansenc 36559599516SKenneth E. Jansen ri (:,11) = ri (:,11) + DC(:,intp) * gAgyi(:,11) 36659599516SKenneth E. Jansen rmi(:,11) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 36759599516SKenneth E. Jansen ri (:,12) = ri (:,12) + DC(:,intp) * gAgyi(:,12) 36859599516SKenneth E. Jansen rmi(:,12) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 36959599516SKenneth E. Jansen ri (:,13) = ri (:,13) + DC(:,intp) * gAgyi(:,13) 37059599516SKenneth E. Jansen rmi(:,13) = rmi(:,13) + DC(:,intp) * gAgyi(:,13) 37159599516SKenneth E. Jansen ri (:,14) = ri (:,14) + DC(:,intp) * gAgyi(:,14) 37259599516SKenneth E. Jansen rmi(:,14) = rmi(:,14) + DC(:,intp) * gAgyi(:,14) 37359599516SKenneth E. Jansen ri (:,15) = ri (:,15) + DC(:,intp) * gAgyi(:,15) 37459599516SKenneth E. Jansen rmi(:,15) = rmi(:,15) + DC(:,intp) * gAgyi(:,15) 37559599516SKenneth E. Jansenc 376*f4d0b58bSKenneth E. Jansen! flops = flops + 45*npro 37759599516SKenneth E. Jansenc 37859599516SKenneth E. Jansen endif 37959599516SKenneth E. Jansenc 38059599516SKenneth E. Jansenc.... ires = 2 38159599516SKenneth E. Jansenc 38259599516SKenneth E. Jansen if (ires .eq. 2) then 38359599516SKenneth E. Jansenc 38459599516SKenneth E. Jansen rmi( :,1) = rmi( :,1) + DC(:,intp) * gAgyi( :,1) 38559599516SKenneth E. Jansen rmi( :,2) = rmi( :,2) + DC(:,intp) * gAgyi( :,2) 38659599516SKenneth E. Jansen rmi( :,3) = rmi( :,3) + DC(:,intp) * gAgyi( :,3) 38759599516SKenneth E. Jansen rmi( :,4) = rmi( :,4) + DC(:,intp) * gAgyi( :,4) 38859599516SKenneth E. Jansen rmi( :,5) = rmi( :,5) + DC(:,intp) * gAgyi( :,5) 38959599516SKenneth E. Jansenc 39059599516SKenneth E. Jansen rmi( :,6) = rmi( :,6) + DC(:,intp) * gAgyi( :,6) 39159599516SKenneth E. Jansen rmi( :,7) = rmi( :,7) + DC(:,intp) * gAgyi( :,7) 39259599516SKenneth E. Jansen rmi( :,8) = rmi( :,8) + DC(:,intp) * gAgyi( :,8) 39359599516SKenneth E. Jansen rmi( :,9) = rmi( :,9) + DC(:,intp) * gAgyi( :,9) 39459599516SKenneth E. Jansen rmi(:,10) = rmi(:,10) + DC(:,intp) * gAgyi(:,10) 39559599516SKenneth E. Jansenc 39659599516SKenneth E. Jansen rmi(:,11) = rmi(:,11) + DC(:,intp) * gAgyi(:,11) 39759599516SKenneth E. Jansen rmi(:,12) = rmi(:,12) + DC(:,intp) * gAgyi(:,12) 39859599516SKenneth E. Jansen rmi(:,13) = rmi(:,13) + DC(:,intp) * gAgyi(:,13) 39959599516SKenneth E. Jansen rmi(:,14) = rmi(:,14) + DC(:,intp) * gAgyi(:,14) 40059599516SKenneth E. Jansen rmi(:,15) = rmi(:,15) + DC(:,intp) * gAgyi(:,15) 40159599516SKenneth E. Jansenc 402*f4d0b58bSKenneth E. Jansen! flops = flops + 30*npro 40359599516SKenneth E. Jansenc 40459599516SKenneth E. Jansen endif 40559599516SKenneth E. Jansenc 40659599516SKenneth E. Jansenc.... -------------------------> Stiffness <-------------------------- 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansenc.... add the contribution of DC to stiff 40959599516SKenneth E. Jansenc 41059599516SKenneth E. Jansen if (iprec .eq. 1) then ! leave out of LHS, when called from itrres 41159599516SKenneth E. Jansen nflow2=two*nflow 41259599516SKenneth E. Jansen do j = 1, nflow 41359599516SKenneth E. Jansen do i = 1, nflow 41459599516SKenneth E. Jansen dtmp(:)=A0(:,i,j)*DC(:,intp) 41559599516SKenneth E. Jansenc 41659599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,1] 41759599516SKenneth E. Jansenc 41859599516SKenneth E. Jansen stiff(:,i,j) = stiff(:,i,j) 41959599516SKenneth E. Jansen & + dtmp(:)*giju(:,1) 42059599516SKenneth E. Jansenc 42159599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,2] 42259599516SKenneth E. Jansenc 42359599516SKenneth E. Jansen 42459599516SKenneth E. Jansen stiff(:,i,j+nflow) = stiff(:,i,j+nflow) 42559599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 42659599516SKenneth E. Jansenc 42759599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [1,3] 42859599516SKenneth E. Jansenc 42959599516SKenneth E. Jansen 43059599516SKenneth E. Jansen stiff(:,i,j+nflow2) = stiff(:,i,j+nflow2) 43159599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 43259599516SKenneth E. Jansen 43359599516SKenneth E. Jansenc.... add (DC g^1 A0) to stiff [2,1] (similarly below) 43459599516SKenneth E. Jansenc 43559599516SKenneth E. Jansen 43659599516SKenneth E. Jansen stiff(:,i+nflow,j) = stiff(:,i+nflow,j) 43759599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 43859599516SKenneth E. Jansen 43959599516SKenneth E. Jansen stiff(:,i+nflow,j+nflow) = stiff(:,i+nflow,j+nflow) 44059599516SKenneth E. Jansen & + dtmp(:)*giju(:,2) 44159599516SKenneth E. Jansen 44259599516SKenneth E. Jansen stiff(:,i+nflow,j+nflow2) = stiff(:,i+nflow,j+nflow2) 44359599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 44459599516SKenneth E. Jansen 44559599516SKenneth E. Jansen stiff(:,i+nflow2,j) = stiff(:,i+nflow2,j) 44659599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 44759599516SKenneth E. Jansen 44859599516SKenneth E. Jansen stiff(:,i+nflow2,j+nflow) = stiff(:,i+nflow2,j+nflow) 44959599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 45059599516SKenneth E. Jansen 45159599516SKenneth E. Jansen stiff(:,i+nflow2,j+nflow2) = stiff(:,i+nflow2,j+nflow2) 45259599516SKenneth E. Jansen & + dtmp(:)*giju(:,3) 45359599516SKenneth E. Jansen enddo 45459599516SKenneth E. Jansen enddo 45559599516SKenneth E. Jansenc 45659599516SKenneth E. Jansenc.... flop count 45759599516SKenneth E. Jansenc 458*f4d0b58bSKenneth E. Jansen! flops = flops + 210*npro 45959599516SKenneth E. Jansenc 46059599516SKenneth E. Jansenc.... end of stiffness 46159599516SKenneth E. Jansenc 46259599516SKenneth E. Jansen endif 46359599516SKenneth E. Jansenc 46459599516SKenneth E. Jansenc.... return 46559599516SKenneth E. Jansenc 46659599516SKenneth E. Jansen return 46759599516SKenneth E. Jansen end 46859599516SKenneth E. Jansenc 46959599516SKenneth E. Jansen subroutine e3dcSclr ( g1yti, g2yti, g3yti, 47059599516SKenneth E. Jansen & A0t, raLSt, rTLSt, 47159599516SKenneth E. Jansen & DCt, giju, 47259599516SKenneth E. Jansen & rti, rmti, stifft) 47359599516SKenneth E. Jansenc 47459599516SKenneth E. Jansenc 47559599516SKenneth E. Jansenc---------------------------------------------------------------------- 47659599516SKenneth E. Jansenc 47759599516SKenneth E. Jansenc This routine calculates the contribution of the Discontinuity- 47859599516SKenneth E. Jansenc Capturing operator to RHS and preconditioner for the scalar solve. 47959599516SKenneth E. Jansenc 48059599516SKenneth E. Jansenc g1yti (nflow,npro) : grad-y in direction 1 48159599516SKenneth E. Jansenc g2yti (nflow,npro) : grad-y in direction 2 48259599516SKenneth E. Jansenc g3yti (nflow,npro) : grad-y in direction 3 48359599516SKenneth E. Jansenc A0 (nsymdf,npro) : A0 matrix (Symm. storage) 48459599516SKenneth E. Jansenc raLS (npro) : square of LS residual (A0inv norm) 48559599516SKenneth E. Jansenc rtLS (npro) : square of LS residual (Tau norm) 48659599516SKenneth E. Jansenc giju (6,npro) : metric matrix 48759599516SKenneth E. Jansenc DC (ngauss,npro) : discontinuity-capturing factor 48859599516SKenneth E. Jansenc intp : integration point number 48959599516SKenneth E. Jansenc 49059599516SKenneth E. Jansenc output: 49159599516SKenneth E. Jansenc ri (nflow*(nsd+1),npro) : partial residual 49259599516SKenneth E. Jansenc rmi (nflow*(nsd+1),npro) : partial modified residual 49359599516SKenneth E. Jansenc stiff (nsymdf,6,npro) : diffusivity matrix 49459599516SKenneth E. Jansenc DC (npro) : discontinuity-capturing factor 49559599516SKenneth E. Jansenc 49659599516SKenneth E. Jansenc 49759599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2dc.f) 49859599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Recoded) 49959599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 50059599516SKenneth E. Jansenc---------------------------------------------------------------------- 50159599516SKenneth E. Jansenc 50259599516SKenneth E. Jansen include "common.h" 50359599516SKenneth E. Jansenc 50459599516SKenneth E. Jansen dimension g1yti(npro), g2yti(npro), 50559599516SKenneth E. Jansen & g3yti(npro), A0t(npro), 50659599516SKenneth E. Jansen & raLSt(npro), rtLSt(npro), 50759599516SKenneth E. Jansen & giju(npro,6), DCt(npro,ngauss), 50859599516SKenneth E. Jansen & rti(npro,nsd+1), rmti(npro,nsd+1), 50959599516SKenneth E. Jansen & stifft(npro,nsd,nsd), dtmp(npro) 51059599516SKenneth E. Jansenc 51159599516SKenneth E. Jansen 51259599516SKenneth E. Jansen dimension ggyit(npro,nflow), gAgyit(npro,3), 51359599516SKenneth E. Jansen & gnormt(npro), A0gyit(npro,3), 51459599516SKenneth E. Jansen & yiA0DCyjt(npro,6), A0DCt(npro) 51559599516SKenneth E. Jansenc 51659599516SKenneth E. Jansenc ... -----------------------> initialize <---------------------------- 51759599516SKenneth E. Jansenc 51859599516SKenneth E. Jansen A0gyit = zero 51959599516SKenneth E. Jansen gAgyit = zero 52059599516SKenneth E. Jansen yiA0DCyjt = zero 52159599516SKenneth E. Jansen DCt = zero 52259599516SKenneth E. Jansen A0DCt = A0t 52359599516SKenneth E. Jansenc.... -----------------------> global gradient <---------------------- 52459599516SKenneth E. Jansenc 52559599516SKenneth E. Jansenc.... calculate (A0 y_,j) --> A0gyit 52659599516SKenneth E. Jansenc 52759599516SKenneth E. Jansenc A0 Y_{,1} 52859599516SKenneth E. Jansenc 52959599516SKenneth E. Jansen A0gyit( :,1) = A0t(:)*g1yti(:) 53059599516SKenneth E. Jansenc A0 Y_{,2} 53159599516SKenneth E. Jansen A0gyit( :,2) = A0t(:)*g2yti(:) 53259599516SKenneth E. Jansenc A0 Y_{,3} 53359599516SKenneth E. Jansen A0gyit( :,3) = A0t(:)*g3yti(:) 53459599516SKenneth E. Jansenc 53559599516SKenneth E. Jansenc.... calculate (giju A0 y_,j) --> gAgyit 53659599516SKenneth E. Jansenc 53759599516SKenneth E. Jansen 53859599516SKenneth E. Jansen gAgyit( :,1) = giju(:,1)*A0gyit( :,1) 53959599516SKenneth E. Jansen & + giju(:,4)*A0gyit( :,2) 54059599516SKenneth E. Jansen & + giju(:,5)*A0gyit( :,3) 54159599516SKenneth E. Jansen 54259599516SKenneth E. Jansen gAgyit( :,2) = giju(:,4)*A0gyit( :,1) 54359599516SKenneth E. Jansen & + giju(:,2)*A0gyit( :,2) 54459599516SKenneth E. Jansen & + giju(:,6)*A0gyit( :,3) 54559599516SKenneth E. Jansen 54659599516SKenneth E. Jansen gAgyit( :,3) = giju(:,5)*A0gyit( :,1) 54759599516SKenneth E. Jansen & + giju(:,6)*A0gyit( :,2) 54859599516SKenneth E. Jansen & + giju(:,3)*A0gyit( :,3) 54959599516SKenneth E. Jansenc 55059599516SKenneth E. Jansenc... the denominator term of the DC factor 55159599516SKenneth E. Jansenc... evaluation of the term Y,i.A0DC Y,j 55259599516SKenneth E. Jansenc 55359599516SKenneth E. Jansen yiA0DCyjt(:,1) = A0DCt(:)*g1yti(:)**2 55459599516SKenneth E. Jansenc 55559599516SKenneth E. Jansen yiA0DCyjt(:,2) = A0DCt(:)*g2yti(:)**2 55659599516SKenneth E. Jansenc 55759599516SKenneth E. Jansen yiA0DCyjt(:,3) = A0DCt(:)*g3yti(:)**2 55859599516SKenneth E. Jansenc 55959599516SKenneth E. Jansen yiA0DCyjt(:,4) = A0DCt(:)*g1yti(:)*g2yti(:) 56059599516SKenneth E. Jansenc 56159599516SKenneth E. Jansen yiA0DCyjt(:,5) = A0DCt(:)*g1yti(:)*g3yti(:) 56259599516SKenneth E. Jansenc 56359599516SKenneth E. Jansen yiA0DCyjt(:,6) = A0DCt(:)*g2yti(:)*g3yti(:) 56459599516SKenneth E. Jansenc 56559599516SKenneth E. Jansenc 56659599516SKenneth E. Jansenc.... -------------------------> DC factor <-------------------------- 56759599516SKenneth E. Jansenc 56859599516SKenneth E. Jansenc if ((ires .ne. 2) .or. (Jactyp .eq. 1)) then 56959599516SKenneth E. Jansenc 57059599516SKenneth E. Jansenc.... calculate 2-norm of Grad-local-V with respect to A0 57159599516SKenneth E. Jansenc 57259599516SKenneth E. Jansenc.... DC-mallet 57359599516SKenneth E. Jansenc 57459599516SKenneth E. Jansen if (iDCsclr(1) .eq. 1) then 57559599516SKenneth E. Jansenc 57659599516SKenneth E. Jansen fact = one 57759599516SKenneth E. Jansen if (ipord .eq. 2) fact = 0.9 57859599516SKenneth E. Jansen if (ipord .eq. 3) fact = 0.75 57959599516SKenneth E. Jansen 58059599516SKenneth E. Jansenc 58159599516SKenneth E. Jansen gnormt = one / ( 58259599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 58359599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 58459599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 58559599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 58659599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 58759599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 58859599516SKenneth E. Jansen & + epsM ) 58959599516SKenneth E. Jansenc 59059599516SKenneth E. Jansenc DCt(:,intp)=dim((fact*sqrt(raLSt*gnormt)),(rtLSt*gnormt)) 59159599516SKenneth E. Jansen DCt(:,intp)=max(zero,(fact*sqrt(raLSt*gnormt))-(rtLSt*gnormt)) 59259599516SKenneth E. Jansenc 59359599516SKenneth E. Jansenc.... flop count 59459599516SKenneth E. Jansenc 595*f4d0b58bSKenneth E. Jansen! flops = flops + 46*npro 59659599516SKenneth E. Jansenc 59759599516SKenneth E. Jansen endif 59859599516SKenneth E. Jansenc 59959599516SKenneth E. Jansenc.... DC-quadratic 60059599516SKenneth E. Jansenc 60159599516SKenneth E. Jansen if (iDCSclr(1) .eq. 2) then 60259599516SKenneth E. Jansenc 60359599516SKenneth E. Jansen gnormt = one / ( 60459599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 60559599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 60659599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 60759599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 60859599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 60959599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 61059599516SKenneth E. Jansen & + epsM ) 61159599516SKenneth E. Jansen 61259599516SKenneth E. Jansenc 61359599516SKenneth E. Jansen DCt(:,intp) = two * rtLSt * gnormt 61459599516SKenneth E. Jansenc 61559599516SKenneth E. Jansenc.... flop count 61659599516SKenneth E. Jansenc 617*f4d0b58bSKenneth E. Jansen! flops = flops + 36*npro 61859599516SKenneth E. Jansenc 61959599516SKenneth E. Jansen endif 62059599516SKenneth E. Jansenc 62159599516SKenneth E. Jansenc.... DC-min 62259599516SKenneth E. Jansenc 62359599516SKenneth E. Jansen if (iDCSclr(1) .eq. 3) then 62459599516SKenneth E. Jansenc 62559599516SKenneth E. Jansen fact = one 62659599516SKenneth E. Jansen if (ipord .eq. 2) fact = pt5 62759599516SKenneth E. Jansenc 62859599516SKenneth E. Jansen gnormt = one / ( 62959599516SKenneth E. Jansen & giju(:,1)*yiA0DCyjt(:,1) 63059599516SKenneth E. Jansen & + two*giju(:,4)*yiA0DCyjt(:,4) 63159599516SKenneth E. Jansen & + two*giju(:,5)*yiA0DCyjt(:,5) 63259599516SKenneth E. Jansen & + giju(:,2)*yiA0DCyjt(:,2) 63359599516SKenneth E. Jansen & + two*giju(:,6)*yiA0DCyjt(:,6) 63459599516SKenneth E. Jansen & + giju(:,3)*yiA0DCyjt(:,3) 63559599516SKenneth E. Jansen & + epsM ) 63659599516SKenneth E. Jansen 63759599516SKenneth E. Jansenc 63859599516SKenneth E. Jansenc DCt(:,intp) = min( dim(fact * sqrt(raLSt * gnormt), 63959599516SKenneth E. Jansen DCt(:,intp) = min( max(zero,fact * sqrt(raLSt * gnormt)- 64059599516SKenneth E. Jansen & rtLSt * gnormt), two * rtLSt * gnormt ) 64159599516SKenneth E. Jansenc 64259599516SKenneth E. Jansenc.... flop count 64359599516SKenneth E. Jansenc 644*f4d0b58bSKenneth E. Jansen! flops = flops + 48*npro 64559599516SKenneth E. Jansenc 64659599516SKenneth E. Jansen endif 64759599516SKenneth E. Jansenc 64859599516SKenneth E. Jansenc endif 64959599516SKenneth E. Jansenc DCt=DCt*two 65059599516SKenneth E. Jansenc 65159599516SKenneth E. Jansenc.... ----------------------------> RHS <---------------------------- 65259599516SKenneth E. Jansenc 65359599516SKenneth E. Jansenc.... add the contribution of DC to ri and/or rmi 65459599516SKenneth E. Jansenc 65559599516SKenneth E. Jansenc.... ires = 1 or 3 65659599516SKenneth E. Jansenc 65759599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 65859599516SKenneth E. Jansenc 65959599516SKenneth E. Jansen rti ( :,1) = rti ( :,1) + DCt(:,intp) * gAgyit( :,1) 66059599516SKenneth E. Jansen rmti( :,1) = rmti( :,1) + DCt(:,intp) * gAgyit( :,1) 66159599516SKenneth E. Jansen rti ( :,2) = rti ( :,2) + DCt(:,intp) * gAgyit( :,2) 66259599516SKenneth E. Jansen rmti( :,2) = rmti( :,2) + DCt(:,intp) * gAgyit( :,2) 66359599516SKenneth E. Jansen rti ( :,3) = rti ( :,3) + DCt(:,intp) * gAgyit( :,3) 66459599516SKenneth E. Jansen rmti( :,3) = rmti( :,3) + DCt(:,intp) * gAgyit( :,3) 66559599516SKenneth E. Jansen 66659599516SKenneth E. Jansenc 667*f4d0b58bSKenneth E. Jansen! flops = flops + 45*npro 66859599516SKenneth E. Jansenc 66959599516SKenneth E. Jansen endif 67059599516SKenneth E. Jansenc 67159599516SKenneth E. Jansenc.... ires = 2 67259599516SKenneth E. Jansenc 67359599516SKenneth E. Jansen if (ires .eq. 2) then 67459599516SKenneth E. Jansenc 67559599516SKenneth E. Jansen rmti( :,1) = rmti( :,1) + DCt(:,intp) * gAgyit( :,1) 67659599516SKenneth E. Jansen rmti( :,2) = rmti( :,2) + DCt(:,intp) * gAgyit( :,2) 67759599516SKenneth E. Jansen rmti( :,3) = rmti( :,3) + DCt(:,intp) * gAgyit( :,3) 67859599516SKenneth E. Jansen 67959599516SKenneth E. Jansenc 680*f4d0b58bSKenneth E. Jansen! flops = flops + 30*npro 68159599516SKenneth E. Jansenc 68259599516SKenneth E. Jansen endif 68359599516SKenneth E. Jansenc 68459599516SKenneth E. Jansenc.... -------------------------> Stiffness <-------------------------- 68559599516SKenneth E. Jansenc 68659599516SKenneth E. Jansenc.... add the contribution of DC to stiff 68759599516SKenneth E. Jansenc$$$c 68859599516SKenneth E. Jansenc if (iprec .eq. 1) then !leave out of LHS, if called from itrres 68959599516SKenneth E. Jansen !anyway matrix free not implemented for scalar 69059599516SKenneth E. Jansen dtmp(:)=A0t(:)*DCt(:,intp) 69159599516SKenneth E. Jansenc 69259599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,1] 69359599516SKenneth E. Jansenc 69459599516SKenneth E. Jansen stifft(:,1,1) = stifft(:,1,1) 69559599516SKenneth E. Jansen & + dtmp(:)*giju(:,1) 69659599516SKenneth E. Jansenc 69759599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,2] 69859599516SKenneth E. Jansenc 69959599516SKenneth E. Jansen stifft(:,1,2) = stifft(:,1,2) 70059599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 70159599516SKenneth E. Jansenc 70259599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [1,3] 70359599516SKenneth E. Jansenc 70459599516SKenneth E. Jansen stifft(:,1,3) = stifft(:,1,3) 70559599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 70659599516SKenneth E. Jansen 70759599516SKenneth E. Jansenc.... add (DC g^1 A0) to stifft [2,1] (similarly below) 70859599516SKenneth E. Jansenc 70959599516SKenneth E. Jansen stifft(:,2,1) = stifft(:,2,1) 71059599516SKenneth E. Jansen & + dtmp(:)*giju(:,4) 71159599516SKenneth E. Jansen 71259599516SKenneth E. Jansen stifft(:,2,2) = stifft(:,2,2) 71359599516SKenneth E. Jansen & + dtmp(:)*giju(:,2) 71459599516SKenneth E. Jansen 71559599516SKenneth E. Jansen stifft(:,2,3) = stifft(:,2,3) 71659599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 71759599516SKenneth E. Jansen 71859599516SKenneth E. Jansen stifft(:,3,1) = stifft(:,3,1) 71959599516SKenneth E. Jansen & + dtmp(:)*giju(:,5) 72059599516SKenneth E. Jansen 72159599516SKenneth E. Jansen stifft(:,3,2) = stifft(:,3,2) 72259599516SKenneth E. Jansen & + dtmp(:)*giju(:,6) 72359599516SKenneth E. Jansen 72459599516SKenneth E. Jansen stifft(:,3,3) = stifft(:,3,3) 72559599516SKenneth E. Jansen & + dtmp(:)*giju(:,3) 72659599516SKenneth E. Jansenc 72759599516SKenneth E. Jansenc.... flop count 72859599516SKenneth E. Jansenc 729*f4d0b58bSKenneth E. Jansen! flops = flops + 210*npro 73059599516SKenneth E. Jansenc 73159599516SKenneth E. Jansenc.... end of stiffness 73259599516SKenneth E. Jansenc 73359599516SKenneth E. Jansenc endif 73459599516SKenneth E. Jansenc 73559599516SKenneth E. Jansenc.... return 73659599516SKenneth E. Jansenc 73759599516SKenneth E. Jansen return 73859599516SKenneth E. Jansen end 73959599516SKenneth E. Jansenc 740