36
37
38
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#include "implicit_f.inc"
65
66
67
68 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
69 INTEGER IIN,IOUT,IUNIT
71 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
72 INTEGER,INTENT(IN) :: IMIDEOS
73
74
75
76#include "param_c.inc"
77
78
79
80 my_real :: gamma, p0,t0, e0, psh, rho0,fac_l,fac_t,fac_m,fac_c,cv,mu0,pp,rhoi,rhor,g0,ssp0,dpdmu,df
81 my_real :: r_gas,r_gas_, m_gas, a0, a1, a2, a3, a4, a5, cp
82 INTEGER :: USER_CURVEID, CURVEID, JJ
83 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_RHO0
84
85
86
87 is_encrypted = .false.
88 is_available = .false.
89 is_available_rho0 = .false.
90
92
93 gamma=zero
94
95
96 CALL hm_get_floatv(
'MAT_R', r_gas_, is_available,lsubmodel,unitab)
97 CALL hm_get_floatv(
'LAW5_P0', p0, is_available,lsubmodel,unitab)
98 CALL hm_get_floatv(
'LAW5_PSH', psh, is_available,lsubmodel,unitab)
99 CALL hm_get_floatv(
'T_Initial', t0, is_available,lsubmodel,unitab)
100 CALL hm_get_floatv(
'Refer_Rho', rho0, is_available_rho0,lsubmodel,unitab)
101 CALL hm_get_floatv(
'MAT_C0', a0, is_available,lsubmodel,unitab)
102 CALL hm_get_floatv(
'MAT_C1', a1, is_available,lsubmodel,unitab)
103 CALL hm_get_floatv(
'MAT_C2', a2, is_available,lsubmodel,unitab)
104 CALL hm_get_floatv(
'MAT_C3', a3, is_available,lsubmodel,unitab)
105 CALL hm_get_floatv(
'MAT_C4', a4, is_available,lsubmodel,unitab)
106
107 rhor = pm(1)
108 rhoi = pm(89)
109
110 IF(rho0 > zero) THEN
111 rhor = rho0
112 pm(1)= rho0
113 ELSE
114 rho0=rhor
115 ENDIF
116
117 IF(p0*t0 /= zero)THEN
118 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
119 . i1=imideos,
120 . c1='/EOS/IDEAL-GAS-VT',
121 . c2='P0 AND T0 CANNOT BE BOTH DEFINED')
122 ENDIF
123
124 IF(r_gas_ <= zero)THEN
125 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,i1=imideos,
126 . c1='/EOS/IDEAL-GAS-VT',
127 . c2='GAS CONSTANT r MUST BE STRICTLY POSITIVE')
128 p0 = zero
129 ELSE
130
131
132 IF(t0 > zero) THEN
133 p0 = r_gas_ * rho0 * t0
134 ELSEIF(p0 /= zero .AND. rho0 /= zero)THEN
135 t0 = p0/r_gas_/rho0
136 ELSE
137 t0=0
138 p0=zero
139 ENDIF
140
141 ENDIF
142
143 IF(p0 <= zero)THEN
144 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
145 . i1=imideos,
146 . c1='/EOS/IDEAL-GAS-VT',
147 . c2='INITIAL PRESSURE MUST BE POSITIVE')
148 ENDIF
149
150 IF(t0 < zero)THEN
151 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
152 . i1=imideos,
153 . c1='/EOS/IDEAL-GAS-VT',
154 . c2='TEMPERATURE MUST BE POSITIVE (UNIT:KELVIN)')
155 ENDIF
156
157
158 IF(rhoi == zero)THEN
159 mu0 = zero
160 ELSE
161 IF(rhor /= zero)THEN
162 mu0 = rhoi/rhor-one
163 ELSE
164 mu0 = zero
165 ENDIF
166 ENDIF
167
168 IF(rhoi /= zero)THEN
169 df = rhor/rhoi
170 ELSE
171 df = zero
172 ENDIF
173
174 cp = a0 + a1*t0 + a2*t0*t0 + a3*t0**3 + a4*t0**4
175
176 IF(cp < r_gas_)THEN
177 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
178 . i1=imideos,
179 . c1='/EOS/IDEAL-GAS-VT',
180 . c2='Cp(0) < r IS NOT EXPECTED. CHECK INPUT FUNCTION')
181 ENDIF
182
183 e0 = rho0 * (a0 * t0 + half * a1 * t0**2 + third * a2 * t0**3 + fourth * a3 * t0**4 +
184 . one_fifth * a4 * t0**5 - r_gas_ * t0)
185
186 IF(t0 == zero)t0=three100
187
188 pm(106) = r_gas_
189 pm(88) = psh
190 pm(23) = e0
191 pm(31) = p0-psh
192 pm(32) = a0
193 pm(33) = a1
194 pm(34) = a2
195 pm(35) = a3
196 pm(36) = a4
197 pm(79) = t0
198 IF(pm(79)==zero)pm(79)=three100
199
200 pm(104)=p0-psh
201
202
203 cv = cp - r_gas_
204 IF(cv /= zero)THEN
205 gamma = cp/cv
206 ELSE
207 gamma = zero
208 ENDIF
209 ssp0 = sqrt(gamma*r_gas_*t0)
210 g0 = pm(22)
211 rhoi = pm(89)
212 dpdmu = rho0*gamma*r_gas_*t0
213
214 dpdmu=
max(zero,dpdmu)
215 IF(rhor > zero) ssp0 = sqrt((dpdmu + two_third*g0)/rhor)
216 pm(27)=ssp0
217
218 WRITE(iout,1000)
219
220 IF(is_encrypted)THEN
221 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
222 ELSE
223 WRITE(iout,1500)r_gas_,t0,p0,psh,cp,a0,a1,a2,a3,a4
224 IF(is_available_rho0)WRITE(iout,1501)pm(1)
225 ENDIF
226
227 RETURN
228 1000 FORMAT(
229 & 5x,' IDEAL GAS EOS (VOLUME-TEMPERATURE) : P=rho.r.T ',/,
230 & 5x,' ---------------------------------------------- ',/)
231 1500 FORMAT(
232 & 5x,'GAS CONSTANT (r). . . . . . . . . . . . .=',1pg20.13/,
233 & 5x,'INITIAL TEMPERATURE . . . . . . . . . . .=',1pg20.13/,
234 & 5x,'INITIAL PRESSURE. . . . . . . . . . . . .=',1pg20.13/,
235 & 5x,'PRESSURE SHIFT. . . . . . . . . . . . . .=',1pg20.13/,
236 & 5x,'INITIAL MASSIC HEAT CAPACTITY . . . . . .=',1pg20.13/,
237 & 5x,'A0. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
238 & 5x,'A1. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
239 & 5x,'A2. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
240 & 5x,'A3. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
241 & 5x,'A4. . . . . . . . . . . . . . . . . . . .=',1pg20.13)
242 1501 FORMAT(
243 & 5x,'EOS REFERENCE DENSITY . . . . . . . . . .=',1pg20.13)
244
245 RETURN
246
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)