45
46
47
48 USE my_alloc_mod
49 USE mat_elem_mod
53 USE defaults_mod
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "units_c.inc"
62#include "param_c.inc"
63#include "com01_c.inc"
64#include "com04_c.inc"
65#include "com_xfem1.inc"
66#include "scr17_c.inc"
67#include "scr23_c.inc"
68#include "sphcom.inc"
69#include "tablen_c.inc"
70#include "sms_c.inc"
71#include "boltpr_c.inc"
72
73
74
75 INTEGER , INTENT(IN) :: ISTR_24
76 INTEGER IPARG(NPARG,NGROUP),IPART(LIPART1,*),
77 . IPARTSP(*),IPM(NPROPMI,NUMMAT),IGEO(NPROPGI,NUMGEO),
78 . IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),IXC(NIXC,NUMELC),IXTG(NIXTG,NUMELTG),
79 . FLAG_XFEM,IPARTIG3D(*),IGEO_STACK(NPROPGI,*),
80 . IXT(NIXT,NUMELT),IXP(NIXP,NUMELP),IXR(NIXR,NUMELR),(NIXX,*)
82 INTEGER, INTENT(IN) :: PRINT_FLAG
83 TYPE(ELBUF_STRUCT_),TARGET ,DIMENSION(NGROUP) :: ELBUF_TAB
84 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
85 TYPE(MLAW_TAG_) ,TARGET ,DIMENSION(NUMMAT) :: MLAW_TAG
86 TYPE(EOS_TAG_) ,TARGET ,DIMENSION(0:MAXEOS) :: EOS_TAG
87 TYPE(PROP_TAG_) ,TARGET ,DIMENSION(0:MAXPROP) :: PROP_TAG
88 TYPE(FAIL_TAG_) ,TARGET ,DIMENSION(0:MAXFAIL ) :: FAIL_TAG
89 TYPE (STACK_PLY) :: STACK
90 TYPE(DEFAULTS_), INTENT(INOUT) :: DEFAULTS
91
92
93
94 INTEGER I,J,IL,IR,IS,IT,NG,BUFLEN,IRUPT,IPID,IMID,IPRT,IAD,
95 . NEL,NPT,NPG,MLW,MX,ISORTH,ISRATE,ISROT,IREP,ISVIS,NLAY,
96 . ISTRA,IFAIL,NFAIL,IEOS,IXFEM,NPTR,NPTS,NPTT,ISHPLYXFEM,
97 . NFT,NFT0,KFTS,ITY,JALE,OFF,ISMSTR,ICPRE,,ICNOD,ISNOD,JEUL,
98 . JTUR,JTHE,JLAG,IRS,IRE,ICSTR,NVC,JMULT,IADM1,IADM2,
99 . MMAT1,MMAT2,JHBE,JIVF,JPOR,IPLA,PROC,JCLOS,CODCONV,
100 . IINT,JCVT,ICSEN,ILEV,IEXPAN,IGRE,JSMS,MAXFLAY,IVISC,
101 . NUVAR,NUVARM,NVARTMP,NVARTMP_EOS,NUVARV,IGTYP,TSHELL,TSH_ORT,LINTLOC,
102 . LINTLAY,LINTPAR,NPAR_LAY,NPAR_TAB,NPAR_LBUF,NIP_LAY,NINTLAY,LIMAT,
103 . LIFAIL,LGLOB,LLAY,LLOC,LFAIL,GFAIL,LVISC,LMAT,LPORO,LEOS,NCTRL,
104 . ISUBSTACK,IPPID,IPIDL,NPT_LAY,LEN_PLAPT,LEN_SIGPT,
105 . IPMAT,IPMAT_IPLY,NPTTOT,NUVARN,NX,IBOLTP,CRKDIR,INLOC,LNLOC,
106 . NONL, DEBUG_PRINT,IPINCH,NVAR_EOS,IEOS_TYPE,IDRAPE,LLOC_SLICE,
107 . IPNPT_LAY,IDFAIL,LNLOCTS,ICONTROL,ISHOFFSET,IDAMP_FREQ_RANGE,
108 . LDAMP_FREQ_RANGE,NVAR_DAMP_FREQ_RANGE,NPT0,L_EPS ,L_SIG ,LY_EINT, LY_COUNT
109 INTEGER, ALLOCATABLE, DIMENSION(:,:) :: TFAIL,FAILID
110 INTEGER, ALLOCATABLE, DIMENSION(:) :: IMAT,ILAW
111 TYPE(BUF_LAY_) , POINTER ::
112 TYPE(BUF_INTLAY_) , POINTER :: INTLAY
113 TYPE(G_BUFEL_) , POINTER :: GBUF
114 TYPE(FAIL_LOC_) , POINTER :: FLOC
115 TYPE(BUF_NLOC_) , POINTER :: BUFNL
116 TYPE(BUF_NLOCTS_) , POINTER :: BUFNLTS
117 TYPE(BUF_INTLOC_) , POINTER :: ILBUF
118
119
120
121
122
123
124 debug_print = 0
125
126 IF(print_flag>6) WRITE(iout, 1001)
127
128 DO ng = 1,ngroup
129
130
131 mlw = iparg(1,ng)
132 nel = iparg(2,ng)
133 nft = iparg(3,ng)
134 ity = iparg(5,ng)
135 npt = iparg(6,ng)
136 jale = iparg(7,ng)
137 off = iparg(8,ng)
138 ismstr = iparg(9,ng)
139 icpre = iparg(10,ng)
140 nsg = icpre
141 icnod = iparg(11,ng)
142 jeul = icnod
143 jtur = iparg(12,ng)
144 jthe = iparg(13,ng)
145 jlag = iparg(14,ng)
146 irs = iparg(15,ng)
147 ire = iparg(16,ng)
148 icstr = iparg(17,ng)
149 nvc = iparg(19,ng)
150 jmult = iparg(20,ng)
151 iadm1 = iparg(21,ng)
152 iadm2 = iparg(22,ng)
153 jhbe = iparg(23,ng)
154 jivf = iparg(24,ng)
155 mmat1 = iparg(25,ng)
156 mmat2 = iparg(26,ng)
157 jpor = iparg(27,ng)
158 isnod = iparg(28,ng)
159 ipla = iparg(29,ng)
160 kfts = iparg(30,ng)
161 nft0 = iparg(31,ng)
162 proc = iparg(32,ng)
163 jclos = iparg(33,ng)
164 codconv = iparg(34,ng)
165 irep = iparg(35,ng)
166 iint = iparg(36,ng)
167 jcvt = iparg(37,ng)
168 igtyp = iparg(38,ng)
169 icsen = iparg(39,ng)
170 israte = iparg(40,ng)
171 isrot = iparg
172 IF (isnod == 10) isrot = iparg(74,ng)
173 isorth = iparg(42,ng)
174 ifail = iparg(43,ng)
175 istra = iparg(44,ng)
176 ilev = iparg(45,ng)
177 npg = iparg(48,ng)
178 iexpan = iparg(49,ng)
179 ishplyxfem = iparg(50,ng)
180 igre = iparg(51,ng)
181 jsms = iparg(52,ng)
182 invol = iparg(53,ng)
183 ixfem = iparg(54,ng)
184 ieos = iparg(55,ng)
185 nptr = iparg(56,ng)
186 npts = iparg(57,ng)
187 nptt = iparg(58,ng)
188 nlay = iparg(59,ng)
189 isvis = iparg(60,ng)
190 ivisc = iparg(61,ng)
191 ipid = iparg(62,ng)
192 nctrl = iparg(75,ng)
193 inloc = iparg(78,ng)
194 isubstack = iparg(71,ng)
195 iboltp = iparg(72,ng)
196 ipinch = iparg(90,ng)
197 idrape = iparg(92,ng)
198 idamp_freq_range = iparg(93,ng)
199 ldamp_freq_range = 6*
min(1,idamp_freq_range)
200 IF (npt == 0) THEN
201 nvar_damp_freq_range = (28+16)*
min(1,idamp_freq_range)
202 ELSE
203 nvar_damp_freq_range = 21*
min(1,idamp_freq_range)
204 ENDIF
205 nintlay = 0
206 npt0 = npt
207
208
209 npar_tab = 10
210 npar_lay = 14
211 npar_lbuf = 2
212
213
214
215
216
217
218 IF (debug_print == 1) THEN
219 print*,'**** GROUP,ITY,IGTYP,MLW=',ng,ity,igtyp,mlw
220 print*,' NPAR_TAB,NPAR_LAY,NPAR_LBUF=',npar_tab,npar_lay,npar_lbuf
221 ENDIF
222
223 buflen = 0
224 nfail = 0
225 lfail = 0
226 lvisc = 0
227 lmat = 0
228 lporo = 0
229 leos = 0
230 limat = 0
231 lifail = 0
232 nuvarn = 0
233 crkdir = 0
234 lnloc = 0
235 lnlocts= 0
236
237 IF (ixfem == 0 .AND. flag_xfem == 1) cycle
238
239
240
241 IF (ity == 1 .OR. ity ==THEN
242
243
244
245
246
247 tshell = 0
248 tsh_ort = 0
249 IF (igtyp==20 .OR. igtyp==21 .OR. igtyp==22 .or.
250 . isnod == 16) tshell = 1
251 IF (igtyp==21 .OR. igtyp==22) tsh_ort = 1
252
253
254 IF (ity == 101) THEN
255 nlay = 1
256 ELSEIF (npt == 1) THEN
257 nptr = 1
258 npts = 1
259 nptt = 1
260 IF (jmult > 0) THEN
261 nlay = 2
262 ELSE
263 nlay = 1
264 ENDIF
265
266 IF (mlw == 151) THEN
267 nlay = iparg(20, ng)
268 ENDIF
269 ELSEIF (tshell == 1) THEN
270 npts = npt/10
271 nptt = mod(npt/10,10)
272 nptr = mod(npt,10)
273 IF (jhbe==15) THEN
274 nlay = npt
275 nptr = 1
276 npts = 1
277 nptt = 1
278 ELSEIF (jhbe == 14) THEN
279
280
281
282
283 IF (icstr == 1) THEN
284 nlay = nptr
285 nptr = npts
286 npts = nptt
287 nptt = 1
288 ELSEIF (icstr == 100) THEN
289 nlay = npts
290 npts = nptr
291 nptr = nptt
292 nptt = 1
293 ELSE
294 nlay = nptt
295 nptt = 1
296 ENDIF
297 IF (nlay == 0) THEN
298 ipid = ixs(10,nft+1)
299 nlay = igeo(15,ipid)
300 ENDIF
301 ELSEIF (jhbe==16) THEN
302 nptr = npt/100
303 npts = mod(npt/10,10)
304 nptt = mod(npt,10)
305
306
307
308
309 nlay = npts
310 npts = 1
311
312 ENDIF
313
314 ELSE
315 nlay = 1
316 IF (jhbe == 16 .AND. isnod == 20) THEN
317 nptr = npt/100
318 npts = mod(npt/10,10)
319 nptt = mod(npt,10)
320 ELSEIF (jhbe == 14) THEN
321 npts = abs(npt)/100
322 nptt = mod(abs(npt)/10,10)
323 nptr = mod(abs(npt),10)
324 ELSEIF (jhbe == 12) THEN
325 nptr = 1
326 npts = 1
327 nptt = npt
328 npg = npt
329 ELSEIF (jhbe == 17) THEN
330 npts = 2
331 nptt = 2
332 nptr = 2
333 ELSE
334 nptr = npt
335 npts = 1
336 nptt = 1
337 ENDIF
338 IF (n2d>0 .AND.(jhbe==17.OR.jhbe==22)) THEN
339 npts = 2
340 nptt = 1
341 nptr = 2
342 npg = npt
343 END IF
344 ENDIF
345
346
347 iparg(56,ng) = nptr
348 iparg(57,ng) = npts
349 iparg(58,ng) = nptt
350 iparg(59,ng) = nlay
351 npt = nptr*npts*nptt*nlay
352 iparg(6,ng) = npt
353
354 maxflay = 7
355 CALL my_alloc(tfail,nlay,maxflay)
356 CALL my_alloc(failid,nlay,maxflay)
357 CALL my_alloc(imat,nlay)
358 CALL my_alloc(ilaw,nlay)
359 tfail(:,:) = 0
360 failid(:,:) = 0
361 ilaw(:) = 0
362 imat(:) = 0
363 IF (ity == 1) THEN
364 imid = ixs(1 ,nft+1)
365 ipid = ixs(10,nft+1)
366 ELSEIF (ity == 2) THEN
367 imid = ixq(1,nft+1)
368 ipid = ixq(6,nft+1)
369 ELSEIF (ity == 51) THEN
370 iprt = ipartsp(nft+1)
371 imid = ipart(1,iprt)
372 ipid = ipart(2,iprt)
373 ELSEIF (ity == 101) THEN
374 iprt = ipartig3d(nft+1)
375 imid = ipart(1,iprt)
376 ipid = ipart(2,iprt)
377 ENDIF
378
379
380
381 ALLOCATE(elbuf_tab(ng)%INTLAY(nintlay))
382 ALLOCATE(elbuf_tab(ng)%BUFLY(nlay))
383 DO il = 1, nlay
384 bufly => elbuf_tab(ng)%BUFLY(il)
385 bufly%NPTT = nptt
386 ALLOCATE(bufly%LBUF(nptr,npts,nptt))
387 ALLOCATE(bufly%MAT (nptr,npts,nptt))
388 ALLOCATE(bufly%FAIL(nptr,npts
389 ALLOCATE(bufly%PROP(nptr,npts,nptt))
390 ALLOCATE(bufly%EOS (nptr,npts,nptt))
391 ALLOCATE(bufly%VISC(nptr,npts,nptt))
392 ALLOCATE(bufly%PORO(nptr,npts,nptt))
393 ENDDO
394
395 elbuf_tab(ng)%IGTYP = igtyp
396 elbuf_tab(ng)%NEL = nel
397 elbuf_tab(ng)%NLAY = nlay
398 elbuf_tab(ng)%NINTLAY= nintlay
399 elbuf_tab(ng)%NPTR = nptr
400 elbuf_tab(ng)%NPTS = npts
401 elbuf_tab(ng)%NPTT = nptt
402 elbuf_tab(ng)%IXFEM = ixfem
403 elbuf_tab(ng)%NXEL = nxel
404 elbuf_tab(ng)%IDRAPE = idrape
405
406 npg = nptr*npts*nptt
407
408
409
410 IF (inloc == 0) THEN
411 ALLOCATE(elbuf_tab(ng)%NLOCTS(0,0))
412 ENDIF
413
415
417
418
419
420 IF (igtyp == 22) THEN
421 DO il = 1,nlay
422 imat(il) = igeo(100+il,ipid)
423 ilaw(il) = ipm(2,imat(il))
424 nuvar = mlaw_tag(imat(il))%NUVAR
425 nvar_eos = 0
426 nvartmp_eos = 0
427 ieos_type = ipm(4,imat(il))
428 IF(ieos_type>0)nvar_eos = eos_tag(ieos_type)%NVAR
429 IF(ieos_type>0)nvartmp_eos = eos_tag(ieos_type)%NVARTMP
430 nvartmp = mlaw_tag(imat(il))%NVARTMP
431 nfail = mat_param(imat(il))%NFAIL
432 elbuf_tab(ng)%BUFLY(il)%ILAW = ilaw(il)
433 elbuf_tab(ng)%BUFLY(il)%IMAT = imat(il)
434 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
435 elbuf_tab(ng)%BUFLY(il)%IVISC= mat_param(imat(il))%VISC%ILAW
436 elbuf_tab(ng)%BUFLY(il)%IPORO= 0
437 elbuf_tab(ng)%BUFLY(il)%NFAIL= nfail
438 elbuf_tab(ng)%BUFLY(il
439 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS = nvar_eos
440 elbuf_tab(ng)%BUFLY(il)%NVARTMP = nvartmp
441 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = nvartmp_eos
442 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = mat_param(imat(il))%VISC%NUVAR + nvar_damp_freq_range
443 DO j = 1, nfail
444 irupt = mat_param(imat(il))%FAIL(j)%IRUPT
445 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
446 tfail(il,j) = irupt
447 failid(il,j) = idfail
448 ENDDO
449 IF (mlaw_tag(imat(il))%L_PLA == 0 .and. iparg(10,ng) == 2) THEN
450 iparg(10,ng) = 0
451 ENDIF
452 ENDDO
453
454 ELSEIF (igtyp > 28 .and. igtyp < 32) THEN
455 nuvar = mlaw_tag(imid)%NUVAR
456 nvartmp = mlaw_tag(imid)%NVARTMP
457 nvar_eos = 0
458 nvartmp_eos = 0
459 ieos_type = ipm(4,imid)
460 IF(ieos_type>0)nvar_eos = eos_tag(ieos_type)%NVAR
461 IF(ieos_type>0)nvartmp_eos = eos_tag(ieos_type)%NVARTMP
462 elbuf_tab(ng)%BUFLY(1)%ILAW = mlw
463 elbuf_tab(ng)%BUFLY(1)%IMAT = imid
464 elbuf_tab(ng)%BUFLY(1)%IEOS = 0
465 elbuf_tab(ng)%BUFLY(1)%IVISC= 0
466 elbuf_tab
467 elbuf_tab(ng)%BUFLY(1)%NFAIL = 0
468 elbuf_tab(ng)%BUFLY(1)%NVAR_MAT= nuvar
469 elbuf_tab(ng)%BUFLY(1)%NVAR_EOS= nvar_eos
470 elbuf_tab(ng)%BUFLY(1)%NVARTMP = nvartmp
471 elbuf_tab(ng)%BUFLY(1)%NVARTMP_EOS = nvartmp_eos
472 IF (mlaw_tag(imid)%L_PLA == 0 .and. iparg(10,ng) == 2) THEN
473 iparg(10,ng) = 0
474 ENDIF
475
476 ELSEIF (mlw == 20) THEN
477 DO il = 1,2
478 ilaw(il) = iparg(24+il,ng)
479 mx = mat_param(imid)%MULTIMAT%MID(il)
480 nfail = mat_param(mx)%NFAIL
481 ieos_type = ipm(4, mx)
482 elbuf_tab(ng)%BUFLY(il)%ILAW = ilaw(il)
483 elbuf_tab(ng)%BUFLY(il)%IMAT = mx
484 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
485 elbuf_tab(ng)%BUFLY(il)%IVISC= 0
486 elbuf_tab(ng)%BUFLY(il)%IPORO= 0
487 elbuf_tab(ng)%BUFLY(il)%NFAIL= 0
488 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT= 0
489 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS= 0
490 elbuf_tab(ng)%BUFLY(il)%NVARTMP = 0
491 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = 0
492 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC=0
493 DO j = 1,nfail
494 irupt = mat_param(mx)%FAIL(j)%IRUPT
495 idfail = mat_param(mx)%FAIL(j)%FAIL_ID
496 tfail(il,j) = irupt
497 failid(il,j) = idfail
498 ENDDO
499 ENDDO
500
501 ELSEIF (mlw == 151) THEN
502 DO il = 1,nlay
503 imat(il) = mat_param(imid)%MULTIMAT%MID(il)
504 ilaw(il) = ipm(2,imat(il))
505 nuvar = mlaw_tag(imid)%NUVAR
506 nvartmp = mlaw_tag(imid)%NVARTMP
507 nvar_eos = 0
508 nvartmp_eos = 0
509 ieos_type = mat_param(imat(il))%IEOS
510 IF(ieos_type>0)nvar_eos = eos_tag(ieos_type)%NVAR
511 IF(ieos_type>0)nvartmp_eos = eos_tag(ieos_type)%NVARTMP
512 nfail = mat_param(imat(il))%NFAIL
513 elbuf_tab(ng)%BUFLY(il)%ILAW = ilaw(il)
514 elbuf_tab(ng)%BUFLY(il)%IMAT = imat(il)
515 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos_type
516 elbuf_tab(ng)%BUFLY(il)%IVISC= mat_param(imat(il))%VISC%ILAW
517 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT = nuvar
518 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS = nvar_eos
519 elbuf_tab(ng)%BUFLY(il)%NVARTMP = nvartmp
520 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = nvartmp_eos
521 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = mat_param(imat(il))%VISC%NUVAR + nvar_damp_freq_range
522 elbuf_tab(ng)%BUFLY(il)%IPORO= 0
523 elbuf_tab(ng)%BUFLY(il)%NFAIL = nfail
524 DO j = 1,nfail
525 irupt = mat_param(imat(il))%FAIL(j)%IRUPT
526 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
527 tfail(il,j) = irupt
528 failid(il,j) = idfail
529 ENDDO
530 IF (mlaw_tag(imat(il))%L_PLA == 0 .and. iparg(10,ng) == 2) THEN
531 iparg(10,ng) = 0
532 ENDIF
533 ENDDO
534
535 ELSEIF (nlay > 1) THEN
536 DO il = 1,nlay
537 imat(il) = imid
538 ilaw(il) = mlw
539 nuvar = mlaw_tag(imid)%NUVAR
540 nvartmp = mlaw_tag(imid)%NVARTMP
541 nfail = mat_param(imat(il))%NFAIL
542 elbuf_tab(ng)%BUFLY(il)%ILAW = mlw
543 elbuf_tab(ng)%BUFLY(il)%IMAT = imid
544 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
545 elbuf_tab(ng)%BUFLY(il)%IVISC= mat_param(imid)%VISC%ILAW
546 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT= nuvar
547 elbuf_tab(ng)%BUFLY(il)%NVARTMP = nvartmp
548 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS= 0
549 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = 0
550 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC=mat_param(imid)%VISC%NUVAR + nvar_damp_freq_range
551 elbuf_tab(ng)%BUFLY(il)%IPORO= 0
552 elbuf_tab(ng)%BUFLY(il)%NFAIL = nfail
553 DO j = 1,nfail
554 irupt = mat_param(imat(il))%FAIL(j)%IRUPT
555 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
556 tfail(il,j) = irupt
557 failid(il,j) = idfail
558 ENDDO
559 IF (mlaw_tag(imat(il))%L_PLA == 0 .and. iparg(10,ng) == 2) THEN
560 iparg(10,ng) = 0
561 ENDIF
562 ENDDO
563
564
565 IF (inloc > 0) THEN
566
567 ALLOCATE(elbuf_tab(ng)%NLOCTS(nptr,npts))
568
569 nonl = nlay+1
570
571 DO ir = 1,elbuf_tab(ng)%NPTR
572 DO is = 1,elbuf_tab(ng)%NPTS
573
574 bufnlts => elbuf_tab(ng)%NLOCTS(ir,is)
575
576 CALL my_alloc(bufnlts%MASSTH,nel,nonl)
577 bufnlts%MASSTH = zero
578 lnlocts = lnlocts + nel*nonl
579
580 CALL my_alloc(bufnlts%UNLTH,nel,nonl)
581 bufnlts%UNLTH = zero
582 lnlocts = lnlocts + nel*nonl
583
584 CALL my_alloc(bufnlts%VNLTH,nel,nonl)
585 bufnlts%VNLTH = zero
586 lnlocts = lnlocts + nel*nonl
587
588 CALL my_alloc(bufnlts%FNLTH,nel,nonl)
589 bufnlts%FNLTH = zero
590 lnlocts = lnlocts + nel*nonl
591 ENDDO
592 ENDDO
593 ENDIF
594
595 ELSE
596 nuvar = mlaw_tag(imid
597 nvartmp = mlaw_tag(imid)%NVARTMP
598 nvar_eos = 0
599 nvartmp_eos = 0
600 ieos_type = ipm(4,imid)
601 IF (ieos_type > 0) nvar_eos = eos_tag(ieos_type)%NVAR
602 IF (ieos_type > 0) nvartmp_eos = eos_tag(ieos_type)%NVAR
603 nfail = mat_param(imid)%NFAIL
604 elbuf_tab(ng)%BUFLY(1)%ILAW = mlw
605 elbuf_tab(ng)%BUFLY(1)%IMAT = imid
606 elbuf_tab(ng)%BUFLY(1)%IEOS = ieos
607 elbuf_tab(ng)%BUFLY(1)%NVAR_MAT= nuvar
608 elbuf_tab(ng)%BUFLY(1)%NVAR_EOS= nvar_eos
609 elbuf_tab(ng)%BUFLY(1)%NVARTMP = nvartmp
610 elbuf_tab(ng)%BUFLY(1)%NVARTMP_EOS = nvartmp_eos
611 elbuf_tab(ng)%BUFLY(1)%IVISC = mat_param(imid)%VISC%ILAW
612 elbuf_tab(ng)%BUFLY(1)%NVAR_VISC = mat_param(imid)%VISC%NUVAR + nvar_damp_freq_range
613 elbuf_tab(ng)%BUFLY(1)%IPORO= 0
614 elbuf_tab(ng)%BUFLY(1)%NFAIL = nfail
615 DO j =
616 irupt = mat_param(imid)%FAIL(j)%IRUPT
617 idfail = mat_param(imid)%FAIL(j)%FAIL_ID
618 tfail(1,j) = irupt
619 failid(1,j) = idfail
620 ENDDO
621
622 ENDIF
623
624 DO il = 1, nlay
625 mx = elbuf_tab(ng)%BUFLY(il)%IMAT
626 nuvarv = mat_param(mx)%VISC%NUVAR + nvar_damp_freq_range
627 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = nuvarv
628 nuvarm = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
629 nvartmp = elbuf_tab(ng)%BUFLY(il)%NVARTMP
630 nfail = elbuf_tab(ng)%BUFLY(il)%NFAIL
631 nvar_eos= elbuf_tab(ng)%BUFLY(il)%NVAR_EOS
632 nvartmp_eos = elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS
633 DO ir = 1,nptr
634 DO is = 1,npts
635 DO it = 1,nptt
636 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%MLAW = elbuf_tab(ng)%BUFLY(il)%ILAW
637 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%LawID = mx
638 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR,nuvarm*nel)
639 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP,nvartmp*nel)
640 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%VISC(ir,is,it)%VAR,nuvarv*nel)
641 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR,nvar_eos*nel)
642 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VARTMP,nvartmp_eos*nel)
643
644 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR(1:nuvarm*nel) = zero
645 elbuf_tab(ng)%BUFLY(il)%VISC(ir,is,it)%VAR(1:nuvarv*nel) = zero
646 elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR(1:nvar_eos*nel) = zero
647 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP(1:nvartmp*nel) = 0
648 elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VARTMP(1:nvartmp_eos*nel) = 0
649
650 lmat = lmat + nuvarm*nel
651 lvisc = lvisc + nuvarv*nel
652 leos = leos + nvar_eos
653
654 ALLOCATE(elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(nfail))
655
656
657 DO j = 1,nfail
658 floc=>elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it
659
660 irupt = mat_param(mx)%FAIL(j)%IRUPT
661 floc%ILAWF = irupt
662 lfail = lfail + 1
663
664 floc%IDFAIL = mat_param(mx)%FAIL(j)%FAIL_ID
665 lfail = lfail + 1
666
667 floc%NVAR = mat_param(mx)%FAIL(j)%NUVAR
668 CALL my_alloc(floc%VAR,floc%NVAR*nel)
669 floc%VAR = zero
670 lfail = lfail + floc%NVAR*nel + 1
671
672 floc%LF_DAM = fail_tag(irupt)%LF_DAM
673 CALL my_alloc(floc%DAM,floc%LF_DAM*nel)
674 floc%DAM = zero
675 lfail = lfail + floc%LF_DAM*nel + 1
676
677 floc%LF_DAMMX = fail_tag(irupt)%LF_DAMMX
678 CALL my_alloc(floc%DAMMX,floc%LF_DAMMX*nel)
679 floc%DAMMX = zero
680 lfail = lfail + floc%LF_DAMMX*nel + 1
681
682 floc%LF_DAMINI = fail_tag(irupt)%LF_DAMINI
683 CALL my_alloc(floc%DAMINI,floc%LF_DAMINI*nel)
684 floc%DAMINI = zero
685 lfail = lfail + floc%LF_DAMINI*nel + 1
686
687 floc%LF_TDEL = fail_tag(irupt)%LF_TDEL
688 CALL my_alloc(floc%TDEL,floc%LF_TDEL*nel)
689 floc%TDEL = zero
690 lfail = lfail + floc%LF_TDEL*nel + 1
691
692 floc%LF_INDX = fail_tag(irupt)%LF_INDX
693 CALL my_alloc(floc%INDX,floc%LF_INDX*nel)
694 floc%INDX = 0
695 lfail = lfail + floc%LF_INDX*nel + 1
696
697 floc%LF_OFF = fail_tag(irupt)%LF_OFF
698 CALL my_alloc(floc%OFF,floc%LF_OFF*nel)
699 floc%OFF = 1
700 lfail = lfail + floc%LF_OFF*nel + 1
701
702 ENDDO
703 ENDDO
704 ENDDO
705 ENDDO
706 ENDDO
707
708 gbuf => elbuf_tab(ng)%GBUF
709 IF (igtyp == 43) THEN
710 elbuf_tab(ng)%BUFLY(1)%L_EPSA = 3
711 elbuf_tab(ng)%BUFLY(1)%L_EPE = 3
712 ENDIF
713 IF (ismstr /= 4 .OR. jlag >0)THEN
714 IF (igtyp == 43) THEN
715 elbuf_tab(ng)%BUFLY(1)%L_VOL = 1
716 ELSEIF (ity == 1)THEN
717 IF (isnod == 10 .OR. isnod == 16 .OR. isnod == 20 ) THEN
718 gbuf%G_SMSTR = 3*isnod
719
720 ELSEIF (isnod == 4 .AND.isrot == 1) THEN
721 gbuf%G_SMSTR = 3*(isnod+6)
722 ELSE
723 gbuf%G_SMSTR = 3*(isnod-1)
724 ENDIF
725 ENDIF
726 ENDIF
727 IF (ity == 1.AND.(igtyp == 20.OR.igtyp == 21.OR.igtyp == 22)) gbuf%G_IDT_TSH=1
728
729
730 IF (ity == 1 .AND. isnod == 4 .AND. isrot == 3 ) THEN
731 gbuf%G_AMU = 1
732 ENDIF
733
734
735 icontrol = -huge(icontrol)
736 IF (ity == 1 ) THEN
737 icontrol = igeo(97,ipid)
738 IF (icontrol==1) gbuf%G_EINT_DISTOR = 1
739 ENDIF
740
741 IF ((ismstr == 10.OR.ismstr == 12).AND.ity == 1)THEN
742 IF (isnod == 10.OR.(isnod==4 .AND. isrot==1)) THEN
743 gbuf%G_JAC_I = 0
744 elbuf_tab(ng)%BUFLY(1)%L_JAC_I=0
745 elbuf_tab(ng)%BUFLY(1)%L_PIJ=3*10
746 ELSEIF (isnod == 8.AND.jhbe == 17 ) THEN
747 gbuf%G_JAC_I = 9 + 1
748 elbuf_tab(ng)%BUFLY(1)%L_JAC_I=0
749 elbuf_tab(ng)%BUFLY(1)%L_PIJ=3*isnod
750 IF (iint == 2.AND.icpre == 0 ) elbuf_tab(ng)%BUFLY(1)%L_PIJ=9*isnod
751 IF (iint == 2) gbuf%G_ETOTSH = 6
752 ELSE
753 gbuf%G_JAC_I = 9 + 1
754 elbuf_tab(ng)%BUFLY(1)%L_JAC_I=gbuf%G_JAC_I
755
756 END IF
757
758 IF (ismstr == 12 .AND. mlw==1 ) elbuf_tab(ng)%BUFLY(1)%L_SIGL=6
759 ENDIF
760 IF (jthe /= 0) gbuf%G_TEMP = 1
761 IF (jthe /= 0 .AND. npg > 1) gbuf%G_TEMPG = npg
762 IF (jeul+jale /= 0 .AND. isnod >= 4) gbuf%G_MOM = 3
763 IF (jhbe == 15 .OR. jhbe == 24) gbuf%G_HOURG = 12
764 IF (jhbe == 15 .AND. isnod == 6) THEN
765 gbuf%G_HOURG = 2
766 IF (icontrol==1) gbuf%G_HOURG = 12
767 END IF
768 IF (jhbe == 1 .AND. iint == 3) gbuf%G_HOURG = 12
769
770 IF (jhbe == 24) gbuf%G_STRHG = 3*6
771
772 IF(iexpan > 0) THEN
773 gbuf%G_FORTH = 1
774 gbuf%G_EINTTH = 1
775 ENDIF
776 IF (mlw /= 115) gbuf%G_RHO = 1
777 gbuf%G_DT = 1
778 IF (isms_selec >= 1) gbuf%G_ISMS = 1
779 IF (jcvt>0.AND.ity == 1) gbuf%G_GAMA_R = 6
780
781
782 DO il = 1, nlay
783 bufly => elbuf_tab(ng)%BUFLY(il)
784 IF (mlw /= 115) bufly%L_RHO = 1
785
786 IF (isorth == 1 .AND. isrot > 0) bufly%L_SIGD = 6
787 IF ((istra > 0 .AND. mlw /= 0) .OR. ity == 101)
788 . bufly%L_STRA = 6
789 IF (gbuf%G_GAMA > 0 .AND. nlay > 1) bufly%L_GAMA = gbuf%G_GAMA
790 IF (jthe /= 0) bufly%L_TEMP = 1
791 IF (isvis > 0 ..OR. bufly%IVISC == 1 .OR. bufly%IVISC == 3 ) bufly%L_SIGV = 6
792 IF ((ivisc > 0).OR.(idamp_freq_range > 0)) bufly%L_VISC = 6
793
794 IF(iexpan > 0) THEN
795 bufly%L_FORTH = 1
796 bufly%L_EINTTH = 1
797 ENDIF
798 IF(iufacyld == 1.AND.(mlw==36.OR.mlw==87))bufly%L_FAC_YLD = 1
799
800 IF(ity == 1) bufly%L_VOL0DP = 1
801 IF ((isorth == 1).AND.(igtyp == 34)) THEN
802 bufly%L_SIGL = 6
803 ENDIF
804 ENDDO
805
806
807 IF ((isorth == 1).AND.(igtyp == 34)) THEN
808 gbuf%G_GAMA = 6
809 ENDIF
810
811
812 gbuf%G_BPRELD = nbpreld*iboltp
813
814
815 IF (ity==1 .AND. jhbe==17 .AND. iint==3) THEN
816 gbuf%G_COR_NF = 24
817
818 gbuf%G_COR_FR = 9
819
820 gbuf%G_COR_XR = 21
821 ENDIF
822
823
825 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
826 . imid ,mlw ,igtyp ,jmult ,ifail ,
827 . ieos ,eos_tag ,isnod )
828
829
830
831
832
833
834
835 buflen = npar_tab + lmat + lfail + lvisc + lporo + leos + limat + lifail + lnlocts
836
837 lglob = 0
838 lglob = lglob + gbuf%G_NOFF
839 lglob = lglob + gbuf%G_IERR
840 lglob = lglob + gbuf%G_GAMA
841
842
843
844 lglob = lglob + gbuf%G_HOURG
845 lglob = lglob + gbuf%G_TAG22
846 lglob = lglob + gbuf%G_STRA
847 lglob = lglob + gbuf%G_SIGI
848 lglob = lglob + gbuf%G_DMG
849 lglob = lglob + gbuf%G_DAMDL
850 lglob = lglob + gbuf%G_FOR
851 lglob = lglob + gbuf%G_MOM
852 lglob = lglob + gbuf%G_THK
853 lglob = lglob + gbuf%G_STRW
854 lglob = lglob + gbuf%G_THK_I
855 lglob = lglob + gbuf%G_JAC_I
856 lglob = lglob + gbuf%G_DT
857 lglob = lglob + gbuf%G_ISMS
858 lglob = lglob + gbuf%G_BPRELD
859 lglob = lglob + gbuf%G_COR_NF
860 lglob = lglob + gbuf%G_COR_FR
861 lglob = lglob + gbuf%G_COR_XR
862 lglob = lglob + gbuf%G_MAXFRAC
863 lglob = lglob + gbuf%G_MAXEPS
864 lglob = lglob + gbuf%G_AMU
865 lglob = lglob + gbuf%G_EINT_DISTOR
866 lglob = lglob + gbuf%G_WPLA
867
868 IF (npg > 1) THEN
869 lglob = lglob + gbuf%G_FORPG
870 lglob = lglob + gbuf%G_MOMPG
871
872 lglob = lglob + gbuf%G_FORPGPINCH
873 lglob = lglob + gbuf%G_MOMPGPINCH
874 lglob = lglob + gbuf%G_EPGPINCHXZ
875 lglob = lglob + gbuf%G_EPGPINCHYZ
876 lglob
877
878 lglob = lglob + gbuf%G_STRPG
879 lglob = lglob + gbuf%G_STRWPG
880 lglob = lglob + gbuf%G_TEMPG
881 ENDIF
882
883 IF (npt /= 1) THEN
884 lglob = lglob + gbuf%G_BFRAC
885 lglob = lglob + gbuf%G_OFF
886 lglob = lglob + gbuf%G_EINT
887 lglob = lglob + gbuf%G_EINS
888 lglob = lglob + gbuf%G_RHO
889 lglob = lglob + gbuf%G_QVIS
890 lglob = lglob + gbuf%G_DELTAX
891 lglob = lglob + gbuf%G_VOL
892 lglob = lglob + gbuf%G_EPSD
893 lglob = lglob + gbuf%G_EPSQ
894 lglob = lglob + gbuf%G_PLA
895 lglob = lglob + gbuf%G_TEMP
896 lglob = lglob + gbuf%G_TB
897 lglob = lglob + gbuf%G_RK
898 lglob = lglob + gbuf%G_RE
899 lglob = lglob + gbuf%G_SIG
900
901 lglob = lglob + gbuf%G_FORTH
902 lglob = lglob + gbuf%G_EINTTH
903 lglob = lglob + gbuf%G_SEQ
904 lglob = lglob + gbuf%G_ABURN
905 lglob = lglob + gbuf%G_MU
906 ENDIF
907 IF (lfail > 0) THEN
908 gbuf%G_UELR = 1
909 gbuf%G_UELR1 = 1
910 lglob = lglob + gbuf%G_UELR
911 lglob = lglob + gbuf%G_UELR1
912 ENDIF
913
914 lglob = lglob + gbuf%G_AREA
915 lglob = lglob + gbuf%G_SKEW
916 lglob = lglob + gbuf%G_LENGTH
917 lglob = lglob + gbuf%G_TOTDEPL
918 lglob = lglob + gbuf%G_TOTROT
919 lglob = lglob + gbuf%G_FOREP
920 lglob = lglob + gbuf%G_MOMEP
921 lglob = lglob + gbuf%G_DEP_IN_TENS
922 lglob = lglob + gbuf%G_DEP_IN_COMP
923 lglob = lglob + gbuf%G_ROT_IN_TENS
924 lglob = lglob + gbuf%G_ROT_IN_COMP
925 lglob = lglob + gbuf%G_POSX
926 lglob = lglob + gbuf%G_POSY
927 lglob = lglob + gbuf%G_POSZ
928 lglob = lglob + gbuf%G_POSXX
929 lglob = lglob + gbuf%G_POSYY
930 lglob = lglob + gbuf%G_POSZZ
931 lglob = lglob + gbuf%G_YIELD
932 lglob = lglob + gbuf%G_LENGTH_ERR
933 lglob = lglob + gbuf%G_DV
934 lglob = lglob + gbuf%G_DFS
935 lglob = lglob + gbuf%G_SKEW_ERR
936 lglob = lglob + gbuf%G_E6
937 lglob = lglob + gbuf%G_RUPTCRIT
938 lglob = lglob + gbuf%G_MASS
939 lglob = lglob + gbuf%G_V_REPCVT
940 lglob = lglob + gbuf%G_VR_REPCVT
941 lglob = lglob + gbuf%G_NUVAR
942 lglob = lglob + gbuf%G_DEFINI
943 lglob = lglob + gbuf%G_FORINI
944 lglob = lglob + gbuf%G_INIFRIC
945 lglob = lglob + gbuf%G_STRHG
946 lglob = lglob + gbuf%G_DT_PITER
947 lglob = lglob + gbuf%G_IDT_TSH
948
949 lglob = lglob + gbuf%G_FILL
950
951 lglob = lglob + gbuf%G_TM_YIELD
952 lglob = lglob + gbuf%G_TM_SEQ
953 lglob = lglob + gbuf%G_TM_EINT
954 lglob = lglob + gbuf%G_TM_DMG
955 lglob = lglob + 2*gbuf%G_TM_SIG
956 lglob = lglob + 2*gbuf%G_TM_STRA
957
958
959 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel
960
961
962 llay = 0
963 DO i=1,nlay
964 bufly => elbuf_tab(ng)%BUFLY(i)
965
966 llay = llay + npar_lay + bufly%NVAR_LAY + bufly%NVAR_LOC
967 llay = llay + nel*bufly%LY_DMG
968 llay = llay + nel*bufly%LY_GAMA
969 IF(idrape == 0 .OR. (idrape > 0 .and . igtyp == 17)) THEN
970 llay = llay + nel*bufly%LY_DIRA
971 llay = llay + nel*bufly%LY_DIRB
972 ENDIF
973 IF (npg > 1) THEN
974 IF (nlay > 1) THEN
975 len_plapt = nel*bufly%LY_PLAPT
976 len_sigpt = nel*bufly%LY_SIGPT
977 ELSE
978 IF (igtyp /= 51 .AND. igtyp /= 52) THEN
979 len_plapt = nel*bufly%LY_PLAPT*npt
980 len_sigpt = nel*bufly%LY_SIGPT*npt
981 ELSE
982 len_plapt = nel*bufly%LY_PLAPT*bufly%NPTT
983 len_sigpt = nel*bufly%LY_SIGPT*bufly%NPTT
984 ENDIF
985 ENDIF
986
987
988 llay = llay + len_plapt
989 llay = llay + len_sigpt
990 ENDIF
991 llay = llay + nel*bufly%LY_HOURG
992 ENDDO
993 buflen = buflen + llay
994
995 DO i=1,nlay
996 bufly => elbuf_tab(ng)%BUFLY(i)
997
998 lloc = 0
999 lloc = lloc + bufly%L_OFF
1000 lloc = lloc + bufly%L_GAMA
1001 lloc = lloc + bufly%L_STRA
1002 lloc = lloc + bufly%L_FRAC
1003 lloc = lloc + bufly%L_BFRAC
1004 lloc = lloc + bufly%L_EINT
1005 lloc = lloc + bufly%L_EINS
1006 lloc = lloc + bufly%L_RHO
1007 lloc = lloc + bufly%L_DP_DRHO
1008 lloc = lloc + bufly%L_QVIS
1009 lloc = lloc + bufly%L_DELTAX
1010 lloc = lloc + bufly%L_VOL
1011 lloc = lloc + bufly%L_EPSA
1012 lloc = lloc + bufly%L_EPSD
1013 lloc = lloc + bufly%L_EPSQ
1014 lloc = lloc + bufly%L_EPSF
1015 lloc = lloc + bufly%L_PLA
1016 lloc = lloc + bufly%L_WPLA
1017 lloc = lloc + bufly%L_TEMP
1018 lloc = lloc + bufly%L_TB
1019 lloc = lloc + bufly%L_RK
1020 lloc = lloc + bufly%L_RE
1021 lloc = lloc + bufly%L_VK
1022 lloc = lloc + bufly%L_SF
1023 lloc = lloc + bufly%L_ROB
1024 lloc = lloc + bufly%L_DAM
1025 lloc = lloc + bufly%L_DSUM
1026 lloc = lloc + bufly%L_DGLO
1027 lloc = lloc + bufly%L_CRAK
1028 lloc = lloc + bufly%L_ANG
1029 lloc = lloc + bufly%L_EPE
1030 lloc = lloc + bufly%L_EPC
1031 lloc = lloc + bufly%L_XST
1032 lloc = lloc + bufly%L_SSP
1033 lloc = lloc + bufly%L_Z
1034 lloc = lloc + bufly%L_VISC
1035 lloc = lloc + bufly%L_SIGL
1036 lloc = lloc + bufly%L_SIGV
1037 lloc = lloc + bufly%L_SIGA
1038 lloc = lloc + bufly%L_SIGB
1039 lloc = lloc + bufly%L_SIGC
1040 lloc = lloc + bufly%L_SIGD
1041 lloc = lloc + bufly%L_SIGF
1042 lloc = lloc + bufly%L_SIG
1043 lloc = lloc + bufly%L_FOR
1044 lloc = lloc + bufly%L_MOM
1045 lloc = lloc + bufly%L_THK
1046 lloc = lloc + bufly%L_SMSTR
1047 lloc = lloc + bufly%L_DMG
1048 lloc = lloc + bufly%L_FORTH
1049 lloc = lloc + bufly%L_EINTTH
1050 lloc = lloc + bufly%L_SEQ
1051 lloc = lloc + bufly%L_JAC_I
1052
1053 lloc = lloc + bufly%L_ABURN
1054 lloc = lloc + bufly%L_MU
1055 lloc = lloc + bufly%L_PIJ
1056
1057 lloc = lloc + bufly%L_PLANL
1058 lloc = lloc + bufly%L_EPSDNL
1059 lloc = lloc + bufly%L_DMGSCL
1060 lloc = lloc + bufly%L_TSAIWU
1061 buflen
1062 ENDDO
1063
1064
1065 iparg(66,ng) = buflen
1066
1067
1068
1069
1071 . nintlay,nel,npt,ng,ngroup,ity
1072 . igtyp,npropm,nummat,pm )
1073
1074 DEALLOCATE(tfail)
1075 DEALLOCATE(failid)
1076 DEALLOCATE(imat)
1077 DEALLOCATE(ilaw)
1078
1079
1080
1081 ELSEIF (ity == 3 .OR. ity == 7) THEN
1082
1083
1084
1085
1086
1087 IF (ity == 3) THEN
1088 imid = ixc(1,nft+1)
1089 ipid = ixc(6,nft+1)
1090 ELSEIF (ity == 7) THEN
1091 imid = ixtg(1,nft+1)
1092 ipid = ixtg(5,nft+1)
1093 ENDIF
1094 elbuf_tab(ng)%GBUF%G_DT = 1
1095
1096 nptt = 1
1097 IF (ity == 3 .and. jhbe == 11) THEN
1098 nptr = 2
1099 npts = 2
1100 ELSEIF (ity==7 .and. jhbe == 30) THEN
1101 nptr = 3
1102 npts = 1
1103 ELSE
1104 nptr = 1
1105 npts = 1
1106 ENDIF
1107 IF (igtyp == 10 .or. igtyp == 11 .or. igtyp == 16 .or.
1108 . igtyp == 17 .or. igtyp == 51 .or. igtyp == 52) THEN
1110 nptt = 1
1111 ELSE
1112 nlay = 1
1114 ENDIF
1115 IF (igtyp == 17 .and. ishplyxfem == 1) nintlay = nlay-1
1116 IF (ity == 7 .AND. mlw == 151) THEN
1117 nlay = iparg(20, ng)
1118 ENDIF
1119
1120
1121 iparg(56,ng) = nptr
1122 iparg(57,ng) = npts
1123 iparg(58,ng) = nptt
1124 iparg(59,ng) = nlay
1125 npg = nptr*npts
1126
1127 elbuf_tab(ng)%IGTYP = igtyp
1128 elbuf_tab(ng)%NEL = nel
1129 elbuf_tab(ng)%NLAY = nlay
1130 elbuf_tab(ng)%NINTLAY= nintlay
1131 elbuf_tab(ng)%NPTR = nptr
1132 elbuf_tab(ng)%NPTS = npts
1133 elbuf_tab(ng)%NPTT = nptt
1134 elbuf_tab(ng)%IXFEM = ixfem
1135 elbuf_tab(ng)%NXEL = nxel
1136 elbuf_tab(ng)%IDRAPE = idrape
1137
1138
1139
1140 IF (igtyp == 51 .OR. igtyp == 52) THEN
1141 npt = npg*npt
1142 ELSE
1143 npt = npg*nlay*nptt
1144 ENDIF
1145
1146
1147
1148
1149
1150
1151 maxflay = 7
1152 CALL my_alloc(tfail,nlay,maxflay)
1153 CALL my_alloc(failid,nlay,maxflay)
1154 CALL my_alloc(imat,nlay)
1155 CALL my_alloc(ilaw,nlay)
1156
1157
1158
1159 IF (inloc == 0) THEN
1160 ALLOCATE(elbuf_tab(ng)%NLOC(0,0))
1161 ENDIF
1162
1163 tfail(:,:) = 0
1164 failid(:,:) = 0
1165 ilaw(:) = 0
1166 imat(:) = 0
1167
1168
1169
1170 ALLOCATE(elbuf_tab(ng)%BUFLY(nlay))
1171
1172 IF(idrape > 0) THEN
1173 IF (igtyp == 51 .OR. igtyp == 52 ) THEN
1174
1175 ippid = 2
1176 ipnpt_lay = ippid + 3*nlay
1177 DO il = 1,nlay
1178 npt_lay = stack%IGEO(ipnpt_lay + il,isubstack)
1179 elbuf_tab(ng)%BUFLY(il)%NPTT = npt_lay
1180 ENDDO
1181 ELSE
1182 DO il = 1,nlay
1183 elbuf_tab(ng)%BUFLY(il)%NPTT = nptt
1184 ENDDO
1185 ENDIF
1186 ELSE
1187 IF (igtyp == 51 ) THEN
1188
1189 ippid = 2
1190 DO il = 1,nlay
1191 ipidl = stack%IGEO(ippid+il,isubstack)
1192 npt_lay = igeo(4,ipidl)
1193 elbuf_tab(ng)%BUFLY(il)%NPTT = npt_lay
1194 ENDDO
1195 ELSEIF(igtyp == 52) THEN
1196 ippid = 2
1197 DO il = 1,nlay
1198 ipidl = stack%IGEO(ippid+il,isubstack)
1199 npt_lay = igeo_stack(4,ipidl)
1200 elbuf_tab(ng)%BUFLY(il)%NPTT = npt_lay
1201 ENDDO
1202 ELSE
1203 DO il = 1,nlay
1204 elbuf_tab(ng)%BUFLY(il)%NPTT = nptt
1205 ENDDO
1206 ENDIF
1207 ENDIF
1208
1209 npttot = 0
1210 DO i=1,nlay
1211 npttot = npttot + npg*elbuf_tab(ng)%BUFLY(i)%NPTT
1212 ENDDO
1213
1214 DO il = 1, nlay
1215 bufly => elbuf_tab(ng)%BUFLY(il)
1216 nptt = bufly%NPTT
1217 ALLOCATE(bufly%LBUF(nptr,npts,nptt))
1218 ALLOCATE(bufly%MAT (nptr,npts,nptt))
1219 ALLOCATE(bufly%FAIL(nptr,npts,nptt))
1220 ALLOCATE(bufly%PROP(nptr,npts,nptt))
1221 ALLOCATE(bufly%EOS (nptr,npts,nptt))
1222 ALLOCATE(bufly%VISC(nptr,npts,nptt))
1223 ALLOCATE(bufly%PORO(nptr,npts,nptt))
1224 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52))
1225 . ALLOCATE(elbuf_tab(ng)%BUFLY(il)%LBUF_DIR(nptt))
1226 ENDDO
1227
1228
1229 IF ((inloc > 0).AND.(nptt>1)) THEN
1230
1231 ALLOCATE(elbuf_tab(ng)%NLOC(nptr,npts))
1232
1233 IF (nptt>2) THEN
1234 nonl = nptt+1
1235 ELSE
1236 nonl = nptt
1237 ENDIF
1238
1239 DO ir = 1,nptr
1240 DO is = 1,npts
1241
1242 bufnl => elbuf_tab(ng)%NLOC(ir,is)
1243
1244 CALL my_alloc(bufnl%MASSTH,nel,nonl)
1245 bufnl%MASSTH = zero
1246 lnloc = lnloc + nel*nonl
1247
1248 CALL my_alloc(bufnl%UNLTH,nel,nonl)
1249 bufnl%UNLTH = zero
1250 lnloc = lnloc + nel*nonl
1251
1252 CALL my_alloc(bufnl%VNLTH,nel,nonl)
1253 bufnl%VNLTH = zero
1254 lnloc = lnloc + nel*nonl
1255
1256 CALL my_alloc(bufnl%FNLTH,nel,nonl)
1257 bufnl%FNLTH = zero
1258 lnloc = lnloc + nel*nonl
1259 ENDDO
1260 ENDDO
1261 ENDIF
1262
1263
1264 ALLOCATE(elbuf_tab(ng)%INTLAY(nintlay))
1265 DO i = 1, nintlay
1266 intlay => elbuf_tab(ng)%INTLAY(i)
1267 ALLOCATE(intlay%ILBUF(nptr,npts))
1268 ALLOCATE(intlay%MAT (nptr,npts))
1269 ALLOCATE(intlay%FAIL (nptr,npts))
1270 ENDDO
1271
1273
1275
1276
1277
1278 IF (igtyp == 11 .or. igtypTHEN
1279 DO il = 1,nlay
1280 imat(il) = igeo(100+il,ipid)
1281 ilaw(il) = ipm(2,imat(il))
1282 ENDDO
1283 ELSEIF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp ==52) THEN
1284 ipmat = 2 + nlay
1285 DO il = 1,nlay
1286 imat(il) = stack%IGEO(ipmat + il ,isubstack)
1287 ilaw(il) = ipm(2,imat(il))
1288 ENDDO
1289 ELSEIF(ipm(2,imid) == 151)THEN
1290 DO il = 1,nlay
1291 imat(il) = ipm(20+il,imid)
1292 ilaw(il) = ipm(2
1293 ENDDO
1294 ELSE
1295 DO il = 1,nlay
1296 imat(il) = imid
1297 ilaw(il) = mlw
1298 ENDDO
1299 END IF
1300
1301
1302 IF (mlw == 151) THEN
1303 DO il = 1,nlay
1304 ieos_type = mat_param(imat(il))%IEOS
1305 elbuf_tab(ng)%BUFLY(il)%ILAW = ilaw(il)
1306 elbuf_tab(ng)%BUFLY(il)%IMAT = imat(il)
1307 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
1308 elbuf_tab(ng)%BUFLY(il)%IVISC= 0
1309 elbuf_tab(ng)%BUFLY(il)%IPORO= 0
1310 elbuf_tab(ng)%BUFLY(il)%NFAIL= 0
1311 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = 0
1312 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT = 0
1313 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS = 0
1314 elbuf_tab(ng)%BUFLY(il)%NVARTMP = 0
1315 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = 0
1316 ENDDO
1317 ELSE
1318 DO il = 1,nlay
1319 nfail = mat_param(imat(il))%NFAIL
1320 nvar_eos = 0
1321 nvar_eos = 0
1322 nvartmp_eos = 0
1323 ieos_type = ipm(4,imat(il))
1324 IF(ieos_type>0)nvar_eos = eos_tag(ieos_type)%NVAR
1325 IF(ieos_type>0)nvartmp_eos = eos_tag(ieos_type)%NVARTMP
1326 elbuf_tab(ng)%BUFLY(il)%ILAW = ilaw(il)
1327 elbuf_tab(ng)%BUFLY(il)%IMAT = imat(il)
1328 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
1329 elbuf_tab(ng)%BUFLY(il)%IVISC = mat_param(imat(il))%VISC%ILAW
1330 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT = mlaw_tag(imat(il))%NUVAR
1331 elbuf_tab(ng)%BUFLY(il)%NVARTMP = mlaw_tag(imat(il
1332 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC
1333 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS = nvar_eos
1334 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = nvartmp_eos
1335 elbuf_tab(ng)%BUFLY(il)%IPORO = 0
1336 elbuf_tab(ng)%BUFLY(il)%NFAIL = nfail
1337
1338 DO j = 1, nfail
1339 irupt = mat_param
1340 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
1341 tfail(il,j) = irupt
1342 failid(il,j) =
1343 ENDDO
1344 ENDDO
1345 ENDIF
1346
1347 IF (debug_print == 1) THEN
1348
1349 ENDIF
1350
1351
1352
1353 DO il = 1, nlay
1354 mx = elbuf_tab(ng)%BUFLY(il)%IMAT
1355 nuvarv = mat_param(mx)%VISC%NUVAR + nvar_damp_freq_range
1356 elbuf_tab(ng)%BUFLY(il
1357 nuvarm = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
1358 nvartmp= elbuf_tab(ng)%BUFLY(il)%NVARTMP
1359 nvar_eos = elbuf_tab(ng)%BUFLY(il)%NVAR_EOS
1360 nvartmp_eos = elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS
1361 nfail = elbuf_tab(ng)%BUFLY
1362 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
1363 DO ir = 1,nptr
1364 DO is = 1,npts
1365 DO it = 1,nptt
1366 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%MLAW = elbuf_tab(ng)%BUFLY(il)%ILAW
1367 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%LawID = elbuf_tab(ng)%BUFLY(il)%IMAT
1368 CALL my_alloc(elbuf_tab(ng)%BUFLY(il
1369 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP,nvartmp*nel)
1370 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%VISC(ir,is,it)%VAR,nuvarv*nel)
1371 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR,nvar_eos*nel)
1372 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VARTMP,nvartmp_eos*nel)
1373 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR = zero
1374 elbuf_tab(ng)%BUFLY(il)%VISC(ir,is,it)%VAR = zero
1375 elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR = zero
1376 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP = 0
1377 elbuf_tab(ng)%BUFLY(il)%EOS(ir
1378
1379 lmat = lmat + nuvarm
1380 lvisc = lvisc + nuvarv*nel
1381 leos = leos + nvar_eos*nel
1382
1383 ALLOCATE(elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(nfail))
1384 mx = elbuf_tab(ng)%BUFLY(il)%IMAT
1385 DO j = 1,nfail
1386 floc=>elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it
1387
1388 irupt = mat_param(mx)%FAIL(j)%IRUPT
1389
1390 lfail = lfail + 1
1391
1392 floc%IDFAIL = mat_param(mx)%FAIL(j)%FAIL_ID
1393 lfail = lfail + 1
1394
1395 floc%NVAR = mat_param(mx)%FAIL(j)%NUVAR
1396 CALL my_alloc(floc%VAR,floc%NVAR*nel)
1397 floc%VAR = zero
1398 lfail = lfail + floc%NVAR*nel + 1
1399
1400 floc%LF_DAM = fail_tag(irupt)%LF_DAM
1401 CALL my_alloc(floc%DAM,floc%LF_DAM*nel)
1402 floc%DAM = zero
1403 lfail = lfail + floc%LF_DAM*nel + 1
1404
1405 floc%LF_DAMMX = fail_tag(irupt)%LF_DAMMX
1406 CALL my_alloc(floc%DAMMX,floc%LF_DAMMX*nel)
1407 floc%DAMMX = zero
1408 lfail = lfail + floc%LF_DAMMX*nel + 1
1409
1410 floc%LF_DAMINI = fail_tag(irupt)%LF_DAMINI
1411 CALL my_alloc(floc%DAMINI,floc%LF_DAMINI*nel)
1412 floc%DAMINI = zero
1413 lfail = lfail + floc%LF_DAMINI*nel + 1
1414
1415 floc%LF_TDEL = fail_tag(irupt)%LF_TDEL
1416 CALL my_alloc(floc%TDEL,floc%LF_TDEL*nel)
1417 floc%TDEL = zero
1418 lfail = lfail + floc%LF_TDEL*nel + 1
1419
1420 floc%LF_INDX = fail_tag(irupt)%LF_INDX
1421 CALL my_alloc(floc%INDX,floc%LF_INDX*nel)
1422 floc%INDX = 0
1423 lfail = lfail + floc%LF_INDX*nel + 1
1424
1425 floc%LF_OFF = fail_tag(irupt)%LF_OFF
1426 CALL my_alloc(floc%OFF,floc%LF_OFF*nel)
1427 floc%OFF = 1
1428 lfail = lfail + floc%LF_OFF*nel + 1
1429
1430 ENDDO
1431 ENDDO
1432 ENDDO
1433 ENDDO
1434 ENDDO
1435
1436
1437
1438 DO i=1,nintlay
1439 DO j=1,maxflay
1440 tfail(i,j) = 0
1441 failid(i,j) = 0
1442 ENDDO
1443 ilaw(i) = 0
1444 imat(i) = 0
1445 ENDDO
1446
1447 ipmat_iply = 2 + 2*nlay
1448
1449 l_eps = 3
1450 l_sig = 3
1451 ly_eint = 1
1452 ly_count= 1
1453 DO il = 1,nintlay
1454 intlay => elbuf_tab(ng)%INTLAY(il)
1455
1456 imat(il) = stack%IGEO(ipmat_iply + il ,isubstack)
1457 ilaw(il) = ipm(2,imat(il))
1458 nfail = mat_param(imat(il))%NFAIL
1459 elbuf_tab(ng)%INTLAY(il)%ILAW = ilaw(il)
1460 elbuf_tab(ng)%INTLAY(il)%IMAT = imat(il)
1461 elbuf_tab(ng)%INTLAY(il)%NFAIL= nfail
1462 elbuf_tab(ng)%INTLAY(il)%NVAR_MAT = mlaw_tag(imat(il))%NUVAR
1463 elbuf_tab(ng)%INTLAY(il)%NVARTMP = mlaw_tag(imat(il))%NVARTMP
1464 DO j = 1, nfail
1465 irupt = mat_param(imat(il))%FAIL(j)%IRUPT
1466 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
1467 tfail(il,j) = irupt
1468 failid(il,j) = idfail
1469 ENDDO
1470 limat = limat + 5
1471 limat = limat + nel*ly_eint
1472 limat = limat + nel*ly_count
1473
1474 DO i = 1,nptr
1475 DO j = 1,npts
1476 ilbuf => elbuf_tab(ng)%INTLAY(il)%ILBUF(i,j)
1477 CALL my_alloc
1478 CALL my_alloc(intlay%ILBUF(i,j)%SIG,l_sig*nel)
1479 intlay%ILBUF(i,j)%EPS = zero
1480 intlay%ILBUF(i,j)%SIG = zero
1481 limat = limat + nel*l_eps
1482 limat = limat + nel*l_sig
1483 ENDDO
1484 ENDDO
1485 ENDDO
1486
1487 DO il = 1, nintlay
1488 nuvarm = elbuf_tab(ng)%INTLAY(il)%NVAR_MAT
1489 nvartmp = elbuf_tab(ng)%INTLAY(il)%NVARTMP
1490 nfail = elbuf_tab(ng)%INTLAY(il)%NFAIL
1491 DO ir = 1,nptr
1492 DO is = 1,npts
1493 CALL my_alloc(elbuf_tab(ng)%INTLAY(il)%MAT(ir,is)%VAR,nuvarm*nel)
1494 CALL my_alloc(elbuf_tab(ng)%INTLAY(il)%MAT(ir,is)%VARTMP,nvartmp*nel)
1495 elbuf_tab(ng)%INTLAY(il)%MAT(ir,is)%VAR = zero
1496 elbuf_tab(ng)%INTLAY(il)%MAT(ir,is)%VARTMP = 0
1497 limat = limat + nuvarm*nel
1498
1499
1500
1501 ALLOCATE(elbuf_tab(ng)%INTLAY(il
1502
1503 DO j = 1,nfail
1504 floc=>elbuf_tab(ng)%INTLAY(il)%FAIL(ir
1505 floc%ILAWF = mat_param(imat(il
1506 floc%IDFAIL = mat_param(imat(il))%FAIL(j)%FAIL_ID
1507 floc%NVAR = mat_param(imat(il
1508 CALL my_alloc(floc%VAR,floc%NVAR*nel)
1509 floc%VAR = zero
1510 lifail = lifail + floc%NVAR*nel + 3
1511 ENDDO
1512 ENDDO
1513 ENDDO
1514 IF (debug_print == 1) THEN
1515 print*,''
1516 print*,' INTLAY ',il
1517 print*,' LIMAT,LIFAIL = ',limat,lifail
1518 ENDIF
1519 ENDDO
1520
1521 IF (debug_print == 1) THEN
1522 print*,''
1523 print*,' sum local variables mat,visc,fail on all layers'
1524 print*,' LMAT,LVISC,LFAIL,LEOS = ',lmat,lvisc,lfail,leos
1525 ENDIF
1526
1527 gbuf => elbuf_tab(ng)%GBUF
1528 IF (jthe /= 0 ) gbuf%G_TEMP = 1
1529 IF (jthe /= 0 .AND. npg > 1) gbuf%G_TEMPG = npg
1530 IF (isms_selec >= 1) gbuf%G_ISMS = 1
1531 IF (jeul+jale /= 0 .AND. isnod >= 4) gbuf%G_MOM = 3
1532 IF (ity == 3) THEN
1533 IF (jhbe <= 4) THEN
1534 gbuf%G_HOURG = 5
1535 ELSEIF (jhbe == 23) THEN
1536 gbuf%G_HOURG = 12
1537 ENDIF
1538 IF (isrot > 0) gbuf%G_HOURG = gbuf%G_HOURG + 13
1539 IF (ismstr == 10) THEN
1540
1541 gbuf%G_SMSTR = 9
1542 ELSEIF (ismstr /= 4) THEN
1543 gbuf%G_SMSTR = 6
1544 END IF
1545
1546
1547 ELSEIF (ity == 7) THEN
1548 IF (jhbe >= 30) THEN
1549 IF (ismstr /= 4) gbuf%G_SMSTR = 13
1550 ELSEIF (ismstr == 10) THEN
1551 gbuf%G_SMSTR = 6
1552 ELSEIF (ismstr /= 4) THEN
1553
1554 gbuf%G_SMSTR = 6
1555 ENDIF
1556 IF (jhbe < 30 .and. isrot > 0) gbuf%G_HOURG = 5
1557 ENDIF
1558 IF (ity == 3 .OR. ity == 7) THEN
1559 IF (defaults%SHELL%IOFFSET ==1) elbuf_tab(ng)%GBUF%G_SH_IOFFSET = 1
1560 IF (npt0 == 0) THEN
1561 gbuf%G_FOR_G = 5
1562 IF (npg > 1) gbuf%G_FORPG_G = 5*npg
1563 END IF
1564 ENDIF
1565
1566 IF (ismstr == 10 )THEN
1567 gbuf%G_STRW = 1
1568 gbuf%G_STRWPG = gbuf%G_STRW*npg
1569 gbuf%G_STRA = 8
1570 gbuf%G_STRPG = gbuf%G_STRA*npg
1571 ELSEIF (istra > 0 .OR. ifail > 0 .OR.
1572 . ismstr == 11 .OR.(ismstr==1 .AND. mlw==19)) THEN
1573 gbuf%G_STRA = 8
1574 ENDIF
1575 IF (ity == 3 .AND. jhbe == 23 .AND. istr_24 > 0) gbuf%G_STRPG = 4*gbuf%G_STRA
1576
1577 IF(iexpan > 0) THEN
1578 gbuf%G_FORTH = 2
1579 gbuf%G_EINTTH = 1
1580 ENDIF
1581
1582
1583 DO il = 1, nlay
1584 bufly => elbuf_tab(ng)%BUFLY(il)
1585 IF (isorth == 1 .AND. isrot > 0) bufly%L_SIGD = 6
1586 IF (gbuf%G_GAMA > 0 .AND. nlay > 1) bufly%L_GAMA = gbuf%G_GAMA
1587 IF (irep == 1 ) THEN
1588 bufly%LY_DIRA = 2
1589 ELSEIF (irep >= 2) THEN
1590 bufly%LY_DIRA = 2
1591 bufly%LY_DIRB = 2
1592 ENDIF
1593 IF (jthe /= 0) bufly%L_TEMP = 1
1594 IF (isvis > 0 .OR. bufly%IVISC == 1 .OR. bufly%IVISC == 3) bufly%L_SIGV =
1595 IF ((bufly%IVISC > 0).OR.(idamp_freq_range > 0)) bufly%L_VISC = 5
1596 IF (bufly%IVISC > 0 .and. mlw == 25) bufly%L_SIGD = 6
1597 IF (mlw == 27) bufly%L_DMG = 2
1598 IF (mlw == 2) bufly%L_SIGB = 3
1599 IF (ixfem > 0) THEN
1600 IF (istra > 0 .AND. mlw /= 0 .AND. nlay > 1) bufly%L_STRA = 8
1601 bufly%L_SMSTR = 6
1602 bufly%L_THK = 1
1603 bufly%LY_HOURG = gbuf%G_HOURG
1604 IF (igtyp == 11 .or. igtyp == 51 .or. igtyp == 52) THEN
1605 bufly%L_FOR = 5
1606 bufly%L_MOM = 3
1607 ENDIF
1608 IF (lfail > 0) THEN
1609 bufly%LY_UELR = 1
1610 bufly%LY_UELR1 = 1
1611 ENDIF
1612 ENDIF
1613
1614 IF (iexpan > 0) THEN
1615 bufly%L_FORTH = 2
1616 bufly%L_EINTTH = 1
1617 ENDIF
1618 IF(iufacyld == 1.AND.(mlw==36.OR.mlw==87))bufly%L_FAC_YLD = 1
1619
1620 IF (lfail > 0) THEN
1621 bufly%L_OFF = 1
1622 bufly%LY_OFFPG = npg
1623 bufly%LY_OFF = 1
1624 ENDIF
1625 ENDDO
1626
1627
1628 IF((ity==3.OR.ity==7).AND.igtyp /= 1) THEN
1629 gbuf%G_BETAORTH = 1
1630 ENDIF
1631
1633 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
1634 . imid ,mlw ,igtyp ,jmult ,ifail ,
1635 . ieos ,eos_tag ,isnod )
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660 buflen = npar_tab + lmat + lfail + lvisc + lporo + leos + limat + lifail + lnloc
1661
1662 IF (debug_print == 1) THEN
1663 print*,' BUFLEN=NPAR_TAB+LMAT+LFAIL+LVISC+LPORO+LEOS+LIMAT+LIFAIL+LNLOC',buflen
1664 ENDIF
1665
1666 IF (lfail > 0) THEN
1667 gbuf%G_UELR = 1
1668 gbuf%G_UELR1 = 1
1669 DO il=1,nlay
1670 bufly => elbuf_tab(ng)%BUFLY(il)
1671 nfail = bufly%NFAIL
1672 DO j=1,nfail
1673 irupt = tfail(il,j)
1674 bufly%LY_CRKDIR =
max(fail_tag(irupt)%LF_DIR,bufly%LY_CRKDIR)
1675 bufly%LY_DMG =
max(fail_tag(irupt)%LF_DAM,bufly%LY_DMG)
1676 ENDDO
1677 ENDDO
1678 ENDIF
1679 IF (mlw /= 151) THEN
1680 gbuf%G_RHO = 0
1681 ENDIF
1682
1683 lglob = 0
1684 lglob = lglob + gbuf%G_NOFF
1685 lglob = lglob + gbuf%G_IERR
1686 lglob = lglob + gbuf%G_GAMA
1687
1688
1689
1690 lglob = lglob + gbuf%G_HOURG
1691 lglob = lglob + gbuf%G_TAG22
1692 lglob = lglob + gbuf%G_STRA
1693 lglob = lglob + gbuf%G_SIGI
1694 lglob = lglob + gbuf%G_DMG
1695 lglob = lglob + gbuf%G_DAMDL
1696 lglob = lglob + gbuf%G_FOR
1697 lglob = lglob + gbuf%G_MOM
1698 lglob = lglob + gbuf%G_THK
1699 lglob = lglob + gbuf%G_DT
1700 lglob = lglob + gbuf%G_ISMS
1701
1702 lglob = lglob + gbuf%G_STRW
1703 gbuf%G_THK_I = gbuf%G_THK
1704 lglob = lglob + gbuf%G_THK_I
1705 lglob = lglob + gbuf%G_MAXFRAC
1706 lglob = lglob + gbuf%G_MAXEPS
1707 lglob = lglob + gbuf%G_FOR_G
1708 lglob = lglob + gbuf%G_WPLA
1709 IF (npg > 1) THEN
1710 lglob = lglob + gbuf%G_FORPG
1711 lglob = lglob + gbuf%G_MOMPG
1712
1713 lglob = lglob + gbuf%G_FORPGPINCH
1714 lglob = lglob + gbuf%G_MOMPGPINCH
1715 lglob = lglob + gbuf%G_EPGPINCHXZ
1716 lglob = lglob + gbuf%G_EPGPINCHYZ
1717 lglob = lglob + gbuf%G_EPGPINCHZZ
1718
1719 lglob = lglob + gbuf%G_STRPG
1720 lglob = lglob + gbuf%G_STRWPG
1721 lglob = lglob + gbuf%G_TEMPG
1722 lglob = lglob + gbuf%G_FORPG_G
1723 ELSEIF (gbuf%G_STRPG > gbuf%G_STRA) THEN
1724 lglob = lglob + gbuf%G_STRPG
1725 ENDIF
1726
1727 IF (lfail > 0) THEN
1728 lglob = lglob + gbuf%G_UELR
1729 lglob = lglob + gbuf%G_UELR1
1730 ENDIF
1731
1732 IF (npttot /= 1) THEN
1733 lglob = lglob + gbuf%G_BFRAC
1734 lglob = lglob + gbuf%G_OFF
1735 lglob = lglob + gbuf%G_EINT
1736 lglob = lglob + gbuf%G_EINS
1737 lglob = lglob + gbuf%G_RHO
1738 lglob = lglob + gbuf%G_QVIS
1739 lglob = lglob + gbuf%G_DELTAX
1740 lglob = lglob + gbuf%G_VOL
1741 lglob = lglob + gbuf%G_EPSD
1742 lglob
1743 lglob = lglob + gbuf%G_PLA
1744 lglob = lglob + gbuf%G_TEMP
1745 lglob = lglob + gbuf%G_TB
1746 lglob = lglob + gbuf%G_RK
1747 lglob = lglob + gbuf%G_RE
1748 lglob = lglob + gbuf%G_SIG
1749 lglob = lglob + gbuf%G_FORTH
1750 lglob = lglob + gbuf%G_EINTTH
1751 lglob = lglob + gbuf%G_SEQ
1752 lglob = lglob + gbuf%G_ABURN
1753 lglob = lglob + gbuf%G_MU
1754 ENDIF
1755
1756 lglob = lglob + gbuf%G_AREA
1757 lglob = lglob + gbuf%G_SKEW
1758 lglob = lglob + gbuf%G_LENGTH
1759 lglob = lglob + gbuf%G_TOTDEPL
1760 lglob = lglob + gbuf%G_TOTROT
1761 lglob = lglob + gbuf%G_FOREP
1762 lglob = lglob + gbuf%G_MOMEP
1763 lglob = lglob + gbuf%G_DEP_IN_TENS
1764 lglob = lglob + gbuf%G_DEP_IN_COMP
1765 lglob = lglob + gbuf%G_ROT_IN_TENS
1766 lglob = lglob + gbuf%G_ROT_IN_COMP
1767 lglob = lglob + gbuf%G_POSX
1768 lglob = lglob + gbuf%G_POSY
1769 lglob = lglob + gbuf%G_POSZ
1770 lglob = lglob + gbuf%G_POSXX
1771 lglob = lglob + gbuf%G_POSYY
1772 lglob = lglob + gbuf%G_POSZZ
1773 lglob = lglob + gbuf%G_YIELD
1774 lglob = lglob + gbuf%G_LENGTH_ERR
1775 lglob = lglob + gbuf%G_DV
1776 lglob = lglob + gbuf%G_DFS
1777 lglob = lglob + gbuf%G_SKEW_ERR
1778 lglob = lglob + gbuf%G_E6
1779 lglob = lglob + gbuf%G_RUPTCRIT
1780 lglob = lglob + gbuf%G_MASS
1781 lglob = lglob + gbuf%G_V_REPCVT
1782 lglob = lglob + gbuf%G_VR_REPCVT
1783 lglob = lglob + gbuf%G_NUVAR
1784 lglob = lglob + gbuf%G_DEFINI
1785 lglob = lglob + gbuf%G_FORINI
1786 lglob = lglob + gbuf%G_INIFRIC
1787
1788 lglob = lglob + gbuf%G_SLIPRING_ID
1789 lglob = lglob + gbuf%G_SLIPRING_FRAM_ID
1790 lglob = lglob + gbuf%G_INTVAR
1791 lglob = lglob + gbuf%G_ADD_NODE
1792 lglob = lglob + gbuf%G_UPDATE
1793
1794 lglob = lglob + gbuf%G_FILL
1795 lglob = lglob + gbuf%G_BETAORTH
1796
1797 lglob = lglob + gbuf%G_TM_YIELD
1798 lglob = lglob + gbuf%G_TM_SEQ
1799 lglob = lglob + gbuf%G_TM_EINT
1800 lglob = lglob + gbuf%G_TM_DMG
1801 lglob = lglob + 2*gbuf%G_TM_SIG
1802 lglob = lglob + 2*gbuf%G_TM_STRA
1803 lglob = lglob + gbuf%G_SH_IOFFSET
1804
1805
1806 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel
1807
1808
1809 IF (debug_print == 1) THEN
1810 print*,' LGLOB, glob vars= ',lglob,lglob*nel
1811 print*,' total glob: ', gbuf%NVAR_GLOB + 1 + lglob*nel
1812 print*,' buflen=BUFLEN + GBUF%NVAR_GLOB + 1 + LGLOB*NEL',buflen
1813 print*,' NPAR_LAY+NVAR_LAY,NVAR_LOC=',npar_lay+bufly%NVAR_LAY+bufly%NVAR_LOC
1814 ENDIF
1815
1816
1817 llay = 0
1818 iad = 0
1819 DO i=1,nlay
1820 bufly => elbuf_tab(ng)%BUFLY(i)
1821 llay = llay + npar_lay + bufly%NVAR_LAY + bufly%NVAR_LOC
1822 llay = llay + nel*bufly%LY_DMG
1823 llay = llay + nel*bufly%LY_GAMA
1824 IF(idrape == 0 .OR. (idrape > 0 .AND. igtyp == 17)) THEN
1825 llay = llay + nel*bufly%LY_DIRA
1826 llay = llay + nel*bufly%LY_DIRB
1827 ENDIF
1828 IF (npg > 1) THEN
1829 IF (nlay > 1) THEN
1830 len_plapt = nel*bufly%LY_PLAPT
1831 len_sigpt = nel*bufly%LY_SIGPT
1832 ELSE
1833 IF (igtyp /= 51 .AND. igtyp /= 52) THEN
1834 len_plapt = nel*bufly%LY_PLAPT*npt
1835 len_sigpt = nel*bufly%LY_SIGPT*npt
1836 ELSE
1837 len_plapt = nel*bufly%LY_PLAPT*bufly%NPTT
1838 len_sigpt = nel*bufly%LY_SIGPT*bufly%NPTT
1839 ENDIF
1840 ENDIF
1841
1842
1843 llay = llay + len_plapt
1844 llay = llay + len_sigpt
1845 ENDIF
1846 llay = llay + nel*bufly%LY_HOURG
1847 IF (lfail > 0) THEN
1848 llay = llay + nel*bufly%LY_UELR
1849 llay = llay + nel*bufly%LY_UELR1
1850 llay = llay + nel*bufly%LY_CRKDIR
1851 llay = llay + nel*bufly%LY_OFFPG
1852 llay = llay + nel*bufly%LY_OFF
1853 ENDIF
1854 IF (debug_print == 1) THEN
1855 print*,' ** LAYER=',il
1856 print*,' vars NEL*LY_xxx, buflen =: ', llay - iad , buflen
1857 iad = llay
1858 ENDIF
1859 ENDDO
1860
1861 buflen = buflen + llay
1862
1863
1864 IF (debug_print == 1) THEN
1865 print*,' total vars LY_xxx, buflen =: ', llay , buflen
1866 ENDIF
1867
1868
1869 DO il=1,nlay
1870 bufly => elbuf_tab(ng)%BUFLY(il)
1871
1872 nip_lay = npg*bufly%NPTT
1873
1874 lloc = 0
1875 lloc = lloc + bufly%L_OFF
1876 lloc = lloc + bufly%L_GAMA
1877
1878 IF(ixfem == 0) bufly%L_STRA = 0
1879 lloc = lloc + bufly%L_STRA
1880
1881 lloc = lloc + bufly%L_FRAC
1882 lloc = lloc + bufly%L_BFRAC
1883 lloc = lloc + bufly%L_EINT
1884 lloc = lloc + bufly%L_EINS
1885 IF (mlw /= 151) THEN
1886 bufly%L_RHO = 0
1887 ENDIF
1888 lloc = lloc + bufly%L_RHO
1889 lloc = lloc + bufly%L_DP_DRHO
1890 lloc = lloc + bufly%L_QVIS
1891 lloc = lloc + bufly%L_DELTAX
1892 lloc = lloc + bufly%L_VOL
1893 lloc = lloc + bufly%L_EPSA
1894 lloc = lloc + bufly%L_EPSD
1895 lloc = lloc + bufly%L_EPSQ
1896 lloc = lloc + bufly%L_EPSF
1897 lloc = lloc + bufly%L_PLA
1898 lloc = lloc + bufly%L_WPLA
1899 lloc = lloc + bufly%L_TEMP
1900 lloc = lloc + bufly%L_TB
1901 lloc = lloc + bufly%L_RK
1902 lloc = lloc + bufly%L_RE
1903 lloc = lloc + bufly%L_VK
1904 lloc = lloc + bufly%L_SF
1905 lloc = lloc + bufly%L_ROB
1906 lloc = lloc + bufly%L_DAM
1907 lloc = lloc + bufly%L_DSUM
1908 lloc = lloc + bufly%L_DGLO
1909 lloc = lloc + bufly%L_CRAK
1910 lloc = lloc + bufly%L_ANG
1911 lloc = lloc + bufly%L_EPE
1912 lloc = lloc + bufly%L_EPC
1913 lloc = lloc + bufly%L_XST
1914 lloc = lloc + bufly%L_SSP
1915 lloc = lloc + bufly%L_Z
1916 lloc = lloc + bufly%L_VISC
1917 lloc = lloc + bufly%L_SIGL
1918 lloc = lloc + bufly%L_SIGV
1919 lloc = lloc + bufly%L_SIGA
1920 lloc = lloc + bufly%L_SIGB
1921 lloc = lloc + bufly%L_SIGC
1922 lloc = lloc + bufly%L_SIGD
1923 lloc = lloc + bufly%L_SIGF
1924 lloc = lloc + bufly%L_SIG
1925 lloc = lloc + bufly%L_SIGPLY
1926 lloc = lloc + bufly%L_FOR
1927 lloc = lloc + bufly%L_MOM
1928 lloc = lloc + bufly%L_THK
1929 lloc = lloc + bufly%L_SMSTR
1930 lloc = lloc + bufly%L_DMG
1931 lloc = lloc + bufly%L_FORTH
1932 lloc = lloc + bufly%L_EINTTH
1933 lloc = lloc + bufly%L_SEQ
1934 lloc = lloc + bufly%L_FAC_YLD
1935 lloc = lloc + bufly%L_ABURN
1936 lloc = lloc + bufly%L_MU
1937 lloc = lloc + bufly%L_PLANL
1938 lloc = lloc + bufly%L_EPSDNL
1939 lloc = lloc + bufly%L_DMGSCL
1940 lloc = lloc + bufly%L_TSAIWU
1941
1942 buflen = buflen + (lloc * nel + npar_lbuf) * nip_lay
1943 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52)) THEN
1944 lloc_slice = bufly%LY_DIRA + bufly%LY_DIRB
1945 buflen = buflen + lloc_slice*nel*bufly%NPTT
1946 ENDIF
1947 IF (debug_print == 1) THEN
1948 print*,' ** variables locales LAYER=',il
1949 print*,' (LLOC*NEL+NPAR_LBUF)*NIP_LAY=',(lloc*nel+npar_lbuf)*nip_lay
1950 ENDIF
1951
1952 ENDDO
1953 iparg(66,ng) = buflen
1954
1955 IF(print_flag>6) WRITE(iout,1002) ng, buflen
1956
1957
1958
1959
1961 . nintlay,nel,npt,ng,ngroup,ity,
1962 . igtyp,npropm,nummat,pm )
1963
1964 DEALLOCATE(tfail)
1965 DEALLOCATE(failid)
1966 DEALLOCATE(imat)
1967 DEALLOCATE(ilaw)
1968
1969
1970
1971 ELSEIF (ity == 4 .OR. ity == 5 .OR. ity == 6 .OR. ity == 100) THEN
1972
1973
1974
1975
1976 IF (ity == 4) THEN
1977 imid = ixt(1,nft+1)
1978 ipid = ixt(4,nft+1)
1979 ELSEIF (ity == 5) THEN
1980 imid = ixp(1,nft+1)
1981 ipid = ixp(5,nft+1)
1982 ELSEIF (ity == 6) THEN
1983 imid = ixr(5,nft+1)
1984 ipid = ixr(1,nft+1)
1985 ELSEIF (ity == 100) THEN
1986 imid = 0
1987 ipid = kxx(2,nft+1)
1988 ENDIF
1989 igtyp = igeo(11,ipid)
1990
1991 gbuf => elbuf_tab(ng)%GBUF
1992
1993 gbuf%G_DT = 1
1994
1995 nptt = 0
1996 nptr = 0
1997 npts = 0
1998 nlay = 0
1999 npg = 0
2000
2001 IF (igtyp == 18) THEN
2002 nlay = 1
2003 nptr = 1
2004 npts = 1
2005 nptt = npt
2006 ENDIF
2007
2008 iparg(56,ng) = nptr
2009 iparg(57,ng) = npts
2010 iparg(58,ng) = nptt
2011 iparg(59,ng) = nlay
2012
2013 elbuf_tab(ng)%IGTYP = igtyp
2014 elbuf_tab(ng)%NEL = nel
2015 elbuf_tab(ng)%NLAY = nlay
2016 elbuf_tab(ng)%NINTLAY= 0
2017 elbuf_tab(ng)%NPTR = nptr
2018 elbuf_tab(ng)%NPTS = npts
2019 elbuf_tab(ng)%NPTT = nptt
2020 elbuf_tab(ng)%IXFEM = 0
2021 elbuf_tab(ng)%NXEL = 0
2022 elbuf_tab(ng)%IDRAPE = 0
2023
2024 CALL my_alloc(imat,nlay)
2025 CALL my_alloc(ilaw,nlay)
2026 ilaw(:) = 0
2027 imat(:) = 0
2028
2029 lmat = 0
2030 leos = 0
2031
2032 IF (nlay > 0) THEN
2033 ALLOCATE(elbuf_tab(ng)%BUFLY(nlay))
2034
2035 DO il = 1,nlay
2036 bufly => elbuf_tab(ng)%BUFLY(il)
2037 bufly%NPTT = nptt
2038 ALLOCATE(bufly%LBUF(nptr,npts,nptt))
2039 ALLOCATE(bufly%MAT (nptr,npts,nptt))
2040 ALLOCATE(bufly%EOS (nptr,npts,nptt))
2041 ALLOCATE(bufly%FAIL(nptr,npts,nptt))
2042 ENDDO
2043
2044
2045
2046
2047 DO il = 1,nlay
2048 imat(il) = imid
2049 ilaw(il) = mlw
2050 nfail = mat_param(imat(il))%NFAIL
2051 nvar_eos = 0
2052 nvartmp_eos = 0
2053 ieos_type = ipm(4,imat(il))
2054 IF(ieos_type>0)nvar_eos = eos_tag(ieos_type)%NVAR
2055 IF(ieos_type>0)nvartmp_eos = eos_tag(ieos_type)%NVARTMP
2056 elbuf_tab(ng)%BUFLY(il)%ILAW = mlw
2057 elbuf_tab(ng)%BUFLY(il)%IMAT = imid
2058 elbuf_tab(ng)%BUFLY(il)%IEOS = ieos
2059 elbuf_tab(ng)%BUFLY(il)%IVISC = mat_param(imid)%VISC%ILAW
2060 elbuf_tab(ng)%BUFLY(il)%NVAR_MAT = mlaw_tag(imat(il))%NUVAR
2061 elbuf_tab(ng)%BUFLY(il)%NVARTMP = mlaw_tag(imat(il))%NVARTMP
2062 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = mat_param(imid)%VISC%NUVAR + nvar_damp_freq_range
2063 elbuf_tab(ng)%BUFLY(il)%NVAR_EOS = nvar_eos
2064 elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS = nvartmp_eos
2065 elbuf_tab(ng)%BUFLY(il)%IPORO = 0
2066 elbuf_tab(ng)%BUFLY(il)%NFAIL = nfail
2067 ENDDO
2068
2069
2070
2071 DO il = 1,nlay
2072 nuvarm = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
2073 nvartmp = elbuf_tab(ng)%BUFLY(il)%NVARTMP
2074 nvartmp_eos = elbuf_tab(ng)%BUFLY(il)%NVARTMP_EOS
2075 nvar_eos= elbuf_tab(ng)%BUFLY(il)%NVAR_EOS
2076 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
2077 nfail = elbuf_tab(ng)%BUFLY(il)%NFAIL
2078
2079 DO ir = 1,nptr
2080 DO is = 1,npts
2081 DO it = 1,nptt
2082 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%MLAW = elbuf_tab(ng)%BUFLY(il)%ILAW
2083 elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%LawID = elbuf_tab(ng)%BUFLY(il)%IMAT
2084 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR,nuvarm*nel)
2085 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP,nvartmp*nel)
2086 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR,nvar_eos*nel)
2087 CALL my_alloc(elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VARTMP,nvartmp_eos*nel)
2088 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VAR = zero
2089 elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)%VARTMP = 0
2090 elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VAR = zero
2091 elbuf_tab(ng)%BUFLY(il)%EOS(ir,is,it)%VARTMP = 0
2092 lmat = lmat + nuvarm*nel
2093
2094 IF (nfail == 1) THEN
2095 irupt = mat_param(imat(il))%FAIL(1)%IRUPT
2096 ALLOCATE(elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(nfail))
2097 floc => elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(1)
2098
2099 floc%ILAWF = irupt
2100 lfail = lfail + 1
2101
2102 floc%IDFAIL = mat_param(imat(il))%FAIL(1)%FAIL_ID
2103 lfail = lfail + 1
2104
2105 floc%NVAR = mat_param(imat(il))%FAIL(1)%NUVAR
2106 CALL my_alloc(floc%VAR,floc%NVAR*nel)
2107 floc%VAR = zero
2108 lfail = lfail + floc%NVAR*nel + 1
2109
2110 floc%LF_DAM = fail_tag(irupt)%LF_DAM
2111 CALL my_alloc(floc%DAM,floc%LF_DAM*nel)
2112 floc%DAM = zero
2113 lfail = lfail + floc%LF_DAM*nel + 1
2114
2115 floc%LF_DAMMX = fail_tag(irupt)%LF_DAMMX
2116 CALL my_alloc(floc%DAMMX,floc%LF_DAMMX*nel)
2117 floc%DAMMX = zero
2118 lfail = lfail + floc%LF_DAMMX*nel + 1
2119
2120 floc%LF_DAMINI = fail_tag(irupt)%LF_DAMINI
2121 CALL my_alloc(floc%DAMINI,floc%LF_DAMINI*nel)
2122 floc%DAMINI = zero
2123 lfail = lfail + floc%LF_DAMINI*nel + 1
2124
2125 floc%LF_TDEL = fail_tag(irupt)%LF_TDEL
2126 CALL my_alloc(floc%TDEL,floc%LF_TDEL*nel)
2127 floc%TDEL = zero
2128 lfail = lfail + floc%LF_TDEL*nel + 1
2129
2130 floc%LF_INDX = fail_tag(irupt)%LF_INDX
2131 CALL my_alloc(floc%INDX,floc%LF_INDX*nel)
2132 floc%INDX = 0
2133 lfail = lfail + floc%LF_INDX*nel + 1
2134
2135 floc%LF_OFF = fail_tag(irupt)%LF_OFF
2136 CALL my_alloc(floc%OFF,floc%LF_OFF*nel)
2137 floc%OFF = 1
2138 lfail = lfail + floc%LF_OFF*nel + 1
2139 END IF
2140
2141 ENDDO
2142 ENDDO
2143 ENDDO
2144 ENDDO
2145
2146
2147 ELSE
2148 ALLOCATE(elbuf_tab(ng)%BUFLY(0))
2149 ENDIF
2150
2151 buflen = npar_tab + lmat + lfail + lvisc + lporo + leos + limat + lifail
2152
2154
2156 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
2157 . imid ,mlw ,igtyp ,jmult ,ifail ,
2158 . ieos ,eos_tag ,isnod )
2159
2160 DO il = 1,nlay
2161 bufly => elbuf_tab(ng)%BUFLY(il)
2162 IF (mlw == 2) bufly%L_SIGB = 0
2163 bufly%L_OFF = 0
2164 bufly%L_EINT = 0
2165 bufly%L_FAC_YLD = 0
2166 ENDDO
2167
2168
2169 IF (ity == 100) THEN
2170 nuvarn = nint(geo(35,ipid))
2171 nx = kxx(3,nft+1)
2172 gbuf%G_NUVARN = nuvarn*nx
2173 ENDIF
2174
2175 IF(iexpan > 0) THEN
2176 gbuf%G_FORTH = 1
2177 gbuf%G_EINTTH = 1
2178 ENDIF
2179
2180 IF (isms_selec >= 1) gbuf%G_ISMS = 1
2181
2182 IF (iboltp>0) gbuf%G_BPRELD = 2
2183
2184
2185
2186 gbuf%G_THK_I = gbuf%G_THK
2187
2188 lglob = 0
2189
2190 lglob = lglob + gbuf%G_NOFF
2191 lglob = lglob + gbuf%G_IERR
2192 lglob = lglob + gbuf%G_GAMA
2193 lglob = lglob + gbuf%G_SMSTR
2194 lglob = lglob + gbuf%G_HOURG
2195 lglob = lglob + gbuf%G_TAG22
2196 lglob = lglob + gbuf%G_STRA
2197 lglob = lglob + gbuf%G_SIGI
2198 lglob = lglob + gbuf%G_DMG
2199 lglob = lglob + gbuf%G_DAMDL
2200 lglob = lglob + gbuf%G_FOR
2201 lglob = lglob + gbuf%G_MOM
2202 lglob = lglob + gbuf%G_THK
2203 lglob = lglob + gbuf%G_DT
2204 lglob = lglob + gbuf%G_ISMS
2205 lglob = lglob + gbuf%G_STRW
2206 lglob = lglob + gbuf%G_THK_I
2207 lglob = lglob + gbuf%G_MAXFRAC
2208 lglob = lglob + gbuf%G_MAXEPS
2209 lglob = lglob + gbuf%G_BPRELD
2210
2211 IF (npg > 1) THEN
2212 lglob = lglob + gbuf%G_FORPG
2213 lglob = lglob + gbuf%G_MOMPG
2214
2215 lglob = lglob + gbuf%G_FORPGPINCH
2216 lglob = lglob + gbuf%G_MOMPGPINCH
2217 lglob = lglob + gbuf%G_EPGPINCHXZ
2218 lglob = lglob + gbuf%G_EPGPINCHYZ
2219 lglob = lglob + gbuf%G_EPGPINCHZZ
2220
2221 lglob = lglob + gbuf%G_STRPG
2222 lglob = lglob + gbuf%G_STRWPG
2223 ENDIF
2224
2225 lglob = lglob + gbuf%G_BFRAC
2226 lglob = lglob + gbuf%G_OFF
2227 lglob = lglob + gbuf%G_EINT
2228 lglob = lglob + gbuf%G_EINS
2229 lglob = lglob + gbuf%G_RHO
2230 lglob = lglob + gbuf%G_QVIS
2231 lglob = lglob + gbuf%G_DELTAX
2232 lglob = lglob + gbuf%G_VOL
2233 lglob = lglob + gbuf%G_EPSD
2234 lglob = lglob + gbuf%G_EPSQ
2235 lglob = lglob + gbuf%G_PLA
2236 lglob = lglob + gbuf%G_WPLA
2237 lglob = lglob + gbuf%G_TEMP
2238 lglob = lglob + gbuf%G_TB
2239 lglob = lglob + gbuf%G_RK
2240 lglob = lglob + gbuf%G_RE
2241 lglob = lglob + gbuf%G_SIG
2242 lglob = lglob + gbuf%G_FORTH
2243 lglob = lglob + gbuf%G_EINTTH
2244 lglob = lglob + gbuf%G_SEQ
2245 lglob = lglob + gbuf%G_ABURN
2246 lglob = lglob + gbuf%G_MU
2247
2248 lglob = lglob + gbuf%G_FILL
2249
2250 IF (igtyp == 3) THEN
2251 lglob = lglob + gbuf%G_DMGSCL
2252 ENDIF
2253 lglob = lglob + gbuf%G_AREA
2254 lglob = lglob + gbuf%G_SKEW
2255 lglob = lglob + gbuf%G_LENGTH
2256 lglob = lglob + gbuf%G_TOTDEPL
2257 lglob = lglob + gbuf%G_TOTROT
2258 lglob = lglob + gbuf%G_FOREP
2259 lglob = lglob + gbuf%G_MOMEP
2260 lglob = lglob + gbuf%G_DEP_IN_TENS
2261 lglob = lglob + gbuf%G_DEP_IN_COMP
2262 lglob = lglob + gbuf%G_ROT_IN_TENS
2263 lglob = lglob + gbuf%G_ROT_IN_COMP
2264 lglob = lglob + gbuf%G_POSX
2265 lglob = lglob + gbuf%G_POSY
2266 lglob = lglob + gbuf%G_POSZ
2267 lglob = lglob + gbuf%G_POSXX
2268 lglob = lglob + gbuf%G_POSYY
2269 lglob = lglob + gbuf%G_POSZZ
2270 lglob = lglob + gbuf%G_YIELD
2271 lglob = lglob + gbuf%G_LENGTH_ERR
2272 lglob = lglob + gbuf%G_DV
2273 lglob = lglob + gbuf%G_DFS
2274 lglob = lglob + gbuf%G_SKEW_ERR
2275 lglob = lglob + gbuf%G_E6
2276 lglob = lglob + gbuf%G_RUPTCRIT
2277 lglob = lglob + gbuf%G_MASS
2278 lglob = lglob + gbuf%G_V_REPCVT
2279 lglob = lglob + gbuf%G_VR_REPCVT
2280 lglob = lglob + gbuf%G_NUVAR
2281 lglob = lglob + gbuf%G_NUVARN
2282 lglob = lglob + gbuf%G_DEFINI
2283 lglob = lglob + gbuf%G_FORINI
2284 lglob = lglob + gbuf%G_INIFRIC
2285 lglob = lglob + gbuf%G_SKEW_ID
2286 lglob = lglob + gbuf%G_YIELD_IN_COMP
2287 lglob = lglob + gbuf%G_XXOLD_IN_COMP
2288
2289 lglob = lglob + gbuf%G_SLIPRING_ID
2290 lglob = lglob + gbuf%G_SLIPRING_FRAM_ID
2291 lglob = lglob + gbuf%G_SLIPRING_STRAND
2292 lglob = lglob + gbuf%G_RETRACTOR_ID
2293 lglob = lglob + gbuf%G_RINGSLIP
2294 lglob = lglob + gbuf%G_ADD_NODE
2295 lglob = lglob + gbuf%G_UPDATE
2296 lglob = lglob + gbuf%G_FRAM_FACTOR
2297 lglob = lglob + gbuf%G_INTVAR
2298
2299
2300
2301 gfail = 0
2302 IF (igtyp == 3 .and. ifail > 0) THEN
2303 ALLOCATE(elbuf_tab(ng)%GBUF%FAIL(1))
2304
2305 irupt = mat_param(imid)%FAIL(1)%IRUPT
2306 elbuf_tab(ng)%GBUF%FAIL(1)%ILAWF = irupt
2307 gfail = gfail + 1
2308
2309 elbuf_tab(ng)%GBUF%FAIL(1)%IDFAIL = mat_param(imid)%FAIL(1)%FAIL_ID
2310 gfail = gfail + 1
2311
2312 elbuf_tab(ng)%GBUF%FAIL(1)%NVAR = mat_param(imid)%FAIL(1)%NUVAR
2313 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%VAR,elbuf_tab(ng)%GBUF%FAIL(1)%NVAR*nel)
2314 elbuf_tab(ng)%GBUF%FAIL(1)%VAR = zero
2315 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%NVAR*nel + 1
2316
2317 elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAM = fail_tag(irupt)%LF_DAM
2318 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%DAM,elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAM*nel)
2319 elbuf_tab(ng)%GBUF%FAIL(1)%DAM = zero
2320 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAM*nel + 1
2321
2322 elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMMX = fail_tag(irupt)%LF_DAMMX
2323 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%DAMMX,elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMMX
2324 elbuf_tab(ng)%GBUF%FAIL(1)%DAMMX = zero
2325 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMMX*nel + 1
2326
2327 elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMINI = fail_tag(irupt)%LF_DAMINI
2328 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%DAMINI,elbuf_tab
2329 elbuf_tab(ng)%GBUF%FAIL(1)%DAMINI = zero
2330 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMINI*nel + 1
2331
2332 elbuf_tab(ng)%GBUF%FAIL(1)%LF_TDEL = fail_tag(irupt)%LF_TDEL
2333 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%TDEL,elbuf_tab(ng)%GBUF%FAIL(1)%LF_TDEL*nel)
2334 elbuf_tab(ng)%GBUF%FAIL(1)%TDEL = zero
2335 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_TDEL*nel + 1
2336
2337 elbuf_tab(ng)%GBUF%FAIL(1)%LF_INDX = fail_tag(irupt)%LF_INDX
2338 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%INDX,elbuf_tab(ng)%GBUF%FAIL(1)%LF_INDX*nel)
2339 elbuf_tab(ng)%GBUF%FAIL(1)%INDX = 0
2340 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_INDX*nel + 1
2341
2342 elbuf_tab(ng)%GBUF%FAIL(1)%LF_OFF = fail_tag(irupt)%LF_OFF
2343 CALL my_alloc(elbuf_tab(ng)%GBUF%FAIL(1)%OFF,elbuf_tab(ng)%GBUF%FAIL(1)%LF_OFF*nel)
2344 elbuf_tab(ng)%GBUF%FAIL(1)%OFF = 1
2345 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_OFF*nel + 1
2346 END IF
2347
2348 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel
2349
2350
2351 llay = 0
2352 DO il=1,nlay
2353 bufly => elbuf_tab(ng)%BUFLY(il)
2354 llay = llay + npar_lay + bufly%NVAR_LAY + bufly%NVAR_LOC
2355 llay = llay + nel*bufly%LY_DMG
2356 llay = llay + nel*bufly%LY_GAMA
2357 llay = llay + nel*bufly%LY_DIRA
2358 llay = llay + nel*bufly%LY_DIRB
2359 llay = llay + nel*bufly%LY_HOURG
2360 IF (lfail > 0) THEN
2361 llay = llay + nel*bufly%LY_UELR
2362 llay = llay + nel*bufly%LY_UELR1
2363 llay = llay + nel*bufly%LY_OFFPG
2364 llay = llay + nel*bufly%LY_OFF
2365 ENDIF
2366 ENDDO
2367
2368 buflen = buflen + llay
2369
2370
2371 DO il=1,nlay
2372 bufly => elbuf_tab(ng)%BUFLY(il)
2373 nip_lay = bufly%NPTT
2374
2375 lloc = 0
2376 lloc = lloc + bufly%L_OFF
2377 lloc = lloc + bufly%L_GAMA
2378
2379 lloc = lloc + bufly%L_STRA
2380
2381 lloc = lloc + bufly%L_FRAC
2382 lloc = lloc + bufly%L_BFRAC
2383 lloc = lloc + bufly%L_EINT
2384 lloc = lloc + bufly%L_EINS
2385 bufly%L_RHO = 0
2386 lloc = lloc + bufly%L_RHO
2387 lloc = lloc + bufly%L_DP_DRHO
2388 lloc = lloc + bufly%L_QVIS
2389 lloc = lloc + bufly%L_DELTAX
2390 lloc = lloc + bufly%L_VOL
2391 lloc = lloc + bufly%L_EPSA
2392 lloc = lloc + bufly%L_EPSD
2393 lloc = lloc + bufly%L_EPSQ
2394 lloc = lloc + bufly%L_EPSF
2395 lloc = lloc + bufly%L_PLA
2396 lloc = lloc + bufly%L_WPLA
2397 lloc = lloc + bufly%L_TEMP
2398 lloc = lloc + bufly%L_TB
2399 lloc = lloc + bufly%L_RK
2400 lloc = lloc + bufly%L_RE
2401 lloc = lloc + bufly%L_VK
2402 lloc = lloc + bufly%L_SF
2403 lloc = lloc + bufly%L_ROB
2404 lloc = lloc + bufly%L_DAM
2405 lloc = lloc + bufly%L_DSUM
2406 lloc = lloc + bufly%L_DGLO
2407 lloc = lloc + bufly%L_CRAK
2408 lloc = lloc + bufly%L_ANG
2409 lloc = lloc + bufly%L_EPE
2410 lloc = lloc + bufly%L_EPC
2411 lloc = lloc + bufly%L_XST
2412 lloc = lloc + bufly%L_SSP
2413 lloc = lloc + bufly%L_Z
2414 lloc = lloc + bufly%L_VISC
2415 lloc = lloc + bufly%L_SIGL
2416 lloc = lloc + bufly%L_SIGV
2417 lloc = lloc + bufly%L_SIGA
2418 lloc = lloc + bufly%L_SIGB
2419 lloc = lloc + bufly%L_SIGC
2420 lloc = lloc + bufly%L_SIGD
2421 lloc = lloc + bufly%L_SIGF
2422 lloc = lloc + bufly%L_SIG
2423 lloc = lloc + bufly%L_SIGPLY
2424 lloc = lloc + bufly%L_FOR
2425 lloc = lloc + bufly%L_MOM
2426 lloc = lloc + bufly%L_THK
2427 lloc = lloc + bufly%L_SMSTR
2428 lloc = lloc + bufly%L_DMG
2429 lloc = lloc + bufly%L_FORTH
2430 lloc = lloc + bufly%L_EINTTH
2431 lloc = lloc + bufly%L_SEQ
2432 lloc = lloc + bufly%L_FAC_YLD
2433 lloc = lloc + bufly%L_ABURN
2434 lloc = lloc + bufly%L_MU
2435 lloc = lloc + bufly%L_PLANL
2436 lloc = lloc + bufly%L_EPSDNL
2437 lloc = lloc + bufly%L_DMGSCL
2438 lloc = lloc + bufly%L_TSAIWU
2439
2440 buflen = buflen + (lloc * nel + npar_lbuf) * nip_lay
2441 ENDDO
2442
2443
2444
2445
2446
2447
2448
2449 iparg(66,ng) = buflen
2450
2451 IF(print_flag>6) WRITE(iout,1002) ng, buflen
2452
2454 . nintlay,nel,npt,ng,ngroup,ity,
2455 . igtyp,npropm,nummat,pm )
2456
2457 IF (ALLOCATED(imat)) DEALLOCATE(imat)
2458 IF (ALLOCATED(ilaw)) DEALLOCATE(ilaw)
2459
2460 ELSE
2461 ALLOCATE(elbuf_tab(ng)%BUFLY(0))
2462
2463 ENDIF
2464
2465
2466
2467
2468 IF (idamp_freq_range > 0) THEN
2469 ALLOCATE(elbuf_tab(ng)%DAMP_RANGE%ALPHA(3))
2470 ALLOCATE(elbuf_tab(ng)%DAMP_RANGE%TAU(3))
2471 buflen = iparg(66,ng) + ldamp_freq_range
2472 iparg(66,ng) = buflen
2473
2474
2475 ENDIF
2476
2477 IF (debug_print == 1) THEN
2478 print*,' elbuf_ini : NG,ITY,IGTYP,buflen=',ng,ity,igtyp,buflen
2479 ENDIF
2480
2481 ENDDO
2482
2483 1001 FORMAT(//,
2484 + 7x,'RESTART SIZE OF SHELL AND SOLID ELEMENT GROUPS'/
2485 + 7x,'----------------------------------------------'/)
2486 1002 FORMAT(
2487 + 7x,'ELEMENT GROUP',i10,', SIZE=',i10)
2488
2489 RETURN
subroutine ini_outmax_auto(elbuf_str, ity, ng)
subroutine initvars_auto(elbuf_str, mlaw_tag, prop_tag, gmat, glaw, igtyp, jmult, ifail, ieos, eos_tag, isnod)
subroutine allocbuf_auto(elbuf_tab, nlay, nptr, npts, nptt, nintlay, nel, npt, ng, ngroup, ity, igtyp, npropm, nummat, pm)
subroutine zerovars_auto(elbuf_str)