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

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_eos_ideal_gas_vt (iout, pm, unitab, iunit, lsubmodel, imideos, mat_param)

Function/Subroutine Documentation

◆ hm_read_eos_ideal_gas_vt()

subroutine hm_read_eos_ideal_gas_vt ( integer iout,
pm,
type (unit_type_), intent(in) unitab,
integer iunit,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel,
integer, intent(in) imideos,
type(matparam_struct_), intent(inout) mat_param )

Definition at line 35 of file hm_read_eos_ideal_gas_vt.F.

36C-----------------------------------------------
37C M o d u l e s
38C-----------------------------------------------
39 USE unitab_mod
40 USE submodel_mod
41 USE message_mod
42 USE matparam_def_mod, ONLY : matparam_struct_
43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C reading parameters for
47C IDEAL-GAS EQUATION OF STATE WITH CP(T) FUNCTION
48C Cp(T) = A0 + A1.T + A2.T^2 + A3.T^3 + A4.T^4 + A5.T^5
49C
50C clarification :
51C Cp : J/K/kg
52C Cv : J/K/kg
53C R : J.K/mol
54C r : J/kg/K
55C-----------------------------------------------
56C C o m m e n t s
57C-----------------------------------------------
58C RHOI = PM(89) -> provided by /MAT
59C RHOR = PM(01) -> provided by /MAT (can be erased by EOS if present : obsolete)
60C => MU0 = RHO/RHOR-1.
61C PM(31) = P(MU0,T0) -> will be used to initialize diagonal of stress tensor SIG(1:3,*)
62C-----------------------------------------------
63C I m p l i c i t T y p e s
64C-----------------------------------------------
65#include "implicit_f.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 IIN,IOUT,IUNIT
71 my_real pm(npropm)
72 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
73 TYPE(MATPARAM_STRUCT_),INTENT(INOUT) :: MAT_PARAM
74 INTEGER,INTENT(IN) :: IMIDEOS
75C-----------------------------------------------
76C C o m m o n B l o c k s
77C-----------------------------------------------
78#include "param_c.inc"
79C-----------------------------------------------
80C L o c a l V a r i a b l e s
81C-----------------------------------------------
82 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
83 my_real :: r_gas,r_gas_, m_gas, a0, a1, a2, a3, a4, a5, cp
84 INTEGER :: USER_CURVEID, CURVEID, JJ
85 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_RHO0
86C-----------------------------------------------
87C S o u r c e L i n e s
88C-----------------------------------------------
89 is_encrypted = .false.
90 is_available = .false.
91 is_available_rho0 = .false.
92
93 CALL hm_option_is_encrypted(is_encrypted)
94
95 gamma=zero
96
97 CALL hm_get_floatv('MAT_R', r_gas_, is_available,lsubmodel,unitab)
98 CALL hm_get_floatv('LAW5_P0', p0, is_available,lsubmodel,unitab)
99 CALL hm_get_floatv('LAW5_PSH', psh, is_available,lsubmodel,unitab)
100 CALL hm_get_floatv('T_Initial', t0, is_available,lsubmodel,unitab)
101 CALL hm_get_floatv('Refer_Rho', rho0, is_available_rho0,lsubmodel,unitab)
102 CALL hm_get_floatv('MAT_C0', a0, is_available,lsubmodel,unitab)
103 CALL hm_get_floatv('MAT_C1', a1, is_available,lsubmodel,unitab)
104 CALL hm_get_floatv('MAT_C2', a2, is_available,lsubmodel,unitab)
105 CALL hm_get_floatv('MAT_C3', a3, is_available,lsubmodel,unitab)
106 CALL hm_get_floatv('mat_c4', A4, IS_AVAILABLE,LSUBMODEL,UNITAB)
107
108 RHOR = PM(1)
109 RHOI = PM(89)
110
111 IF(RHO0 > ZERO) THEN
112 RHOR = RHO0
113 PM(1)= RHO0
114 MAT_PARAM%RHO = RHO0
115 ELSE
116 RHO0=RHOR
117 ENDIF
118
119 IF(P0*T0 /= ZERO)THEN
120 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,
121 . I1=IMIDEOS,
122 . C1='/eos/ideal-gas-vt',
123 . C2='p0 and t0 cannot be both defined')
124 ENDIF
125
126 IF(r_gas_ <= ZERO)THEN
127 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=IMIDEOS,
128 . C1='/eos/ideal-gas-vt',
129 . C2='gas constant r must be strictly positive')
130 P0 = ZERO
131 ELSE
132 ! P0= rho0.r.T0
133 ! R = r/M
134 IF(T0 > ZERO) THEN
135 P0 = r_gas_ * RHO0 * T0
136.AND. ELSEIF(P0 /= ZERO RHO0 /= ZERO)THEN
137 T0 = P0/r_gas_/RHO0
138 ELSE
139 T0=0
140 P0=ZERO
141 ENDIF
142
143 ENDIF
144
145 IF(P0 <= ZERO)THEN
146 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,
147 . I1=IMIDEOS,
148 . C1='/eos/ideal-gas-vt',
149 . C2='initial pressure must be positive')
150 ENDIF
151
152 IF(T0 < ZERO)THEN
153 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,
154 . I1=IMIDEOS,
155 . C1='/eos/ideal-gas-vt',
156 . C2='temperature must be positive(unit:kelvin)')
157 ENDIF
158
159
160 IF(RHOI == ZERO)THEN
161 MU0 = ZERO ! error 683 already displayed
162 ELSE
163 IF(RHOR /= ZERO)THEN
164 MU0 = RHOI/RHOR-ONE
165 ELSE
166 MU0 = ZERO ! error 683 already displayed
167 ENDIF
168 ENDIF
169
170 IF(RHOI /= ZERO)THEN
171 DF = RHOR/RHOI
172 ELSE
173 DF = ZERO
174 ENDIF
175
176 CP = A0 + A1*T0 + A2*T0*T0 + A3*T0**3 + A4*T0**4
177
178 IF(CP < r_GAS_)THEN
179 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,
180 . I1=IMIDEOS,
181 . C1='/eos/ideal-gas-vt',
182 . C2='cp(0) < r is not expected. check input function')
183 ENDIF
184
185 E0 = RHO0 * (A0 * T0 + HALF * A1 * T0**2 + THIRD * A2 * T0**3 + FOURTH * A3 * T0**4 +
186 . ONE_FIFTH * A4 * T0**5 - r_GAS_ * T0)
187
188 PM(88) = PSH
189 PM(23) = E0
190 PM(31) = P0-PSH !used to init stress tensor
191 PM(32) = A0
192 PM(104)=P0-PSH
193
194 MAT_PARAM%EOS%NUPARAM = 7
195 MAT_PARAM%EOS%NIPARAM = 0
196 MAT_PARAM%EOS%NFUNC = 0
197 MAT_PARAM%EOS%NTABLE = 0
198 CALL MAT_PARAM%EOS%CONSTRUCT() !allocations
199
200 MAT_PARAM%EOS%UPARAM(1) = A0
201 MAT_PARAM%EOS%UPARAM(2) = A1
202 MAT_PARAM%EOS%UPARAM(3) = A2
203 MAT_PARAM%EOS%UPARAM(4) = A3
204 MAT_PARAM%EOS%UPARAM(5) = A4
205 MAT_PARAM%EOS%UPARAM(6) = r_gas_ ! r=R_GAS/M
206 MAT_PARAM%EOS%UPARAM(7) = P0-PSH
207 IF (T0 == ZERO) T0 = THREE100
208 MAT_PARAM%THERM%TINI =THREE100
209 PM(79) = THREE100
210
211 !SSP0
212 CV = CP - r_gas_
213 IF(CV /= ZERO)THEN
214 GAMMA = CP/CV
215 ELSE
216 GAMMA = ZERO ! this error is managed above (CP < r_GAS_)
217 ENDIF
218
219 MAT_PARAM%EOS%PSH = PSH
220 MAT_PARAM%EOS%CV = CV
221 MAT_PARAM%EOS%E0 = E0
222
223 SSP0 = SQRT(GAMMA*r_gas_*T0)
224 G0 = PM(22) ! 0.0 with physical input.However mathematical model allows any positive value.
225 RHOI = PM(89)
226 DPDMU = RHO0*GAMMA*r_gas_*T0
227
228 DPDMU=MAX(ZERO,DPDMU)
229 IF(RHOR > ZERO) SSP0 = SQRT((DPDMU + TWO_THIRD*G0)/RHOR)
230 PM(27)=SSP0
231
232 WRITE(IOUT,1000)
233
234 IF(IS_ENCRYPTED)THEN
235 WRITE(IOUT,'(5x,a,//)')'confidential data'
236 ELSE
237 WRITE(IOUT,1500)r_GAS_,T0,P0,PSH,Cp,A0,A1,A2,A3,A4
238 IF(IS_AVAILABLE_RHO0)WRITE(IOUT,1501)PM(1)
239 ENDIF
240
241 RETURN
242 1000 FORMAT(
243 & 5X,' ideal gas eos(volume-temperature) : p=rho.r.t ',/,
244 & 5X,' ---------------------------------------------- ',/)
245 1500 FORMAT(
246 & 5X,'gas constant(r). . . . . . . . . . . . .=',1PG20.13/,
247 & 5X,'initial temperature . . . . . . . . . . .=',1PG20.13/,
248 & 5X,'initial pressure. . . . . . . . . . . . .=',1PG20.13/,
249 & 5X,'pressure shift. . . . . . . . . . . . . .=',1PG20.13/,
250 & 5X,'initial massic heat capactity . . . . . .=',1PG20.13/,
251 & 5X,'a0. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
252 & 5X,'a1. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
253 & 5X,'a2. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
254 & 5X,'a3. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
255 & 5X,'a4. . . . . . . . . . . . . . . . . . . .=',1PG20.13)
256 1501 FORMAT(
257 & 5X,'eos reference density . . . . . . . . . .=',1PG20.13)
258
259 RETURN
260
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)