34 . IXS ,IXTG ,AREA ,DTELEM ,
35 . NUMEL ,IPM ,X ,XREFS ,
36 . XREFC ,XREFTG ,MATPARAM )
46 use element_mod ,
only : nixs,nixc,nixtg
50#include "implicit_f.inc"
64 INTEGER IPARG(NPARG,NGROUP),IXS(NIXS,*),IXC(NIXC,*),IXTG(NIXTG,*)
65 INTEGER IPM(NPROPMI,*)
66 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
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
78 CHARACTER FILNAM*109, KEYA*80, KEYA2*80
79 CHARACTER(len=2148) :: TMP_NAME
81 INTEGER I,J,K,NG,NEL,NFT,ITY,NPTT,ILOC,INOD,NNOD,NDEPAR,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 . ideb,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,
90 INTEGER,
DIMENSION(:,:),
POINTER :: IADS
92 . DENS, DTMIN, LEN, ,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
96 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
98 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
100 my_real ,
DIMENSION(:) ,
POINTER ::
102 TYPE(buf_nloc_),
POINTER :: BUFNL
103 TYPE(buf_nlocts_),
POINTER :: BUFNLTS
104 my_real,
DIMENSION(:,:),
POINTER ::
106 LOGICAL,
DIMENSION(8) :: BOOL
112 my_real,
PARAMETER :: eta = 0.2d0
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 /
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 /
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)
195 3 0.555555555555556,0.888888888888889,0.555555555555556,
198 4 0.347854845137454,0.652145154862546,0.652145154862546,
199 4 0.347854845137454,0. ,0. ,
201 5 0.236926885056189,0.478628670499366,0.568888888888889,
202 5 0.478628670499366,0.236926885056189,0. ,
204 6 0.171324492379170,0.360761573048139,0.467913934572691,
205 6 0.467913934572691,0.360761573048139,0.171324492379170,
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/
221 2 -.577350269189626,0.577350269189626,0. ,
224 3 -.774596669241483,0. ,0.774596669241483,
227 4 -.861136311594053,-.339981043584856,0.339981043584856,
228 4 0.861136311594053,0. ,0. ,
230 5 -.906179845938664,-.538469310105683,0. ,
231 5 0.538469310105683,0.906179845938664,0. ,
233 6 -.932469514203152,-.661209386466265,-.238619186083197,
234 6 0.238619186083197,0.661209386466265,0.932469514203152,
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/
255 3 -1. ,-.549193338482966,0.549193338482966,
259 4 -1. ,-.600558677589454,0. ,
260 4 0.600558677589454,1. ,0. ,
263 5 -1. ,-.812359691877328,-.264578928334038,
264 5 0.264578928334038,0.812359691877328,1. ,
267 6 -1. ,-.796839450334708,-.449914286274731,
268 6 0. ,0.449914286274731,0.796839450334708,
271 7 -1. ,-.898215824685518,-.584846546513270,
272 7 -.226843756241524,0.226843756241524,0.584846546513270,
273 7 0.898215824685518,1. ,0. ,
275 8 -1. ,-.878478166955581,-.661099443664978,
276 8 -.354483526205989,0. ,0.354483526205989,
277 8 0.661099443664978,0.878478166955581,1. ,
279 9 -1. ,-.936320479015252,-.735741735638020,
280 9 -.491001129763160,-.157505717044458,0.157505717044458,
281 9 0.491001129763160,0.735741735638020,0.936320479015252,
285 IF (nloc_dmg%IMOD == 0)
THEN
288 nloc_dmg%NUMELS_NL = 0
289 nloc_dmg%NUMELC_NL = 0
290 nloc_dmg%NUMELTG_NL = 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))
323 WRITE(istdo,
'(A)')
' .. NON-LOCAL STRUCTURE INITIALIZATION'
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) )
342 IF (nsubdom > 0)
THEN
348 CALL my_alloc(warn_lenght,matsize,3)
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
355 tagnod(1:numnod,1:3) = 0
357 tagpent(1:numels) = 0
363 warn_lenght(1:matsize,1:3) = zero
379 isolid = iparg(23,ng)
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)
388 isolnod = iparg(28,ng)
390 vol => elbuf_tab(ng)%GBUF%VOL(1:nel)
393 index(numels_nl+k) = k + nft
394 itri(k+nft) = ixs(11,k+nft)
398 numels_nl = numels_nl + nel
400 nptt = elbuf_tab(ng)%NLAY
404 IF (isolnod == 4)
THEN
418 nelen(inod) = nelen(inod) + 1
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))
429 tagnod(inod,3) = imat
431 volnod(i+nft) = fourth*vol(i)
435 ELSEIF (isolnod == 6)
THEN
449 nelen(inod) = nelen(inod)
453 tagnod(inod,2) = nptt
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))
460 tagnod(inod,3) = imat
462 volnod(i+nft) = one_over_6*vol(i)
466 ELSEIF (isolnod == 8)
THEN
471 solnod(1:8,i+nft) = 0
474 node_id(j) = ixs(1+j,i+nft)
479 bool(idxnd(1)) = .true.
481 IF (node_id(j) /= node_id(j-1))
THEN
482 bool(idxnd(j))=.true.
488 islnod(i+nft) = islnod(i+nft) + 1
489 solnod(islnod(i+nft),i+nft) = ixs(1+j,i+nft)
492 IF (islnod(i+nft) < 8)
THEN
495 . anmode=aninfo_blind_1,
501 DO j = 1,islnod(i+nft)
503 inod = solnod(j,i+nft)
505 nelen(inod) = nelen(inod) + 1
509 IF (igtyp == 20 .OR. igtyp == 21)
THEN
510 tagnod(inod,2) = nptt
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))
520 tagnod(inod,3) = imat
522 volnod(i+nft) = (one/islnod(i+nft))*vol(i)
527 CALL ancmsg(msgid=1659,msgtype=msgerror,
528 . anmode=aninfo_blind)
531 ELSEIF (ity == 3)
THEN
533 IF ((igtyp /= 1).AND.(igtyp /= 9))
THEN
534 CALL ancmsg(msgid=1662,msgtype=msgerror,
535 . anmode=aninfo_blind,i1=igtyp)
541 index(ideb+numelc_nl+k) = k + nft
542 itri(ideb+k+nft) = ixc(7,k+nft)
545 numelc_nl = numelc_nl + nel
551 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
560 nelen(inod) = nelen(inod) + 1
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))
569 tagnod(inod,2) = nptt
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))
576 tagnod(inod,3) = imat
578 volnod(ideb+i+nft) = fourth *
area(nft+i) * thck(i)
582 ELSEIF (ity == 7)
THEN
584 IF ((igtyp /= 1).AND.(igtyp /= 9))
THEN
585 CALL ancmsg(msgid=1662,msgtype=msgerror,
586 . anmode=aninfo_blind,i1=igtyp)
592 index(ideb+numeltg_nl+k) = k + nft
593 itri(ideb+k+nft) = ixtg(6,k+nft)
596 numeltg_nl = numeltg_nl + nel
602 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
611 nelen(inod) = nelen(inod) + 1
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))
620 tagnod(inod,2) = nptt
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))
627 tagnod(inod,3) = imat
629 volnod(ideb+i+nft) = third *
area(numelc+nft+i) * thck(i)
634 CALL ancmsg(msgid=1658,msgtype=msgerror,
635 . anmode=aninfo_blind,i1=ity)
643 . anmode=aninfo_blind_1,
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)
654 ! Opening the engine file
655 OPEN(UNIT=71,FILE=TMP_NAME(1:LEN_TMP_NAME),
656 . ACCESS='sequential
',STATUS='old
',IOSTAT=IO_ERR1)
658 10 READ(71,'(a)
',END=20) KEYA
660 IF(KEYA(1:7)=='/dt/ams
') THEN
661 30 READ(71,'(a)
') KEYA
662 IF ((KEYA(1:1)=='#').OR.(KEYA(1:1)=='$')) THEN
667 READ(71,*) dtsca_ams,dtmini_ams
668 IF (dtsca_ams == zero) dtsca_ams = zep9
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
678 READ(71,*) dtsca_cst_ams,dtmini_cst_ams
679 IF (dtsca_cst_ams == zero) dtsca_cst_ams = zep9
689 . msgtype=msgwarning,
690 . anmode=aninfo_blind_2,
691 . c1=rootnam(1:rootlen)//
'_0001.rad')
694 dtmini =
max(dtmini_ams,dtmini_cst_ams)
705 IF (tagnod(i,1) == 1)
THEN
708 nddl(nnod) = tagnod(i,2)
709 nmat(nnod) = tagnod(i,3)
710 posi(nnod) = l_nloc + 1
712 l_nloc = l_nloc + tagnod(i,2)
715 posi(nnod + 1) = l_nloc + 1
719 IF ((numels>0).AND.(numels_nl>0))
CALL quicksort_i2(itri, index, 1, numels_nl)
721 IF ((numelc>0).AND.(numelc_nl>0))
CALL quicksort_i2(itri, index, numels+1, numels+numelc_nl)
723 IF ((numeltg>0).AND.(numeltg_nl>0))
CALL quicksort_i2(itri, index, numels+numelc+1, numels+numelc+numeltg_nl
726 ALLOCATE(iaddn(nnod))
731 IF (tagnod(i,1) == 1)
THEN
734 posn = posn + nelen(i)
738 nelen_max = sum(nelen(1:numnod))
739 ALLOCATE(idelem(nelen_max))
740 idelem(1:nelen_max) = 0
742 IF (
ALLOCATED(nelen))
DEALLOCATE(nelen)
743 ALLOCATE(nelen(nnod))
748 DO j = 1, numels_nl+numelc_nl+numeltg_nl
750 IF (j<=numels_nl)
THEN
756 shear = matparam(imat)%SHEAR
757 bulk = matparam(imat)%BULK
758 rho = matparam(imat)%RHO0
759 ssp = sqrt((bulk + four_over_3*shear)/rho)
761 le_min = (volu(i))**third
762 IF (tagtet(i)>0)
THEN
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))
770 nelen(n) = nelen(n) + 1
772 idelem(iaddn(n)+nelen(n)-1) = i
774 ELSEIF (tagpent(i)>0)
THEN
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))
782 nelen(n) = nelen(n) + 1
784 idelem(iaddn(n)+nelen(n)-1) = i
789 n = idxi(solnod(k,i))
791 nelen(n) = nelen(n) + 1
793 idelem(iaddn(n)+nelen(n)-1) = i
797 ELSEIF (j<=numels_nl+numelc_nl)
THEN
799 i = index(numels+j-numels_nl)
804 nelen(n) = nelen(n) + 1
806 idelem(iaddn(n)+nelen(n)-1) = i
811 young = matparam(imat)%YOUNG
812 nu = matparam(imat)%NU
813 rho = matparam(imat)%RHO0
814 ssp = sqrt((young/(one - nu**2))/rho)
816 le_min = sqrt(
area(i))
818 ELSEIF (j<=numels_nl+numelc_nl+numeltg_nl)
THEN
820 i = index(numels+numelc+j-numels_nl-numelc_nl)
823 n = idxi(ixtg(k+1,i))
825 nelen(n) = nelen(n) + 1
827 idelem(iaddn(n)+nelen(n)-1) = i
832 young = matparam(imat)%YOUNG
833 nu = matparam(imat)%NU
834 rho = matparam(imat)%RHO0
835 ssp = sqrt((young/(one - nu**2))/rho)
837 le_min = sqrt((four/sqrt(three))*
area(numelc + i))
840 len = nloc_dmg%LEN(imat)
842 le_max = nloc_dmg%LE_MAX(imat)
843 IF (le_max == zero)
THEN
844 nloc_dmg%LE_MAX(imat) = le_min
848 dtmin =
max(le_max/ssp,dtmini)
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
857 IF ((dens < nloc_dmg%DENS(imat)).OR.(nloc_dmg%DENS(imat) == zero))
THEN
859 damp = (two*eta/le_max)*sqrt(dens*((len**2)*(pi**2) + le_max**2))
861 nloc_dmg%DENS(imat) =
max(dens,zero)
862 nloc_dmg%DAMP(imat) =
max(damp,zero)
865 sspnl = sqrt((len**2 + (le_max**2)/pi**2)/dens)
866 IF ((sspnl < nloc_dmg%SSPNL(imat)).OR.(nloc_dmg%SSPNL(imat) == zero))
THEN
867 nloc_dmg%SSPNL(imat) =
max(sspnl,zero)
874 ALLOCATE(itrin(maxval(nelen(1:nnod))))
875 ALLOCATE(volsort(maxval(nelen(1:nnod))))
879 volsort(1:nelen(n)) = volnod(idelem(iaddn(n):iaddn(n)+nelen(n)-1))
881 CALL myqsort(nelen(n),volsort(1:nelen(n)),itrin(1:nelen(n)),error)
885 voln(n) = voln(n) + volsort(k)
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))
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)
907 nddmax = maxval(nddl(1: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
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 IF (.NOT.
ALLOCATED(nloc_dmg%STIFNL))
ALLOCATE(nloc_dmg%STIFNL(l_nloc
928 IF (.NOT.
ALLOCATED(nloc_dmg%FNL))
ALLOCATE(nloc_dmg%FNL(l_nloc,1))
929 IF (.NOT.
ALLOCATED(nloc_dmg%FSKY))
ALLOCATE(nloc_dmg%FSKY(0,0))
930 IF (.NOT.
ALLOCATED(nloc_dmg%STSKY))
ALLOCATE(nloc_dmg%STSKY(0,0))
931 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_SIZE))
ALLOCATE(nloc_dmg%IAD_SIZE(0))
932 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_ELEM))
ALLOCATE(nloc_dmg%IAD_ELEM(0))
933 IF (.NOT.
ALLOCATED(nloc_dmg%FR_ELEM))
ALLOCATE(nloc_dmg%FR_ELEM(0))
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
950 dens = nloc_dmg%DENS(nmat(i))
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
958 nloc_dmg%MASS(j) = voln(i)*dens
959 nloc_dmg%MASS0(j) = voln(i)*dens
962 ELSEIF ((ity == 3).OR.(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
978 IF ((iloc > 0).AND.((ity == 3).OR.(ity == 7)))
THEN
983 ELSEIF (ity == 7)
THEN
988 dens = nloc_dmg%DENS(imat)
992 nptr = elbuf_tab(ng)%NPTR
994 npts = elbuf_tab(ng)%NPTS
1000 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
1006 bufnl => elbuf_tab(ng)%NLOC(ir,is)
1007 massth => bufnl%MASSTH
1010 IF ((nptt==2).AND.(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))
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))
1021 ! loop over elements
1023 IF ((nptt==2).AND.(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)
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)
1039 ELSEIF ((iloc > 0).AND.((ity == 1).AND.(elbuf_tab(ng)%NLAY > 1)))
THEN
1043 dens = nloc_dmg%DENS(imat)
1047 nptr = elbuf_tab(ng)%NPTR
1049 npts = elbuf_tab(ng)%NPTS
1051 nptt = elbuf_tab(ng)%NLAY
1053 vol => elbuf_tab(ng)%GBUF%VOL(1:nel)
1058 bufnlts => elbuf_tab(ng)%NLOCTS(ir,is)
1059 massth => bufnlts%MASSTH
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))
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
1073 . *half*w_gauss(ir,nptr)*half*w_gauss(is,npts)
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)
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)'/)
1122 . 5x,i12,5x,es12.4,5x,es12.4,5x,es12.4,5x,es12.4/)