32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48!----------------------------------------------------------------------------
49
50
51
52#include "implicit_f.inc"
53
54
55
56
57
58
59
60 INTEGER,INTENT(IN) :: NUMMAT
61 INTEGER,INTENT(IN) :: NPROPM
62 INTEGER,INTENT(IN) :: IFLAG
63 INTEGER,INTENT(IN) :: NEL
64 INTEGER,INTENT(IN) :: MAT(NEL)
65 my_real,
INTENT(IN) :: pm(npropm,nummat)
74 my_real,
INTENT(INOUT) :: eint(nel)
75 my_real,
INTENT(INOUT) :: psh(nel)
76 my_real,
INTENT(INOUT) :: pnew(nel)
77 my_real,
INTENT(INOUT) :: dpde(nel)
78 my_real,
INTENT(INOUT) :: dpdm(nel)
79
80
81
82 INTEGER I, MX
83 my_real aa, bb, dvv, ff, fg, fac, xx, dff, dfg, fac1, pp
84 my_real cc(nel),s1(nel),s2(nel),s3(nel),g0(nel),ga(nel),pc(nel)
85
86
87
88 IF(iflag == 0) THEN
89
90 DO i=1,nel
91 mx = mat(i)
92 cc(i) = pm(33,mx)
93 s1(i) = pm(34,mx)
94 s2(i) = pm(160,mx)
95 s3(i) = pm(161,mx)
96 g0(i) = pm(35,mx)
97 ga(i) = pm(36,mx)
98 pc(i) = pm(37,mx)
99 psh(i) = pm(88,mx)
100 ENDDO
101
102
103 DO i=1,nel
104 fac=one
105 fac1=one
106 IF(mu(i) > zero) THEN
107 xx= mu(i)/(one+mu(i))
108 ff=one+(one-half*g0(i))*mu(i)-half*ga(i)*mu2(i)
109 fg=one-(s1(i)-one+s2(i)*xx+s3(i)*xx*xx)*mu(i)
110 fac=ff/(fg*fg)
111 dff=one-half*g0(i)-ga(i)*mu(i)
112 dfg=one-s1(i)+xx*(-two*s2(i)+xx*(s2(i)-three*s3(i))+two*s3(i)*xx*xx)
113 fac1=fac*(one+mu(i)*(dff/ff-two*dfg/fg))
114 ENDIF
115 aa=fac*rho0(i)*cc(i)*cc(i)*mu(i)
116 bb=g0(i)+ga(i)*mu(i)
117 pp=
max(aa+bb*espe(i),pc(i))*off(i)
118 dpdm(i)=fac1*rho0(i)*cc(i)*cc(i)+pp*df(i)*df(i)*bb+ga(i)*espe(i)
119 dpde(i)=bb
120 pnew(i) =
max(pp,pc(i))*off(i)
121 pnew(i) = pnew(i) - psh(i)
122 ENDDO
123
124 ELSEIF(iflag == 1) THEN
125
126 DO i=1,nel
127 mx = mat(i)
128 cc(i) = pm(33,mx)
129 s1(i) = pm(34,mx)
130 s2(i) = pm(160,mx)
131 s3(i) = pm(161,mx)
132 g0(i) = pm(35,mx)
133 ga(i) = pm(36,mx)
134 pc(i) = pm(37,mx)
135 psh(i) = pm(88,mx)
136 ENDDO
137
138
139
140 DO i=1,nel
141 fac=one
142 IF(mu(i) > zero) THEN
143 xx= mu(i)/(one+mu(i))
144 ff=one+(one-half*g0(i))*mu(i)-half*ga(i)*mu2(i)
145 fg=one-(s1(i)-one+s2(i)*xx+s3(i)*xx*xx)*mu(i)
146 fac=ff/(fg*fg)
147 ENDIF
148 aa=fac*rho0(i)*cc(i)*cc(i)*mu(i)
149 bb=g0(i)+ga(i)*mu(i)
150 dpde(i) = bb
151 dvv=half*dvol(i)*df(i) /
max(em15,vnew(i))
152 pnew(i)=(aa+bb*espe(i))/(one+bb*dvv)
153 pnew(i)=
max(pnew(i),pc(i))*off(i)
154 eint(i)=eint(i) - half*dvol(i)*pnew(i)
155 pnew(i) = pnew(i) - psh(i)
156 ENDDO
157
158 ELSEIF(iflag == 2) THEN
159
160 DO i=1, nel
161 mx = mat(i)
162 cc(i) = pm(33,mx)
163 s1(i) = pm(34,mx)
164 s2(i) = pm(160,mx)
165 s3(i) = pm(161,mx)
166 g0(i) = pm(35,mx)
167 ga(i) = pm(36,mx)
168 pc(i) = pm(37,mx)
169 psh(i) = pm(88,mx)
170 ENDDO
171
172 DO i=1,nel
173 IF (vnew(i) > zero) THEN
174 fac=one
175 fac1=one
176 IF(mu(i) > zero) THEN
177 xx= mu(i)/(one+mu(i))
178 ff=one+(one-half*g0(i))*mu(i)-half*ga(i)*mu2(i)
179 fg=one-(s1(i)-one+s2(i)*xx+s3(i)*xx*xx)*mu(i)
180 fac=ff/(fg*fg)
181 dff=one-half*g0(i)-ga(i)*mu(i)
182 dfg=one-s1(i)+xx*(-two*s2(i)+xx*(s2(i)-three*s3(i))+two*s3(i)*xx*xx)
183 fac1=fac*(one+mu(i)*(dff/ff-two*dfg/fg))
184 ENDIF
185 aa=fac*rho0(i)*cc(i)*cc(i)*mu(i)
186 bb=g0(i)+ga(i)*mu(i)
187 pnew(i)=
max(aa+bb*espe(i),pc(i))*off(i)
188 dpdm(i)=fac1*rho0(i)*cc(i)*cc(i)+pnew(i)*df(i)*df(i)*bb+ga(i)*espe(i)
189 dpde(i)=bb
190 pnew(i)=pnew(i)-psh(i)
191 ENDIF
192 ENDDO
193
194 ENDIF
195
196 RETURN