OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_eos_nasg.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_eos_nasg ../starter/source/materials/eos/hm_read_eos_nasg.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_eos ../starter/source/materials/eos/hm_read_eos.F
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_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.f
31!||--- uses -----------------------------------------------------
32!|| message_mod ../starter/share/message_module/message_mod.F
33!|| submodel_mod ../starter/share/modules1/submodel_mod.F
34!||====================================================================
35 SUBROUTINE hm_read_eos_nasg(IOUT,PM,UNITAB,IUNIT,LSUBMODEL,IMIDEOS,MAT_PARAM)
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 NOBLE-ABEL-STIFFENED-GAS (NASG) EQUATION OF STATE
48C-----------------------------------------------
49C C o m m e n t s
50C-----------------------------------------------
51C RHOI = PM(89) -> provided by /MAT
52C RHOR = PM(01) -> provided by /MAT (can be erased by EOS if present : obsolete)
53C => MU0 = RHO/RHOR-1.
54C PM(31) = P(MU0,E0) -> will be used to initialize diagonal of stress tensor SIG(1:3,*)
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
63 INTEGER IOUT,IUNIT
64 my_real pm(npropm)
65 TYPE(submodel_data), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
66 TYPE(matparam_struct_),INTENT(INOUT) :: MAT_PARAM
67 INTEGER,INTENT(IN) :: IMIDEOS
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71#include "param_c.inc"
72C-----------------------------------------------
73C L o c a l V a r i a b l e s
74C-----------------------------------------------
75 my_real gamma, p0, e0, psh, rho0,pstar,rhoi,rhor,cv,t0,b,q,q_
76 my_real num,denom,unpmu
77 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_RHO0
78 my_real :: pp,dpde,dpdmu ,g0,ssp0,mu0,df
79C-----------------------------------------------
80C S o u r c e L i n e s
81C-----------------------------------------------
82 is_encrypted = .false.
83 is_available = .false.
84 is_available_rho0 = .false.
85
86 CALL hm_option_is_encrypted(is_encrypted)
87
88 CALL hm_get_floatv('b_Covolume', b, is_available,lsubmodel,unitab)
89 CALL hm_get_floatv('Gamma_Constant', gamma, is_available,lsubmodel,unitab)
90 CALL hm_get_floatv('P_star', pstar, is_available,lsubmodel,unitab)
91 CALL hm_get_floatv('E0', q, is_available,lsubmodel,unitab)
92
93 CALL hm_get_floatv('LAW5_PSH', psh, is_available,lsubmodel,unitab)
94 CALL hm_get_floatv('LAW5_P0', p0, is_available,lsubmodel,unitab)
95 CALL hm_get_floatv('EOS_C0', cv, is_available,lsubmodel,unitab)
96 CALL hm_get_floatv('Refer_Rho', rho0, is_available_rho0,lsubmodel,unitab)
97
98 !---initial density
99 rhor = pm(1)
100 rhoi = pm(89)
101 IF(rho0 > zero) THEN
102 rhor = rho0
103 pm(1)= rho0
104 mat_param%RHO = rho0
105 ELSE
106 rho0=rhor
107 ENDIF
108
109 !---Initial State Deduced from e=eos(P0,T0) and t=eos(P0,rho0)
110 t0=(one/rho0-b)*(p0+pstar)/(gamma-one)/cv
111 e0=(p0+gamma*pstar)*(one-rho0*b)/(gamma-1)+rho0*q
112
113 !---warning/errors :
114 ! GAMMA <=0
115
116 IF(gamma <= one)THEN
117 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,i1=imideos,
118 . c1='/EOS/NASG',
119 . c2='gamma must be greater than 1.0')
120 ENDIF
121
122 IF(E0 <= ZERO)THEN
123 CALL ANCMSG(MSGID=67,MSGTYPE=MSGERROR,ANMODE=ANINFO,I1=IMIDEOS,
124 . C1='/eos/nasg',
125 . C2='parameters are resulting into a negative energy : e0')
126 ENDIF
127
128 Q_ = ZERO
129 !---buffer storage
130 PM(032)= (E0-RHO0*q)*(GAMMA-ONE)/(ONE-RHO0*b) !BULK = (1+ยต)*dP/dmu (partial derivative at constant E)
131 PM(088)=PSH
132 PM(023)=E0
133 PM(031)=P0
134
135 MAT_PARAM%EOS%NUPARAM = 7
136 MAT_PARAM%EOS%NIPARAM = 0
137 MAT_PARAM%EOS%NFUNC = 0
138 MAT_PARAM%EOS%NTABLE = 0
139 CALL MAT_PARAM%EOS%CONSTRUCT() !allocations
140
141 MAT_PARAM%EOS%UPARAM(1) = GAMMA
142 MAT_PARAM%EOS%UPARAM(2) = P0
143 MAT_PARAM%EOS%UPARAM(3) = PSTAR
144 MAT_PARAM%EOS%UPARAM(4) = Q
145 MAT_PARAM%EOS%UPARAM(5) = Q_
146 MAT_PARAM%EOS%UPARAM(6) = B
147 MAT_PARAM%EOS%UPARAM(7) = RHO0
148
149 MAT_PARAM%EOS%PSH = PSH
150 MAT_PARAM%EOS%CV = Cv
151 MAT_PARAM%EOS%E0 = E0
152 IF (T0 == ZERO) T0 = THREE100
153 MAT_PARAM%THERM%TINI =T0
154 PM(79) = T0
155
156 !P0
157 IF(RHOI == ZERO)THEN
158 MU0 = ZERO ! error 683 already displayed
159 ELSE
160 IF(RHOR /= ZERO)THEN
161 MU0 = RHOI/RHOR-ONE
162 ELSE
163 MU0 = ZERO ! error 683 already displayed
164 ENDIF
165 ENDIF
166
167 IF(RHOI /= ZERO)THEN
168 DF = RHOR/RHOI
169 ELSE
170 DF = ZERO
171 ENDIF
172
173 !SSP0
174 SSP0 = ZERO
175 G0 = PM(22)
176 RHOI = PM(89)
177 UNPMU = ONE+MU0
178 DENOM = (ONE-RHOI*B*UNPMU)
179 NUM = (E0-RHOI*Q)
180 PP = P0
181 dPdE = (GAMMA-ONE)*UNPMU / DENOM !partial derivative
182 DPDMU = (GAMMA-ONE)*NUM/DENOM/DENOM + DPDE*(PP)/UNPMU/UNPMU
183
184 DPDMU=MAX(ZERO,DPDMU)
185 IF(RHOR > ZERO) SSP0 = SQRT((DPDMU + TWO_THIRD*G0)/RHOR)
186 PM(32) = DPDMU ! bulk modulus
187 PM(27) = SSP0
188
189 !---listing output
190 WRITE(IOUT,1000)
191 IF(IS_ENCRYPTED)THEN
192 WRITE(IOUT,'(5x,a,//)')'confidential data'
193 ELSE
194 WRITE(IOUT,1500)GAMMA,b,q,PSH,PSTAR,Cv,P0,E0
195 IF(IS_AVAILABLE_RHO0)WRITE(IOUT,1501)PM(1)
196 ENDIF
197
198 RETURN
199 1000 FORMAT(
200 & 5X,' noble-abel-stiffened gas eos',/,
201 & 5X,' ----------------------------',/)
202 1500 FORMAT(
203 & 5X,'gamma . . . . . . . . . . . . . . . . . .=',1PG20.13/,
204 & 5X,'b . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
205 & 5X,'q . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
206 & 5X,'psh . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
207 & 5X,'pstar . . . . . . . . . . . . . . . . . .=',1PG20.13/,
208 & 5X,'cv. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
209 & 5X,'p0. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
210 & 5X,'e0 . . . . . . . . . . . . . . . . . . .=',1PG20.13)
211 1501 FORMAT(
212 & 5X,'eos reference density . . . . . . . . . .=',1PG20.13)
213
214 RETURN
215 END
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_eos_nasg(iout, pm, unitab, iunit, lsubmodel, imideos, mat_param)
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:895
program starter
Definition starter.F:39