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