OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat124.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_mat124 ../starter/source/materials/mat/mat124/hm_read_mat124.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_mat124(
39 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,MTAG ,
40 . PARMAT ,UNITAB ,PM ,LSUBMODEL,ISRATE ,
41 . MAT_ID ,TITR ,MATPARAM )
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE unitab_mod
46 USE message_mod
47 USE submodel_mod
48 USE elbuftag_mod
49 USE matparam_def_mod
51C-----------------------------------------------
52C I m p l i c i t T y p e sXM
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "units_c.inc"
59#include "param_c.inc"
60C-----------------------------------------------
61C D u m m y A r g u m e n t s
62C-----------------------------------------------
63 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
64 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM
65 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
66 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
67 INTEGER, INTENT(INOUT) :: ISRATE
68 INTEGER, INTENT(OUT) :: NUPARAM,NUVAR
69 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
70 my_real, DIMENSION(100),INTENT(OUT) :: parmat
71 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
72 TYPE(mlaw_tag_), INTENT(OUT) :: MTAG
73 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER ILAW, IRATE, DTYPE, DFLAG, IREG, IDEL
78C REAL or REAL*8
79 my_real
80 . rho0,young,nu,g,g2,lam,bulk,fcut,fc,ft,
81 . ah,bh,ch,dh,hp,as,qh0,ecc,m0,wf,wf1,ft1,df,bs,
82 . efc,epsi
83 my_real
84 . fc0,epst0,epstmax,deltas,betas,epsc0,epscmax,alphas,gammas
85C
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87C=======================================================================
88 IS_ENCRYPTED = .false.
89 is_available = .false.
90 ilaw = 124
91c------------------------------------------
92 CALL hm_option_is_encrypted(is_encrypted)
93c------------------------------------------
94c
95card1 - Density
96 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available,lsubmodel,unitab)
97card2 - Elasticity, flags, strain-rate effect and filtering
98 CALL hm_get_floatv('MAT_E' ,young ,is_available,lsubmodel,unitab)
99 CALL hm_get_floatv('MAT_NU' ,nu ,is_available,lsubmodel,unitab)
100 CALL hm_get_intv ('IDEL' ,idel ,is_available,lsubmodel)
101 CALL hm_get_intv ('IRATE' ,irate ,is_available,lsubmodel)
102 CALL hm_get_floatv('FCUT' ,fcut ,is_available,lsubmodel,unitab)
103card3 - Eccentricity, strength limits and hardening
104 CALL hm_get_floatv('MAT_ECC' ,ecc ,is_available,lsubmodel,unitab)
105 CALL hm_get_floatv('MAT_QH0' ,qh0 ,is_available,lsubmodel,unitab)
106 CALL hm_get_floatv('MAT_FT' ,ft ,is_available,lsubmodel,unitab)
107 CALL hm_get_floatv('MAT_FC' ,fc ,is_available,lsubmodel,unitab)
108 CALL hm_get_floatv('MAT_HP' ,hp ,is_available,lsubmodel,unitab)
109card4 - Ductility measure parameters
110 CALL hm_get_floatv('MAT_AH' ,ah ,is_available,lsubmodel,unitab)
111 CALL hm_get_floatv('MAT_BH' ,bh ,is_available,lsubmodel,unitab)
112 CALL hm_get_floatv('MAT_CH' ,ch ,is_available,lsubmodel,unitab)
113 CALL hm_get_floatv('MAT_DH' ,dh ,is_available,lsubmodel,unitab)
114card5 - Damage parameters (part 1)
115 CALL hm_get_floatv('MAT_AS' ,as ,is_available,lsubmodel,unitab)
116 CALL hm_get_floatv('MAT_BS' ,bs ,is_available,lsubmodel,unitab)
117 CALL hm_get_floatv('MAT_DF' ,df ,is_available,lsubmodel,unitab)
118 CALL hm_get_intv ('DFLAG' ,dflag ,is_available,lsubmodel)
119 CALL hm_get_intv ('DTYPE' ,dtype ,is_available,lsubmodel)
120 CALL hm_get_intv ('IREG' ,ireg ,is_available,lsubmodel)
121card6 - Damage parameters (part 2)
122 CALL hm_get_floatv('MAT_WF' ,wf ,is_available,lsubmodel,unitab)
123 CALL hm_get_floatv('MAT_WF1' ,wf1 ,is_available,lsubmodel,unitab)
124 CALL hm_get_floatv('MAT_FT1' ,ft1 ,is_available,lsubmodel,unitab)
125 CALL hm_get_floatv('MAT_EFC' ,efc ,is_available,lsubmodel,unitab)
126c
127c-----------------------------
128c Default values and check
129c-----------------------------
130 ! Poisson's ratio
131 IF (nu < zero .OR. nu >= half) THEN
132 CALL ancmsg(msgid=49,
133 . msgtype=msgerror,
134 . anmode=aninfo_blind_2,
135 . r1=nu,
136 . i1=mat_id,
137 . c1=titr)
138 ENDIF
139 ! Elasticity parameter
140 g2 = young / (one + nu)
141 g = half * g2
142 lam = g2 * nu /(one - two*nu)
143 bulk = third * young / (one - nu*two)
144 ! Bilinear second displacement threshold
145 IF (wf1 == zero) THEN
146 wf1 = 0.15d0*wf
147 ENDIF
148 ! Bilinear damage second uniaxial tensile strength
149 IF (ft1 == zero) THEN
150 ft1 = 0.3d0*ft
151 ENDIF
152 ! Initial hardening
153 IF (qh0 == zero) THEN
154 qh0 = 0.3d0
155 ENDIF
156 ! Hardening ductility parameters
157 IF (ah == zero) THEN
158 ah = 8.0d-2
159 ENDIF
160 IF (bh == zero) THEN
161 bh = 3.0d-3
162 ENDIF
163 IF (ch == zero) THEN
164 ch = 2.0d0
165 ENDIF
166 IF (dh == zero) THEN
167 dh = 1.0d-6
168 ENDIF
169 ! Constant dilation
170 IF (df == zero) THEN
171 df = 0.85d0
172 ENDIF
173 ! Compressive inelastic strain threshold
174 IF (efc == zero) THEN
175 efc = 1.0d-4
176 ENDIF
177 ! Damage parameters
178 IF (as == zero) THEN
179 as = 15.0d0
180 ENDIF
181 IF (bs == zero) THEN
182 bs = one
183 ENDIF
184 ! Eccentricity
185 IF (ecc == zero) THEN
186 epsi = ft*((1.16d0*fc)**2 - fc**2)/(1.16d0*fc*(fc**2-ft**2))
187 ecc = (one + epsi)/(two - epsi)
188 ENDIF
189 ! Friction parameter
190 m0 = three*(((fc**2)-(ft**2))/(fc*ft))*(ecc/(ecc + one))
191 ! Element deletion flag check
192 IF (idel == 0) idel = 1
193 idel = min(idel,2)
194 idel = max(idel,1)
195 ! Dflag check
196 IF (dflag == 0) dflag = 1
197 dflag = min(max(1,dflag),4)
198 ! Dtype check
199 IF (dtype == 0) dtype = 2
200 dtype = min(max(1,dtype),3)
201 ! Regularization flag check
202 IF (ireg == 0) ireg = 2
203 ireg = min(ireg,2)
204 ireg = max(ireg,1)
205 ! Strain rate parameters
206 fc0 = ten*ep06*unitab%FAC_T_WORK*unitab%FAC_T_WORK*unitab%FAC_L_WORK/unitab%FAC_M_WORK
207 ! -> For tension
208 epst0 = 30.0d0*em06*unitab%FAC_T_WORK
209 epstmax = one*unitab%FAC_T_WORK
210 deltas = one / (one + eight*(fc/fc0))
211 betas = exp(six*deltas - two)
212 ! -> For compression
213 epsc0 = 30.0d0*em06*unitab%FAC_T_WORK
214 epscmax = 30.0d0*unitab%FAC_T_WORK
215 alphas = one / (five + nine*(fc/fc0))
216 gammas = exp(6.156d0*alphas - two)
217 ! Strain rate effect check
218 IF (irate == 0) irate = 1
219 irate = min(irate,2)
220 irate = max(irate,1)
221 IF (irate > 1) THEN
222 israte = 1
223 ! Strain rate filtering frequency
224 IF (fcut == zero) THEN
225 fcut = 10000.0d0*unitab%FAC_T_WORK
226 ENDIF
227 ELSE
228 israte = 0
229 fcut = zero
230 ENDIF
231c
232c--------------------------
233c Filling buffer tables
234c--------------------------
235 ! Number of material parameters
236 nuparam = 36
237 ! Number of user variables
238 nuvar = 16
239c
240 ! Material parameters
241 ! -> Elastic parameters
242 uparam(1) = young ! Young modulus
243 uparam(2) = nu ! Poisson's ratio
244 uparam(3) = g ! Shear modulus
245 uparam(4) = g2 ! 2*Shear modulus
246 uparam(5) = lam ! Lame coefficient
247 uparam(6) = bulk ! Bulk modulus
248 ! -> Plastic parameters
249 uparam(7) = ft ! Uniaxial tensile strength
250 uparam(8) = fc ! Uniaxial compressive strength
251 uparam(9) = ecc ! Eccentricity
252 uparam(10) = m0 ! Friction parameter
253 uparam(11) = qh0 ! Initial hardening
254 uparam(12) = hp ! Hardening modulus
255 uparam(13) = ah ! Hardening ductility parameter 1
256 uparam(14) = bh ! Hardening ductility parameter 2
257 uparam(15) = ch ! Hardening ductility parameter 3
258 uparam(16) = dh ! Hardening ductility parameter 4
259 ! -> Damage parameters
260 uparam(17) = as ! Damage ductility measure
261 uparam(18) = bs ! Damage ductility parameter
262 uparam(19) = df ! Dilation parameter
263 uparam(20) = dflag ! Damage flag
264 uparam(21) = dtype ! Tensile damage type
265 uparam(22) = ireg ! Regularization flag
266 uparam(23) = wf ! First displacement threshold
267 uparam(24) = wf1 ! Second displacement threshold
268 uparam(25) = ft1 ! Second uniaxial tensile strength
269 uparam(26) = efc ! Compressive inelastic strain threshold
270 ! -> Strain rate effect parameters
271 uparam(27) = irate ! Strain rate effect flag
272 uparam(28) = epst0 ! Reference tensile strain rate
273 uparam(29) = epstmax ! Maximum tensile strain rate threshold
274 uparam(30) = deltas ! Tensile strain rate effect parameter 1
275 uparam(31) = betas ! Tensile strain rate effect parameter 2
276 uparam(32) = epsc0 ! Reference tensile strain rate
277 uparam(33) = epscmax ! Maximum compressive strain rate threshold
278 uparam(34) = alphas ! Compressive strain rate effect parameter 1
279 uparam(35) = gammas ! Compressive strain rate effect parameter 2
280 ! -> flag deletion element
281 uparam(36) = idel
282c
283 ! PARMAT table
284 parmat(1) = bulk
285 parmat(2) = young
286 parmat(3) = nu
287 parmat(4) = israte
288 parmat(5) = fcut
289c
290 ! PM table
291 pm(1) = rho0
292 pm(89) = rho0
293 pm(27) = sqrt((bulk + four_over_3*g)/rho0) ! sound speed estimation
294 pm(100)= bulk
295c
296 ! MTAG variable activation
297 mtag%G_PLA = 1
298 mtag%L_PLA = 1
299 mtag%G_EPSD = 1
300 mtag%L_EPSD = 1
301c
302 ! Tag for damage output
303 ! -> Number of output modes (stored in DMG(NEL,I), I>1)
304 matparam%NMOD = 2
305 ! Total number of damage outputs
306 ! -> DMG(NEL,1) = Global damage output
307 ! -> DMG(NEL,2:NMOD+1) = Damage modes output
308 mtag%G_DMG = 1 + matparam%NMOD
309 mtag%L_DMG = 1 + matparam%NMOD
310 ! -> Modes allocation and definition
311 ALLOCATE(matparam%MODE(matparam%NMOD))
312 matparam%MODE(1) = "Tension damage"
313 matparam%MODE(2) = "Compression damage"
314c
315 CALL init_mat_keyword(matparam ,"COMPRESSIBLE")
316 CALL init_mat_keyword(matparam ,"INCREMENTAL" )
317 CALL init_mat_keyword(matparam ,"LARGE_STRAIN")
318 CALL init_mat_keyword(matparam ,"HOOK")
319c
320 ! Properties compatibility
321 CALL init_mat_keyword(matparam,"SOLID_ISOTROPIC")
322c
323c--------------------------
324c Parameters printout
325c--------------------------
326 WRITE(iout,1000) trim(titr),mat_id,ilaw
327 WRITE(iout,1100)
328 IF (is_encrypted) THEN
329 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
330 ELSE
331 WRITE(iout,1200) rho0
332 WRITE(iout,1300) young,nu
333 WRITE(iout,1400) irate
334 IF (irate > 0) WRITE(iout,1500) fcut
335 WRITE(iout,1600) ecc,qh0,ft,fc,hp
336 WRITE(iout,1700) ah,bh,ch,dh
337 WRITE(iout,1800) as,df,bs
338 WRITE(iout,1900) dflag
339 WRITE(iout,2000) dtype
340 WRITE(iout,2100) ireg
341 WRITE(iout,2200) wf,wf1,ft1,efc
342 WRITE(iout,2300) idel
343 ENDIF
344c-----------------------------------------------------------------------
345 1000 FORMAT(/
346 & 5x,a,/,
347 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
348 & 5x,'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
349 1100 FORMAT(
350 & 5x,'-----------------------------------------------------------',/
351 & 5x,' CONCRETE DAMAGE PLASTICITY MODEL 2 ',/,
352 & 5x,'-----------------------------------------------------------',/)
353 1200 FORMAT(
354 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
355 1300 FORMAT(
356 & 5x,'YOUNG (YOUNG MODULUS) . . . . . . . . . . . . . . . . . . . .=',1pg20.13/
357 & 5x,'NU (POISSON RATIO). . . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
358 1400 FORMAT(
359 & 5x,'STRAIN RATE EFFECT FLAG IRATE . . . . . . . . . . . . . . . .=',i3/
360 & 5x,' 1: NO STRAIN RATE EFFECT (DEFAULT) '/
361 & 5x,' 2: STRAIN RATE EFFECT ACTIVATED '/)
362 1500 FORMAT(
363 & 5x,'STRAIN RATE FILTERING CUTOFF FREQUENCY. . . . . . . . . . . .=',1pg20.13/)
364 1600 FORMAT(
365 & 5x,'ECC (ECCENTRICITY). . . . . . . . . . . . . . . . . . . . . .=',1pg20.13/
366 & 5x,'QH0 (INITIAL HARDENING) . . . . . . . . . . . . . . . . . . .=',1pg20.13/
367 & 5x,'FT (UNIAXIAL TENSION STRENGTH) . . . . . . . . . . . . . . .=',1pg20.13/
368 & 5x,'FC (UNIAXIAL COMPRESSION STRENGTH) . . . . . . . . . . . . .=',1pg20.13/
369 & 5x,'HP (HARDENING MODULUS) . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
370 1700 FORMAT(
371 & 5x,'AH (HARDENING DUCTILITY PARAM 1) . . . . . . . . . . . . . .=',1pg20.13/
372 & 5x,'BH (HARDENING DUCTILITY PARAM 2) . . . . . . . . . . . . . .=',1pg20.13/
373 & 5x,'CH (HARDENING DUCTILITY PARAM 3) . . . . . . . . . . . . . .=',1pg20.13/
374 & 5x,'DH (HARDENING DUCTILITY PARAM 4) . . . . . . . . . . . . . .=',1pg20.13/)
375 1800 FORMAT(
376 & 5x,'AS (DAMAGE DUCTILITY MEASURE). . . . . . . . . . . . . . . .=',1pg20.13/
377 & 5x,'DF (DILATION CONSTANT) . . . . . . . . . . . . . . . . . . .=',1pg20.13/
378 & 5x,'BS (DAMAGE DUCTILITY PARAMETER). . . . . . . . . . . . . . .=',1pg20.13/)
379 1900 FORMAT(
380 & 5x,'DFLAG (DAMAGE FLAG) . . . . . . . . . . . . . . . . . . . . .=',i3/
381 & 5x,' 1: STANDARD MODEL WITH TWO DAMAGE VARIABLES (DEFAULT) ',/
382 & 5x,' 2: ISOTROPIC MODEL WITH ONE DAMAGE VARIABLE ',/
383 & 5x,' 3: MULTIPLICATIVE MODEL WITH TWO DAMAGE VARIABLES ',/
384 & 5x,' 4: NO DAMAGE EFFECT ',/)
385 2000 FORMAT(
386 & 5x,'DTYPE (TENSION DAMAGE SHAPE) . . . . . . . . . . . . . . . .=',i3/
387 & 5x,' 1: LINEAR SOFTENING ',/
388 & 5x,' 2: BILINEAR SOFTENING (DEFAULT) ',/
389 & 5x,' 3: EXPONENTIAL SOFTENING ',/)
390 2100 FORMAT(
391 & 5x,'ELEMENT LENGTH REGULARIZATION FLAG. . . . . . . . . . . . . .=',i3/
392 & 5x,' 1: NO REGULARIZATION ',/
393 & 5x,' 2: REGULARIZATION ACTIVATED (DEFAULT) ',/)
394 2200 FORMAT(
395 & 5x,'WF (DAMAGE DISPLACEMENT THRESHOLD 0) . . . . . . . . . . . .=',1pg20.13/
396 & 5x,'WF1 (DAMAGE DISPLACEMENT THRESHOLD 1) . . . . . . . . . . . .=',1pg20.13/
397 & 5x,'FT1 (UNIAXIAL STRESS THRESHOLD 1) . . . . . . . . . . . . . .=',1pg20.13/
398 & 5x,'EFC (STRAIN THRESHOLD IN COMPRESSION) . . . . . . . . . . . .=',1pg20.13/)
399 2300 FORMAT(
400 & 5x,'ELEMENT DELETION FLAG. . . . . . .. . . . . . . . . . . . . .=',i3/
401 & 5x,' 1: NO ELEMENT DELETION (DEFAULT) ',/
402 & 5x,' 2: ELEMENT DELETION ACTIVATED ',/)
403c-----------------------------------------------------------------------
404 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_mat124(uparam, maxuparam, nuparam, nuvar, mtag, parmat, unitab, pm, lsubmodel, israte, mat_id, titr, 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:895