OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_matgas.F File Reference
#include "implicit_f.inc"
#include "param_c.inc"
#include "units_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_matgas (pm, ipm, id, titr, key2, unitab, lsubmodel)

Function/Subroutine Documentation

◆ hm_read_matgas()

subroutine hm_read_matgas ( intent(inout) pm,
integer, dimension(npropmi), intent(inout) ipm,
integer, intent(in) id,
character(len = nchartitle) titr,
character(len = ncharline), intent(in) key2,
type (unit_type_), intent(in) unitab,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel )

Definition at line 38 of file hm_read_matgas.F.

39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE unitab_mod
43 USE message_mod
44 USE submodel_mod
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51#include "param_c.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "units_c.inc"
56C-----------------------------------------------
57C D u m m y A r g u m e n t s
58C-----------------------------------------------
59 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
60 INTEGER, INTENT(IN) :: ID
61 CHARACTER(LEN = NCHARTITLE) :: TITR
62 INTEGER, DIMENSION(NPROPMI), INTENT(INOUT) :: IPM
63 my_real, DIMENSION(NPROPM), INTENT(INOUT) :: pm
64 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
65 CHARACTER(LEN = NCHARLINE), INTENT(IN) :: KEY2
66C-----------------------------------------------
67C L o c a l V a r i a b l e s
68C-----------------------------------------------
70 . mw, cpa, cpb, cpc, cpd, cpe, cpf, cv,
71 . fac_l, fac_t, fac_m, r_igc1, fac_cp, fac
72 CHARACTER(LEN = NCHARLINE) :: KEY, USERGAS_NAME, KEY2_TRIM
73 CHARACTER(LEN = 20) :: GASTYPE
74 INTEGER :: IGAS, IMOLE
75 LOGICAL :: IS_AVAILABLE, IS_ENCRYPTED
76C-----------------------------------------------
77C S o u r c e l i n e s
78C-----------------------------------------------
79
80! **************
81! Initialization
82 mw = zero
83 is_available = .false.
84 is_encrypted = .false.
85 CALL hm_option_is_encrypted(is_encrypted)
86
87 key2_trim = key2(1:len_trim(key2))
88 SELECT CASE(key2_trim)
89 CASE ('MOLE')
90 igas = 1
91 imole = 1
92 CASE ('mass')
93 IGAS = 2
94 IMOLE = 0
95 CASE ('csta')
96 IGAS = 3
97 IMOLE = 0
98 CASE('predef', 'predefined')
99 IGAS = 4
100 IMOLE = 1
101 CASE DEFAULT
102 IGAS = 0
103 IMOLE = 0
104 END SELECT
105
106 FAC = ONE
107
108! *********
109! Read card
110 SELECT CASE (IGAS)
111 CASE(1, 2)
112 GASTYPE = 'user'
113 CALL HM_GET_FLOATV('mass', MW, IS_AVAILABLE, LSUBMODEL, UNITAB)
114 IF (MW <= ZERO) THEN
115 CALL ANCMSG(MSGID = 710, MSGTYPE = MSGERROR, ANMODE = ANINFO,
116 . I1 = ID, C1 = TITR)
117 END IF
118 CALL HM_GET_FLOATV('abg_cpai', CPA, IS_AVAILABLE, LSUBMODEL, UNITAB)
119 CALL HM_GET_FLOATV('abg_cpbi', CPB, IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('abg_cpci', CPC, IS_AVAILABLE, LSUBMODEL, UNITAB)
121 CALL HM_GET_FLOATV('mat_d', CPD, IS_AVAILABLE, LSUBMODEL, UNITAB)
122 CALL HM_GET_FLOATV('mat_e1', CPE, IS_AVAILABLE, LSUBMODEL, UNITAB)
123
124 CALL HM_GET_FLOATV_DIM('mass', FAC, IS_AVAILABLE, LSUBMODEL, UNITAB)
125
126 CPF = ZERO
127 IF (IGAS == 2) THEN
128 CALL HM_GET_FLOATV('mat_f', CPF, IS_AVAILABLE, LSUBMODEL, UNITAB)
129 END IF
130 CASE (3)
131 GASTYPE = 'user'
132 CPB = ZERO
133 CPC = ZERO
134 CPD = ZERO
135 CPE = ZERO
136 CPF = ZERO
137 CALL HM_GET_FLOATV('mat_bsat', CPA, IS_AVAILABLE, LSUBMODEL, UNITAB)
138 CALL HM_GET_FLOATV('mat_rsat', CV, IS_AVAILABLE, LSUBMODEL, UNITAB)
139.OR. IF (CPA <= ZERO CV <= ZERO) THEN
140 CALL ANCMSG(MSGID = 916, MSGTYPE = MSGERROR, ANMODE = ANINFO,
141 . I1 = ID, C1 = TITR)
142 END IF
143 IF (CPA <= CV) THEN
144 CALL ANCMSG(MSGID = 917, MSGTYPE = MSGERROR, ANMODE = ANINFO,
145 . I1 = ID, C1 = TITR)
146 END IF
147 CASE(4)
148 CALL HM_GET_STRING('gas', USERGAS_NAME, ncharfield, IS_AVAILABLE)
149 IF (USERGAS_NAME(1:3) == 'n2o') THEN
150 GASTYPE = 'nitrous oxide'
151 MW = 0.04401
152 CPA = 27.67988
153 CPB = 5.1149E-02
154 CPC = -3.0645E-05
155 CPD = 6.8479E-09
156 CPE = -1.5791E+05
157 CPF = 0.0
158 ELSE IF (USERGAS_NAME(1:2) == 'n2') THEN
159 GASTYPE = 'nitrogen'
160 MW = 0.02801
161 CPA = 26.0920000
162 CPB = 8.2188E-03
163 CPC = -1.9761E-06
164 CPD = 1.5927E-10
165 CPE = 4.4434E+04
166 CPF = 0.0
167 ELSE IF (USERGAS_NAME(1:2) == 'o2') THEN
168 GASTYPE = 'oxygen'
169 MW = 0.032
170 CPA = 29.659
171 CPB = 6.1373E-03
172 CPC = -1.1865E-06
173 CPD = 9.5780E-11
174 CPE = -2.1966E+05
175 CPF = 0.0
176 ELSE IF (USERGAS_NAME(1:3) == 'co2') THEN
177 GASTYPE = 'carbon dioxide'
178 MW = 0.04401
179 CPA = 24.997350
180 CPB = 5.5187E-02
181 CPC = -3.3691E-05
182 CPD = 7.9484E-09
183 CPE = -1.3664E+05
184 CPF = 0.0
185 ELSE IF (USERGAS_NAME(1:2) == 'co') THEN
186 GASTYPE = 'carbon monoxide'
187 MW = 0.02801
188 CPA = 25.567590
189 CPB = 6.0961E-03
190 CPC = 4.0547E-06
191 CPD = -2.6713E-09
192 CPE = 1.3102E+05
193 CPF = 0.0
194 ELSE IF (USERGAS_NAME(1:2) == 'ar') THEN
195 GASTYPE = 'argon'
196 MW = 0.03995
197 CPA = 20.786
198 CPB = 2.8259E-10
199 CPC = -1.4642E-13
200 CPD = 1.0921E-17
201 CPE = -3.6614E-02
202 CPF = 0.0
203 ELSE IF (USERGAS_NAME(1:2) == 'ne') THEN
204 GASTYPE = 'neon'
205 MW = 0.02018
206 CPA = 20.786030
207 CPB = 4.8506E-13
208 CPC = -1.5829E-16
209 CPD = 1.5251E-20
210 CPE = 3.1963E-05
211 CPF = 0.0
212 ELSE IF (USERGAS_NAME(1:2) == 'he') THEN
213 GASTYPE = 'helium'
214 MW = 0.004
215 CPA = 20.786030
216 CPB = 4.8506E-13
217 CPC = -1.5829E-16
218 CPD = 1.5251E-20
219 CPE = 3.1963E-05
220 CPF = 0.0
221 ELSE IF (USERGAS_NAME(1:3) == 'h2o') THEN
222 GASTYPE = 'water vapour'
223 MW = 0.01802
224 CPA = 30.092
225 CPB = 6.8325E-03
226 CPC = 6.7934E-06
227 CPD = -2.5345E-09
228 CPE = 8.2139E+04
229 CPF = 0.0
230 ELSE IF (USERGAS_NAME(1:2) == 'h2') THEN
231 GASTYPE = 'hydrogen'
232 MW = 0.00202
233 CPA = 33.066178
234 CPB = -1.1363E-02
235 CPC = 1.1433E-05
236 CPD = -2.7729E-09
237 CPE = -1.5856E+05
238 CPF = 0.0
239 ELSE IF (USERGAS_NAME(1:3) == 'nh3') THEN
240 GASTYPE = 'ammonia'
241 MW = 0.01703
242 CPA = 19.995630
243 CPB = 4.9771E-02
244 CPC = -1.5376E-05
245 CPD = 1.9212E-09
246 CPE = 1.8917E+05
247 CPF = 0.0
248 ELSE IF (USERGAS_NAME(1:3) == 'h2s') THEN
249 GASTYPE = 'hydrogen sulphide'
250 MW = 0.03408
251 CPA = 26.884120
252 CPB = 1.8678E-02
253 CPC = 3.4342E-06
254 CPD = -3.3787E-09
255 CPE = 1.3588E+05
256 CPF = 0.0
257 ELSE IF (USERGAS_NAME(1:4) == 'c6h6') THEN
258 GASTYPE = 'benzene'
259 MW = 0.07811
260 CPA = -36.220000
261 CPB = 4.8475E-01
262 CPC = -3.1570E-04
263 CPD = 7.7620E-08
264 CPE = 0.0000E+00
265 CPF = 0.0
266 ELSE IF (USERGAS_NAME(1:3) == 'air') THEN
267 GASTYPE = 'air'
268 MW = 0.02896
269 CPA = 26.789065
270 CPB = 7.7213E-03
271 CPC = -1.8027E-06
272 CPD = 1.4705E-10
273 CPE = 1.1359E+04
274 CPF = 0.0
275 ELSE
276 CALL ANCMSG(MSGID = 722, MSGTYPE = MSGERROR, ANMODE = ANINFO,
277 . I1 = ID, C1 = TITR, C2 = USERGAS_NAME)
278 END IF
279 END SELECT
280
281.AND. IF (IGAS /= 3 MW <= ZERO) THEN
282 CALL ANCMSG(MSGID = 710, MSGTYPE = MSGERROR, ANMODE = ANINFO,
283 . I1 = ID, C1 = TITR)
284 ENDIF
285
286! ***********************************
287! Units for hard-coded default values
288 FAC_M = UNITAB%FAC_M_WORK
289 FAC_L = UNITAB%FAC_L_WORK
290 FAC_T = UNITAB%FAC_T_WORK
291 FAC_CP = FAC_L * FAC_L / (FAC_T * FAC_T)
292
293 R_IGC1 = R_IGC / FAC_M / FAC_L / FAC_L * (FAC_T * FAC_T)
294
295 IF (IMOLE == 1) THEN
296 CPA = CPA / MW * FAC
297 CPB = CPB / MW * FAC
298 CPC = CPC / MW * FAC
299 CPD = CPD / MW * FAC
300 CPE = CPE / MW * FAC
301 CPF = CPF / MW * FAC
302 ENDIF
303 IF(IGAS == 4) THEN
304 MW = MW / FAC_M
305 CPA = CPA / FAC_CP
306 CPB = CPB / FAC_CP
307 CPC = CPC / FAC_CP
308 CPD = CPD / FAC_CP
309 CPE = CPE / FAC_CP
310 CPF = CPF / FAC_CP
311 ENDIF
312 IF (IGAS == 3) THEN
313 MW = R_IGC1 / (CPA - CV)
314 ENDIF
315
316! **************************
317! Store in IPM and PM arrays
318 IPM(1) = ID
319 PM(20) = MW
320 PM(21) = CPA
321 PM(22) = CPB
322 PM(23) = CPC
323 PM(24) = CPD
324 PM(25) = CPE
325 PM(26) = CPF
326 PM(27) = R_IGC1
327c
328! *********
329! Print out
330 WRITE (IOUT, 1001) TRIM(TITR), ID
331 WRITE (IOUT,1000)
332 IF (IS_ENCRYPTED)THEN
333 WRITE (IOUT,'(5x,a,//)')'confidential data'
334 ELSE
335 IF (IGAS == 3) THEN
336 WRITE (IOUT, 1100) GASTYPE, CPA, CV, MW, R_IGC1
337 ELSE
338 WRITE (IOUT, 1200) GASTYPE, MW, CPA, CPB, CPC, CPD, CPE, CPF, R_IGC1
339 ENDIF
340 ENDIF
341C-----------------------------------------------
342C E n d o f S u b r o u t i n e
343C-----------------------------------------------
344 RETURN
345 1000 FORMAT(
346 & 7X,'gas characteristics',/,
347 & 7X,'-------------------',//)
348 1001 FORMAT(//
349 & 5X,A,/,
350 & 5X,40HMATERIAL NUMBER . . . . . . . . . . . .=,I10/,
351 & 5X,'gas',/)
352 1100 FORMAT(
353 & 5X,42HGAS TYPE. . . . . . . . . . . . . . . .= ,A/,
354 & 5X,40HSPECIFIC HEAT AT CONSTANT PRESSURE CP .=,E12.4/,
355 & 5X,40HSPECIFIC HEAT AT CONSTANT VOLUME CV. . =,E12.4/,
356 & 5X,40HMOLECULAR WEIGHT . . . . . . . . . . .=,E12.4/,
357 & 5X,40HUNIVERSAL GAS CONSTANT. . . . . . . . .=,E12.4//)
358 1200 FORMAT(
359 & 5X,42HGAS TYPE. . . . . . . . . . . . . . . .= ,A/,
360 & 5X,40HMOLECULAR WEIGHT . . . . . . . . . . .=,E12.4/,
361 & 5X,40HCOEFFICIENT CPA . . . . . . . . . . . .=,E12.4/,
362 & 5X,40HCOEFFICIENT CPB . . . . . . . . . . . .=,E12.4/,
363 & 5X,40HCOEFFICIENT CPC . . . . . . . . . . . .=,E12.4/,
364 & 5X,40HCOEFFICIENT CPD . . . . . . . . . . . .=,E12.4/,
365 & 5X,40HCOEFFICIENT CPE . . . . . . . . . . . .=,E12.4/,
366 & 5X,40HCOEFFICIENT CPF . . . . . . . . . . . .=,E12.4/,
367 & 5X,40HUNIVERSAL GAS CONSTANT. . . . . . . . .=,E12.4//)
368C-----------
369 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle
integer, parameter ncharfield
integer, parameter ncharline