40 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,MAXFUNC ,
41 . NFUNC ,IFUNC ,MTAG ,PARMAT ,UNITAB ,
42 . PM ,LSUBMODEL,ISRATE ,MAT_ID ,TITR ,
56#include "implicit_f.inc"
65 my_realDIMENSION(MAXUPARAM)INTENT(INOUT)
66 INTEGER,
INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC
67 INTEGER,
INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC,NVARTMP
68 INTEGER,
INTENT(INOUT) :: ISRATE
69 INTEGER,
DIMENSION(MAXFUNC),
INTENT(INOUT) :: IFUNC
71 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
72 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
73 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
75 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) ::
76 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
81 INTEGER I,J,ILAW,ISH,ITR,IRES,IBUCK,IFUNCD1,IFUNCD2,
82 . IFUNCD2C,LTYPE11,LTYPE12,LTYPER0
84 . RHO0,E1,E2,E3,G12,G23,G31,NU12,NU23,NU31,NU21,NU32,NU13,
85 . e1c,gamma,sigy0,beta,m,a,efti,eftu,dftu,efci,efcu,dfcu,
86 . dsat1,y0,yc,b,dmax,yr,ysp,dsat2,y0p,ycp,dsat2c,y0pc,ycpc
87 . epsd11,d11e,n11e,d11u,n11u,epsd12,d22e,n22e
90 . detc,fac,a11,a22,a12,c11,c22,c12,c33,c13,c23,d11,d22,d33,
92 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
94 is_encrypted = .false.
95 is_available = .false.
102 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
104 CALL hm_get_floatv(
'MAT_E1' ,e1 ,is_available, lsubmodel, unitab)
105 CALL hm_get_floatv(
'MAT_E2' ,e2 ,is_available, lsubmodel, unitab)
107 CALL hm_get_floatv(
'MAT_G12' ,g12 ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'MAT_G23' ,g23 ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'MAT_G31' ,g31 ,is_available, lsubmodel, unitab)
111 CALL hm_get_floatv(
'MAT_NU12' ,nu12 ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_NU23' ,nu23 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_NU31' ,nu31 ,is_available, lsubmodel, unitab)
115 CALL hm_get_floatv(
'MAT_E1C' ,e1c ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv(
'MAT_GAMMA' ,gamma ,is_available, lsubmodel, unitab)
117 CALL hm_get_intv (
'ISH' ,ish ,is_available, lsubmodel)
118 CALL hm_get_intv (
'ITR' ,itr ,is_available, lsubmodel)
119 CALL hm_get_intv (
'IRES' ,ires ,is_available, lsubmodel)
121 CALL hm_get_floatv(
'SIGY0' ,sigy0 ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'BETA' ,beta ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'MAT_EFTI' ,efti ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_EFTU' ,eftu ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'MAT_DFTU' ,dftu ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'MAT_EFCI' ,efci ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'MAT_EFCU' ,efcu ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv(
'MAT_DFCU' ,dfcu ,is_available, lsubmodel, unitab)
133 CALL hm_get_intv (
'IBUCK' ,ibuck ,is_available, lsubmodel)
135 CALL hm_get_intv (
'IFUNCD1' ,ifuncd1 ,is_available, lsubmodel)
136 CALL hm_get_floatv(
'MAT_DSAT1' ,dsat1 ,is_available, lsubmodel, unitab)
137 CALL hm_get_floatv(
'MAT_Y0' ,y0 ,is_available, lsubmodel, unitab)
138 CALL hm_get_floatv(
'MAT_YC' ,yc ,is_available, lsubmodel, unitab)
139 CALL hm_get_floatv(
'MAT_B' ,b ,is_available, lsubmodel, unitab)
141 CALL hm_get_floatv(
'MAT_DMAX' ,dmax ,is_available, lsubmodel, unitab)
142 CALL hm_get_floatv(
'MAT_YR' ,yr ,is_available, lsubmodel, unitab)
143 CALL hm_get_floatv(
'MAT_YSP' ,ysp ,is_available, lsubmodel, unitab)
146 CALL hm_get_floatv(
'MAT_DSAT2' ,dsat2 ,is_available, lsubmodel, unitab)
147 CALL hm_get_floatv(
'MAT_Y0P' ,y0p ,is_available, lsubmodel, unitab)
148 CALL hm_get_floatv(
'MAT_YCP' ,ycp ,is_available, lsubmodel, unitab)
150 CALL hm_get_intv (
'IFUNCD2C' ,ifuncd2c ,is_available, lsubmodel
151 CALL hm_get_floatv(
'MAT_DSAT2C',dsat2c ,is_available, lsubmodel, unitab)
152 CALL hm_get_floatv(
'MAT_Y0PC' ,y0pc ,is_available, lsubmodel, unitab)
153 CALL hm_get_floatv(
'MAT_YCPC' ,ycpc ,is_available, lsubmodel, unitab)
155 CALL hm_get_floatv(
'MAT_EPSD11',epsd11 ,is_available, lsubmodel, unitab)
156 CALL hm_get_floatv(
'MAT_D11' ,d11e ,is_available, lsubmodel, unitab)
157 CALL hm_get_floatv(
'MAT_N11' ,n11e ,is_available, lsubmodel, unitab)
158 CALL hm_get_floatv(
'MAT_D11U' ,d11u ,is_available, lsubmodel, unitab)
159 CALL hm_get_floatv(
'MAT_N11U' ,n11u ,is_available, lsubmodel, unitab)
161 CALL hm_get_floatv(
'MAT_EPSD12',epsd12 ,is_available, lsubmodel, unitab)
162 CALL hm_get_floatv(
'MAT_D22' ,d22e ,is_available, lsubmodel, unitab)
163 CALL hm_get_floatv(
'MAT_N22' ,n22e ,is_available, lsubmodel, unitab)
164 CALL hm_get_floatv(
'MAT_D12' ,d12e ,is_available, lsubmodel, unitab)
165 CALL hm_get_floatv(
'MAT_N12' ,n12e ,is_available, lsubmodel, unitab)
168 CALL hm_get_floatv(
'MAT_DR0' ,dr0 ,is_available, lsubmodel, unitab)
169 CALL hm_get_floatv(
'MAT_NR0' ,nr0 ,is_available, lsubmodel, unitab)
170 CALL hm_get_intv (
'LTYPE11' ,ltype11 ,is_available, lsubmodel)
171 CALL hm_get_intv (
'LTYPE12' ,ltype12 ,is_available, lsubmodel)
172 CALL hm_get_intv (
'LTYPER0' ,ltyper0 ,is_available, lsubmodel)
174 CALL hm_get_floatv(
'FCUT' ,fcut ,is_available, lsubmodel, unitab)
180 IF (e2 == zero) e2 = e1
181 IF (e3 == zero) e3 = e2
183 IF (g31 == zero) g31 = g12
190 if(nu12*nu21 >= one )
then
193 . anmode=aninfo_blind_2,
196 else if(nu13*nu31 >= one )
then
199 . anmode=aninfo_blind_2,
202 else if(nu23*nu32 >= one )
then
205 . anmode=aninfo_blind_2,
210 detc = one - nu12*nu21
211 IF (detc <= zero)
THEN
220 fac = one/(one - nu12*nu21)
232 detc= c11*c22*c33-c11*c23*c23-c12*c12*c33+c12*c13*c23
233 . +c13*c12*c23-c13*c22*c13
242 d11 = (c22*c33-c23*c23)/detc
243 d12 =-(c12*c33-c13*c23)/detc
244 d13 = (c12*c23-c13*c22)/detc
246 d23 =-(c11*c23-c13*c12)/detc
247 d33 = (c11*c22-c12*c12)/detc
248 dmn =
min(d11*d22 -d12**2, d11*d33 - d13**2, d22*d33 - d23**2 )
249 dmx =
max(d11,d22,d33)
252 IF (e1c == zero) e1c = e1
255 IF (ires == 0) ires = 2
259 IF (ish == 0) ish = 1
262 IF (itr == 0) itr = 1
266 IF (ibuck == 0) ibuck = 1
271 IF (sigy0 == zero) sigy0 = infinity
274 IF (efti == zero) efti = infinity
275 IF (eftu == zero) eftu = two*infinity
276 dftu =
max(dftu,zero)
278 IF (efci == zero) efci = infinity
279 IF (efcu == zero) efcu = two*infinity
280 dfcu =
max(dfcu,zero)
285 dmax =
max(dmax,zero)
286 dsat1 =
min(dsat1,one)
287 dsat1 =
max(dsat1,zero)
288 dsat2 =
min(dsat2,one)
289 dsat2 =
max(dsat2,zero)
290 dsat2c =
min(dsat2c,one)
291 dsat2c =
max(dsat2c,zero)
293 IF (b == zero) b = e2/g12
296 IF ((ifuncd1 > 0).AND.(y0 == zero))
THEN
298 ELSEIF (y0 == zero)
THEN
301 IF ((ifuncd2 > 0).AND.(y0p == zero))
THEN
303 ELSEIF (y0p == zero)
THEN
306 IF ((ifuncd2c > 0).AND.(y0pc == zero))
THEN
309 IF (yr == zero) yr = infinity
310 IF (ysp == zero) ysp = infinity
313 IF (epsd11 == zero)
THEN
316 IF (epsd12 == zero)
THEN
319 IF (epsdr0 == zero)
THEN
324 IF (ltype11 == 0) ltype11 = 1
325 ltype11 =
min(ltype11,4)
326 ltype11 =
max(ltype11,1)
327 IF (ltype12 == 0) ltype12 = 1
328 ltype12 =
min(ltype12,4)
329 ltype12 =
max(ltype12,1)
330 IF (ltyper0 == 0) ltyper0 = 1
331 ltyper0 =
min(ltyper0,4)
332 ltyper0 =
max(ltyper0,1)
335 IF (fcut == zero) fcut = 5000.0d0
421 parmat(1) =
max(a11,a22,d11,d22,d33)
422 parmat(2) =
max(e1,e2,e3)
423 parmat(3) =
max(nu12,nu13,nu23)
427 parmat(17) = dmn/dmx/dmx
446 ALLOCATE(matparam%MODE(matparam%NMOD))
447 matparam%MODE(1) =
"Fiber damage"
448 matparam%MODE(2) =
"Shear matrix damage"
449 matparam%MODE(3) =
"Transverse matrix damage"
464 WRITE(iout,1000) trim(titr),mat_id,ilaw
466 IF (is_encrypted)
THEN
467 WRITE(iout,
'(5X,A,//)')
'CONFIDENTIAL DATA'
469 WRITE(iout,1200) rho0
470 WRITE(iout,1300) e1,e2,e3,g12,g23,g31,nu12,nu23,nu31,e1c,gamma
471 WRITE(iout,1400) sigy0,beta,m,a,ires
472 WRITE(iout,1500) efti,eftu,dftu,efci,efcu,dfcu,ibuck
473 WRITE(iout,1600) ish,ifuncd1,dsat1,y0,yc,b
474 WRITE(iout,1700) dmax,yr,ysp
475 WRITE(iout,1800) itr,ifuncd2,dsat2,y0p,ycp,ifuncd2c,dsat2c,y0pc,ycpc
476 WRITE(iout,1900) epsd11,d11e,n11e,d11u,n11u,ltype11
478 WRITE(iout,2100) epsdr0,dr0,nr0,ltyper0
479 WRITE(iout,2200) fcut
484 & 5x,
'MATERIAL NUMBER. . . . . . . . . . . . =',i10/,
485 & 5x,
'MATERIAL LAW . . . . . . . . . . . . . =',i10/)
487 &(5x,
'MATERIAL MODEL : MODIFIED LADEVEZE',/,
488 & 5x,
'----------------------------------',/)
490 & 5x,
'INITIAL DENSITY . . . . . . . . . . . . . . . . .=',1pg20.13/)
492 & 5x,
'ELASTICITY PARAMETERS: ',/
493 & 5x,
'---------------------- ',/
494 & 5x,
'YOUNG MODULUS IN DIR. 1 (FIBER) E1 . . . . . . .=',1pg20.13/
495 & 5x,
'YOUNG MODULUS IN DIR. 2 (MATRIX) E2 . . . . . . .=',1pg20.13/
496 & 5x,
'YOUNG MODULUS IN DIR. 3 (MATRIX) E3 . . . . . . .=',1pg20.13/
497 & 5x,
'SHEAR MODULUS IN PLANE 12 G12 . . . . . . . . . .=',1pg20.13/
498 & 5x,
'SHEAR MODULUS IN PLANE 23 G23 . . . . . . . . . .=',1pg20.13/
499 & 5x,
'SHEAR MODULUS IN PLANE 31 G31 . . . . . . . . . .=',1pg20.13/
500 & 5x,
'POISSON RATIO IN PLANE 12 NU12. . . . . . . . . .=',1pg20.13/
501 & 5x,'poisson ratio in plane 23 nu23. . . . . . . . . .=
',1PG20.13/
502 & 5X,'poisson ratio in plane 31 nu31. . . . . . . . . .=
',1PG20.13/
503 & 5X,'initial compression young modulus in dir. 1 e1c .=
',1PG20.13/
504 & 5X,'compression young modulus factor gamma. . . . . .=
',1PG20.13/)
506 & 5X,'plasticity parameters:
',/
507 & 5X,'---------------------
',/
508 & 5X,'initial yield stress sigy0. . . . . . . . . . . .=
',1PG20.13/
509 & 5X,'hardening modulus beta. . . . . . . . . . . . . .=
',1PG20.13/
510 & 5X,'hardening exponent m. . . . . . . . . . . . . . .=
',1PG20.13/
511 & 5X,'plasticity coupling factor a. . . . . . . . . . .=
',1PG20.13/
512 & 5X,'RETURN mapping
TYPE flag. . . . . . . . . . . . .=
',I3/
513 & 5X,' ires = 1 nice explicit
'/
514 & 5X,' ires = 2 cutting plane semi-implicit(default)
'/)
516 & 5X,'fiber(dir. 1) damage parameters:
',/
517 & 5X,'---------------------------------
',/
518 & 5X,'tensile fiber initial damage strain efti. . . . .=
',1PG20.13/
519 & 5X,'tensile fiber ultimate damage strain eftu . . . .=
',1PG20.13/
520 & 5X,'tensile fiber ultimate damage dftu. . . . . . . .=
',1PG20.13/
521 & 5X,'compression fiber initial damage strain efci. . .=
',1PG20.13/
522 & 5X,'compression fiber ultimate damage strain efcu . .=
',1PG20.13/
523 & 5X,'compression fiber ultimate damage dfcu. . . . . .=
',1PG20.13/
524 & 5X,'buckling damage matrix on fiber effect flag . . .=
',I3/
525 & 5X,' ibuck = 1 not activated(default)
'/
526 & 5X,' ibuck = 2 activated
'/)
528 & 5X,'shear matrix damage parameters:
',/
529 & 5X,'-------------------------------
',/
530 & 5X,'shear damage
TYPE flag. . . . . . . . . . . . . .=
',I3/
531 & 5X,' ish = 1 linear(default)
'/
532 & 5X,' ish = 2 exponential
'/
534 & 5X,'damage
tabulated FUNCTION ifuncd1 . . . . . . . .=
',I10/
535 & 5X,'damage saturation dsat1 . . . . . . . . . . . . .=
',1PG20.13/
536 & 5X,'initial damage energy threshold y0. . . . . . . .=
',1PG20.13/
537 & 5X,'critical damage energy limit yc . . . . . . . . .=
',1PG20.13/
538 & 5X,'factor b. . . . . . . . . . . . . . . . . . . . .=
',1PG20.13/)
540 & 5X,'common damage parameters:
',/
541 & 5X,'-------------------------
',/
542 & 5X,'damage maximal allowed value dmax . . . . . . . .=
',1PG20.13/
543 & 5X,'elementary shear damage value yr. . . . . . . . .=
',1PG20.13/
544 & 5X,'brittle transverse dam. limit
for interface ysp .=
',1PG20.13/)
546 & 5X,'transverse matrix damage parameters:
',/
547 & 5X,'------------------------------------
',/
548 & 5X,'transverse damage type flag . . . . . . . . . . .=
',I3/
549 & 5X,' itr = 1 linear (DEFAULT)
'/
550 & 5X,' itr = 2 exponential
'/
552 & 5X,'tensile damage
tabulated function ifuncd2 . . . .=
',I10/
553 & 5X,'tensile damage saturation dsat2 . . . . . . . . .=
',1PG20.13/
554 & 5X,'tensile initial damage energy threshold y0p . . .=',1pg20.13/
555 & 5x,
'TENSILE CRITICAL DAMAGE ENERGY LIMIT YCP. . . . .='
556 & 5x,
'(COMPRESSION PARAMETERS FOR SHELLS ONLY) ',/
557 & 5x,
'COMPRESSION DAMAGE TABULATED FUNCTION IFUNCD2 . .=',i10/
558 & 5x,
'COMPRESSION DAMAGE SATURATION DSAT2C. . . . . . .=',1pg20.13/
559 & 5x,
'COMPRESSION INITIAL DAMAGE ENERGY THRESHOLD Y0PC.=',1pg20.13/
560 & 5x,
'COMPRESSION CRITICAL DAMAGE ENERGY LIMIT YCP. . .=',1pg20.13/)
562 & 5x,
'FIBER DIR. 1 STRAIN RATE DEPENDENCY PARAMETERS: ',/
563 & 5x,
'----------------------------------------------- ',/
564 & 5x,
'REFERENCE STRAIN RATE EPSD11. . . . . . . . . . .=',1pg20.13/
565 & 5x,
'1ST PARAMETER FOR ELASTICITY RATE DEPENDENCY D11.=',1pg20.13/
566 & 5x,
'2ND PARAMETER FOR ELASTICITY RATE DEPENDENCY N11.=',1pg20.13/
567 & 5x,
'1ST PARAMETER FOR RUPTURE RATE DEPENDENCY D11U. .=',1pg20.13/
568 & 5x,
'2ND PARAMETER FOR RUPTURE RATE DEPENDENCY N11U. .=',1pg20.13/
569 & 5x,
'RATE DEPENDENCY LAW TYPE. . . . . . . . . . . . .=',i3/
570 & 5x,' ltype11 = 1 power law(default)
',/
571 & 5X,' ltype11 = 2 linear law
',/
572 & 5X,' ltype11 = 3 logarithmic law
',/
573 & 5X,' ltype11 = 4 tangent hyperbolic law
',/)
575 & 5X,'tranverse/shear strain rate dependency parameters:
',/
576 & 5X,'--------------------------------------------------
',/
577 & 5X,'reference strain rate epsd12. . . . . . . . . . .=
',1PG20.13/
578 & 5X,'1st
PARAMETER for elasticity rate dependency d22.=
',1PG20.13/
579 & 5X,'2nd
PARAMETER for elasticity rate dependency n22.=
',1PG20.13/
580 & 5X,'1st
PARAMETER for elasticity rate dependency d12.=
',1PG20.13/
581 & 5X,'2nd
PARAMETER for elasticity rate dependency n12.=
',1PG20.13/
582 & 5X,'rate dependency law type. . . . . . . . . . . . .=
',I3/
583 & 5X,' ltype12 = 1 power law(default)
',/
584 & 5X,' ltype12 = 2 linear law
',/
585 & 5X,' ltype12 = 3 logarithmic law
',/
586 & 5X,' ltype12 = 4 tangent hyperbolic law
',/)
588 & 5X,'yield stress strain rate dependency parameters:
',/
589 & 5X,'-----------------------------------------------
',/
590 & 5X,'reference strain rate epsdr0. . . . . . . . . . .=
',1PG20.13/
591 & 5X,'1st param.
for yield stress rate dependency dr0 .=
',1PG20.13/
592 & 5X,'2nd param.
for yield stress rate dependency nr0 .=
',1PG20.13/
593 & 5X,'rate dependency law type. . . . . . . . . . . . .=
',I3/
594 & 5X,' ltyper0 = 1 power law(default)
',/
595 & 5X,' ltyper0 = 2 linear law
',/
596 & 5X,' ltyper0 = 3 logarithmic law
',/
597 & 5X,' ltyper0 = 4 tangent hyperbolic
',/)
599 & 5X,'strain rate filtering cutoff frequency fcut . . .=
',1PG20.13/)