44
45
46
47 USE matparam_def_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "mvsiz_p.inc"
56
57
58
59#include "scr05_c.inc"
60#include "tabsiz_c.inc"
61
62
63
64 INTEGER, INTENT(IN) :: NEL,NUVAR,ISMSTR
66 . time , timestep ,
67 . rho(nel), rho0(nel),
68 . epspxx(nel), epspyy(nel), epspzz(nel),
69 . epspxy(nel), epspyz(nel), epspzx(nel),
70 . depsxx(nel), depsyy(nel), depszz(nel),
71 . depsxy(nel), depsyz(nel), depszx(nel),
72 . epsxx(nel), epsyy(nel), epszz(nel),
73 . epsxy(nel), epsyz(nel), epszx(nel),
74 . sigoxx(nel), sigoyy(nel), sigozz(nel),
75 . sigoxy(nel), sigoyz(nel), sigozx(nel),
76 . mfxx(nel) , mfxy(nel), mfxz(nel),
77 . mfyx(nel) , mfyy(nel), mfyz(nel),
78 . mfzx(nel) , mfzy(nel), mfzz(nel),
79 . wzzdt(mvsiz),wyydt(mvsiz),wxxdt(mvsiz)
80 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MAT_PARAM
81
82
83
85 . signxx(nel), signyy(nel), signzz(nel),
86 . signxy(nel), signyz(nel), signzx(nel),
87 . soundsp(nel), viscmax(nel)
88
89
90
92 . uvar(nel,nuvar), off(nel)
93
94
95
96 INTEGER NPF(SNPC),NFUNC,IFUNC(NFUNC)
98 EXTERNAL finter
99
100
101
102 INTEGER I,J,K,KFP,IFORM,NORDER
103 my_real :: tensioncut,gmax,ffac
104 my_real,
DIMENSION(10) :: mu,al
106 . sigprv(3,mvsiz),ev(3,mvsiz),evm(3,mvsiz),dwdl(3,mvsiz),
107 . t1(3,mvsiz),sumdwdl(mvsiz),rv(mvsiz),p(mvsiz),
108 . dwdrv(mvsiz),rbulk,dpdmu,av(6,mvsiz),evv(3,mvsiz),
109 . dirprv(3,3,mvsiz),a(3,3),dpra(3,3),eigen(3)
110
111
112
113
114
115 norder = mat_param%IPARAM(1)
116 iform = mat_param%IPARAM(3)
117
118
119 DO i=1,norder
120 mu(i) = mat_param%UPARAM(i)
121 al(i) = mat_param%UPARAM(10+i)
122 END DO
123
124 gmax = zero
125 DO i=1,norder
126 gmax = gmax + mu(i) * al(i)
127 END DO
128
129 rbulk = mat_param%UPARAM(21)
130
131 tensioncut = mat_param%UPARAM(23)
132
133 ffac = mat_param%UPARAM(24)
134
135 kfp = ifunc(1)
136
137
138 DO i = 1,nel
139 av(1,i) = epsxx(i)
140 av(2,i) = epsyy(i)
141 av(3,i) = epszz(i)
142 av(4,i) = epsxy(i)*half
143 av(5,i) = epsyz(i)*half
144 av(6,i) = epszx(i)*half
145 ENDDO
146
147
148
149
150 IF (iresp == 1) THEN
152 ELSE
153 CALL valpvec(av,evv,dirprv,nel)
154 ENDIF
155
156
157
158 DO i = 1,nel
159
160 IF (ismstr == 0 .OR. ismstr == 2 .OR. ismstr == 4) THEN
161 ev(1,i) = exp(evv(1,i))
162 ev(2,i) = exp(evv(2,i))
163 ev(3,i) = exp(evv(3,i))
164
165 ELSEIF (ismstr == 10 .OR. ismstr == 12) THEN
166 ev(1,i) = sqrt(evv(1,i)+ one)
167 ev(2,i) = sqrt(evv(2,i)+ one)
168 ev(3,i) = sqrt(evv(3,i)+ one)
169
170 ELSE
171 ev(1,i) = evv(1,i)+ one
172 ev(2,i) = evv(2,i)+ one
173 ev(3,i) = evv(3,i)+ one
174 ENDIF
175 ENDDO
176
177
178
179 DO i = 1,nel
180 rv(i) = (ev(1,i)*ev(2,i)*ev(3,i))
181 ENDDO
182
183
184
185 DO i = 1,nel
186
187 evm(1,i) = ev(1,i)*rv(i)**(-third)
188 evm(2,i) = ev(2,i)*rv(i)**(-third)
189 evm(3,i) = ev(3,i)*rv(i)**(-third)
190
191
192 IF (kfp /= 0) THEN
193 p(i) = rbulk*ffac*finter(kfp,rv(i),npf,tf,dpdmu)
194
195 ELSE
196 p(i) = rbulk
197 ENDIF
198 ENDDO
199
200
201
202
203
204
205
206 DO i=1,nel
207 dwdl(1,i) = zero
208 dwdl(2,i) = zero
209 dwdl(3,i) = zero
210 DO j=1,norder
211 dwdl(1,i) = dwdl(1,i) + mu(j)*(evm(1,i)**al(j) - one)
212 dwdl(2,i) = dwdl(2,i) + mu(j)*(evm(2,i)**al(j) - one)
213 dwdl(3,i) = dwdl(3,i) + mu(j)*(evm(3,i)**al(j) - one)
214 END DO
215 ENDDO
216
217
218
219 DO i=1,nel
220
221 IF (iform == 1) THEN
222 dwdrv(i) = p(i)*(rv(i) - one)
223
224 ELSEIF (iform == 2) THEN
225 dwdrv(i) = p(i)*(one - one/rv(i))
226 ENDIF
227 sumdwdl(i) = (dwdl(1,i) + dwdl(2,i) + dwdl(3,i))*third
228 ENDDO
229
230
231 DO i = 1,nel
232 DO j = 1,3
233 sigprv(j,i) = (dwdl(j,i)-(sumdwdl(i)-rv(i)*dwdrv(i)))/rv(i)
234 ENDDO
235 ENDDO
236
237
238 DO i=1,nel
239 t1(1,i) = rv(i)*sigprv(1,i)/ev(1,i)
240 t1(2,i) = rv(i)*sigprv(2,i)/ev(2,i)
241 t1(3,i) = rv(i)*sigprv(3,i)/ev(3,i)
242 ENDDO
243
244
245 DO i=1,nel
246 DO j=1,3
247 IF (off(i) == zero .OR. t1(j,i) > abs(tensioncut)) THEN
248 sigprv(1,i) = zero
249 sigprv(2,i) = zero
250 sigprv(3,i) = zero
251 off(i) = zero
252 ENDIF
253 ENDDO
254 ENDDO
255
256
257 DO i=1,nel
258
259
260 signxx(i) = dirprv(1,1,i)*dirprv(1,1,i)*sigprv(1,i)
261 . + dirprv(1,2,i)*dirprv(1,2,i)*sigprv(2,i)
262 . + dirprv(1,3,i)*dirprv(1,3,i)*sigprv(3,i)
263
264 signyy(i) = dirprv(2,2,i)*dirprv(2,2,i)*sigprv(2,i)
265 . + dirprv(2,3,i)*dirprv(2,3,i)*sigprv(3,i)
266 . + dirprv(2,1,i)*dirprv(2,1,i)*sigprv(1,i)
267
268 signzz(i) = dirprv(3,3,i)*dirprv(3,3,i)*sigprv(3,i)
269 . + dirprv(3,1,i)*dirprv(3,1,i)*sigprv(1,i)
270 . + dirprv(3,2,i)*dirprv(3,2,i)*sigprv(2,i)
271
272 signxy(i) = dirprv(1,1,i)*dirprv(2,1,i)*sigprv(1,i)
273 . + dirprv(1,2,i)*dirprv(2,2,i)*sigprv(2,i)
274 . + dirprv(1,3,i)*dirprv(2,3,i)*sigprv(3,i)
275
276 signyz(i) = dirprv(2,2,i)*dirprv(3,2,i)*sigprv(2,i)
277 . + dirprv(2,3,i)*dirprv(3,3,i)*sigprv(3,i)
278 . + dirprv(2,1,i)*dirprv(3,1,i)*sigprv(1,i)
279
280 signzx(i) = dirprv(3,3,i)*dirprv(1,3,i)*sigprv(3,i)
281 . + dirprv(3,1,i)*dirprv(1,1,i)*sigprv(1,i)
282 . + dirprv(3,2,i)*dirprv(1,2,i)*sigprv(2,i)
283
284
285 uvar(i,1) =
max(sigprv(1,i),sigprv(2,i),sigprv(3,i))
286 uvar(i,2) =
min(sigprv(1,i),sigprv(2,i),sigprv(3,i))
287 uvar(i,3) = off(i)
288
289
290
291 soundsp(i) = sqrt((two_third*gmax+p(i))/rho(i))
292
293 viscmax(i) = zero
294 ENDDO
subroutine valpvecdp(sig, val, vec, nel)
subroutine valpvec(sig, val, vec, nel)