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