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