xref: /phasta/phSolver/incompressible/e3bvar.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine e3bvar (yl,      acl,     ul,
2*59599516SKenneth E. Jansen     &                   shpb,    shglb,
3*59599516SKenneth E. Jansen     &                   xlb,     lnode,
4*59599516SKenneth E. Jansen     &                   WdetJb,  bnorm,   pres,
5*59599516SKenneth E. Jansen     &                   u1,      u2,      u3,      rmu,
6*59599516SKenneth E. Jansen     &                   unm,     tau1n,   tau2n,   tau3n,
7*59599516SKenneth E. Jansen     &                   vdot,    rlKwall,
8*59599516SKenneth E. Jansen     &                   xKebe,   rKwall_glob)
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc----------------------------------------------------------------------
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc   This routine computes the variables at integration points for
13*59599516SKenneth E. Jansenc the boundary element routine.
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc input:
16*59599516SKenneth E. Jansenc  yl     (npro,nshl,ndof)      : primitive variables (local)
17*59599516SKenneth E. Jansenc          ndof: 5[p,v1,v2,v3,T]+number of scalars solved
18*59599516SKenneth E. Jansenc  acl    (npro,nshl,ndof)      : acceleration (local)
19*59599516SKenneth E. Jansenc  ul     (npro,nshlb,nsd)       : displacement (local)
20*59599516SKenneth E. Jansenc  shpb   (nen)                 : boundary element shape-functions
21*59599516SKenneth E. Jansenc  shglb  (nsd,nen)             : boundary element grad-shape-functions
22*59599516SKenneth E. Jansenc  xlb    (npro,nenl,nsd)       : nodal coordinates at current step
23*59599516SKenneth E. Jansenc  lnode  (nenb)                : local nodes on the boundary
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansenc output:
26*59599516SKenneth E. Jansenc  g1yi   (npro,ndof)           : grad-v in direction 1
27*59599516SKenneth E. Jansenc  g2yi   (npro,ndof)           : grad-v in direction 2
28*59599516SKenneth E. Jansenc  g3yi   (npro,ndof)           : grad-v in direction 3
29*59599516SKenneth E. Jansenc  WdetJb (npro)                : weighted Jacobian
30*59599516SKenneth E. Jansenc  bnorm  (npro,nsd)            : outward normal
31*59599516SKenneth E. Jansenc  pres   (npro)                : pressure
32*59599516SKenneth E. Jansenc  u1     (npro)                : x1-velocity component
33*59599516SKenneth E. Jansenc  u2     (npro)                : x2-velocity component
34*59599516SKenneth E. Jansenc  u3     (npro)                : x3-velocity component
35*59599516SKenneth E. Jansenc  unm    (npro)                : BC u dot n
36*59599516SKenneth E. Jansenc  p      (npro)                : BC pressure
37*59599516SKenneth E. Jansenc  tau1n  (npro)                : BC viscous flux 1
38*59599516SKenneth E. Jansenc  tau2n  (npro)                : BC viscous flux 2
39*59599516SKenneth E. Jansenc  tau3n  (npro)                : BC viscous flux 3
40*59599516SKenneth E. Jansenc  vdot   (npro,nsd)            : acceleration at quadrature points
41*59599516SKenneth E. Jansenc  rlKwall(npro,nshlb,nsd)      : wall stiffness contribution to the local residual
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2bvar.f)
44*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
45*59599516SKenneth E. Jansenc Alberto Figueroa, Winter 2004.  CMM-FSI
46*59599516SKenneth E. Jansenc----------------------------------------------------------------------
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansen      use        turbsa
49*59599516SKenneth E. Jansen      include "common.h"
50*59599516SKenneth E. Jansenc
51*59599516SKenneth E. Jansen      dimension yl(npro,nshl,ndof),        rmu(npro),
52*59599516SKenneth E. Jansen     &            shpb(npro,nshl),           shglb(npro,nsd,nshl),
53*59599516SKenneth E. Jansen     &            xlb(npro,nenl,nsd),
54*59599516SKenneth E. Jansen     &            lnode(27),                 g1yi(npro,ndof),
55*59599516SKenneth E. Jansen     &            g2yi(npro,ndof),           g3yi(npro,ndof),
56*59599516SKenneth E. Jansen     &            WdetJb(npro),              bnorm(npro,nsd),
57*59599516SKenneth E. Jansen     &            pres(npro),
58*59599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
59*59599516SKenneth E. Jansen     &            u3(npro),
60*59599516SKenneth E. Jansen     &            unm(npro),
61*59599516SKenneth E. Jansen     &            tau1n(npro),               tau2n(npro),
62*59599516SKenneth E. Jansen     &            tau3n(npro),
63*59599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),       ul(npro,nshl,nsd),
64*59599516SKenneth E. Jansen     &            vdot(npro,nsd),            rlKwall(npro,nshlb,nsd)
65*59599516SKenneth E. Jansenc
66*59599516SKenneth E. Jansen      dimension gl1yi(npro,ndof),          gl2yi(npro,ndof),
67*59599516SKenneth E. Jansen     &            gl3yi(npro,ndof),          dxdxib(npro,nsd,nsd),
68*59599516SKenneth E. Jansen     &            dxidxb(npro,nsd,nsd),      temp(npro),
69*59599516SKenneth E. Jansen     &            temp1(npro),               temp2(npro),
70*59599516SKenneth E. Jansen     &            temp3(npro),
71*59599516SKenneth E. Jansen     &            v1(npro,nsd),              v2(npro,nsd),
72*59599516SKenneth E. Jansen     &            v3(npro,nsd),
73*59599516SKenneth E. Jansen     &            rotnodallocal(npro,nsd,nsd),
74*59599516SKenneth E. Jansen     &            x1rot(npro,nsd),           x2rot(npro,nsd),
75*59599516SKenneth E. Jansen     &            x3rot(npro,nsd),           detJacrot(npro),
76*59599516SKenneth E. Jansen     &            B1(npro,5,3),              B2(npro,5,3),
77*59599516SKenneth E. Jansen     &            B3(npro,5,3),              Dmatrix(npro,5,5),
78*59599516SKenneth E. Jansen     &            DtimesB1(npro,5,3),        DtimesB2(npro,5,3),
79*59599516SKenneth E. Jansen     &            DtimesB3(npro,5,3),
80*59599516SKenneth E. Jansen     &            rKwall_local11(npro,nsd,nsd),
81*59599516SKenneth E. Jansen     &            rKwall_local12(npro,nsd,nsd),
82*59599516SKenneth E. Jansen     &            rKwall_local13(npro,nsd,nsd),
83*59599516SKenneth E. Jansen     &            rKwall_local21(npro,nsd,nsd),
84*59599516SKenneth E. Jansen     &            rKwall_local22(npro,nsd,nsd),
85*59599516SKenneth E. Jansen     &            rKwall_local23(npro,nsd,nsd),
86*59599516SKenneth E. Jansen     &            rKwall_local31(npro,nsd,nsd),
87*59599516SKenneth E. Jansen     &            rKwall_local32(npro,nsd,nsd),
88*59599516SKenneth E. Jansen     &            rKwall_local33(npro,nsd,nsd),
89*59599516SKenneth E. Jansen     &            rKwall_glob11(npro,nsd,nsd),
90*59599516SKenneth E. Jansen     &            rKwall_glob12(npro,nsd,nsd),
91*59599516SKenneth E. Jansen     &            rKwall_glob13(npro,nsd,nsd),
92*59599516SKenneth E. Jansen     &            rKwall_glob21(npro,nsd,nsd),
93*59599516SKenneth E. Jansen     &            rKwall_glob22(npro,nsd,nsd),
94*59599516SKenneth E. Jansen     &            rKwall_glob23(npro,nsd,nsd),
95*59599516SKenneth E. Jansen     &            rKwall_glob31(npro,nsd,nsd),
96*59599516SKenneth E. Jansen     &            rKwall_glob32(npro,nsd,nsd),
97*59599516SKenneth E. Jansen     &            rKwall_glob33(npro,nsd,nsd)
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansen      dimension   rKwall_glob(npro,9,nshl,nshl),
100*59599516SKenneth E. Jansen     &            xKebe(npro,9,nshl,nshl)
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen      real*8      lhmFctvw, tsFctvw(npro)
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansen      dimension   tmp1(npro)
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen      real*8    Turb(npro),                xki,
107*59599516SKenneth E. Jansen     &            xki3,                      fv1
108*59599516SKenneth E. Jansenc
109*59599516SKenneth E. Jansen      integer   e, i, j
110*59599516SKenneth E. Jansenc
111*59599516SKenneth E. Jansen      integer   aa, b
112*59599516SKenneth E. Jansen
113*59599516SKenneth E. Jansen
114*59599516SKenneth E. Jansenc
115*59599516SKenneth E. Jansenc.... ------------------->  integration variables  <--------------------
116*59599516SKenneth E. Jansenc
117*59599516SKenneth E. Jansenc.... compute the primitive variables at the integration point
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansen      pres = zero
120*59599516SKenneth E. Jansen      u1   = zero
121*59599516SKenneth E. Jansen      u2   = zero
122*59599516SKenneth E. Jansen      u3   = zero
123*59599516SKenneth E. Jansenc
124*59599516SKenneth E. Jansen
125*59599516SKenneth E. Jansen      do n = 1, nshlb
126*59599516SKenneth E. Jansen         nodlcl = lnode(n)
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansen         pres = pres + shpb(:,nodlcl) * yl(:,nodlcl,1)
129*59599516SKenneth E. Jansen         u1   = u1   + shpb(:,nodlcl) * yl(:,nodlcl,2)
130*59599516SKenneth E. Jansen         u2   = u2   + shpb(:,nodlcl) * yl(:,nodlcl,3)
131*59599516SKenneth E. Jansen         u3   = u3   + shpb(:,nodlcl) * yl(:,nodlcl,4)
132*59599516SKenneth E. Jansen
133*59599516SKenneth E. Jansen      enddo
134*59599516SKenneth E. Jansenc
135*59599516SKenneth E. Jansenc.... ---------------------->  Element Metrics  <-----------------------
136*59599516SKenneth E. Jansenc
137*59599516SKenneth E. Jansenc.... compute the deformation gradient
138*59599516SKenneth E. Jansenc
139*59599516SKenneth E. Jansen      dxdxib = zero
140*59599516SKenneth E. Jansenc
141*59599516SKenneth E. Jansen      do n = 1, nenl
142*59599516SKenneth E. Jansen         dxdxib(:,1,1) = dxdxib(:,1,1) + xlb(:,n,1) * shglb(:,1,n)
143*59599516SKenneth E. Jansen         dxdxib(:,1,2) = dxdxib(:,1,2) + xlb(:,n,1) * shglb(:,2,n)
144*59599516SKenneth E. Jansen         dxdxib(:,1,3) = dxdxib(:,1,3) + xlb(:,n,1) * shglb(:,3,n)
145*59599516SKenneth E. Jansen         dxdxib(:,2,1) = dxdxib(:,2,1) + xlb(:,n,2) * shglb(:,1,n)
146*59599516SKenneth E. Jansen         dxdxib(:,2,2) = dxdxib(:,2,2) + xlb(:,n,2) * shglb(:,2,n)
147*59599516SKenneth E. Jansen         dxdxib(:,2,3) = dxdxib(:,2,3) + xlb(:,n,2) * shglb(:,3,n)
148*59599516SKenneth E. Jansen         dxdxib(:,3,1) = dxdxib(:,3,1) + xlb(:,n,3) * shglb(:,1,n)
149*59599516SKenneth E. Jansen         dxdxib(:,3,2) = dxdxib(:,3,2) + xlb(:,n,3) * shglb(:,2,n)
150*59599516SKenneth E. Jansen         dxdxib(:,3,3) = dxdxib(:,3,3) + xlb(:,n,3) * shglb(:,3,n)
151*59599516SKenneth E. Jansen      enddo
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansenc.... compute the normal to the boundary
154*59599516SKenneth E. Jansenc
155*59599516SKenneth E. Jansenc$$$      if (lcsyst .eq. 4) then   ! wedge-quad
156*59599516SKenneth E. Jansenc$$$         temp1 =  dxdxib(:,2,1) * dxdxib(:,3,3) -
157*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,2,3) * dxdxib(:,3,1)
158*59599516SKenneth E. Jansenc$$$         temp2 =  dxdxib(:,3,1) * dxdxib(:,1,3) -
159*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,3,3) * dxdxib(:,1,1)
160*59599516SKenneth E. Jansenc$$$         temp3 =  dxdxib(:,1,1) * dxdxib(:,2,3) -
161*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,1,3) * dxdxib(:,2,1)
162*59599516SKenneth E. Jansenc$$$      elseif( lcyst .eq. 6) then  ! pyr-tri face
163*59599516SKenneth E. Jansenc$$$         temp1 =  dxdxib(:,2,1) * dxdxib(:,3,3) -
164*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,2,3) * dxdxib(:,3,1)
165*59599516SKenneth E. Jansenc$$$         temp2 =  dxdxib(:,3,1) * dxdxib(:,1,3) -
166*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,3,3) * dxdxib(:,1,1)
167*59599516SKenneth E. Jansenc$$$         temp3 =  dxdxib(:,1,1) * dxdxib(:,2,3) -
168*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,1,3) * dxdxib(:,2,1)
169*59599516SKenneth E. Jansenc$$$      elseif( lcyst .eq. 1) then !usual wrong way tets
170*59599516SKenneth E. Jansenc$$$         temp1 = -dxdxib(:,2,2) * dxdxib(:,3,1) +
171*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,2,1) * dxdxib(:,3,2)
172*59599516SKenneth E. Jansenc$$$         temp2 = -dxdxib(:,3,2) * dxdxib(:,1,1) +
173*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,3,1) * dxdxib(:,1,2)
174*59599516SKenneth E. Jansenc$$$         temp3 = -dxdxib(:,1,2) * dxdxib(:,2,1) +
175*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,1,1) * dxdxib(:,2,2)
176*59599516SKenneth E. Jansenc$$$      else
177*59599516SKenneth E. Jansenc$$$         temp1 =  dxdxib(:,2,2) * dxdxib(:,3,1) -
178*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,2,1) * dxdxib(:,3,2)
179*59599516SKenneth E. Jansenc$$$         temp2 =  dxdxib(:,3,2) * dxdxib(:,1,1) -
180*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,3,1) * dxdxib(:,1,2)
181*59599516SKenneth E. Jansenc$$$         temp3 =  dxdxib(:,1,2) * dxdxib(:,2,1) -
182*59599516SKenneth E. Jansenc$$$     &            dxdxib(:,1,1) * dxdxib(:,2,2)
183*59599516SKenneth E. Jansenc$$$      endif
184*59599516SKenneth E. Jansenc$$$c
185*59599516SKenneth E. Jansenc$$$      temp       = one / sqrt ( temp1**2 + temp2**2 + temp3**2 )
186*59599516SKenneth E. Jansenc$$$      bnorm(:,1) = temp1 * temp
187*59599516SKenneth E. Jansenc$$$      bnorm(:,2) = temp2 * temp
188*59599516SKenneth E. Jansenc$$$      bnorm(:,3) = temp3 * temp
189*59599516SKenneth E. Jansenc$$$c
190*59599516SKenneth E. Jansenc$$$      WdetJb     = Qwtb(lcsyst,intp) / temp
191*59599516SKenneth E. Jansenc$$$      if(lcsyst .eq. 3) WdetJb=WdetJb*two
192*59599516SKenneth E. Jansenc
193*59599516SKenneth E. Jansenc.... compute the normal to the boundary. This is achieved by taking
194*59599516SKenneth E. Jansenc     the cross product of two vectors in the plane of the 2-d
195*59599516SKenneth E. Jansenc     boundary face.
196*59599516SKenneth E. Jansenc
197*59599516SKenneth E. Jansen      if(lcsyst.eq.1) then      ! set to curl into element all others out
198*59599516SKenneth E. Jansen         ipt2=2
199*59599516SKenneth E. Jansen         ipt3=3
200*59599516SKenneth E. Jansen      elseif(lcsyst.eq.2) then
201*59599516SKenneth E. Jansen         ipt2=4
202*59599516SKenneth E. Jansen         ipt3=2
203*59599516SKenneth E. Jansen      elseif(lcsyst.eq.3) then
204*59599516SKenneth E. Jansen         ipt2=3
205*59599516SKenneth E. Jansen         ipt3=2
206*59599516SKenneth E. Jansen      elseif(lcsyst.eq.4) then
207*59599516SKenneth E. Jansen         ipt2=2
208*59599516SKenneth E. Jansen         ipt3=4
209*59599516SKenneth E. Jansen      elseif(lcsyst.eq.5) then
210*59599516SKenneth E. Jansen         ipt2=4
211*59599516SKenneth E. Jansen         ipt3=2
212*59599516SKenneth E. Jansen      elseif(lcsyst.eq.6) then
213*59599516SKenneth E. Jansen         ipt2=2
214*59599516SKenneth E. Jansen         ipt3=5
215*59599516SKenneth E. Jansen      endif
216*59599516SKenneth E. Jansen      v1 = xlb(:,ipt2,:) - xlb(:,1,:)
217*59599516SKenneth E. Jansen      v2 = xlb(:,ipt3,:) - xlb(:,1,:)
218*59599516SKenneth E. Jansenc
219*59599516SKenneth E. Jansenc compute cross product
220*59599516SKenneth E. Jansenc
221*59599516SKenneth E. Jansen      temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3)
222*59599516SKenneth E. Jansen      temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3)
223*59599516SKenneth E. Jansen      temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2)
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansenc mag is area for quads, twice area for tris
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen      temp       = one / sqrt ( temp1**2 + temp2**2 + temp3**2 )
228*59599516SKenneth E. Jansen      bnorm(:,1) = temp1 * temp
229*59599516SKenneth E. Jansen      bnorm(:,2) = temp2 * temp
230*59599516SKenneth E. Jansen      bnorm(:,3) = temp3 * temp
231*59599516SKenneth E. Jansenc
232*59599516SKenneth E. Jansen
233*59599516SKenneth E. Jansen      if (lcsyst .eq. 1) then
234*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (four*temp)
235*59599516SKenneth E. Jansen      elseif (lcsyst .eq. 2) then
236*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (four*temp)
237*59599516SKenneth E. Jansen      elseif (lcsyst .eq. 3) then
238*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (two*temp)
239*59599516SKenneth E. Jansen      elseif (lcsyst .eq. 4) then
240*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (four*temp)
241*59599516SKenneth E. Jansen      elseif (lcsyst .eq. 5) then
242*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (four*temp)
243*59599516SKenneth E. Jansen      elseif (lcsyst .eq. 6) then
244*59599516SKenneth E. Jansen         WdetJb     = Qwtb(lcsyst,intp) / (two*temp)
245*59599516SKenneth E. Jansen      endif
246*59599516SKenneth E. Jansenc
247*59599516SKenneth E. Jansenc.... -------------------------->  Grad-V  <----------------------------
248*59599516SKenneth E. Jansenc
249*59599516SKenneth E. Jansenc.... compute grad-v for Navier-Stokes terms
250*59599516SKenneth E. Jansenc
251*59599516SKenneth E. Jansen      if (Navier .eq. 1) then
252*59599516SKenneth E. Jansenc
253*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient
254*59599516SKenneth E. Jansenc
255*59599516SKenneth E. Jansen         dxidxb(:,1,1) =   dxdxib(:,2,2) * dxdxib(:,3,3)
256*59599516SKenneth E. Jansen     &        - dxdxib(:,3,2) * dxdxib(:,2,3)
257*59599516SKenneth E. Jansen         dxidxb(:,1,2) =   dxdxib(:,3,2) * dxdxib(:,1,3)
258*59599516SKenneth E. Jansen     &        - dxdxib(:,1,2) * dxdxib(:,3,3)
259*59599516SKenneth E. Jansen         dxidxb(:,1,3) =   dxdxib(:,1,2) * dxdxib(:,2,3)
260*59599516SKenneth E. Jansen     &        - dxdxib(:,1,3) * dxdxib(:,2,2)
261*59599516SKenneth E. Jansen         temp          = one / ( dxidxb(:,1,1) * dxdxib(:,1,1)
262*59599516SKenneth E. Jansen     &        + dxidxb(:,1,2) * dxdxib(:,2,1)
263*59599516SKenneth E. Jansen     &        + dxidxb(:,1,3) * dxdxib(:,3,1) )
264*59599516SKenneth E. Jansen         dxidxb(:,1,1) =  dxidxb(:,1,1) * temp
265*59599516SKenneth E. Jansen         dxidxb(:,1,2) =  dxidxb(:,1,2) * temp
266*59599516SKenneth E. Jansen         dxidxb(:,1,3) =  dxidxb(:,1,3) * temp
267*59599516SKenneth E. Jansen         dxidxb(:,2,1) = (dxdxib(:,2,3) * dxdxib(:,3,1)
268*59599516SKenneth E. Jansen     &        - dxdxib(:,2,1) * dxdxib(:,3,3)) * temp
269*59599516SKenneth E. Jansen         dxidxb(:,2,2) = (dxdxib(:,1,1) * dxdxib(:,3,3)
270*59599516SKenneth E. Jansen     &        - dxdxib(:,3,1) * dxdxib(:,1,3)) * temp
271*59599516SKenneth E. Jansen         dxidxb(:,2,3) = (dxdxib(:,2,1) * dxdxib(:,1,3)
272*59599516SKenneth E. Jansen     &        - dxdxib(:,1,1) * dxdxib(:,2,3)) * temp
273*59599516SKenneth E. Jansen         dxidxb(:,3,1) = (dxdxib(:,2,1) * dxdxib(:,3,2)
274*59599516SKenneth E. Jansen     &        - dxdxib(:,2,2) * dxdxib(:,3,1)) * temp
275*59599516SKenneth E. Jansen         dxidxb(:,3,2) = (dxdxib(:,3,1) * dxdxib(:,1,2)
276*59599516SKenneth E. Jansen     &        - dxdxib(:,1,1) * dxdxib(:,3,2)) * temp
277*59599516SKenneth E. Jansen         dxidxb(:,3,3) = (dxdxib(:,1,1) * dxdxib(:,2,2)
278*59599516SKenneth E. Jansen     &        - dxdxib(:,1,2) * dxdxib(:,2,1)) * temp
279*59599516SKenneth E. Jansenc
280*59599516SKenneth E. Jansenc.... compute local-grad-Y
281*59599516SKenneth E. Jansenc
282*59599516SKenneth E. Jansen         gl1yi = zero
283*59599516SKenneth E. Jansen         gl2yi = zero
284*59599516SKenneth E. Jansen         gl3yi = zero
285*59599516SKenneth E. Jansenc
286*59599516SKenneth E. Jansen         do n = 1, nshl
287*59599516SKenneth E. Jansen            gl1yi(:,1) = gl1yi(:,1) + shglb(:,1,n) * yl(:,n,1)
288*59599516SKenneth E. Jansen            gl1yi(:,2) = gl1yi(:,2) + shglb(:,1,n) * yl(:,n,2)
289*59599516SKenneth E. Jansen            gl1yi(:,3) = gl1yi(:,3) + shglb(:,1,n) * yl(:,n,3)
290*59599516SKenneth E. Jansen            gl1yi(:,4) = gl1yi(:,4) + shglb(:,1,n) * yl(:,n,4)
291*59599516SKenneth E. Jansenc
292*59599516SKenneth E. Jansen            gl2yi(:,1) = gl2yi(:,1) + shglb(:,2,n) * yl(:,n,1)
293*59599516SKenneth E. Jansen            gl2yi(:,2) = gl2yi(:,2) + shglb(:,2,n) * yl(:,n,2)
294*59599516SKenneth E. Jansen            gl2yi(:,3) = gl2yi(:,3) + shglb(:,2,n) * yl(:,n,3)
295*59599516SKenneth E. Jansen            gl2yi(:,4) = gl2yi(:,4) + shglb(:,2,n) * yl(:,n,4)
296*59599516SKenneth E. Jansenc
297*59599516SKenneth E. Jansen            gl3yi(:,1) = gl3yi(:,1) + shglb(:,3,n) * yl(:,n,1)
298*59599516SKenneth E. Jansen            gl3yi(:,2) = gl3yi(:,2) + shglb(:,3,n) * yl(:,n,2)
299*59599516SKenneth E. Jansen            gl3yi(:,3) = gl3yi(:,3) + shglb(:,3,n) * yl(:,n,3)
300*59599516SKenneth E. Jansen            gl3yi(:,4) = gl3yi(:,4) + shglb(:,3,n) * yl(:,n,4)
301*59599516SKenneth E. Jansen         enddo
302*59599516SKenneth E. Jansenc
303*59599516SKenneth E. Jansenc.... convert local-grads to global-grads
304*59599516SKenneth E. Jansenc
305*59599516SKenneth E. Jansen         g1yi(:,2) = dxidxb(:,1,1) * gl1yi(:,2) +
306*59599516SKenneth E. Jansen     &        dxidxb(:,2,1) * gl2yi(:,2) +
307*59599516SKenneth E. Jansen     &        dxidxb(:,3,1) * gl3yi(:,2)
308*59599516SKenneth E. Jansen         g2yi(:,2) = dxidxb(:,1,2) * gl1yi(:,2) +
309*59599516SKenneth E. Jansen     &        dxidxb(:,2,2) * gl2yi(:,2) +
310*59599516SKenneth E. Jansen     &        dxidxb(:,3,2) * gl3yi(:,2)
311*59599516SKenneth E. Jansen         g3yi(:,2) = dxidxb(:,1,3) * gl1yi(:,2) +
312*59599516SKenneth E. Jansen     &        dxidxb(:,2,3) * gl2yi(:,2) +
313*59599516SKenneth E. Jansen     &        dxidxb(:,3,3) * gl3yi(:,2)
314*59599516SKenneth E. Jansenc
315*59599516SKenneth E. Jansen         g1yi(:,3) = dxidxb(:,1,1) * gl1yi(:,3) +
316*59599516SKenneth E. Jansen     &        dxidxb(:,2,1) * gl2yi(:,3) +
317*59599516SKenneth E. Jansen     &        dxidxb(:,3,1) * gl3yi(:,3)
318*59599516SKenneth E. Jansen         g2yi(:,3) = dxidxb(:,1,2) * gl1yi(:,3) +
319*59599516SKenneth E. Jansen     &        dxidxb(:,2,2) * gl2yi(:,3) +
320*59599516SKenneth E. Jansen     &        dxidxb(:,3,2) * gl3yi(:,3)
321*59599516SKenneth E. Jansen         g3yi(:,3) = dxidxb(:,1,3) * gl1yi(:,3) +
322*59599516SKenneth E. Jansen     &        dxidxb(:,2,3) * gl2yi(:,3) +
323*59599516SKenneth E. Jansen     &        dxidxb(:,3,3) * gl3yi(:,3)
324*59599516SKenneth E. Jansenc
325*59599516SKenneth E. Jansen         g1yi(:,4) = dxidxb(:,1,1) * gl1yi(:,4) +
326*59599516SKenneth E. Jansen     &        dxidxb(:,2,1) * gl2yi(:,4) +
327*59599516SKenneth E. Jansen     &        dxidxb(:,3,1) * gl3yi(:,4)
328*59599516SKenneth E. Jansen         g2yi(:,4) = dxidxb(:,1,2) * gl1yi(:,4) +
329*59599516SKenneth E. Jansen     &        dxidxb(:,2,2) * gl2yi(:,4) +
330*59599516SKenneth E. Jansen     &        dxidxb(:,3,2) * gl3yi(:,4)
331*59599516SKenneth E. Jansen         g3yi(:,4) = dxidxb(:,1,3) * gl1yi(:,4) +
332*59599516SKenneth E. Jansen     &        dxidxb(:,2,3) * gl2yi(:,4) +
333*59599516SKenneth E. Jansen     &        dxidxb(:,3,3) * gl3yi(:,4)
334*59599516SKenneth E. Jansenc
335*59599516SKenneth E. Jansenc.... end grad-v
336*59599516SKenneth E. Jansenc
337*59599516SKenneth E. Jansen      endif
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansenc
340*59599516SKenneth E. Jansenc.... mass flux
341*59599516SKenneth E. Jansenc
342*59599516SKenneth E. Jansen      unm = bnorm(:,1) * u1 +bnorm(:,2) * u2  +bnorm(:,3) * u3
343*59599516SKenneth E. Jansen! no rho in continuity eq.
344*59599516SKenneth E. Jansen
345*59599516SKenneth E. Jansen
346*59599516SKenneth E. Jansenc
347*59599516SKenneth E. Jansenc.... viscous flux
348*59599516SKenneth E. Jansenc
349*59599516SKenneth E. Jansen      tau1n = bnorm(:,1) * two * rmu *  g1yi(:,2)
350*59599516SKenneth E. Jansen     &     + bnorm(:,2) *      (rmu * (g2yi(:,2) + g1yi(:,3)))
351*59599516SKenneth E. Jansen     &     + bnorm(:,3) *      (rmu * (g3yi(:,2) + g1yi(:,4)))
352*59599516SKenneth E. Jansen      tau2n = bnorm(:,1) *      (rmu * (g2yi(:,2) + g1yi(:,3)))
353*59599516SKenneth E. Jansen     &     + bnorm(:,2) * two * rmu *  g2yi(:,3)
354*59599516SKenneth E. Jansen     &     + bnorm(:,3) *      (rmu * (g3yi(:,3) + g2yi(:,4)))
355*59599516SKenneth E. Jansen      tau3n = bnorm(:,1) *      (rmu * (g3yi(:,2) + g1yi(:,4)))
356*59599516SKenneth E. Jansen     &     + bnorm(:,2) *      (rmu * (g3yi(:,3) + g2yi(:,4)))
357*59599516SKenneth E. Jansen     &     + bnorm(:,3) * two * rmu *  g3yi(:,4)
358*59599516SKenneth E. Jansenc
359*59599516SKenneth E. Jansen      temp1 = bnorm(:,1) * tau1n
360*59599516SKenneth E. Jansen     &     + bnorm(:,2) * tau2n
361*59599516SKenneth E. Jansen     &     + bnorm(:,3) * tau3n
362*59599516SKenneth E. Jansen
363*59599516SKenneth E. Jansen      pres  = pres - temp1
364*59599516SKenneth E. Jansen
365*59599516SKenneth E. Jansen      tau1n = tau1n - bnorm(:,1) * temp1
366*59599516SKenneth E. Jansen      tau2n = tau2n - bnorm(:,2) * temp1
367*59599516SKenneth E. Jansen      tau3n = tau3n - bnorm(:,3) * temp1
368*59599516SKenneth E. Jansen
369*59599516SKenneth E. Jansenc
370*59599516SKenneth E. Jansenc.... viscous flux control
371*59599516SKenneth E. Jansenc
372*59599516SKenneth E. Jansenc     if iviscflux = 1, we consider the viscous flux on the RHS
373*59599516SKenneth E. Jansenc     otherwise, if iviscflux = 0, we eliminate this term: stability in
374*59599516SKenneth E. Jansenc     pressure-flow coupled boundaries for cardiovascular applications in
375*59599516SKenneth E. Jansenc     situations of flow reversal
376*59599516SKenneth E. Jansen      tau1n = tau1n * iviscflux
377*59599516SKenneth E. Jansen      tau2n = tau2n * iviscflux
378*59599516SKenneth E. Jansen      tau3n = tau3n * iviscflux
379*59599516SKenneth E. Jansen
380*59599516SKenneth E. Jansen      vdot = zero
381*59599516SKenneth E. Jansen      rlKwall = zero
382*59599516SKenneth E. Jansen      if (intp.eq.ngaussb)   then    ! do this only for the last gauss point
383*59599516SKenneth E. Jansen        rKwall_glob = zero
384*59599516SKenneth E. Jansen      endif
385*59599516SKenneth E. Jansen
386*59599516SKenneth E. Jansen      if(ideformwall.eq.1) then
387*59599516SKenneth E. Jansen      do n = 1, nshlb
388*59599516SKenneth E. Jansen         nodlcl = lnode(n)
389*59599516SKenneth E. Jansenc
390*59599516SKenneth E. Jansen         vdot(:,1) = vdot(:,1) + shpb(:,nodlcl) * acl(:,nodlcl,2)
391*59599516SKenneth E. Jansen         vdot(:,2) = vdot(:,2) + shpb(:,nodlcl) * acl(:,nodlcl,3)
392*59599516SKenneth E. Jansen         vdot(:,3) = vdot(:,3) + shpb(:,nodlcl) * acl(:,nodlcl,4)
393*59599516SKenneth E. Jansen
394*59599516SKenneth E. Jansen      enddo
395*59599516SKenneth E. Jansen      vdot = vdot * thicknessvw * rhovw
396*59599516SKenneth E. Jansenc
397*59599516SKenneth E. Jansenc.... --------------------->  Stiffness matrix & residual  <-----------------
398*59599516SKenneth E. Jansenc
399*59599516SKenneth E. Jansenc.... B^t * D * B formulation for plane stress enhanced membrane
400*59599516SKenneth E. Jansenc
401*59599516SKenneth E. Jansenc
402*59599516SKenneth E. Jansenc.... rotation matrix
403*59599516SKenneth E. Jansenc
404*59599516SKenneth E. Jansen      v1 = xlb(:,ipt2,:) - xlb(:,1,:)
405*59599516SKenneth E. Jansen      temp       = one / sqrt ( v1(:,1)**2 + v1(:,2)**2 + v1(:,3)**2 )
406*59599516SKenneth E. Jansen      v1(:,1) = v1(:,1) * temp
407*59599516SKenneth E. Jansen      v1(:,2) = v1(:,2) * temp
408*59599516SKenneth E. Jansen      v1(:,3) = v1(:,3) * temp
409*59599516SKenneth E. Jansen
410*59599516SKenneth E. Jansen      v2 = xlb(:,ipt3,:) - xlb(:,1,:)
411*59599516SKenneth E. Jansen
412*59599516SKenneth E. Jansenc     compute cross product
413*59599516SKenneth E. Jansen      temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3)
414*59599516SKenneth E. Jansen      temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3)
415*59599516SKenneth E. Jansen      temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2)
416*59599516SKenneth E. Jansen
417*59599516SKenneth E. Jansen      temp       = one / sqrt ( temp1**2 + temp2**2 + temp3**2 )
418*59599516SKenneth E. Jansen      v3(:,1) = temp1 * temp
419*59599516SKenneth E. Jansen      v3(:,2) = temp2 * temp
420*59599516SKenneth E. Jansen      v3(:,3) = temp3 * temp
421*59599516SKenneth E. Jansen
422*59599516SKenneth E. Jansenc     cross product again for v2
423*59599516SKenneth E. Jansen      temp1 = v3(:,2) * v1(:,3) - v1(:,2) * v3(:,3)
424*59599516SKenneth E. Jansen      temp2 = v1(:,1) * v3(:,3) - v3(:,1) * v1(:,3)
425*59599516SKenneth E. Jansen      temp3 = v3(:,1) * v1(:,2) - v1(:,1) * v3(:,2)
426*59599516SKenneth E. Jansen
427*59599516SKenneth E. Jansen      temp       = one / sqrt ( temp1**2 + temp2**2 + temp3**2 )
428*59599516SKenneth E. Jansen      v2(:,1) = temp1 * temp
429*59599516SKenneth E. Jansen      v2(:,2) = temp2 * temp
430*59599516SKenneth E. Jansen      v2(:,3) = temp3 * temp
431*59599516SKenneth E. Jansen
432*59599516SKenneth E. Jansen      do j = 1, nsd
433*59599516SKenneth E. Jansen         rotnodallocal(:,1,j) = v1(:,j)
434*59599516SKenneth E. Jansen         rotnodallocal(:,2,j) = v2(:,j)
435*59599516SKenneth E. Jansen         rotnodallocal(:,3,j) = v3(:,j)
436*59599516SKenneth E. Jansen      enddo
437*59599516SKenneth E. Jansen
438*59599516SKenneth E. Jansenc
439*59599516SKenneth E. Jansenc.... rotated coordinates
440*59599516SKenneth E. Jansenc
441*59599516SKenneth E. Jansen      x1rot = zero
442*59599516SKenneth E. Jansen      x2rot = zero
443*59599516SKenneth E. Jansen      x3rot = zero
444*59599516SKenneth E. Jansen
445*59599516SKenneth E. Jansen      do i = 1, nsd
446*59599516SKenneth E. Jansen         do j = 1, nsd
447*59599516SKenneth E. Jansen            x1rot(:,i) = x1rot(:,i)+rotnodallocal(:,i,j)*xlb(:,1,j)
448*59599516SKenneth E. Jansen            x2rot(:,i) = x2rot(:,i)+rotnodallocal(:,i,j)*xlb(:,ipt2,j)
449*59599516SKenneth E. Jansen            x3rot(:,i) = x3rot(:,i)+rotnodallocal(:,i,j)*xlb(:,ipt3,j)
450*59599516SKenneth E. Jansen         enddo
451*59599516SKenneth E. Jansen      enddo
452*59599516SKenneth E. Jansen
453*59599516SKenneth E. Jansenc
454*59599516SKenneth E. Jansenc.... B matrices
455*59599516SKenneth E. Jansenc
456*59599516SKenneth E. Jansen      B1 = zero
457*59599516SKenneth E. Jansen      B2 = zero
458*59599516SKenneth E. Jansen      B3 = zero
459*59599516SKenneth E. Jansen      detJacrot = (x2rot(:,1)-x1rot(:,1)) * (x3rot(:,2)-x1rot(:,2)) -
460*59599516SKenneth E. Jansen     &     (x3rot(:,1)-x1rot(:,1)) * (x2rot(:,2)-x1rot(:,2))
461*59599516SKenneth E. Jansen
462*59599516SKenneth E. Jansen      B1(:,1,1) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:)
463*59599516SKenneth E. Jansen      B1(:,2,2) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:)
464*59599516SKenneth E. Jansen      B1(:,3,1) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:)
465*59599516SKenneth E. Jansen      B1(:,3,2) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:)
466*59599516SKenneth E. Jansen      B1(:,4,3) = (x2rot(:,2)-x3rot(:,2))/detJacrot(:)
467*59599516SKenneth E. Jansen      B1(:,5,3) = (x3rot(:,1)-x2rot(:,1))/detJacrot(:)
468*59599516SKenneth E. Jansen
469*59599516SKenneth E. Jansen      B2(:,1,1) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:)
470*59599516SKenneth E. Jansen      B2(:,2,2) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:)
471*59599516SKenneth E. Jansen      B2(:,3,1) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:)
472*59599516SKenneth E. Jansen      B2(:,3,2) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:)
473*59599516SKenneth E. Jansen      B2(:,4,3) = (x3rot(:,2)-x1rot(:,2))/detJacrot(:)
474*59599516SKenneth E. Jansen      B2(:,5,3) = (x1rot(:,1)-x3rot(:,1))/detJacrot(:)
475*59599516SKenneth E. Jansen
476*59599516SKenneth E. Jansen      B3(:,1,1) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:)
477*59599516SKenneth E. Jansen      B3(:,2,2) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:)
478*59599516SKenneth E. Jansen      B3(:,3,1) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:)
479*59599516SKenneth E. Jansen      B3(:,3,2) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:)
480*59599516SKenneth E. Jansen      B3(:,4,3) = (x1rot(:,2)-x2rot(:,2))/detJacrot(:)
481*59599516SKenneth E. Jansen      B3(:,5,3) = (x2rot(:,1)-x1rot(:,1))/detJacrot(:)
482*59599516SKenneth E. Jansen
483*59599516SKenneth E. JansenC      B1 = B1 / detJacrot
484*59599516SKenneth E. JansenC      B2 = B2 / detJacrot
485*59599516SKenneth E. JansenC      B3 = B3 / detJacrot
486*59599516SKenneth E. Jansen
487*59599516SKenneth E. Jansenc
488*59599516SKenneth E. Jansenc.... D matrix
489*59599516SKenneth E. Jansenc
490*59599516SKenneth E. Jansen      Dmatrix = zero
491*59599516SKenneth E. Jansen      temp1 = evw / (1.0d0 - rnuvw*rnuvw)
492*59599516SKenneth E. Jansen      temp2 = rnuvw * temp1
493*59599516SKenneth E. Jansen      temp3 = pt5 * (1.0d0 - rnuvw) * temp1
494*59599516SKenneth E. Jansen      Dmatrix(:,1,1) = temp1
495*59599516SKenneth E. Jansen      Dmatrix(:,1,2) = temp2
496*59599516SKenneth E. Jansen      Dmatrix(:,2,1) = temp2
497*59599516SKenneth E. Jansen      Dmatrix(:,2,2) = temp1
498*59599516SKenneth E. Jansen      Dmatrix(:,3,3) = temp3
499*59599516SKenneth E. Jansen      Dmatrix(:,4,4) = temp3*rshearconstantvw
500*59599516SKenneth E. Jansen      Dmatrix(:,5,5) = temp3*rshearconstantvw
501*59599516SKenneth E. Jansenc
502*59599516SKenneth E. Jansenc.... D * [B1|B2|B3]
503*59599516SKenneth E. Jansenc
504*59599516SKenneth E. Jansen      DtimesB1 = zero
505*59599516SKenneth E. Jansen      DtimesB2 = zero
506*59599516SKenneth E. Jansen      DtimesB3 = zero
507*59599516SKenneth E. Jansen      do i = 1, 5
508*59599516SKenneth E. Jansen         do j = 1, 3
509*59599516SKenneth E. Jansen            do k = 1, 5
510*59599516SKenneth E. Jansen               DtimesB1(:,i,j) = DtimesB1(:,i,j)
511*59599516SKenneth E. Jansen     &              + Dmatrix(:,i,k) * B1(:,k,j)
512*59599516SKenneth E. Jansen               DtimesB2(:,i,j) = DtimesB2(:,i,j)
513*59599516SKenneth E. Jansen     &              + Dmatrix(:,i,k) * B2(:,k,j)
514*59599516SKenneth E. Jansen               DtimesB3(:,i,j) = DtimesB3(:,i,j)
515*59599516SKenneth E. Jansen     &              + Dmatrix(:,i,k) * B3(:,k,j)
516*59599516SKenneth E. Jansen            enddo
517*59599516SKenneth E. Jansen         enddo
518*59599516SKenneth E. Jansen      enddo
519*59599516SKenneth E. Jansenc
520*59599516SKenneth E. Jansenc.... [B1|B2|B3]^T * D * [B1|B2|B3]
521*59599516SKenneth E. Jansenc
522*59599516SKenneth E. Jansen      rKwall_local11 = zero
523*59599516SKenneth E. Jansen      rKwall_local12 = zero
524*59599516SKenneth E. Jansen      rKwall_local13 = zero
525*59599516SKenneth E. Jansen      rKwall_local21 = zero
526*59599516SKenneth E. Jansen      rKwall_local22 = zero
527*59599516SKenneth E. Jansen      rKwall_local23 = zero
528*59599516SKenneth E. Jansen      rKwall_local31 = zero
529*59599516SKenneth E. Jansen      rKwall_local32 = zero
530*59599516SKenneth E. Jansen      rKwall_local33 = zero
531*59599516SKenneth E. Jansen
532*59599516SKenneth E. Jansen      do i = 1, 3               ! i is a node index: i=1, nenbl=3
533*59599516SKenneth E. Jansen         do j = 1, 3            ! same is true for j
534*59599516SKenneth E. Jansen            do k = 1, 5
535*59599516SKenneth E. Jansen               rKwall_local11(:,i,j)  = rKwall_local11(:,i,j)
536*59599516SKenneth E. Jansen     &              + B1(:,k,i) * DtimesB1(:,k,j)
537*59599516SKenneth E. Jansen               rKwall_local12(:,i,j)  = rKwall_local12(:,i,j)
538*59599516SKenneth E. Jansen     &              + B1(:,k,i) * DtimesB2(:,k,j)
539*59599516SKenneth E. Jansen               rKwall_local13(:,i,j)  = rKwall_local13(:,i,j)
540*59599516SKenneth E. Jansen     &              + B1(:,k,i) * DtimesB3(:,k,j)
541*59599516SKenneth E. Jansen               rKwall_local21(:,i,j)  = rKwall_local21(:,i,j)
542*59599516SKenneth E. Jansen     &              + B2(:,k,i) * DtimesB1(:,k,j)
543*59599516SKenneth E. Jansen               rKwall_local22(:,i,j)  = rKwall_local22(:,i,j)
544*59599516SKenneth E. Jansen     &              + B2(:,k,i) * DtimesB2(:,k,j)
545*59599516SKenneth E. Jansen               rKwall_local23(:,i,j)  = rKwall_local23(:,i,j)
546*59599516SKenneth E. Jansen     &              + B2(:,k,i) * DtimesB3(:,k,j)
547*59599516SKenneth E. Jansen               rKwall_local31(:,i,j)  = rKwall_local31(:,i,j)
548*59599516SKenneth E. Jansen     &              + B3(:,k,i) * DtimesB1(:,k,j)
549*59599516SKenneth E. Jansen               rKwall_local32(:,i,j)  = rKwall_local32(:,i,j)
550*59599516SKenneth E. Jansen     &              + B3(:,k,i) * DtimesB2(:,k,j)
551*59599516SKenneth E. Jansen               rKwall_local33(:,i,j)  = rKwall_local33(:,i,j)
552*59599516SKenneth E. Jansen     &              + B3(:,k,i) * DtimesB3(:,k,j)
553*59599516SKenneth E. Jansen            enddo
554*59599516SKenneth E. Jansen         enddo
555*59599516SKenneth E. Jansen      enddo
556*59599516SKenneth E. Jansen
557*59599516SKenneth E. Jansenc
558*59599516SKenneth E. Jansenc.... Now we need to rotate each of these submatrices to the global frame
559*59599516SKenneth E. Jansenc
560*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local11, rotnodallocal, rKwall_glob11)
561*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local12, rotnodallocal, rKwall_glob12)
562*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local13, rotnodallocal, rKwall_glob13)
563*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local21, rotnodallocal, rKwall_glob21)
564*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local22, rotnodallocal, rKwall_glob22)
565*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local23, rotnodallocal, rKwall_glob23)
566*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local31, rotnodallocal, rKwall_glob31)
567*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local32, rotnodallocal, rKwall_glob32)
568*59599516SKenneth E. Jansen      call rotatestiff(rKwall_local33, rotnodallocal, rKwall_glob33)
569*59599516SKenneth E. Jansen
570*59599516SKenneth E. Jansenc     multiply the nodal matrices by the area and the thickness
571*59599516SKenneth E. Jansen      do i =1, nsd
572*59599516SKenneth E. Jansen         do j = 1, nsd
573*59599516SKenneth E. Jansen            rKwall_glob11(:,i,j) = rKwall_glob11(:,i,j) * detJacrot(:)
574*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
575*59599516SKenneth E. Jansen            rKwall_glob12(:,i,j) = rKwall_glob12(:,i,j) * detJacrot(:)
576*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
577*59599516SKenneth E. Jansen            rKwall_glob13(:,i,j) = rKwall_glob13(:,i,j) * detJacrot(:)
578*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
579*59599516SKenneth E. Jansen            rKwall_glob21(:,i,j) = rKwall_glob21(:,i,j) * detJacrot(:)
580*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
581*59599516SKenneth E. Jansen            rKwall_glob22(:,i,j) = rKwall_glob22(:,i,j) * detJacrot(:)
582*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
583*59599516SKenneth E. Jansen            rKwall_glob23(:,i,j) = rKwall_glob23(:,i,j) * detJacrot(:)
584*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
585*59599516SKenneth E. Jansen            rKwall_glob31(:,i,j) = rKwall_glob31(:,i,j) * detJacrot(:)
586*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
587*59599516SKenneth E. Jansen            rKwall_glob32(:,i,j) = rKwall_glob32(:,i,j) * detJacrot(:)
588*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
589*59599516SKenneth E. Jansen            rKwall_glob33(:,i,j) = rKwall_glob33(:,i,j) * detJacrot(:)
590*59599516SKenneth E. Jansen     &                           * pt5 * thicknessvw
591*59599516SKenneth E. Jansen         enddo
592*59599516SKenneth E. Jansen      enddo
593*59599516SKenneth E. Jansen
594*59599516SKenneth E. Jansenc
595*59599516SKenneth E. Jansenc.... Final K * u product (in global coordinates) to get the residual
596*59599516SKenneth E. Jansenc
597*59599516SKenneth E. Jansen      do i = 1, 3               ! now i is a spatial index: i=1, nsd=3
598*59599516SKenneth E. Jansen         rlKwall(:,1,1) = rlKwall(:,1,1)
599*59599516SKenneth E. Jansen     &                  + rKwall_glob11(:,1,i) * ul(:,1,i)
600*59599516SKenneth E. Jansen     &                  + rKwall_glob12(:,1,i) * ul(:,2,i)
601*59599516SKenneth E. Jansen     &                  + rKwall_glob13(:,1,i) * ul(:,3,i)
602*59599516SKenneth E. Jansen         rlKwall(:,1,2) = rlKwall(:,1,2)
603*59599516SKenneth E. Jansen     &                  + rKwall_glob11(:,2,i) * ul(:,1,i)
604*59599516SKenneth E. Jansen     &                  + rKwall_glob12(:,2,i) * ul(:,2,i)
605*59599516SKenneth E. Jansen     &                  + rKwall_glob13(:,2,i) * ul(:,3,i)
606*59599516SKenneth E. Jansen         rlKwall(:,1,3) = rlKwall(:,1,3)
607*59599516SKenneth E. Jansen     &                  + rKwall_glob11(:,3,i) * ul(:,1,i)
608*59599516SKenneth E. Jansen     &                  + rKwall_glob12(:,3,i) * ul(:,2,i)
609*59599516SKenneth E. Jansen     &                  + rKwall_glob13(:,3,i) * ul(:,3,i)
610*59599516SKenneth E. Jansen         rlKwall(:,2,1) = rlKwall(:,2,1)
611*59599516SKenneth E. Jansen     &                  + rKwall_glob21(:,1,i) * ul(:,1,i)
612*59599516SKenneth E. Jansen     &                  + rKwall_glob22(:,1,i) * ul(:,2,i)
613*59599516SKenneth E. Jansen     &                  + rKwall_glob23(:,1,i) * ul(:,3,i)
614*59599516SKenneth E. Jansen         rlKwall(:,2,2) = rlKwall(:,2,2)
615*59599516SKenneth E. Jansen     &                  + rKwall_glob21(:,2,i) * ul(:,1,i)
616*59599516SKenneth E. Jansen     &                  + rKwall_glob22(:,2,i) * ul(:,2,i)
617*59599516SKenneth E. Jansen     &                  + rKwall_glob23(:,2,i) * ul(:,3,i)
618*59599516SKenneth E. Jansen         rlKwall(:,2,3) = rlKwall(:,2,3)
619*59599516SKenneth E. Jansen     &                  + rKwall_glob21(:,3,i) * ul(:,1,i)
620*59599516SKenneth E. Jansen     &                  + rKwall_glob22(:,3,i) * ul(:,2,i)
621*59599516SKenneth E. Jansen     &                  + rKwall_glob23(:,3,i) * ul(:,3,i)
622*59599516SKenneth E. Jansen         rlKwall(:,3,1) = rlKwall(:,3,1)
623*59599516SKenneth E. Jansen     &                  + rKwall_glob31(:,1,i) * ul(:,1,i)
624*59599516SKenneth E. Jansen     &                  + rKwall_glob32(:,1,i) * ul(:,2,i)
625*59599516SKenneth E. Jansen     &                  + rKwall_glob33(:,1,i) * ul(:,3,i)
626*59599516SKenneth E. Jansen         rlKwall(:,3,2) = rlKwall(:,3,2)
627*59599516SKenneth E. Jansen     &                  + rKwall_glob31(:,2,i) * ul(:,1,i)
628*59599516SKenneth E. Jansen     &                  + rKwall_glob32(:,2,i) * ul(:,2,i)
629*59599516SKenneth E. Jansen     &                  + rKwall_glob33(:,2,i) * ul(:,3,i)
630*59599516SKenneth E. Jansen         rlKwall(:,3,3) = rlKwall(:,3,3)
631*59599516SKenneth E. Jansen     &                  + rKwall_glob31(:,3,i) * ul(:,1,i)
632*59599516SKenneth E. Jansen     &                  + rKwall_glob32(:,3,i) * ul(:,2,i)
633*59599516SKenneth E. Jansen     &                  + rKwall_glob33(:,3,i) * ul(:,3,i)
634*59599516SKenneth E. Jansen      enddo
635*59599516SKenneth E. Jansenc
636*59599516SKenneth E. Jansenc.... --------------> End of Stiffness matrix & residual  <-----------------
637*59599516SKenneth E. Jansenc
638*59599516SKenneth E. Jansen
639*59599516SKenneth E. Jansenc
640*59599516SKenneth E. Jansenc.... -----> Wall Stiffness and Mass matrices for implicit LHS  <-----------
641*59599516SKenneth E. Jansenc
642*59599516SKenneth E. Jansen
643*59599516SKenneth E. Jansenc....  Here we just add the mass matrix contribution.  The stiffness contribution
644*59599516SKenneth E. Jansenc....  is added in e3b
645*59599516SKenneth E. Jansen
646*59599516SKenneth E. Jansenc      lhmFct = almi * (one - flmpl)      Maybe we have to define flmplW: lumped
647*59599516SKenneth E. Jansen                                        ! mass parameter for the wall
648*59599516SKenneth E. Jansen      lhmFctvw = almi * (one - flmpl)
649*59599516SKenneth E. Jansenc
650*59599516SKenneth E. Jansenc.... scale variables for efficiency
651*59599516SKenneth E. Jansenc
652*59599516SKenneth E. Jansen      tsFctvw     = lhmFctvw * WdetJb * rhovw * thicknessvw
653*59599516SKenneth E. Jansenc
654*59599516SKenneth E. Jansenc.... compute mass and convection terms
655*59599516SKenneth E. Jansenc
656*59599516SKenneth E. Jansenc.... NOTE:  the wall mass contributions should only have 3 nodal components
657*59599516SKenneth E. Jansenc.... since the fourth node is an interior node... therefore, the loops should
658*59599516SKenneth E. Jansenc.... be done from 1 to nshlb=3...
659*59599516SKenneth E. Jansen
660*59599516SKenneth E. Jansen      do b = 1, nshlb
661*59599516SKenneth E. Jansen         do aa = 1, nshlb
662*59599516SKenneth E. Jansen            tmp1 = tsFctvw * shpb(:,aa) * shpb(:,b)
663*59599516SKenneth E. Jansenc
664*59599516SKenneth E. Jansenc           tmp1=alpha_m*(1-lmp)*WdetJ*N^aN^b*rho*thickness   the time term
665*59599516SKenneth E. Jansenc
666*59599516SKenneth E. Jansen            xKebe(:,1,aa,b) = xKebe(:,1,aa,b) + tmp1
667*59599516SKenneth E. Jansen            xKebe(:,5,aa,b) = xKebe(:,5,aa,b) + tmp1
668*59599516SKenneth E. Jansen            xKebe(:,9,aa,b) = xKebe(:,9,aa,b) + tmp1
669*59599516SKenneth E. Jansen         enddo
670*59599516SKenneth E. Jansen      enddo
671*59599516SKenneth E. Jansen
672*59599516SKenneth E. Jansenc
673*59599516SKenneth E. Jansenc.... assemble the nodal stiffness into the element stiffness matrix rKwall_glob
674*59599516SKenneth E. Jansenc
675*59599516SKenneth E. Jansenc.... We have passed the integer intp to make this operation only once: we are
676*59599516SKenneth E. Jansenc.... not using the gauss points structure to compute the stiffness of the wall
677*59599516SKenneth E. Jansenc.... elements, so we don't want to be redundant and calculate ngaussb times the
678*59599516SKenneth E. Jansenc.... stiffness matrix which is constant for linear triangles...
679*59599516SKenneth E. Jansen
680*59599516SKenneth E. Jansenc.... This is ugly, but I will fix it later...
681*59599516SKenneth E. Jansen
682*59599516SKenneth E. Jansen      if (intp.eq.ngaussb)   then    ! do this only for the last gauss point
683*59599516SKenneth E. Jansen        rKwall_glob(:,1,1,1) = rKwall_glob11(:,1,1)
684*59599516SKenneth E. Jansen        rKwall_glob(:,2,1,1) = rKwall_glob11(:,1,2)
685*59599516SKenneth E. Jansen        rKwall_glob(:,3,1,1) = rKwall_glob11(:,1,3)
686*59599516SKenneth E. Jansen        rKwall_glob(:,4,1,1) = rKwall_glob11(:,2,1)
687*59599516SKenneth E. Jansen        rKwall_glob(:,5,1,1) = rKwall_glob11(:,2,2)
688*59599516SKenneth E. Jansen        rKwall_glob(:,6,1,1) = rKwall_glob11(:,2,3)
689*59599516SKenneth E. Jansen        rKwall_glob(:,7,1,1) = rKwall_glob11(:,3,1)
690*59599516SKenneth E. Jansen        rKwall_glob(:,8,1,1) = rKwall_glob11(:,3,2)
691*59599516SKenneth E. Jansen        rKwall_glob(:,9,1,1) = rKwall_glob11(:,3,3)
692*59599516SKenneth E. Jansen
693*59599516SKenneth E. Jansen        rKwall_glob(:,1,1,2) = rKwall_glob12(:,1,1)
694*59599516SKenneth E. Jansen        rKwall_glob(:,2,1,2) = rKwall_glob12(:,1,2)
695*59599516SKenneth E. Jansen        rKwall_glob(:,3,1,2) = rKwall_glob12(:,1,3)
696*59599516SKenneth E. Jansen        rKwall_glob(:,4,1,2) = rKwall_glob12(:,2,1)
697*59599516SKenneth E. Jansen        rKwall_glob(:,5,1,2) = rKwall_glob12(:,2,2)
698*59599516SKenneth E. Jansen        rKwall_glob(:,6,1,2) = rKwall_glob12(:,2,3)
699*59599516SKenneth E. Jansen        rKwall_glob(:,7,1,2) = rKwall_glob12(:,3,1)
700*59599516SKenneth E. Jansen        rKwall_glob(:,8,1,2) = rKwall_glob12(:,3,2)
701*59599516SKenneth E. Jansen        rKwall_glob(:,9,1,2) = rKwall_glob12(:,3,3)
702*59599516SKenneth E. Jansen
703*59599516SKenneth E. Jansen        rKwall_glob(:,1,1,3) = rKwall_glob13(:,1,1)
704*59599516SKenneth E. Jansen        rKwall_glob(:,2,1,3) = rKwall_glob13(:,1,2)
705*59599516SKenneth E. Jansen        rKwall_glob(:,3,1,3) = rKwall_glob13(:,1,3)
706*59599516SKenneth E. Jansen        rKwall_glob(:,4,1,3) = rKwall_glob13(:,2,1)
707*59599516SKenneth E. Jansen        rKwall_glob(:,5,1,3) = rKwall_glob13(:,2,2)
708*59599516SKenneth E. Jansen        rKwall_glob(:,6,1,3) = rKwall_glob13(:,2,3)
709*59599516SKenneth E. Jansen        rKwall_glob(:,7,1,3) = rKwall_glob13(:,3,1)
710*59599516SKenneth E. Jansen        rKwall_glob(:,8,1,3) = rKwall_glob13(:,3,2)
711*59599516SKenneth E. Jansen        rKwall_glob(:,9,1,3) = rKwall_glob13(:,3,3)
712*59599516SKenneth E. Jansen
713*59599516SKenneth E. Jansen        rKwall_glob(:,1,2,1) = rKwall_glob21(:,1,1)
714*59599516SKenneth E. Jansen        rKwall_glob(:,2,2,1) = rKwall_glob21(:,1,2)
715*59599516SKenneth E. Jansen        rKwall_glob(:,3,2,1) = rKwall_glob21(:,1,3)
716*59599516SKenneth E. Jansen        rKwall_glob(:,4,2,1) = rKwall_glob21(:,2,1)
717*59599516SKenneth E. Jansen        rKwall_glob(:,5,2,1) = rKwall_glob21(:,2,2)
718*59599516SKenneth E. Jansen        rKwall_glob(:,6,2,1) = rKwall_glob21(:,2,3)
719*59599516SKenneth E. Jansen        rKwall_glob(:,7,2,1) = rKwall_glob21(:,3,1)
720*59599516SKenneth E. Jansen        rKwall_glob(:,8,2,1) = rKwall_glob21(:,3,2)
721*59599516SKenneth E. Jansen        rKwall_glob(:,9,2,1) = rKwall_glob21(:,3,3)
722*59599516SKenneth E. Jansen
723*59599516SKenneth E. Jansen        rKwall_glob(:,1,2,2) = rKwall_glob22(:,1,1)
724*59599516SKenneth E. Jansen        rKwall_glob(:,2,2,2) = rKwall_glob22(:,1,2)
725*59599516SKenneth E. Jansen        rKwall_glob(:,3,2,2) = rKwall_glob22(:,1,3)
726*59599516SKenneth E. Jansen        rKwall_glob(:,4,2,2) = rKwall_glob22(:,2,1)
727*59599516SKenneth E. Jansen        rKwall_glob(:,5,2,2) = rKwall_glob22(:,2,2)
728*59599516SKenneth E. Jansen        rKwall_glob(:,6,2,2) = rKwall_glob22(:,2,3)
729*59599516SKenneth E. Jansen        rKwall_glob(:,7,2,2) = rKwall_glob22(:,3,1)
730*59599516SKenneth E. Jansen        rKwall_glob(:,8,2,2) = rKwall_glob22(:,3,2)
731*59599516SKenneth E. Jansen        rKwall_glob(:,9,2,2) = rKwall_glob22(:,3,3)
732*59599516SKenneth E. Jansen
733*59599516SKenneth E. Jansen        rKwall_glob(:,1,2,3) = rKwall_glob23(:,1,1)
734*59599516SKenneth E. Jansen        rKwall_glob(:,2,2,3) = rKwall_glob23(:,1,2)
735*59599516SKenneth E. Jansen        rKwall_glob(:,3,2,3) = rKwall_glob23(:,1,3)
736*59599516SKenneth E. Jansen        rKwall_glob(:,4,2,3) = rKwall_glob23(:,2,1)
737*59599516SKenneth E. Jansen        rKwall_glob(:,5,2,3) = rKwall_glob23(:,2,2)
738*59599516SKenneth E. Jansen        rKwall_glob(:,6,2,3) = rKwall_glob23(:,2,3)
739*59599516SKenneth E. Jansen        rKwall_glob(:,7,2,3) = rKwall_glob23(:,3,1)
740*59599516SKenneth E. Jansen        rKwall_glob(:,8,2,3) = rKwall_glob23(:,3,2)
741*59599516SKenneth E. Jansen        rKwall_glob(:,9,2,3) = rKwall_glob23(:,3,3)
742*59599516SKenneth E. Jansen
743*59599516SKenneth E. Jansen        rKwall_glob(:,1,3,1) = rKwall_glob31(:,1,1)
744*59599516SKenneth E. Jansen        rKwall_glob(:,2,3,1) = rKwall_glob31(:,1,2)
745*59599516SKenneth E. Jansen        rKwall_glob(:,3,3,1) = rKwall_glob31(:,1,3)
746*59599516SKenneth E. Jansen        rKwall_glob(:,4,3,1) = rKwall_glob31(:,2,1)
747*59599516SKenneth E. Jansen        rKwall_glob(:,5,3,1) = rKwall_glob31(:,2,2)
748*59599516SKenneth E. Jansen        rKwall_glob(:,6,3,1) = rKwall_glob31(:,2,3)
749*59599516SKenneth E. Jansen        rKwall_glob(:,7,3,1) = rKwall_glob31(:,3,1)
750*59599516SKenneth E. Jansen        rKwall_glob(:,8,3,1) = rKwall_glob31(:,3,2)
751*59599516SKenneth E. Jansen        rKwall_glob(:,9,3,1) = rKwall_glob31(:,3,3)
752*59599516SKenneth E. Jansen
753*59599516SKenneth E. Jansen        rKwall_glob(:,1,3,2) = rKwall_glob32(:,1,1)
754*59599516SKenneth E. Jansen        rKwall_glob(:,2,3,2) = rKwall_glob32(:,1,2)
755*59599516SKenneth E. Jansen        rKwall_glob(:,3,3,2) = rKwall_glob32(:,1,3)
756*59599516SKenneth E. Jansen        rKwall_glob(:,4,3,2) = rKwall_glob32(:,2,1)
757*59599516SKenneth E. Jansen        rKwall_glob(:,5,3,2) = rKwall_glob32(:,2,2)
758*59599516SKenneth E. Jansen        rKwall_glob(:,6,3,2) = rKwall_glob32(:,2,3)
759*59599516SKenneth E. Jansen        rKwall_glob(:,7,3,2) = rKwall_glob32(:,3,1)
760*59599516SKenneth E. Jansen        rKwall_glob(:,8,3,2) = rKwall_glob32(:,3,2)
761*59599516SKenneth E. Jansen        rKwall_glob(:,9,3,2) = rKwall_glob32(:,3,3)
762*59599516SKenneth E. Jansen
763*59599516SKenneth E. Jansen        rKwall_glob(:,1,3,3) = rKwall_glob33(:,1,1)
764*59599516SKenneth E. Jansen        rKwall_glob(:,2,3,3) = rKwall_glob33(:,1,2)
765*59599516SKenneth E. Jansen        rKwall_glob(:,3,3,3) = rKwall_glob33(:,1,3)
766*59599516SKenneth E. Jansen        rKwall_glob(:,4,3,3) = rKwall_glob33(:,2,1)
767*59599516SKenneth E. Jansen        rKwall_glob(:,5,3,3) = rKwall_glob33(:,2,2)
768*59599516SKenneth E. Jansen        rKwall_glob(:,6,3,3) = rKwall_glob33(:,2,3)
769*59599516SKenneth E. Jansen        rKwall_glob(:,7,3,3) = rKwall_glob33(:,3,1)
770*59599516SKenneth E. Jansen        rKwall_glob(:,8,3,3) = rKwall_glob33(:,3,2)
771*59599516SKenneth E. Jansen        rKwall_glob(:,9,3,3) = rKwall_glob33(:,3,3)
772*59599516SKenneth E. Jansen
773*59599516SKenneth E. Jansen        rKwall_glob = rKwall_glob*betai*Delt(itseq)*Delt(itseq)*alfi
774*59599516SKenneth E. Jansen
775*59599516SKenneth E. Jansen      else
776*59599516SKenneth E. Jansenc....   nothing happens
777*59599516SKenneth E. Jansen        goto 123
778*59599516SKenneth E. Jansen      endif
779*59599516SKenneth E. Jansen
780*59599516SKenneth E. Jansen123   continue
781*59599516SKenneth E. Jansen
782*59599516SKenneth E. Jansen      endif
783*59599516SKenneth E. Jansenc
784*59599516SKenneth E. Jansenc.... return
785*59599516SKenneth E. Jansenc
786*59599516SKenneth E. Jansen      return
787*59599516SKenneth E. Jansen      end
788*59599516SKenneth E. Jansen
789*59599516SKenneth E. Jansenc---------------------------------------------------------------------
790*59599516SKenneth E. Jansenc
791*59599516SKenneth E. Jansenc     variables for boundary elements
792*59599516SKenneth E. Jansenc
793*59599516SKenneth E. Jansenc---------------------------------------------------------------------
794*59599516SKenneth E. Jansen        subroutine e3bvarSclr (yl,        shdrv,    xlb,
795*59599516SKenneth E. Jansen     &                         shape,     WdetJb,   bnorm,
796*59599516SKenneth E. Jansen     &                         flux,      dwl )
797*59599516SKenneth E. Jansen
798*59599516SKenneth E. Jansen        include "common.h"
799*59599516SKenneth E. Jansenc
800*59599516SKenneth E. Jansen        dimension yl(npro,nshl,ndof),        shdrv(npro,nsd,nshl),
801*59599516SKenneth E. Jansen     &            xlb(npro,nenl,nsd),        shape(npro,nshl),
802*59599516SKenneth E. Jansen     &            WdetJb(npro),              bnorm(npro,nsd),
803*59599516SKenneth E. Jansen     &            flux(npro)
804*59599516SKenneth E. Jansenc
805*59599516SKenneth E. Jansen        dimension dxdxib(npro,nsd,nsd),
806*59599516SKenneth E. Jansen     &            dxidxb(npro,nsd,nsd),      temp(npro),
807*59599516SKenneth E. Jansen     &            temp1(npro),               temp2(npro),
808*59599516SKenneth E. Jansen     &            temp3(npro),
809*59599516SKenneth E. Jansen     &            v1(npro,nsd),              v2(npro,nsd),
810*59599516SKenneth E. Jansen     &            gradSl(npro,nsd),          gradS(npro,nsd)
811*59599516SKenneth E. Jansen
812*59599516SKenneth E. Jansen        real*8    diffus(npro),              dwl(npro,nshl)
813*59599516SKenneth E. Jansen
814*59599516SKenneth E. Jansen        call getdiffsclr(shape,dwl,yl,diffus)
815*59599516SKenneth E. Jansenc
816*59599516SKenneth E. Jansenc.... ---------------------->  Element Metrics  <-----------------------
817*59599516SKenneth E. Jansenc
818*59599516SKenneth E. Jansenc.... compute the deformation gradient
819*59599516SKenneth E. Jansenc
820*59599516SKenneth E. Jansen        dxdxib = zero
821*59599516SKenneth E. Jansenc
822*59599516SKenneth E. Jansen        do n = 1, nenl
823*59599516SKenneth E. Jansen           dxdxib(:,1,1) = dxdxib(:,1,1) + xlb(:,n,1) * shdrv(:,1,n)
824*59599516SKenneth E. Jansen           dxdxib(:,1,2) = dxdxib(:,1,2) + xlb(:,n,1) * shdrv(:,2,n)
825*59599516SKenneth E. Jansen           dxdxib(:,1,3) = dxdxib(:,1,3) + xlb(:,n,1) * shdrv(:,3,n)
826*59599516SKenneth E. Jansen           dxdxib(:,2,1) = dxdxib(:,2,1) + xlb(:,n,2) * shdrv(:,1,n)
827*59599516SKenneth E. Jansen           dxdxib(:,2,2) = dxdxib(:,2,2) + xlb(:,n,2) * shdrv(:,2,n)
828*59599516SKenneth E. Jansen           dxdxib(:,2,3) = dxdxib(:,2,3) + xlb(:,n,2) * shdrv(:,3,n)
829*59599516SKenneth E. Jansen           dxdxib(:,3,1) = dxdxib(:,3,1) + xlb(:,n,3) * shdrv(:,1,n)
830*59599516SKenneth E. Jansen           dxdxib(:,3,2) = dxdxib(:,3,2) + xlb(:,n,3) * shdrv(:,2,n)
831*59599516SKenneth E. Jansen           dxdxib(:,3,3) = dxdxib(:,3,3) + xlb(:,n,3) * shdrv(:,3,n)
832*59599516SKenneth E. Jansen        enddo
833*59599516SKenneth E. Jansenc
834*59599516SKenneth E. Jansenc.... compute the normal to the boundary. This is achieved by taking
835*59599516SKenneth E. Jansenc     the cross product of two vectors in the plane of the 2-d
836*59599516SKenneth E. Jansenc     boundary face.
837*59599516SKenneth E. Jansenc
838*59599516SKenneth E. Jansen        v1 = xlb(:,2,:) - xlb(:,1,:)
839*59599516SKenneth E. Jansen        v2 = xlb(:,3,:) - xlb(:,1,:)
840*59599516SKenneth E. Jansen
841*59599516SKenneth E. Jansenc
842*59599516SKenneth E. Jansenc.....The following are done in order to correct temp1..3
843*59599516SKenneth E. Jansenc     based on the results from compressible code.  This is done only
844*59599516SKenneth E. Jansenc     for wedges, depending on the bounary face.(tri or quad)
845*59599516SKenneth E. Jansenc
846*59599516SKenneth E. Jansen        if (lcsyst .eq. 4) then
847*59599516SKenneth E. Jansen           temp1 = dxdxib(:,2,1) * dxdxib(:,3,3) -
848*59599516SKenneth E. Jansen     &             dxdxib(:,2,3) * dxdxib(:,3,1)
849*59599516SKenneth E. Jansen           temp2 = dxdxib(:,3,1) * dxdxib(:,1,3) -
850*59599516SKenneth E. Jansen     &             dxdxib(:,3,3) * dxdxib(:,1,1)
851*59599516SKenneth E. Jansen           temp3 = dxdxib(:,1,1) * dxdxib(:,2,3) -
852*59599516SKenneth E. Jansen     &             dxdxib(:,1,3) * dxdxib(:,2,1)
853*59599516SKenneth E. Jansen
854*59599516SKenneth E. Jansen        elseif (lcsyst .eq. 1) then
855*59599516SKenneth E. Jansen           temp1 = v1(:,2) * v2(:,3) - v2(:,2) * v1(:,3)
856*59599516SKenneth E. Jansen           temp2 = v2(:,1) * v1(:,3) - v1(:,1) * v2(:,3)
857*59599516SKenneth E. Jansen           temp3 = v1(:,1) * v2(:,2) - v2(:,1) * v1(:,2)
858*59599516SKenneth E. Jansen        else
859*59599516SKenneth E. Jansen           temp1 = - v1(:,2) * v2(:,3) + v2(:,2) * v1(:,3)
860*59599516SKenneth E. Jansen           temp2 = - v2(:,1) * v1(:,3) + v1(:,1) * v2(:,3)
861*59599516SKenneth E. Jansen           temp3 = - v1(:,1) * v2(:,2) + v2(:,1) * v1(:,2)
862*59599516SKenneth E. Jansen        endif
863*59599516SKenneth E. Jansenc
864*59599516SKenneth E. Jansen        temp       = one / sqrt ( temp1**2 + temp2**2 + temp3**2 )
865*59599516SKenneth E. Jansen        bnorm(:,1) = temp1 * temp
866*59599516SKenneth E. Jansen        bnorm(:,2) = temp2 * temp
867*59599516SKenneth E. Jansen        bnorm(:,3) = temp3 * temp
868*59599516SKenneth E. Jansenc
869*59599516SKenneth E. Jansen
870*59599516SKenneth E. Jansen        if (lcsyst .eq. 3) then
871*59599516SKenneth E. Jansen           WdetJb     = (1 - Qwtb(lcsyst,intp)) / (four*temp)
872*59599516SKenneth E. Jansen        elseif (lcsyst .eq. 4) then
873*59599516SKenneth E. Jansen           WdetJb     = Qwtb(lcsyst,intp) / temp
874*59599516SKenneth E. Jansen        else
875*59599516SKenneth E. Jansen           WdetJb     = Qwtb(lcsyst,intp) / (four*temp)
876*59599516SKenneth E. Jansen        endif
877*59599516SKenneth E. Jansenc
878*59599516SKenneth E. Jansenc.... -------------------------->  Grad-V  <----------------------------
879*59599516SKenneth E. Jansenc
880*59599516SKenneth E. Jansenc.... compute grad-v for Navier-Stokes terms
881*59599516SKenneth E. Jansenc
882*59599516SKenneth E. Jansen        if (Navier .eq. 1) then
883*59599516SKenneth E. Jansenc
884*59599516SKenneth E. Jansenc.... compute the inverse of deformation gradient
885*59599516SKenneth E. Jansenc
886*59599516SKenneth E. Jansen          dxidxb(:,1,1) =   dxdxib(:,2,2) * dxdxib(:,3,3)
887*59599516SKenneth E. Jansen     &                    - dxdxib(:,3,2) * dxdxib(:,2,3)
888*59599516SKenneth E. Jansen          dxidxb(:,1,2) =   dxdxib(:,3,2) * dxdxib(:,1,3)
889*59599516SKenneth E. Jansen     &                    - dxdxib(:,1,2) * dxdxib(:,3,3)
890*59599516SKenneth E. Jansen          dxidxb(:,1,3) =   dxdxib(:,1,2) * dxdxib(:,2,3)
891*59599516SKenneth E. Jansen     &                    - dxdxib(:,1,3) * dxdxib(:,2,2)
892*59599516SKenneth E. Jansen          temp          = one / ( dxidxb(:,1,1) * dxdxib(:,1,1)
893*59599516SKenneth E. Jansen     &                          + dxidxb(:,1,2) * dxdxib(:,2,1)
894*59599516SKenneth E. Jansen     &                          + dxidxb(:,1,3) * dxdxib(:,3,1) )
895*59599516SKenneth E. Jansen          dxidxb(:,1,1) =  dxidxb(:,1,1) * temp
896*59599516SKenneth E. Jansen          dxidxb(:,1,2) =  dxidxb(:,1,2) * temp
897*59599516SKenneth E. Jansen          dxidxb(:,1,3) =  dxidxb(:,1,3) * temp
898*59599516SKenneth E. Jansen          dxidxb(:,2,1) = (dxdxib(:,2,3) * dxdxib(:,3,1)
899*59599516SKenneth E. Jansen     &                   - dxdxib(:,2,1) * dxdxib(:,3,3)) * temp
900*59599516SKenneth E. Jansen          dxidxb(:,2,2) = (dxdxib(:,1,1) * dxdxib(:,3,3)
901*59599516SKenneth E. Jansen     &                   - dxdxib(:,3,1) * dxdxib(:,1,3)) * temp
902*59599516SKenneth E. Jansen          dxidxb(:,2,3) = (dxdxib(:,2,1) * dxdxib(:,1,3)
903*59599516SKenneth E. Jansen     &                   - dxdxib(:,1,1) * dxdxib(:,2,3)) * temp
904*59599516SKenneth E. Jansen          dxidxb(:,3,1) = (dxdxib(:,2,1) * dxdxib(:,3,2)
905*59599516SKenneth E. Jansen     &                   - dxdxib(:,2,2) * dxdxib(:,3,1)) * temp
906*59599516SKenneth E. Jansen          dxidxb(:,3,2) = (dxdxib(:,3,1) * dxdxib(:,1,2)
907*59599516SKenneth E. Jansen     &                   - dxdxib(:,1,1) * dxdxib(:,3,2)) * temp
908*59599516SKenneth E. Jansen          dxidxb(:,3,3) = (dxdxib(:,1,1) * dxdxib(:,2,2)
909*59599516SKenneth E. Jansen     &                   - dxdxib(:,1,2) * dxdxib(:,2,1)) * temp
910*59599516SKenneth E. Jansenc
911*59599516SKenneth E. Jansenc.... compute local-grad-Y
912*59599516SKenneth E. Jansenc
913*59599516SKenneth E. Jansenc
914*59599516SKenneth E. Jansen          gradSl = zero
915*59599516SKenneth E. Jansen          isc=5+isclr
916*59599516SKenneth E. Jansen          do n = 1, nshl
917*59599516SKenneth E. Jansen            gradSl(:,1) = gradSl(:,1) + shdrv(:,1,n) * yl(:,n,isc)
918*59599516SKenneth E. Jansen            gradSl(:,2) = gradSl(:,2) + shdrv(:,2,n) * yl(:,n,isc)
919*59599516SKenneth E. Jansen            gradSl(:,3) = gradSl(:,3) + shdrv(:,3,n) * yl(:,n,isc)
920*59599516SKenneth E. Jansen          enddo
921*59599516SKenneth E. Jansenc
922*59599516SKenneth E. Jansenc.... convert local-grads to global-grads
923*59599516SKenneth E. Jansenc
924*59599516SKenneth E. Jansen          gradS(:,1) = dxidxb(:,1,1) * gradSl(:,1) +
925*59599516SKenneth E. Jansen     &                 dxidxb(:,2,1) * gradSl(:,2) +
926*59599516SKenneth E. Jansen     &                 dxidxb(:,3,1) * gradSl(:,3)
927*59599516SKenneth E. Jansen
928*59599516SKenneth E. Jansenc
929*59599516SKenneth E. Jansen          gradS(:,2) = dxidxb(:,1,2) * gradSl(:,1) +
930*59599516SKenneth E. Jansen     &                 dxidxb(:,2,2) * gradSl(:,2) +
931*59599516SKenneth E. Jansen     &                 dxidxb(:,3,2) * gradSl(:,3)
932*59599516SKenneth E. Jansen
933*59599516SKenneth E. Jansen          gradS(:,3) = dxidxb(:,1,3) * gradSl(:,1) +
934*59599516SKenneth E. Jansen     &                 dxidxb(:,2,3) * gradSl(:,2) +
935*59599516SKenneth E. Jansen     &                 dxidxb(:,3,3) * gradSl(:,3)
936*59599516SKenneth E. Jansenc
937*59599516SKenneth E. Jansenc.... end grad-T
938*59599516SKenneth E. Jansenc
939*59599516SKenneth E. Jansen        endif
940*59599516SKenneth E. Jansen
941*59599516SKenneth E. Jansen        flux = diffus * ( gradS(:,1) * bnorm(:,1)
942*59599516SKenneth E. Jansen     &                  + gradS(:,2) * bnorm(:,2)
943*59599516SKenneth E. Jansen     &                  + gradS(:,3) * bnorm(:,3) )
944*59599516SKenneth E. Jansenc
945*59599516SKenneth E. Jansenc.... return
946*59599516SKenneth E. Jansenc
947*59599516SKenneth E. Jansen        return
948*59599516SKenneth E. Jansen        end
949*59599516SKenneth E. Jansen
950*59599516SKenneth E. Jansen
951*59599516SKenneth E. Jansenc---------------------------------------------------------------------
952*59599516SKenneth E. Jansenc
953*59599516SKenneth E. Jansenc     rotates the local nodal stiffnesses to the goblal frame
954*59599516SKenneth E. Jansenc
955*59599516SKenneth E. Jansenc---------------------------------------------------------------------
956*59599516SKenneth E. Jansen      subroutine rotatestiff(rKlocal, rotation,
957*59599516SKenneth E. Jansen     &                       rKglobal)
958*59599516SKenneth E. Jansen
959*59599516SKenneth E. Jansen      include "common.h"
960*59599516SKenneth E. Jansen
961*59599516SKenneth E. Jansen      dimension rKlocal(npro,nsd,nsd), rotation(npro,nsd,nsd),
962*59599516SKenneth E. Jansen     &          rKglobal(npro,nsd,nsd)
963*59599516SKenneth E. Jansen
964*59599516SKenneth E. Jansen      dimension tempm(npro,nsd,nsd)
965*59599516SKenneth E. Jansen
966*59599516SKenneth E. Jansen      tempm = zero
967*59599516SKenneth E. Jansen      do i = 1, 3
968*59599516SKenneth E. Jansen         do j = 1, 3
969*59599516SKenneth E. Jansen            do k = 1, 3
970*59599516SKenneth E. Jansen               tempm(:,i,j) = tempm(:,i,j)
971*59599516SKenneth E. Jansen     &              + rKlocal(:,i,k) * rotation(:,k,j)
972*59599516SKenneth E. Jansen            enddo
973*59599516SKenneth E. Jansen         enddo
974*59599516SKenneth E. Jansen      enddo
975*59599516SKenneth E. Jansen
976*59599516SKenneth E. Jansen      rKglobal = zero
977*59599516SKenneth E. Jansen      do i = 1, 3
978*59599516SKenneth E. Jansen         do j = 1, 3
979*59599516SKenneth E. Jansen            do k = 1, 3
980*59599516SKenneth E. Jansen               rKglobal(:,i,j) = rKglobal(:,i,j)
981*59599516SKenneth E. Jansen     &              + rotation(:,k,i) * tempm(:,k,j)
982*59599516SKenneth E. Jansen            enddo
983*59599516SKenneth E. Jansen         enddo
984*59599516SKenneth E. Jansen      enddo
985*59599516SKenneth E. Jansen
986*59599516SKenneth E. Jansen      return
987*59599516SKenneth E. Jansen      end
988