36 SUBROUTINE dtnoda(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 ,NODADT_THERM,
40 5 ADI ,RBYM ,ARBY ,ARRBY ,WEIGHT_MD,
41 6 MCP ,MCP_OFF,CONDN ,NALE ,H3D_DATA)
52#include "implicit_f.inc"
72 INTEGER , NODLT,NELTST,ITYPTST,ITAB(*),
73 . WEIGHT(*),IMSCH,WEIGHT_MD(*)
74 INTEGER,
INTENT(IN) :: NALE(*)
75 INTEGER,
INTENT(IN) :: NODADT_THERM
76 my_real DT2T, DMAST, DINERT,
77 . ms(*) ,in(*) ,stifn(*), stifr(*),adt(*) ,adm(*) ,
78 . a(3,*) ,ar(3,*) ,adi(*) ,rbym(nfrbym,*),arby(3,*),
79 . arrby(3,*),condn(*),mcp(*),mcp_off(*)
82 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
86 INTEGER N, NN, K, KMAX, ISTOP,I,INDTN(1024), TAG(NUMNOD),IOK
87 my_real dtn(1024),dtnod, dt2p, mas, iner, mass, sti, dt2s
97 IF (-idtgr(11)==igrnod(n)%ID)
THEN
103 CALL ancmsg(msgid=237,anmode=aninfo,
115 DO n=1,igrnod(idtgr(11))%NENTITY
116 tag(igrnod(idtgr(11))%ENTITY(n)) = 1
125 IF(iale+ieuler/=0 .AND.
ale%GLOBAL%I_DT_NODA_ALE_ON==0 .AND. nodadt/=0)
THEN
128 IF(iabs(nale(n))==1 .OR. iabs(nale(n))==2)
THEN
138 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
139#include "vectorize.inc"
150 IF(nodadt_therm == 1)
THEN
154 DO i=nodft,nodlt,1024
158 DO n=i,
min(nodlt,i+1023)
159 mcp(n) = mcp(n) * mcp_off(n)
160 IF(mcp(n) < em10) mcp(n) = zero
161 IF(condn(n)<=zero)
THEN
163 ELSEIF(mcp(n)>zero)
THEN
172 dtn(k) = dtfac1(11)*two * mcp(n) / condn(n)
173 dtnod =
min(dtnod,dtn(k))
176 IF(dtnod<dtmin1(11))
THEN
177#include "vectorize.inc"
179 IF(dtn(k)<dtmin1(11))
THEN
187#include "vectorize.inc"
198 DO n=i,
min(nodlt,i+1023)
204 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
205#include "vectorize.inc"
224 DO 340 i=nodft,nodlt,1024
228 IF(iale+ieuler == 0 .OR.
ale%GLOBAL%I_DT_NODA_ALE_ON==1)
THEN
229 DO n=i,
min(nodlt,i+1023)
232 IF(stifn(n)<=zero)
THEN
234 ELSEIF(ms(n)>zero)
THEN
240 DO n=i,
min(nodlt,i+1023)
241 IF(stifn(n)<=zero)
THEN
243 ELSEIF(ms(n)>zero)
THEN
244 IF(nale(n)==0.OR.nale(n)==3)
THEN
257 dtn(k) = dtfac1(11)*sqrt(two * ms(n) / stifn(n))
258 dtnod =
min(dtnod,dtn(k))
261 IF(dtnod<dtmin1(11))
THEN
262 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
263#include "vectorize.inc"
265 IF(dtn(k)<dtmin1(11))
THEN
270 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
272 IF (anim_n(2)+outp_n(2)+h3d_data%N_SCAL_DMAS >0)
THEN
274 IF(dtn(k)<dtmin1(11))
THEN
276 dt2p = dtmin1(11)/dtfac1(11)
277 mas = half * stifn(n) * dt2p * dt2p * onep00001
279 IF(weight_md(n)==1)
THEN
280 dmast = dmast + mas - ms(n)
283 adm(n) = (mas-ms(n))/ms(n)
285 adm(n) = mas*(one+adm(n))/ms(n) - one
295 IF(dtn(k)<dtmin1(11))
THEN
297 dt2p = dtmin1(11)/dtfac1(11)
300 dmast = dmast + (mas - ms(n))*weight_md(n)
307 ELSEIF(idtmin(11)==4)
THEN
308#include "vectorize.inc"
310 IF(dtn(k)<dtmin1(11))
THEN
312 dt2p = dtmin1(11)/dtfac1(11)
313 mas = half * stifn(n) * dt2p * dt2p
324#include "vectorize.inc"
335 DO n=i,
min(nodlt,i+1023)
341 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
342#include "vectorize.inc"
354 IF(irigid_mat > 0)
THEN
364 ELSEIF(mass> zero)
THEN
375 dtn(k) = dtfac1(11)*sqrt(two * mass / sti)
376 dtnod =
min(dtnod,dtn(k))
379 IF(dtnod<dtmin1(11))
THEN
380 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
381#include "vectorize.inc"
383 IF(dtn(k) < dtmin1(11))
THEN
388 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
390#include "vectorize.inc"
392 IF(dtn(k)<dtmin1(11))
THEN
396 dt2p = dtmin1(11)/dtfac1(11)
397 mas = half * sti * dt2p * dt2p * onep00001
408 ELSEIF(idtmin(11)==4)
THEN
409#include "vectorize.inc"
411 IF(dtn(k)<dtmin1(11))
THEN
415 dt2p = dtmin1(11)/dtfac1(11)
416 mas = half * sti * dt2p * dt2p
419 arby(1,n)=arby(1,n)*mas
420 arby(2,n)=arby(2,n)*mas
421 arby(3,n)=arby(3,n)*mas
427#include "vectorize.inc"
440 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
441#include "vectorize.inc"
453 DO 350 i=nodft,nodlt,1024
457 DO n=i,
min(nodlt,i+1023)
458 IF(stifr(n)<=zero)
THEN
460 ELSEIF(in(n)>zero)
THEN
469 dtn(k) = dtfac1(11)*sqrt(two * in(n) / stifr(n))
470 dtnod =
min(dtnod,dtn(k))
473 IF(dtnod<dtmin1(11))
THEN
474 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
475#include "vectorize.inc"
477 IF(dtn(k)<dtmin1(11))
THEN
482 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
483 IF (anim_n(12)+outp_n(3)+h3d_data%N_SCAL_DINER >0)
THEN
484#include "vectorize.inc"
486 IF(dtn(k)<dtmin1(11))
THEN
489 dt2p = dtmin1(11)/dtfac1(11)
490 iner = half * stifr(n) * dt2p * dt2p * onep00001
492 IF(weight_md(n)==1)
THEN
493 dinert = dinert + ( iner - in(n))
494 adi(n) = iner*(one+adi(n))/in(n) - one
496 in(n) =
max(iner,in(n))
502#include "vectorize.inc"
504 IF(dtn(k)<dtmin1(11))
THEN
507 dt2p = dtmin1(11)/dtfac1(11)
508 iner = half * stifr(n) * dt2p * dt2p * onep00001
510 dinert = dinert + ( iner - in(n))*weight_md(n)
511 in(n) =
max(iner,in(n))
517 ELSEIF(idtmin(11)==4)
THEN
518#include "vectorize.inc"
520 IF(dtn(k)<dtmin1(11))
THEN
522 dt2p = dtmin1(11)/dtfac1(11)
523 mas = half * stifr(n) * dt2p * dt2p
534#include "vectorize.inc"
545 DO n=i,
min(nodlt,i+1023)
551 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
552#include "vectorize.inc"
555 adt(n)=
min(adt(n),dtn(k))
562 IF(irigid_mat > 0)
THEN
571 ELSEIF(in(n)>zero)
THEN
574 dtn(k) = dtfac1(11)*sqrt(two * iner / sti)
575 dtnod =
min(dtnod,dtn(k))
582 dtn(k) = dtfac1(11)*sqrt(two * in(n) / stifr(n))
583 dtnod =
min(dtnod,dtn(k))
586 IF(dtnod<dtmin1(11))
THEN
587 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
588#include "vectorize.inc"
590 IF(dtn(k)<dtmin1(11))
THEN
595 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
596#include "vectorize.inc"
598 IF(dtn(k)<dtmin1(11))
THEN
601 dt2p = dtmin1(11)/dtfac1(11)
602 iner = half * sti * dt2p * dt2p * onep00001
607 rbym(17,n) =
max(iner,rbym(17,n))
612 ELSEIF(idtmin(11)==4)
THEN
613#include "vectorize.inc"
615 IF(dtn(k)<dtmin1(11))
THEN
618 dt2p = dtmin1(11)/dtfac1(11)
619 mas = half * sti * dt2p * dt2p
622 arrby(1,n)=arrby(1,n)*mas
623 arrby(2,n)=arrby(2,n)*mas
624 arrby(3,n)=arrby(3,n)*mas
630#include "vectorize.inc"
643 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
644#include "vectorize.inc"
647 adt(n)=
min(adt(n),dtn(k))
654 IF(idtmin(11)==8)
THEN
655 IF(dt2t < dtmin1(11)) dt2t=
min(dt2s,dtmin1(11))
665 DO 370 i=nodft,nodlt,1024
669 DO n=i,
min(nodlt,i+1023)
670 IF(stifn(n)<=zero)
THEN
672 ELSEIF(ms(n)>zero)
THEN
681 dtn(k) = dtfac1(11)*sqrt(two * ms(n) / stifn(n))
682 dtnod =
min(dtnod,dtn(k))
686 IF(dtnod<dtmin1(11))
THEN
687 IF(idtmin(11)==1.OR.idtmin(11)==5)
THEN
688#include "vectorize.inc"
690 IF(dtn(k)<dtmin1(11))
THEN
695 ELSEIF(idtmin(11)==3.OR.idtmin(11)==8)
THEN
697 IF (anim_n(2)+outp_n(2)+h3d_data%N_SCAL_DMAS >0)
THEN
699 IF(dtn(k)<dtmin1(11))
THEN
701 dt2p = dtmin1(11)/dtfac1(11)
702 mas = half * stifn(n) * dt2p * dt2p * onep00001
704 IF(weight_md(n)==1)
THEN
705 dmast = dmast + mas - ms(n)
706 adm(n) = mas*(one+adm(n))/ms(n) - one
715 IF(dtn(k)<dtmin1(11))
THEN
717 dt2p = dtmin1(11)/dtfac1(11)
718 mas = half * stifn(n) * dt2p * dt2p * onep00001
720 dmast = dmast + (mas - ms(n))*weight_md(n)
731#include "vectorize.inc"
742 DO n=i,
min(nodlt,i+1023)
746 DO n=i,
min(nodlt,i+1023)
753 IF(anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT >0)
THEN
754#include "vectorize.inc"
757 adt(n)=
min(adt(n),dtn(k))
763 IF(dt2t < dtmin1(11)) dt2t=
min(dt2s,dtmin1(11))
779 IF (idtmin(11)/=5.AND.inconv==1)
THEN
784 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
786 .
' **ERROR : NODAL TIME STEP LESS OR EQUAL DTMIN N=',istop
787#include "lockoff.inc"
792 .
' **ERROR : NEGATIVE STIFFNESS NODE',-istop
794 .
' **ERROR : NEGATIVE STIFFNESS NODE',-istop
795 IF ( istamping == 1)
THEN
796 WRITE(istdo,'(a)
')'the run encountered a problem in an in
798 WRITE(ISTDO,'(a)
')'you may need to check
if there is enou
799 .gh clearance between
the tools,
'
800 WRITE(ISTDO,'(a)
')'and that they
do not penetrate each ot
801 .her during their travel
'
802 WRITE(IOUT, '(a)
')'the run encountered a problem in an in
804 WRITE(IOUT, '(a)
')'you may need to check
if there is enou
805 .gh clearance between
the tools,
'
806 WRITE(IOUT, '(a)
')'and that they
do not penetrate each ot
807 .her during their travel
'
809#include "lockoff.inc"
811 ELSEIF (INCONV==1)THEN
816 . ' **error : nodal time step less or equal dtmin n=
',ISTOP
818 . ' **error : nodal time step less or equal dtmin n=
',ISTOP
819#include "lockoff.inc"
824 . ' **error : negative stiffness node
',-ISTOP
826 . ' **error : negative stiffness node
',-ISTOP
827 IF ( ISTAMPING == 1) THEN
828 WRITE(ISTDO,'(a)
')'the run encountered a problem in an in
830 WRITE(ISTDO,'(a)
')'you may need to check
if there is enou
831 .gh clearance between
the tools,
'
832 WRITE(ISTDO,'(a)
')'and that they
do not penetrate each ot
833 .her during their travel
'
834 WRITE(IOUT, '(a)
')'the run encountered a problem in an in
836 WRITE(IOUT, '(a)
')'you may need to check
if there is enou
837 .gh clearance between
the tools,
'
838 WRITE(IOUT, '(a)
')'and that they
do not penetrate each ot
839 .her during their travel
'
841#include "lockoff.inc"
848 STIFN(N) = STIFN(N)*WEIGHT(N)
852 STIFN(N) = STIFN(N)*WEIGHT(N)
853 STIFR(N) = STIFR(N)*WEIGHT(N)
subroutine dtnoda(nodft, nodlt, neltst, ityptst, itab, ms, in, stifn, stifr, dt2t, dmast, dinert, adt, adm, imsch, weight, a, ar, igrnod, nodadt_therm, adi, rbym, arby, arrby, weight_md, mcp, mcp_off, condn, nale, 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)