36 SUBROUTINE dtnodams(NODFT ,NODLT ,NELTST,ITYPTST,ITAB ,
37 2 MS ,IN ,STIFN ,STIFR ,DT2T ,
38 3 DMAST ,DINERT,ADT ,ADM ,IMSCH ,
39 4 WEIGHT,A ,AR ,IGRNOD ,
40 5 ADI ,RBYM ,ARBY ,ARRBY ,ISMSCH ,
41 6 NODNX_SMS,DIAG_SMS ,NPBY ,TAGMSR_RBY_SMS,
53#include "implicit_f.inc"
74 INTEGER NODFT, NODLT,NELTST,ITYPTST,ITAB(*),
76 . ISMSCH, NODNX_SMS(*), NPBY(NNPBY,*), TAGMSR_RBY_SMS(*)
78 my_real DT2T, DMAST, DINERT,
79 . MS(*) ,IN(*) ,STIFN(*), STIFR(*),ADT(*) ,ADM(*) ,
80 . a(3,*) ,ar(3,*) ,adi(*) ,rbym(nfrbym,*),arby(3,*),
81 . arrby(3,*), diag_sms(*)
84 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
88 INTEGER N, NN, K1, KMAX1, K2, KMAX2, ,I,J,
89 . INDTN1(1024), INDTN2(1024), IOK, K, M, MSR, NSN, IAD
90 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAG
91 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGR
92 my_real DTN1(1024), DTN2(1024),
93 . DTNOD1, DTNOD2, DT2P, MAS, INER, MAS0, DMM, MASS, STI,
96 CALL my_alloc(tag,numnod)
97 CALL my_alloc(tagr,numnod)
104 IF (-idtgr(11)==igrnod(n)%ID)
THEN
110 CALL ancmsg(msgid=237,anmode=aninfo,
120 DO n=1,igrnod(idtgr(11))%NENTITY
121 IF(nodnx_sms(igrnod(idtgr(11))%ENTITY(n))==0)
THEN
122 tag(igrnod(idtgr(11))%ENTITY(n)) = 1
123 tagr(igrnod(idtgr(11))%ENTITY(n)) = 1
128 IF(nodnx_sms(n)==0)
THEN
143 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
144#include "vectorize.inc"
158 IF(i7kglo > 0 .OR. nodadt /= 0)
THEN
159 DO 370 i=nodft,nodlt,1024
162#include "vectorize.inc"
163 DO n=i,
min(nodlt,i+1023)
164 IF(stifn(n)<=zero)
THEN
166 ELSEIF(nodnx_sms(n)==0)
THEN
170 dtn1(k1) = dtfac1(11)*sqrt(two * ms(n) / stifn(n))
171 dtnod1 =
min(dtnod1,dtn1(k1))
178 IF(dtnod1<dtmin1(11))
THEN
179 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
187 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
189 IF (anim_n(2)+outp_n(2)+h3d_data%N_SCAL_DMAS >0)
THEN
190#include "vectorize.inc"
192 IF(dtn1(k1)<dtmin1(11))
THEN
194 dt2p = dtmin1(11)/dtfac1(11)
195 mas = half * stifn(n) * dt2p * dt2p * onep00001
197 IF(weight(n)==1)
THEN
198 dmast = dmast + mas - ms(n)
199 adm(n) = mas*(one+adm(n))/ms(n) - one
208#include "vectorize.inc"
210 IF(dtn1(k1)<dtmin1(11))
THEN
212 dt2p = dtmin1(11)/dtfac1(11)
213 mas = half * stifn(n) * dt2p * dt2p * onep00001
215 dmast = dmast + (mas - ms(n))*weight(n)
223 ELSEIF(idtmin(11)==4)
THEN
224#include "vectorize.inc"
226 IF(dtn1(k1)<dtmin1(11))
THEN
228 dt2p = dtmin1(11)/dtfac1(11)
229 mas = half * stifn(n) * dt2p * dt2p
242 IF(dtn1(k1)<dt2t)
THEN
250#include "vectorize.inc"
251 DO n=i,
min(nodlt,i+1023)
257 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
258#include "vectorize.inc"
260 adt(indtn1(k1))=dtn1(k1)
269 DO 450 i=nodft,nodlt,1024
274#include "vectorize.inc"
275 DO n=i,
min(nodlt,i+1023)
276 IF(stifr(n)<=zero)
THEN
278 ELSEIF(nodadt/=0 .AND. nodnx_sms(n)==0)
THEN
282 dtn1(k1) = dtfac1(11)*sqrt(two * in(n) / stifr(n))
283 dtnod1 =
min(dtnod1,dtn1(k1))
285 ELSEIF(nodnx_sms(n)/=0)
THEN
289 dtn2(k2) = dtfacs*sqrt(two * in(n) / stifr(n))
290 dtnod2 =
min(dtnod2,dtn2(k2))
296 IF(dtnod1<dtmin1(11))
THEN
297 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
305 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
306 IF (anim_n(12)+outp_n(3)+h3d_data%N_SCAL_DINER >0)
THEN
307#include "vectorize.inc"
309 IF(dtn1(k1)<dtmin1(11))
THEN
312 dt2p = dtmin1(11)/dtfac1(11)
313 iner = half * stifr(n) * dt2p * dt2p * onep00001
316 dinert = dinert + ( iner - in(n))
317 adi(n) = iner*(one+adi(n))/in(n) - one
319 in(n) =
max(iner,in(n))
327#include "vectorize.inc"
329 IF(dtn1(k1)<dtmin1(11))
THEN
332 dt2p = dtmin1(11)/dtfac1(11)
333 iner = half * stifr(n) * dt2p * dt2p * onep00001
335 dinert = dinert + ( iner - in(n))*weight(n)
336 in(n) =
max(iner,in(n
343 ELSEIF(idtmin(11)==4)
THEN
344#include "vectorize.inc"
346 IF(dtn1(k1)<dtmin1(11))
THEN
348 dt2p = dtmin1(11)/dtfac1(11)
349 mas = half * stifr(n) * dt2p * dt2p
362 IF(dtn1(k1)<dt2t)
THEN
371 IF(dtnod2<dtmins)
THEN
372 IF (anim_n(12)+outp_n(3)+h3d_data%N_SCAL_DINER >0)
THEN
373#include "vectorize.inc"
375 IF(dtn2(k2)<dtmins)
THEN
379 iner = half * stifr(n) * dt2p * dt2p * onep00001
380 IF(nodnx_sms(n)/=0)
THEN
382 dinert = dinert + ( iner - in(n))
383 adi(n) = iner*(one+adi(n
393#include "vectorize.inc"
395 IF(dtn2(k2)<dtmins)
THEN
399 iner = half * stifr(n) * dt2p * dt2p * onep00001
400 IF(nodnx_sms(n)/=0)
THEN
401 dinert = dinert + ( iner - in(n))*weight(n)
402 in(n) =
max(iner,in(n))
413 IF(dtn2(k2)<dt2t)
THEN
421#include "vectorize.inc"
422 DO n=i,
min(nodlt,i+1023)
425#include "vectorize.inc"
426 DO n=i,
min(nodlt,i+1023)
432 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
433#include "vectorize.inc"
436 adt(n)=
min(adt(n),dtn1(k1))
438#include "vectorize.inc"
441 adt(n)=
min(adt(n),dtn2(k2))
448 IF(idtmin(11)==8)
THEN
449 IF(dt2t < dtmin1(11)) dt2t=
min(dt2s,dtmin1(11))
453 IF (idtmin(11)/=5)
THEN
458 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
460 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
461#include "lockoff.inc"
466 .
' **ERROR : NEGATIVE STIFFNESS NODE'
468 . ' **error : negative stiffness node',-istop
469 IF ( istamping == 1)
THEN
470 WRITE(istdo,
'(A)')
'The run encountered a problem in an in
472 WRITE(istdo,
'(A)')
'You may need to check if there is enou
473 .gh clearance between the tools,'
474 WRITE(istdo,
'(A)')
'and that they do not penetrate each ot
475 .her during their travel'
476 WRITE(iout,
'(A)')
'The run encountered a problem in an in
478 WRITE(iout,
'(A)')
'You may need to check if there is enou
479 .gh clearance between the tools,'
480 WRITE(iout,
'(A)')
'and that they do not penetrate each ot
481 .her during their travel'
483#include "lockoff.inc"
490 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
492 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
493#include "lockoff.inc"
498 .
' **ERROR : NEGATIVE STIFFNESS NODE',-istop
500 .
' **ERROR : NEGATIVE STIFFNESS NODE',-istop
501 IF ( istamping == 1)
THEN
502 WRITE(istdo,
'(A)')
'The run encountered a problem in an in
504 WRITE(istdo,
'(A)')
'You may need to check if there is enou
505 .gh clearance between the tools,'
506 WRITE(istdo,
'(A)')
'and that they do not penetrate each ot
507 .her during their travel'
508 WRITE(iout,
'(A)')
'The run encountered a problem in an in
510 WRITE(iout,
'(A)')
'You may need to check if there is enou
511 .gh clearance between the tools,'
512 WRITE(iout,
'(A)')
'and that they do not penetrate each ot
513 .her during their travel'
515#include "lockoff.inc"
521 stifn(n) = stifn(n)*weight(n)
525 stifn(n) = stifn(n)*weight(n)
526 stifr(n) = stifr(n)*weight(n)
subroutine dtnodams(nodft, nodlt, neltst, ityptst, itab, ms, in, stifn, stifr, dt2t, dmast, dinert, adt, adm, imsch, weight, a, ar, igrnod, adi, rbym, arby, arrby, ismsch, nodnx_sms, diag_sms, npby, tagmsr_rby_sms, h3d_data)
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)