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