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 IF (nu < zero .OR. 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 IF(cc > zero .AND. eps0 > zero .AND. 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 IF (cn == zero .OR. cn == one) cn = onep0001
151 IF (cm == zero .OR. 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)
subroutine init_mat_keyword(matparam, keyword)
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