OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat48.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_mat48 ../starter/source/materials/mat/mat048/hm_read_mat48.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_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
31!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
32!||--- uses -----------------------------------------------------
33!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
34!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_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_mat48(UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,
39 . PARMAT ,MAT_ID ,PM ,TITR ,
40 . UNITAB ,LSUBMODEL,ISRATE ,NFUNC ,
41 . MTAG ,MATPARAM )
42C-----------------------------------------------
43C ROUTINE DESCRIPTION :
44C ===================
45C READ MAT LAW48 WITH HM READER
46C-----------------------------------------------
47C DUMMY ARGUMENTS DESCRIPTION:
48C ===================
49C UNITAB UNITS ARRAY
50C MAT_ID MATERIAL ID(INTEGER)
51C TITR MATERIAL TITLE
52C LSUBMODEL SUBMODEL STRUCTURE
53C-----------------------------------------------
54C M o d u l e s
55C-----------------------------------------------
56 USE elbuftag_mod
57 USE message_mod
58 USE submodel_mod
59 USE matparam_def_mod
61 USE unitab_mod
63C-----------------------------------------------
64C I m p l i c i t T y p e s
65C-----------------------------------------------
66#include "implicit_f.inc"
67C-----------------------------------------------
68C C o m m o n B l o c k s
69C-----------------------------------------------
70#include "units_c.inc"
71#include "param_c.inc"
72C-----------------------------------------------
73C D u m m y A r g u m e n t s
74C-----------------------------------------------
75 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM
76 TYPE(UNIT_TYPE_), INTENT(in) :: UNITAB
77 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
78 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
79 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,ISRATE,NFUNC
80 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
81 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
82 TYPE(submodel_data), DIMENSION(NSUBMOD),INTENT(IN) :: LSUBMODEL
83 TYPE(mlaw_tag_),INTENT(INOUT) :: MTAG
84 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
85C-----------------------------------------------
86C L o c a l V a r i a b l e s
87C-----------------------------------------------
88 my_real
89 . e,nu,ca,cb,cn,cc,cd,cm,ce,ck,
90 . fisokin,fcut, sigm,eps0,epsm,epsr1,epsr2,
91 . g,c1,rho0,rhor
92 INTEGER ILAW,ISRATE_LOCAL
93 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
94C=======================================================================
95 is_encrypted = .false.
96 is_available = .false.
97c
98 ilaw = 48
99 cn = one
100 fisokin = zero
101c------------------------------------------
102 CALL hm_option_is_encrypted(is_encrypted)
103c------------------------------------------
104C
105 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('refer_rho',RHOR ,IS_AVAILABLE, LSUBMODEL, UNITAB)
107Card1
108 CALL HM_GET_FLOATV('mat_e' ,E ,IS_AVAILABLE, LSUBMODEL, UNITAB)
109 CALL HM_GET_FLOATV('mat_nu' ,NU ,IS_AVAILABLE, LSUBMODEL, UNITAB)
110Card2
111 CALL HM_GET_FLOATV('mat_sigy' ,CA ,IS_AVAILABLE, LSUBMODEL, UNITAB)
112 CALL HM_GET_FLOATV('mat_b' ,CB ,IS_AVAILABLE, LSUBMODEL, UNITAB)
113 CALL HM_GET_FLOATV('mat_n' ,CN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
114 CALL HM_GET_FLOATV('mat_hard' ,FISOKIN ,IS_AVAILABLE, LSUBMODEL, UNITAB)
115 CALL HM_GET_FLOATV('mat_sig' ,SIGM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
116Card3
117 CALL HM_GET_FLOATV('mat_c' ,CC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
118 CALL HM_GET_FLOATV('mat_d' ,CD ,IS_AVAILABLE, LSUBMODEL, UNITAB)
119 CALL HM_GET_FLOATV('mat_m' ,CM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('mat_e1' ,CE ,IS_AVAILABLE, LSUBMODEL, UNITAB)
121 CALL HM_GET_FLOATV('mat_k' ,CK ,IS_AVAILABLE, LSUBMODEL, UNITAB)
122Card4
123 CALL HM_GET_FLOATV('mat_e0' ,EPS0 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
124 CALL HM_GET_FLOATV('scale' ,FCUT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
125Card5
126 CALL HM_GET_FLOATV('mat_eps' ,EPSM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
127 CALL HM_GET_FLOATV('mat_eta1' ,EPSR1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
128 CALL HM_GET_FLOATV('mat_eta2' ,EPSR2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
129C
130c-----------------------------------------------------------------------
131c Default values
132c-----------------------------------------------------------------------
133.OR. IF (NU < ZERO NU >= HALF) THEN
134C WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
135 CALL ANCMSG(MSGID=49,
136 . MSGTYPE=MSGERROR,
137 . ANMODE=ANINFO_BLIND_2,
138 . R1=NU,
139 . I1=MAT_ID,
140 . C1=TITR)
141 ENDIF
142.AND..AND. IF(CC > ZERO EPS0 > ZERO FCUT == ZERO) THEN
143 CALL ANCMSG(MSGID=1220,
144 . MSGTYPE=MSGWARNING,
145 . ANMODE=ANINFO_BLIND_1,
146 . I1=MAT_ID,
147 . C1=TITR)
148 ENDIF
149
150.OR. IF (CN == ZERO CN == ONE) CN = ONEP0001
151.OR. IF (CM == ZERO CM == ONE) CM = ONEP0001
152 IF (CK == ZERO) CK = ONE
153 IF (EPSR1 == ZERO) EPSR1 = INFINITY
154 IF (EPSR2 == ZERO) EPSR2 = TWO*INFINITY
155 IF (EPSM == ZERO) EPSM = INFINITY
156 IF (SIGM == ZERO) SIGM = INFINITY
157 IF (CC == ZERO) EPS0 = ONE
158 IF (FCUT <= ZERO)THEN
159 FCUT = INFINITY
160 ENDIF
161 !----------------------------------------------------------------------
162 ISRATE_LOCAL = 1
163 ISRATE = 1
164 !----------------------------------------------------------------------
165 IF(EPSR2 <= EPSR1)THEN
166C WRITE(IOUT,*)' ** ERROR : EPSR2 MUST BE GREATER THAN EPSR1'
167 CALL ANCMSG(MSGID=420,
168 . MSGTYPE=MSGERROR,
169 . ANMODE=ANINFO_BLIND_2,
170 . I1=MAT_ID,
171 . C1=TITR)
172 ENDIF
173c-----------------------------------------------------------------------
174 NUPARAM = 25
175c-----------------------------------------------------------------------
176 IF(NUPARAM > MAXUPARAM)THEN
177 CALL ANCMSG(MSGID=309,
178 . MSGTYPE=MSGERROR,
179 . ANMODE=ANINFO_BLIND_2,
180 . I1=MAT_ID,
181 . C1=TITR,
182 . I2=NUPARAM,
183 . I3=MAXUPARAM)
184 C1 = ZERO
185 G = ZERO
186 ELSE
187 C1 = E / THREE / (ONE - TWO*NU)
188 G = E / TWO / (ONE + NU)
189 UPARAM(1) = E
190 UPARAM(2) = NU
191 UPARAM(3) = CA
192 UPARAM(4) = SIGM
193 UPARAM(5) = EPSM
194 UPARAM(6) = EPSR1
195 UPARAM(7) = EPSR2
196 UPARAM(8) = CB
197 UPARAM(9) = CN
198 UPARAM(10) = CC
199 UPARAM(11) = CD
200 UPARAM(12) = CM
201 UPARAM(13) = ISRATE_LOCAL
202 UPARAM(14) = FCUT
203 UPARAM(15) = FISOKIN
204 UPARAM(16) = G
205 UPARAM(17) = TWO*G
206 UPARAM(18) = THREE*G
207 UPARAM(19) = C1
208 UPARAM(20) = E/(ONE - NU*NU)
209 UPARAM(21) = NU*UPARAM(20)
210 UPARAM(22) = EPSM
211 UPARAM(23) = EPS0
212 UPARAM(24) = CE
213 UPARAM(25) = CK
214 ENDIF
215c-----------------------------------------------------------------------
216 PARMAT(1) = C1
217 PARMAT(2) = E
218 PARMAT(3) = NU
219 PARMAT(4) = ISRATE_LOCAL
220 PARMAT(5) = FCUT
221c------------------------------------
222C Formulation for solid elements time step computation.
223 PARMAT(16) = 2
224 PARMAT(17) = TWO*G/(C1+FOUR_OVER_3*G) ! == (1-2*nu)/(1-nu)
225c-----------------------------------------------------------------------
226 IF (RHOR == ZERO) RHOR = RHO0
227 PM(1) = RHOR
228 PM(89) = RHO0
229c-----------------------------------------------------------------------
230 NUVAR = 3
231 NFUNC = 0
232 MTAG%G_PLA = 1
233 MTAG%L_PLA = 1
234c-----------------------------------------------------------------------
235 ! Properties compatibility
236 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ISOTROPIC")
237 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ISOTROPIC")
238c-----------------------------------------------------------------------
239c--------------------------------------------------
240c Starter output
241c--------------------------------------------------
242 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,ILAW
243 WRITE(IOUT,1100)
244 IF (IS_ENCRYPTED) THEN
245 WRITE(IOUT,'(5x,a,//)')'confidential data'
246 ELSE
247 WRITE(IOUT,1200) RHO0
248 WRITE(IOUT,1300) E,NU
249 WRITE(IOUT,1400) CA,CB,CN,FISOKIN,SIGM
250 WRITE(IOUT,1500) CC,CD,CM,CE,CK
251 WRITE(IOUT,1600) EPS0,FCUT
252 WRITE(IOUT,1700) EPSM,EPSR1,EPSR2
253 IF(EPS0==ZERO) THEN
254 WRITE(IOUT,2100)
255 ENDIF
256 ENDIF
257c-----------------------------------------------------------------------
258 1000 FORMAT(/
259 & 5X,A,/,
260 & 5X,'material number. . . . . . . . . . . . . . .=',I10/,
261 & 5X,'material law . . . . . . . . . . . . . . . .=',I10/)
262 1100 FORMAT
263 &(5X,'material : zhao constitutive law',/,
264 & 5X,'--------------------------------',/)
265 1200 FORMAT(
266 & 5X,'initial density . . . . . . . . . . . . . .=',1PG20.13/)
267 1300 FORMAT(
268 & 5X,'young''s modulus . . . . . . . . . . . . . .=',1PG20.13/,
269 & 5X,'poisson''s ratio . . . . . . . . . . . . . .=',1PG20.13/)
270 1400 FORMAT(
271 & 5X,'plasticity yield stress a . . . . . . . . . =',1PG20.13/,
272 & 5X,'plasticity hardening PARAMETER b . . . . . =',1PG20.13/,
273 & 5X,'plasticity hardening exponent n . . . . . . =',1PG20.13/,
274 & 5X,'iso-kinematic hardening factor chard . . . =',1PG20.13/,
275 & 5X,'plasticity maximum stress sigma_max . . . . =',1PG20.13/)
276 1500 FORMAT(
277 & 5X,'relative strain-rate coefficient c . . . . =',1PG20.13/,
278 & 5X,'strain-rate plasticity factor d . . . . . . =',1PG20.13/,
279 & 5X,'relative strain-rate exponent n . . . . . . =',1PG20.13/,
280 & 5X,'strain-rate coefficient e1 . . . . . . . . =',1PG20.13/,
281 & 5X,'strain-rate exponent k . . . . . . . . . . =',1PG20.13/)
282 1600 FORMAT(
283 & 5X,'reference strain-rate eps_rate_0 . . . . . =',1PG20.13/,
284 & 5X,'cutoff frequency fcut . . . . . . . . . . . =',1PG20.13/)
285 1700 FORMAT(
286 & 5X,'failure plastic strain eps_max . . . . . . =',1PG20.13/
287 & 5X,'tensile failure strain 1 eps_t1 . . . . . . =',1PG20.13/
288 & 5X,'tensile failure strain 2 eps_t2 . . . . . . =',1PG20.13/)
289 2100 FORMAT(1X,'eps0 should be > 0. IF cc /= 0.')
290 END
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat48(uparam, maxuparam, nuparam, nuvar, parmat, mat_id, pm, titr, unitab, lsubmodel, israte, nfunc, mtag, matparam)
integer, parameter nchartitle