OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat14.F File Reference
#include "implicit_f.inc"
#include "param_c.inc"
#include "com01_c.inc"
#include "units_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_mat14 (lsubmodel, mtag, unitab, ipm, pm, mat_id, titr, matparam)

Function/Subroutine Documentation

◆ hm_read_mat14()

subroutine hm_read_mat14 ( type(submodel_data), dimension(*), intent(in) lsubmodel,
type(mlaw_tag_), intent(inout) mtag,
type (unit_type_), intent(in) unitab,
integer, dimension(npropmi), intent(inout) ipm,
dimension(npropm), intent(inout) pm,
integer, intent(in) mat_id,
character(len=nchartitle), intent(in) titr,
type(matparam_struct_), intent(inout) matparam )

Definition at line 38 of file hm_read_mat14.F.

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 IF(e11==0..OR.e22==0..OR.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 IF ( sigyt1==zero.OR.sigyt2==zero
269 . .OR.sigyc1==zero.OR.sigyc2==zero
270 . .OR.sysp12==zero.OR.sysp23==zero
271 . .OR.sysn12==zero.OR.sysn23==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 IF(.NOT.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
#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_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine init_mat_keyword(matparam, keyword)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
for(i8=*sizetab-1;i8 >=0;i8--)
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