OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
no_asso_lplas76c.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| no_asso_lplas76c ../engine/source/materials/mat/mat076/no_asso_lplas76c.F
25!||--- called by ------------------------------------------------------
26!|| sigeps76c ../engine/source/materials/mat/mat076/sigeps76c.F
27!||--- calls -----------------------------------------------------
28!|| table_mat_vinterp ../engine/source/materials/tools/table_mat_vinterp.F
29!|| vinter ../engine/source/tools/curve/vinter.F
30!||--- uses -----------------------------------------------------
31!|| table4d_mod ../common_source/modules/table4d_mod.F
32!|| table_mat_vinterp_mod ../engine/source/materials/tools/table_mat_vinterp.F
33!||====================================================================
34 SUBROUTINE no_asso_lplas76c(
35 . NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
36 . NPF ,TF ,NUMTABL ,TABLE ,
37 . TIME ,TIMESTEP,UPARAM ,UVAR ,RHO ,
38 . DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
39 . SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
40 . SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
41 . PLA ,DPLA ,EPSD ,OFF ,GS ,
42 . YLD ,SOUNDSP ,DEZZ ,INLOC ,DPLANL ,
43 . NVARTMP, VARTMP ,LOFF )
44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE table4d_mod
49C-----------------------------------------------
50C I m p l i c i t T y p e s
51C-----------------------------------------------
52#include "implicit_f.inc"
53C-----------------------------------------------
54C G l o b a l P a r a m e t e r s
55C-----------------------------------------------
56#include "tabsiz_c.inc"
57C-----------------------------------------------
58C I N P U T A r g u m e n t s
59C-----------------------------------------------
60 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,NFUNC,NUMTABL,INLOC
61 INTEGER, INTENT(IN) :: NVARTMP
62 INTEGER, DIMENSION(NFUNC), INTENT(IN) :: IFUNC
63 my_real, INTENT(IN) :: TIME,TIMESTEP
64 my_real, DIMENSION(NUPARAM), INTENT(IN) :: UPARAM
65 my_real, DIMENSION(NEL), INTENT(IN) :: GS,RHO,DPLANL,
66 . DEPSXX,DEPSYY,DEPSXY,DEPSYZ,DEPSZX,
67 . SIGOXX,SIGOYY,SIGOXY,SIGOYZ,SIGOZX
68 TYPE(TABLE_4D_), DIMENSION(NUMTABL), INTENT(IN) :: TABLE
69 my_real, DIMENSION(NEL), INTENT(IN) :: loff
70C-----------------------------------------------
71C O U T P U T A r g u m e n t s
72C-----------------------------------------------
73 my_real, DIMENSION(NEL), INTENT(OUT) ::
74 . signxx,signyy,signxy,signyz,signzx,dezz,dpla
75C-----------------------------------------------
76C I N P U T O U T P U T A r g u m e n t s
77C-----------------------------------------------
78 INTEGER, DIMENSION(NEL,NVARTMP), INTENT(INOUT) :: VARTMP
79 my_real, DIMENSION(NEL,NUVAR) , INTENT(INOUT) :: UVAR
80 my_real, DIMENSION(NEL), INTENT(INOUT) :: OFF,YLD,PLA,EPSD,SOUNDSP
81C-----------------------------------------------
82C VARIABLES FOR FUNCTION INTERPOLATION
83C-----------------------------------------------
84 INTEGER :: NPF(SNPC)
85 my_real :: TF(STF)
86C-----------------------------------------------
87C L o c a l V a r i a b l e s
88C-----------------------------------------------
89 INTEGER I,II,ITER,NITER,ICONV,ICAS,NINDX
90 INTEGER, PARAMETER :: FUNC_TRAC = 1
91 integer, PARAMETER :: func_comp = 2
92 INTEGER, PARAMETER :: FUNC_SHEAR = 3
93 INTEGER, DIMENSION(NEL) :: INDX,IAD,ILEN
94 my_real :: lam,dlam,df1,epsdot,da0,da1,da2,
95 . ca,cb,aa,bb,cc,a1s,a1c,a1t,a2s,a2c,a2t,e,nu,nu1,nupc,xfac,
96 . yy,dx2,dfdsigdlam,yld_norm,epd_min,epd_max,
97 . normxx,normyy,normxy,normzz,normyz,normzx,alfa,alfi,dtinv,
98 . normgxx,normgyy,normgxy,normgzz,sig_dfdsig,
99 . epdt_min,epdt_max,epdc_min,epdc_max,epds_min,epds_max
100 my_real, DIMENSION(NEL) :: ff,p,svm,svm2,ylds,sxx,syy,sxy,szz,
101 . dpxx,dpyy,dpxy,dpzz,sigt,sigc,sigs,dft,dfc,dfs,a11_2d,a12_2d,g,
102 . a0,a1,a2,nup,epspt,epspc,epsps,epdt,epdc,epds,dydx,
103 . epdt_f,epdc_f,epds_f,dplat,dplac,dplas,gf,alpha,dlam_nl
104 my_real, DIMENSION(NEL,2) :: xvec
105 my_real, DIMENSION(NUMTABL) :: tfac
106 my_real, DIMENSION(NFUNC) :: yfac
107 LOGICAL :: CONV(NEL)
108 my_real, PARAMETER :: SFAC = 1.05d0 ! Security factor of ICONV
109c-----------------------------------------------
110c associated plasticity with quadratic yield function
111c-----------------------------------------
112c icas ifunt | ifunc | ifuncs
113c -1 1 | 1 | 1
114c 0 1 | 0 | 0
115c 1 1 | 1 | 0
116c 2 1 | 0 | 1
117c-----------------------------------------
118c UVAR(1) : EPSPT
119c UVAR(2) : EPSPC
120c UVAR(3) : EPSPS
121c UVAR(4) : EPDT
122c UVAR(5) : EPDC
123c UVAR(6) : EPDS
124c UVAR(7) : NUP
125C=======================================================================
126c
127 !=======================================================================
128 ! - INITIALISATION OF COMPUTATION ON TIME STEP
129 !=======================================================================
130 ! Recovering model parameters
131 ! -> Elastic parameters
132 e = uparam(1)
133 nu = uparam(5)
134 ! -> Plastic parameters
135 nupc = uparam(9)
136 ! -> Flags
137 iconv = nint(uparam(15))
138 icas = uparam(17)
139 xfac = uparam(18)
140 alfa = min(one, uparam(16)*timestep)! filtering coefficient for plastic strain rate
141 epdt_min = uparam(19)
142 epdt_max = uparam(20)
143 epdc_min = uparam(21)
144 epdc_max = uparam(22)
145 epds_min = uparam(23)
146 epds_max = uparam(24)
147 tfac(1) = uparam(25)
148 tfac(2) = uparam(26)
149 tfac(3) = uparam(27)
150 yfac(1) = uparam(28)
151 yfac(2) = uparam(29)
152 a11_2d(1:nel) = uparam(2) ! E / (ONE - NU*NU)
153 a12_2d(1:nel) = uparam(3) ! AA2 * NU
154 g(1:nel) = uparam(4)
155 nu1 = nu/(one - nu) ! aa1/aa2
156 alfi = one - alfa
157 dtinv = one / max(em20, timestep)
158c
159 ! Initialize plastic Poisson ratio
160 IF (time == zero) THEN
161 nup(1:nel) = nupc
162 uvar(1:nel,7) = nupc
163 ELSE
164 nup(1:nel) = uvar(1:nel,7)
165 ENDIF
166c
167 ! Recovering internal variables
168 epspt(1:nel) = uvar(1:nel,1)
169 epspc(1:nel) = uvar(1:nel,2)
170 epsps(1:nel) = uvar(1:nel,3)
171 epdt_f(1:nel) = uvar(1:nel,4)
172 epdc_f(1:nel) = uvar(1:nel,5)
173 epds_f(1:nel) = uvar(1:nel,6)
174 dplat(1:nel) = zero
175 dplac(1:nel) = zero
176 dplas(1:nel) = zero
177 DO i=1,nel
178 epdt(i) = min(epdt_max, max(epdt_f(i),epdt_min)) * xfac
179 epdc(i) = min(epdc_max, max(epdc_f(i),epdc_min)) * xfac
180 epds(i) = min(epds_max, max(epds_f(i),epds_min)) * xfac
181 ENDDO
182c
183 ! Computation of yield stresses
184 xvec(1:nel,1) = epspt(1:nel)
185 xvec(1:nel,2) = epdt(1:nel)
186 CALL table_mat_vinterp(table(func_trac),nel,nel,vartmp(1,1),xvec,sigt,dft)
187 sigt(1:nel) = sigt(1:nel) * tfac(1)
188 dft(1:nel) = dft(1:nel) * tfac(1)
189 IF (table(func_comp)%NOTABLE > 0) THEN
190 xvec(1:nel,1) = epspc(1:nel)
191 xvec(1:nel,2) = epdc(1:nel)
192 CALL table_mat_vinterp(table(func_comp),nel,nel,vartmp(1,3),xvec,sigc,dfc)
193 sigc(1:nel) = sigc(1:nel) * tfac(2)
194 dfc(1:nel) = dfc(1:nel) * tfac(2)
195 END IF
196 IF (table(func_shear)%NOTABLE > 0) THEN
197 xvec(1:nel,1) = epsps(1:nel)
198 xvec(1:nel,2) = epds(1:nel)
199 CALL table_mat_vinterp(table(func_shear),nel,nel,vartmp(1,5),xvec,sigs,dfs)
200 sigs(1:nel) = sigs(1:nel) * tfac(3)
201 dfs(1:nel) = dfs(1:nel) * tfac(3)
202 END IF
203 IF (icas == 0) THEN
204 sigc(1:nel) = sigt(1:nel)
205 sigs(1:nel) = sigt(1:nel)/sqr3
206 ELSEIF (icas == 1) THEN
207 DO i=1,nel
208 sigs(i) = one /(sigt(i) + sigc(i))/sqr3
209 sigs(i) = two*sigt(i)*sigc(i)*sigs(i)
210 ENDDO
211 ENDIF
212 ! Ensured convexity
213 IF (iconv == 1) THEN
214 DO i=1,nel
215 conv(i) = .false.
216 aa = one /(sigt(i) + sigc(i))/sqr3
217 IF (sigs(i) < sfac*two*sigt(i)*sigc(i)*aa) THEN
218 sigs(i) = sfac*two*sigt(i)*sigc(i)*aa
219 conv(i) = .true.
220 ENDIF
221 END DO
222 END IF
223 DO i=1,nel
224 a0(i) = sigs(i)*sqr3
225 a1(i) = three*(((sigt(i)-sigc(i))/(sigt(i)+sigc(i))) -
226 . a0(i)*((sigt(i)-sigc(i))/(sigt(i)*sigc(i))))
227 a2(i) = eighteen*((one/(sigt(i)+sigc(i)))-a0(i)/(two*sigt(i)*sigc(i)))
228 END DO
229c
230 !========================================================================
231 ! - COMPUTATION OF TRIAL VALUES
232 !========================================================================
233 DO i=1,nel
234 ! Computation of the trial stress tensor
235 signxx(i) = sigoxx(i) + a11_2d(i)*depsxx(i) + a12_2d(i)*depsyy(i)
236 signyy(i) = sigoyy(i) + a11_2d(i)*depsyy(i) + a12_2d(i)*depsxx(i)
237 signxy(i) = sigoxy(i) + depsxy(i)*g(i)
238 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
239 signzx(i) = sigozx(i) + depszx(i)*gs(i)
240 p(i) = -(signxx(i) + signyy(i)) * third
241 ! Computation of the deviatoric trial stress tensor
242 sxx(i) = signxx(i) + p(i)
243 syy(i) = signyy(i) + p(i)
244 szz(i) = p(i)
245 dezz(i)= -nu1 * (depsxx(i) + depsyy(i))
246 soundsp(i) = sqrt(a11_2d(i)/rho(i))
247 ENDDO
248c
249 !========================================================================
250 ! - COMPUTATION OF YIELD FONCTION
251 !========================================================================
252 ! Alpha coefficient for non associated function
253 DO i = 1,nel
254 alpha(i) = (nine/two)*((one-two*nup(i))/(one+nup(i)))
255 ENDDO
256 niter = 4
257 nindx = 0
258 DO i=1,nel
259 svm2(i) = three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
260 svm(i) = sqrt(max(em20,svm2(i)))
261 ylds(i) = svm(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
262 IF (ylds(i) > 0 .AND. off(i) == one) THEN
263 nindx = nindx + 1
264 indx(nindx) = i
265 ENDIF
266 ENDDO
267c
268 !====================================================================
269 ! - PLASTIC RETURN MAPPING WITH CUTTING PLANE METHOD
270 !====================================================================
271 IF (nindx > 0) THEN
272c
273 ! Loop over the iterations
274 DO iter = 1,niter
275c
276 ! Loop over yielding elements
277 DO ii = 1,nindx
278 i = indx(ii)
279c
280 ! Note : in this part, the purpose is to compute for each iteration
281 ! a plastic multiplier allowing to update internal variables to satisfy
282 ! the consistency condition using the cutting plane algorithm
283 ! Its expression at each iteration is : DLAMBDA = - PHI/DPHI_DLAMBDA
284 ! -> PHI : current value of yield function (known)
285 ! -> DPHI_DLAMBDA : derivative of PHI with respect to DLAMBDA by taking
286 ! into account of internal variables kinetic :
287 ! plasticity ...
288c
289 ! function g for non associated flow rule
290 gf(i) = sqrt(max(em20,(svm(i)**2)+alpha(i)*p(i)**2))
291c
292 ! dgf/dsig for non-associated plastic flow
293 normgxx = (three_half*sxx(i) - third*alpha(i)*p(i) ) /gf(i)
294 normgyy = (three_half*syy(i) - third*alpha(i)*p(i) ) /gf(i)
295 normgzz = (three_half*szz(i) - third*alpha(i)*p(i) ) /gf(i)
296 normgxy = three*signxy(i)/gf(i)
297c
298 ! df/dsig
299 cb = a1(i) + two*a2(i)*p(i)
300 normxx = three_half * sxx(i)/svm(i) + cb /three ! df/dsig
301 normyy = three_half * syy(i)/svm(i) + cb /three
302 normzz = three_half * szz(i)/svm(i) + cb /three
303 normxy = three * signxy(i)/svm(i)
304c
305 ! DF/DSIG * DSIG/DDLAM
306 dfdsigdlam = normxx * (a11_2d(i)*normgxx + a12_2d(i)*normgyy)
307 . + normyy * (a11_2d(i)*normgyy + a12_2d(i)*normgxx)
308 . + normxy * normgxy * g(i)
309c
310 yld_norm = svm(i)/gf(i)
311 bb = three_half/(one + nup(i))
312 dft(i) = dft(i) * yld_norm * bb
313 IF (table(func_comp)%NOTABLE > 0) dfc(i) = dfc(i) * yld_norm * bb
314 IF (table(func_shear)%NOTABLE > 0) dfs(i) = dfs(i) * yld_norm * sqr3/two
315 IF (icas == 0) THEN
316 dfc(i) = dft(i)
317 dfs(i) = (one/sqr3)*dft(i)
318 ELSEIF (icas == 1) THEN
319 aa = one /(sigt(i) + sigc(i))/sqr3
320 dfs(i) = two*(dft(i)*sigc(i) + dfc(i)*sigt(i))*aa
321 . - two*sqr3*sigc(i)*sigt(i)*(dft(i) + dfc(i))*aa*aa
322 ENDIF
323 IF (iconv == 1) THEN
324 IF (conv(i)) THEN
325 aa = one /(sigt(i) + sigc(i))/sqr3
326 dfs(i) = sfac*(two*(dft(i)*sigc(i) + dfc(i)*sigt(i))*aa
327 . - two*sqr3*sigc(i)*sigt(i)*(dft(i) + dfc(i))*aa*aa)
328 ENDIF
329 ENDIF
330c
331 ! derivatives dAi/dlam
332 cc = sigs(i)/sigc(i)/sigt(i)
333c
334 a1s = -three*sqr3*(sigt(i)-sigc(i))/(sigt(i)*sigc(i))
335 a1c = three*( (sigs(i)*sqr3/( sigc(i)**2)) -
336 . (two*sigt(i)/( (sigt(i) + sigc(i))**2)) )
337 a1t = three*(two*sigc(i)/((sigt(i) + sigc(i))**2) -
338 . (sigs(i)*sqr3/(sigt(i)**2)))
339c
340 a2s = -nine*sqr3/(sigt(i)*sigc(i))
341 a2c = eighteen*((sigs(i)*sqr3/(two*sigt(i)*(sigc(i)**2))) -
342 . one/((sigt(i)+sigc(i))**2))
343 a2t = eighteen*((sigs(i)*sqr3/(two*sigc(i)*(sigt(i)**2))) -
344 . one/((sigt(i)+sigc(i))**2))
345c
346 da0 = sqr3*dfs(i)
347 da1 = a1s*dfs(i) + a1t*dft(i) + a1c*dfc(i)
348 da2 = a2s*dfs(i) + a2t*dft(i) + a2c*dfc(i)
349c
350 ff(i) = dfdsigdlam + da0 + p(i)*da1 + p(i)**2 * da2
351 ff(i) = sign(max(abs(ff(i)),em20) ,ff(i))
352c
353 dlam = ylds(i)/ff(i)
354 ! Plastic strains tensor update
355 dpxx(i) = dlam * normgxx
356 dpyy(i) = dlam * normgyy
357 dpzz(i) = dlam * normgzz
358 dpxy(i) = dlam * normgxy
359c
360 ! Elasto-plastic stresses update
361 signxx(i) = signxx(i) - (a11_2d(i)*dpxx(i) + a12_2d(i)*dpyy(i))
362 signyy(i) = signyy(i) - (a11_2d(i)*dpyy(i) + a12_2d(i)*dpxx(i))
363 signxy(i) = signxy(i) - dpxy(i)*g(i)
364c
365 ! compute EPSPC(I), EPSPT(I), EPSPS(I)
366 epspt(i) = epspt(i) + dlam* yld_norm * bb
367 epspc(i) = epspt(i)
368 epsps(i) = epsps(i) + dlam* yld_norm*sqr3/two
369c
370 pla(i) = pla(i) + dlam*yld_norm*off(i)
371 dpla(i) = dpla(i) + dlam *yld_norm
372 dplat(i) = dplat(i) + dlam* yld_norm*bb
373 dplac(i) = dplat(i)
374 dplas(i) = dplas(i) + dlam* yld_norm*sqr3/two
375c
376 ENDDO
377c
378 ! Update Yld values and criterion with new plastic strain and strain rate
379 xvec(1:nel,1) = epspt(1:nel)
380 xvec(1:nel,2) = epdt(1:nel)
381 CALL table_mat_vinterp(table(func_trac),nel,nel,vartmp(1,1),xvec,sigt,dft)
382 sigt(1:nel) = sigt(1:nel) * tfac(1)
383 dft(1:nel) = dft(1:nel) * tfac(1)
384 IF (table(func_comp)%NOTABLE > 0) THEN
385 xvec(1:nel,1) = epspc(1:nel)
386 xvec(1:nel,2) = epdc(1:nel)
387 CALL table_mat_vinterp(table(func_comp),nel,nel,vartmp(1,3),xvec,sigc,dfc)
388 sigc(1:nel) = sigc(1:nel) * tfac(2)
389 dfc(1:nel) = dfc(1:nel) * tfac(2)
390 END IF
391 IF (table(func_shear)%NOTABLE > 0) THEN
392 xvec(1:nel,1) = epsps(1:nel)
393 xvec(1:nel,2) = epds(1:nel)
394 CALL table_mat_vinterp(table(func_shear),nel,nel,vartmp(1,5),xvec,sigs,dfs)
395 sigs(1:nel) = sigs(1:nel) * tfac(3)
396 dfs(1:nel) = dfs(1:nel) * tfac(3)
397 END IF
398 IF (icas == 0) THEN
399 DO ii = 1,nindx
400 i = indx(ii)
401 sigc(i) = sigt(i)
402 sigs(i) = sigt(i)/sqr3
403 ENDDO
404 ELSEIF (icas == 1) THEN
405 DO ii = 1,nindx
406 i = indx(ii)
407 sigs(i) = one /(sigt(i) + sigc(i))/sqr3
408 sigs(i) = two*sigt(i)*sigc(i)*sigs(i)
409 ENDDO
410 ENDIF
411 IF (iconv == 1) THEN
412 DO ii = 1,nindx
413 i = indx(ii)
414 conv(i) = .false.
415 aa = one /(sigt(i) + sigc(i))/sqr3
416 IF (sigs(i) < sfac*two*sigt(i)*sigc(i)*aa) THEN
417 sigs(i) = sfac*two*sigt(i)*sigc(i)*aa
418 conv(i) = .true.
419 ENDIF
420 END DO
421 END IF
422 DO ii = 1,nindx
423 i = indx(ii)
424 a0(i) = sigs(i)*sqr3
425 a1(i) = three*(((sigt(i)-sigc(i))/(sigt(i)+sigc(i))) -
426 . a0(i)*((sigt(i)-sigc(i))/(sigt(i)*sigc(i))))
427 a2(i) = eighteen*((one/(sigt(i)+sigc(i)))-a0(i)/(two*sigt(i)*sigc(i)))
428 END DO
429c
430 ! Update yield function value
431 DO ii = 1,nindx
432 i = indx(ii)
433 p(i) = -third*(signxx(i) + signyy(i) )
434 sxx(i) = signxx(i) + p(i)
435 syy(i) = signyy(i) + p(i)
436 szz(i) = p(i)
437 svm2(i)= three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2
438 svm(i) = sqrt(svm2(i))
439 ylds(i) = svm(i) - a0(i) - a1(i)*p(i) - a2(i)*p(i)*p(i)
440 IF (inloc == 0) THEN
441 dezz(i) = dezz(i) + nu1*(dpxx(i) + dpyy(i)) + dpzz(i)
442 ENDIF
443 ENDDO
444 ENDDO ! End Newton iterations
445 ENDIF ! Plasticity
446c
447 !====================================================================
448 ! - UPDATE PLASTIC POISSON RATIO
449 !====================================================================
450 IF (ifunc(1) > 0) THEN
451 iad(1:nel) = npf(ifunc(1)) / 2 + 1
452 ilen(1:nel) = npf(ifunc(1)+1) / 2 - iad(1:nel) - vartmp(1:nel,8)
453!
454 CALL vinter(tf,iad,vartmp(1:nel,8),ilen,nel,pla,dydx,nup)
455!
456 uvar(1:nel,7) = yfac(1) * nup(1:nel)
457 uvar(1:nel,7) = max(zero, min(nup(1:nel), half))
458 END IF
459c
460 !====================================================================
461 ! - NON-LOCAL THICKNESS VARIATION
462 !====================================================================
463 IF (inloc > 0) THEN
464 DO i = 1,nel
465 IF (loff(i) == one) THEN
466 alpha(i)= (nine/two)*((one-two*nup(i))/(one+nup(i)))
467 gf(i) = sqrt(max(em20,(svm(i)**2)+alpha(i)*p(i)**2))
468 normgxx = (three_half*sxx(i) - third*alpha(i)*p(i))/gf(i)
469 normgyy = (three_half*syy(i) - third*alpha(i)*p(i))/gf(i)
470 normgzz = (three_half*szz(i) - third*alpha(i)*p(i))/gf(i)
471 yld_norm = svm(i)/gf(i)
472 IF (yld_norm /= zero) THEN
473 dlam_nl(i) = (one/yld_norm)*max(dplanl(i),zero)
474 dezz(i) = dezz(i) + nu1*(dlam_nl(i)*normgxx)
475 . + nu1*(dlam_nl(i)*normgyy)
476 . + dlam_nl(i)*normgzz
477 ENDIF
478 ENDIF
479 ENDDO
480 ENDIF
481c
482 !====================================================================
483 ! - STORING NEW VALUES
484 !====================================================================
485 uvar(1:nel,1) = epspt(1:nel)
486 uvar(1:nel,2) = epspc(1:nel)
487 uvar(1:nel,3) = epsps(1:nel)
488 uvar(1:nel,4) = alfa*dplat(1:nel)*dtinv + alfi*epdt_f(1:nel)
489 uvar(1:nel,5) = alfa*dplac(1:nel)*dtinv + alfi*epdc_f(1:nel)
490 uvar(1:nel,6) = alfa*dplas(1:nel)*dtinv + alfi*epds_f(1:nel)
491 epsd(1:nel) = alfa*dpla(1:nel)*dtinv + alfi*epsd(1:nel)
492c
493 END
#define alpha
Definition eval.h:35
subroutine func_comp(table, ntable, nptmax, npt_trac, npt_shear, npt_comp, x_comp, y_comp, nup)
Definition law76_upd.F:344
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine table_mat_vinterp(table, dimx, nel, ipos, xx, yy, dydx)
subroutine no_asso_lplas76c(nel, nuparam, nuvar, nfunc, ifunc, npf, tf, numtabl, table, time, timestep, uparam, uvar, rho, depsxx, depsyy, depsxy, depsyz, depszx, sigoxx, sigoyy, sigoxy, sigoyz, sigozx, signxx, signyy, signxy, signyz, signzx, pla, dpla, epsd, off, gs, yld, soundsp, dezz, inloc, dplanl, nvartmp, vartmp, loff)
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)
Definition vinter.F:72