44
45
46
49 USE elbufdef_mod
50 USE my_alloc_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "vect01_c.inc"
59#include "mvsiz_p.inc"
60#include "com01_c.inc"
61#include "com04_c.inc"
62#include "com_xfem1.inc"
63#include "param_c.inc"
64#include "task_c.inc"
65
66
67
68 INTEGER IFUNC,NBF,LEN,NBF_L, NBPART,NBF_CRKXFEMG
69 INTEGER IPARG(NPARG,*),IXC(NIXC,*),IXTG(NIXTG,*),EL2FA(*),
70 . (*),IADG(NSPMD,*),IPM(,*),INDX_CRK(*),
71 . IGEO(NPROPGI,*),EL2FA0(*),IEL_CRK(*)
72
74 . mass(*),geo(npropg,*),
75 . ehour(*),anim(*),pm(npropm,*),thke(*),
76 . err_thk_sh4(*), err_thk_sh3(*)
77 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
78 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL), TARGET ::
79 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
80
81
82
83
84 REAL,DIMENSION(:),ALLOCATABLE:: WAL
85 INTEGER,DIMENSION(:),ALLOCATABLE::MATLY
87 . evar(mvsiz),func(len),
88 . off, p, vonm2, vonm, s1, s2, s12, s3, VALUE,
89 . a1,b1,b2,b3,yeq,f1,m1,m2,m3, fac, dam1(mvsiz),dam2(mvsiz),
90 . wpla(mvsiz), dmax(mvsiz),wpmax(mvsiz),
91 . fail(mvsiz),thk0,thke0(mvsiz)
92 INTEGER I,NG,NEL,ISC,N,J,MLW,NUVAR,
93 . ISTRAIN,NN,K1,K2,MT,IMID,IPID,
94 . NN1,NN2,NN3,NN4,NN5,NN6,NF,
95 . OFFSET,K,II,KK,IHBE,I1,MPT,IPT,BUF,NUVARR,
96 . IPMAT,PID(MVSIZ),MAT(MVSIZ),
97 . IEXPAN,NEL_CRK,NLEVXF,NI,JTURB,
98 . NLAY,NPTT,IXEL,ILAY,IL,IUS,JJ(5)
99 INTEGER IXFEM,IP,JPID,CRKS,ICRK,ILAYCRK,ELCRK,NPT0
100 INTEGER NELCRK(NCRKPART),IE(NCRKPART)
101 REAL R4
102
103 TYPE(BUF_LAY_) ,POINTER :: BUFLY
104 TYPE(G_BUFEL_) ,POINTER :: GBUF
105 TYPE(L_BUFEL_) ,POINTER :: LBUF
106
107 TYPE(G_BUFEL_) ,POINTER :: XGBUF
108 TYPE(L_BUFEL_) ,POINTER :: XLBUF
109
110 CALL my_alloc(wal,nbf_l)
111 CALL my_alloc(matly,mvsiz*100)
112 nel_crk = 0
113 func(1:len) = zero
114
115 DO crks = 1,ncrkpart
116 icrk = indx_crk(crks)
117 nelcrk(crks) = nel_crk
118 nel_crk = nel_crk +
crkshell(icrk)%CRKNUMSHELL
119 ie(icrk) = 0
120 ENDDO
121
122 nn1 = 1
123 nn3 = 1
124 nn4 = nn3 + numelq
125 nn5 = nn4 + numelc
126 nn6 = nn5 + numeltg
127
128 DO ng=1,ngroup
129
130 ixfem = iparg(54,ng)
131 IF (ixfem /= 1 .AND. ixfem /= 2) cycle
132
134 2 mlw ,nel ,nft ,iad ,ity ,
135 3 npt ,jale ,ismstr ,jeul ,jturb ,
136 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
137 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
138 6 irep ,iint ,igtyp ,israt ,isrot ,
139 7 icsen ,isorth ,isorthg ,ifailure,jsms)
140
141 IF (ity /= 3 .AND. ity /= 7) cycle
142 IF (mlw /= 13) THEN
143 DO offset = 0,nel-1,nvsiz
144 nft =iparg(3,ng) + offset
145 lft=1
146 llt=
min(nvsiz,nel-offset)
147 npt = iparg(6,ng)
148 ihbe = iparg(23,ng)
149 IF (ihbe == 11) cycle
150 nuvar = 0
151
152 DO i=1,5
153 jj(i) = nel*(i-1)
154 ENDDO
155
156
157
158
159 mpt = iabs(npt)
160 npt0 = npt
161
162
163 IF (ixfem == 1) npt = 1
164
165
166 gbuf => elbuf_tab(ng)%GBUF
167
168 IF (ity == 3) THEN
169 ni = nft
170 ELSE
171 ni = nft + numelc
172 ENDIF
173
174
175
176
177
178 DO ixel=1,nxel
179 xgbuf => xfem_tab(ng,ixel)%GBUF
180 nlay = xfem_tab(ng,ixel)%NLAY
181 DO ilay=1,nlay
182
183 icrk = nxel*(ilay-1) + ixel
184
185 IF (nlay > 1) THEN
186 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(1,1,1)
187 xlbuf => xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,1)
188 ELSE
189 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ilay)
190 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ilay)
191 ENDIF
192 xgbuf => xfem_tab(ng,ixel)%GBUF
193
194
195
196 nuvar = 0
197
198 DO i=lft,llt
199 evar(i) = zero
200 ENDDO
201
202
203 IF (mlw == 0 .OR. mlw == 13) THEN
204 CONTINUE
205
206 ELSE IF (ifunc == 1) THEN
207 IF (nlay > 1) THEN
208
209 ipt = ilay
210 IF (elbuf_tab(ng)%BUFLY(ipt)%L_PLA > 0) THEN
211 lbuf => elbuf_tab(ng)%BUFLY(ipt)%LBUF(1,1,1)
212 xlbuf => xfem_tab(ng,ixel)%BUFLY(ipt)%LBUF(1,1,1)
213 DO i=lft,llt
214 n = i + ni
215 elcrk = iel_crk(n)
216 IF (elcrk > 0) THEN
217 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
218 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
219 evar(i) = abs(lbuf%PLA(i))
220 ELSE
221 evar(i) = abs(xlbuf%PLA(i))
222 ENDIF
223 ENDIF
224 ENDDO
225 ENDIF
226 ELSEIF (gbuf%G_PLA > 0 ) THEN
227 ipt =
max(1,int((1+npt)/2))
228 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,ipt)
229 xlbuf => xfem_tab(ng,ixel)%BUFLY(1)%LBUF(1,1,ipt)
230 DO i=lft,llt
231 n = i + ni
232 elcrk = iel_crk(n)
233 IF (elcrk > 0) THEN
234 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
235 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
236 evar(i) = abs(lbuf%PLA(i))
237 ELSE
238 evar(i) = abs(xlbuf%PLA(i))
239 ENDIF
240 ENDIF
241 ENDDO
242 ENDIF
243 ELSEIF (ifunc == 3) THEN
244 IF (nlay > 1) THEN
245 DO i=lft,llt
246 n = i + ni
247 elcrk = iel_crk(n)
248 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
249 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
250 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
251 ELSE
252 evar(i) = xlbuf%EINT(i) + xlbuf%EINT(i+llt)
253 ENDIF
254 ENDDO
255 ELSE
256 DO i=lft,llt
257 n = i + ni
258 elcrk = iel_crk(n)
259 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
260 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
261 evar(i) = gbuf%EINT(i) + gbuf%EINT(i+llt)
262 ELSE
263 evar(i) = xgbuf%EINT(i) + xgbuf%EINT(i+llt)
264 ENDIF
265 ENDDO
266 ENDIF
267 ELSEIF (ifunc == 5) THEN
268 IF (nlay > 1) THEN
269 DO i=lft,llt
270 evar(i) = xlbuf%THK(i)
271 ENDDO
272 ELSE
273 DO i=lft,llt
274 evar(i) = xgbuf%THK(i)
275 ENDDO
276 ENDIF
277 ELSEIF (ifunc == 7) THEN
278 IF (nlay > 1) THEN
279 DO i=lft,llt
280 n = i + ni
281 elcrk = iel_crk(n)
282 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
283 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
284 s1 = gbuf%FOR(jj(1)+i)
285 s2 = gbuf%FOR(jj(2)+i)
286 s12= gbuf%FOR(jj(3)+i)
287 ELSE
288 s1 = xlbuf%FOR(jj(1)+i)
289 s2 = xlbuf%FOR(jj(2)+i)
290 s12= xlbuf%FOR(jj
291 ENDIF
292 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
293 evar(i) = sqrt(vonm2)
294 ENDDO
295 ELSE
296 DO i=lft,llt
297 n = i + ni
298 elcrk = iel_crk(n)
299 ilaycrk = crkedge(ilay
300 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
301 s1 = gbuf%FOR(jj(1)+i)
302 s2 = gbuf%FOR(jj(2)+i)
303 s12= gbuf%FOR(jj(3)+i)
304 ELSE
305 s1 = xgbuf%FOR(jj(1)+i)
306 s2 = xgbuf%FOR(jj(2)+i)
307 s12= xgbuf%FOR(jj(3)+i)
308 ENDIF
309 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
310 evar(i) = sqrt(vonm2)
311 ENDDO
312 ENDIF
313
314 ELSEIF (ifunc >= 14 .AND. ifunc <= 15) THEN
315
316 ius = ifunc-13
317 IF (nlay > 1) THEN
318 DO i=lft,llt
319 n = i + ni
320 elcrk = iel_crk(n)
321 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
322 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
323 evar(i) = gbuf%FOR(jj(ius
324 ELSE
325 evar(i) = xlbuf%FOR(jj(ius)+i)
326 ENDIF
327 ENDDO
328 ELSE
329 DO i=lft,llt
330 n = i + ni
331 elcrk = iel_crk(n)
332 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
333 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
334 evar(i) = gbuf%FOR(jj(ius)+i)
335 ELSE
336 evar(i) = xgbuf%FOR(jj(ius)+i)
337 ENDIF
338 ENDDO
339 ENDIF
340
341 ELSEIF (ifunc >= 17 .AND. ifunc <= 19) THEN
342
343 ius = ifunc-14
344 IF (nlay > 1) THEN
345 DO i=lft,llt
346 n = i + ni
347 elcrk = iel_crk(n)
348 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
349 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
350 evar(i) = gbuf%FOR(jj(ius)+i)
351 ELSE
352 evar(i) = xgbuf%FOR(jj(ius)+i)
353 ENDIF
354 ENDDO
355 ELSE
356 DO i=lft,llt
357 n = i + ni
358 elcrk = iel_crk(n)
359 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
360 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
361 evar(i) = gbuf%FOR(jj(ius)+i)
362 ELSE
363 evar(i) = xgbuf%FOR(jj(ius)+i)
364 ENDIF
365 ENDDO
366 ENDIF
367
368 ELSEIF (ifunc == 26 .and. gbuf%G_EPSD > 0) THEN
369 IF (nlay > 1) THEN
370 DO i=lft,llt
371 n = i + ni
372 elcrk = iel_crk(n)
373 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
374 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
375 evar(i) = gbuf%EPSD(i)
376 ELSE
377 evar(i) = xlbuf%EPSD(i)
378 ENDIF
379 ENDDO
380 ELSE
381 DO i=lft,llt
382 n = i + ni
383 elcrk = iel_crk(n)
384 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
385 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
386 evar(i) = gbuf%EPSD(i)
387 ELSE
388 evar(i) = xgbuf%EPSD(i)
389 ENDIF
390 ENDDO
391 ENDIF
392
393 ELSEIF (ifunc == 2155) THEN
394
395 IF (ity == 3) THEN
396 DO i=lft,llt
397 pid(i) = ixc(6,nft+1)
398 ENDDO
399 ELSEIF (ity == 7) THEN
400 DO i=lft,llt
401 pid(i) = ixtg(5,nft+1)
402 ENDDO
403 ENDIF
404
405 DO i=lft,llt
406 n = i + ni
407 thke0(i) = thke(n) * geo(300+ilay,pid(i))
408 ENDDO
409
410 IF (nlay > 1) THEN
411 DO i=lft,llt
412 n = i + ni
413 elcrk = iel_crk(n)
414 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
415 thk0 = thke0(i)
416 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
417
418 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
419 ELSE
420 evar(i) = hundred *(thk0 - xlbuf%THK(i))/thk0
421 ENDIF
422 ENDDO
423 ELSE
424 DO i=lft,llt
425 n = i + ni
426 elcrk = iel_crk(n)
427 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
428 thk0 = thke(n)
429 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
430 evar(i) = hundred *(thk0 - gbuf%THK(i))/thk0
431 ELSE
432 evar(i) = hundred *(thk0 - xgbuf%THK(i))/thk0
433 ENDIF
434 ENDDO
435 ENDIF
436
437 ELSEIF (ifunc == 2040) THEN
438 IF (nlay > 1) THEN
440 ipt = 1
441 ELSE
442 il = 1
444 ENDIF
445
446 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
447 IF (nlay > 1) THEN
448 DO i=lft,llt
449 n = i + ni
450 elcrk = iel_crk(n)
451 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
452 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
453 evar(i) = abs(
454 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
455 ELSE
456 evar(i) = abs(
457 . xfem_tab(ng,ixel)%BUFLY(ilay)%LBUF(1,1,ipt)%PLA(i))
458 ENDIF
459 ENDDO
460 ELSE
461 DO i=lft,llt
462 n = i + ni
463 elcrk = iel_crk(n)
464 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
465 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
466 evar(i) = abs(
467 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
468 ELSE
469 evar(i) = abs(
470 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
471 ENDIF
472 ENDDO
473 ENDIF
474 ELSE
475 DO i=lft,llt
476 evar(i) = zero
477 ENDDO
478 ENDIF
479
480 ELSEIF (ifunc == 2041) THEN
481
482 IF (nlay > 1) THEN
484 ipt = 1
485 ELSE
486 il = 1
488 ENDIF
489 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
490 il = 1
491 IF (nlay > 1) il = ilay
492 DO i=lft,llt
493 n = i + ni
494 elcrk = iel_crk(n)
495 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
496 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
497 evar(i) = abs(
498 . elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)%PLA(i))
499 ELSE
500 evar(i) = abs(
501 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,1)%PLA(i))
502 ENDIF
503 ENDDO
504 ELSE
505 DO i=lft,llt
506 evar(i) = zero
507 ENDDO
508 ENDIF
509
510 ELSEIF (ifunc >= 2042 .AND. ifunc <= 2141) THEN
511
512 IF (npt == 0) THEN
513 il = 1
514 ipt = 1
515 ELSEIF (nlay > 1) THEN
516 il = mod((ifunc - 2041), 100)
517 ipt = 1
518 IF (il == 0) il = 100
519 ELSE
520 il = 1
521 ipt = mod((ifunc - 2041), 100)
522 IF (ipt == 0) ipt = 100
523 ENDIF
524 IF (elbuf_tab(ng)%BUFLY(il)%L_PLA > 0) THEN
525 IF (nlay > 1) THEN ! multi
526 DO i=lft,llt
527 n = i + ni
528 elcrk = iel_crk(n)
529 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
530 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
531 evar(i) = abs(
532 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
533 ELSE
534 evar(i) = abs(
535 . xfem_tab(ng,ixel)%BUFLY(ilay
536 ENDIF
537 ENDDO
538 ELSE
539 DO i=lft,llt
540 n = i + ni
541 elcrk = iel_crk(n)
542 ilaycrk = crkedge(ilay)%LAYCUT(elcrk)
543 IF (ilaycrk == 0 .OR. abs(ilaycrk) == 1) THEN
544 evar(i) = abs(
545 . elbuf_tab(ng)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
546 ELSE
547 evar(i) = abs(
548 . xfem_tab(ng,ixel)%BUFLY(il)%LBUF(1,1,ipt)%PLA(i))
549 ENDIF
550 ENDDO
551 ENDIF
552 ELSE
553 DO i=lft,llt
554 evar(i) = zero
555 ENDDO
556 ENDIF
557 ENDIF
558
559 IF(mlw == 0 .OR. mlw == 13)THEN
560 DO i=lft,llt
561 n = i + ni
562 IF(iel_crk(n) > 0) THEN
563 ie(icrk) = ie(icrk) + 1
564
565 ENDIF
566 ENDDO
567
568 ELSEIF (ifunc == 3) THEN
569
570
571 IF (ity == 3) THEN
572 DO i=lft,llt
573 n = i + ni
574 IF (iel_crk(n) > 0) THEN
575 ie
576 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
577 .
max(em30,mass(el2fa0(nn4+i+nft)))
578 ENDIF
579 ENDDO
580 ELSEIF (ity == 7) THEN
581 DO i=lft,llt
582 n = i + ni
583 IF (iel_crk(n) > 0) THEN
584 ie(icrk) = ie(icrk) + 1
585 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)/
586 .
max(em30,mass(el2fa0(nn5+i+nft)))
587 ENDIF
588 ENDDO
589 ENDIF
590
591 ELSEIF (ifunc == 25 .AND. ity == 3) THEN
592
593
594 DO i=lft,llt
595 n = i + nft
596 IF (iel_crk(n) > 0) THEN
597 ie(icrk
598 func(el2fa(nelcrk(icrk) + ie(icrk))) = ehour(n+numels)/
599 .
max(em30,mass(el2fa0(nn4+n)))
600 ENDIF
601 ENDDO
602
603 ELSE
604
605
606 DO i=lft,llt
607 n = i + ni
608 IF (iel_crk(n) > 0) THEN
609 ie(icrk) = ie(icrk) + 1
610 func(el2fa(nelcrk(icrk) + ie(icrk))) = evar(i)
611 ENDIF
612 ENDDO
613 ENDIF
614
615
616
617 ENDDO
618 ENDDO
619 ENDDO
620 ENDIF
621 ENDDO
622
623 DO crks = 1,ncrkpart
624 icrk = indx_crk(crks)
625
626 nel_crk = nelcrk(icrk)
627
628 IF (nspmd == 1) THEN
629 DO i=1,ie(icrk)
630 n = el2fa(nel_crk + i)
631 r4 = func(n)
633 ENDDO
634 ELSE
635 DO i=1,ie(icrk)
636 n = el2fa(nel_crk + i)
637 wal(i+nel_crk) = func(n)
638 ENDDO
639 ENDIF
640 ENDDO
641
642 IF (nspmd > 1 ) THEN
643 IF (ispmd == 0) THEN
644 buf = nbf_crkxfemg
645 ELSE
646 buf=1
647 ENDIF
649 ENDIF
650
651 DEALLOCATE(matly)
652 DEALLOCATE(wal)
653 RETURN
type(xfem_shell_), dimension(:), allocatable crkshell
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine spmd_r4get_partn(size, nbf_l, nbpart, iadg, wal, buf)
void write_r_c(float *w, int *len)