36
37
38
42 USE constant_mod,
ONLY : zero, one, two, three100, four, half, four, two_third
43 USE matparam_def_mod, ONLY : matparam_struct_
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 IMPLICIT NONE
60#include "my_real.inc"
61
62
63
64 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
65 INTEGER IOUT, IUNIT
67 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
68 TYPE(MATPARAM_STRUCT_),INTENT(INOUT) :: MAT_PARAM
69 INTEGER,INTENT(IN) :: IMIDEOS
70
71
72
73#include "param_c.inc"
74
75
76
78 my_real a1,a2,b0,b1,b2,c0,c1,d0,rhoi,rhor,dpdmu_partial,dpde,df,mu0,dpdmu,a2_,g0,ssp0, denom
79 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_RHO0
80
81
82
83 is_encrypted = .false.
84 is_available = .false.
85 is_available_rho0 = .false.
86
88
89 CALL hm_get_floatv(
'EOS_A1', a1, is_available,lsubmodel,unitab)
90 CALL hm_get_floatv(
'EOS_A2', a2, is_available,lsubmodel,unitab)
91 CALL hm_get_floatv(
'EOS_B0', b0, is_available,lsubmodel,unitab)
92 CALL hm_get_floatv(
'EOS_B1', b1, is_available,lsubmodel,unitab)
93 CALL hm_get_floatv(
'EOS_B2', b2, is_available,lsubmodel,unitab)
94
95 CALL hm_get_floatv(
'EOS_C0', c0, is_available,lsubmodel,unitab)
96 CALL hm_get_floatv(
'EOS_C_1', c1, is_available,lsubmodel,unitab)
97 CALL hm_get_floatv(
'EOS_D0', d0, is_available,lsubmodel,unitab)
98 CALL hm_get_floatv(
'LAW5_P0', p0, is_available,lsubmodel,unitab)
99
100 CALL hm_get_floatv(
'Refer_Rho', rho0, is_available_rho0,lsubmodel,unitab)
101
102 rhor = pm(1)
103 rhoi = pm(89)
104
105 IF(rho0 > zero) THEN
106 rhor = rho0
107 pm(1)= rho0
108 mat_param%RHO = rho0
109 ELSE
110 rho0=rhor
111 ENDIF
112
113 IF(
114 . a1 <= zero .OR.
115 . a2 <= zero .OR.
116 . b0 <= zero .OR.
117 . b1 <= zero .OR.
118 . b2 <= zero .OR.
119 . c0 <= zero .OR.
120 . c1 <= zero .OR.
121 . d0 <= zero .OR.
122 . rho0 <= zero
123 . )THEN
124 CALL ancmsg(msgid=67, msgtype=msgerror, anmode=aninfo,
125 . i1=imideos,
126 . c1='/EOS/OSBORNE',
127 . c2='PARAMETERS MUST BE STRICTLY POSITIVE')
128 ENDIF
129
130
131
132 e0 =-half*(b0-p0-sqrt(four*c0*d0*p0+b0**two-two*b0*p0+p0**two))/c0
133
134
135 pm(23) = e0
136 pm(32) = (a1+b1+c1*e0*e0) / (e0+d0)
137 psh = zero
138 pm(88) = psh
139 pm(31) = p0
140
141 mat_param%EOS%NUPARAM = 9
142 mat_param%EOS%NIPARAM = 0
143 mat_param%EOS%NFUNC = 0
144 mat_param%EOS%NTABLE = 0
145 CALL mat_param%EOS%CONSTRUCT()
146
147 mat_param%EOS%UPARAM(1) = a1
148 mat_param%EOS%UPARAM(2) = a2
149 mat_param%EOS%UPARAM(3) = b0
150 mat_param%EOS%UPARAM(4) = b1
151 mat_param%EOS%UPARAM(5) = b2
152 mat_param%EOS%UPARAM(6) = c0
153 mat_param%EOS%UPARAM(7) = c1
154 mat_param%EOS%UPARAM(8) = d0
155 mat_param%EOS%UPARAM(9) = p0
156
157 mat_param%EOS%PSH = psh
158 mat_param%EOS%E0 = e0
159 IF (mat_param%THERM%TINI == zero) THEN
160 mat_param%THERM%TINI =three100
161 pm(79) = three100
162 END IF
163
164
165 IF(rhoi == zero)THEN
166 mu0 = zero
167 ELSE
168 IF(rhor /= zero)THEN
169 mu0 = rhoi/rhor-one
170 ELSE
171 mu0 = zero
172 ENDIF
173 ENDIF
174
175 IF(rhoi /= zero)THEN
176 df = rhor/rhoi
177 ELSE
178 df = zero
179 ENDIF
180
181
182 ssp0 = zero
183 g0 = pm(22)
184 rhoi = pm(89)
185
186 a2_=a2
187 IF(mu0 < zero)a2_=-a2
188 denom = (e0+d0)
189 dpdmu_partial = (a1+2*a2_*mu0+(two*b2*mu0+b1)*e0+c1*e0*e0)/denom
190 dpde = (((b2*mu0+b1)*mu0+b0)+(two*(c1*mu0+c0))*e0 - p0/denom)/denom
191 dpdmu = dpdmu_partial + dpde*df*df*(p0)
192
193 dpdmu=
max(zero,dpdmu)
194 IF(rhor > zero) ssp0 = sqrt((dpdmu + two_third*g0)/rhor)
195 pm(27)=ssp0
196
197 WRITE(iout,1000)
198
199 IF(is_encrypted)THEN
200 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
201 ELSE
202 WRITE(iout,1500)a1,a2,b0,b1,b2,c0,c1,d0,p0
203 IF(is_available_rho0)WRITE(iout,1501)pm(1)
204 ENDIF
205
206 RETURN
207 1000 FORMAT(
208 & 5x,' OSBORNE EOS ',/,
209 & 5x,' ----------- ',/)
210 1500 FORMAT(
211 & 5x,'A1. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
212 & 5x,'A2. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
213 & 5x,'B0. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
214 & 5x,'B1. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
215 & 5x,'B2. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
216 & 5x,'C0. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
217 & 5x,'C1. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
218 & 5x,'D0. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
219 & 5x,'P0. . . . . . . . . . . . . . . . . . . .=',1pg20.13)
220 1501 FORMAT(
221 & 5x,'EOS REFERENCE DENSITY . . . . . . . . . .=',1pg20.13)
222
223 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)