OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_inject1.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_inject1 ../starter/source/properties/injector/hm_read_inject1.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_properties ../starter/source/properties/hm_read_properties.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_float_array_index ../starter/source/devtools/hm_reader/hm_get_float_array_index.F
30!|| hm_get_float_array_index_dim ../starter/source/devtools/hm_reader/hm_get_float_array_index_dim.F
31!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
32!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
33!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
34!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.f
35!|| nintri ../starter/source/system/nintrr.F
36!|| usr2sys ../starter/source/system/sysfus.F
37!||--- uses -----------------------------------------------------
38!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
39!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
40!|| message_mod ../starter/share/message_module/message_mod.F
41!|| submodel_mod ../starter/share/modules1/submodel_mod.F
42!||====================================================================
43 SUBROUTINE hm_read_inject1(GEO ,IGEO ,PROP_TAG ,IGTYP ,PROP_ID ,
44 . IDTITL ,UNITAB ,LSUBMODEL,IPM ,PM ,
45 . NPC ,PLD)
46C============================================================================
47C M o d u l e s
48C-----------------------------------------------
49 USE unitab_mod
50 USE elbuftag_mod
51 USE message_mod
52 USE submodel_mod
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C C o m m o n B l o c k s
61C-----------------------------------------------
62#include "units_c.inc"
63#include "param_c.inc"
64#include "com04_c.inc"
65#include "tablen_c.inc"
66C-----------------------------------------------
67C D u m m y A r g u m e n t s
68C-----------------------------------------------
69 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
70 INTEGER IGEO(*)
71 INTEGER ,INTENT(IN) :: IGTYP,PROP_ID,IPM(NPROPMI,NUMMAT),NPC(*)
72 my_real, INTENT(IN) :: PLD(*),PM(NPROPM,NUMMAT)
73 my_real, INTENT(INOUT) :: GEO(*)
74 CHARACTER(LEN=NCHARTITLE)::IDTITL
75 TYPE(PROP_TAG_) , DIMENSION(0:MAXPROP) :: PROP_TAG
76 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER IG,I,J,K,NGASES,IFLOW,IJET,NOD1,NOD2,NOD3,
81 . ICURPT
82 INTEGER MAT_ID(2,100),F_IDMASS(2,100),F_IDTEMP(2,100),
83 . F_IDMF(2,100),MW_MIXTURE,MW_MIXTURE_OK,
84 . NB_POINTS,NB_POINTS_1,NB_POINTS_OLD,
85 . IFUN_REF,IFUN_TMP,IFUN_TMP_USR
86 my_real
87 . FSMASS(100),FSTEMP(100),ASTIME,
88 . MOLFR(100),
89 . CPAI_MIX,CPBI_MIX,CPCI_MIX,CPDI_MIX,CPEI_MIX,CPFI_MIX,
90 . MF_TOT,MOL_TOT,MASS_TOT,MASS_INI,MOL_INI,MWI_MIXTURE,
91 . STP_GAMA_MIX,STP_TEMP,MASS_MOL,INIT_MASS,CPI_MIX,
92 . R_IGC1, FAC_TIME, FAC_MASS, FAC_TEMP
93 CHARACTER MESS*40
94 DATA MESS/'INJECTOR PROPERTY SET '/
95 DATA STP_TEMP/293.15/
96 LOGICAL IS_AVAILABLE, IS_ENCRYPTED
97C-----------------------------------------------
98C E x t e r n a l F u n c t i o n s
99C-----------------------------------------------
100 INTEGER NINTRI,USR2SYS
101C=======================================================================
102C
103 IS_ENCRYPTED = .FALSE.
104 IS_AVAILABLE = .FALSE.
105C----------------------
106C FROM LECGEO - GENERAL
107C----------------------
108 IGEO( 1)=PROP_ID
109 IGEO(11)=IGTYP
110 GEO(12) =IGTYP+0.1
111C----------------------
112
113 IG=IGEO(1)
114 IGEO(22)=1 !I_INJECT : Injectors (1:'INJECT1' or 2:'INJECT2')
115
116C Initialisation
117 MAT_ID=0
118 F_IDMASS=0
119 F_IDTEMP=0
120 F_IDMF=0
121 MOLFR=0
122 FSMASS=ZERO
123 FSTEMP=ZERO
124 ASTIME=ZERO
125 CPAI_MIX=0
126 CPBI_MIX=0
127 CPCI_MIX=0
128 CPDI_MIX=0
129 CPEI_MIX=0
130 CPFI_MIX=0
131 FAC_TIME=ONE
132C Reading Card 1
133 CALL HM_GET_INTV('NIP',NGASES,IS_AVAILABLE,LSUBMODEL)
134 CALL HM_GET_INTV('IFLOW',IFLOW,IS_AVAILABLE,LSUBMODEL)
135 CALL HM_GET_FLOATV('A_SCALE_X',ASTIME,IS_AVAILABLE,LSUBMODEL,UNITAB)
136 CALL HM_GET_FLOATV_DIM('A_SCALE_X',FAC_TIME,IS_AVAILABLE,LSUBMODEL,UNITAB)
137
138C Verification
139.OR. IF (NGASES<1100<NGASES) THEN
140 CALL ANCMSG(MSGID=696,
141 . MSGTYPE=MSGERROR,
142 . ANMODE=ANINFO,
143 . I1=PROP_ID,
144 . C1=IDTITL,
145 . I2=NGASES,
146 . I3=100)
147 END IF
148.AND. IF (IFLOW/=0IFLOW/=1) THEN
149 CALL ANCMSG(MSGID=697,
150 . MSGTYPE=MSGERROR,
151 . ANMODE=ANINFO,
152 . I1=PROP_ID,
153 . C1=IDTITL)
154 END IF
155C Reading ngases cards
156 IF(NGASES>0)THEN
157 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('ABG_Smass',FAC_MASS,1,IS_AVAILABLE,LSUBMODEL,UNITAB)
158 CALL HM_GET_FLOAT_ARRAY_INDEX_DIM('ABG_Stemp',FAC_TEMP,1,IS_AVAILABLE,LSUBMODEL,UNITAB)
159 ENDIF
160
161 DO I=1,NGASES
162 CALL HM_GET_INT_ARRAY_INDEX('materialIds',MAT_ID(1,I),I,IS_AVAILABLE,LSUBMODEL)
163 CALL HM_GET_INT_ARRAY_INDEX('ABG_Imass',F_IDMASS(1,I),I,IS_AVAILABLE,LSUBMODEL)
164 CALL HM_GET_INT_ARRAY_INDEX('ABG_Itemp',F_IDTEMP(1,I),I,IS_AVAILABLE,LSUBMODEL)
165 CALL HM_GET_FLOAT_ARRAY_INDEX('ABG_Smass',FSMASS(I),I,IS_AVAILABLE,LSUBMODEL,UNITAB)
166 CALL HM_GET_FLOAT_ARRAY_INDEX('ABG_Stemp',FSTEMP(I),I,IS_AVAILABLE,LSUBMODEL,UNITAB)
167C Material existence and funeration existence
168C ---
169C --- Materiaux
170 IF(FSMASS(I) == ZERO)FSMASS(I)=ONE*FAC_MASS
171 IF(FSTEMP(I) == ZERO)FSTEMP(I)=ONE*FAC_TEMP
172 MAT_ID(2,I) = NINTRI(MAT_ID(1,I),IPM,NPROPMI,NUMMAT,1)
173 IF(MAT_ID(2,I) == 0) THEN
174 CALL ANCMSG(MSGID=698,
175 . MSGTYPE=MSGERROR,
176 . ANMODE=ANINFO_BLIND_1,
177 . I1=PROP_ID,
178 . C1=IDTITL,
179 . I2=MAT_ID(1,I))
180 ELSEIF(IPM(2,MAT_ID(2,I))/=999) THEN
181 CALL ANCMSG(MSGID=857,
182 . MSGTYPE=MSGERROR,
183 . ANMODE=ANINFO_BLIND_1,
184 . I1=PROP_ID,
185 . C1=IDTITL,
186 . I2=MAT_ID(1,I))
187 END IF
188C --- Fonctions
189 IF(F_IDMASS(1,I) > 0) THEN
190 DO J=1,NFUNCT
191 IF(NPC(NFUNCT+1+J) == F_IDMASS(1,I)) F_IDMASS(2,I)=J
192 ENDDO
193 ENDIF
194 IF(F_IDTEMP(1,I) > 0) THEN
195 DO J=1,NFUNCT
196 IF(NPC(NFUNCT+1+J) == F_IDTEMP(1,I)) F_IDTEMP(2,I)=J
197 ENDDO
198 ENDIF
199.AND. IF(F_IDMASS(1,I)/=0F_IDMASS(2,I) == 0)THEN
200 CALL ANCMSG(MSGID=708,
201 . MSGTYPE=MSGERROR,
202 . ANMODE=ANINFO_BLIND_1,
203 . I1=PROP_ID,
204 . C1=IDTITL,
205 . I2=F_IDMASS(1,I))
206 ENDIF
207.AND. IF(F_IDTEMP(1,I)/=0F_IDTEMP(2,I) == 0)THEN
208 CALL ANCMSG(MSGID=708,
209 . MSGTYPE=MSGERROR,
210 . ANMODE=ANINFO_BLIND_1,
211 . I1=PROP_ID,
212 . C1=IDTITL,
213 . I2=F_IDTEMP(1,I))
214 ENDIF
215 ENDDO ! I=1,NGASES
216
217C Units conversion --------------------
218 IF(ASTIME == ZERO)ASTIME=ONE*FAC_TIME
219 R_IGC1=PM(27,MAT_ID(2,1))
220C Verification of the growth of mass function
221 DO I=1,NGASES
222 IFUN_TMP=0
223 IFUN_TMP_USR=0
224 IF (IGEO(22) == 1) THEN
225 IF (F_IDMASS(2,I)/=0) THEN
226 IFUN_TMP=F_IDMASS(2,I)
227 IFUN_TMP_USR=F_IDMASS(1,I)
228 END IF
229 ELSE IF (IGEO(22) == 2) THEN
230 IF (F_IDMF(2,I)/=0) THEN
231 IFUN_TMP=F_IDMF(2,I)
232 IFUN_TMP_USR=F_IDMF(1,I)
233 END IF
234 END IF
235 IF (IFUN_TMP/=0) THEN
236 IF ((NPC(IFUN_TMP+1)-NPC(IFUN_TMP)) >= 4) THEN
237 IF (IFLOW == 0) THEN
238 DO J = NPC(IFUN_TMP),NPC(IFUN_TMP+1)-3,2
239 IF (PLD(J+1) > PLD(J+3)) THEN
240 CALL ANCMSG(MSGID=720,
241 . MSGTYPE=MSGWARNING,
242 . ANMODE=ANINFO_BLIND_1,
243 . I1=PROP_ID,
244 . C1=IDTITL,
245 . I2=IFUN_TMP_USR,I3=I)
246 END IF
247 END DO
248 ELSE IF (IFLOW == 1) THEN
249 DO J = NPC(IFUN_TMP),NPC(IFUN_TMP+1)-1,2
250 IF (PLD(J+1) < ZERO) THEN
251 CALL ANCMSG(MSGID=721,
252 . MSGTYPE=MSGWARNING,
253 . ANMODE=ANINFO_BLIND_1,
254 . I1=PROP_ID,
255 . C1=IDTITL,
256 . I2=IFUN_TMP_USR,I3=I)
257 END IF
258 END DO
259 END IF
260 END IF
261 END IF
262 END DO
263
264C Calculation of initial characteristics of the mixture
265 MWI_MIXTURE=ZERO
266 CPAI_MIX=ZERO
267 CPBI_MIX=ZERO
268 CPCI_MIX=ZERO
269 CPDI_MIX=ZERO
270 CPEI_MIX=ZERO
271 CPFI_MIX=ZERO
272 MASS_INI=ZERO
273 MOL_INI=ZERO
274 MASS_TOT=ZERO
275 MOL_TOT=ZERO
276 INIT_MASS=ZERO
277
278C Calculation of total mass
279 DO I=1,NGASES
280 IF (F_IDMASS(2,I) > 0) THEN
281 MASS_TOT = MASS_TOT + PLD(NPC(F_IDMASS(2,I))+3)*FSMASS(I)
282 ENDIF
283 END DO
284 DO I=1,NGASES
285C Simple average in the case of a null mass
286C it is assumed that each gas arrives with the same mass
287C note that in this case the average made for mw is:
288C mw = somme (moles) / somme (masses)
289C mw = sum (1 / mass_molar) / sum (masses = 1) = ngase
290.OR. IF (MASS_TOT == ZERO F_IDMASS(2,I) == 0) THEN
291 INIT_MASS=ONE
292 ELSE
293 INIT_MASS=PLD(NPC(F_IDMASS(2,I))+3)*FSMASS(I)
294 END IF
295 MOL_TOT=MOL_TOT + INIT_MASS/PM(20,MAT_ID(2,I))
296 CPAI_MIX = CPAI_MIX + INIT_MASS*PM(21,MAT_ID(2,I))
297 CPBI_MIX = CPBI_MIX + INIT_MASS*PM(22,MAT_ID(2,I))
298 CPCI_MIX = CPCI_MIX + INIT_MASS*PM(23,MAT_ID(2,I))
299 CPDI_MIX = CPDI_MIX + INIT_MASS*PM(24,MAT_ID(2,I))
300 CPEI_MIX = CPEI_MIX + INIT_MASS*PM(25,MAT_ID(2,I))
301 CPFI_MIX = CPFI_MIX + INIT_MASS*PM(26,MAT_ID(2,I))
302 END DO
303C We use Mass Tot to detect
304C How to calculate Init_mass
305 IF (MASS_TOT == ZERO) THEN
306 MASS_TOT=NGASES
307 END IF
308 MWI_MIXTURE=MASS_TOT/MOL_TOT
309 CPAI_MIX = CPAI_MIX / MASS_TOT
310 CPBI_MIX = CPBI_MIX / MASS_TOT
311 CPCI_MIX = CPCI_MIX / MASS_TOT
312 CPDI_MIX = CPDI_MIX / MASS_TOT
313 CPEI_MIX = CPEI_MIX / MASS_TOT
314 CPFI_MIX = CPFI_MIX / MASS_TOT
315C ------------------------------------------
316 IGEO(23)=NGASES
317 IGEO(24)=IFLOW
318 DO I=1,NGASES
319 IGEO(100+(I-1)*3+1)=MAT_ID(2,I)
320 IGEO(100+(I-1)*3+2)=F_IDMASS(2,I)
321 IGEO(100+(I-1)*3+3)=F_IDTEMP(2,I)
322 END DO
323C ------------------------------------------
324 GEO(201)=ASTIME
325 GEO(202)=MWI_MIXTURE
326 GEO(203)=CPAI_MIX
327 GEO(204)=CPBI_MIX
328 GEO(205)=CPCI_MIX
329 GEO(206)=CPDI_MIX
330 GEO(207)=CPEI_MIX
331 GEO(208)=CPFI_MIX
332 CPI_MIX =CPAI_MIX
333 . +CPBI_MIX*STP_TEMP
334 . +CPCI_MIX*STP_TEMP*STP_TEMP
335 . +CPDI_MIX*STP_TEMP*STP_TEMP*STP_TEMP
336 . +CPEI_MIX/(STP_TEMP*STP_TEMP)
337 . +CPFI_MIX*STP_TEMP*STP_TEMP*STP_TEMP*STP_TEMP
338 STP_GAMA_MIX=CPI_MIX/(CPI_MIX-R_IGC1/MWI_MIXTURE)
339
340 DO I=1,NGASES
341 GEO(208+(I-1)*2+1)=FSMASS(I)
342 GEO(208+(I-1)*2+2)=FSTEMP(I)
343 END DO
344C ------------------------------------------
345 IF(IS_ENCRYPTED)THEN
346 WRITE(IOUT,1000)PROP_ID
347 ELSE
348 WRITE(IOUT,1100)IG,IFLOW,ASTIME
349 WRITE(IOUT,1110)NGASES
350 WRITE(IOUT,1115)MWI_MIXTURE,STP_GAMA_MIX,
351 . CPAI_MIX,CPBI_MIX,CPCI_MIX,
352 . CPDI_MIX,CPEI_MIX,CPFI_MIX
353 DO I=1,NGASES
354 WRITE(IOUT,1120)MAT_ID(1,I),F_IDMASS(1,I),F_IDTEMP(1,I), FSMASS(I),FSTEMP(I)
355 END DO
356 WRITE(IOUT,'(//)')
357 ENDIF
358C
359C----------------------
360C FROM LECGEO - GENERAL
361C----------------------
362.AND. IF(GEO(39)/=ZEROIGEO( 9)== 0) IGEO( 9)=NINT(GEO(39))
363.AND. IF(GEO(171)/=ZEROIGEO(10)== 0) IGEO(10)=NINT(GEO(171))
364C----------------------
365
366 RETURN
367 1000 FORMAT(
368 & 5X,'INJECTOR PROPERTY SET (/PROP/INJECT1)'/,
369 & 5X,'--------------------------------------',/,
370 & 5X,'PROPERTY SET NUMBER . . . . . . . . . .=',I10,/,
371 & 5X,'CONFIDENTIAL DATA'//)
372 1100 FORMAT(
373 & 5X,'INJECTOR PROPERTY SET (/PROP/INJECT1)'/,
374 & 5X,'PROPERTY SET NUMBER . . . . . . . . . .=',I10,/,
375 & 5X,'INCOMING MASS FLAG FOR FUNCTIONS. . . .=',I10,/,
376 & 5X,'(0:MASS/TIME, 1:MASS FLOW/TIME)',/,
377 & 5X,'ABSCISSA SCALE FACTOR',/,
378 & 5X,' FOR TIME BASED FUNCTIONS . . . . .=',1PG20.13,/)
379 1110 FORMAT(
380 & 5X,'MIXTURE DEFINTION'/,
381 & 5X,'NUMBER OF GASES . . . . . . . . . . . .=',I10,/)
382 1115 FORMAT(
383 & 5X,'INITIAL CHARACTERISTICS OF MIXTURE',/,
384 & 5X,'----------------------------------',/,
385 & 5X,'MOLECULAR WEIGHT. . . . . . . . . . . .=',1PG20.13,/,
386 & 5X,'STP GAMMA . . . . . . . . . . . . . . .=',1PG20.13,/,
387 & 5X,'COEFFICIENT CPA . . . . . . . . . . . .=',1PG20.13,/,
388 & 5X,'COEFFICIENT CPB . . . . . . . . . . . .=',1PG20.13,/,
389 & 5X,'COEFFICIENT CPC . . . . . . . . . . . .=',1PG20.13,/,
390 & 5X,'COEFFICIENT CPD . . . . . . . . . . . .=',1PG20.13,/,
391 & 5X,'COEFFICIENT CPE . . . . . . . . . . . .=',1PG20.13,/,
392 & 5X,'COEFFICIENT CPF . . . . . . . . . . . .=',1PG20.13,/)
393 1120 FORMAT(
394 & 10X,'GAS NUMBER. . . . . . . . . . . . . . .=',I10,/,
395 & 10X,'TIME FUNCTION FOR INCOMING MASS . . . .=',I10,/,
396 & 10X,'TIME FUNCTION FOR INCOMING GAS TEMP . .=',I10,/,
397 & 10X,'SCALE FACTOR FOR INCOMING MASS. . . . .=',1PG20.13,/,
398 & 10X,'SCALE FACTOR FOR INCOMING GAS TEMP. . .=',1PG20.13,/)
399 RETURN
400 END
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_read_inject1(geo, igeo, prop_tag, igtyp, prop_id, idtitl, unitab, lsubmodel, ipm, pm, npc, pld)
integer, parameter nchartitle
program starter
Definition starter.F:39