33
34
35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "comlock.inc"
43
44
45
46 INTEGER ,INTENT(IN) :: NEL
47 INTEGER ,INTENT(IN) :: NUPARAM
48 INTEGER ,INTENT(IN) :: IOUT
49 INTEGER ,INTENT(IN) :: ISTDO
50 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
52 my_real ,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
53 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: dpla
54 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: svm ! von mises stress
55 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: pressure
56 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: epsd
57 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: tstar
58 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: off
59 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: dfmax
60 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: tdel
61
62
63
64 INTEGER :: I,J,NINDX
65 INTEGER ,DIMENSION(NEL) :: INDX
66 my_real :: d1,d2,d3,d4,d5,epsd0,epsf,epsf_min
67
68 nindx = 0
69 d1 = uparam(1)
70 d2 = uparam(2)
71 d3 = uparam(3)
72 d4 = uparam(4)
73 d5 = uparam(5)
74 epsd0 = uparam(6)
75 epsf_min = uparam(12)
76
77 DO i=1,nel
78 IF (off(i) == one .and. dpla(i) > zero) THEN
79 epsf = d3 * pressure(i) /
max(em20, svm(i))
80 epsf = d1 + d2 * exp(epsf)
81 IF (d4 /= zero) epsf = epsf * (one + d4*log(
max(one,epsd(i)/epsd0)))
82 IF (d5 /= zero) epsf = epsf * (one + d5*tstar(i))
83 epsf =
max(epsf,epsf_min)
84 IF (epsf > zero) dfmax(i) = dfmax(i) + dpla(i) / epsf
85 IF (dfmax(i) >= one) THEN
86 nindx = nindx + 1
87 indx(nindx) = i
88 tdel(i) = time
89 dfmax(i) = one
90 off(i) = four_over_5
91 ENDIF
92 ENDIF
93 ENDDO
94
95 IF (nindx > 0) THEN
96 DO j=1,nindx
97 i = indx(j)
98#include "lockon.inc"
99 WRITE(iout, 1000) ngl(i),time
100 WRITE(istdo,1000) ngl(i),time
101#include "lockoff.inc"
102 END DO
103 END IF
104
105 1000 FORMAT(5x,'FAILURE (JC) OF BEAM ELEMENT ',i10,1x,'AT TIME :',1pe12.4)
106
107 RETURN