37
38
39
40 USE my_alloc_mod
41 USE elbufdef_mod
45 USE matparam_def_mod
46 use element_mod , only : nixs,nixc,nixtg
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "param_c.inc"
55#include "com01_c.inc"
56#include "com04_c.inc"
57#include "scr15_c.inc"
58#include "units_c.inc"
59#include "r2r_c.inc"
60
61
62
63 INTEGER NUMEL
64 INTEGER IPARG(NPARG,NGROUP),IXS(NIXS,*),IXC(NIXC,*),IXTG(NIXTG,*)
65 INTEGER IPM(NPROPMI,*)
66 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) ::
67 TYPE (NLOCAL_STR_) , TARGET :: NLOC_DMG
69 .
DIMENSION(NUMELC+NUMELTG),
INTENT(IN) ::
area
71 . DIMENSION(NUMEL), INTENT(INOUT) :: dtelem
73 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*)
74 TYPE (MATPARAM_STRUCT_), DIMENSION(NUMMAT), INTENT(IN) :: MATPARAM
75
76
77
78 CHARACTER FILNAM*109, KEYA*80, *80
79 CHARACTER(len=2148) :: TMP_NAME
80 LOGICAL :: ENG_FILE
81 INTEGER I,J,K,NG,NEL,NFT,ITY,NPTT,ILOC,INOD,NNOD,,IMAT,
82 . L_NLOC,POS,NDD,ISOLID,N,NUMELS_NL,IGTYP,NUMELC_NL,NDDMAX,
83 . NUMELTG_NL,NPTR,NPTS,IR,IS,ISOLNOD,IO_ERR1,LEN_TMP_NAME,
84 . ,IADBUF,MATSIZE,ERROR,NELEN_MAX,POSN
85 INTEGER, DIMENSION(8) :: IDXND,NODE_ID
86 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAGNOD,SOLNOD
87 INTEGER, DIMENSION(:), ALLOCATABLE :: INDX,IDXI,NMAT,NDDL,
88 . POSI,ITRI,INDEX,TAGTET,TAGPENT,ISLNOD,NELEN,ITRIN,IDELEM,
89 .
90 INTEGER, DIMENSION(:,:), POINTER :: IADS
92 . dens, dtmin, len, sspnl,nth1, nth2,
93 . z01(11,11), wf1(11,11), zn1(12,11),damp,ws,le_min,
94 . dtsca_ams,dtsca_cst_ams,le_max,ssp, young, nu,
95 . dtmini_ams,dtmini_cst_ams,dtmini, shear, bulk, rho
96 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
97 . warn_lenght
98 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
99 . voln, volu, volnod, volsort
100 my_real ,
DIMENSION(:) ,
POINTER ::
101 . vol, thck, uparam
102 TYPE(BUF_NLOC_), POINTER :: BUFNL
103 TYPE(BUF_NLOCTS_), POINTER :: BUFNLTS
104 my_real,
DIMENSION(:,:),
POINTER ::
105 . massth
106 LOGICAL, DIMENSION(8) :: BOOL
107
108
109
110
111
112 my_real,
PARAMETER :: eta = 0.2d0
113
114 DATA z01/
115 1 0. ,0. ,0. ,0. ,0. ,
116 1 0. ,0. ,0. ,0. ,0. ,0. ,
117 2 -.5 ,0.5 ,0. ,0. ,0. ,
118 2 0. ,0. ,0. ,0. ,0. ,0. ,
119 3 -.5 ,0. ,0.5 ,0. ,0. ,
120 3 0. ,0. ,0. ,0. ,0. ,0. ,
121 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
122 4 0. ,0. ,0. ,0. ,0. ,0. ,
123 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
124 5 0. ,0. ,0. ,0. ,0. ,0. ,
125 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
126 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
127 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
128 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
129 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
130 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
131 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
132 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
133 a -.5 ,-.3888889,-.2777778,-.1666667,-.0555555,
134 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
135 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
136 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
137
138 DATA wf1/
139 1 1. ,0. ,0. ,0. ,0. ,
140 1 0. ,0. ,0. ,0. ,0. ,0. ,
141 2 0.5 ,0.5 ,0. ,0. ,0. ,
142 2 0. ,0. ,0. ,0. ,0. ,0. ,
143 3 0.25 ,0.5 ,0.25 ,0. ,0. ,
144 3 0. ,0. ,0. ,0. ,0. ,0. ,
145 4 0.1666667,0.3333333,0.3333333,0.1666667,0. ,
146 4 0. ,0. ,0. ,0. ,0. ,0. ,
147 5 0.125 ,0.25 ,0.25 ,0.25 ,0.125 ,
148 5 0. ,0. ,0. ,0. ,0. ,0. ,
149 6 0.1 ,0.2 ,0.2 ,0.2 ,0.2 ,
150 6 0.1 ,0. ,0. ,0. ,0. ,0. ,
151 7 0.0833333,0.1666667,0.1666667,0.1666667,0.1666667,
152 7 0.1666667,0.0833333,0. ,0. ,0. ,0. ,
153 8 0.0714286,0.1428571,0.1428571,0.1428571,0.1428571,
154 8 0.1428571,0.1428571,0.0714286,0. ,0. ,0. ,
155 9 0.0625 ,0.125 ,0.125 ,0.125 ,0.125 ,
156 9 0.125 ,0.125 ,0.125 ,0.0625 ,0. ,0. ,
157 a 0.0555556,0.1111111,0.1111111,0.1111111,0.1111111,
158 a 0.1111111,0.1111111,0.1111111,0.1111111,0.0555556,0. ,
159 b 0.05 ,0.1 ,0.1 ,0.1 ,0.1 ,
160 b 0.1 ,0.1 ,0.1 ,0.1 ,0.1 ,0.05 /
161
162 DATA zn1/
163 1 0. ,0. ,0. ,0. ,0. ,0. ,
164 1 0. ,0. ,0. ,0. ,0. ,0. ,
165 2 -.5 ,0.5 ,0. ,0. ,0. ,0. ,
166 2 0. ,0. ,0. ,0. ,0. ,0. ,
167 3 -.5 ,-.25 ,0.25 ,0.5 ,0. ,0. ,
168 3 0. ,0. ,0. ,0. ,0. ,0. ,
169 4 -.5 ,-.3333333,0. ,0.3333333,0.5 ,0. ,
170 4 0. ,0. ,0. ,0. ,0. ,0. ,
171 5 -.5 ,-.375 ,-0.125 ,0.125 ,0.375 ,0.5 ,
172 5 0. ,0. ,0. ,0. ,0. ,0. ,
173 6 -.5 ,-.4 ,-.2 ,0.0 ,0.2 ,0.4 ,
174 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
175 7 -.5 ,-.4166667,-.25 ,-.0833333,0.0833333,0.25 ,
176 7 0.4166667,0.5 ,0. ,0. ,0. ,0. ,
177 8 -.5 ,-.4285715,-.2857143,-.1428572,0.0 ,0.1428572,
178 8 0.2857143,0.4285715,0.5 ,0. ,0. ,0. ,
179 9 -.5 ,-.4375 ,-.3125 ,-.1875 ,-.0625 ,0.0625 ,
180 9 0.1875 ,0.3125 ,0.4375 ,0.5 ,0. ,0. ,
181 a -.5 ,-.4444444,-.3333333,-.2222222,-.1111111,0. ,
182 a 0.1111111,0.2222222,0.3333333,0.4444444,0.5 ,0. ,
183 b -.5 ,-.45 ,-.35 ,-.25 ,-.15 ,-.05 ,
184 b 0.05 ,0.15 ,0.25 ,0.35 ,0.45 ,0.5 /
186 . w_gauss(9,9),a_gauss(9,9),z_gauss(10,9)
187
188 DATA w_gauss /
189 1 2. ,0. ,0. ,
190 1 0. ,0. ,0. ,
191 1 0. ,0. ,0. ,
192 2 1. ,1. ,0. ,
193 2 0. ,0. ,0. ,
194 2 0. ,0. ,0. ,
195 3 0.555555555555556,0.888888888888889,0.555555555555556,
196 3 0. ,0. ,0. ,
197 3 0. ,0. ,0. ,
198 4 0.347854845137454,0.652145154862546,0.652145154862546,
199 4 0.347854845137454,0. ,0. ,
200 4 0. ,0. ,0. ,
201 5 0.236926885056189,0.478628670499366,0.568888888888889,
202 5 0.478628670499366,0.236926885056189,0. ,
203 5 0. ,0. ,0. ,
204 6 0.171324492379170,0.360761573048139,0.467913934572691,
205 6 0.467913934572691,0.360761573048139,0.171324492379170,
206 6 0. ,0. ,0. ,
207 7 0.129484966168870,0.279705391489277,0.381830050505119,
208 7 0.417959183673469,0.381830050505119,0.279705391489277,
209 7 0.129484966168870,0. ,0. ,
210 8 0.101228536290376,0.222381034453374,0.313706645877887,
211 8 0.362683783378362,0.362683783378362,0.313706645877887,
212 8 0.222381034453374,0.101228536290376,0. ,
213 9 0.081274388361574,0.180648160694857,0.260610696402935,
214 9 0.312347077040003,0.330239355001260,0.312347077040003,
215 9 0.260610696402935,0.180648160694857,0.081274388361574/
216
217 DATA a_gauss /
218 1 0. ,0. ,0. ,
219 1 0. ,0. ,0. ,
220 1 0. ,0. ,0. ,
221 2 -.577350269189626,0.577350269189626,0. ,
222 2 0. ,0. ,0. ,
223 2 0. ,0. ,0. ,
224 3 -.774596669241483,0. ,0.774596669241483,
225 3 0. ,0. ,0. ,
226 3 0. ,0. ,0. ,
227 4 -.861136311594053,-.339981043584856,0.339981043584856,
228 4 0.861136311594053,0. ,0. ,
229 4 0. ,0. ,0. ,
230 5 -.906179845938664,-.538469310105683,0. ,
231 5 0.538469310105683,0.906179845938664,0. ,
232 5 0. ,0. ,0. ,
233 6 -.932469514203152,-.661209386466265,-.238619186083197,
234 6 0.238619186083197,0.661209386466265,0.932469514203152,
235 6 0. ,0. ,0. ,
236 7 -.949107912342759,-.741531185599394,-.405845151377397,
237 7 0. ,0.405845151377397,0.741531185599394,
238 7 0.949107912342759,0. ,0. ,
239 8 -.960289856497536,-.796666477413627,-.525532409916329,
240 8 -.183434642495650,0.183434642495650,0.525532409916329,
241 8 0.796666477413627,0.960289856497536,0. ,
242 9 -.968160239507626,-.836031107326636,-.613371432700590,
243 9 -.324253423403809,0. ,0.324253423403809,
244 9 0.613371432700590,0.836031107326636,0.968160239507626/
245
246 DATA z_gauss /
247 1 0. ,0. ,0. ,
248 1 0. ,0. ,0. ,
249 1 0. ,0. ,0. ,
250 1 0. ,
251 2 -1. ,0. ,1. ,
252 2 0. ,0. ,0. ,
253 2 0. ,0. ,0. ,
254 2 0. ,
255 3 -1. ,-.549193338482966,0.549193338482966,
256 3 1. ,0. ,0. ,
257 3 0. ,0. ,0. ,
258 3 0. ,
259 4 -1. ,-.600558677589454,0. ,
260 4 0.600558677589454,1. ,0. ,
261 4 0. ,0. ,0. ,
262 4 0. ,
263 5 -1. ,-.812359691877328,-.264578928334038,
264 5 0.264578928334038,0.812359691877328,1. ,
265 5 0. ,0. ,0. ,
266 5 0. ,
267 6 -1. ,-.796839450334708,-.449914286274731,
268 6 0. ,0.449914286274731,0.796839450334708,
269 6 1. ,0. ,0. ,
270 6 0. ,
271 7 -1. ,-.898215824685518,-.584846546513270,
272 7 -.226843756241524,0.226843756241524,0.584846546513270,
273 7 0.898215824685518,1. ,0. ,
274 7 0. ,
275 8 -1. ,-.878478166955581,-.661099443664978,
276 8 -.354483526205989,0. ,0.354483526205989,
277 8 0.661099443664978,0.878478166955581,1. ,
278 8 0. ,
279 9 -1. ,-.936320479015252,-.735741735638020,
280 9 -.491001129763160,-.157505717044458,0.157505717044458,
281 9 0.491001129763160,0.735741735638020,0.936320479015252,
282 9 1. /
283
284
285 IF (nloc_dmg%IMOD == 0) THEN
286 nloc_dmg%NNOD = 0
287 nloc_dmg%L_NLOC = 0
288 nloc_dmg%NUMELS_NL = 0
289 nloc_dmg%NUMELC_NL = 0
290 nloc_dmg%NUMELTG_NL = 0
291 nloc_dmg%NDDMAX = 0
292 IF (.NOT.ALLOCATED(nloc_dmg%DENS)) ALLOCATE(nloc_dmg%DENS(0))
293 IF (.NOT.ALLOCATED(nloc_dmg%DAMP)) ALLOCATE(nloc_dmg%DAMP(0))
294 IF (.NOT.ALLOCATED(nloc_dmg%LEN)) ALLOCATE(nloc_dmg%LEN(0))
295 IF (.NOT.ALLOCATED(nloc_dmg%LE_MAX)) ALLOCATE(nloc_dmg%LE_MAX(0))
296 IF (.NOT.ALLOCATED(nloc_dmg%SSPNL)) ALLOCATE(nloc_dmg%SSPNL(0))
297 IF (.NOT.ALLOCATED(nloc_dmg%INDX)) ALLOCATE(nloc_dmg%INDX(0))
298 IF (.NOT.ALLOCATED(nloc_dmg%POSI)) ALLOCATE(nloc_dmg%POSI(0))
299 IF (.NOT.ALLOCATED(nloc_dmg%IDXI)) ALLOCATE(nloc_dmg%IDXI(0))
300 IF (.NOT.ALLOCATED(nloc_dmg%ADDCNE)) ALLOCATE(nloc_dmg%ADDCNE(0))
301 IF (.NOT.ALLOCATED(nloc_dmg%CNE)) ALLOCATE(nloc_dmg%CNE(0))
302 IF (.NOT.ALLOCATED(nloc_dmg%IADS)) ALLOCATE(nloc_dmg%IADS(0,0))
303 IF (.NOT.ALLOCATED(nloc_dmg%IADC)) ALLOCATE(nloc_dmg%IADC(0,0))
304 IF (.NOT.ALLOCATED(nloc_dmg%IADTG)) ALLOCATE(nloc_dmg%IADTG(0,0))
305 IF (.NOT.ALLOCATED(nloc_dmg%MASS)) ALLOCATE(nloc_dmg%MASS(0))
306 IF (.NOT.ALLOCATED(nloc_dmg%MASS0)) ALLOCATE(nloc_dmg%MASS0(0))
307 IF (.NOT.ALLOCATED(nloc_dmg%FNL)) ALLOCATE(nloc_dmg%FNL(0,0))
308 IF (.NOT.ALLOCATED(nloc_dmg%VNL)) ALLOCATE(nloc_dmg%VNL(0))
309 IF (.NOT.ALLOCATED(nloc_dmg%VNL_OLD)) ALLOCATE(nloc_dmg%VNL_OLD(0))
310 IF (.NOT.ALLOCATED(nloc_dmg%DNL)) ALLOCATE(nloc_dmg%DNL(0))
311 IF (.NOT.ALLOCATED(nloc_dmg%UNL)) ALLOCATE(nloc_dmg%UNL(0))
312 IF (.NOT.ALLOCATED(nloc_dmg%STIFNL)) ALLOCATE(nloc_dmg%STIFNL(0,0))
313 IF (.NOT.ALLOCATED(nloc_dmg%FSKY)) ALLOCATE(nloc_dmg%FSKY(0,0))
314 IF (.NOT.ALLOCATED(nloc_dmg%STSKY)) ALLOCATE(nloc_dmg%STSKY(0,0))
315 IF (.NOT.ALLOCATED(nloc_dmg%IAD_ELEM)) ALLOCATE(nloc_dmg%IAD_ELEM(0))
316 IF (.NOT.ALLOCATED(nloc_dmg%IAD_SIZE)) ALLOCATE(nloc_dmg%IAD_SIZE(0))
317 IF (.NOT.ALLOCATED(nloc_dmg%FR_ELEM)) ALLOCATE(nloc_dmg%FR_ELEM(0))
318
319
320 ELSE
321
322
323 WRITE(istdo,'(A)') ' .. NON-LOCAL STRUCTURE INITIALIZATION'
324
325
326 ALLOCATE(
tagnod(numnod,3) )
327 ALLOCATE( indx(numnod) )
328 ALLOCATE( idxi(numnod) )
329 ALLOCATE( nddl(numnod) )
330 ALLOCATE( nmat(numnod) )
331 ALLOCATE( posi(numnod+1) )
332 ALLOCATE( islnod(numels))
333 ALLOCATE( solnod(8,numels))
334 ALLOCATE( volu(numels+numelc+numeltg) )
335 ALLOCATE( volnod(numels+numelc+numeltg))
336 ALLOCATE( tagtet(numels) )
337 ALLOCATE( tagpent(numels))
338 ALLOCATE( nelen(numnod))
339 ALLOCATE( index(numels+numelc+numeltg) )
340 ALLOCATE( itri(numels+numelc+numeltg) )
341
342 IF (nsubdom > 0) THEN
343
344 matsize = nummat0
345 ELSE
346 matsize = nummat
347 ENDIF
348 CALL my_alloc(warn_lenght,matsize,3)
349
350
351 volu(1:numels+numelc+numeltg) = zero
352 volnod(1:numels+numelc+numeltg) = zero
353 index(1:numels+numelc+numeltg) = 0
354 itri(1:numels+numelc+numeltg) = 0
356 tagtet(1:numels) = 0
357 tagpent(1:numels) = 0
358 nelen(1:numnod) = 0
359 numels_nl = 0
360 numelc_nl = 0
361 numeltg_nl = 0
362 nddmax = 0
363 warn_lenght(1:matsize,1:3) = zero
364
365
366 DO ng=1,ngroup
367
368 iloc = iparg(78,ng)
369
370 igtyp = iparg(38,ng)
371
372 nel = iparg(2,ng)
373 IF (iloc > 0) THEN
374
375 nft = iparg(3,ng)
376
377 ity = iparg(5,ng)
378
379 isolid = iparg(23,ng)
380
381 IF (ity == 1) THEN
382
383 IF ((igtyp /= 14).AND.(igtyp /= 6).AND.(igtyp /= 20).AND.(igtyp /= 21)) THEN
384 CALL ancmsg(msgid=1661,msgtype=msgerror,
385 . anmode=aninfo_blind,i1=igtyp)
386 ENDIF
387
388 isolnod = iparg(28,ng)
389
390 vol => elbuf_tab(ng)%GBUF%VOL(1:nel)
391
392 DO k = 1,nel
393 index(numels_nl+k) = k + nft
394 itri(k+nft) = ixs(11,k+nft)
395 volu(k+nft) = vol(k)
396 ENDDO
397
398 numels_nl = numels_nl + nel
399
400 nptt = elbuf_tab(ng)%NLAY
401
402 imat = ixs(1,1+nft)
403
404 IF (isolnod == 4) THEN
405
406 DO i=1,nel
407
408 tagtet(i+nft) = 1
409
410 DO j=1,4
411
412 IF (j == 1) k = 2
413 IF (j == 2) k = 4
414 IF (j == 3) k = 7
415 IF (j == 4) k = 6
416 inod = ixs(k,i+nft)
417
418 nelen(inod) = nelen(inod) + 1
419
421
423
424 IF ((
tagnod(inod,3) /= 0).AND.(
tagnod(inod,3) /= imat))
THEN
425 CALL ancmsg(msgid=1656,msgtype=msgerror,
426 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=
tagnod(inod,3))
427 ENDIF
428
430
431 volnod(i+nft) = fourth*vol(i)
432 ENDDO
433 ENDDO
434
435 ELSEIF (isolnod == 6) THEN
436
437 DO i=1,nel
438
439 tagpent(i+nft) = 1
440
441 DO j=1,6
442
443 k = j + 1
444 IF (j == 4) k = 6
445 IF (j == 5) k = 7
446 IF (j == 6) k = 8
447 inod = ixs(k,i+nft)
448
449 nelen(inod) = nelen(inod) + 1
450
452
454
455 IF ((
tagnod(inod,3) /= 0).AND.(
tagnod(inod,3) /= imat))
THEN
456 CALL ancmsg(msgid=1656,msgtype=msgerror,
457 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=
tagnod(inod,3))
458 ENDIF
459
461
462 volnod(i+nft) = one_over_6*vol(i)
463 ENDDO
464 ENDDO
465
466 ELSEIF (isolnod == 8) THEN
467
468 DO i = 1,nel
469
470 islnod(i+nft) = 0
471 solnod(1:8,i+nft) = 0
472
473 DO j=1,8
474 node_id(j) = ixs(1+j,i+nft)
475 ENDDO
476
478 bool(1:8) = .false.
479 bool(idxnd(1)) = .true.
480 DO j=2,8
481 IF (node_id(j) /= node_id(j-1)) THEN
482 bool(idxnd(j))=.true.
483 ENDIF
484 ENDDO
485
486 DO j = 1,8
487 IF (bool(j)) THEN
488 islnod(i+nft) = islnod(i+nft) + 1
489 solnod(islnod(i+nft),i+nft) = ixs(1+j,i+nft)
490 ENDIF
491 ENDDO
492 IF (islnod(i+nft) < 8) THEN
494 . msgtype=msgerror,
495 . anmode=aninfo_blind_1,
496 . i1=ixs(11,i+nft),
497 . i2=ipm(1,imat),
498 . prmod=msg_cumu)
499 ENDIF
500
501 DO j = 1,islnod(i+nft)
502
503 inod = solnod(j,i+nft)
504
505 nelen(inod) = nelen(inod) + 1
506
508
509 IF (igtyp == 20 .OR. igtyp == 21) THEN
511 ELSE
513 ENDIF
514
515 IF ((
tagnod(inod,3) /= 0).AND.(
tagnod(inod,3) /= imat))
THEN
516 CALL ancmsg(msgid=1656,msgtype=msgerror,
517 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=
tagnod(inod,3))
518 ENDIF
519
521
522 volnod(i+nft) = (one/islnod(i+nft))*vol(i)
523 ENDDO
524 ENDDO
525 ELSE
526
527 CALL ancmsg(msgid=1659,msgtype=msgerror,
528 . anmode=aninfo_blind)
529 ENDIF
530
531 ELSEIF (ity == 3) THEN
532
533 IF ((igtyp /= 1).AND.(igtyp /= 9)) THEN
534 CALL ancmsg(msgid=1662,msgtype=msgerror,
535 . anmode=aninfo_blind,i1=igtyp)
536 ENDIF
537
538 ideb = numels
539
540 DO k = 1,nel
541 index(ideb+numelc_nl+k) = k + nft
542 itri(ideb+k+nft) = ixc(7,k+nft)
543 ENDDO
544
545 numelc_nl = numelc_nl + nel
546
547 nptt = iparg(6,ng)
548
549 imat = ixc(1,1+nft)
550
551 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
552
553 DO i = 1,nel
554
555 DO j = 1,4
556
557 k = j + 1
558 inod = ixc(k,i+nft)
559
560 nelen(inod) = nelen(inod) + 1
561
563
564 IF ((
tagnod(inod,2) /= 0).AND.(
tagnod(inod,2) /= nptt))
THEN
565 CALL ancmsg(msgid=1657,msgtype=msgerror,
566 . anmode=aninfo_blind_1,i1=inod,i2=nptt,i3=
tagnod(inod,2))
567 ENDIF
568
570 ! If already written and different => error
571 IF ((
tagnod(inod,3) /= 0).AND.(
tagnod(inod,3) /= imat))
THEN
572 CALL ancmsg(msgid=1656,msgtype=msgerror,
573 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=
tagnod(inod,3))
574 ENDIF
575
577
578 volnod(ideb+i+nft) = fourth *
area(nft+i) * thck(i)
579 ENDDO
580 ENDDO
581
582 ELSEIF (ity == 7) THEN
583
584 IF ((igtyp /= 1).AND.(igtyp /= 9)) THEN
585 CALL ancmsg(msgid=1662,msgtype=msgerror,
586 . anmode=aninfo_blind,i1=igtyp)
587 ENDIF
588
589 ideb = numels+numelc
590
591 DO k = 1,nel
592 index(ideb+numeltg_nl+k) = k + nft
593 itri(ideb+k+nft) = ixtg(6,k+nft)
594 ENDDO
595
596 numeltg_nl = numeltg_nl + nel
597
598 nptt = iparg(6,ng)
599
600 imat = ixtg(1,1+nft)
601
602 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
603
604 DO i = 1,nel
605
606 DO j = 1,3
607
608 k = j + 1
609 inod = ixtg(k,i+nft)
610
611 nelen(inod) = nelen(inod) + 1
612
614 ! If already written and different => error
615 IF ((
tagnod(inod,2) /= zero).AND.(
tagnod(inod,2) /= nptt))
THEN
616 CALL ancmsg(msgid=1657,msgtype=msgerror,
617 . anmode=aninfo_blind_1,i1=inod,i2=nptt,i3=
tagnod(inod,2))
618 ENDIF
619
621
622 IF ((
tagnod(inod,3) /= zero).AND.(
tagnod(inod,3) /= imat))
THEN
623 CALL ancmsg(msgid=1656,msgtype=msgerror,
624 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=
tagnod(inod,3))
625 ENDIF
626
628
629 volnod(ideb+i+nft) = third *
area(numelc+nft+i) * thck(i)
630 ENDDO
631 ENDDO
632
633 ELSE
634 CALL ancmsg(msgid=1658,msgtype=msgerror,
635 . anmode=aninfo_blind,i1=ity)
636 ENDIF
637 ENDIF
638 ENDDO
639
640
642 . msgtype=msgerror,
643 . anmode=aninfo_blind_1,
644 . prmod=msg_print)
645
646
647 dtmini_ams = zero
648 dtmini_cst_ams = zero
649 filnam = rootnam(1:rootlen)//'_0001.rad'
650 LEN_TMP_NAME = INFILE_NAME_LEN+ROOTLEN+9
651 TMP_NAME = INFILE_NAME(1:INFILE_NAME_LEN)//FILNAM(1:ROOTLEN+9)
652 INQUIRE(FILE = TMP_NAME,EXIST = ENG_FILE)
653 IF (ENG_FILE) THEN
654 ! Opening the engine file
655 OPEN(UNIT=71,FILE=TMP_NAME(1:LEN_TMP_NAME),
656 . ACCESS='sequential',STATUS='old',IOSTAT=IO_ERR1)
657 ! Reading keywords
658 10 READ(71,'(a)',END=20) keya
659
660 IF(keya(1:7)=='/DT/AMS') THEN
661 30 READ(71,'(A)') keya
662 IF ((keya(1:1)=='#').OR.(keya(1:1)=='$')) THEN
663 GOTO 30
664 ELSE
665 backspace(71)
666 ENDIF
667 READ(71,*) dtsca_ams,dtmini_ams
668 IF (dtsca_ams == zero) dtsca_ams = zep9
669 ENDIF
670
671 IF(keya(1:11)=='/DT/CST_AMS') THEN
672 40 READ(71,'(A)') keya
673 IF ((keya(1:1)=='#').OR.(keya(1:1)=='$')) THEN
674 GOTO 40
675 ELSE
676 backspace(71)
677 ENDIF
678 READ(71,*) dtsca_cst_ams,dtmini_cst_ams
679 IF (dtsca_cst_ams == zero) dtsca_cst_ams = zep9
680 ENDIF
681
682 GOTO 10
683 20 CONTINUE
684
685 CLOSE(71)
686 ELSE
687
689 . msgtype=msgwarning,
690 . anmode=aninfo_blind_2,
691 . c1=rootnam(1:rootlen)//'_0001.rad')
692 ENDIF
693 ! Maximum of the minimal timesteps
694 DTMINI = MAX(DTMINI_AMS,DTMINI_CST_AMS)
695
696 ! Data on non-local nodes
697 NNOD = 0 ! Total number of non-local nodes
698 L_NLOC = 0 ! Length of the non-local vectors
699 INDX(1:NUMNOD) = 0 ! Index of non-local nodes
700 NDDL(1:NUMNOD) = 0 ! Number of additional d.o.fs for non-local nodes
701 POSI(1:NUMNOD+1) = 0 ! Position of the first degree of freedom for non-local nodes
702 NMAT(1:NUMNOD) = 0 ! Material of the non-local nodes
703 IDXI(1:NUMNOD) = 0 ! Inversed of the index table
704 DO I=1,NUMNOD
705 IF (TAGNOD(I,1) == 1) THEN
706 NNOD = NNOD + 1
707 INDX(NNOD) = I
708 NDDL(NNOD) = TAGNOD(I,2)
709 NMAT(NNOD) = TAGNOD(I,3)
710 POSI(NNOD) = L_NLOC + 1
711 IDXI(I) = NNOD
712 L_NLOC = L_NLOC + TAGNOD(I,2)
713 ENDIF
714 ENDDO
715 POSI(NNOD + 1) = L_NLOC + 1 ! Last value of the position
716
717 ! Sorting tables
718 ! -> Sorting solid elements
719.AND. IF ((NUMELS>0)(NUMELS_NL>0)) CALL QUICKSORT_I2(ITRI, INDEX, 1, NUMELS_NL)
720 ! -> Sorting shell elements
721.AND. IF ((NUMELC>0)(NUMELC_NL>0)) CALL QUICKSORT_I2(ITRI, INDEX, NUMELS+1, NUMELS+NUMELC_NL)
722 ! -> Sorting triangle elements
723.AND. IF ((NUMELTG>0)(NUMELTG_NL>0)) CALL QUICKSORT_I2(ITRI, INDEX, NUMELS+NUMELC+1, NUMELS+NUMELC+NUMELTG_NL)
724
725 ! Sorting table for PARITH/ON nodal volume computation
726 ALLOCATE(IADDN(NNOD))
727 IADDN(1:NNOD) = 0
728 POSN = 0
729 ! -> Address of the first element attached to the node
730 DO I = 1,NUMNOD
731 IF (TAGNOD(I,1) == 1) THEN
732 N = IDXI(I)
733 IADDN(N) = POSN + 1
734 POSN = POSN + NELEN(I)
735 ENDIF
736 ENDDO
737 ! -> Size of the element connectivity table
738 NELEN_MAX = SUM(NELEN(1:NUMNOD))
739 ALLOCATE(IDELEM(NELEN_MAX))
740 IDELEM(1:NELEN_MAX) = 0
741 ! -> Reshape the counter table of attached elements
742 IF (ALLOCATED(NELEN)) DEALLOCATE(NELEN)
743 ALLOCATE(NELEN(NNOD))
744 NELEN(1:NNOD) = 0
745
746 ! Assembling the volume per node always in the same order
747 ! and automatic computation of the non-local density, and the non-local damping
748 DO J = 1, NUMELS_NL+NUMELC_NL+NUMELTG_NL
749 ! Solid elements
750 IF (J<=NUMELS_NL) THEN
751 ! Number of the element
752 I = INDEX(J)
753 ! Material number
754 IMAT = IXS(1,I)
755 ! Soundspeed
756 SHEAR = MATPARAM(IMAT)%SHEAR
757 BULK = MATPARAM(IMAT)%BULK
758 RHO = MATPARAM(IMAT)%RHO0
759 SSP = SQRT((BULK + FOUR_OVER_3*SHEAR)/RHO)
760 ! Element characteristic length
761 LE_MIN = (VOLU(I))**THIRD
762 IF (TAGTET(I)>0) THEN
763 ! Loop over element nodes
764 DO K = 1,4
765 IF (K == 1) N = IDXI(IXS(2,I))
766 IF (K == 2) N = IDXI(IXS(4,I))
767 IF (K == 3) N = IDXI(IXS(7,I))
768 IF (K == 4) N = IDXI(IXS(6,I))
769 ! Update the number of elements attached to the node
770 NELEN(N) = NELEN(N) + 1
771 ! Save the corresponding element internal number
772 IDELEM(IADDN(N)+NELEN(N)-1) = I
773 ENDDO
774 ELSEIF (TAGPENT(I)>0) THEN
775 ! Loop over element nodes
776 DO K = 1,6
777 N = IDXI(IXS(K+1,I))
778 IF (K == 4) N = IDXI(IXS(6,I))
779 IF (K == 5) N = IDXI(IXS(7,I))
780 IF (K == 6) N = IDXI(IXS(8,I))
781 ! Update the number of elements attached to the node
782 NELEN(N) = NELEN(N) + 1
783 ! Save the corresponding element internal number
784 IDELEM(IADDN(N)+NELEN(N)-1) = I
785 ENDDO
786 ELSE
787 ! Loop over element nodes
788 DO K = 1,ISLNOD(I)
789 N = IDXI(SOLNOD(K,I))
790 ! Update the number of elements attached to the node
791 NELEN(N) = NELEN(N) + 1
792 ! Save the corresponding element internal number
793 IDELEM(IADDN(N)+NELEN(N)-1) = I
794 ENDDO
795 ENDIF
796 ! Shell elements
797 ELSEIF (J<=NUMELS_NL+NUMELC_NL) THEN
798 ! Number of the element
799 I = INDEX(NUMELS+J-NUMELS_NL)
800 ! Loop over nodes of the element
801 DO K = 1,4
802 N = IDXI(IXC(K+1,I))
803 ! Update the number of elements attached to the node
804 NELEN(N) = NELEN(N) + 1
805 ! Save the corresponding element internal number
806 IDELEM(IADDN(N)+NELEN(N)-1) = I
807 ENDDO
808 ! Material number
809 IMAT = IXC(1,I)
810 ! Soundspeed
811 YOUNG = MATPARAM(IMAT)%YOUNG
812 NU = MATPARAM(IMAT)%NU
813 RHO = MATPARAM(IMAT)%RHO0
814 SSP = SQRT((YOUNG/(ONE - NU**2))/RHO)
815 ! Element characteristic length
816 LE_MIN = SQRT(AREA(I))
817 ! Triangle elements
818 ELSEIF (J<=NUMELS_NL+NUMELC_NL+NUMELTG_NL) THEN
819 ! Number of the element
820 I = INDEX(NUMELS+NUMELC+J-NUMELS_NL-NUMELC_NL)
821 ! Loop over nodes of the element
822 DO K = 1,3
823 N = IDXI(IXTG(K+1,I))
824 ! Update the number of elements attached to the node
825 NELEN(N) = NELEN(N) + 1
826 ! Save the corresponding element internal number
827 IDELEM(IADDN(N)+NELEN(N)-1) = I
828 ENDDO
829 ! Material number
830 IMAT = IXTG(1,I)
831 ! Soundspeed
832 YOUNG = MATPARAM(IMAT)%YOUNG
833 NU = MATPARAM(IMAT)%NU
834 RHO = MATPARAM(IMAT)%RHO0
835 SSP = SQRT((YOUNG/(ONE - NU**2))/RHO)
836 ! Element characteristic length
837 LE_MIN = SQRT((FOUR/SQRT(THREE))*AREA(NUMELC + I))
838 ENDIF
839 ! Recovering the non-local internal length
840 LEN = NLOC_DMG%LEN(IMAT)
841 ! Computing the theoretical maximal length
842 LE_MAX = NLOC_DMG%LE_MAX(IMAT)
843 IF (LE_MAX == ZERO) THEN
844 NLOC_DMG%LE_MAX(IMAT) = LE_MIN
845 LE_MAX = LE_MIN
846 ENDIF
847 ! Computation of the minimal timestep
848 DTMIN = MAX(LE_MAX/SSP,DTMINI)
849 ! Computation of the non-local density
850 DENS = CSTA*(((LEN/MAX(LE_MAX,EM20))**2 + (ONE/TWELVE))*(DTMIN**2))
851 IF (LE_MIN > LE_MAX) THEN
852 WARN_LENGHT(IMAT,1) = ONE
853 WARN_LENGHT(IMAT,2) = LE_MAX
854 WARN_LENGHT(IMAT,3) = LE_MIN
855 ENDIF
856 ! Computation of non-local damping
857.OR. IF ((DENS < NLOC_DMG%DENS(IMAT))(NLOC_DMG%DENS(IMAT) == ZERO)) THEN
858 ! Computation of the damping parameter (homogeneous to a time value)
859 DAMP = (TWO*ETA/LE_MAX)*SQRT(DENS*((LEN**2)*(PI**2) + LE_MAX**2))
860 ! Saving non-local parameters (storing the maximal value)
861 NLOC_DMG%DENS(IMAT) = MAX(DENS,ZERO)
862 NLOC_DMG%DAMP(IMAT) = MAX(DAMP,ZERO)
863 ENDIF
864 ! Computation of the initial non-local sound-speed
865 SSPNL = SQRT((LEN**2 + (LE_MAX**2)/PI**2)/DENS)
866.OR. IF ((SSPNL < NLOC_DMG%SSPNL(IMAT))(NLOC_DMG%SSPNL(IMAT) == ZERO)) THEN
867 NLOC_DMG%SSPNL(IMAT) = MAX(SSPNL,ZERO)
868 ENDIF
869 ENDDO
870
871 ! Parith/on assembly of the nodal volume
872 ALLOCATE(VOLN(NNOD))
873 VOLN(1:NNOD) = ZERO
874 ALLOCATE(ITRIN(MAXVAL(NELEN(1:NNOD))))
875 ALLOCATE(VOLSORT(MAXVAL(NELEN(1:NNOD))))
876 ! Loop over non-local nodes
877 DO N = 1,NNOD
878 ! Copy element nodal volume contribution of each attached elements
879 VOLSORT(1:NELEN(N)) = VOLNOD(IDELEM(IADDN(N):IADDN(N)+NELEN(N)-1))
880 ! Sort by increasing volume value
881 CALL MYQSORT(NELEN(N),VOLSORT(1:NELEN(N)),ITRIN(1:NELEN(N)),ERROR)
882 ! Loop over attached elements
883 DO K = 1, NELEN(N)
884 ! Add the sorted element nodal volume contribution
885 VOLN(N) = VOLN(N) + VOLSORT(K)
886 ENDDO
887 ENDDO
888
889 ! Checking non-local length consistency with mesh size
890 DO I = 1, MATSIZE
891 IF (WARN_LENGHT(I,1) > ZERO) THEN
892 CALL ANCMSG(MSGID=1812,MSGTYPE=MSGWARNING,
893 . ANMODE=ANINFO_BLIND_1,I1=IPM(1,I),R1=NLOC_DMG%LEN(I),
894 . R2=WARN_LENGHT(I,2),R3=WARN_LENGHT(I,3))
895 ENDIF
896 ENDDO
897
898 ! Printing out non-local parameters
899 WRITE(IOUT,1800)
900 DO I = 1, MATSIZE
901 IF (NLOC_DMG%DENS(I) > ZERO) THEN
902 WRITE(IOUT,1900) IPM(1,I),NLOC_DMG%LEN(I),NLOC_DMG%LE_MAX(I),NLOC_DMG%DENS(I),NLOC_DMG%DAMP(I)
903 ENDIF
904 ENDDO
905
906 ! Maximal number of additional d.o.fs
907 NDDMAX = MAXVAL(NDDL(1:NNOD))
908
909 ! Saving non-local parameters
910 NLOC_DMG%NNOD = NNOD
911 NLOC_DMG%L_NLOC = L_NLOC
912 NLOC_DMG%NUMELS_NL = NUMELS_NL
913 NLOC_DMG%NUMELC_NL = NUMELC_NL
914 NLOC_DMG%NUMELTG_NL = NUMELTG_NL
915 NLOC_DMG%NDDMAX = NDDMAX
916
917 ! Allocation of non-local tables
918 CALL MY_ALLOC(NLOC_DMG%INDX,NNOD)
919 CALL MY_ALLOC(NLOC_DMG%POSI,NNOD+1)
920 CALL MY_ALLOC(NLOC_DMG%IDXI,NUMNOD)
921 CALL MY_ALLOC(NLOC_DMG%MASS,L_NLOC)
922 CALL MY_ALLOC(NLOC_DMG%MASS0,L_NLOC)
923 CALL MY_ALLOC(NLOC_DMG%VNL,L_NLOC)
924 CALL MY_ALLOC(NLOC_DMG%VNL_OLD,L_NLOC)
925 CALL MY_ALLOC(NLOC_DMG%DNL,L_NLOC)
926 CALL MY_ALLOC(NLOC_DMG%UNL,L_NLOC)
927.NOT. IF (ALLOCATED(NLOC_DMG%STIFNL)) ALLOCATE(NLOC_DMG%STIFNL(L_NLOC,1))
928.NOT. IF (ALLOCATED(NLOC_DMG%FNL)) ALLOCATE(NLOC_DMG%FNL(L_NLOC,1))
929.NOT. IF (ALLOCATED(NLOC_DMG%FSKY)) ALLOCATE(NLOC_DMG%FSKY(0,0))
930.NOT. IF (ALLOCATED(NLOC_DMG%STSKY)) ALLOCATE(NLOC_DMG%STSKY(0,0))
931.NOT. IF (ALLOCATED(NLOC_DMG%IAD_SIZE)) ALLOCATE(NLOC_DMG%IAD_SIZE(0))
932.NOT. IF (ALLOCATED(NLOC_DMG%IAD_ELEM)) ALLOCATE(NLOC_DMG%IAD_ELEM(0))
933.NOT. IF (ALLOCATED(NLOC_DMG%FR_ELEM)) ALLOCATE(NLOC_DMG%FR_ELEM(0))
934
935 ! Initializing non-local tables
936 NLOC_DMG%INDX(1:NNOD) = INDX(1:NNOD)
937 NLOC_DMG%POSI(1:NNOD+1) = POSI(1:NNOD+1)
938 NLOC_DMG%IDXI(1:NUMNOD) = IDXI(1:NUMNOD)
939 NLOC_DMG%FNL(1:L_NLOC,1) = ZERO
940 NLOC_DMG%VNL(1:L_NLOC) = ZERO
941 NLOC_DMG%VNL_OLD(1:L_NLOC) = ZERO
942 NLOC_DMG%DNL(1:L_NLOC) = ZERO
943 NLOC_DMG%UNL(1:L_NLOC) = ZERO
944 NLOC_DMG%STIFNL(1:L_NLOC,1) = ZERO
945
946 ! Computing non-local masses
947 DO I=1,NNOD
948 NDD = NDDL(I)
949 POS = POSI(I)
950 DENS = NLOC_DMG%DENS(NMAT(I))
951 DO J = POS,POS+NDD-1
952 ! For brick elements
953 IF (ITY == 1) THEN
954 IF (NDD > 1) THEN
955 NLOC_DMG%MASS(J) = HALF*W_GAUSS(J-POS+1,NDD)*VOLN(I)*DENS
956 NLOC_DMG%MASS0(J) = HALF*W_GAUSS(J-POS+1,NDD)*VOLN(I)*DENS
957 ELSE
958 NLOC_DMG%MASS(J) = VOLN(I)*DENS
959 NLOC_DMG%MASS0(J) = VOLN(I)*DENS
960 ENDIF
961 ! For shell and triangle elements
962.OR. ELSEIF ((ITY == 3)(ITY == 7)) THEN
963 NLOC_DMG%MASS(J) = WF1(J-POS+1,NDD)*VOLN(I)*DENS
964 NLOC_DMG%MASS0(J) = WF1(J-POS+1,NDD)*VOLN(I)*DENS
965 ENDIF
966 ENDDO
967 ENDDO
968
969 ! Computing non-local masses in the thickness for shell elements only
970 DO NG=1,NGROUP
971 ! Non-local flag
972 ILOC = IPARG(78,NG)
973 ! Type of elements
974 ITY = IPARG(5,NG)
975 ! First element position
976 NFT = IPARG(3,NG)
977 ! If the elements are non-local and are shells or triangles
978.AND..OR. IF ((ILOC > 0)((ITY == 3)(ITY == 7))) THEN
979 ! Number of the material
980 IF (ITY == 3) THEN
981 IMAT = IXC(1,1+NFT)
982 NDEPAR = 0
983 ELSEIF (ITY == 7) THEN
984 IMAT = IXTG(1,1+NFT)
985 NDEPAR = NUMELC
986 ENDIF
987 ! Non-local density
988 DENS = NLOC_DMG%DENS(IMAT)
989 ! Number of the elements inside the group
990 NEL = IPARG(2,NG)
991 ! Number of integration points in the R direction
992 NPTR = ELBUF_TAB(NG)%NPTR
993 ! Number of integration points in the S direction
994 NPTS = ELBUF_TAB(NG)%NPTS
995 ! Weight of integration in the plane of the shell
996 WS = ONE/(NPTS*NPTR)
997 ! Number of integration points in the shell thickness
998 NPTT = IPARG(6,NG)
999 ! Thickness of the shells
1000 THCK => ELBUF_TAB(NG)%GBUF%THK(1:NEL)
1001 ! Non-local in the thickness only if NPTT>1
1002 IF (NPTT>1) THEN
1003 ! Loop over integration points in the shell surface
1004 DO IR = 1, NPTR
1005 DO IS = 1, NPTS
1006 BUFNL => ELBUF_TAB(NG)%NLOC(IR,IS)
1007 MASSTH => BUFNL%MASSTH
1008 ! Loop over integration points in the shell thickness
1009 DO K = 1, NPTT
1010.AND. IF ((NPTT==2)(K==2)) THEN
1011 NTH1 = (Z01(K,NPTT) - ZN1(K,NPTT))/
1012 . (ZN1(K-1,NPTT) - ZN1(K,NPTT))
1013 NTH2 = (Z01(K,NPTT) - ZN1(K-1,NPTT))/
1014 . (ZN1(K,NPTT) - ZN1(K-1,NPTT))
1015 ELSE
1016 NTH1 = (Z01(K,NPTT) - ZN1(K+1,NPTT))/
1017 . (ZN1(K,NPTT) - ZN1(K+1,NPTT))
1018 NTH2 = (Z01(K,NPTT) - ZN1(K,NPTT))/
1019 . (ZN1(K+1,NPTT) - ZN1(K,NPTT))
1020 ENDIF
1021 ! Loop over elements
1022 DO I=1,NEL
1023.AND. IF ((NPTT==2)(K==2)) THEN
1024 MASSTH(I,K-1) = MASSTH(I,K-1) +
1025 . (NTH1**2 + NTH1*NTH2)*DENS*AREA(NDEPAR+NFT+I)*THCK(I)*WS*WF1(K,NPTT)
1026 MASSTH(I,K) = MASSTH(I,K) +
1027 . (NTH2**2 + NTH1*NTH2)*DENS*AREA(NDEPAR+NFT+I)*THCK(I)*WS*WF1(K,NPTT)
1028 ELSE
1029 MASSTH(I,K) = MASSTH(I,K) +
1030 . (NTH1**2 + NTH1*NTH2)*DENS*AREA(NDEPAR+NFT+I)*THCK(I)*WS*WF1(K,NPTT)
1031 MASSTH(I,K+1) = MASSTH(I,K+1) +
1032 . (NTH2**2 + NTH1*NTH2)*DENS*AREA(NDEPAR+NFT+I)*THCK(I)*WS*WF1(K,NPTT)
1033 ENDIF
1034 ENDDO
1035 ENDDO
1036 ENDDO
1037 ENDDO
1038 ENDIF
1039.AND..AND. ELSEIF ((ILOC > 0)((ITY == 1)(ELBUF_TAB(NG)%NLAY > 1))) THEN
1040 ! Number of the material
1041 IMAT = IXS(1,1+NFT)
1042 ! Non-local density
1043 DENS = NLOC_DMG%DENS(IMAT)
1044 ! Number of the elements inside the group
1045 NEL = IPARG(2,NG)
1046 ! Number of integration points in the R direction
1047 NPTR = ELBUF_TAB(NG)%NPTR
1048 ! Number of integration points in the S direction
1049 NPTS = ELBUF_TAB(NG)%NPTS
1050 ! Number of integration points in the shell thickness
1051 NPTT = ELBUF_TAB(NG)%NLAY
1052 ! Volume of the element
1053 VOL => ELBUF_TAB(NG)%GBUF%VOL(1:NEL)
1054 ! Non-local in the thickness only if NPTT>1
1055 ! -> Loop over integration points in the shell surface
1056 DO IR = 1, NPTR
1057 DO IS = 1, NPTS
1058 BUFNLTS => ELBUF_TAB(NG)%NLOCTS(IR,IS)
1059 MASSTH => BUFNLTS%MASSTH
1060 ! Loop over integration points in the shell thickness
1061 DO K = 1, NPTT
1062 NTH1 = (A_GAUSS(K,NPTT) - Z_GAUSS(K+1,NPTT))/
1063 . (Z_GAUSS(K,NPTT) - Z_GAUSS(K+1,NPTT))
1064 NTH2 = (A_GAUSS(K,NPTT) - Z_GAUSS(K,NPTT))/
1065 . (Z_GAUSS(K+1,NPTT) - Z_GAUSS(K,NPTT))
1066 ! Loop over elements
1067 DO I=1,NEL
1068 MASSTH(I,K) = MASSTH(I,K) +
1069 . (NTH1**2 + NTH1*NTH2)*DENS*VOL(I)*HALF*W_GAUSS(K,NPTT)
1070 . *HALF*W_GAUSS(IR,NPTR)*HALF*W_GAUSS(IS,NPTS)
1071 MASSTH(I,K+1) = MASSTH(I,K+1) +
1072 . (NTH2**2 + NTH1*NTH2)*DENS*VOL(I)*HALF*W_GAUSS(K,NPTT)
1073 . *HALF*W_GAUSS(IR,NPTR)*HALF*W_GAUSS(IS,NPTS)
1074 ENDDO
1075 ENDDO
1076 ENDDO
1077 ENDDO
1078 ENDIF
1079 ENDDO
1080
1081 ! Initialization of non-local fields and variables
1082 ! IF (ISIGI /= 0) THEN
1083 ! WRITE(ISTDO,'(a)') ' .. non-local fields initialization'
1084 ! CALL NLOCAL_INIT_STA(ELBUF_TAB,NLOC_DMG ,IPARG ,IXC ,
1085 ! . IXS ,IXTG ,AREA ,X ,
1086 ! . XREFS ,XREFC ,XREFTG ,IPM ,
1087 ! . BUFMAT )
1088 ! ENDIF
1089
1090 ENDIF
1091
1092 ! Tables deallocation
1093 IF (ALLOCATED(TAGNOD)) DEALLOCATE(TAGNOD)
1094 IF (ALLOCATED(INDX)) DEALLOCATE(INDX)
1095 IF (ALLOCATED(IDXI)) DEALLOCATE(IDXI)
1096 IF (ALLOCATED(NDDL)) DEALLOCATE(NDDL)
1097 IF (ALLOCATED(NMAT)) DEALLOCATE(NMAT)
1098 IF (ALLOCATED(POSI)) DEALLOCATE(POSI)
1099 IF (ALLOCATED(INDEX)) DEALLOCATE(INDEX)
1100 IF (ALLOCATED(ITRI)) DEALLOCATE(ITRI)
1101 IF (ALLOCATED(TAGTET)) DEALLOCATE(TAGTET)
1102 IF (ALLOCATED(TAGPENT)) DEALLOCATE(TAGPENT)
1103 IF (ALLOCATED(ISLNOD)) DEALLOCATE(ISLNOD)
1104 IF (ALLOCATED(SOLNOD)) DEALLOCATE(SOLNOD)
1105 IF (ALLOCATED(VOLN)) DEALLOCATE(VOLN)
1106 IF (ALLOCATED(VOLU)) DEALLOCATE(VOLU)
1107 IF (ALLOCATED(WARN_LENGHT)) DEALLOCATE(WARN_LENGHT)
1108 IF (ALLOCATED(NELEN)) DEALLOCATE(NELEN)
1109 IF (ALLOCATED(IDELEM)) DEALLOCATE(IDELEM)
1110 IF (ALLOCATED(IADDN)) DEALLOCATE(IADDN)
1111 IF (ALLOCATED(ITRIN)) DEALLOCATE(ITRIN)
1112 IF (ALLOCATED(VOLSORT)) DEALLOCATE(VOLSORT)
1113 IF (ALLOCATED(VOLNOD)) DEALLOCATE(VOLNOD)
1114
1115
1116 1800 FORMAT(
1117 . 5X,' non-local parameters '/
1118 . 5X,'----------------------'/
1119 . 5X,' material
id',5X, ' length
',5X, 'conv. le_max
',5X,' density
',5X,' damping'/
1120 . 5X,' ',5X, ' ',5X, ' ',5X,' (auto-set)',5X,' (auto-set)'/)
1121 1900 FORMAT(
1122 . 5X,I12,5X,ES12.4,5X,ES12.4,5X,ES12.4,5X,ES12.4/)
1123 RETURN
subroutine damping(nodft, nodlt, v, vr, a, ar, damp, ms, in, igrnod, dim, itask, weight, tagslv_rby, wfext)
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine myqsort_int(n, a, perm, error)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)