31
32
33
34
35
36
37
38
39
40!----------------------------------------------------------------------------
41
42
43
44
45
46
47
48
49
50
51
52
53!----------------------------------------------------------------------------
54
55
56
57
58#include "implicit_f.inc"
59#include "comlock.inc"
60
61
62
63#include "param_c.inc"
64#include "com04_c.inc"
65#include "com06_c.inc"
66#include "com08_c.inc"
67#include "vect01_c.inc"
68#include "scr06_c.inc"
69
70
71
72 INTEGER MAT(NEL), IFLAG, NEL
74 . off(nel) ,eint(nel) ,mu(nel) ,
75 . espe(nel) ,dvol(nel) ,df(nel) ,
76 . vnew(nel) ,pnew(nel) ,dpdm(nel), psh(nel) ,
77 . dpde(nel)
78
79
80
81 INTEGER I, MX
83 my_real :: a1,a2,b0,b1,b2,c0,c1,d0, a2_,rho0
85
86
87
88 IF(iflag == 0) THEN
89 mx = mat(1)
90 rho0 = pm(01,mx)
91 e0 = pm(23,mx)
92 a1 = pm(164,mx)
93 a2 = pm(32,mx)
94 b0 = pm(33,mx)
95 b1 = pm(35,mx)
96 b2 = pm(36,mx)
97 c0 = pm(160,mx)
98 c1 = pm(161,mx)
99 d0 = pm(162,mx)
100 p0 = pm(163,mx)
101 psh(1:nel) = pm(88,mx)
102 DO i=1,nel
103
104 IF(mu(i)<zero)a2_=-a2
105 denom = (espe(i)+d0)
106 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
107 dpdmu = (a1+2*a2_*mu(i)+(two*b2*mu(i)+b1)*espe(i)+c1*espe(i)*espe(i))/denom
108 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
109 dpdm(i) = dpdmu + dpde(i)*df(i)*df(i)*(pp)
110 pnew(i) = pp * off(i)
111 pnew(i) = pnew(i) - psh(i)
112 ENDDO
113
114 ELSEIF(iflag == 1) THEN
115 mx = mat(1)
116 rho0 = pm(01,mx)
117 e0 = pm(23,mx)
118 a1 = pm(164,mx)
119 a2 = pm(32,mx)
120 b0 = pm(33,mx)
121 b1 = pm(35,mx)
122 b2 = pm(36,mx)
123 c0 = pm(160,mx)
124 c1 = pm(161,mx)
125 d0 = pm(162,mx)
126 p0 = pm(163,mx)
127 psh(1:nel) = pm(88,mx)
128 DO i=1,nel
129 a2_=a2
130 IF(mu(i)<zero)a2_=-a2
131 dvv = dvol(i)*df(i) /
max(em15,vnew(i))
132 dvv = half*dvv
133 denom = (espe(i)+d0)
134 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
135 espe(i) = espe(i) - (pp)*dvv
136 denom = (espe(i)+d0)
137 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
138 espe(i) = espe(i) - (pp)*dvv
139 pnew(i) = pp * off(i)
140 eint(i) = eint(i) - half*dvol(i)*(pnew(i))
141 pnew(i) = pnew(i) - psh(i)
142 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
143 ENDDO
144
145 ELSEIF(iflag == 2) THEN
146 mx = mat(1)
147 rho0 = pm(01,mx)
148 e0 = pm(23,mx)
149 a1 = pm(164,mx)
150 a2 = pm(32,mx)
151 b0 = pm(33,mx)
152 b1 = pm(35,mx)
153 b2 = pm(36,mx)
154 c0 = pm(160,mx)
155 c1 = pm(161,mx)
156 d0 = pm(162,mx)
157 p0 = pm(163,mx)
158 psh(1:nel) = pm(88,mx)
159 DO i=1, nel
160 IF (vnew(i) > zero) THEN
161 a2_=a2
162 IF(mu(i)<zero)a2_=-a2
163 denom = (espe(i)+d0)
164 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
165 dpdmu = (a1+2*a2_*mu(i)+(two*b2*mu(i)+b1)*espe(i)+c1*espe(i)*espe(i))/denom
166 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
167 dpdm(i) = dpdmu + dpde(i)*df(i)*df(i)*(pp)
168 pnew(i) = pp*off(i)
169 pnew(i) = pnew(i) - psh(i)
170 ENDIF
171 ENDDO
172
173 ENDIF
174
175
176 RETURN