xref: /phasta/phSolver/compressible/e3dc.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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