40
41
42
43#include "implicit_f.inc"
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#include "mvsiz_p.inc"
69#include "scr17_c.inc"
70#include "units_c.inc"
71#include "comlock.inc"
72#include "param_c.inc"
73#include "impl1_c.inc"
74
75
76
77 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR
78 INTEGER, DIMENSION(NEL), INTENT(IN) :: NGL
79 my_real,
INTENT(IN) :: time,timestep
80 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
81 my_real,
DIMENSION(NEL),
INTENT(IN) :: signxx,signyy,signzz,
82 . signxy,signyz,signzx,depsxx,depsyy,depszz,depsxy,depsyz,
83 . depszx,epsp
84
85
86
87 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: off,dfmax,dmgscl,tdele
88 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
89
90
91
92 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
94 EXTERNAL finter
95
96
97
98
99
100
101
102
103
104
105 INTEGER I,J,IDEL,IDEV,IFLAG(MVSIZ),INDX(MVSIZ),IADBUF,NINDX,
106 . NINDEX,INDEX(MVSIZ),IR,IFAIL,JJ,
107 . ISOLID
109 . e1,e2,e3,e4,e5,e6,rfac,e42,e52,e62,c,d, epst,epst2,
110 . r1,r2,y,yp,dav,dydx,ie_sp,p,scale,cc
112 . eps_max(mvsiz),damage(mvsiz),epsf1(mvsiz),epsf2(mvsiz),
113 . rief1,rief2,xfac
114
115 rief1 = uparam(1)
116 rief2 = uparam(2)
117 xfac = uparam(4)
118
119 DO i=1,nel
120 damage(i) = zero
121 uvar(i,1) = uvar(i,1) + signxx(i)*depsxx(i) +
122 . signyy(i)*depsyy(i) +
123 . signzz(i)*depszz(i) +
124 . signxy(i)*depsxy(i) +
125 . signyz(i)*depsyz(i) +
126 . signzx(i)*depszx(i)
127 ENDDO
128
129 DO i=1,nel
130 IF(off(i)<em01) off(i)=zero
131 IF(off(i)<one) off(i)=off(i)*four_over_5
132 END DO
133
134 nindx=0
135 DO i=1,nel
136 rfac = one
137 IF(ifunc(1)/=0)THEN
138 rfac=finter(ifunc(1),epsp(i)*xfac,npf,tf,dydx)
139 rfac =
max(rfac,em20)
140 ENDIF
141 IF(off(i)==one)THEN
142 ie_sp = uvar(i,1)
143 r1 = rief1*rfac
144 r2 = rief2*rfac
145 IF(ie_sp>r1.AND.r1<r2) THEN
146 damage(i)= (ie_sp-r1)/(r2-r1)
147 damage(i)=
min(one,damage(i))
148 ENDIF
149 dfmax(i) =
max(dfmax(i),damage(i))
150 IF(ie_sp>r2) THEN
151 damage(i)= one
152 off(i)=four_over_5
153 nindx=nindx+1
154 indx(nindx)=i
155 tdele(i) = time
156 ENDIF
157 ENDIF
158 ENDDO
159
160 IF(nindx>0.AND.imconv==1)THEN
161 DO j=1,nindx
162#include "lockon.inc"
163 WRITE(iout, 1000) ngl(indx(j))
164 WRITE(istdo,1100) ngl(indx(j)),time
165#include "lockoff.inc"
166 END DO
167 END IF
168 DO i=1,nel
169 dmgscl(i) = one - dfmax(i)
170 ENDDO
171
172 1000 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10)
173 1100 FORMAT(1x,'DELETE SOLID ELEMENT NUMBER ',i10,
174 . ' AT TIME :',1pe20.13)
175
176 RETURN