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)
36C-----------------------------------------------
37C M o d u l e s
38C-----------------------------------------------
39 USE unitab_mod
40 USE submodel_mod
41 USE message_mod
42C-----------------------------------------------
43C D e s c r i p t i o n
44C-----------------------------------------------
45C reading parameters for
46C NOBLE-ABEL-STIFFENED-GAS (NASG) EQUATION OF STATE
47C-----------------------------------------------
48C C o m m e n t s
49C-----------------------------------------------
50C RHOI = PM(89) -> provided by /MAT
51C RHOR = PM(01) -> provided by /MAT (can be erased by EOS if present : obsolete)
52C => MU0 = RHO/RHOR-1.
53C PM(31) = P(MU0,E0) -> will be used to initialize diagonal of stress tensor SIG(1:3,*)
54C-----------------------------------------------
55C I m p l i c i t T y p e s
56C-----------------------------------------------
57#include "implicit_f.inc"
58C-----------------------------------------------
59C D u m m y A r g u m e n t s
60C-----------------------------------------------
61 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
62 INTEGER IIN,IOUT,IUNIT
63 my_real pm(npropm)
64 TYPE(submodel_data), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
65 INTEGER,INTENT(IN) :: IMIDEOS
66C-----------------------------------------------
67C C o m m o n B l o c k s
68C-----------------------------------------------
69#include "param_c.inc"
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 my_real gamma, p0, e0, psh, rho0,fac_l,fac_t,fac_m,fac_c,pstar,rhoi,rhor,cv,t0,b,q,q_
74 my_real num,denom,unpmu
75 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_RHO0
76 my_real :: pp,dpde,dpdmu ,g0,ssp0,mu0,df
77C-----------------------------------------------
78C S o u r c e L i n e s
79C-----------------------------------------------
80 is_encrypted = .false.
81 is_available = .false.
82 is_available_rho0 = .false.
83
84 CALL hm_option_is_encrypted(is_encrypted)
85
86 CALL hm_get_floatv('b_Covolume', b, is_available,lsubmodel,unitab)
87 CALL hm_get_floatv('Gamma_Constant', gamma, is_available,lsubmodel,unitab)
88 CALL hm_get_floatv('P_star', pstar, is_available,lsubmodel,unitab)
89 CALL hm_get_floatv('E0', q, is_available,lsubmodel,unitab)
90
91 CALL hm_get_floatv('LAW5_PSH', psh, is_available,lsubmodel,unitab)
92 CALL hm_get_floatv('LAW5_P0', p0, is_available,lsubmodel,unitab)
93 CALL hm_get_floatv('EOS_C0', cv, is_available,lsubmodel,unitab)
94 CALL hm_get_floatv('Refer_Rho', rho0, is_available_rho0,lsubmodel,unitab)
95
96 !---initial density
97 rhor = pm(1)
98 rhoi = pm(89)
99 IF(rho0 > zero) THEN
100 rhor = rho0
101 pm(1)= rho0
102 ELSE
103 rho0=rhor
104 ENDIF
105
106 !---Initial State Deduced from e=eos(P0,T0) and t=eos(P0,rho0)
107 t0=(one/rho0-b)*(p0+pstar)/(gamma-one)/cv
108 e0=(p0+gamma*pstar)*(one-rho0*b)/(gamma-1)+rho0*q
109
110 !---warning/errors :
111 ! GAMMA <=0
112
113 IF(gamma <= one)THEN
114 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
115 . i1=imideos,
116 . c1='/EOS/NASG',
117 . c2='GAMMA MUST BE GREATER THAN 1.0')
118 ENDIF
119
120 IF(e0 <= zero)THEN
121 CALL ancmsg(msgid=67,msgtype=msgerror,anmode=aninfo,
122 . i1=imideos,
123 . c1='/EOS/NASG',
124 . c2='PARAMETERS ARE RESULTING INTO A NEGATIVE ENERGY : E0')
125 ENDIF
126
127 q_ = zero
128 !---buffer storage
129 pm(034)=gamma
130 pm(032)=p0
131 pm(088)=psh
132 pm(023)=e0
133 pm(160)=pstar
134 pm(031)=p0
135 pm(035)=q
136 pm(036)=q_
137 pm(161)=b
138 pm(162)=cv
139 pm(079)=t0
140 IF(pm(79)==zero)pm(79)=three100
141
142 !P0
143 IF(rhoi == zero)THEN
144 mu0 = zero ! error 683 already displayed
145 ELSE
146 IF(rhor /= zero)THEN
147 mu0 = rhoi/rhor-one
148 ELSE
149 mu0 = zero ! error 683 already displayed
150 ENDIF
151 ENDIF
152
153 IF(rhoi /= zero)THEN
154 df = rhor/rhoi
155 ELSE
156 df = zero
157 ENDIF
158
159 !SSP0
160 ssp0 = zero
161 g0 = pm(22)
162 rhoi = pm(89)
163 unpmu = one+mu0
164 denom = (one-rhoi*b*unpmu)
165 num = (e0-rhoi*q)
166 pp = p0
167 dpde = (gamma-one)*unpmu / denom !partial derivative
168 dpdmu = (gamma-one)*num/denom/denom + dpde*(pp)/unpmu/unpmu
169
170 dpdmu=max(zero,dpdmu)
171 IF(rhor > zero) ssp0 = sqrt((dpdmu + two_third*g0)/rhor)
172 pm(27)=ssp0
173
174 !---listing output
175 WRITE(iout,1000)
176 IF(is_encrypted)THEN
177 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
178 ELSE
179 WRITE(iout,1500)gamma,b,q,psh,pstar,cv,p0,e0
180 IF(is_available_rho0)WRITE(iout,1501)pm(1)
181 ENDIF
182
183 RETURN
184 1000 FORMAT(
185 & 5x,' NOBLE-ABEL-STIFFENED GAS EOS',/,
186 & 5x,' ----------------------------',/)
187 1500 FORMAT(
188 & 5x,'GAMMA . . . . . . . . . . . . . . . . . .=',1pg20.13/,
189 & 5x,'b . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
190 & 5x,'q . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
191! & 5X,'q_. . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
192 & 5x,'PSH . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
193 & 5x,'PSTAR . . . . . . . . . . . . . . . . . .=',1pg20.13/,
194 & 5x,'Cv. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
195 & 5x,'P0. . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
196! & 5X,'T0 . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
197 & 5x,'E0 . . . . . . . . . . . . . . . . . . .=',1pg20.13)
198 1501 FORMAT(
199 & 5x,'EOS REFERENCE DENSITY . . . . . . . . . .=',1pg20.13)
200
201 RETURN
202 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)
#define max(a, b)
Definition macros.h:21
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