OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat79.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_mat79 ../starter/source/materials/mat/mat079/hm_read_mat79.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_intv ../starter/source/devtools/hm_reader/hm_get_intv.f
31!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
32!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
33!||--- uses -----------------------------------------------------
34!|| elbuftag_mod ../starter/share/modules1/elbuftag_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_mat79(
39 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NFUNC ,
40 . MAXFUNC ,IFUNC ,PARMAT ,MAT_ID ,PM ,
41 . ISRATE ,MTAG ,TITR ,UNITAB ,LSUBMODEL,
42 . MATPARAM )
43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C READ MAT LAW79 WITH HM READER
47C-----------------------------------------------
48C M o d u l e s
49C-----------------------------------------------
50 USE unitab_mod
51 USE message_mod
52 USE submodel_mod
53 USE matparam_def_mod
54 USE elbuftag_mod
56C-----------------------------------------------
57C I m p l i c i t T y p e s
58C-----------------------------------------------
59#include "implicit_f.inc"
60C-----------------------------------------------
61C C o m m o n B l o c k s
62C-----------------------------------------------
63#include "units_c.inc"
64#include "param_c.inc"
65C-----------------------------------------------
66C D u m m y A r g u m e n t s
67C-----------------------------------------------
68 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
69 my_real, INTENT(INOUT) :: PARMAT(100), UPARAM(MAXUPARAM), PM(NPROPM)
70 INTEGER, INTENT(INOUT) :: IFUNC(MAXFUNC), NFUNC, MAXFUNC, MAXUPARAM,
71 . NUPARAM, NUVAR, ISRATE
72 INTEGER, INTENT(IN) :: MAT_ID
73 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
74 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
75 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
76 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER MATS,IFLAG1,IFLAG2,ITEMAX,IDEL
81 my_real
82 . SHEAR, AA, BB, MM, NN, CC, EPS0, SIGFMAX, TMAX, HEL, PHEL,
83 . D1, D2, K1, K2, K3, BETA, YOUNG, NU, RHO0, RHOR, ASRATE,
84 . epsmax
85 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE
86C-----------------------------------------------
87C S o u r c e
88C-----------------------------------------------
89
90 is_encrypted = .false.
91 is_available = .false.
92
93 CALL hm_option_is_encrypted(is_encrypted)
94C----------------------------------------------------------------
95C #RhoO rho_ref
96 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
97 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
98C----------------------------------------------------------------
99C #G
100 CALL hm_get_floatv('tau_shear', shear, is_available, lsubmodel, unitab)
101C----------------------------------------------------------------
102C #a b m n
103 CALL hm_get_floatv('MAT_A', aa, is_available, lsubmodel, unitab)
104 CALL hm_get_floatv('MAT_B', bb, is_available, lsubmodel, unitab)
105 CALL hm_get_floatv('MAT_M', mm, is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('MAT_N', nn, is_available, lsubmodel, unitab)
107C----------------------------------------------------------------
108C #c epsp_0 sigma_f_max
109 CALL hm_get_floatv('MAT_C', cc, is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_Epsilon_F', eps0, is_available, lsubmodel, unitab)
111 CALL hm_get_floatv('MAT_SIG1max_t', sigfmax, is_available, lsubmodel, unitab)
112 CALL hm_get_floatv('MAT_FCUT', asrate, is_available, lsubmodel, unitab)
113C----------------------------------------------------------------
114C #T HEL PHEL
115 CALL hm_get_floatv('MAT_T0', tmax, is_available, lsubmodel, unitab)
116 CALL hm_get_floatv('MAT_E', hel, is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_EPS', phel, is_available, lsubmodel, unitab)
118C----------------------------------------------------------------
119C #D1 D2 IDEL EPSMAX
120 CALL hm_get_floatv('D1' , d1, is_available, lsubmodel, unitab)
121 CALL hm_get_floatv('D2' , d2, is_available, lsubmodel, unitab)
122 CALL hm_get_intv ('IDEL',idel, is_available, lsubmodel)
123 CALL hm_get_floatv('EPSMAX',epsmax, is_available, lsubmodel, unitab)
124C----------------------------------------------------------------
125C #K1 K2 K3 BETA
126 CALL hm_get_floatv('K1', k1, is_available, lsubmodel, unitab)
127 CALL hm_get_floatv('K2', k2, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('K3', k3, is_available, lsubmodel, unitab)
129 CALL hm_get_floatv('MAT_Beta', beta, is_available, lsubmodel, unitab)
130
131 nuvar = 2
132 pm(1) = rhor
133 pm(89) = rho0
134
135C Memory allocation flags
136 mtag%G_EPSD = 1
137 mtag%L_EPSD = 1
138 mtag%G_PLA = 1
139 mtag%L_PLA = 1
140 mtag%G_DMG = 1
141 mtag%L_DMG = 1
142C
143 !----------------------------------------------------------
144 ! Activation of strain-rate filtering
145 IF (asrate /= zero) THEN
146 israte = 1
147 ELSE
148 israte = 0
149 ENDIF
150 ! Check flag for element deletion
151 idel = min(idel,3)
152 idel = max(0,idel)
153 ! Critical plastic strain
154 IF (epsmax == zero) epsmax = infinity
155 !----------------------------------------------------------
156C----------
157C DEFAULT
158C----------
159 IF(cc==zero) eps0 = one
160 IF(sigfmax==zero) sigfmax=infinity
161C--------
162C ERRORS
163C--------
164 IF(phel > hel) THEN
165 CALL ancmsg(msgid=907,
166 . msgtype=msgerror,
167 . anmode=aninfo,
168 . i1=mat_id,
169 . c1=titr)
170 ENDIF
171 IF(shear <= zero)THEN
172 CALL ancmsg(msgid=908,
173 . msgtype=msgerror,
174 . anmode=aninfo,
175 . i1=mat_id,
176 . c1=titr)
177 ENDIF
178 IF(k1 <= zero)THEN
179 CALL ancmsg(msgid=909,
180 . msgtype=msgerror,
181 . anmode=aninfo,
182 . i1=mat_id,
183 . c1=titr)
184 ENDIF
185 IF(eps0 <= zero)THEN
186 CALL ancmsg(msgid=910,
187 . msgtype=msgerror,
188 . anmode=aninfo,
189 . i1=mat_id,
190 . c1=titr)
191 ENDIF
192 IF(beta < zero .OR. beta > one)THEN
193 CALL ancmsg(msgid=911,
194 . msgtype=msgerror,
195 . anmode=aninfo,
196 . i1=mat_id,
197 . c1=titr)
198 ENDIF
199C
200
201C
202 uparam(1) = shear
203 uparam(2) = two*shear
204 uparam(3) = aa
205 uparam(4) = bb
206 uparam(5) = mm
207 uparam(6) = nn
208 uparam(7) = cc
209 uparam(8) = eps0
210 uparam(9) = sigfmax
211 uparam(10)= tmax/phel
212 uparam(11)= phel
213 uparam(12)= three_half*(hel-phel)
214 uparam(13)= d1
215 uparam(14)= d2
216 uparam(15)= k1
217 uparam(16)= k2
218 uparam(17)= k3
219 uparam(18)= beta
220 uparam(19)= idel
221 uparam(20)= epsmax
222 nuparam= 20
223C
224 nu=(three*k1-two*shear)/(six*k1+two*shear)
225 young=nine*k1*shear/(three*k1+shear)
226 parmat(1) = k1
227 parmat(2) = young
228 parmat(3) = nu
229 parmat(4) = israte
230 parmat(5) = asrate
231C
232 ! Properties compatibility
233 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
234 CALL init_mat_keyword(matparam,"SPH")
235C
236 WRITE(iout, 900) trim(titr),mat_id,79
237 WRITE(iout,1000)
238 IF(is_encrypted)THEN
239 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
240 ELSE
241 WRITE(iout,1050) rho0
242 WRITE(iout,1100) shear, aa, bb, mm, nn, cc, eps0, sigfmax
243 WRITE(iout,1200) tmax, hel, phel, d1, d2, idel, epsmax
244 WRITE(iout,1300) k1, k2, k3, beta
245 WRITE(iout,1400) young, nu
246 IF (israte > 0) WRITE(iout,1500) asrate
247 ENDIF
248C
249 RETURN
250C
251 900 FORMAT(/
252 & 5x,a,/,
253 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . . .=',i10/,
254 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . . .=',i10/)
255 1000 FORMAT(
256 & 5x,' JOHNSON HOLMQUIST MATERIAL',/,
257 & 5x,' --------------------------',//)
258 1050 FORMAT(
259 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . .=',1pg20.13/)
260 1100 FORMAT(
261 & 5x,'SHEAR MODULUS . . . . . . . . . . . . . . .=',1pg20.13/,
262 & 5x,'INTACT STRENGTH CONSTANT (A). . . . . . . .=',1pg20.13/,
263 & 5x,'FRACTURED STRENGTH CONSTANT (B) . . . . . .=',1pg20.13/,
264 & 5x,'FRACTURED STRENGTH EXPONENT (M) . . . . . .=',1pg20.13/,
265 & 5x,'INTACT STRENGTH EXPONENT (N). . . . . . . .=',1pg20.13/,
266 & 5x,'STRAIN RATE COEFFICIENT (C) . . . . . . . .=',1pg20.13/,
267 & 5x,'REFERENCE STRAIN RATE . . . . . . . . . . .=',1pg20.13/,
268 & 5x,'MAXIMUM NORMALIZED FRACTURED STRENGTH . . .=',1pg20.13//)
269 1200 FORMAT(
270 & 5x,'MAXIMUM PRESSURE TENSILE STRENGTH . . . . .=',1pg20.13/,
271 & 5x,'HUGONIOT ELASTIC LIMIT (HEL). . . . . . . .=',1pg20.13/,
272 & 5x,'PRESSURE AT HUGONIOT ELASTIC LIMIT. . . . .=',1pg20.13/,
273 & 5x,'DAMAGE CONSTANT (D1). . . . . . . . . . . .=',1pg20.13/,
274 & 5x,'DAMAGE EXPONENT (D2). . . . . . . . . . . .=',1pg20.13/,
275 & 5x,'ELEMENT DELETION FLAG (IDEL). . . . . . . .=',i10/,
276 & 5x,' IDEL = 0: NO ELEMENT DELETION ',/,
277 & 5x,' IDEL = 1: ELEMENT DELETION IN TENSION ONLY ',/,
278 & 5x,' IDEL = 2: ELEMENT DELETION IF PLASTIC STRAIN > EPSMAX',/,
279 & 5x,' IDEL = 3: ELEMENT DELETION IF DAMAGE = 1.0 ',/,
280 & 5x,'CRITICAL PLASTIC STRAIN (EPSMAX). . . . . .=',1pg20.13/)
281 1300 FORMAT(
282 & 5x,'BULK MODULUS (K1) . . . . . . . . . . . . .=',1pg20.13/
283 & 5x,'pressure coefficient (k2) . . . . . . . . .=',1PG20.13/
284 & 5X,'pressure coefficient(k3) . . . . . . . . .=',1PG20.13/
285 & 5X,'bulking pressure coefficient(beta) . . . .=',1PG20.13)
286 1400 FORMAT(
287 & 5X,'young',1h','s modulus . . . . . . . . . . . . . .=',1PG20.13/,
288 & 5X,'poisson',1H','S RATIO . . . . . . . . . . . . . .=',1pg20.13/)
289 1500 FORMAT(
290 & 5x,'STRAIN RATE FILTERING FREQUENCY . . . . . .=',1pg20.13/)
291C
292 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat79(uparam, maxuparam, nuparam, nuvar, nfunc, maxfunc, ifunc, parmat, mat_id, pm, israte, mtag, titr, unitab, lsubmodel, matparam)
subroutine init_mat_keyword(matparam, keyword)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
integer, parameter nchartitle
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