43
44
45
46 USE matparam_def_mod
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "tabsiz_c.inc"
55#include "comlock.inc"
56#include "units_c.inc"
57
58 INTEGER, INTENT(IN) :: NEL,NFUNC,NUPARAM,NUVAR,INLOC,L_PLANL
59 INTEGER ,INTENT(IN) :: NVARTMP
60 INTEGER, DIMENSION(NFUNC), INTENT(IN) :: IFUNC
61 INTEGER, DIMENSION(NEL), INTENT(IN) :: NGL
62 INTEGER ,DIMENSION(NEL,NVARTMP) ,INTENT(INOUT) :: VARTMP
63 my_real,
INTENT(IN) :: time,timestep
64 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
65 my_real,
DIMENSION(NEL),
INTENT(IN) ::
66 . rho0,depsxx,depsyy,depszz,
67 . depsxy,depsyz
68 . sigoxy,sigoyz,sigozx
69 my_real,
DIMENSION(L_PLANL*NEL),
INTENT(IN) :: planl
70 my_real,
DIMENSION(NEL),
INTENT(INOUT) ::
71 . epsd,dpla,pla,signxx,signyy,signzz,dmg,
72 . signxy,signyz,signzx,soundsp,et,off,yld
73 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
74 TYPE(MATPARAM_STRUCT_), INTENT(IN), TARGET :: MATPARAM
75
76
77
78 INTEGER :: NPF(SNPC)
80
81
82
83 INTEGER :: I,IFORM,NUMTABL,NINDX,INDX(NEL)
84 INTEGER ,DIMENSION(NEL) :: IAD,ILEN
86 my_real ,
DIMENSION(NEL) :: df,pla_dam,sig0xx,sig0yy,
87 . sig0zz,sig0xy,sig0yz,sig0zx
88 TYPE(TABLE_4D_),DIMENSION(:),POINTER :: TABLE
89
90c
91
92
93
94 epspf = uparam(10)
95 epspr = uparam(11)
96 iform = nint(uparam(13))
97
98
99 yfac2 = uparam(29)
100 DO i = 1,nel
101 IF (off(i) < em01) off(i) = zero
102 IF (off(i) < one) off(i) = off(i)*four_over_5
103 ENDDO
104
105
106 numtabl = matparam%NTABLE
107 table => matparam%TABLE(1:numtabl)
108
109
110
111
112 DO i = 1,nel
113 sig0xx(i) = sigoxx(i)/
max(one-dmg(i),em20)
114 sig0yy(i) = sigoyy(i)/
max(one-dmg(i),em20)
115 sig0zz(i) = sigozz(i)/
max(one-dmg(i),em20)
116 sig0xy(i) = sigoxy(i)/
max(one-dmg
117 sig0yz(i) = sigoyz(i)/
max(one-dmg(i),em20)
118 sig0zx(i) = sigozx(i)/
max(one-dmg(i),em20)
119 ENDDO
120
121
122
123
124 IF (iform == 1) THEN
126 1 nel ,nuparam,nuvar ,nfunc ,ifunc ,nvartmp,
127 2 npf ,tf ,time ,timestep,uparam ,vartmp ,
128 3 rho0 ,pla ,dpla ,et ,numtabl ,table ,
129 3 depsxx ,depsyy ,depszz ,depsxy ,depsyz ,depszx ,
130 4 sig0xx ,sig0yy ,sig0zz ,sig0xy ,sig0yz ,sig0zx ,
131 5 signxx ,signyy ,signzz ,signxy ,signyz ,signzx ,
132 6 soundsp,uvar ,off ,epsd ,yld )
133 ELSE
135 1 nel ,nuparam,nuvar ,nfunc ,ifunc ,nvartmp,
136 2 npf ,tf ,time ,timestep,uparam ,vartmp ,
137 3 rho0 ,pla ,dpla ,et ,numtabl ,table ,
138 3 depsxx ,depsyy ,depszz ,depsxy ,depsyz ,depszx
139 4 sig0xx ,sig0yy ,sig0zz ,sig0xy ,sig0yz ,sig0zx ,
140 5 signxx ,signyy ,signzz ,signxy ,signyz ,signzx ,
141 6 soundsp,uvar ,off ,epsd ,yld )
142 ENDIF
143
144
145
146
147 nindx = 0
148 IF (inloc > 0) THEN
149 pla_dam(1:nel) = planl(1:nel)
150 ELSE
151 pla_dam(1:nel) = pla(1:nel)
152 ENDIF
153
154 IF (ifunc(2) > 0) THEN
155
156 iad(1:nel) = npf(ifunc(2)) / 2 + 1
157 ilen(1:nel) = npf(ifunc(2)+1) / 2 - iad(1:nel) - vartmp(1:nel,7)
158
159 CALL vinter(tf,iad,vartmp(1:nel,7),ilen,nel,pla_dam,df
160
161 dmg(1:nel) = abs(yfac2)*dmg(1:nel)
162 DO i=1,nel
163 IF (dmg(i) >= one) THEN
164 dmg(i) = one
165 IF (off(i) == one) THEN
166 off(i) = four_over_5
167 nindx = nindx+1
168 indx(nindx) = i
169 ENDIF
170 ENDIF
171 ENDDO
172
173 ELSE
174
175 DO i = 1,nel
176 IF (pla_dam(i) >= epspf) THEN
177 dmg(i) = (pla_dam(i) - epspf)/ (epspr - epspf)
178 dmg(i) =
min(dmg(i),one)
179 ENDIF
180 IF (dmg(i) >= one) THEN
181 IF (off(i) == one) THEN
182 off(i) = four_over_5
183 nindx = nindx+1
184 indx(nindx) = i
185 ENDIF
186 ENDIF
187 ENDDO
188 ENDIF
189
190
191
192
193 DO i = 1,nel
194 signxx(i) = signxx(i)*(one-dmg(i))
195 signyy(i) = signyy(i)*(one-dmg(i))
196 signzz(i) = signzz(i)*(one-dmg(i))
197 signxy(i) = signxy(i)*(one-dmg(i))
198 signyz(i) = signyz(i)*(one-dmg(i))
199 signzx(i) = signzx(i)*(one-dmg(i))
200 ENDDO
201
202
203
204
205 IF (nindx > 0) THEN
206 DO i=1,nindx
207#include "lockon.inc"
208 WRITE(iout ,1000) ngl(indx(i))
209 WRITE(istdo,1100) ngl(indx(i)),time
210#include "lockoff.inc"
211 ENDDO
212 ENDIF
213
214 1000 FORMAT(1x,'RUPTURE (SAMP) OF SOLID ELEMENT NUMBER ',i10)
215 1100 FORMAT(1x,'RUPTURE (SAMP) OF SOLID ELEMENT NUMBER ',i10,'AT TIME :',g11
216
subroutine asso_plas76(nel, nuparam, nuvar, nfunc, ifunc, nvartmp, npf, tf, time, timestep, uparam, vartmp, rho0, pla, dpla, et, numtabl, table, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, soundsp, uvar, off, epsd, yld)
subroutine no_asso_plas76(nel, nuparam, nuvar, nfunc, ifunc, nvartmp, npf, tf, time, timestep, uparam, vartmp, rho0, pla, dpla, et, numtabl, table, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, soundsp, uvar, off, epsd, yld)
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)