7 INTEGER,
PARAMETER ::
k_d=2
18 INTEGER,
POINTER :: me, mes
19 INTEGER,
DIMENSION(:,:),
POINTER :: jj
20 INTEGER,
DIMENSION(:,:),
POINTER :: js
21 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: rr
22 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: ww
23 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: wws
24 REAL(KIND=8),
DIMENSION(:,:,:,:),
POINTER :: dw
25 REAL(KIND=8),
DIMENSION(:,:,:),
POINTER :: rnorms
26 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: rj
27 REAL(KIND=8),
DIMENSION(:,:),
POINTER :: rjs
28 REAL(KIND=8),
DIMENSION(:,:,:,:),
POINTER :: dw_s
29 REAL(KIND=8),
DIMENSION(:,:,:,:),
POINTER :: dwps
30 REAL(KIND=8),
DIMENSION(:,:,:,:),
POINTER :: dws
31 REAL(KIND=8),
DIMENSION(:,:,:),
ALLOCATABLE :: dd
32 REAL(KIND=8),
DIMENSION(:,:,:),
ALLOCATABLE :: dds
33 REAL(KIND=8),
DIMENSION(:,:),
ALLOCATABLE :: dds_v
34 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: pp
35 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: pps
36 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: r
37 REAL(KIND=8),
DIMENSION(:),
ALLOCATABLE :: rs
38 REAL(KIND=8),
DIMENSION(:,:),
ALLOCATABLE :: ww_s
39 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ngauss
40 REAL(KIND=8),
DIMENSION(k_d, k_d) :: dr
41 REAL(KIND=8),
DIMENSION(1, k_d) :: drs
42 REAL(KIND=8) :: rjac, rjacs, x
43 INTEGER :: m, l, k, k1, n, n1, n2, ms, ns, ls, face, cote, orient
44 INTEGER :: n_w, n_ws, l_G, l_Gs
45 REAL(KIND=8),
DIMENSION(k_d) :: rnor, rsd
49 n_w=3; n_ws=2; l_g=3; l_gs=2
51 n_w=6; n_ws=3; l_g=7; l_gs=3
53 n_w=10; n_ws=4; l_g=7; l_gs=4
55 WRITE(*,*)
' FE not programmed yet', type_fe
58 ALLOCATE(dd(
k_d,n_w,l_g),dds(1,n_ws,l_gs),pp(l_g),pps(l_gs),&
59 r(n_w),rs(n_ws),ww_s(n_w,l_gs),dds_v(n_ws,n_ws),ngauss(l_gs))
65 IF (mesh%edge_stab)
THEN 66 ALLOCATE(mesh%gauss%dwni(n_w, l_gs, 2, mesh%mi))
67 ALLOCATE(mesh%gauss%rji(l_gs, mesh%mi))
68 ALLOCATE(mesh%gauss%rnormsi(
k_d, l_gs, 2, mesh%mi))
69 ALLOCATE(mesh%gauss%wwsi(n_ws, l_gs))
71 ALLOCATE(mesh%gauss%ww(n_w, l_g))
72 ALLOCATE(mesh%gauss%wws(n_ws, l_gs))
73 ALLOCATE(mesh%gauss%dw(
k_d, n_w, l_g, me ))
74 ALLOCATE(mesh%gauss%rnorms(
k_d, l_gs, mes))
75 ALLOCATE(mesh%gauss%rnorms_v(
k_d,n_ws, mes))
76 ALLOCATE(mesh%gauss%rj(l_g, me ))
77 ALLOCATE(mesh%gauss%rjs(l_gs, mes))
78 ALLOCATE(mesh%gauss%dw_s(
k_d, n_w, l_gs, mesh%mes))
79 ALLOCATE(mesh%gauss%dwps(1, n_ws, l_gs, mes))
80 ALLOCATE(mesh%gauss%dws(1, n_ws, l_gs, mes))
84 rnorms => mesh%gauss%rnorms
87 dw_s => mesh%gauss%dw_s
88 dwps => mesh%gauss%dwps
93 mesh%gauss%n_ws = n_ws
94 mesh%gauss%l_Gs = l_gs
110 dr(k, k1) = sum(r * dd(k1,:,l))
113 rjac = dr(1,1)*dr(2,2) - dr(1,2)*dr(2,1)
116 = (+ dd(1,n,l)*dr(2,2) - dd(2,n,l)*dr(2,1))/rjac
118 = (- dd(1,n,l)*dr(1,2) + dd(2,n,l)*dr(1,1))/rjac
120 rj(l, m) = abs(rjac)*pp(l)
136 IF (minval(abs(js(:,ms)-jj(n,m)))==0) cycle
148 n1 = modulo(face,3)+1; n2 = modulo(face+1,3)+1
149 IF (js(1,ms)==jj(n1,m) .AND. js(2,ms)==jj(n2,m))
THEN 161 ngauss(ls) = orient*ls+(l_gs+1)*(1-orient)/2
168 dr(k, k1) = sum(r * dd(k1,:,ls))
171 rjac = (dr(1,1)*dr(2,2) - dr(1,2)*dr(2,1))
173 dw_s(1,n,ngauss(ls),ms) = (+dd(1,n,ls)*dr(2,2) - dd(2,n,ls)*dr(2,1))/rjac
174 dw_s(2,n,ngauss(ls),ms) = (-dd(1,n,ls)*dr(1,2) + dd(2,n,ls)*dr(1,1))/rjac
182 drs(1, k) = sum(rs*dds(1,:,ls))
184 rjacs = sqrt(drs(1,1)**2 + drs(1,2)**2)
185 rnorms(1, ls, ms) = - drs(1,2)/rjacs
186 rnorms(2, ls, ms) = + drs(1,1)/rjacs
187 rjs(ls, ms) = rjacs * pps(ls)
190 IF (minval(abs(js(:,ms)-jj(n,m)))==0) cycle
193 rsd(1:
k_d) = rr(:,jj(face,m)) - (rr(:,js(1,ms))+rr(:,js(2,ms)))/2
194 x = sum(rnorms(:,ls,ms)*rsd(1:
k_d))
196 rnorms(:,ls,ms) = -rnorms(:,ls,ms)
202 dwps(1,:,ls,ms) = dds(1,:,ls)*pps(ls)
203 dws(1,:,ls,ms) = dds(1,:,ls)
218 drs(1, k) = sum(rs * dds_v(:,ns))
220 rjacs = sqrt( drs(1,1)**2 + drs(1,2)**2 )
221 mesh%gauss%rnorms_v(1, ns, ms) = -drs(1,2)/rjacs
222 mesh%gauss%rnorms_v(2, ns, ms) = drs(1,1)/rjacs
226 IF (minval(abs(js(:,ms)-jj(n,m)))==0) cycle
229 rs = rr(:,jj(face,m)) - (rr(:,js(1,ms))+rr(:,js(2,ms)))/2
230 x = sum(mesh%gauss%rnorms_v(:,ns,ms)*rs)
232 mesh%gauss%rnorms_v(:,ns,ms) = - mesh%gauss%rnorms_v(:,ns,ms)
238 IF (mesh%edge_stab)
THEN 249 m = mesh%neighi(cote,ms)
251 IF (minval(abs(mesh%jjsi(1:2,ms)-jj(n,m)))==0) cycle
263 n1 = modulo(face,3)+1; n2 = modulo(face+1,3)+1
264 IF (mesh%jjsi(1,ms)==jj(n1,m) .AND. mesh%jjsi(2,ms)==jj(n2,m))
THEN 273 ngauss(ls) = orient*ls+(l_gs+1)*(1-orient)/2
278 rs = rr(k,mesh%jjsi(:,ms))
279 drs(1, k) = sum(rs*dds(1,:,ls))
281 rjacs = sqrt(drs(1,1)**2 + drs(1,2)**2)
282 mesh%gauss%rji(ls, ms) = rjacs*pps(ls)
283 rnor(1) = drs(1,2)/rjacs
284 rnor(2) = - drs(1,1)/rjacs
285 mesh%gauss%rnormsi(1, ls, cote, ms) = rnor(1)
286 mesh%gauss%rnormsi(2, ls, cote, ms) = rnor(2)
287 rsd = rr(:,jj(face,m)) - (rr(:,mesh%jjsi(1,ms))+rr(:,mesh%jjsi(2,ms)))/2
295 dr(k, k1) = sum(r * dd(k1,:,ls))
298 rjac = (dr(1,1)*dr(2,2) - dr(1,2)*dr(2,1))
300 mesh%gauss%dwni(n, ngauss(ls), cote, ms) &
301 = rnor(1)*(+ dd(1,n,ls)*dr(2,2) - dd(2,n,ls)*dr(2,1))/rjac &
302 + rnor(2)*(- dd(1,n,ls)*dr(1,2) + dd(2,n,ls)*dr(1,1))/rjac
310 m = mesh%neighi(cote,ms)
312 x = abs(sqrt(sum(mesh%gauss%rnormsi(:, ls, cote, ms)**2))-1.d0)
313 IF (x.GE.1.d-13)
THEN 314 write(*,*)
'Bug1 in normal ' 317 rjac = (rr(1, mesh%jjsi(2,ms))-rr(1, mesh%jjsi(1,ms)))*mesh%gauss%rnormsi(1, ls, cote, ms) &
318 + (rr(2, mesh%jjsi(2,ms))-rr(2, mesh%jjsi(1,ms)))*mesh%gauss%rnormsi(2, ls, cote, ms)
319 x = sqrt((rr(1, mesh%jjsi(2,ms))-rr(1, mesh%jjsi(1,ms)))**2 +&
320 (rr(2, mesh%jjsi(2,ms))-rr(2, mesh%jjsi(1,ms)))**2)
321 IF (abs(rjac/x) .GE. 1.d-10)
THEN 322 write(*,*)
'Bug2 in normal ', ms, cote, ls, abs(rjac/x)
330 DEALLOCATE(dd,dds,pp,pps,r,rs,ww_s,dds_v,ngauss)
subroutine, public element_2d_p3_boundary(face, d, w, n_w, l_Gs)
subroutine, public element_1d_p1(w, d, p, n_ws, l_Gs)
subroutine, public element_2d_p2(w, d, p, n_w, l_G)
subroutine, public element_2d_p2_boundary(face, d, w, n_w, l_Gs)
subroutine, public element_2d_p1(w, d, p, n_w, l_G)
subroutine, public element_1d_p2(w, d, p, n_ws, l_Gs)
subroutine, public element_1d_p1_at_nodes(d, n_ws)
subroutine, public element_2d_p1_boundary(face, d, w, n_w, l_Gs)
subroutine, public element_1d_p3(w, d, p, n_ws, l_Gs)
subroutine, public element_2d_p3(w, d, p, n_w, l_G)
subroutine, public gauss_points_2d(mesh, type_fe)