34 . IXS ,IXTG ,AREA ,DTELEM ,
35 . NUMEL ,IPM ,X ,XREFS ,
36 . XREFC ,XREFTG ,BUFMAT ,PM )
48#include "implicit_f.inc"
62 INTEGER (NPARG,NGROUP),IXS(NIXS,*),IXC(NIXC,*),IXTG(NIXTG,*)
63 INTEGER IPM(NPROPMI,*)
64 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
65 TYPE (NLOCAL_STR_) ,
TARGET :: NLOC_DMG
67 .
DIMENSION(NUMELC+NUMELTG),
INTENT(IN) ::
area
69 .
DIMENSION(NUMEL),
INTENT(INOUT) :: dtelem
71 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*),bufmat(*),
77 CHARACTER FILNAM*109, KEYA*80, KEYA2*80
78 CHARACTER(len=2148) :: TMP_NAME
80 INTEGER I,J,K,NG,NEL,NFT,ITY,NPTT,ILOC,INOD,NNOD,NDEPAR,IMAT,
81 . l_nloc,pos,ndd,isolid,n,numels_nl,igtyp,numelc_nl,nddmax,
82 . numeltg_nl,nptr,npts,ir,is,isolnod,io_err1,len_tmp_name,
83 . ideb,iadbuf,matsize,error,nelen_max,posn
84 INTEGER,
DIMENSION(8) :: IDXND,
85 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: TAGNOD,SOLNOD
86 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDX,IDXI,NMAT,NDDL,
87 . posi,itri,index,tagtet,tagpent,islnod,nelen,itrin,idelem,
89 INTEGER,
DIMENSION(:,:),
POINTER :: IADS
91 . DENS, DTMIN, LEN, SSPNL,NTH1, NTH2,
92 . z01(11,11), wf1(11,11), zn1(12,11),damp,ws,le_min,
93 . dtsca_ams,dtsca_cst_ams,le_max,ssp,
94 . dtmini_ams,dtmini_cst_ams,dtmini
95 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
97 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
98 . voln, volu, volnod, volsort
99 my_real ,
DIMENSION(:) ,
POINTER ::
101 TYPE(buf_nloc_),
POINTER :: BUFNL
102 TYPE(buf_nlocts_),
POINTER :: BUFNLTS
103 my_real,
DIMENSION(:,:),
POINTER ::
105 LOGICAL,
DIMENSION(8) :: BOOL
111 my_real,
PARAMETER :: zeta = 0.2d0
115 my_real,
PARAMETER :: csta = 40.0d0
118 1 0. ,0. ,0. ,0. ,0. ,
119 1 0. ,0. ,0. ,0. ,0. ,0. ,
120 2 -.5 ,0.5 ,0. ,0. ,0. ,
121 2 0. ,0. ,0. ,0. ,0. ,0. ,
122 3 -.5 ,0. ,0.5 ,0. ,0. ,
123 3 0. ,0. ,0. ,0. ,0. ,0. ,
124 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
126 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
127 5 0. ,0. ,0. ,0. ,0. ,0. ,
128 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
129 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
130 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
131 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
132 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
133 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
134 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
135 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
136 a -.5 ,-.3888889,-.2777778,-.1666667,-.0555555,
137 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
138 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
139 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
142 1 1. ,0. ,0. ,0. ,0. ,
143 1 0. ,0. ,0. ,0. ,0. ,0. ,
144 2 0.5 ,0.5 ,0. ,0. ,0. ,
145 2 0. ,0. ,0. ,0. ,0. ,0. ,
146 3 0.25 ,0.5 ,0.25 ,0. ,0. ,
147 3 0. ,0. ,0. ,0. ,0. ,0. ,
148 4 0.1666667,0.3333333,0.3333333,0.1666667,0. ,
149 4 0. ,0. ,0. ,0. ,0. ,0. ,
150 5 0.125 ,0.25 ,0.25 ,0.25 ,0.125 ,
151 5 0. ,0. ,0. ,0. ,0. ,0. ,
152 6 0.1 ,0.2 ,0.2 ,0.2 ,0.2 ,
153 6 0.1 ,0. ,0. ,0. ,0. ,0. ,
154 7 0.0833333,0.1666667,0.1666667,0.1666667,0.1666667,
155 7 0.1666667,0.0833333,0. ,0. ,0. ,0. ,
156 8 0.0714286,0.1428571,0.1428571,0.1428571,0.1428571,
157 8 0.1428571,0.1428571,0.0714286,0. ,0. ,0. ,
158 9 0.0625 ,0.125 ,0.125 ,0.125
159 9 0.125 ,0.125 ,0.125 ,0.0625 ,0. ,0. ,
160 a 0.0555556,0.1111111,0.1111111,0.1111111,0.1111111,
161 a 0.1111111,0.1111111,0.1111111,0.1111111,0.0555556,0. ,
162 b 0.05 ,0.1 ,0.1 ,0.1 ,0.1 ,
163 b 0.1 ,0.1 ,0.1 ,0.1 ,0.1 ,0.05 /
166 1 0. ,0. ,0. ,0. ,0. ,0. ,
167 1 0. ,0. ,0. ,0. ,0. ,0. ,
168 2 -.5 ,0.5 ,0. ,0. ,0. ,0. ,
169 2 0. ,0. ,0. ,0. ,0. ,0. ,
170 3 -.5 ,-.25 ,0.25 ,0.5 ,0. ,0. ,
171 3 0. ,0. ,0. ,0. ,0. ,0. ,
172 4 -.5 ,-.3333333,0. ,0.3333333,0.5 ,0. ,
173 4 0. ,0. ,0. ,0. ,0. ,0. ,
174 5 -.5 ,-.375 ,-0.125 ,0.125 ,0.375 ,0.5 ,
175 5 0. ,0. ,0. ,0. ,0. ,0. ,
176 6 -.5 ,-.4 ,-.2 ,0.0 ,0.2 ,0.4 ,
177 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
178 7 -.5 ,-.4166667,-.25 ,-.0833333,0.0833333,0.25 ,
179 7 0.4166667,0.5 ,0. ,0. ,0. ,0. ,
180 8 -.5 ,-.4285715,-.2857143,-.1428572,0.0 ,0.1428572,
181 8 0.2857143,0.4285715,0.5 ,0. ,0. ,0. ,
182 9 -.5 ,-.4375 ,-.3125 ,-.1875 ,-.0625 ,0.0625 ,
183 9 0.1875 ,0.3125 ,0.4375 ,0.5 ,0. ,0. ,
184 a -.5 ,-.4444444,-.3333333,-.2222222,-.1111111,0. ,
185 a 0.1111111,0.2222222,0.3333333,0.4444444,0.5 ,0. ,
186 b -.5 ,-.45 ,-.35 ,-.25 ,-.15 ,-.05 ,
187 b 0.05 ,0.15 ,0.25 ,0.35 ,0.45 ,0.5 /
189 . w_gauss(9,9),a_gauss(9,9),z_gauss(10,9)
198 3 0.555555555555556,0.888888888888889,0.555555555555556,
201 4 0.347854845137454,0.652145154862546,0.652145154862546,
202 4 0.347854845137454,0. ,0. ,
204 5 0.236926885056189,0.478628670499366,0.5688
205 5 0.478628670499366,0.236926885056189,0. ,
207 6 0.171324492379170,0.360761573048139,0.467913934572691,
208 6 0.467913934572691,0.360761573048139,0.171324492379170,
210 7 0.129484966168870,0.279705391489277,0.381830050505119,
211 7 0.417959183673469,0.381830050505119,0.279705391489277,
212 7 0.129484966168870,0. ,0. ,
213 8 0.101228536290376,0.222381034453374,0.313706645877887,
214 8 0.362683783378362,0.362683783378362,0.313706645877887,
215 8 0.222381034453374,0.101228536290376,0. ,
216 9 0.081274388361574,0.180648160694857,0.260610696402935,
217 9 0.312347077040003,0.330239355001260,0.312347077040003,
218 9 0.260610696402935,0.180648160694857,0.081274388361574/
224 2 -.577350269189626,0.577350269189626,0. ,
227 3 -.774596669241483,0. ,0.774596669241483,
230 4 -.861136311594053,-.339981043584856,0.339981043584856,
231 4 0.861136311594053,0. ,0. ,
233 5 -.906179845938664,-.538469310105683,0. ,
234 5 0.538469310105683,0.906179845938664,0. ,
236 6 -.932469514203152,-.661209386466265,-.238619186083197,
237 6 0.238619186083197,0.661209386466265,0.932469514203152,
239 7 -.949107912342759,-.741531185599394,-.405845151377397,
240 7 0. ,0.405845151377397,0.741531185599394,
241 7 0.949107912342759,0. ,0. ,
242 8 -.960289856497536,-.796666477413627,-.525532409916329,
243 8 -.183434642495650,0.183434642495650,0.525532409916329,
244 8 0.796666477413627,0.960289856497536,0. ,
245 9 -.968160239507626,-.836031107326636,-.613371432700590,
246 9 -.324253423403809,0. ,0.324253423403809,
247 9 0.613371432700590,0.836031107326636,0.968160239507626/
258 3 -1. ,-.549193338482966,0.549193338482966,
262 4 -1. ,-.600558677589454,0. ,
263 4 0.600558677589454,1. ,0. ,
266 5 -1. ,-.812359691877328,-.264578928334038,
267 5 0.264578928334038,0.812359691877328,1. ,
270 6 -1. ,-.796839450334708,-.449914286274731,
271 6 0. ,0.449914286274731,0.796839450334708,
274 7 -1. ,-.898215824685518,-.584846546513270,
275 7 -.226843756241524,0.226843756241524,0.584846546513270,
276 7 0.898215824685518,1. ,0. ,
278 8 -1. ,-.878478166955581,-.661099443664978,
279 8 -.354483526205989,0. ,0.354483526205989,
280 8 0.661099443664978,0.878478166955581,1. ,
282 9 -1. ,-.936320479015252,-.735741735638020,
283 9 -.491001129763160,-.157505717044458,0.157505717044458,
284 9 0.491001129763160,0.735741735638020,0.936320479015252,
288 IF (nloc_dmg%IMOD == 0)
THEN
291 nloc_dmg%NUMELS_NL = 0
292 nloc_dmg%NUMELC_NL = 0
293 nloc_dmg%NUMELTG_NL = 0
295 IF (.NOT.
ALLOCATED(nloc_dmg%DENS))
ALLOCATE(nloc_dmg%DENS(0))
296 IF (.NOT.
ALLOCATED(nloc_dmg%DAMP))
ALLOCATE(nloc_dmg%DAMP(0))
297 IF (.NOT.
ALLOCATED(nloc_dmg%LEN))
ALLOCATE(nloc_dmg%LEN(0))
298 IF (.NOT.
ALLOCATED(nloc_dmg%LE_MAX))
ALLOCATE(nloc_dmg%LE_MAX(0))
299 IF (.NOT.
ALLOCATED(nloc_dmg%SSPNL))
ALLOCATE(nloc_dmg%SSPNL(0))
300 IF (.NOT.
ALLOCATED(nloc_dmg%INDX))
ALLOCATE(nloc_dmg%INDX(0))
301 IF (.NOT.
ALLOCATED(nloc_dmg%POSI))
ALLOCATE(nloc_dmg%POSI(0))
302 IF (.NOT.
ALLOCATED(nloc_dmg%IDXI))
ALLOCATE(nloc_dmg%IDXI(0))
303 IF (.NOT.
ALLOCATED(nloc_dmg%ADDCNE))
ALLOCATE(nloc_dmg%ADDCNE(0))
304 IF (.NOT.
ALLOCATED(nloc_dmg%CNE))
ALLOCATE(nloc_dmg%CNE(0))
305 IF (.NOT.
ALLOCATED(nloc_dmg%IADS))
ALLOCATE(nloc_dmg%IADS(0,0))
306 IF (.NOT.
ALLOCATED(nloc_dmg%IADC))
ALLOCATE(nloc_dmg%IADC(0,0))
307 IF (.NOT.
ALLOCATED(nloc_dmg%IADTG))
ALLOCATE(nloc_dmg%IADTG(0,0))
308 IF (.NOT.
ALLOCATED(nloc_dmg%MASS))
ALLOCATE(nloc_dmg%MASS(0))
309 IF (.NOT.
ALLOCATED(nloc_dmg%MASS0))
ALLOCATE(nloc_dmg%MASS0(0))
310 IF (.NOT.
ALLOCATED(nloc_dmg%FNL))
ALLOCATE(nloc_dmg%FNL(0,0))
311 IF (.NOT.
ALLOCATED(nloc_dmg%VNL))
ALLOCATE(nloc_dmg%VNL(0))
312 IF (.NOT.
ALLOCATED(nloc_dmg%VNL_OLD))
ALLOCATE(nloc_dmg%VNL_OLD(0))
313 IF (.NOT.
ALLOCATED(nloc_dmg%DNL))
ALLOCATE(nloc_dmg%DNL(0))
314 IF (.NOT.
ALLOCATED(nloc_dmg%UNL))
ALLOCATE(nloc_dmg%UNL(0))
315 IF (.NOT.
ALLOCATED(nloc_dmg%STIFNL))
ALLOCATE(nloc_dmg%STIFNL(0,0))
316 IF (.NOT.
ALLOCATED(nloc_dmg%FSKY))
ALLOCATE(nloc_dmg%FSKY(0,0))
317 IF (.NOT.
ALLOCATED(nloc_dmg%STSKY))
ALLOCATE(nloc_dmg%STSKY(0,0))
318 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_ELEM))
ALLOCATE(nloc_dmg%IAD_ELEM(0))
319 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_SIZE))
ALLOCATE(nloc_dmg%IAD_SIZE(0))
320 IF (.NOT.
ALLOCATED(nloc_dmg%FR_ELEM))
ALLOCATE(nloc_dmg%FR_ELEM(0))
326 WRITE(istdo,
'(A)')
' .. NON-LOCAL STRUCTURE INITIALIZATION'
329 ALLOCATE( tagnod(numnod,3) )
330 ALLOCATE( indx(numnod) )
331 ALLOCATE( idxi(numnod) )
332 ALLOCATE( nddl(numnod) )
333 ALLOCATE( nmat(numnod) )
334 ALLOCATE( posi(numnod+1) )
335 ALLOCATE( islnod(numels))
336 ALLOCATE( solnod(8,numels))
337 ALLOCATE( volu(numels+numelc+numeltg) )
338 ALLOCATE( volnod(numels+numelc+numeltg))
339 ALLOCATE( tagtet(numels) )
340 ALLOCATE( tagpent(numels))
341 ALLOCATE( nelen(numnod))
342 ALLOCATE( index(numels+numelc+numeltg) )
343 ALLOCATE( itri(numels+numelc+numeltg) )
345 IF (nsubdom > 0)
THEN
351 CALL my_alloc(warn_lenght,matsize,3)
354 volu(1:numels+numelc+numeltg) = zero
355 volnod(1:numels+numelc+numeltg) = zero
356 index(1:numels+numelc+numeltg) = 0
357 itri(1:numels+numelc+numeltg) = 0
358 tagnod(1:numnod,1:3) = 0
360 tagpent(1:numels) = 0
366 warn_lenght(1:matsize,1:3) = zero
382 isolid = iparg(23,ng)
386 IF ((igtyp /= 14).AND.(igtyp /= 6).AND.(igtyp /= 20).AND.(igtyp /= 21))
THEN
387 CALL ancmsg(msgid=1661,msgtype=msgerror,
388 . anmode=aninfo_blind,i1=igtyp)
391 isolnod = iparg(28,ng)
393 vol => elbuf_tab(ng)%GBUF%VOL(1:nel)
396 index(numels_nl+k) = k + nft
397 itri(k+nft) = ixs(11,k+nft)
401 numels_nl = numels_nl + nel
403 nptt = elbuf_tab(ng)%NLAY
407 IF (isolnod == 4)
THEN
421 nelen(inod) = nelen(inod) + 1
427 IF ((tagnod(inod,3) /= 0).AND.(tagnod(inod,3) /= imat))
THEN
428 CALL ancmsg(msgid=1656,msgtype=msgerror,
429 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=tagnod(inod,3))
432 tagnod(inod,3) = imat
434 volnod(i+nft) = fourth*vol(i)
438 ELSEIF (isolnod == 6)
THEN
452 nelen(inod) = nelen(inod) + 1
456 tagnod(inod,2) = nptt
458 IF ((tagnod(inod,3) /= 0).AND.(tagnod(inod,3) /= imat))
THEN
459 CALL ancmsg(msgid=1656,msgtype=msgerror,
460 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=tagnod(inod,3))
463 tagnod(inod,3) = imat
465 volnod(i+nft) = one_over_6*vol(i)
469 ELSEIF (isolnod == 8)
THEN
474 solnod(1:8,i+nft) = 0
477 node_id(j) = ixs(1+j,i+nft)
482 bool(idxnd(1)) = .true.
484 IF (node_id(j) /= node_id(j-1))
THEN
485 bool(idxnd(j))=.true.
491 islnod(i+nft) = islnod(i+nft) + 1
492 solnod(islnod(i+nft),i+nft) = ixs(1+j,i+nft)
496 DO j = 1,islnod(i+nft)
498 inod = solnod(j,i+nft)
500 nelen(inod) = nelen(inod) + 1
504 IF (igtyp == 20 .OR. igtyp == 21)
THEN
505 tagnod(inod,2) = nptt
510 IF ((tagnod(inod,3) /= 0).AND.(tagnod(inod,3) /= imat))
THEN
511 CALL ancmsg(msgid=1656,msgtype=msgerror,
512 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=tagnod(inod,3))
515 tagnod(inod,3) = imat
517 volnod(i+nft) = (one/islnod(i+nft))*vol(i)
522 CALL ancmsg(msgid=1659,msgtype=msgerror,
523 . anmode=aninfo_blind)
526 ELSEIF (ity == 3)
THEN
528 IF ((igtyp /= 1).AND.(igtyp /= 9))
THEN
529 CALL ancmsg(msgid=1662,msgtype=msgerror,
530 . anmode=aninfo_blind,i1=igtyp)
536 index(ideb+numelc_nl+k) = k + nft
537 itri(ideb+k+nft) = ixc(7,k+nft)
540 numelc_nl = numelc_nl + nel
546 thck => elbuf_tab(ng)%GBUF%THK(1:nel
555 nelen(inod) = nelen(inod) + 1
558 !
If already written and different => error
559 IF ((tagnod(inod,2) /= 0).AND.(tagnod(inod,2) /= nptt))
THEN
560 CALL ancmsg(msgid=1657,msgtype=msgerror,
561 . anmode=aninfo_blind_1,i1=inod,i2=nptt,i3=tagnod(inod,2))
564 tagnod(inod,2) = nptt
566 IF ((tagnod(inod,3) /= 0).AND.(tagnod(inod,3) /= imat))
THEN
567 CALL ancmsg(msgid=1656,msgtype=msgerror,
568 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=tagnod(inod,3))
571 tagnod(inod,3) = imat
573 volnod(ideb+i+nft) = fourth *
area(nft+i) * thck(i)
577 ELSEIF (ity == 7)
THEN
579 IF ((igtyp /= 1).AND.(igtyp /= 9))
THEN
580 CALL ancmsg(msgid=1662,msgtype=msgerror,
581 . anmode=aninfo_blind,i1=igtyp)
587 index(ideb+numeltg_nl+k) = k + nft
588 itri(ideb+k+nft) = ixtg(6,k+nft)
591 numeltg_nl = numeltg_nl + nel
597 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
600 ! loop over
the nodes of
the shell
606 nelen(inod) = nelen(inod) + 1
610 IF ((tagnod(inod,2) /= zero).AND.(tagnod(inod,2) /= nptt))
THEN
611 CALL ancmsg(msgid=1657,msgtype=msgerror,
612 . anmode=aninfo_blind_1,i1=inod,i2=nptt,i3=tagnod(inod,2))
615 tagnod(inod,2) = nptt
617 IF ((tagnod(inod,3) /= zero).AND.(tagnod(inod,3) /= imat))
THEN
618 CALL ancmsg(msgid=1656,msgtype=msgerror,
619 . anmode=aninfo_blind_1,i1=inod,i2=imat,i3=tagnod(inod,3))
622 tagnod(inod,3) = imat
624 volnod(ideb+i+nft) = third *
area(numelc+nft+i) * thck(i)
629 CALL ancmsg(msgid=1658,msgtype=msgerror,
630 . anmode=aninfo_blind,i1=ity)
637 dtmini_cst_ams = zero
638 filnam = rootnam(1:rootlen)//
'_0001.rad'
641 INQUIRE(file = tmp_name,exist = eng_file)
644 OPEN(unit=71,file=tmp_name(1:len_tmp_name),
645 . access=
'SEQUENTIAL',status=
'OLD',iostat=io_err1)
647 10
READ(71,
'(A)',
END=20) keya
649 IF(keya(1:7)==
'/DT/AMS')
THEN
650 30
READ(71,
'(A)') keya
651 IF ((keya(1:1)==
'#').OR.(keya(1:1)==
'$'))
THEN
656 READ(71,*) dtsca_ams,dtmini_ams
657 IF (dtsca_ams == zero) dtsca_ams = zep9
660 IF(keya(1:11)==
'/DT/CST_AMS')
THEN
661 40
READ(71,
'(A)') keya
662 IF ((keya(1:1)==
'#').OR.(keya(1:1)==
'$'))
THEN
667 READ(71,*) dtsca_cst_ams,dtmini_cst_ams
668 IF (dtsca_cst_ams == zero) dtsca_cst_ams = zep9
678 . msgtype=msgwarning,
679 . anmode=aninfo_blind_2,
680 . c1=rootnam(1:rootlen)//
'_0001.rad')
683 dtmini =
max(dtmini_ams,dtmini_cst_ams)
692 idxi(1:numnod) = 0 ! inversed of
the index table
694 IF (
tagnod(i,1) == 1)
THEN
699 posi(nnod) = l_nloc + 1
701 l_nloc = l_nloc +
tagnod(i,2)
704 posi(nnod + 1) = l_nloc + 1
708 IF ((numels>0).AND.(numels_nl>0))
CALL quicksort_i2(itri, index, 1, numels_nl)
710 IF ((numelc>0).AND.(numelc_nl>0))
CALL quicksort_i2(itri, index, numels+1, numels+numelc_nl)
712 IF ((numeltg>0).AND.(numeltg_nl>0))
CALL quicksort_i2(itri, index, numels+numelc+1, numels+numelc+numeltg_nl)
715 ALLOCATE(iaddn(nnod))
720 IF (
tagnod(i,1) == 1)
THEN
723 posn = posn + nelen(i)
727 nelen_max = sum(nelen(1:numnod))
728 ALLOCATE(idelem(nelen_max))
729 idelem(1:nelen_max) = 0
731 IF (
ALLOCATED(nelen))
DEALLOCATE(nelen)
732 ALLOCATE(nelen(nnod))
737 DO j = 1, numels_nl+numelc_nl+numeltg_nl
739 IF (j<=numels_nl)
THEN
745 ssp = sqrt(((third*pm(20,imat)/(one - pm(21,imat)*two
747 le_min = (volu(i))**third
748 IF (tagtet(i)>0)
THEN
751 IF (k == 1) n = idxi(ixs(2,i))
752 IF (k == 2) n = idxi(ixs(4,i))
753 IF (k == 3) n = idxi(ixs(7,i))
754 IF (k == 4) n = idxi(ixs(6,i))
756 nelen(n) = nelen(n) + 1
758 idelem(iaddn(n)+nelen(n)-1) = i
760 ELSEIF (tagpent(i)>0)
THEN
764 IF (k == 4) n = idxi(ixs(6,i))
765 IF (k == 5) n = idxi(ixs(7,i))
766 IF (k == 6) n = idxi(ixs(8,i))
768 nelen(n) = nelen(n) + 1
770 idelem(iaddn(n)+nelen(n)-1) = i
775 n = idxi(solnod(k,i))
777 nelen(n) = nelen(n) + 1
779 idelem(iaddn(n)+nelen(n)-1) = i
783 ELSEIF (j<=numels_nl+numelc_nl)
THEN
785 i = index(numels+j-numels_nl)
790 nelen(n) = nelen(n) + 1
792 idelem(iaddn(n)+nelen(n)-1) = i
797 ssp = sqrt(pm(24,imat)/pm(1,imat))
799 le_min = sqrt(
area(i))
801 ELSEIF (j<=numels_nl+numelc_nl+numeltg_nl)
THEN
803 i = index(numels+numelc+j-numels_nl-numelc_nl)
806 n = idxi(ixtg(k+1,i))
808 nelen(n) = nelen(n) + 1
810 idelem(iaddn(n)+nelen(n)-1) = i
815 ssp = sqrt(pm(24,imat)/pm(1,imat))
817 le_min = sqrt((four/sqrt(three))*
area(numelc + i))
820 len = nloc_dmg%LEN(imat)
821 ! computing
the theoretical maximal length
822 le_max = nloc_dmg%LE_MAX(imat)
823 IF (le_max == zero)
THEN
824 nloc_dmg%LE_MAX(imat) = le_min
828 dtmin =
max(le_max/ssp,dtmini)
830 dens = csta*(((len/
max(le_max,em20))**2 + (one/twelve))*(dtmin**2))
831 IF (le_min > le_max)
THEN
832 warn_lenght(imat,1) = one
833 warn_lenght(imat,2) = le_max
834 warn_lenght(imat,3) = le_min
837 IF ((dens < nloc_dmg%DENS(imat)).OR.(nloc_dmg%DENS(imat) == zero))
THEN
839 damp = two*zeta*sqrt((four*(len/
max(le_max,em20))**2 + third)*dens)
841 nloc_dmg%DENS(imat) =
max(dens,zero)
842 nloc_dmg%DAMP(imat) =
max(damp,zero)
845 sspnl = (sqrt(twelve*(len**2) + (le_min)**2))/(two*sqrt(three*dens))
846 IF ((sspnl < nloc_dmg%SSPNL(imat)).OR.(nloc_dmg%SSPNL(imat) == zero))
THEN
847 nloc_dmg%SSPNL(imat) =
max(sspnl,zero)
854 ALLOCATE(itrin(maxval(nelen(1:nnod))))
855 ALLOCATE(volsort(maxval(nelen(1:nnod))))
859 volsort(1:nelen(n)) = volnod(idelem(iaddn(n):iaddn(n)+nelen(n)-1))
861 CALL myqsort(nelen(n),volsort(1:nelen(n)),itrin(1:nelen(n)),error)
865 voln(n) = voln(n) + volsort(k)
871 IF (warn_lenght(i,1) > zero)
THEN
872 CALL ancmsg(msgid=1812,msgtype=msgwarning,
873 . anmode=aninfo_blind_1,i1=ipm(1,i),r1=nloc_dmg%LEN(i),
874 . r2=warn_lenght(i,2),r3=warn_lenght(i,3))
881 IF (nloc_dmg%DENS(i) > zero)
THEN
882 WRITE(iout,1900) ipm(1,i),nloc_dmg%LEN(i),nloc_dmg%LE_MAX(i),nloc_dmg%DENS(i),nloc_dmg%DAMP(i)
887 nddmax = maxval(nddl(1:nnod))
891 nloc_dmg%L_NLOC = l_nloc
892 nloc_dmg%NUMELS_NL = numels_nl
893 nloc_dmg%NUMELC_NL = numelc_nl
894 nloc_dmg%NUMELTG_NL = numeltg_nl
895 nloc_dmg%NDDMAX = nddmax
898 CALL my_alloc(nloc_dmg%INDX,nnod)
899 CALL my_alloc(nloc_dmg%POSI,nnod+1)
900 CALL my_alloc(nloc_dmg%IDXI,numnod)
901 CALL my_alloc(nloc_dmg%MASS,l_nloc
902 CALL my_alloc(nloc_dmg%MASS0,l_nloc)
903 CALL my_alloc(nloc_dmg%VNL,l_nloc)
904 CALL my_alloc(nloc_dmg%VNL_OLD,l_nloc)
905 CALL my_alloc(nloc_dmg%DNL,l_nloc)
906 CALL my_alloc(nloc_dmg%UNL,l_nloc
907 IF (.NOT.
ALLOCATED(nloc_dmg%STIFNL))
ALLOCATE(nloc_dmg%STIFNL(l_nloc,1))
908 IF (.NOT.
ALLOCATED(nloc_dmg%FNL))
ALLOCATE(nloc_dmg%FNL(l_nloc,1))
909 IF (.NOT.
ALLOCATED(nloc_dmg%FSKY))
ALLOCATE(nloc_dmg%FSKY(0,0))
910 IF (.NOT.
ALLOCATED(nloc_dmg%STSKY))
ALLOCATE(nloc_dmg%STSKY(0,0))
911 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_SIZE))
ALLOCATE(nloc_dmg%IAD_SIZE(0))
912 IF (.NOT.
ALLOCATED(nloc_dmg%IAD_ELEM))
ALLOCATE(nloc_dmg%IAD_ELEM(0))
913 IF (.NOT.
ALLOCATED(nloc_dmg%FR_ELEM))
ALLOCATE(nloc_dmg%FR_ELEM(0))
917 nloc_dmg%POSI(1:nnod+1) = posi(1:nnod+1)
918 nloc_dmg%IDXI(1:numnod) = idxi(1:numnod)
919 nloc_dmg%FNL(1:l_nloc,1) = zero
920 nloc_dmg%VNL(1:l_nloc) = zero
921 nloc_dmg%VNL_OLD(1:l_nloc) = zero
922 nloc_dmg%DNL(1:l_nloc) = zero
923 nloc_dmg%UNL(1:l_nloc) = zero
930 dens = nloc_dmg%DENS(nmat(i))
935 nloc_dmg%MASS(j) = half*w_gauss(j-pos+1,ndd)*voln(i)*dens
936 nloc_dmg%MASS0(j) = half*w_gauss(j-pos+1,ndd)*voln(i)*dens
938 nloc_dmg%MASS(j) = voln(i)*dens
939 nloc_dmg%MASS0(j) = voln(i
942 ELSEIF ((ity == 3).OR.(ity == 7))
THEN
943 nloc_dmg%MASS(j) = wf1(j-pos+1,ndd
944 nloc_dmg%MASS0(j) = wf1(j-pos+1,ndd)*voln(i)*dens
958 IF ((iloc > 0).AND.((ity == 3).OR.(ity == 7)))
THEN
963 ELSEIF (ity == 7)
THEN
968 dens = nloc_dmg%DENS(imat)
974 npts = elbuf_tab(ng)%NPTS
980 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
986 bufnl => elbuf_tab(ng)%NLOC(ir,is)
987 massth => bufnl%MASSTH
990 IF ((nptt==2).AND.(k==2))
THEN
991 nth1 = (z01(k,nptt) - zn1(k,nptt))/
992 . (zn1(k-1,nptt) - zn1(k,nptt))
993 nth2 = (z01(k,nptt) - zn1(k-1,nptt))/
994 . (zn1(k,nptt) - zn1(k-1,nptt))
996 nth1 = (z01(k,nptt) - zn1(k+1,nptt))/
997 . (zn1(k,nptt) - zn1(k+1,nptt))
998 nth2 = (z01(k,nptt) - zn1(k,nptt))/
999 . (zn1(k+1,nptt) - zn1(k,nptt))
1003 IF ((nptt==2).AND.(k==2))
THEN
1004 massth(i,k-1) = massth(i,k-1) +
1005 . (nth1**2 + nth1*nth2)*dens*
area(ndepar+nft+i)*thck(i)*ws*wf1(k,nptt)
1006 massth(i,k) = massth(i,k) +
1007 . (nth2**2 + nth1*nth2)*dens*
area(ndepar+nft+i)*thck
1009 massth(i,k) = massth(i,k)
1010 . (nth1**2 + nth1*nth2)*dens*
area(ndepar+nft+i)*thck(i)*ws*wf1(k,nptt)
1011 massth(i,k+1) = massth(i,k+1) +
1012 . (nth2**2 + nth1*nth2)*dens*
area(ndepar+nft+i)*thck(i)*ws*wf1(k,nptt)
1019 ELSEIF ((iloc > 0).AND.((ity == 1).AND.(elbuf_tab(ng)%NLAY > 1)))
THEN
1023 dens = nloc_dmg%DENS(imat)
1027 nptr = elbuf_tab(ng)%NPTR
1029 npts = elbuf_tab(ng)%NPTS
1031 nptt = elbuf_tab(ng)%NLAY
1033 vol => elbuf_tab(ng)%GBUF%VOL(1:nel)
1038 bufnlts => elbuf_tab(ng)%NLOCTS(ir,is)
1039 massth => bufnlts%MASSTH
1042 nth1 = (a_gauss(k,nptt) - z_gauss(k+1,nptt))/
1043 . (z_gauss(k,nptt) - z_gauss(k+1,nptt))
1044 nth2 = (a_gauss(k,nptt) - z_gauss(k,nptt))/
1045 . (z_gauss(k+1,nptt) - z_gauss(k,nptt))
1048 massth(i,k) = massth(i,k) +
1049 . (nth1**2 + nth1*nth2)*dens*vol(i)*half*w_gauss(k,nptt)
1050 . *half*w_gauss(ir,nptr)*half*w_gauss(is,npts)
1051 massth(i,k+1) = massth(i,k+1) +
1052 . (nth2**2 + nth1*nth2)*dens*vol(i)*half
1053 . *half*w_gauss(ir,nptr)*half*w_gauss(is,npts)
1074 IF (
ALLOCATED(indx))
DEALLOCATE(indx
1075 IF (
ALLOCATED(idxi))
DEALLOCATE(idxi)
1076 IF (
ALLOCATED(nddl))
DEALLOCATE(nddl)
1077 IF (
ALLOCATED(nmat))
DEALLOCATE(nmat)
1078 IF (
ALLOCATED(posi))
DEALLOCATE(posi)
1079 IF (
ALLOCATED(index))
DEALLOCATE(index)
1080 IF (
ALLOCATED(itri))
DEALLOCATE(itri)
1081 IF (
ALLOCATED(tagtet))
DEALLOCATE(tagtet)
1082 IF (
ALLOCATED(tagpent))
DEALLOCATE(tagpent)
1083 IF (
ALLOCATED(islnod))
DEALLOCATE(islnod)
1084 IF (
ALLOCATED(solnod))
DEALLOCATE(solnod)
1085 IF (
ALLOCATED(voln))
DEALLOCATE(voln)
1086 IF (
ALLOCATED(volu))
DEALLOCATE(volu)
1087 IF (
ALLOCATED(warn_lenght))
DEALLOCATE(warn_lenght)
1088 IF (
ALLOCATED(nelen))
DEALLOCATE(nelen)
1089 IF (
ALLOCATED(idelem))
DEALLOCATE(idelem)
1090 IF (
ALLOCATED(iaddn))
DEALLOCATE(iaddn)
1091 IF (
ALLOCATED(itrin))
DEALLOCATE(itrin)
1092 IF (
ALLOCATED(volsort))
DEALLOCATE(volsort)
1093 IF (
ALLOCATED(volnod))
DEALLOCATE(volnod)
1097 . 5x,
' NON-LOCAL PARAMETERS '/
1098 . 5x,
'----------------------'/
1099 . 5x,
' MATERIAL ID',5x,
' LENGTH',5x,
'CONV. LE_MAX',5x,
' DENSITY',5x,'
damping'/
1100 . 5X,' ',5X, ' ',5X, ' ',5X,' (auto-set)
',5X,' (auto-set)
'/)
1102 . 5X,I12,5X,ES12.4,5X,ES12.4,5X,ES12.4,5X,ES12.4/)