1*59599516SKenneth E. Jansen module quadfilt 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen real*8, allocatable :: shpf(:,:,:) 4*59599516SKenneth E. Jansen real*8, allocatable :: shglf(:,:,:,:) 5*59599516SKenneth E. Jansen real*8, allocatable :: Qptf(:,:,:) 6*59599516SKenneth E. Jansen real*8, allocatable :: Qwtf(:,:) 7*59599516SKenneth E. Jansen 8*59599516SKenneth E. Jansen real*8, allocatable :: numNden(:,:) 9*59599516SKenneth E. Jansen 10*59599516SKenneth E. Jansen real*8, allocatable :: xnd(:,:) 11*59599516SKenneth E. Jansen real*8, allocatable :: xmodcomp(:,:) 12*59599516SKenneth E. Jansen real*8, allocatable :: xmcomp(:,:) 13*59599516SKenneth E. Jansen real*8, allocatable :: xlcomp(:,:) 14*59599516SKenneth E. Jansen real*8, allocatable :: xl1comp(:,:) 15*59599516SKenneth E. Jansen real*8, allocatable :: xl2comp(:,:) 16*59599516SKenneth E. Jansen real*8, allocatable :: ucomp(:,:) 17*59599516SKenneth E. Jansen real*8, allocatable :: scomp(:) 18*59599516SKenneth E. Jansen 19*59599516SKenneth E. Jansen end module 20*59599516SKenneth E. Jansen 21*59599516SKenneth E. Jansenc------------------------------------------------------------------------------ 22*59599516SKenneth E. Jansen 23*59599516SKenneth E. Jansen subroutine setfilt 24*59599516SKenneth E. Jansen 25*59599516SKenneth E. Jansen use quadfilt 26*59599516SKenneth E. Jansen 27*59599516SKenneth E. Jansen include "common.h" 28*59599516SKenneth E. Jansen 29*59599516SKenneth E. Jansen ifiltrl = mod(iLES,10) 30*59599516SKenneth E. Jansen 31*59599516SKenneth E. Jansen if (ifiltrl .eq. 1) then 32*59599516SKenneth E. Jansen nintf(1) = 1 ! tets 33*59599516SKenneth E. Jansen nintf(2) = 1 ! hexes 34*59599516SKenneth E. Jansen nintf(3) = 1 ! wedges 35*59599516SKenneth E. Jansen nintf(5) = 1 ! pyramids 36*59599516SKenneth E. Jansen else if (ifiltrl .eq. 2) then 37*59599516SKenneth E. Jansen nintf(1) = 4 38*59599516SKenneth E. Jansen nintf(2) = 8 39*59599516SKenneth E. Jansen nintf(3) = 6 40*59599516SKenneth E. Jansen nintf(5) = 8 41*59599516SKenneth E. Jansen else if (ifiltrl .eq. 3) then 42*59599516SKenneth E. Jansen nintf(1) = 16 43*59599516SKenneth E. Jansen nintf(2) = 27 44*59599516SKenneth E. Jansen nintf(3) = 18 45*59599516SKenneth E. Jansen nintf(5) = 27 46*59599516SKenneth E. Jansen else if (ifiltrl .eq. 4) then 47*59599516SKenneth E. Jansen nintf(1) = 29 48*59599516SKenneth E. Jansen nintf(2) = 64 49*59599516SKenneth E. Jansen nintf(3) = 48 50*59599516SKenneth E. Jansen nintf(5) = 64 51*59599516SKenneth E. Jansen endif 52*59599516SKenneth E. Jansen 53*59599516SKenneth E. Jansen 54*59599516SKenneth E. Jansen allocate ( shpf(MAXTOP,maxsh,maxval(nintf)) ) 55*59599516SKenneth E. Jansen allocate ( shglf(MAXTOP,nsd,maxsh,maxval(nintf)) ) 56*59599516SKenneth E. Jansen allocate ( Qptf(MAXTOP,4,maxval(nintf)) ) 57*59599516SKenneth E. Jansen allocate ( Qwtf(MAXTOP,maxval(nintf)) ) 58*59599516SKenneth E. Jansen 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansen allocate ( numNden(nshg,2) ) 61*59599516SKenneth E. JansenC 62*59599516SKenneth E. JansenC In development 63*59599516SKenneth E. JansenC 64*59599516SKenneth E. Jansen allocate ( xnd(70,2) ) 65*59599516SKenneth E. Jansen allocate ( xmodcomp(70,5) ) 66*59599516SKenneth E. Jansen allocate ( xmcomp(70,6) ) 67*59599516SKenneth E. Jansen allocate ( xlcomp(70,6) ) 68*59599516SKenneth E. Jansen allocate ( xl1comp(70,6) ) 69*59599516SKenneth E. Jansen allocate ( xl2comp(70,6) ) 70*59599516SKenneth E. Jansen allocate ( ucomp(70,3) ) 71*59599516SKenneth E. Jansen allocate ( scomp(70) ) 72*59599516SKenneth E. JansenC 73*59599516SKenneth E. JansenC In development 74*59599516SKenneth E. JansenC 75*59599516SKenneth E. Jansen 76*59599516SKenneth E. Jansen numNden = zero 77*59599516SKenneth E. Jansen 78*59599516SKenneth E. Jansenc.... return 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen return 81*59599516SKenneth E. Jansen end 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansenc------------------------------------------------------------------------------ 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansen subroutine filtprep 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen use quadfilt 88*59599516SKenneth E. Jansen 89*59599516SKenneth E. Jansen include "common.h" 90*59599516SKenneth E. Jansen 91*59599516SKenneth E. Jansen real*8, allocatable :: tmpQptf (:,:), tmpQwtf (:) 92*59599516SKenneth E. Jansen 93*59599516SKenneth E. Jansen allocate (tmpQptf(4,nint(1))) 94*59599516SKenneth E. Jansen allocate (tmpQwtf(nintf(1))) 95*59599516SKenneth E. Jansen call symtet(nintf(1),tmpQptf,tmpQwtf,nerr) 96*59599516SKenneth E. Jansen Qptf(1,1:4,1:nintf(1)) = tmpQptf(1:4,1:nintf(1)) 97*59599516SKenneth E. Jansen Qwtf(1,1:nintf(1)) = tmpQwtf(1:nintf(1)) 98*59599516SKenneth E. Jansenc 99*59599516SKenneth E. Jansenc.... adjust quadrature weights to be consistent with the 100*59599516SKenneth E. Jansenc design of tau. 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen do i = 1, nintf(1) 103*59599516SKenneth E. Jansen Qwtf(1,i) = (four/three)*Qwtf(1,i) 104*59599516SKenneth E. Jansen enddo 105*59599516SKenneth E. Jansen 106*59599516SKenneth E. Jansen deallocate (tmpQptf) 107*59599516SKenneth E. Jansen deallocate (tmpQwtf) 108*59599516SKenneth E. Jansen 109*59599516SKenneth E. Jansen 110*59599516SKenneth E. Jansen allocate (tmpQptf(4,nint(2))) 111*59599516SKenneth E. Jansen allocate (tmpQwtf(nintf(2))) 112*59599516SKenneth E. Jansen call symhex(nintf(2),tmpQptf,tmpQwtf,nerr) 113*59599516SKenneth E. Jansen Qptf(2,1:4,1:nintf(2)) = tmpQptf(1:4,1:nintf(2)) 114*59599516SKenneth E. Jansen Qwtf(2,1:nintf(2)) = tmpQwtf(1:nintf(2)) 115*59599516SKenneth E. Jansen deallocate (tmpQptf) 116*59599516SKenneth E. Jansen deallocate (tmpQwtf) 117*59599516SKenneth E. Jansen 118*59599516SKenneth E. Jansen allocate (tmpQptf(4,nintf(3))) 119*59599516SKenneth E. Jansen allocate (tmpQwtf(nintf(3))) 120*59599516SKenneth E. Jansen call symwdg(nintf(3),tmpQptf,tmpQwtf,nerr) 121*59599516SKenneth E. Jansen Qptf(3,1:4,1:nintf(3)) = tmpQptf(1:4,1:nintf(3)) 122*59599516SKenneth E. Jansen Qwtf(3,1:nintf(3)) = tmpQwtf(1:nintf(3)) 123*59599516SKenneth E. Jansen deallocate (tmpQptf) 124*59599516SKenneth E. Jansen deallocate (tmpQwtf) 125*59599516SKenneth E. Jansen 126*59599516SKenneth E. Jansen allocate (tmpQptf(4,nintf(5))) 127*59599516SKenneth E. Jansen allocate (tmpQwtf(nintf(5))) 128*59599516SKenneth E. Jansen call sympyr(nintf(5),tmpQptf,tmpQwtf,nerr) 129*59599516SKenneth E. Jansen Qptf(5,1:4,1:nintf(5)) = tmpQptf(1:4,1:nintf(5)) 130*59599516SKenneth E. Jansen Qwtf(5,1:nintf(5)) = tmpQwtf(1:nintf(5)) 131*59599516SKenneth E. Jansen deallocate (tmpQptf) 132*59599516SKenneth E. Jansen deallocate (tmpQwtf) 133*59599516SKenneth E. Jansen 134*59599516SKenneth E. Jansenc 135*59599516SKenneth E. Jansenc.... loop through element blocks 136*59599516SKenneth E. Jansenc 137*59599516SKenneth E. Jansen do iblk = 1, nelblk 138*59599516SKenneth E. Jansenc 139*59599516SKenneth E. Jansenc.... get coord. system and element type 140*59599516SKenneth E. Jansenc 141*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 142*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansenc.... generate the shape-functions in local coordinates 145*59599516SKenneth E. Jansenc 146*59599516SKenneth E. Jansen if (lcsyst .eq. 1) then ! tets 147*59599516SKenneth E. Jansen 148*59599516SKenneth E. Jansen do i=1,nintf(1) 149*59599516SKenneth E. Jansen call shpTet(ipord,Qptf(1,1:3,i),shpf(1,:,i), 150*59599516SKenneth E. Jansen & shglf(1,:,:,i)) 151*59599516SKenneth E. Jansen enddo 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansenc.... permute to positive volume element 154*59599516SKenneth E. Jansenc 155*59599516SKenneth E. Jansen shglf(1,:,1:nshl,1:nintf(1)) = 156*59599516SKenneth E. Jansen & shglf(1,:,1:nshl,1:nintf(1))/two 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansenc 159*59599516SKenneth E. Jansen else if (lcsyst .eq. 2) then ! hexes 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansen 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansen do i=1,nintf(2) 164*59599516SKenneth E. Jansen call shphex (ipord, Qptf(2,1:3,i),shpf(2,:,i), 165*59599516SKenneth E. Jansen & shglf(2,:,:,i)) 166*59599516SKenneth E. Jansen 167*59599516SKenneth E. Jansen enddo 168*59599516SKenneth E. Jansenc 169*59599516SKenneth E. Jansen else if (lcsyst .eq. 3) then ! wedges 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansen do i=1,nintf(3) 172*59599516SKenneth E. Jansen call shp6W (ipord,Qptf(3,1:3,i),shpf(3,:,i), 173*59599516SKenneth E. Jansen & shglf(3,:,:,i)) 174*59599516SKenneth E. Jansen enddo 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. Jansen else if (lcsyst .eq. 5) then ! pyramids 177*59599516SKenneth E. Jansenc 178*59599516SKenneth E. Jansen do i=1,nintf(5) 179*59599516SKenneth E. Jansen call shppyr (ipord,Qptf(5,1:3,i),shpf(5,:,i), 180*59599516SKenneth E. Jansen & shglf(5,:,:,i)) 181*59599516SKenneth E. Jansen enddo 182*59599516SKenneth E. Jansen 183*59599516SKenneth E. Jansenc 184*59599516SKenneth E. Jansenc.... nonexistent element 185*59599516SKenneth E. Jansenc 186*59599516SKenneth E. Jansen else 187*59599516SKenneth E. Jansenc 188*59599516SKenneth E. Jansen call error ('filtprep ', 'elem Cat', lelCat) 189*59599516SKenneth E. Jansenc 190*59599516SKenneth E. Jansen endif 191*59599516SKenneth E. Jansenc 192*59599516SKenneth E. Jansenc.... end of generation 193*59599516SKenneth E. Jansenc 194*59599516SKenneth E. Jansen enddo 195*59599516SKenneth E. Jansen 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansenc.... return 198*59599516SKenneth E. Jansenc 199*59599516SKenneth E. Jansen return 200*59599516SKenneth E. Jansen end 201*59599516SKenneth E. Jansen 202