34
35
36
37#include "implicit_f.inc"
38
39
40
41#include "param_c.inc"
42#include "com04_c.inc"
43
44
45
46 INTEGER ,INTENT(IN) :: IMAT
47 INTEGER ,INTENT(IN) :: NEL,,NUVAR
48 INTEGER ,DIMENSION(NPROPMI,NUMMAT) ,INTENT(IN) :: IPM
50 my_real ,
DIMENSION(NEL) ,
INTENT(IN) ::
51 . epsxx,depsxx,depsxy,depsxz,sigoxx,sigoxy,sigoxz,
52 . epsxy,epsxz
53 my_real ,
DIMENSION(*) ,
INTENT(IN) :: uparam
54
55
56
57 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: signxx,signxy,signxz
58 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT):: uvar
59
60
61
62 INTEGER :: I,IADBUF
63 my_real :: ddexx,ddexy,ddexz,depsdxx,dexx,depsvxx,depsvxy,depsvxz,dp
64 my_real,
DIMENSION(NEL) :: bulk,g_ins,g_inf,ge,ge2,gv,gv2,beta,c1,c2,
65 . epspxx,epspxy,epspxz
66
67
68
69 iadbuf = ipm(7,imat)-1
70 DO i=1,nel
71 bulk(i) = uparam(iadbuf+1)
72 g_ins(i) = uparam(iadbuf+2)
73 g_inf(i) = uparam(iadbuf+3)
74 beta(i) = uparam(iadbuf+4)
75 ENDDO
76
77 ge(1:nel) = g_inf(1:nel)
78 gv(1:nel) = g_ins(1:nel) - g_inf(1:nel)
79 ge2(1:nel) = ge(1:nel) * two
80 gv2(1:nel) = gv(1:nel) * two
81 c1(1:nel) = one - exp(-beta(1:nel)*timestep)
82 c2(1:nel) =-c1(1:nel) / beta(1:nel)
83 epspxx(1:nel) = depsxx(1:nel)/
max(em20,timestep)
84 epspxy(1:nel) = depsxy(1:nel
85 epspxz(1:nel) = depsxz(1:nel)/
max(em20,timestep)
86
87 DO i=1,nel
88 ddexx = two_third*depsxx(i)
89 ddexy = depsxy(i)
90 ddexz = depsxz(i)
91
92 depsdxx = two_third*epspxx(i)
93 dexx = two_third*epsxx(i)
94
95 depsvxx = c1(i)*(dexx - uvar(i,1)) + c2(i)*depsdxx
96 depsvxy = c1(i)*(epsxy(i) - uvar(i,2)) + c2(i)*epspxy(i)
97 depsvxz = c1(i)*(epsxz(i) - uvar(i,3)) + c2(i)*epspxz(i)
98 dp = bulk(i)*depsxx(i)
99
100 signxx(i) = sigoxx(i) + ge2(i)*ddexx - gv2(i)*depsvxx + dp
101 signxy(i) = sigoxy(i) + ge(i) *ddexy - gv(i) *depsvxy
102 signxz(i) = sigoxz(i) + ge(i) *ddexz - gv(i) *depsvxz
103
104 uvar(i,1) = uvar(i,1) + depsvxx + ddexx
105 uvar(i,2) = uvar(i,2) + depsvxy + ddexy
106 uvar(i,3) = uvar(i,3) + depsvxz + ddexz
107
108 END DO
109
110 RETURN