SFEMaNS  version 5.3
Reference documentation for SFEMaNS
GP_2D_p2.f90
Go to the documentation of this file.
1 !===
2 !Authors: Jean-Luc Guermond, Lugi Quartapelle, Copyright 1994
3 !Author: Jean-Luc Guermond, Copyright December 24th 2018
4 !===
5 MODULE gp_2d_p2
6  PRIVATE
8 CONTAINS
9  SUBROUTINE element_2d_p2 (w, d, p, n_w, l_G)
10  !===Triangular element with quadratic interpolation
11  !===and seven Gauss integration points
12  !===w(n_w, l_G) : values of shape functions at Gauss points
13  !===d(2, n_w, l_G) : derivatives values of shape functions at Gauss points
14  !===p(l_G) : weight for Gaussian quadrature at Gauss points
15  ! 3
16  ! 5 4 with orientation 1->2, 1->3, 2->3 (lowest to highest index convention)
17  ! 1 6 2
18  IMPLICIT NONE
19  INTEGER, INTENT(IN) :: n_w, l_G
20  REAL(KIND=8), DIMENSION( n_w, l_G), INTENT(OUT) :: w
21  REAL(KIND=8), DIMENSION(2, n_w, l_G), INTENT(OUT) :: d
22  REAL(KIND=8), DIMENSION(l_G), INTENT(OUT) :: p
23  REAL(KIND=8), DIMENSION(l_G) :: xx, yy
24  INTEGER :: j
25  REAL(KIND=8) :: zero = 0, half = 0.5, one = 1, &
26  two = 2, three = 3, four = 4, &
27  five = 5, nine = 9
28  REAL(KIND=8) :: f1, f2, f3, f4, f5, f6, &
29  df1x, df2x, df3x, df4x, df5x, df6x, &
30  df1y, df2y, df3y, df4y, df5y, df6y, &
31  x, y, r, a, s1, s2, t1, t2, b1, b2, area, sq
32 
33  f1(x, y) = (half - x - y) * (one - x - y) * two
34  f2(x, y) = x * (x - half) * two
35  f3(x, y) = y * (y - half) * two
36  f4(x, y) = x * y * four
37  f5(x, y) = y * (one - x - y) * four
38  f6(x, y) = x * (one - x - y) * four
39 
40  df1x(x, y) = -three + four * (x + y)
41  df2x(x, y) = (two*x - half) * two
42  df3x(x, y) = zero
43  df4x(x, y) = y * four
44  df5x(x, y) = -y * four
45  df6x(x, y) = (one - two*x - y) * four
46 
47  df1y(x, y) = -three + four * (x + y)
48  df2y(x, y) = zero
49  df3y(x, y) = (two*y - half) * two
50  df4y(x, y) = x * four
51  df5y(x, y) = (one - x - two*y) * four
52  df6y(x, y) = -x * four
53  !===Degree 5; 7 Points; Stroud: p. 314, Approximate calculation of
54  !===Multiple integrals (Prentice--Hall), 1971.
55  area = one/two
56  sq = sqrt(three*five)
57  r = one/three; a = area * nine/40
58  s1 = (6 - sq)/21; t1 = (9 + 2*sq)/21; b1 = area * (155 - sq)/1200
59  s2 = (6 + sq)/21; t2 = (9 - 2*sq)/21; b2 = area * (155 + sq)/1200
60  xx(1) = r; yy(1) = r; p(1) = a
61  xx(2) = s1; yy(2) = s1; p(2) = b1
62  xx(3) = s1; yy(3) = t1; p(3) = b1
63  xx(4) = t1; yy(4) = s1; p(4) = b1
64  xx(5) = s2; yy(5) = s2; p(5) = b2
65  xx(6) = s2; yy(6) = t2; p(6) = b2
66  xx(7) = t2; yy(7) = s2; p(7) = b2
67 
68  DO j = 1, l_g
69  w(1, j) = f1(xx(j), yy(j))
70  d(1, 1, j) = df1x(xx(j), yy(j))
71  d(2, 1, j) = df1y(xx(j), yy(j))
72  w(2, j) = f2(xx(j), yy(j))
73  d(1, 2, j) = df2x(xx(j), yy(j))
74  d(2, 2, j) = df2y(xx(j), yy(j))
75  w(3, j) = f3(xx(j), yy(j))
76  d(1, 3, j) = df3x(xx(j), yy(j))
77  d(2, 3, j) = df3y(xx(j), yy(j))
78  w(4, j) = f4(xx(j), yy(j))
79  d(1, 4, j) = df4x(xx(j), yy(j))
80  d(2, 4, j) = df4y(xx(j), yy(j))
81  w(5, j) = f5(xx(j), yy(j))
82  d(1, 5, j) = df5x(xx(j), yy(j))
83  d(2, 5, j) = df5y(xx(j), yy(j))
84  w(6, j) = f6(xx(j), yy(j))
85  d(1, 6, j) = df6x(xx(j), yy(j))
86  d(2, 6, j) = df6y(xx(j), yy(j))
87  ENDDO
88  END SUBROUTINE element_2d_p2
89 
90  SUBROUTINE element_2d_p2_boundary (face, d, w, n_w, l_Gs)
91  !===Triangular element with quadratic interpolation
92  !===and seven Gauss integration points
93  !===w(n_w, l_Gs) : values of shape functions at Gauss points
94  !===d(2, n_w, l_Gs) : derivatives values of shape functions at Gauss points
95  !===p(l_Gs) : weight for Gaussian quadrature at Gauss points
96  ! 3
97  ! 5 4 with orientation 1->2, 1->3, 2->3 (lowest to highest index convention)
98  ! 1 6 2
99  IMPLICIT NONE
100  INTEGER, INTENT(IN) :: n_w, l_Gs
101  INTEGER, INTENT(IN) :: face
102  REAL(KIND=8), DIMENSION(2, n_w, l_Gs), INTENT(OUT) :: d
103  REAL(KIND=8), DIMENSION( n_w, l_Gs), INTENT(OUT) :: w
104  REAL(KIND=8), DIMENSION(l_Gs) :: xx, yy
105  INTEGER :: j
106  REAL(KIND=8) :: zero = 0, half = 0.5d0, one = 1, &
107  two = 2, three = 3, four = 4, &
108  five = 5
109  REAL(KIND=8) :: f1, f2, f3, f4, f5, f6, &
110  df1x, df2x, df3x, df4x, df5x, df6x, &
111  df1y, df2y, df3y, df4y, df5y, df6y, &
112  x, y
113  f1(x, y) = (half - x - y) * (one - x - y) * two
114  f2(x, y) = x * (x - half) * two
115  f3(x, y) = y * (y - half) * two
116  f4(x, y) = x * y * four
117  f5(x, y) = y * (one - x - y) * four
118  f6(x, y) = x * (one - x - y) * four
119  df1x(x, y) = -three + four * (x + y)
120  df2x(x, y) = (two*x - half) * two
121  df3x(x, y) = zero
122  df4x(x, y) = y * four
123  df5x(x, y) = -y * four
124  df6x(x, y) = (one - two*x - y) * four
125  df1y(x, y) = -three + four * (x + y)
126  df2y(x, y) = zero
127  df3y(x, y) = (two*y - half) * two
128  df4y(x, y) = x * four
129  df5y(x, y) = (one - x - two*y) * four
130  df6y(x, y) = -x * four
131  IF (face==1) THEN
132  xx(1) = half + half*sqrt(three/five)
133  xx(2) = half
134  xx(3) = half - half*sqrt(three/five)
135  yy(1) = half - half*sqrt(three/five)
136  yy(2) = half
137  yy(3) = half + half*sqrt(three/five)
138  ELSE IF (face==2) THEN
139  xx(1) = zero
140  xx(2) = zero
141  xx(3) = zero
142  yy(1) = half - half*sqrt(three/five)
143  yy(2) = half
144  yy(3) = half + half*sqrt(three/five)
145  ELSE
146  xx(1) = half - half*sqrt(three/five)
147  xx(2) = half
148  xx(3) = half + half*sqrt(three/five)
149  yy(1) = zero
150  yy(2) = zero
151  yy(3) = zero
152  END IF
153 
154  DO j = 1, l_gs
155  w(1, j) = f1(xx(j), yy(j))
156  d(1, 1, j) = df1x(xx(j), yy(j))
157  d(2, 1, j) = df1y(xx(j), yy(j))
158  w(2, j) = f2(xx(j), yy(j))
159  d(1, 2, j) = df2x(xx(j), yy(j))
160  d(2, 2, j) = df2y(xx(j), yy(j))
161  w(3, j) = f3(xx(j), yy(j))
162  d(1, 3, j) = df3x(xx(j), yy(j))
163  d(2, 3, j) = df3y(xx(j), yy(j))
164  w(4, j) = f4(xx(j), yy(j))
165  d(1, 4, j) = df4x(xx(j), yy(j))
166  d(2, 4, j) = df4y(xx(j), yy(j))
167  w(5, j) = f5(xx(j), yy(j))
168  d(1, 5, j) = df5x(xx(j), yy(j))
169  d(2, 5, j) = df5y(xx(j), yy(j))
170  w(6, j) = f6(xx(j), yy(j))
171  d(1, 6, j) = df6x(xx(j), yy(j))
172  d(2, 6, j) = df6y(xx(j), yy(j))
173  ENDDO
174  END SUBROUTINE element_2d_p2_boundary
175 
176  SUBROUTINE element_1d_p2(w, d, p, n_ws, l_Gs)
177  !===One-dimensional element with quadratic interpolation
178  !===and three Gauss integration points
179  !===w(n_w, l_G) : values of shape functions at Gauss points
180  !===d(1, n_w, l_G) : derivatives values of shape functions at Gauss points
181  !===p(l_G) : weight for Gaussian quadrature at Gauss points
182  IMPLICIT NONE
183  INTEGER, INTENT(IN) :: n_ws, l_Gs
184  REAL(KIND=8), DIMENSION( n_ws, l_Gs), INTENT(OUT) :: w
185  REAL(KIND=8), DIMENSION(1, n_ws, l_Gs), INTENT(OUT) :: d
186  REAL(KIND=8), DIMENSION(l_Gs), INTENT(OUT) :: p
187  REAL(KIND=8), DIMENSION(l_Gs) :: xx
188  INTEGER :: j
189  REAL(KIND=8) :: zero = 0, one = 1, two = 2, three = 3, &
190  five = 5, eight= 8, nine = 9
191  REAL(KIND=8) :: f1, f2, f3, df1, df2, df3, x
192  f1(x) = (x - one)*x/two
193  f2(x) = (x + one)*x/two
194  f3(x) = (x + one)*(one - x)
195  df1(x) = (two*x - one)/two
196  df2(x) = (two*x + one)/two
197  df3(x) = -two*x
198  xx(1) = -sqrt(three/five)
199  xx(2) = zero
200  xx(3) = sqrt(three/five)
201  p(1) = five/nine
202  p(2) = eight/nine
203  p(3) = five/nine
204  DO j = 1, l_gs
205  w(1, j) = f1(xx(j))
206  d(1, 1, j) = df1(xx(j))
207  w(2, j) = f2(xx(j))
208  d(1, 2, j) = df2(xx(j))
209  w(3, j) = f3(xx(j))
210  d(1, 3, j) = df3(xx(j))
211  ENDDO
212  END SUBROUTINE element_1d_p2
213 END MODULE gp_2d_p2
214 
subroutine, public element_2d_p2(w, d, p, n_w, l_G)
Definition: GP_2D_p2.f90:10
subroutine, public element_2d_p2_boundary(face, d, w, n_w, l_Gs)
Definition: GP_2D_p2.f90:91
subroutine, public element_1d_p2(w, d, p, n_ws, l_Gs)
Definition: GP_2D_p2.f90:177