35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "param_c.inc"
43#include "scr17_c.inc"
44#include "com04_c.inc"
45#include "com08_c.inc"
46#include "units_c.inc"
47#include "comlock.inc"
48
49
50
51 INTEGER ,INTENT(IN) :: NEL,NUVAR,NPF(*),NFUNC,IFUNC(NFUNC)
52 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: MAT,PID,NGL
53 INTEGER ,DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN) :: IPM
54 my_real ,
DIMENSION(NPROPG ,NUMGEO) ,
INTENT(IN) :: geo
55 my_real ,
DIMENSION(*) ,
INTENT(IN) :: uparam,tf
57
58
59
60 INTEGER :: I,J,IADBUF,NINDX
61 INTEGER ,DIMENSION(NEL) :: INDX,ICC,ISRATE,VFLAG
63 my_real ,
DIMENSION(NEL) :: e,nu,ca,cb,cn,cp,yld,yldmax,aa,hh,ff,
64 . gap,epst,epdr,epmax,epsr1,epsr2,asrate,
65 . yscale,dpla
66 my_real ,
DIMENSION(NEL,NUVAR) :: uvar
67
68
69
71 EXTERNAL finter
72
73 epif = zero
74
75 DO i=1,nel
76 iadbuf = ipm(7,mat(i))-1
77 e(i) = uparam(iadbuf+1)
78 nu(i) = uparam(iadbuf+2)
79 ca(i) = uparam(iadbuf+3)
80 yldmax(i)= uparam(iadbuf+4)
81 epmax(i) = uparam(iadbuf+5)
82 epsr1(i) = uparam(iadbuf+6)
83 epsr2(i) = uparam(iadbuf+7)
84 cb(i) = uparam(iadbuf+8)
85 cn(i) = uparam(iadbuf+9)
86 icc(i) = nint(uparam(iadbuf+10))
87 epdr(i) = uparam(iadbuf+11)
88 epif =
max(epif,epdr(i))
89 cp(i) = uparam(iadbuf+12)
90 israte(i)= nint(uparam(iadbuf+13))
91 asrate(i)= uparam(iadbuf+14)
92 vflag(i) = nint(uparam(iadbuf+23))
93 yscale(i)= uparam(iadbuf+24)
94
95 gap(i) = geo(2,pid(i))
96 dpla(i) = zero
97 ENDDO
98
99 DO i=1,nel
100 IF (gap(i) > zero .AND. al(i) <= (al0(i)-gap(i))) off(i) = one
101 ENDDO
102
103 DO i=1,nel
104 eint(i) = eint(i) +
for(i)*epsp(i)*al(i)*dt1*half
105 ENDDO
106
107 DO i=1,nel
108 area(i) =
area(i)*(one - two*nu(i)*epsp(i)*dt1*off(i))
109 ENDDO
110
111 DO i=1,nel
113 for(i) =
for(i) + yma*epsp(i)*dt1
114 epst(i) =
for(i) / yma
115 sti(i) = yma / al(i)
116 ENDDO
117
118 DO i=1,nel
119 IF (nfunc>0) THEN
120 yld(i) = yscale(i)*finter(ifunc(1),pla(i),npf,tf,hh(i))
121 hh(i) = yscale(i)*hh(i)
122 ELSE
123 yld(i) = ca(i) + cb(i)*(pla(i)**cn(i))
124 IF (cn(i) == one) THEN
125 hh(i) = cb
126 ELSE
127 IF (pla(i) > zero) THEN
128 hh(i) = cb(i)*cn(i)/pla(i)**(one-cn(i))
129 ELSE
130 hh(i) = zero
131 ENDIF
132 ENDIF
133 ENDIF
134 ENDDO
135
136
137
138 IF (epif > zero) THEN
139 DO i = 1,nel
140 IF (epdr(i) > zero) THEN
141 IF (vflag(i) /= 1) THEN
142 IF (israte(i) == 1) THEN
144 epsdot =
alpha*abs(epsp(i)) + (one-
alpha)*uvar(i,1)
145 uvar(i,1) = epsdot
146 ELSE
147 epsdot = abs(epsp(i))
148 ENDIF
149 ELSE
150 epsdot = uvar(i,1)
151 ENDIF
152 frate = one + (epsdot*epdr(i))**cp(i)
153 IF (icc(i)== 1) yldmax(i) = yldmax(i) * frate
154 IF ((nfunc > 0) .AND. (ca(i) /= zero)) THEN
155 yld(i) = yld(i) + (ca(i) + cb(i)*(pla(i)**cn(i)))*(frate-one)
156 IF (cn(i) == one) THEN
157 hh(i) = hh(i) + cb(i)*(frate-one)
158 ELSE
159 IF (pla(i) > zero) THEN
160 hh(i) = hh(i) + cb(i)*cn(i)/pla(i)**(one-cn(i))*(frate-one)
161 ENDIF
162 ENDIF
163 ELSE
164 yld(i) = yld(i) * frate
165 hh(i) = hh(i) * frate
166 ENDIF
167 ENDIF
168 ENDDO
169 ENDIF
170
171 DO i=1,nel
172 aa(i) = (e(i) + hh(i))*
area(i)
173 yld(i) =
min(yld(i),yldmax(i))
174 ff(i) = abs(
for(i)) - yld(i)*
area(i)
175 ff(i) =
max(zero,ff(i))
176 ENDDO
177
178 DO i=1,nel
179 dpla(i) = ff(i)/aa(i)
180 pla(i) = pla(i) + ff(i)/aa(i)
181 ENDDO
182
183 DO i=1,nel
184 for(i) = cvmgt(sign(yld(i)*
area(i),
for(i)),
for(i),ff(i) > zero)
185 ENDDO
186
187
188
189 DO i=1,nel
190 IF (off(i) < em01) off(i) = zero
191 IF (off(i) < one) off(i) = off(i)*four_over_5
192 ENDDO
193
194
195
196 nindx = 0
197 DO i = 1,nel
198 IF (off(i) == one) THEN
199 dmg = one
200 IF (epst(i) > epsr1(i)) THEN
201 dmg = (epsr2(i) - epst(i)) / (epsr2(i) - epsr1(i))
204 ENDIF
205
206 IF (dmg == zero .or. pla(i) >= epmax(i)) THEN
207 off(i) = four_over_5
208 idel7nok = 1
209 nindx = nindx+1
210 indx(nindx) = i
211 ENDIF
212
213 IF (vflag(i)==1) THEN
215 epsdot = dpla(i)/
max(em20,dt1)
216 uvar(i,1) =
alpha*epsdot + (one -
alpha)*uvar(i,1)
217 ENDIF
218 ENDIF
219 ENDDO
220
221 IF (nindx > 0) THEN
222 DO j=1,nindx
223 i = indx(j)
224#include "lockon.inc"
225 WRITE(iout,1000) ngl(i)
226 WRITE(istdo,1100) ngl(i),tt
227#include "lockoff.inc"
228 ENDDO
229 ENDIF
230
231 DO i=1,nel
232 sti(i) = sti(i)*off(i)
234 ENDDO
235
236 DO i=1,nel
237 eint(i) = eint(i) +
for(i)*epsp(i)*al(i)*dt1*half
238 ENDDO
239
240 1000 FORMAT(1x,'-- RUPTURE OF TRUSS ELEMENT NUMBER ',i10)
241 1100 FORMAT(1x,'-- RUPTURE OF TRUSS ELEMENT :',i10,' AT TIME :',g11.4)
242
243 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
for(i8=*sizetab-1;i8 >=0;i8--)