30
31
32
33#include "implicit_f.inc"
34
35
36
38
39
40
41 my_real pcrit, p0, mu, c45,tmp, mu0, x, e0_ref, p0_ref, c1_ref
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 p0=pext+c0
57 mu0=-one
58 pcrit=zero
61 e0_ref=zero
62 p0_ref=zero
63 c1_ref=zero
64
65
66
67
68 IF( (c0 == zero) .AND. (c1 == zero) .AND. (c2 == zero) .AND. (c3 == zero) .AND. (c4 == zero) .AND. (c5 == zero))THEN
70 RETURN
71 END IF
72
73
74
75
76
77
78 IF(abs(p0+c4*e0) < em20)THEN
80 RETURN
81 END IF
82
83
84
85
86
87
88 IF ((pm+pext) > em20) THEN
89
91 RETURN
92 END IF
93
94
95
96
97
98
99
100
101
102
103 IF((c2 == zero) .AND. (c3 == zero) .AND. (p0 == c1) .AND. (c4 /= zero) .AND. (c4 == c5))THEN
104 !this condition describes all formulation possible
for a perfect gas, included relative pressure and relative energy.
105 IF (c1 == 0)THEN
106
108 ELSE
109
111 END IF
112 RETURN
113 END IF
114
115
116
117
118
119 IF((c2 == zero) .AND. (c3 == zero) .AND. (c4 == zero) .AND. (c5 == zero) .AND. (c1 /= zeroTHEN
120 IF (p0 < c1)THEN
121 x=-p0/c1
122 ie_bound = -1/(1+x)*p0+c1/(1+x)+c1*log(1+x)+e0+p0-c1
123 ELSE
125 END IF
126 RETURN
127 END IF
128
129
130
131
132
133
134
135
136
137
138
139 IF((c1 > zero) .AND. (c4 >= c5) .AND. (c5 > zero))THEN
140
141
142
143 e0_ref=e0
144 c1_ref=c1
145 p0_ref=p0
146 IF(e0/=zero)THEN
147 e0=zero
148 p0=p0+c4*e0_ref
149 c1=c1+c4*e0_ref
150 END IF
151
152
153 IF((c4 /= 1) .AND. (c4 /= 2))THEN
154
155 IF(c1-p0 < zero)THEN
157 GOTO 100
158 END IF
159
160 x=(-4*c2+2*c1+2*c4*p0+2*c4*c2-3*c4*c1-3*c4**2*p0+6*c3+c4**2*c1+c4**3*p0)/(2+c4**2-3*c4)
161 IF(x < zero)THEN
163 GOTO 100
164 END IF
165
166 IF(p0 >= zero)THEN
167 IF (c1 == p0)THEN
169 GOTO 100
170 ELSE
171 x=(c4*p0+c1)/(c1-p0)
172 x=exp(-log(x)/(1+c4))-1
173 ie_bound=(-(1+x)**(-1-c4)*(c4*p0+c1+c1*x+c4*c1*x) / c4/(1+c4)+(c4*p0+c1)/c4/(1+c4))*(1+x)**c4
174 GOTO 100
175 END IF !(c1==p0)
176 END IF
177
178 IF(p0 < zero)THEN
179
181
182
183 GOTO 100
184 END IF
185
186 ELSEIF((c4 == one) .OR. (c4 == two))THEN
187 !diverging test in expansion
188 IF(c1-p0 < zero)THEN
190 GOTO 100
191 END IF
192
193
194 IF (c3 < zero)THEN
196 GOTO 100
197 END IF
198
199 IF(c3 == zero)THEN
200 IF (c2 < zero)THEN
202 GOTO 100
203 END IF
204 END IF
205
206
207 IF(p0 >= zero)THEN
208
209 x=-(c1+p0-sqrt(c1**2-p0**2))/(c1+p0)
210 ie_bound=(1+x)*(half*c1+half*p0)-half*(c1+2*c1*x+p0)/(1+x)
211 GOTO 100
212 END IF
213
214 IF(p0 < zero)THEN
215
217
218
219 GOTO 100
220 END IF
221 END IF
222 END IF
223
224 100 IF (e0_ref /= zero)THEN
226 c1=c1_ref
227 e0=e0_ref
228 END IF
229
230 RETURN
231
function ie_bound(pext, pm, c0, c1, c2, c3, c4, c5, e0)
for(i8=*sizetab-1;i8 >=0;i8--)