OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_matgas.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_matgas ../starter/source/materials/mat/matgas/hm_read_matgas.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.f
30!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
31!|| hm_get_string ../starter/source/devtools/hm_reader/hm_get_string.F
32!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
33!||--- uses -----------------------------------------------------
34!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
35!|| message_mod ../starter/share/message_module/message_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.F
37!||====================================================================
38 SUBROUTINE hm_read_matgas(PM, IPM, ID, TITR, KEY2, UNITAB, LSUBMODEL)
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 IF (cpa <= zero .OR. 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
370 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_string(name, sval, size, is_available)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_matgas(pm, ipm, id, titr, key2, unitab, lsubmodel)
integer, parameter nchartitle
integer, parameter ncharfield
integer, parameter ncharline
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)
Definition message.F:889
program starter
Definition starter.F:39