44
45
46
47 USE elbufdef_mod
48 USE matparam_def_mod
51 USE my_alloc_mod
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "mvsiz_p.inc"
60
61#include "com01_c.inc"
62#include "com04_c.inc"
63#include "param_c.inc"
64#include "task_c.inc"
65
66
67
68 INTEGER IPARG(NPARG,*),ITENS, (*),
69 . EL2FA(*),IXC(NIXC,*), IGEO(NPROPGI,*),
70 . NBF,IADP(*),NBF_L,NBPART,IADG(NSPMD,*),
71 . IXTG(NIXTG,*),NEL_PLY,IPLY, NBF_PXFEMG,
72 . IPM(NPROPMI,*)
73
75 . tens(3,*),epsdot(6,*), x(3,*)
76 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
77 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
78 TYPE (STACK_PLY) :: STACK
79
80
81
82
84 . off, fac, a1, a2, a3, thk, sige(mvsiz,5)
85 REAL R4(18)
86 INTEGER I, NG, NEL, NFT, IAD, ITY, LFT, NPT, IR,IS,IPT,
87 . IADD, N, J, LLT, MLW, ISTRAIN,NPTR,NPTS,NPTT,NLAY,
88 . , I1, I2, IAD2, NS1, NS2 , IALEL, ISTRE,
89 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NNI,N0,
90 . II, II_L, KK ,,IHBE,LEN ,IREP,BUF,IEXPAN,ILAYER,
91 . JJ(8)
92 INTEGER IE,,IP,JPID,IPPID,IPLY0,IFLAG,ION,NPG,K,
93 . ELC,PLYELEMS(NUMELC),PLYS,IFAILURE,IVISC,NUVARV,
94 . MAT(MVSIZ),PID(MVSIZ),IGTYP,IADR,MATLY,IPMAT,
95 . IIGEO,IADI,ISUBSTACK,IPMAT_IPLY
96 REAL,DIMENSION(:,:),ALLOCATABLE:: WA
97 TYPE(BUF_LAY_) ,POINTER :: BUFLY
98 TYPE(G_BUFEL_) ,POINTER :: GBUF
99 TYPE(L_BUFEL_) ,POINTER :: LBUF
100
101 CALL my_alloc(wa,3,nbf_l)
102
103 nel_ply = 0
104
107
108 plyelems=0
112 plyelems(elc)=ipt
113 ENDDO
114
115 DO j=1,18
116 r4(j) = zero
117 ENDDO
118
119 ie = 0
120 ilayer = 0
121 iflag = 0
122 ion = 0
123 npg = 0
124
125 nn1 = 1
126 nn2 = nn1
127 nn3 = nn2
128 nn4 = nn3 + numelq
129 nn5 = nn4 + numelc
130 nn6 = nn5 + numeltg
131
132
133 DO 490 ng=1,ngroup
134 ii = 0
135
136 mlw =iparg(1,ng)
137 nel =iparg(2,ng)
138 nft =iparg(3,ng)
139 iad =iparg(4,ng)
140 ity =iparg(5,ng)
141 ihbe = iparg(23,ng)
142 igtyp =iparg(38,ng)
143 ifailure = iparg(43,ng)
144 istrain = iparg(44,ng)
145 ishplyxfem = iparg(50,ng)
146 isubstack = iparg(71,ng)
147 lft=1
148 llt=nel
149
150 DO i=1,8
151 jj(i) = nel*(i-1)
152 ENDDO
153
154 DO i=lft,llt
155 DO j=1,5
156 sige(i,j) = zero
157 ENDDO
158 ENDDO
159
160
161
162
163 IF(ity==3.OR.ity==7.AND.ishplyxfem > 0)THEN
164 gbuf => elbuf_tab(ng)%GBUF
165 nptr = elbuf_tab(ng)%NPTR
166 npts = elbuf_tab(ng)%NPTS
167 nptt = elbuf_tab(ng)%NPTT
168 nlay = elbuf_tab(ng)%NLAY
169 npg = nptr*npts
170 npt = nlay*nptt
171
172 IF(ity==3)THEN
173 n0 = 0
174 nni = nn4
175 ELSE
176 n0 = numelc
177 nni = nn5
178 ENDIF
179
180
181 fac = zero
182 a1 = zero
183 a2 = zero
184 a3 = zero
185 istre = 1
186
187
188
189 n = 1 + nft
190
191 DO i=lft,llt
192 n = i + nft
193 ilayer = plyelems(n)
194 IF(ilayer > 0) iflag = ilayer
195 ENDDO
196 IF(iflag == 0) GO TO 490
197 ilayer = iflag
198 iflag = 1
199
200
201
202 IF(itens==1)THEN
203 ns1 = 5
204 ns2 = 3
205 a1 = one
206 a2 = zero
207 ELSEIF(itens==2)THEN
208 ns1 = 5
209 ns2 = 3
210 a1 = zero
211 a2 = one
212 ELSEIF(itens==3)THEN
213 ns1 = 5
214 ns2 = 3
215 IF(mlw==1)THEN
216 a1 = one
217 a2 = six
218 ELSEIF(mlw==2.OR.mlw==19.OR.
219 . mlw==15.OR.
220 . mlw==22.OR.mlw==25.OR.
221 . mlw==27.OR.mlw==32.OR.
222 . mlw>=28)THEN
223 a1 = zero
224 a2 = zero
225 ELSEIF(mlw==3.OR.mlw==23)THEN
226 a1 = zero
227 a2 = zero
228 ENDIF
229 ELSEIF(itens==4)THEN
230 ns1 = 5
231 ns2 = 3
232 IF(mlw==1)THEN
233 a1 = zero
234 a2 = zero
235 ELSEIF(mlw==2.OR.mlw==19.OR.
236 . mlw==15.OR.
237 . mlw==22.OR.mlw==25.OR.
238 . mlw==27.OR.mlw==32.OR.
239 . mlw>=28)THEN
240 a1 = one
241 a2 = zero
242 ELSEIF(mlw==3.OR.mlw==23)THEN
243 a1 = one
244 a2 = zero
245 ENDIF
246 ELSEIF(itens>=101.AND.itens<=200)THEN
247 ns1 = 5
248 ns2 = 3
249 IF(mlw==1.OR.mlw==3.OR.mlw==23)THEN
250 a1 = one
251 a2 = zero
252 ELSEIF(mlw==2.OR.mlw==19.OR.
253 . mlw==15.OR.
254 . mlw==22.OR.mlw==25.OR.
255 . mlw==27.OR.mlw==32.OR.
256 . mlw>=28)THEN
257 ipt =
min(npt,itens-100)
258 a1 = one
259 a2 = zero
260 IF(ipt == iply ) ion = 1
261 ENDIF
262
263
264
265 ELSEIF(itens==5)THEN
266 istre = 0
267 ns1 = 8
268 ns2 = 8
269 IF(istrain==1)THEN
270 a1 = zero
271 a2 = zero
272 ELSE
273 a1 = zero
274 a2 = zero
275 ENDIF
276 ELSEIF(itens==6)THEN
277 istre = 0
278 ns1 = 8
279 ns2 = 8
280 IF(istrain==1)THEN
281 a1 = zero
282 a2 = zero
283 ELSE
284 a1 = zero
285 a2 = zero
286 ENDIF
287 ELSEIF(itens==7)THEN
288 istre = 0
289 ns1 = 8
290 ns2 = 8
291 IF(istrain==1)THEN
292 a1 = zero
293 a2 = zero
294 ELSE
295 a1 = zero
296 a2 = zero
297 ENDIF
298 ELSEIF(itens==8)THEN
299 istre = 0
300 ns1 = 8
301 ns2 = 8
302 IF(istrain==1)THEN
303 a1 = zero
304 a2 = zero
305 ELSE
306 a1 = zero
307 a2 = zero
308 ENDIF
309 ELSEIF(itens>=201.AND.itens<=300)THEN
310 istre = 0
311 ns1 = 8
312 ns2 = 8
313 ipt =
min(npt,itens - 200)
314 IF(ipt == iply ) ion = 1
315 IF(istrain==1.AND.npt/=0)THEN
316
317 a1 = one
318 a2 = half*(((2*ilayer-one)/npt)-one)
319 ELSE
320 a1 = zero
321 a2 = zero
322 ENDIF
323
324
325
326 ELSEIF(itens==91)THEN
327 istre = 2
328 a1 = zero
329 a2 = zero
330 ELSEIF(itens==92)THEN
331 istre = 2
332 a1 = zero
333 a2 = zero
334 ELSEIF(itens==93)THEN
335 istre = 2
336 a1 = zero
337 a2 = zero
338 ELSEIF(itens==94)THEN
339 istre = 2
340 a1 = zero
341 a2 = zero
342 ELSEIF(itens>=301.AND.itens<=400)THEN
343 ipt =
min(npt,itens - 300)
344 IF(ipt == iply
345 IF(npt/=0)THEN
346 istre = 2
347
348 a1 = one
349 a2 = half*(((2*ilayer-one)/npt)-one)
350 ELSE
351 istre = 2
352 a1 = zero
353 a2 = zero
354 ENDIF
355 ENDIF
356
357 IF(istre==1)THEN
358
359
360
361 IF(ity==3)THEN
362 ipid = ixc(6,nft+1)
363 ELSE
364 ipid = ixtg(5,nft+1)
365 ENDIF
366 irep = igeo(6,ipid)
367
368 IF (itens>=101.AND.itens<=200
369 . .AND.(mlw==25.OR.mlw==15).AND.irep==1) THEN
370 ivisc = 0
371 nuvarv = 0
372 IF(ity==3)THEN
373 DO i=1,nel
374 mat(i)=ixc(1,nft+i)
375 pid(i)=ixc(6,nft+i)
376 END DO
377 ELSE
378 DO i=1,nel
379 mat(i)=ixtg(1,nft+i)
380 pid(i)=ixtg(5,nft+i)
381 END DO
382 END IF
383 IF(mlw == 25) THEN
384 IF(igtyp == 17)THEN
385
386
387 ipmat = 2 + npt
388 ipmat_iply = ipmat + npt
389
390 nuvarv = 0
391 DO n=1,npt
392 iadr = (n-1)*nel
393 DO i=1,nel
394 matly = stack%IGEO(ipmat+n,isubstack)
395 IF (mat_param(matly)%IVISCTHEN
396 ivisc = 1
397 nuvarv =
max(nuvarv, mat_param(matly)%VISC%NUVAR)
398 END IF
399 END DO
400 END DO
401 END IF
402 ENDIF
403 IF(ion == 1)THEN
404 CALL sigrota(lft ,llt ,nft ,ilayer ,nel ,
405 2 ns1 ,x ,ixc ,elbuf_tab(ng),
406 3 sige ,ity ,ixtg ,ihbe ,istrain ,
407 4 ivisc )
408 DO i=lft,llt
409 n = i + nft
410 ilayer = plyelems(n)
411 IF(ilayer > 0) THEN
412 ie = ie + 1
413 DO j = 1 , 3
414 r4(j) = sige(i,j)
415 ENDDO
416
417 tens(1,el2fa(nel_ply + ie)) = r4(1)
418 tens(2,el2fa(nel_ply + ie)) = r4(2)
419 tens(3,el2fa(nel_ply + ie)) = r4(3)
420 ENDIF
421 ENDDO
422 ELSE
423 DO i=lft,llt
424 n = i + nft
425 ilayer = plyelems(n)
426 IF(ilayer > 0) THEN
427 ie = ie + 1
428 tens(1,el2fa(nel_ply + ie)) = zero
429 tens(2,el2fa(nel_ply + ie)) = zero
430 tens(3,el2fa(nel_ply + ie)) = zero
431 ENDIF
432 ENDDO
433 ENDIF
434
435 ELSEIF (itens>=101.AND.itens<=200
436 . .AND.mlw==25.AND.irep==0) THEN
437
438 IF(ion == 1) THEN
439 DO i=lft,llt
440 DO j = 1 , 5
441 sige(i,j) = zero
442 ENDDO
443 ENDDO
444 DO i=lft,llt
445
446 ilayer = plyelems(n)
447 IF (ilayer > 0) THEN
448 DO ir=1,nptr
449 DO is=1,npts
450 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,1)
451 DO j = 1 , 5
452 sige(i,j
453 ENDDO
454 ENDDO
455 ENDDO
456 ENDIF
457 ENDDO
458
459 DO i=lft,llt
460 n = i + nft
461 ilayer = plyelems(n)
462 IF(ilayer > 0) THEN
463 ie = ie + 1
464 DO j = 1 , 3
465 r4(j) = sige(i,j)
466 ENDDO
467
468 tens(1,el2fa(nel_ply + ie)) = r4(1)
469 tens(2,el2fa(nel_ply + ie)) = r4(2)
470 tens(3,el2fa(nel_ply + ie)) = r4(3)
471 ENDIF
472 ENDDO
473 ELSE
474 DO i=lft,llt
475 n = i + nft
476 ilayer = plyelems(n)
477 IF(ilayer > 0) THEN
478 ie = ie + 1
479
480 tens(1,el2fa(nel_ply + ie)) = zero
481 tens(2,el2fa(nel_ply + ie)) = zero
482 tens(3,el2fa(nel_ply + ie)) = zero
483 ENDIF
484 ENDDO
485 ENDIF
486 ELSE
487 DO i=lft,llt
488 n = i + nft
489 ilayer = plyelems(n)
490 IF(ilayer > 0) THEN
491 ie = ie + 1
492 DO j = 1,3
493 r4(j) = a1 * gbuf%FOR(jj(j)+i) + a2 * gbuf%MOM(jj(j)+i)
494 ENDDO
495
496 tens(1,el2fa(nel_ply + ie)) = r4(1)
497 tens(2,el2fa(nel_ply + ie)) = r4(2)
498 tens(3,el2fa(nel_ply + ie)) = r4(3)
499 ENDIF
500 ENDDO
501 ENDIF
502 ELSEIF (istre == 0 .AND. gbuf%G_STRA > 0) THEN
503
504
505
506 DO i=lft,llt
507 n = i + nft
508 ilayer = plyelems(n)
509 IF(ilayer > 0) THEN
510 thk = gbuf%THK(i)
511 IF(itens/=6)THEN
512 DO j = 1 , 3
513 r4(j) = a1*gbuf%STRA(jj(j)+i)+a2*gbuf%STRA(jj(j)+i)*thk
514 ENDDO
515 ELSE
516 DO j = 1 , 3
517 r4(j) = gbuf%STRA(jj(j)+i)
518 ENDDO
519 ENDIF
520 ie = ie + 1
521
522 tens(1,el2fa(nel_ply + ie)) = r4(1)
523 tens(2,el2fa(nel_ply + ie)) = r4(2)
524 tens(3,el2fa(nel_ply + ie)) = r4(3)
525 ENDIF
526 ENDDO
527 ELSEIF(istre==2)THEN
528
529
530
531 DO i=lft,llt
532 n = i + nft
533 ilayer = plyelems(n)
534 IF(ilayer > 0) THEN
535 thk = gbuf%THK(i)
536 IF(itens/=92)THEN
537 DO j = 1 , 3
538 r4(j) = a1*epsdot(j,n+n0) + a2*epsdot(j
539 ENDDO
540 ELSE
541 DO j = 1 , 3
542 r4(j) = epsdot(j+3,n+n0)
543 ENDDO
544 ENDIF
545
546 ie = ie + 1
547 tens(1,el2fa(nel_ply + ie)) = r4(1)
548 tens(2,el2fa(nel_ply + ie)) = r4(2)
549 tens(3,el2fa(nel_ply + ie)) = r4(3)
550 ENDIF
551 ENDDO
552 ENDIF
553
554 ELSE
555 ENDIF
556 490 CONTINUE
557
558 IF(iflag > 0 ) THEN
559 IF (nspmd == 1)THEN
560 DO i=1,ie
561 n = el2fa(nel_ply + i)
562 r4(1) = tens(1,n)
563 r4(2) = tens(2,n)
564 r4(3) = tens(3,n)
566 ENDDO
567 ELSE
568 DO i=1,ie
569 n = el2fa(nel_ply + i)
570 wa(1,i+nel_ply) = tens(1,n)
571 wa(2,i+nel_ply) = tens(2,n)
572 wa(3,i+nel_ply) = tens(3,n)
573 ENDDO
574 ENDIF
575 ENDIF
576
577 nel_ply = nel_ply +
plyshell(iply)%PLYNUMSHELL
578 ENDDO
579
580 IF (nspmd > 1)THEN
581 IF(ispmd==0) THEN
582 buf = nbf_pxfemg*3
583 ELSE
584 buf = 1
585 ENDIF
587 ENDIF
588
589 DEALLOCATE(wa)
590 RETURN
integer, dimension(:), allocatable indx_ply
type(plyshells), dimension(:), allocatable plyshell
subroutine sigrota(jft, jlt, nft, ipt, nel, ns1, x, ixc, elbuf_str, sig, ity, ixtg, ihbe, istrain, ivisc)
subroutine spmd_r4get_partn(size, nbf_l, nbpart, iadg, wal, buf)
void write_r_c(float *w, int *len)