OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
elbuf_ini.F File Reference
#include "implicit_f.inc"
#include "units_c.inc"
#include "param_c.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "com_xfem1.inc"
#include "scr17_c.inc"
#include "scr23_c.inc"
#include "sphcom.inc"
#include "tablen_c.inc"
#include "sms_c.inc"
#include "boltpr_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine elbuf_ini (elbuf_tab, mat_param, mlaw_tag, prop_tag, fail_tag, igeo, ipm, pm, iparg, ipart, ipartsp, ixs, ixq, ixc, ixtg, flag_xfem, ipartig3d, stack, igeo_stack, ixt, ixp, ixr, kxx, geo, eos_tag, istr_24, print_flag, defaults)

Function/Subroutine Documentation

◆ elbuf_ini()

subroutine elbuf_ini ( type(elbuf_struct_), dimension(ngroup), target elbuf_tab,
type(matparam_struct_), dimension(nummat), intent(in) mat_param,
type(mlaw_tag_), dimension(nummat), target mlaw_tag,
type(prop_tag_), dimension(0:maxprop), target prop_tag,
type(fail_tag_), dimension(0:maxfail ), target fail_tag,
integer, dimension(npropgi,numgeo) igeo,
integer, dimension(npropmi,nummat) ipm,
pm,
integer, dimension(nparg,ngroup) iparg,
integer, dimension(lipart1,*) ipart,
integer, dimension(*) ipartsp,
integer, dimension(nixs,numels) ixs,
integer, dimension(nixq,numelq) ixq,
integer, dimension(nixc,numelc) ixc,
integer, dimension(nixtg,numeltg) ixtg,
integer flag_xfem,
integer, dimension(*) ipartig3d,
type (stack_ply) stack,
integer, dimension(npropgi,*) igeo_stack,
integer, dimension(nixt,numelt) ixt,
integer, dimension(nixp,numelp) ixp,
integer, dimension(nixr,numelr) ixr,
integer, dimension(nixx,*) kxx,
geo,
type(eos_tag_), dimension(0:maxeos), target eos_tag,
integer, intent(in) istr_24,
integer, intent(in) print_flag,
type(defaults_), intent(inout) defaults )
Parameters
[in]print_flagflag to print the element group data

Definition at line 38 of file elbuf_ini.F.

45C-----------------------------------------------
46C M o d u l e s
47C-----------------------------------------------
48 USE my_alloc_mod
49 USE mat_elem_mod
50 USE elbuftag_mod
51 USE message_mod
52 USE stack_mod
53 USE defaults_mod
54C-----------------------------------------------
55C I m p l i c i t T y p e s
56C-----------------------------------------------
57#include "implicit_f.inc"
58C-----------------------------------------------
59C C o m m o n B l o c k s
60C-----------------------------------------------
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"
72C-----------------------------------------------
73C D u m m y A r g u m e n t s
74C-----------------------------------------------
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),KXX(NIXX,*)
81 my_real :: pm(npropm,nummat),geo(npropg,numgeo)
82 INTEGER, INTENT(IN) :: PRINT_FLAG !< flag to print the element group data
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
91C-----------------------------------------------
92C L o c a l V a r i a b l e s
93C-----------------------------------------------
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,NSG,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 :: BUFLY
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
118C=======================================================================
119c Element Buffer Routine (Solid)
120c------
121c 1) taille du tableau ELBUF pour restart
122c 2) allocation de la structure ELBUF_TAB
123C=======================================================================
124 debug_print = 0
125c
126 IF(print_flag>6) WRITE(iout, 1001)
127c
128 DO ng = 1,ngroup
129c--- read IPARG
130c
131 mlw = iparg(1,ng) ! type de loi mat
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) ! pm(10)
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(41,ng)
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) ! flag XFEM
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) ! viscous stress flag
190 ivisc = iparg(61,ng) ! /VISC models flag
191 ipid = iparg(62,ng) ! property number
192 nctrl = iparg(75,ng) ! Control point number , iso-geometric elements
193 inloc = iparg(78,ng) ! Flag for non-local regularization
194 isubstack = iparg(71,ng)
195 iboltp = iparg(72,ng) ! Bolt preloading flag
196 ipinch = iparg(90,ng) ! Batoz shell pinching flag
197 idrape = iparg(92,ng) ! Drape group shell flag
198 idamp_freq_range = iparg(93,ng) ! Damping frequency range group flag
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
207cc NXEL = 0
208c----
209 npar_tab = 10 ! number of integer parameters at top structure level
210 npar_lay = 14 ! number of integer parameters at layer level
211 npar_lbuf = 2 ! number of integer parameters at LBUF layer
212c----
213c----
214c if xfem, count buffer's length only in the groups with xfem phantom elements
215cc IF (ICRACK3D > 0 .AND. IXFEM == 0) CYCLE
216c----
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
222c
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 ! no "XFEM_TAB" buffer for non xfem PARTS
238c
239c=======================================================================
240c
241 IF (ity == 1 .OR. ity == 2 .OR. ity == 51 .OR. ity == 101) THEN !
242c
243c solid, quad & SPH cell elements
244c
245c=======================================================================
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
252c
253c---------ELEMENT PROPERTY
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 ! multimateriau
261 nlay = 2
262 ELSE
263 nlay = 1
264 ENDIF
265C Multifluid law
266 IF (mlw == 151) THEN
267 nlay = iparg(20, ng)
268 ENDIF
269 ELSEIF (tshell == 1) THEN ! NLAY >= 1
270 npts = npt/100
271 nptt = mod(npt/10,10)
272 nptr = mod(npt,10)
273 IF (jhbe==15) THEN ! Thick shell HSPH
274 nlay = npt
275 nptr = 1
276 npts = 1
277 nptt = 1
278 ELSEIF (jhbe == 14) THEN ! Thick shell H8
279c plan = (r,s), layers = t
280c ICS=ICSIG/100
281c ICT=MOD(ICSIG/10,10)
282c ICR=MOD(ICSIG,10)
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 ! Thick shell 16 nodes
302 nptr = npt/100
303 npts = mod(npt/10,10)
304 nptt = mod(npt,10)
305c IF (TSH_ORT == 0) THEN
306c NLAY = NPTT
307c NPTT = 1
308c ELSE
309 nlay = npts
310 npts = 1
311c ENDIF
312 ENDIF
313c---------
314 ELSE ! Solid property
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
345c---------
346c
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 ! max Nb of failure models per mat
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
378c----------------------------------------------------
379c allocation of element buffer sub-structures
380c----------------------------------------------------
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,nptt))
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
394c ALLOCATE (ELBUF_TAB(NG)%XFEM(NPTR,NPTS,NPTT) ,STAT=Stat)
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
405c
406 npg = nptr*npts*nptt
407c--------------------------------------------------------
408c no non-local structure allocation if not needed
409c--------------------------------------------------------
410 IF (inloc == 0) THEN
411 ALLOCATE(elbuf_tab(ng)%NLOCTS(0,0))
412 ENDIF
413c-------------------------------------------------
414 CALL zerovars_auto(elbuf_tab(ng))
415c-------------------------------------------------
416 CALL ini_outmax_auto(elbuf_tab(ng),ity,ng)
417c
418c--- User Mat Buffer, Fail buffer - structure parameters
419c
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)%NVAR_MAT = nuvar
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 ! modele de rupture
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 ! ICPRE
451 ENDIF
452 ENDDO
453c---
454 ELSEIF (igtyp > 28 .and. igtyp < 32) THEN ! User solid property
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(ng)%BUFLY(1)%IPORO= 0
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 ! ICPRE
474 ENDIF
475c---
476 ELSEIF (mlw == 20) THEN ! Bimat
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 ! modele de rupture
495 idfail = mat_param(mx)%FAIL(j)%FAIL_ID
496 tfail(il,j) = irupt
497 failid(il,j) = idfail
498 ENDDO
499 ENDDO
500c---
501 ELSEIF (mlw == 151) THEN ! multiphase 151
502 DO il = 1,nlay
503 imat(il) = mat_param(imid)%MULTIMAT%MID(il) ! submaterial MID
504 ilaw(il) = ipm(2,imat(il)) ! submaterial law type
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 ! submaterial eos 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 ! modele de rupture
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 ! ICPRE
532 ENDIF
533 ENDDO
534c---
535 ELSEIF (nlay > 1) THEN ! thick shells, multiphase
536 DO il = 1,nlay
537 imat(il) = imid ! global MID in all pts
538 ilaw(il) = mlw ! same law type everywhere
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 ! modele de rupture
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 ! ICPRE
561 ENDIF
562 ENDDO
563C---
564 ! Non-local regularization in the shell thickness
565 IF (inloc > 0) THEN
566 ! Allocation of the non-local in thickness structural data
567 ALLOCATE(elbuf_tab(ng)%NLOCTS(nptr,npts))
568 ! Number of non-local nodes in the thickness
569 nonl = nlay+1
570 ! Loop over Gauss points in the plane of the shell
571 DO ir = 1,elbuf_tab(ng)%NPTR
572 DO is = 1,elbuf_tab(ng)%NPTS
573 ! Non-local buffer
574 bufnlts => elbuf_tab(ng)%NLOCTS(ir,is)
575 ! Non-local in-thickness masses
576 CALL my_alloc(bufnlts%MASSTH,nel,nonl)
577 bufnlts%MASSTH = zero
578 lnlocts = lnlocts + nel*nonl
579 ! Non-local in-thickness cumulated variables
580 CALL my_alloc(bufnlts%UNLTH,nel,nonl)
581 bufnlts%UNLTH = zero
582 lnlocts = lnlocts + nel*nonl
583 ! Non-local in-thickness velocities
584 CALL my_alloc(bufnlts%VNLTH,nel,nonl)
585 bufnlts%VNLTH = zero
586 lnlocts = lnlocts + nel*nonl
587 ! Non-local in-thickness forces
588 CALL my_alloc(bufnlts%FNLTH,nel,nonl)
589 bufnlts%FNLTH = zero
590 lnlocts = lnlocts + nel*nonl
591 ENDDO
592 ENDDO
593 ENDIF
594c---
595 ELSE
596 nuvar = mlaw_tag(imid)%NUVAR
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 = 1,nfail
616 irupt = mat_param(imid)%FAIL(j)%IRUPT ! modele de rupture
617 idfail = mat_param(imid)%FAIL(j)%FAIL_ID
618 tfail(1,j) = irupt
619 failid(1,j) = idfail
620 ENDDO
621c---
622 ENDIF
623c--- User Mat Buffer, Fail buffer, Visc buffer : alloc + init
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)
643c
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*nel
653
654 ALLOCATE(elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(nfail))
655 mx = elbuf_tab(ng)%BUFLY(il)%IMAT
656
657 DO j = 1,nfail
658 floc=>elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)%FLOC(j)
659c
660 irupt = mat_param(mx)%FAIL(j)%IRUPT
661 floc%ILAWF = irupt
662 lfail = lfail + 1
663c
664 floc%IDFAIL = mat_param(mx)%FAIL(j)%FAIL_ID
665 lfail = lfail + 1
666c
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
671c
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
676c
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
681c
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
686c
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
691c
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
696c
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
701c
702 ENDDO
703 ENDDO
704 ENDDO
705 ENDDO
706 ENDDO
707c----------------------------------------------------
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
719C------for the future small strain option w/ Itetra=1
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
728C------
729 ! Variable for ITET4 = 3
730 IF (ity == 1 .AND. isnod == 4 .AND. isrot == 3 ) THEN
731 gbuf%G_AMU = 1
732 ENDIF
733C------
734 ! Variable for Eint_distor
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
740C------
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
755c IF (JHBE == 17) GBUF%G_ETOTSH = 6
756 END IF !(ISNOD == 10 ) THEN
757C----- thickshell will be checked later----
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
769C------------- for strain output, to 3*6
770 IF (jhbe == 24) gbuf%G_STRHG = 3*6
771c Allocate thermal stress and Thermal internal energy
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
780c
781c local material variables
782 DO il = 1, nlay
783 bufly => elbuf_tab(ng)%BUFLY(il)
784 IF (mlw /= 115) bufly%L_RHO = 1
785c
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 ! for th outp of viscous stress
792 IF ((ivisc > 0).OR.(idamp_freq_range > 0)) bufly%L_VISC = 6
793c Allocate thermal stress and Thermal internal energy
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
799C---- only useful with the law where P=Bulk*AMU(rho,rho0) but not do the distinc here
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
805C
806C Orthotropic SPH properties
807 IF ((isorth == 1).AND.(igtyp == 34)) THEN
808 gbuf%G_GAMA = 6
809 ENDIF
810C
811c Bolt Preloading
812 gbuf%G_BPRELD = nbpreld*iboltp
813
814c Corotational nodal forces (isolid 19)
815 IF (ity==1 .AND. jhbe==17 .AND. iint==3) THEN
816 gbuf%G_COR_NF = 24
817c Corotational frame (isolid 19)
818 gbuf%G_COR_FR = 9 !3*3 ! sb Mis en standby pourl'instant
819c Corotational reference coordinates (isolid 19)
820 gbuf%G_COR_XR = 21 !7*3
821 ENDIF
822C
823c----------------------------------------------------
824 CALL initvars_auto(
825 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
826 . imid ,mlw ,igtyp ,jmult ,ifail ,
827 . ieos ,eos_tag ,isnod )
828c-------------------------------------------------
829c taille du tableau local ELBUF pour restart
830c-------------------------------------------------
831c GBUF%NVAR_GLOB ! number of element variables in GBUF
832c BUFLY%NVAR_LAY ! number of element variables in BUFLY
833c BUFLY%NVAR_LOC ! number of element variables in LBUF (defined on layer level)
834c
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
841C This array is a double precision array even in SP executable.
842C Remode from global buffer writing
843c LGLOB = LGLOB + GBUF%G_SMSTR
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
871C
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 = lglob + gbuf%G_EPGPINCHZZ
877C
878 lglob = lglob + gbuf%G_STRPG
879 lglob = lglob + gbuf%G_STRWPG
880 lglob = lglob + gbuf%G_TEMPG
881 ENDIF
882C
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
900cc LGLOB = LGLOB + GBUF%G_THK
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
913C
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
948C
949 lglob = lglob + gbuf%G_FILL
950C ---add H3D/TMAX in BUFLEN
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
958C
959 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel
960c
961c--------- layer variables
962 llay = 0
963 DO i=1,nlay
964 bufly => elbuf_tab(ng)%BUFLY(i)
965c
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
986cc LLAY = LLAY + NEL*BUFLY%LY_PLAPT
987cc LLAY = LLAY + NEL*BUFLY%LY_SIGPT
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
994c--------- local variables
995 DO i=1,nlay
996 bufly => elbuf_tab(ng)%BUFLY(i)
997c ! tags for local variables : NVAR_LOC = 51
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 lloc = lloc + bufly%L_FAC_YLD
1053 lloc = lloc + bufly%L_ABURN
1054 lloc = lloc + bufly%L_MU
1055 lloc = lloc + bufly%L_PIJ
1056c LLOC = LLOC + BUFLY%L_VOL0DP
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 = buflen + (lloc * nel + npar_lbuf) * npg
1062 ENDDO
1063c print*,' local=',(LLOC * NEL + NPAR_LBUF) * NPG
1064c-----------------------------------
1065 iparg(66,ng) = buflen ! size of restart transfer table
1066c print*,' elbuf_ini : buflen=',buflen
1067c print*,' elbuf_ini : buflen=',buflen,ITY,NPG
1068c print*,' nlay,nptr,npts,nptt=',nlay,nptr,npts,nptt
1069c-------------------------------------------------
1070 CALL allocbuf_auto(elbuf_tab,nlay,nptr,npts,nptt,
1071 . nintlay,nel,npt,ng,ngroup,ity,
1072 . igtyp,npropm,nummat,pm )
1073c-------------------------------------------------
1074 DEALLOCATE(tfail)
1075 DEALLOCATE(failid)
1076 DEALLOCATE(imat)
1077 DEALLOCATE(ilaw)
1078c
1079c=======================================================================
1080c
1081 ELSEIF (ity == 3 .OR. ity == 7) THEN
1082c
1083c shell elements
1084c
1085c=======================================================================
1086c
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
1095C
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 ! one Gauss point on surface
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
1109 nlay = max(1,npt)
1110 nptt = 1
1111 ELSE ! IGTYP = 1 .or. IGTYP = 9
1112 nlay = 1
1113 nptt = max(1,npt) ! attention to global integration
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
1119c
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
1126c-------------------------------------------------
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
1137c-------------------------------------------------
1138c print*,'**** JHBE,NPG=',JHBE,NPG
1139cc NPT = NPG*NLAY*NPTT
1140 IF (igtyp == 51 .OR. igtyp == 52) THEN
1141 npt = npg*npt
1142 ELSE
1143 npt = npg*nlay*nptt
1144 ENDIF
1145c NPT may be 0 for PID1 <=> global integration !
1146c NIP_LAY = NPG*NPTT
1147c print*,' nlay,nptr,npts,nptt=',nlay,nptr,npts,nptt
1148c print*,' npt_iparg, nel=',iparg(6,ng), nel
1149c print*,'nel,ISTRA, ISMSTR=',nel,ISTRA, ISMSTR
1150c
1151 maxflay = 7 ! max Nb of failure models per mat
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)
1156c---------------------------------------------------------
1157c no non-local structure allocation if not needed
1158c---------------------------------------------------------
1159 IF (inloc == 0) THEN
1160 ALLOCATE(elbuf_tab(ng)%NLOC(0,0))
1161 ENDIF
1162c
1163 tfail(:,:) = 0
1164 failid(:,:) = 0
1165 ilaw(:) = 0
1166 imat(:) = 0
1167c------------------------------------------------------
1168c allocation of element buffer sub-structures
1169c------------------------------------------------------
1170 ALLOCATE(elbuf_tab(ng)%BUFLY(nlay))
1171C---
1172 IF(idrape > 0) THEN
1173 IF (igtyp == 51 .OR. igtyp == 52 ) THEN
1174C--- count (and store) total number of integration points through each stack group layer
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 ! idrape = 0
1187 IF (igtyp == 51 ) THEN
1188C--- count (and store) total number of integration points through each stack group layer
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
1208C---
1209 npttot = 0
1210 DO i=1,nlay
1211 npttot = npttot + npg*elbuf_tab(ng)%BUFLY(i)%NPTT
1212 ENDDO
1213C---
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
1227C---
1228 ! Non-local regularization in the shell thickness
1229 IF ((inloc > 0).AND.(nptt>1)) THEN
1230 ! Allocation of the non-local in thickness structural data
1231 ALLOCATE(elbuf_tab(ng)%NLOC(nptr,npts))
1232 ! Number of non-local nodes in the thickness
1233 IF (nptt>2) THEN
1234 nonl = nptt+1
1235 ELSE
1236 nonl = nptt
1237 ENDIF
1238 ! Loop over Gauss points in the plane of the shell
1239 DO ir = 1,nptr
1240 DO is = 1,npts
1241 ! Non-local buffer
1242 bufnl => elbuf_tab(ng)%NLOC(ir,is)
1243 ! Non-local in-thickness masses
1244 CALL my_alloc(bufnl%MASSTH,nel,nonl)
1245 bufnl%MASSTH = zero
1246 lnloc = lnloc + nel*nonl
1247 ! Non-local in-thickness cumulated variables
1248 CALL my_alloc(bufnl%UNLTH,nel,nonl)
1249 bufnl%UNLTH = zero
1250 lnloc = lnloc + nel*nonl
1251 ! Non-local in-thickness velocities
1252 CALL my_alloc(bufnl%VNLTH,nel,nonl)
1253 bufnl%VNLTH = zero
1254 lnloc = lnloc + nel*nonl
1255 ! Non-local in-thickness forces
1256 CALL my_alloc(bufnl%FNLTH,nel,nonl)
1257 bufnl%FNLTH = zero
1258 lnloc = lnloc + nel*nonl
1259 ENDDO
1260 ENDDO
1261 ENDIF
1262!-------------------------------------------------
1263C---
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
1271c-------------------------------------------------
1272 CALL zerovars_auto(elbuf_tab(ng))
1273c-------------------------------------------------
1274 CALL ini_outmax_auto(elbuf_tab(ng),ity,ng)
1275c
1276c--- User Mat Buffer, Fail buffer - structure parameters
1277c
1278 IF (igtyp == 11 .or. igtyp == 16) THEN
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,ipm(20+il,imid))
1293 ENDDO
1294 ELSE ! IGTYP = 1,9,10
1295 DO il = 1,nlay
1296 imat(il) = imid
1297 ilaw(il) = mlw
1298 ENDDO
1299 END IF
1300c
1301c-----------------------------------------------
1302 IF (mlw == 151) THEN ! Multifluid law
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))%NVARTMP
1332 elbuf_tab(ng)%BUFLY(il)%NVAR_VISC = mat_param(imat(il))%VISC%NUVAR + nvar_damp_freq_range
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(imat(il))%FAIL(j)%IRUPT ! modele de rupture
1340 idfail = mat_param(imat(il))%FAIL(j)%FAIL_ID
1341 tfail(il,j) = irupt
1342 failid(il,j) = idfail
1343 ENDDO
1344 ENDDO
1345 ENDIF
1346c--------------
1347 IF (debug_print == 1) THEN
1348c print*,' nlay,nptr,npts,nptt,npt=',nlay,nptr,npts,nptt,npt
1349 ENDIF
1350c--------------
1351c--- Layer variables
1352c--- User Mat Buffer, Fail buffer, Visc buffer : alloc + init
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)%NVAR_VISC = nuvarv
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(il)%NFAIL
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)%MAT(ir,is,it)%VAR,nuvarm*nel)
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,is,it)%VARTMP = 0
1378c
1379 lmat = lmat + nuvarm*nel
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)%FLOC(j)
1387
1388 irupt = mat_param(mx)%FAIL(j)%IRUPT
1389 floc%ILAWF = irupt
1390 lfail = lfail + 1
1391c
1392 floc%IDFAIL = mat_param(mx)%FAIL(j)%FAIL_ID
1393 lfail = lfail + 1
1394c
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
1399c
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
1404c
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
1409c
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
1414c
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
1419c
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
1424c
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
1429c
1430 ENDDO
1431 ENDDO
1432 ENDDO
1433 ENDDO
1434 ENDDO
1435c
1436c--- Inter layer variables
1437c
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 ! adding
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)
1455C old stack IGEO(500+IL,IPID)
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 ! modele de rupture
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 ! inter layer parameters: = 5
1471 limat = limat + nel*ly_eint
1472 limat = limat + nel*ly_count
1473 ! write local inter layer variables for each element
1474 DO i = 1,nptr
1475 DO j = 1,npts
1476 ilbuf => elbuf_tab(ng)%INTLAY(il)%ILBUF(i,j)
1477 CALL my_alloc(intlay%ILBUF(i,j)%EPS,l_eps*nel)
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
1486c
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 ! Not need in restart file + NVARTMP*NEL
1498c ALLOCATE(ELBUF_TAB(NG)%INTLAY(IL)%VISC(IR,IS)%
1499c . VAR(NUVARV*NEL) ,STAT=Stat)
1500c
1501 ALLOCATE(elbuf_tab(ng)%INTLAY(il)%FAIL(ir,is)%FLOC(nfail))
1502c LVISC = LVISC + NUVARV*NEL
1503 DO j = 1,nfail
1504 floc=>elbuf_tab(ng)%INTLAY(il)%FAIL(ir,is)%FLOC(j)
1505 floc%ILAWF = mat_param(imat(il))%FAIL(j)%IRUPT
1506 floc%IDFAIL = mat_param(imat(il))%FAIL(j)%FAIL_ID
1507 floc%NVAR = mat_param(imat(il))%FAIL(j)%NUVAR
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
1520c----------------------------------
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
1526c----------------------------------------------------
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
1540C----------- -----
1541 gbuf%G_SMSTR = 9
1542 ELSEIF (ismstr /= 4) THEN
1543 gbuf%G_SMSTR = 6
1544 END IF
1545cc
1546
1547 ELSEIF (ity == 7) THEN
1548 IF (jhbe >= 30) THEN ! dkt6
1549 IF (ismstr /= 4) gbuf%G_SMSTR = 13
1550 ELSEIF (ismstr == 10) THEN
1551 gbuf%G_SMSTR = 6
1552 ELSEIF (ismstr /= 4) THEN
1553C------------- 3 is sufficient !!!!
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 ! avoid mem damping error
1562 IF (npg > 1) gbuf%G_FORPG_G = 5*npg
1563 END IF
1564 ENDIF
1565c---------for accumulate WXY
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
1576c Allocate thermal stress and Thermal internal energy
1577 IF(iexpan > 0) THEN
1578 gbuf%G_FORTH = 2
1579 gbuf%G_EINTTH = 1
1580 ENDIF
1581c
1582c local material variables
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 = 5
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
1613c Allocate thermal stress and Thermal internal energy
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
1627c Allocate Orthotropic Beta angle (dyna input format)
1628 IF((ity==3.OR.ity==7).AND.igtyp /= 1) THEN
1629 gbuf%G_BETAORTH = 1
1630 ENDIF
1631c----------------------------------------------------
1632 CALL initvars_auto(
1633 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
1634 . imid ,mlw ,igtyp ,jmult ,ifail ,
1635 . ieos ,eos_tag ,isnod )
1636c-------------------------------------------------
1637!---
1638! ! equivalent stress / criterion - other then VON MISES
1639! IF( GBUF%G_SEQ > 0) THEN
1640! DO IL = 1, NLAY
1641! BUFLY => ELBUF_TAB(NG)%BUFLY(IL)
1642! LAW = BUFLY%ILAW
1643! IF (LAW == 10 .OR. LAW == 12 .OR. LAW == 14 .OR.
1644! . LAW == 15 .OR. LAW == 21 .OR. LAW == 24 .OR.
1645! . LAW == 25 .OR. LAW == 32 .OR. LAW == 43 .OR.
1646! . LAW == 53 .OR. LAW == 57 .OR. LAW == 72 .OR.
1647! . LAW == 73 .OR. LAW == 74 .OR. LAW == 81 .OR.
1648! . LAW == 93) THEN
1649! BUFLY%L_SEQ = 1
1650! ENDIF
1651! ENDDO
1652! ENDIF
1653!---
1654c-------------------------------------------------
1655c taille du tableau local ELBUF pour restart
1656c-------------------------------------------------
1657c GBUF%NVAR_GLOB ! number of element variables in GBUF
1658c BUFLY%NVAR_LOC ! number of element variables in LBUF (defined on layer level)
1659c
1660 buflen = npar_tab + lmat + lfail + lvisc + lporo + leos + limat + lifail + lnloc
1661c-------------------------------------------------
1662 IF (debug_print == 1) THEN
1663 print*,' BUFLEN=NPAR_TAB+LMAT+LFAIL+LVISC+LPORO+LEOS+LIMAT+LIFAIL+LNLOC',buflen
1664 ENDIF
1665c-------------------------------------------------
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
1682C
1683 lglob = 0
1684 lglob = lglob + gbuf%G_NOFF
1685 lglob = lglob + gbuf%G_IERR
1686 lglob = lglob + gbuf%G_GAMA
1687C This array is a double precision array even in SP executable.
1688C Remode from global buffer writing
1689c LGLOB = LGLOB + GBUF%G_SMSTR
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
1701C-------G_THK_I = G_THK
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
1712C
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
1718C
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
1726c
1727 IF (lfail > 0) THEN
1728 lglob = lglob + gbuf%G_UELR
1729 lglob = lglob + gbuf%G_UELR1
1730 ENDIF
1731C
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 = lglob + gbuf%G_EPSQ
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
1755C
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
1787C
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
1793C
1794 lglob = lglob + gbuf%G_FILL
1795 lglob = lglob + gbuf%G_BETAORTH
1796C ---add H3D/TMAX in BUFLEN
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
1804C
1805c
1806 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel
1807c
1808c---------
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
1815c---------
1816c
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
1841cc LLAY = LLAY + NEL*BUFLY%LY_PLAPT
1842cc LLAY = LLAY + NEL*BUFLY%LY_SIGPT
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
1860c
1861 buflen = buflen + llay
1862c
1863c---------
1864 IF (debug_print == 1) THEN
1865 print*,' total vars LY_xxx, buflen =: ', llay , buflen
1866 ENDIF
1867c---------
1868c---------
1869 DO il=1,nlay
1870 bufly => elbuf_tab(ng)%BUFLY(il)
1871c ! tags for local variables : NVAR_LOC
1872 nip_lay = npg*bufly%NPTT
1873c
1874 lloc = 0
1875 lloc = lloc + bufly%L_OFF
1876 lloc = lloc + bufly%L_GAMA
1877c
1878 IF(ixfem == 0) bufly%L_STRA = 0 ! not used for shell elements
1879 lloc = lloc + bufly%L_STRA
1880c
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
1941c
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
1951c
1952 ENDDO
1953 iparg(66,ng) = buflen ! size of restart transfer table
1954
1955 IF(print_flag>6) WRITE(iout,1002) ng, buflen
1956c
1957c-------------------------------------------------
1958c print*,' elbuf_ini : NG, buflen=',NG,buflen,ITY,IGTYP
1959c-------------------------------------------------
1960 CALL allocbuf_auto(elbuf_tab,nlay,nptr,npts,nptt,
1961 . nintlay,nel,npt,ng,ngroup,ity,
1962 . igtyp,npropm,nummat,pm )
1963c-------------------------------------------------
1964 DEALLOCATE(tfail)
1965 DEALLOCATE(failid)
1966 DEALLOCATE(imat)
1967 DEALLOCATE(ilaw)
1968c
1969c=======================================================================
1970c
1971 ELSEIF (ity == 4 .OR. ity == 5 .OR. ity == 6 .OR. ity == 100) THEN
1972c
1973c 1-D elements (TRUSS, BEAM, SPRING)
1974c
1975c=======================================================================
1976 IF (ity == 4) THEN ! TRUSS
1977 imid = ixt(1,nft+1)
1978 ipid = ixt(4,nft+1)
1979 ELSEIF (ity == 5) THEN ! BEAM
1980 imid = ixp(1,nft+1)
1981 ipid = ixp(5,nft+1)
1982 ELSEIF (ity == 6) THEN ! SPRING
1983 imid = ixr(5,nft+1)
1984 ipid = ixr(1,nft+1)
1985 ELSEIF (ity == 100) THEN ! MULTIBRIN
1986 imid = 0
1987 ipid = kxx(2,nft+1)
1988 ENDIF
1989 igtyp = igeo(11,ipid)
1990C----
1991 gbuf => elbuf_tab(ng)%GBUF
1992C---
1993 gbuf%G_DT = 1
1994C
1995 nptt = 0
1996 nptr = 0
1997 npts = 0
1998 nlay = 0
1999 npg = 0
2000C
2001 IF (igtyp == 18) THEN ! integrated beams
2002 nlay = 1
2003 nptr = 1
2004 npts = 1
2005 nptt = npt
2006 ENDIF
2007C
2008 iparg(56,ng) = nptr
2009 iparg(57,ng) = npts
2010 iparg(58,ng) = nptt
2011 iparg(59,ng) = nlay
2012c-------------------------------------------------
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
2023c-------------------------------------------------
2024 CALL my_alloc(imat,nlay)
2025 CALL my_alloc(ilaw,nlay)
2026 ilaw(:) = 0
2027 imat(:) = 0
2028C
2029 lmat = 0
2030 leos = 0
2031C
2032 IF (nlay > 0) THEN ! integrated beam (NLAY = 1)
2033 ALLOCATE(elbuf_tab(ng)%BUFLY(nlay))
2034C---
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
2043C---
2044c
2045c--- User Mat Buffer - structure parameters
2046c
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
2068c
2069c--- User Mat Buffer, Fail buffer, Visc buffer : alloc + init
2070c
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 ! Failure model type
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)
2098c
2099 floc%ILAWF = irupt
2100 lfail = lfail + 1
2101c
2102 floc%IDFAIL = mat_param(imat(il))%FAIL(1)%FAIL_ID
2103 lfail = lfail + 1
2104c
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
2109c
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
2114c
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
2119c
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
2124c
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
2129c
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
2134c
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
2145c
2146C---
2147 ELSE ! NLAY = 0 (spring std)
2148 ALLOCATE(elbuf_tab(ng)%BUFLY(0))
2149 ENDIF ! IF (NLAY > 0)
2150C
2151 buflen = npar_tab + lmat + lfail + lvisc + lporo + leos + limat + lifail
2152c-------------------------------------------------
2153 CALL zerovars_auto(elbuf_tab(ng))
2154c-------------------------------------------------
2155 CALL initvars_auto(
2156 . elbuf_tab(ng),mlaw_tag ,prop_tag ,
2157 . imid ,mlw ,igtyp ,jmult ,ifail ,
2158 . ieos ,eos_tag ,isnod )
2159C---
2160 DO il = 1,nlay
2161 bufly => elbuf_tab(ng)%BUFLY(il)
2162 IF (mlw == 2) bufly%L_SIGB = 0 ! NOT USED HERE
2163 bufly%L_OFF = 0 ! NOT USED HERE
2164 bufly%L_EINT = 0 ! NOT USED HERE
2165 bufly%L_FAC_YLD = 0 ! NOT USED HERE
2166 ENDDO
2167C---
2168C - nstrand -
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
2174c Allocate thermal strain and Thermal internal energy
2175 IF(iexpan > 0) THEN
2176 gbuf%G_FORTH = 1 !
2177 gbuf%G_EINTTH = 1
2178 ENDIF
2179C
2180 IF (isms_selec >= 1) gbuf%G_ISMS = 1
2181c Bolt /PRELOAD/AXIAL
2182 IF (iboltp>0) gbuf%G_BPRELD = 2
2183c-------------------------------------------------
2184c taille du tableau local ELBUF pour restart
2185c-------------------------------------------------
2186 gbuf%G_THK_I = gbuf%G_THK
2187
2188 lglob = 0
2189C
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 ! not actually used
2212 lglob = lglob + gbuf%G_FORPG
2213 lglob = lglob + gbuf%G_MOMPG
2214C
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
2220C
2221 lglob = lglob + gbuf%G_STRPG
2222 lglob = lglob + gbuf%G_STRWPG
2223 ENDIF
2224C
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
2247C
2248 lglob = lglob + gbuf%G_FILL
2249C
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
2288C
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
2298c
2299c failure struct for beams type 3 stored in global buffer
2300c
2301 gfail = 0
2302 IF (igtyp == 3 .and. ifail > 0) THEN
2303 ALLOCATE(elbuf_tab(ng)%GBUF%FAIL(1))
2304c
2305 irupt = mat_param(imid)%FAIL(1)%IRUPT
2306 elbuf_tab(ng)%GBUF%FAIL(1)%ILAWF = irupt
2307 gfail = gfail + 1
2308c
2309 elbuf_tab(ng)%GBUF%FAIL(1)%IDFAIL = mat_param(imid)%FAIL(1)%FAIL_ID
2310 gfail = gfail + 1
2311c
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
2316c
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
2321c
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*nel)
2324 elbuf_tab(ng)%GBUF%FAIL(1)%DAMMX = zero
2325 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMMX*nel + 1
2326c
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(ng)%GBUF%FAIL(1)%LF_DAMINI*nel)
2329 elbuf_tab(ng)%GBUF%FAIL(1)%DAMINI = zero
2330 gfail = gfail + elbuf_tab(ng)%GBUF%FAIL(1)%LF_DAMINI*nel + 1
2331c
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
2336c
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
2341c
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
2347c
2348 buflen = buflen + gbuf%NVAR_GLOB + 1 + lglob*nel + gfail
2349c---------
2350c--------- layer variables
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
2367C
2368 buflen = buflen + llay
2369C
2370c--------- local variables
2371 DO il=1,nlay ! NLAY = 1 for INTEGRATED BEAM
2372 bufly => elbuf_tab(ng)%BUFLY(il)
2373 nip_lay = bufly%NPTT
2374c
2375 lloc = 0
2376 lloc = lloc + bufly%L_OFF
2377 lloc = lloc + bufly%L_GAMA
2378c
2379 lloc = lloc + bufly%L_STRA
2380c
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
2439c
2440 buflen = buflen + (lloc * nel + npar_lbuf) * nip_lay
2441 ENDDO
2442c---------
2443C----
2444c print*, 'elbuf_ini =', NG,NEL,BUFLEN,LGLOB,
2445c . ITY,IGTYP,GBUF%G_PLA,MLW,NLAY,NPTS
2446C----
2447c
2448c-------------------------------------------------
2449 iparg(66,ng) = buflen ! size of restart transfer table
2450c
2451 IF(print_flag>6) WRITE(iout,1002) ng, buflen
2452c-------------------------------------------------
2453 CALL allocbuf_auto(elbuf_tab,nlay,nptr,npts,nptt,
2454 . nintlay,nel,npt,ng,ngroup,ity,
2455 . igtyp,npropm,nummat,pm )
2456C
2457 IF (ALLOCATED(imat)) DEALLOCATE(imat)
2458 IF (ALLOCATED(ilaw)) DEALLOCATE(ilaw)
2459c------------------------------------------------------
2460 ELSE
2461 ALLOCATE(elbuf_tab(ng)%BUFLY(0))
2462c------------------------------------------------------
2463 ENDIF ! ITY = 1,2,51,101 (solid group)
2464
2465c--------------------------------------------------------
2466c damping structure for damping frequency range
2467c--------------------------------------------------------
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
2473c ELSE
2474c ALLOCATE(ELBUF_TAB(NG)%DAMP_RANGE(0))
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 ! NG = 1,NGROUP
2482c------------------------------------------------------
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)
2488C-----------
2489 RETURN
#define my_real
Definition cppsort.cpp:32
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)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine allocbuf_auto(elbuf_tab, nlay, nptr, npts, nptt, nintlay, nel, npt, ng, ngroup, ity, igtyp, npropm, nummat, pm)
subroutine zerovars_auto(elbuf_str)