xref: /phasta/phSolver/common/genint.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine genint
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc This subroutine inputs the integration information.
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc----------------------------------------------------------------------
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansen      include "common.h"
10*59599516SKenneth E. Jansen
11*59599516SKenneth E. Jansen      real*8, allocatable :: tmpQpt (:,:), tmpQwt (:)
12*59599516SKenneth E. Jansen      real*8, allocatable :: tmpQptb(:,:), tmpQwtb(:)
13*59599516SKenneth E. Jansen
14*59599516SKenneth E. Jansenc
15*59599516SKenneth E. Jansenc.... compute the shape function parameters
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansen
18*59599516SKenneth E. Jansen
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc.... get quadrature data for interior and boundary elements
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansenc  Tets
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansen      if (nen.eq.4) then
26*59599516SKenneth E. Jansen         nshape  = (ipord+1)*(ipord+2)*(ipord+3)/6
27*59599516SKenneth E. Jansen         nshapeb = (ipord+1)*(ipord+2)/2
28*59599516SKenneth E. Jansen      endif
29*59599516SKenneth E. Jansen
30*59599516SKenneth E. Jansen      select case (intg(1,1))
31*59599516SKenneth E. Jansen      case (1)
32*59599516SKenneth E. Jansen         nint(1) = 1
33*59599516SKenneth E. Jansen      case (2)
34*59599516SKenneth E. Jansen         nint(1) = 4
35*59599516SKenneth E. Jansen      case (3)
36*59599516SKenneth E. Jansen         nint(1) = 16
37*59599516SKenneth E. Jansen      case (4)
38*59599516SKenneth E. Jansen         nint(1) = 29
39*59599516SKenneth E. Jansen      end select
40*59599516SKenneth E. Jansen      select case (intg(2,1))
41*59599516SKenneth E. Jansen      case (1)
42*59599516SKenneth E. Jansen         nintb(1) = 1
43*59599516SKenneth E. Jansen      case (2)
44*59599516SKenneth E. Jansen         nintb(1) = 3
45*59599516SKenneth E. Jansen      case (3)
46*59599516SKenneth E. Jansen         nintb(1) = 6
47*59599516SKenneth E. Jansen      case (4)
48*59599516SKenneth E. Jansen         nintb(1) = 12
49*59599516SKenneth E. Jansen      end select
50*59599516SKenneth E. Jansen
51*59599516SKenneth E. Jansen      allocate (tmpQpt (4,nint(1)))
52*59599516SKenneth E. Jansen      allocate (tmpQwt (nint(1)))
53*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(1)))
54*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(1)))
55*59599516SKenneth E. Jansen
56*59599516SKenneth E. Jansen      call symtet(nint(1),tmpQpt,tmpQwt,nerr) ! interior elements
57*59599516SKenneth E. Jansen      Qpt(1,1:4,1:nint(1)) = tmpQpt(1:4,1:nint(1))
58*59599516SKenneth E. Jansen      Qwt(1,1:nint(1))     = tmpQwt(1:nint(1))
59*59599516SKenneth E. Jansen
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansen      call symtri(nintb(1),tmpQptb,tmpQwtb,nerr) ! boundary elements
62*59599516SKenneth E. Jansen      Qptb(1,1:4,1:nintb(1)) = tmpQptb(1:4,1:nintb(1))
63*59599516SKenneth E. Jansen      Qwtb(1,1:nintb(1))     = tmpQwtb(1:nintb(1))
64*59599516SKenneth E. Jansen
65*59599516SKenneth E. Jansen      deallocate (tmpQpt)
66*59599516SKenneth E. Jansen      deallocate (tmpQwt)
67*59599516SKenneth E. Jansen      deallocate (tmpQptb)
68*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansenc.... adjust quadrature weights to be consistent with the
72*59599516SKenneth E. Jansenc     design of tau.
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansen      Qwt(1,:) = (four/three)*Qwt(1,:)
75*59599516SKenneth E. Jansen      Qwtb(1,:) = two*Qwtb(1,:)
76*59599516SKenneth E. Jansenc
77*59599516SKenneth E. Jansenc     Hexes now
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen      if (nen.eq.8) then
80*59599516SKenneth E. Jansen         nshape = nen
81*59599516SKenneth E. Jansen         if ( ipord .gt. 1 ) then
82*59599516SKenneth E. Jansen            nshape = nshape + 12*(ipord - 1)
83*59599516SKenneth E. Jansen         endif
84*59599516SKenneth E. Jansen
85*59599516SKenneth E. Jansen         if ( ipord .gt. 3 ) then
86*59599516SKenneth E. Jansen            nshape = nshape + 3*(ipord -2)*(ipord - 3)
87*59599516SKenneth E. Jansen         endif
88*59599516SKenneth E. Jansen
89*59599516SKenneth E. Jansen         if ( ipord .gt. 5 ) then
90*59599516SKenneth E. Jansen            nshape = nshape + (ipord - 3)*(ipord - 4)*(ipord - 5)/6
91*59599516SKenneth E. Jansen         endif
92*59599516SKenneth E. Jansen
93*59599516SKenneth E. Jansen         nshapeb = nenb
94*59599516SKenneth E. Jansen
95*59599516SKenneth E. Jansen         if ( ipord .gt. 1 ) then
96*59599516SKenneth E. Jansen            nshapeb = nshapeb + 4*(ipord - 1)
97*59599516SKenneth E. Jansen         endif
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansen         if ( ipord .gt. 3 ) then
100*59599516SKenneth E. Jansen            nshapeb = nshapeb +(ipord -2)*(ipord - 3)/2
101*59599516SKenneth E. Jansen         endif
102*59599516SKenneth E. Jansen      endif
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansen      select case (intg(1,1))
105*59599516SKenneth E. Jansen      case (1)
106*59599516SKenneth E. Jansen         nint(2) = 1
107*59599516SKenneth E. Jansen      case (2)
108*59599516SKenneth E. Jansen         nint(2) = 8
109*59599516SKenneth E. Jansen      case (3)
110*59599516SKenneth E. Jansen         nint(2) =27
111*59599516SKenneth E. Jansen      case (4)
112*59599516SKenneth E. Jansen         nint(2) = 64
113*59599516SKenneth E. Jansen      case (5)
114*59599516SKenneth E. Jansen         nint(2) = 125
115*59599516SKenneth E. Jansen      end select
116*59599516SKenneth E. Jansen
117*59599516SKenneth E. Jansen      select case (intg(2,1))
118*59599516SKenneth E. Jansen      case (1)
119*59599516SKenneth E. Jansen         nintb(2) = 1
120*59599516SKenneth E. Jansen      case (2)
121*59599516SKenneth E. Jansen         nintb(2) = 4
122*59599516SKenneth E. Jansen      case(3)
123*59599516SKenneth E. Jansen         nintb(2) = 9
124*59599516SKenneth E. Jansen      case (4)
125*59599516SKenneth E. Jansen         nintb(2) = 16
126*59599516SKenneth E. Jansen      case (5)
127*59599516SKenneth E. Jansen         nintb(2) = 25
128*59599516SKenneth E. Jansen      end select
129*59599516SKenneth E. Jansen
130*59599516SKenneth E. Jansen
131*59599516SKenneth E. Jansen      allocate (tmpQpt (4,nint(2)))
132*59599516SKenneth E. Jansen      allocate (tmpQwt (nint(2)))
133*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(2)))
134*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(2)))
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansen      call symhex(nint(2),tmpQpt,tmpQwt,nerr)
137*59599516SKenneth E. Jansen      Qpt(2,1:4,1:nint(2)) = tmpQpt(1:4,1:nint(2))
138*59599516SKenneth E. Jansen      Qwt(2,1:nint(2)) = tmpQwt(1:nint(2))
139*59599516SKenneth E. Jansen
140*59599516SKenneth E. Jansen      call symquad(nintb(2),tmpQptb,tmpQwtb,nerr)
141*59599516SKenneth E. Jansen      Qptb(2,1:4,1:nintb(2)) = tmpQptb(1:4,1:nintb(2))
142*59599516SKenneth E. Jansen      Qwtb(2,1:nintb(2)) = tmpQwtb(1:nintb(2))
143*59599516SKenneth E. Jansen
144*59599516SKenneth E. Jansen      deallocate (tmpQpt)
145*59599516SKenneth E. Jansen      deallocate (tmpQwt)
146*59599516SKenneth E. Jansen      deallocate (tmpQptb)
147*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
148*59599516SKenneth E. Jansen
149*59599516SKenneth E. Jansen      if (nen.eq.5) then        ! for pyramid
150*59599516SKenneth E. Jansen
151*59599516SKenneth E. Jansen         nshape = nen           ! counting the nodal functions
152*59599516SKenneth E. Jansen
153*59599516SKenneth E. Jansen         if ( ipord .gt. 1 ) then
154*59599516SKenneth E. Jansen            nshape = nshape + 8*(ipord - 1) ! counting the edge functions
155*59599516SKenneth E. Jansen         endif
156*59599516SKenneth E. Jansen
157*59599516SKenneth E. Jansen         if ( ipord .gt. 2 ) then
158*59599516SKenneth E. Jansen                                ! counting the triangular face functions
159*59599516SKenneth E. Jansen            nshape = nshape + 2*(ipord -1)*(ipord - 2)
160*59599516SKenneth E. Jansen         endif
161*59599516SKenneth E. Jansen
162*59599516SKenneth E. Jansen         if ( ipord .gt. 3 ) then
163*59599516SKenneth E. Jansen                                ! counting the quadrilateral face functions
164*59599516SKenneth E. Jansen            nshape = nshape + (ipord - 2)*(ipord - 3)/2
165*59599516SKenneth E. Jansen         endif
166*59599516SKenneth E. Jansen
167*59599516SKenneth E. Jansen         if ( ipord .gt. 5 ) then
168*59599516SKenneth E. Jansen            nshape = nshape + (ipord - 3)*(ipord - 4)*(ipord - 5)/6
169*59599516SKenneth E. Jansen         endif
170*59599516SKenneth E. Jansen
171*59599516SKenneth E. Jansen         nshapeb = nenb
172*59599516SKenneth E. Jansen                                ! assume only the quadrilateral face on boundary
173*59599516SKenneth E. Jansen         if ( ipord .gt. 1 ) then
174*59599516SKenneth E. Jansen            nshapeb = nshapeb + 4*(ipord - 1)
175*59599516SKenneth E. Jansen         endif
176*59599516SKenneth E. Jansen         if ( ipord .gt. 3 ) then
177*59599516SKenneth E. Jansen            nshape = nshape +(ipord - 2)*(ipord - 3)/2
178*59599516SKenneth E. Jansen         endif
179*59599516SKenneth E. Jansen
180*59599516SKenneth E. Jansen      endif
181*59599516SKenneth E. Jansen
182*59599516SKenneth E. Jansen      select case (intg(1,1))
183*59599516SKenneth E. Jansen      case (1)
184*59599516SKenneth E. Jansen         nint(5) = 1
185*59599516SKenneth E. Jansen      case (2)
186*59599516SKenneth E. Jansen         nint(5) = 8
187*59599516SKenneth E. Jansen      case (3)
188*59599516SKenneth E. Jansen         nint(5) = 27
189*59599516SKenneth E. Jansen      case (4)
190*59599516SKenneth E. Jansen         nint(5) = 64
191*59599516SKenneth E. Jansen      case (5)
192*59599516SKenneth E. Jansen         nint(5) = 125
193*59599516SKenneth E. Jansen      end select
194*59599516SKenneth E. Jansen      select case (intg(2,1))
195*59599516SKenneth E. Jansen      case (1)
196*59599516SKenneth E. Jansen         nintb(5) = 1
197*59599516SKenneth E. Jansen      case (2)
198*59599516SKenneth E. Jansen         nintb(5) = 4
199*59599516SKenneth E. Jansen      case (3)
200*59599516SKenneth E. Jansen         nintb(5) = 9
201*59599516SKenneth E. Jansen      case (4)
202*59599516SKenneth E. Jansen         nintb(5) = 16
203*59599516SKenneth E. Jansen      case (5)
204*59599516SKenneth E. Jansen         nintb(5) = 25
205*59599516SKenneth E. Jansen      end select
206*59599516SKenneth E. Jansen      select case (intg(2,1))
207*59599516SKenneth E. Jansen      case (1)
208*59599516SKenneth E. Jansen         nintb(6) = 1
209*59599516SKenneth E. Jansen      case (2)
210*59599516SKenneth E. Jansen         nintb(6) = 4
211*59599516SKenneth E. Jansen      case (3)
212*59599516SKenneth E. Jansen         nintb(6) = 9
213*59599516SKenneth E. Jansen      case (4)
214*59599516SKenneth E. Jansen         nintb(6) = 12
215*59599516SKenneth E. Jansen      case (5)
216*59599516SKenneth E. Jansen         nintb(6) = 12 ! tri face boundary integration rules not coded
217*59599516SKenneth E. Jansen      end select
218*59599516SKenneth E. Jansen
219*59599516SKenneth E. Jansen      allocate (tmpQpt (4,nint(5)))
220*59599516SKenneth E. Jansen      allocate (tmpQwt (nint(5)))
221*59599516SKenneth E. Jansen
222*59599516SKenneth E. Jansen      call sympyr(nint(5),tmpQpt,tmpQwt,nerr) ! interior elements
223*59599516SKenneth E. Jansen      Qpt(5,1:4,1:nint(5)) = tmpQpt(1:4,1:nint(5))
224*59599516SKenneth E. Jansen      Qwt(5,1:nint(5)) = tmpQwt(1:nint(5))
225*59599516SKenneth E. Jansen
226*59599516SKenneth E. Jansen      deallocate (tmpQpt)
227*59599516SKenneth E. Jansen      deallocate (tmpQwt)
228*59599516SKenneth E. Jansen
229*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(5)))
230*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(5)))
231*59599516SKenneth E. Jansen
232*59599516SKenneth E. Jansen      call symquad (nintb(5),tmpQptb,tmpQwtb,nerr) ! quad boundary elements
233*59599516SKenneth E. Jansen      Qptb(5,1:4,1:nintb(5)) = tmpQptb(1:4,1:nintb(5))
234*59599516SKenneth E. Jansen      Qwtb(5,1:nintb(5)) = tmpQwtb(1:nintb(5))
235*59599516SKenneth E. Jansen
236*59599516SKenneth E. Jansen      deallocate (tmpQptb)
237*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
238*59599516SKenneth E. Jansen
239*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(6)))
240*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(6)))
241*59599516SKenneth E. Jansen
242*59599516SKenneth E. Jansen      call symtripyr (nintb(6),tmpQptb,tmpQwtb,nerr) ! tri boundary elements
243*59599516SKenneth E. Jansen      Qptb(6,1:4,1:nintb(6)) = tmpQptb(1:4,1:nintb(6))
244*59599516SKenneth E. Jansen      Qwtb(6,1:nintb(6)) = tmpQwtb(1:nintb(6))
245*59599516SKenneth E. Jansen
246*59599516SKenneth E. Jansen      deallocate (tmpQptb)
247*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
248*59599516SKenneth E. Jansen
249*59599516SKenneth E. Jansen      if (nen.eq.6) then
250*59599516SKenneth E. Jansenc
251*59599516SKenneth E. Jansenc     later for hierarchic basis nshape formulas will be inserted
252*59599516SKenneth E. Jansenc
253*59599516SKenneth E. Jansen         nshape = nen
254*59599516SKenneth E. Jansen
255*59599516SKenneth E. Jansen         if ( ipord .gt. 1 ) then
256*59599516SKenneth E. Jansen            nshape = nshape + 9*(ipord - 1)
257*59599516SKenneth E. Jansen         endif
258*59599516SKenneth E. Jansen
259*59599516SKenneth E. Jansen         if ( ipord .gt. 2 ) then
260*59599516SKenneth E. Jansen            nshape = nshape + (ipord -1)*(ipord - 2)
261*59599516SKenneth E. Jansen         endif
262*59599516SKenneth E. Jansen
263*59599516SKenneth E. Jansen         if ( ipord .gt. 3 ) then
264*59599516SKenneth E. Jansen            nshape = nshape + 3*(ipord - 2)*(ipord - 3)/2
265*59599516SKenneth E. Jansen         endif
266*59599516SKenneth E. Jansen
267*59599516SKenneth E. Jansen         if ( ipord .gt. 4 ) then
268*59599516SKenneth E. Jansen            nshape = nshape + (ipord - 2)*(ipord - 3)*(ipord - 4)/6
269*59599516SKenneth E. Jansen         endif
270*59599516SKenneth E. Jansen
271*59599516SKenneth E. Jansen         nshapeb = nenb
272*59599516SKenneth E. Jansenc
273*59599516SKenneth E. Jansen         if (nenb .eq. 3) then
274*59599516SKenneth E. Jansen            if ( ipord .gt. 1 ) then
275*59599516SKenneth E. Jansen               nshapeb = nshapeb + 3*(ipord - 1)
276*59599516SKenneth E. Jansen            endif
277*59599516SKenneth E. Jansen            if ( ipord .gt. 2 ) then
278*59599516SKenneth E. Jansen               nshape = nshape +(ipord - 1)*(ipord - 2)/2
279*59599516SKenneth E. Jansen            endif
280*59599516SKenneth E. Jansen         endif
281*59599516SKenneth E. Jansenc
282*59599516SKenneth E. Jansen         if (nenb .eq. 4) then
283*59599516SKenneth E. Jansen            if ( ipord .gt. 1 ) then
284*59599516SKenneth E. Jansen               nshapeb = nshapeb + 4*(ipord - 1)
285*59599516SKenneth E. Jansen            endif
286*59599516SKenneth E. Jansen            if ( ipord .gt. 2 ) then
287*59599516SKenneth E. Jansen               nshape = nshape +(ipord - 2)*(ipord - 3)/2
288*59599516SKenneth E. Jansen            endif
289*59599516SKenneth E. Jansen         endif
290*59599516SKenneth E. Jansen      endif
291*59599516SKenneth E. Jansen
292*59599516SKenneth E. Jansen      select case (intg(1,1))
293*59599516SKenneth E. Jansen      case (2)
294*59599516SKenneth E. Jansen         nint(3) = 6
295*59599516SKenneth E. Jansen      case (3)
296*59599516SKenneth E. Jansen         nint(3) = 18
297*59599516SKenneth E. Jansen      case (4)
298*59599516SKenneth E. Jansen         nint(3) = 48
299*59599516SKenneth E. Jansen      end select
300*59599516SKenneth E. Jansen      select case (intg(2,1))
301*59599516SKenneth E. Jansen      case (2)
302*59599516SKenneth E. Jansen         nintb(3) = 3
303*59599516SKenneth E. Jansen         nintb(4) = 4
304*59599516SKenneth E. Jansen      case (3)
305*59599516SKenneth E. Jansen         nintb(3) = 6
306*59599516SKenneth E. Jansen         nintb(4) = 9
307*59599516SKenneth E. Jansen      case (4)
308*59599516SKenneth E. Jansen         nintb(3) = 12
309*59599516SKenneth E. Jansen         nintb(4) = 16
310*59599516SKenneth E. Jansen      end select
311*59599516SKenneth E. Jansen
312*59599516SKenneth E. Jansen      allocate (tmpQpt (4,nint(3)))
313*59599516SKenneth E. Jansen      allocate (tmpQwt (nint(3)))
314*59599516SKenneth E. Jansen
315*59599516SKenneth E. Jansen      call symwdg(nint(3),tmpQpt,tmpQwt,nerr) ! interior elements
316*59599516SKenneth E. Jansen      Qpt(3,1:4,1:nint(3)) = tmpQpt(1:4,1:nint(3))
317*59599516SKenneth E. Jansen      Qwt(3,1:nint(3)) = tmpQwt(1:nint(3))
318*59599516SKenneth E. Jansen
319*59599516SKenneth E. Jansen      deallocate (tmpQpt)
320*59599516SKenneth E. Jansen      deallocate (tmpQwt)
321*59599516SKenneth E. Jansen
322*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(3)))
323*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(3)))
324*59599516SKenneth E. Jansen
325*59599516SKenneth E. Jansen      call symtri(nintb(3),tmpQptb,tmpQwtb,nerr) ! boundary elements
326*59599516SKenneth E. Jansen      Qptb(3,1:2,2:nintb(3)) = tmpQptb(1:2,1:nintb(3)-1)
327*59599516SKenneth E. Jansen      Qptb(3,1:2,1) = tmpQptb(1:2,nintb(3))
328*59599516SKenneth E. Jansenc
329*59599516SKenneth E. Jansenc     wedges want the third entry to be zeta=-1 (not t=1-r-s)
330*59599516SKenneth E. Jansenc     4th entry not used
331*59599516SKenneth E. Jansenc
332*59599516SKenneth E. Jansen      Qptb(3,3:4,1:nintb(3)) = -1
333*59599516SKenneth E. Jansenc$$$  Qptb(3,1:4,1:nintb(3)) = tmpQptb(1:4,1:nintb(3))
334*59599516SKenneth E. Jansen      Qwtb(3,1:nintb(3)) = tmpQwtb(1:nintb(3))
335*59599516SKenneth E. Jansen
336*59599516SKenneth E. Jansen      deallocate (tmpQptb)
337*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansen      allocate (tmpQptb(4,nintb(4)))
340*59599516SKenneth E. Jansen      allocate (tmpQwtb(nintb(4)))
341*59599516SKenneth E. Jansen
342*59599516SKenneth E. Jansen      call symquadw(nintb(4),tmpQptb,tmpQwtb,nerr) ! boundary elements
343*59599516SKenneth E. Jansen      Qptb(4,1:4,1:nintb(4)) = tmpQptb(1:4,1:nintb(4))
344*59599516SKenneth E. Jansen      Qwtb(4,1:nintb(4)) = tmpQwtb(1:nintb(4))
345*59599516SKenneth E. Jansen
346*59599516SKenneth E. Jansen      deallocate (tmpQptb)
347*59599516SKenneth E. Jansen      deallocate (tmpQwtb)
348*59599516SKenneth E. Jansen
349*59599516SKenneth E. Jansenc
350*59599516SKenneth E. Jansenc.... return
351*59599516SKenneth E. Jansenc
352*59599516SKenneth E. Jansen      return
353*59599516SKenneth E. Jansen      end
354