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 INTEGER ,INTENT(IN) :: NEL,IPLA,JTHE,NPTT,INLOC
60 INTEGER IOFF_DUCT(*)
63 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: loff
64 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: epsd_pg
65 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: epspxx,epspyy,epspxy
66 my_real ,
DIMENSION(NEL) :: off,sigy,vol,gs,thk,tstar,dpla,pla,thklyl,dplanl
67 my_real :: eint(nel,2),sigksi(mvsiz,5)
68 my_real,
DIMENSION(MVSIZ) ,
INTENT(IN) :: depsxx,depsyy,depsxy,depsyz,depszx
69 my_real,
DIMENSION(MVSIZ) ,
INTENT(INOUT) :: hardm,g_imp,epchk,off_old,etse
70 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: sigoxx,sigoyy,sigoxy,sigoyz,sigozx
71 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: sigbakxx,sigbakyy,sigbakxy
72 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: signxx,signyy,signxy,signyz,signzx
73 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: tempel
74 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: fheat
75 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsd
76 type (matparam_struct_) ,intent(in) :: mat_param
77
78
79
80 INTEGER :: I,ICC,IFORM,ISRATE,VP
81 my_real :: epmx,ca,cb,cn,cc,m_exp,young,g,a11,a12,nu,rhocp,tref,tmelt
82 my_real :: dav,deve1,deve2,deve3,deve4,z3,z4,fisokin,epdr,
ymax
83 my_real :: yld(mvsiz),epsdot(mvsiz),ezz(mvsiz)
84
85
86 ezz(1:mvsiz) = zero
87
88
89
90 iform = mat_param%iparam(1)
91 icc = mat_param%iparam(2)
92 vp = mat_param%iparam(3)
93 israte = mat_param%iparam(4)
94
95 young = mat_param%young
96 g = mat_param%shear
97 nu = mat_param%nu
98 a11 = young / (one - nu**2)
99 a12 = a11 *nu
100
101 ca = mat_param%uparam(1)
102 cb = mat_param%uparam(2)
103 cn = mat_param%uparam(3)
104 epmx = mat_param%uparam(4)
105 ymax = mat_param%uparam(5)
106 cc = mat_param%uparam(6)
107 epdr = mat_param%uparam(7)
108 epdr =
max(epdr*dt1, em20)
109 fisokin= mat_param%uparam(8)
110
111 tref = mat_param%therm%tref
112 tmelt = mat_param%therm%tmelt
113 rhocp = mat_param%therm%rhocp
114
115 IF (iform == 1) THEN
116 z3 = mat_param%uparam(10)
117 z4 = mat_param%uparam(11)
118 m_exp = one
119 ELSE
120 z3 = zero
121 z4 = zero
122 m_exp = mat_param%uparam(10)
123 DO i=1,nel
124 tstar(i) =
max( zero, (tempel(i)-tref)/(tmelt-tref) )
125 ENDDO
126 END IF
127
128
129
130
131
132 IF (vp == 1) THEN
133 DO i=1,nel
134 epsdot(i) = epsd(i)*dt1
135 ENDDO
136
137 ELSEIF (vp == 2) THEN
138 DO i=1,nel
139 epsd(i) = asrate*epsd_pg(i) + (one-asrate)*epsd(i)
140 epsdot(i) = epsd(i) * dt1
141
142
143 ENDDO
144
145 ELSEIF (vp == 3) THEN
146 DO i=1,nel
147 dav = (epspxx(i)+epspyy(i))*third
148 deve1 = epspxx(i) - dav
149 deve2 = epspyy(i) - dav
150 deve3 = - dav
151 deve4 = half*epspxy(i)
152 epsdot(i) = half*(deve1**2 + deve2**2 + deve3**2) + deve4**2
153 epsdot(i) = sqrt(three*epsdot(i))/three_half
154 IF (israte > 0) THEN
155 epsdot(i) = asrate*epsdot(i) + (one - asrate)*epsd(i)
156 ENDIF
157 epsd(i) = epsdot(i)
158 epsdot(i) = epsdot(i)*dt1
159 ENDDO
160 ENDIF
161
162
163
164 CALL m2cplr(nel ,ezz ,off_old ,pla ,
165 2 ipla ,tempel ,z3 ,z4 ,m_exp ,
166 3 iform ,etse ,gs ,epsdot ,vp ,
167 4 israte ,yld ,g ,a11 ,a12 ,
168 5 nu ,ca ,cb ,cn ,
ymax ,
169 6 epchk ,young ,cc ,epdr ,icc ,
170 7 dpla ,tstar ,fisokin ,g_imp ,sigksi ,
171 8 hardm ,depsxx ,depsyy ,depsxy ,
172 9 depsyz ,depszx ,signxx ,signyy ,signxy ,
173 a signyz ,signzx ,sigbakxx,sigbakyy,sigbakxy,
174 b sigoxx ,sigoyy ,sigoxy ,sigoyz ,sigozx )
175
176
177
178
179 IF (vp == 1) THEN
180 DO i=1,nel
181 epsdot(i) = dpla(i)/
max(em20,dt1)
182 epsd(i) = asrate*epsdot(i) + (one - asrate)*epsd(i)
183 ENDDO
184 ENDIF
185
186 DO i=1,nel
187 sigy(i) = sigy(i) + yld(i)/nptt
188 ENDDO
189
190
191
192 DO i=1,nel
193 IF (off(i) == off_old(i) .and. off(i) > zero) THEN
194 IF (off(i) == one .and. epchk(i) >= epmx) THEN
195 off(i)= four_over_5
196 ioff_duct(i) = 1
197 ELSE IF (off(i) < one ) THEN
198 off(i) = off(i)*four_over_5
199 ENDIF
200 ENDIF
201 ENDDO
202
203
204
205 DO i=1,nel
206 IF (inloc > 0) THEN
207 IF (loff(i) == one) THEN
208 ezz(i) = -nu*(signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/young
209 ezz(i) = ezz(i) -
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/yld(i)
210 ENDIF
211 ELSE
212 ezz(i) = -(depsxx(i)+depsyy(i))*nu-(one - two*nu)*ezz(i)
213 ezz(i) = ezz(i)/(one-nu)
214 ENDIF
215 thk(i) = thk(i) + ezz(i) * thklyl(i)*off(i)
216 ENDDO
217
218
219
220 IF (jthe /= 0) THEN
221
222 DO i=1,nel
223 fheat(i) = fheat(i) + sigy(i)*dpla(i)*vol(i) * mat_param%THERM%EFRAC
224 ENDDO
225 ELSEIF (rhocp > zero) THEN
226 DO i=1,nel
227 tempel(i) = tempel(i) + sigy(i)*dpla(i) / rhocp
228
229
230 ENDDO
231 END IF
232
233 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
subroutine m2cplr(nel, ezz, off, pla, ipla, temp, c3, c4, m_exp, iform, etse, gs, epsp, vp, israte, yld, g, a1, a2, nu, ca0, cb0, cn, ymax0, epchk, young, cc, epdr, icc, dpla, tstar, fisokin, gama_imp, signor, hardm, depsxx, depsyy, depsxy, depsyz, depszx, signxx, signyy, signxy, signyz, signzx, sigbakxx, sigbakyy, sigbakxy, sigoxx, sigoyy, sigoxy, sigoyz, sigozx)