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