OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat14.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_mat14 ../starter/source/materials/mat/mat014/hm_read_mat14.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_mat14(LSUBMODEL, MTAG, UNITAB, IPM, PM,
39 . MAT_ID , TITR,MATPARAM)
40C-----------------------------------------------
41C D e s c r i p t i o n
42C-----------------------------------------------
43C READ MAT LAW14 WITH HM READER
44C-----------------------------------------------
45C M o d u l e s
46C-----------------------------------------------
47 USE unitab_mod
48 USE elbuftag_mod
49 USE submodel_mod
50 USE matparam_def_mod
51 USE message_mod
53C-----------------------------------------------
54C I m p l i c i t T y p e s
55C-----------------------------------------------
56#include "implicit_f.inc"
57C-----------------------------------------------
58C C o m m o n B l o c k s
59C-----------------------------------------------
60#include "param_c.inc"
61#include "com01_c.inc"
62#include "units_c.inc"
63C-----------------------------------------------
64C D u m m y A r g u m e n t s
65C-----------------------------------------------
66 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
67 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
68 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
69 CHARACTER(LEN=NCHARTITLE), INTENT(IN) :: TITR
70 INTEGER, INTENT(IN) :: MAT_ID
71 INTEGER, INTENT(INOUT) :: IPM(NPROPMI)
72 my_real, INTENT(INOUT) :: pm(npropm)
73C-----------------------------------------------
74C L o c a l V a r i a b l e s
75C-----------------------------------------------
76 INTEGER ICC
78 . n12, n23, n31, e11, e22, e33, g12, g23, g31, sigt1, sigt2,
79 . sigt3, delta, ca, cb, cn, sigmx, sigyt1, sigyt2, sigyc1,
80 . sigyc2, sysp12, sysn12, sysp23, sysn23, alpha, efib, epsft,
81 . epsfc, c11, c22, c33, c12, c13, c23, detc, d11, d12, d13, d22,
82 . d23, d33, d21, d31, d32, a11, a12, a13, a22, a23, a33, c1, ssp,
83 . f1, f2, f4, f5, f11, f22, f44, f55, f12, f23, ft1, ft2,
84 . cc,eps0,wplaref,rho0,rhor
85 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
86
87 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE
88C-----------------------------------------------
89C S o u r c e
90C-----------------------------------------------
91 is_encrypted = .false.
92 is_available = .false.
93
94 CALL hm_option_is_encrypted(is_encrypted)
95
96 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
97 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
98 IF (rhor == zero) THEN
99 rhor = rho0
100 ENDIF
101 pm(1) = rhor
102 pm(89) = rho0
103
104 CALL hm_get_floatv('MAT_EA', e11, is_available, lsubmodel, unitab)
105 CALL hm_get_floatv('MAT_EB', e22, is_available, lsubmodel, unitab)
106 CALL hm_get_floatv('MAT_EC', e33, is_available, lsubmodel, unitab)
107
108 CALL hm_get_floatv('MAT_PRAB', n12, is_available, lsubmodel, unitab)
109 CALL hm_get_floatv('MAT_PRBC', n23, is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_PRCA', n31, is_available, lsubmodel, unitab)
111
112 CALL hm_get_floatv('MAT_GAB', g12, is_available, lsubmodel, unitab)
113 CALL hm_get_floatv('MAT_GBC', g23, is_available, lsubmodel, unitab)
114 CALL hm_get_floatv('MAT_GCA', g31, is_available, lsubmodel, unitab)
115
116 CALL hm_get_floatv('MAT_SIGT1', sigt1, is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_SIGT2', sigt2, is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('MAT_SIGT3', sigt3, is_available, lsubmodel, unitab)
119 CALL hm_get_floatv('MAT_DAMAGE', delta, is_available, lsubmodel, unitab)
120
121 CALL hm_get_floatv('MAT_BETA', cb, is_available, lsubmodel, unitab)
122 CALL hm_get_floatv('MAT_HARD', cn, is_available, lsubmodel, unitab)
123 CALL hm_get_floatv('MAT_SIG', sigmx, is_available, lsubmodel, unitab)
124 CALL hm_get_floatv('MAT_WPREF', wplaref, is_available, lsubmodel, unitab)
125
126 CALL hm_get_floatv('MAT_SIGYT1', sigyt1, is_available, lsubmodel, unitab)
127 CALL hm_get_floatv('MAT_SIGYT2', sigyt2, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('MAT_SIGYC1', sigyc1, is_available, lsubmodel, unitab)
129 CALL hm_get_floatv('MAT_SIGYC2', sigyc2, is_available, lsubmodel, unitab)
130
131 CALL hm_get_floatv('MAT_SIGT12', sysp12, is_available, lsubmodel, unitab)
132 CALL hm_get_floatv('MAT_SIGT23', sysn12, is_available, lsubmodel, unitab)
133 CALL hm_get_floatv('MAT_SIGC12', sysp23, is_available, lsubmodel, unitab)
134 CALL hm_get_floatv('MAT_SIGC23', sysn23, is_available, lsubmodel, unitab)
135
136 CALL hm_get_floatv('MAT_ALPHA', alpha, is_available, lsubmodel, unitab)
137 CALL hm_get_floatv('MAT_EFIB', efib, is_available, lsubmodel, unitab)
138 CALL hm_get_floatv('MAT_SRC', cc, is_available, lsubmodel, unitab)
139 CALL hm_get_floatv('mat_srp', EPS0, IS_AVAILABLE, LSUBMODEL, UNITAB)
140 CALL HM_GET_INTV('strflag', ICC, IS_AVAILABLE, LSUBMODEL)
141C
142.OR..OR. IF(E11==0.E22==0.E33==0.) THEN
143 CALL ANCMSG(MSGID=306,
144 . MSGTYPE=MSGERROR,
145 . ANMODE=ANINFO,
146 . I1=14,
147 . I2=MAT_ID,
148 . C1=TITR,
149 . C2='e11, e22 or e33')
150 ENDIF
151 IF(N2D>0) THEN
152 CALL ANCMSG(MSGID=305,
153 . MSGTYPE=MSGERROR,
154 . ANMODE=ANINFO,
155 . I1=14,
156 . I2=MAT_ID,
157 . C1=TITR)
158 ENDIF
159C
160C wplaref
161 IF(WPLAREF == ZERO) WPLAREF = ONE
162c
163 IF(ALPHA==ONE)ALPHA= ZEP99
164 IF(DELTA==ZERO)DELTA= FIVEEM2
165 IF(SIGT1==ZERO)SIGT1= INFINITY
166 IF(SIGT2==ZERO)SIGT2= SIGT1
167 IF(SIGT3==ZERO)SIGT3= SIGT1
168 CA=ONE
169 IF(CN==ZERO) CN = ONE
170 IF(SIGMX==ZERO)SIGMX= EP10
171 IF(CC==ZERO) EPS0 = ONE
172 IF(ICC==0.) ICC = 1
173 EPSFC=-INFINITY
174 EPSFT= INFINITY
175C-------------------------------------
176 WRITE(IOUT, 900) TRIM(TITR),MAT_ID,14
177 WRITE(IOUT,1000)
178 IF(IS_ENCRYPTED)THEN
179 WRITE(IOUT,'(5x,a,//)')'confidential data'
180 ELSE
181 WRITE(IOUT,950)RHO0
182 WRITE(IOUT,1100)E11,E22,E33
183 WRITE(IOUT,1200)N12,N23,N31
184 WRITE(IOUT,1300)G12,G23,G31
185 WRITE(IOUT,1400)SIGT1,SIGT2,SIGT3,DELTA
186 WRITE(IOUT,1510)CB,CN,SIGMX,WPLAREF
187 WRITE(IOUT,1550)SIGYT1,SIGYT2,SIGYC1,SIGYC2
188 WRITE(IOUT,1560)SYSP12,SYSN12,SYSP23,SYSN23
189 WRITE(IOUT,1610)ALPHA,EFIB
190 WRITE(IOUT,1620)CC,EPS0,ICC
191 ENDIF
192C--------------------------------------------------------
193 C11 = ONE/E11
194 C22 = ONE/E22
195 C33 = ONE/E33
196 C12 =-N12/E11
197 C13 =-N31/E33
198 C23 =-N23/E22
199C-------------------------
200C INVERSION
201C-------------------------
202 DETC= C11*C22*C33-C11*C23*C23-C12*C12*C33+C12*C13*C23
203 + +C13*C12*C23-C13*C22*C13
204 IF(DETC<=ZERO) THEN
205 CALL ANCMSG(MSGID=307,
206 . MSGTYPE=MSGERROR,
207 . ANMODE=ANINFO,
208 . I1=MAT_ID,
209 . C1=TITR)
210 ENDIF
211 D11 = (C22*C33-C23*C23)/DETC
212 D12 =-(C12*C33-C13*C23)/DETC
213 D13 = (C12*C23-C13*C22)/DETC
214 D22 = (C11*C33-C13*C13)/DETC
215 D23 =-(C11*C23-C13*C12)/DETC
216 D33 = (C11*C22-C12*C12)/DETC
217 D21 = D12
218 D31 = D13
219 D32 = D23
220C-----------------------
221C VERIF
222 A11 = C11*D11+C12*D21+C13*D31
223 A12 = C11*D12+C12*D22+C13*D32
224 A13 = C11*D13+C12*D23+C13*D33
225 A22 = C12*D12+C22*D22+C23*D23
226 A23 = C12*D13+C22*D23+C23*D33
227 A33 = C13*D13+C23*D23+C33*D33
228C-----------------------------------------
229 PM(20)= MAX(E11,E22,E33)
230 PM(21)= THIRD*(N12+N31+N23)
231 PM(22)= THIRD*(G12+G23+G31)
232 PM(25)= 1.
233 PM(26)= CB
234 PM(27)= CN
235C THIS CAN GIVE PB IN V16!!!
236 PM(28) = MAX(ONEP0001,(SIGMX/CA)**2)
237 C1 = MAX(D11,D22,D33)
238 SSP = SQRT(C1/MAX(PM(1),EM20))
239 PM(32)= C1
240 PM(33)= SIGT1
241 PM(34)= SIGT2
242 PM(35)= SIGT3
243 PM(36)= EFIB
244 PM(37)= EPSFT
245 PM(38)= EPSFC
246 PM(39)= ALPHA
247C
248C STORE D-MATRIX FOR THE COMPOSITE AS A WHOLE
249C
250C
251 PM(40)= D11
252 PM(41)= D12
253 PM(42)= D13
254 PM(43)= D22
255 PM(44)= D23
256 PM(45)= D33
257 PM(46)= G12
258 PM(47)= G23
259 PM(48)= G31
260C
261 PM(49)= SSP
262C
263 IPM(252)=1
264 PM(105) =MIN(D11*D22-D12**2,D22*D33-D23**2,D11*D33-D13**2)/C1**2
265C
266C CONSTANTS FOR THE YIELD FUNCTION
267C
268.OR. IF ( SIGYT1==ZEROSIGYT2==ZERO
269.OR..OR. . SIGYC1==ZEROSIGYC2==ZERO
270.OR..OR. . SYSP12==ZEROSYSP23==ZERO
271.OR..OR. . SYSN12==ZEROSYSN23==ZERO ) THEN
272 CALL ANCMSG(MSGID=737,
273 . MSGTYPE=MSGERROR,
274 . ANMODE=ANINFO,
275 . I1=MAT_ID,
276 . C1=TITR)
277 ENDIF
278 F1 = ONE/SIGYT1-ONE/SIGYC1
279 F2 = ONE/SIGYT2-ONE/SIGYC2
280 F4 = ONE/SYSP12-ONE/SYSN12
281 F5 = ONE/SYSP23-ONE/SYSN23
282 F11 = ONE/(SIGYT1*SIGYC1)
283 F22 = ONE/(SIGYT2*SIGYC2)
284 F44 = ONE/(SYSP12*SYSN12)
285 F55 = ONE/(SYSP23*SYSN23)
286 F12 = -ONE/(TWO*SQRT(SIGYT1*SIGYC1*SIGYT2*SIGYC2))
287 F23 = -ONE/(TWO*SQRT(SIGYT2*SIGYC2*SIGYT2*SIGYC2))
288C
289 FT1=F11*F22- FOUR*F12**2
290 FT2=F22**2- FOUR*F23**2
291 IF(IS_ENCRYPTED)THEN
292 WRITE(IOUT,1650) F1,F2,F4,F5,F11,F22,F44,F55,F12,F23,FT1,FT2
293 ENDIF
294C IF (FT1<0.) WRITE (IOUT,5550) FT1
295C IF (FT2<0.) WRITE (IOUT,5560) FT2
296C
297C
298 PM(50)=CC
299 PM(51)=EPS0
300 PM(52)=ICC
301
302 IF(EPS0==ZERO) THEN
303 CALL ANCMSG(MSGID=298,
304 . MSGTYPE=MSGERROR,
305 . ANMODE=ANINFO,
306 . I1=14,
307 . I2=MAT_ID,
308 . C1=TITR)
309 ENDIF
310C
311 PM(59)=F1
312 PM(60)=F2
313 PM(61)=F4
314 PM(62)=F5
315 PM(63)=F11
316 PM(64)=F22
317 PM(65)=F44
318 PM(66)=F55
319 PM(67)=F12
320 PM(68)=F23
321
322 PM(69)=C11
323 PM(73)=C22
324 PM(74)=C33
325 PM(75)=C12
326 PM(76)=C23
327 PM(77)=C13
328 PM(78)=DELTA
329 PM(98)=WPLAREF
330C----------------------------------------
331.NOT. IF(IS_ENCRYPTED)THEN
332 WRITE(IOUT,'(a)')' composite constitutive law'
333 WRITE(IOUT,'( 1p3g20.13 )') PM(40),PM(41),PM(42)
334 WRITE(IOUT,'(20x,1p2g20.13 )') PM(43),PM(44)
335 WRITE(IOUT,'(40x, 1pg20.13/)') PM(45)
336 ENDIF
337c
338C---- Definition des variables internes (stockage elementaire)
339c
340
341 MTAG%G_PLA = 1
342c
343 MTAG%L_PLA = 1
344 MTAG%L_SIGF = 1
345 MTAG%L_EPSF = 1
346 MTAG%L_DAM = 5
347 MTAG%L_EPE = 6 ! strain in crack directions
348 MTAG%G_TSAIWU = 1
349 MTAG%L_TSAIWU = 1
350
351 ! MATPARAM keywords
352 CALL INIT_MAT_KEYWORD(MATPARAM,"HOOK")
353 CALL INIT_MAT_KEYWORD(MATPARAM,"ORTHOTROPIC")
354
355 ! Properties compatibility
356 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ORTHOTROPIC")
357 CALL INIT_MAT_KEYWORD(MATPARAM,"SPH")
358
359c-----------
360 CALL INIT_MAT_KEYWORD(MATPARAM,"ELASTO_PLASTIC")
361 CALL INIT_MAT_KEYWORD(MATPARAM,"COMPRESSIBLE")
362c-----------
363 RETURN
364C-----------------------------------------
365 900 FORMAT(/
366 & 5X,A,/,
367 & 5X,'material number. . . . . . . . . . . . . . .=',I10/,
368 & 5X,'material law . . . . . . . . . . . . . . . .=',I10/)
369 950 FORMAT(
370 & 5X,'initial density . . . . . . . . . . . . .=',1PG20.13/)
371 1000 FORMAT(
372 & 5X,' orthotropic material with fibers ',/,
373 & 5X,' --------------------------------- ',//)
374 1100 FORMAT(
375 & 5X,'young modulus e11 . . . . . . . . . .=',1PG20.13/,
376 & 5X,'young modulus e22 . . . . . . . . . .=',1PG20.13/,
377 & 5X,'young modulus e33 . . . . . . . . . .=',1PG20.13//)
378 1200 FORMAT(
379 & 5X,'poisson ratio n12 . . . . . . . . . .=',1PG20.13/,
380 & 5X,'poisson ratio n23 . . . . . . . . . .=',1PG20.13/,
381 & 5X,'poisson ratio n31 . . . . . . . . . .=',1PG20.13//)
382 1300 FORMAT(
383 & 5X,'shear modulus g12 . . . . . . . . . .=',1PG20.13/,
384 & 5X,'shear modulus g23 . . . . . . . . . .=',1PG20.13/,
385 & 5X,'shear modulus g31 . . . . . . . . . .=',1PG20.13//)
386 1400 FORMAT(
387 & 5X,'matrix tensile failure stress dir-1 . .=',1PG20.13/,
388 & 5X,'matrix tensile failure stress dir-2 . .=',1PG20.13/,
389 & 5X,'matrix tensile failure stress dir-3 . .=',1PG20.13/,
390 & 5X,'damage PARAMETER . . . . . . . . . . . =',1PG20.13//)
391 1500 FORMAT(
392 & 5X,'composite yield stress(a) . . . . . .=',1PG20.13/,
393 & 5X,'composite hardening parameter(b). . .=',1PG20.13/,
394 & 5X,'composite hardening parameter(n). . .=',1PG20.13/,
395 & 5X,'composite maximum stress. . . . . . . .=',1PG20.13//)
396 1510 FORMAT(
397 & 5X,'composite hardening parameter(b). . .=',1PG20.13/,
398 & 5X,'composite hardening parameter(n). . .=',1PG20.13/,
399 & 5X,'composite maximum yield FUNCTION fmax .=',1PG20.13/,
400 & 5X,'reference plastic work wplaref .=',1PG20.13//)
401 1550 FORMAT(
402 & 5X,'composite yield in traction (1) . . . . . . .=',1PG20.13/,
403 & 5X,'composite yield in traction (2-3) . . . . . .=',1PG20.13/,
404 & 5X,'composite yield in compression (1) . . . . .=',1PG20.13/,
405 & 5X,'composite yield in compression (2-3) . . . . =',1PG20.13//)
406 1560 FORMAT(
407 & 5X,'composite yield in shear (+12) . . . .=',1PG20.13/,
408 & 5X,'composite yield in shear (-12) . . . .=',1PG20.13/,
409 & 5X,'composite yield in shear (+23) . . . .=',1PG20.13/,
410 & 5X,'composite yield in shear (-23) . . . .=',1PG20.13//)
411 1600 FORMAT(
412 & 5X,'fiber volume fraction . . . . . . . . .=',1PG20.13/,
413 & 5X,'fiber modulus . . . . . . . . . . . . .=',1PG20.13/,
414 & 5X,'fiber tensile failure strain. . . . . .=',1PG20.13/,
415 & 5X,'fiber compressive failure strain. . . .=',1PG20.13//)
416 1610 FORMAT(
417 & 5X,'fiber volume fraction . . . . . . . . .=',1PG20.13/,
418 & 5X,'fiber modulus . . . . . . . . . . . . .=',1PG20.13//)
419 1620 FORMAT(
420 & 5X,'strain rate coefficient cc. . . . . . .=',1PG20.13/,
421 & 5X,'reference strain rate . . . . . . . . .=',1PG20.13/,
422 & 5X,'flag for strain rate on f-max wp-max. .=',I10//)
423 1650 FORMAT(
424 & 5X,' yield function constants ,'/,
425 & 5X,' ------------------------ ,'//,
426 & 5X,'f1 , f2 . . . . . . . . . . . . . . . .=',2E12.4/,
427 & 5X,'f4 , f5 . . . . . . . . . . . . . . . .=',2E12.4/,
428 & 5X,'f11, f22. . . . . . . . . . . . . . . .=',2E12.4/,
429 & 5X,'f44, f55. . . . . . . . . . . . . . . .=',2E12.4/,
430 & 5X,'f12, f23. . . . . . . . . . . . . . . .=',2E12.4/,
431 & 5X,'ft1, ft2. . . . . . . . . . . . . . . .=',2E12.4//)
432c-------------------
433 RETURN
434 END
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_mat14(lsubmodel, mtag, unitab, ipm, pm, mat_id, titr, matparam)
#define max(a, b)
Definition macros.h:21
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle