36
37
38
39
40
41
42
43
44
45
46
47
51 use element_mod , only : nixs
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "mvsiz_p.inc"
60
61
62
63#include "com01_c.inc"
64#include "com04_c.inc"
65#include "inter22.inc"
66#include "param_c.inc"
67
68
69
70
71
72
73
74
75
76
77
78 INTEGER :: IXS(NIXS,NUMELS),NV46, ITASK
79 INTEGER :: NBF, NBL, NIN
80
81
82
83 INTEGER :: IB, IBm, IBs, IADJ, MCELL, NumSECND, NADJ, ISECND
84 INTEGER :: I, II, J, IBv, NBCUT, NBCUTv, K, IV
85 INTEGER :: ICELLv, JV, ICELLs, ClosedSurface, IPRES_MOM, ISGN_NORM
90
91
92
94 IF(int22 == 0) RETURN
95
96
97
98
99
100
101
102
103
104
105
106
108
109
110
111 SELECT CASE(ipres_mom)
112 CASE (5)
113
114 coef1 = zero
115 coef2 = one
116 CASE DEFAULT
117 coef1 = one
118 coef2 = zero
119 END SELECT
120
121
122
123
124
125
126
127 DO ib=nbf,nbl
128
129
130 f0(1:3) = zero
134 IF (mcell==0)cycle
135
139
140 IF(nbcut>0)THEN
141
142
143 isgn_norm = one
144 IF(mcell==9)THEN
145 isgn_norm=-one
146 DO k=1,nbcut
147 n(1:3) = isgn_norm*
brick_list(nin,ib)%PCUT(k)%N(1:3)
148 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
153 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE0%U_N(k)
154 mf = m1
156 pf = p1 + coef2*theta*half*z1*un1
157 f0(1) = f0(1) -pf*surf*n(1)
158 f0(2) = f0(2) -pf*surf*n(2)
159 f0(3) = f0(3) -pf*surf*n(3)
160 enddo
161 ELSE
162 isgn_norm = one
163 k = mcell
164 n(1:3) = isgn_norm*
brick_list(nin,ib)%PCUT(k)%N(1:3)
165 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
170 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE0%U_N(k)
171
172 mf = m1
174 pf = p1 + coef2*theta*half*z1*un1
175 f0(1) = f0(1) -pf*surf*n(1)
176 f0(2) = f0(2) -pf*surf*n(2)
177 f0(3) = f0(3) -pf*surf*n(3)
178 ENDIF
179 ENDIF
180
181
182
183 closedsurface = 0
184 DO j=1,nv46
185 nadj =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
186 closedsurface =
brick_list(nin,ib)%ClosedSurf(j)
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202 IF(nadj==0 .OR. closedsurface == 1)THEN
203
204 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%U_N
205 un2 = zero
206 mf = m1
208
209 pf = p1 + coef2*theta*half*z1*un1
211 surf =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Surf
212 f0(1) = f0(1) -pf*surf*n(1)
213 f0(2) = f0(2) -pf*surf*n(2)
214 f0(3) = f0(3) -pf*surf*n(3)
215 ELSE
221 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%U_N
223 DO iadj=1,nadj
224 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(iadj)
225 ibm = 0
226 IF(ibv/=0)THEN
227 ibm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(4)
228 IF(ibm == ib)cycle
229 areav =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf
234 un2 =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%U_N
235 denom = z1+z2
236
239 pf = coef1*(half*(p1+p2)) + coef2*((z1*p2 + z2*p1)/denom + theta*z1*z2*(un1+un2)/denom)
240 f0(1) = f0(1) - pf*surf*n(1)
241 f0(2) = f0(2) - pf*surf*n(2)
242 f0(3) = f0(3) - pf*surf*n(3)
243 else
249 denom = z1+z2
250
253 pf = coef1*(half*(p1+p2))
254 f0(1) = f0(1) - pf*surf*n(1)
255 f0(2) = f0(2) - pf*surf*n(2)
256 f0(3) = f0(3) - pf*surf*n(3)
257 ENDIF
258 enddo
259 ENDIF
260
261 enddo
262
263
264
266 DO isecnd=1,numsecnd
267 ibs =
brick_list(nin,ib)%SecndList%IBV(isecnd)
268 icells =
brick_list(nin,ib)%SecndList%ICELLv(isecnd)
269 js =
brick_list(nin,ibs)%POLY(icells)%WhereIsMain(1)
271
272
273
274
275
276
277
278
279
280
281 isgn_norm = one
282 IF(icells==9)THEN
283 isgn_norm=-one
284 DO k=1,nbcutv
285 n(1:3) = isgn_norm*
brick_list(nin,ibs)%PCUT(k)%N(1:3)
286 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
291 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE0%U_N(k)
292
293 mf = m1
295 pf = p1 + coef2*theta*half*z1*un1
296 f0(1) = f0(1) -pf*surf*n(1)
297 f0(2) = f0(2) -pf*surf*n(2)
298 f0(3) = f0(3) -pf*surf*n(3)
299 ENDDO
300 ELSE
301 k=icells
302 n(1:3) = isgn_norm*
brick_list(nin,ibs)%PCUT(k)%N(1:3)
303 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
308 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE0%U_N(k)
309 mf = m1
311
312 pf = p1 + coef2*theta*half*z1*un1
313 f0(1) = f0(1) -pf*surf*n(1)
314 f0(2) = f0(2) -pf*surf*n(2)
315 f0(3) = f0(3) -pf*surf*n(3)
316 ENDIF
317
318
319
320 DO j=1,nv46
321 IF(j==js) cycle
322 nadj =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%NAdjCell
323 z2 = zero
324 IF(nadj==0 .OR. closedsurface == 1)THEN
325
326 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%U_N
327
328 mf = m1
330 pf = p1 + coef2*theta*half*z1*un1
332 surf =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%Surf
333 f0(1) = f0(1) -pf*surf*n(1)
334 f0(2) = f0(2) -pf*surf*n(2)
335 f0(3) = f0(3) -pf*surf*n(3)
336 ELSE
342 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%U_N
344 DO iadj=1,nadj
345 icellv =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%Adjacent_Cell(iadj)
346 ibm = 0
347 IF(ibv/=0)THEN
348 ibm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(4)
349 areav =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf
353 un2 =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv
354 denom = z1+z2
358
359 pf = coef1*(half*(p1
360 IF(ibm == ib)cycle
361 f0(1) = f0(1) - pf*surf*n(1)
362 f0(2) = f0(2) - pf*surf*n(2)
363 f0(3) = f0(3)
364 else
370 denom = z1+z2
371
374 pf = coef1*(half*(p1+p2)) + coef2*((z1*p2 + z2*p1)/denom + theta*z1*z2*(un1+un2)/denom)
375 f0(1) = f0(1) - pf*surf*n(1)
376 f0(2) = f0(2) - pf*surf*n(2)
377 f0(3) = f0(3) - pf*surf*n(3)
378 ENDIF
379 enddo
380 ENDIF
381 enddo
382 enddo
383
384
388
389
390
391
392
396
397 enddo
398
399
400
401
403
405
406 if(itask==0)then
407 print *, " |---alefvm_sfint3_int22.F---|"
408 print *, " | THREAD INFORMATION |"
409 print *, " |---------------------------|"
410 print *, " NCYCLE =", ncycle
411
415 IF (mcell==0)cycle
416 print *, " brique_=", ixs(11,ii)
417 write(*,fmt='(A34,6A26)') " ",
418 . "#--- internal force -----#"
419
420
421 write (*,fmt=
'(A,8E26.14)' )
" force-X =",
alefvm_buffer%FCELL(1,ii)
422 write (*,fmt=
'(A,8E26.14)' )
" force-Y =",
alefvm_buffer%FCELL(2,ii)
423 write (*,fmt=
'(A,8E26.14)' )
" force-Z =",
alefvm_buffer%FCELL
424 write (*,fmt=
'(A,8E26.14)' )
" P =",
brick_list(nin,i)%SIG(0)
425
426
427 print *, " "
428 enddo
429
430 endif
431
433
434 endif
435
436
437 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine area(d1, x, x2, y, y2, eint, stif0)
type(alefvm_buffer_), target alefvm_buffer
type(alefvm_param_), target alefvm_param
type(brick_entity), dimension(:,:), allocatable, target brick_list