42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
65 USE matparam_def_mod
67
68
69
70#include "implicit_f.inc"
71
72
73
74#include "param_c.inc"
75#include "units_c.inc"
76
77
78
79 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
80 INTEGER, INTENT(INOUT) :: IFUNC(MAXFUNC), NFUNC, MAXFUNC
81 INTEGER, INTENT(INOUT) :: MAXUPARAM,
82 . NUPARAM,NUVAR
83 INTEGER, INTENT(IN) :: MAT_ID
84 my_real,
INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
85 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
86 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
87 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
88 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
89
90
91
92 INTEGER :: NRATE,ILAW,IMASS,IDEL,IORDER1,IORDER2,
93 . IFAIL1,IFAIL2, IRUPT,ICRIT
94 my_real :: rho0,e,g,thick,gc1_ini,gc2_ini,gc1_inf,gc2_inf,ratg1,ratg2,fscalex,fscalex_unit,
95 . fg1,fg2,siga1,siga2,sigb1,sigb2,rate1,rate2,unit_l,e_elas_n,e_elas_s,tmax_n,tmax_s,
96 . gic,giic,exp_g,exp_bk,disp_0n,disp_0s,delta0n,delta0s,und,utd,gama
97 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
98
99 ilaw = 117
100
101 is_encrypted = .false.
102 is_available = .false.
103
105
106 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
107 CALL hm_get_intv (
'MAT_IMASS' ,imass ,is_available, lsubmodel)
108 CALL hm_get_intv (
'MAT_Fct_TN' ,ifunc(1) ,is_available, lsubmodel)
109 CALL hm_get_intv (
'MAT_Fct_TT' ,ifunc(2) ,is_available, lsubmodel)
110 CALL hm_get_floatv(
'MAT_Fscale_x' ,fscalex ,is_available, lsubmodel, unitab)
111 IF(fscalex == zero) THEN
112 CALL hm_get_floatv_dim(
'MAT_Fscale_x' ,fscalex_unit ,is_available, lsubmodel, unitab)
113 fscalex = fscalex_unit
114 ENDIF
115 CALL hm_get_floatv(
'MAT_E_ELAS_N' ,e_elas_n ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv(
'MAT_E_ELAS_S' ,e_elas_s ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv(
'MAT_TMAX_N' ,tmax_n ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv(
'MAT_TMAX_S' ,tmax_s ,is_available, lsubmodel, unitab)
119
120 CALL hm_get_intv (
'MAT_IRUPT' ,irupt ,is_available, lsubmodel)
121 CALL hm_get_intv (
'MAT_IDEL' ,idel ,is_available, lsubmodel)
122 CALL hm_get_floatv(
'MAT_GIC' ,gic ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_GIIC' ,giic ,is_available, lsubmodel, unitab)
124
125 CALL hm_get_floatv(
'MAT_EXP_G' ,exp_g ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'MAT_EXP_BK' ,exp_bk ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_GAMMA' ,gama ,is_available, lsubmodel, unitab)
128
129 pm(1) = rho0
130 pm(89)= rho0
131
132
133
134 nuvar = 15
135 nfunc = 2
136 nuparam = 18
137
138
139
140 IF (idel == 0) idel = 1
141 IF (imass == 0) imass = 1
142 IF (irupt == 0) irupt = 1
143 IF (gama == zero) gama = one
144 IF (exp_g == zero) exp_g = two
145 IF (e_elas_s == zero) e_elas_s = e_elas_n
146 IF ( gic < (tmax_n**2 / two/e_elas_n ) ) THEN
147 gic = tmax_n**2 / two/e_elas_n
148 CALL ancmsg(msgid=3016,msgtype=msgwarning,anmode=aninfo_blind_1,
149 . i1 = mat_id,
150 . c1 = titr )
151 END IF
152 IF ( giic < (tmax_s**2 / two/e_elas_s ) ) THEN
153 giic = tmax_s**2 / two/e_elas_s
154 CALL ancmsg(msgid=3017,msgtype=msgwarning,anmode=aninfo_blind_1,
155 . i1 = mat_id,
156 . c1 = titr )
157 END IF
158
159
160
161
162 delta0n = tmax_n/e_elas_n
163 delta0s = tmax_s/e_elas_s
164
165 und = two*gic /(delta0n *e_elas_n)
166 utd = two*giic/(delta0s *e_elas_s)
167
168
169
170
171
172
173
174
175 disp_0n = tmax_n/e_elas_n
176 disp_0s = tmax_s/e_elas_s
177 uparam(1) = e_elas_n
178 uparam(2) = e_elas_s
179 uparam(3) = gama
180 uparam(4) = tmax_n
181 uparam(5) = tmax_s
182 uparam(6) = irupt
183 uparam(7) = gic
184 uparam(8) = giic
185 uparam(9) = idel
186 uparam(10) = exp_g
187
188 uparam(12) = imass
189 uparam(13) = delta0n
190 uparam(14) = delta0s
191 uparam(15) = und
192 uparam(16) = utd
193 uparam(17) = fscalex
194
195
196
197
198
199 parmat(1) =
max(e_elas_n,e_elas_s) / three
200 parmat(2) =
max(e_elas_n,e_elas_s)
201 parmat(17) = one
202
203 mtag%L_EPE = 3
204 mtag%L_DMG = 1
205 mtag%G_DMG = 1
206
207
209
210
212
213
214
215 WRITE(iout,1100) trim(titr),mat_id,ilaw
216 WRITE(iout,1000)
217 IF (is_encrypted) THEN
218 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
219 ELSE
220 WRITE(iout,1200) rho0,e_elas_n,e_elas_s,tmax_n,tmax_s,
221 . ifunc(1),ifunc(2),fscalex,
222 . irupt,gic,giic,exp_g,exp_bk,gama
223 ENDIF
224
225 RETURN
226
227 1000 FORMAT(
228 & 10x,' MIXED MODE COHESIVE LAW 117 ',/,
229 & 10x,' --------------------------- ',/)
230 1100 FORMAT(/
231 & 5x,a,/,
232 & 5x,'MATERIAL NUMBER . . . . . . . . . . . . . . .=',i10/,
233 & 5x,'MATERIAL LAW. . . . . . . . . . . . . . . . .=',i10/)
234 1200 FORMAT(
235 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
236 & 5x,'STIFFNESS NORMAL TO THE PLANE OF THE COHESIVE ELEMENT .=',1pg20
237 & 5x,'STIFFNESS IN TO THE PLANE OF THE COHESIVE ELEMENT . . .=',1pg20.13/,
238 & 5x,'PEAK TRACTION IN NORMAL DIRECTION . . . . . . . . . . .=',1pg20.13/,
239 & 5x,'PEAK TRACTION IN TANGENTIAL DIRECTION . . . . . . . . .=',1pg20.13/,
240 & 5x,'FUNCTION OF THE PEAK TRACTION IN NORMAL DIRECTION. . . =',i10/,
241 & 5x,'FUNCTION OF THE PEAK TRACTION IN TANGENTIAL DIRECTION .=',i10/,
242 & 5x,'ABSCISSA SCALE FACTOR FOR THE PEAK TRACTION FUNCTIONS .=',1pg20.13/,
243
244 & 5x,'CHOICE OF PROPAGATION CRITERION . . . . . . . . . . . .=',i10/,
245 & 5x,' = 1 => POWER LAW '/,
246 & 5x,' = 2 => BENZEGGAGH-KENANE '/,
247
248 & 5x,'ENERGY RELEASE RATE FOR MODE I. . . . . . . . . . . . .=',1pg20.13/,
249 & 5x,'ENERGY RELEASE RATE FOR MODE II . . . . . . . . . . . .=',1pg20.13/,
250
251 & 5x,'POWER LAW EXPONENT MU . . . . . . . . . . . . . . . . .=',1pg20.13/,
252 & 5x,'BENZEGGAGH-KENANE EXPONENT MU . . . . . . . . . . . . .=',1pg20.13/,
253 & 5x,'BENZEGGAGH-KENANE EXPONENT GAMMA. . . . . . . . . . . .=',1pg20.13/)
254
255
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, 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)
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)