43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
66 USE matparam_def_mod
68
69
70
71#include "implicit_f.inc"
72
73
74
75#include "units_c.inc"
76#include "param_c.inc"
77
78
79
80 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
81 INTEGER, INTENT(IN) :: ID,MAXUPARAM,MAXFUNC,IFORM
82 INTEGER, INTENT(INOUT) :: IPM(NPROPMI),IMATVIS,ISRATE
83 my_real,
INTENT(INOUT) :: pm(npropm)
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
86 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NFUNC
87 INTEGER, DIMENSION(MAXFUNC), INTENT(INOUT)
88 my_real,
DIMENSION(MAXUPARAM),
INTENT(INOUT) :: uparam
89 my_real,
INTENT(INOUT) :: parmat(*)
90 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
91 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
92
93
94
95 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
96 INTEGER :: ICC,ISRAT1,IFLAG,MFLAG,ILAW
99 . young, anu, ca, cb, cn, epsm, sigm, cc, eps0, epsl, el, g,
100 . e0, c0, c1, e1mn2, en1n2, sdsp, hl, yldl
101 CHARACTER *16
102
103
104
105 is_encrypted = .false.
106 is_available = .false.
107 rhor = zero
108 nuvar = 0
109 nuparam = 0
110 nfunc = 0
111 ilaw = 22
112
114
115 !line-1
116 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
117
118
121
122 CALL hm_get_floatv(
'MAT_SIGY' ,ca ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_BETA' ,cb ,is_available, lsubmodel, unitab
127
128
130 CALL hm_get_floatv(
'MAT_SRP' ,eps0 ,is_available, lsubmodel, unitab)
131 CALL hm_get_intv (
'STRFLAG' ,icc ,is_available, lsubmodel)
132
133 CALL hm_get_floatv(
'MAT_DAMAGE' ,epsl ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_ETAN' ,el ,is_available, lsubmodel, unitab)
135
136 IF(rhor == zero) rhor = rho0
137 pm(1) = rhor
138 pm(89) = rho0
139
140 IF(icc == 0 )icc=1
141
142 IF(anu == half) anu=zep499
143 IF(epsl == zero) epsl=zep15
144 IF(cn == zero) cn = one
145 IF(epsm == zero) epsm = infinity
146 IF(sigm == zero) sigm = infinity
147 IF(cc == zero) eps0 = one
148
149 g=young/(two*(one + anu))
150 e0=zero
151 c0=zero
152 c1=young/(three*(one
153 e1mn2=young/(one-anu**2)
154 en1n2=anu*e1mn2
155 sdsp =sqrt(young/
max(pm(1),em20))
156 hl =young * el /
max(em20,young-el)
157 yldl = ca+cb*exp(cn*log(epsl))
158 yldl =
min(yldl,sigm)
159
160 pm(20)=young
161 pm(21)=anu
162 pm(22)=g
163 pm(23)=e0
164 pm(24)=e1mn2
165 pm(25)=en1n2
166 pm(26)=five_over_6
167 pm(27)=sdsp
168 pm(28)=one/young
169 pm(29)=-anu*pm(28)
170 pm(30)=one/g
171 pm(31)=c0
172 pm(32)=c1
173 pm(38)=ca
174 pm(39)=cb
175 pm(40)=cn
176 pm(41)=epsm
177 pm(42)=sigm
178 pm(43)=cc
179 pm(44)=eps0
180 pm(45)=epsl
181 pm(46)=hl
182 pm(47)=yldl
183 pm(48)=el
184 pm(49)=icc
185
186
187 ipm(252)= 2
188 pm(105) = ( one -two*anu)/(one - anu)
189
190
191 ipm(252)= 2
192 pm(105) = two*g/(c1+four_over_3*g)
193
194 WRITE(iout,1010) trim(titr),
id,ilaw
195 WRITE(iout,1000)
196 IF(is_encrypted)THEN
197 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
198 ELSE
199 WRITE(iout,1020)rho0
200 WRITE(iout,1300)young,anu,g
201 WRITE(iout,1400)ca,cb,cn,epsm,sigm
202 WRITE(iout,1600)cc,eps0,icc
203 WRITE(iout,1800)epsl,el
204 ENDIF
205
206 IF(ca<=zero) THEN
208 . msgtype=msgerror,
209 . anmode=aninfo,
210 . i1=22,
212 . c1=titr)
213 ENDIF
214 IF(cn>one) THEN
216 . msgtype=msgerror,
217 . anmode=aninfo,
218 . i1=22,
220 . c1=titr)
221 ENDIF
222 IF(eps0==zero) THEN
224 . msgtype=msgerror,
225 . anmode=aninfo,
226 . i1=22,
228 . c1=titr)
229 ENDIF
230 IF(el>zero.OR.el<=-young.OR.el<=-three*g) THEN
232 . msgtype=msgerror,
233 . anmode=aninfo,
235 . c1=titr)
236 ENDIF
237
238
239
240 mtag%G_EPSD = 1
241 mtag%G_PLA = 1
242
243 mtag%L_EPSD = 1
244 mtag%L_PLA = 1
245
246
248
249
253
254
255 RETURN
256
257 1000 FORMAT(
258 & 5x,' ELASTIC PLASTIC + DAMAGE LAW ',/,
259 & 5x,' ---------------------------- ',//)
260 1010 FORMAT(/
261 & 5x,a,/,
262 & 5x,'MATERIAL NUMBER. . . . . . . . . . . . . .=',i10/,
263 & 5x,'MATERIAL LAW . . . . . . . . . . . . . . .=',i10/)
264 1020 FORMAT(
265 & 5x,'initial density. . . . . . . . . . . . . .=',1PG20.13/)
266 1300 FORMAT(
267 & 5X,'young''s modulus . . . . . . . . . . . .=',1PG20.13/,
268 & 5X,'poisson''s ratio . . . . . . . . . . . .=',1PG20.13/,
269 & 5X,'shear modulus . . . . . . . . . . . . .=',1PG20.13//)
270 1400 FORMAT(
271 & 5X,'yield coefficient ca. . . . . . . . . .=',1PG20.13/,
272 & 5X,'yield coefficient cb. . . . . . . . . .=',1PG20.13/,
273 & 5X,'yield coefficient cn. . . . . . . . . .=',1PG20.13/,
274 & 5X,'eps-
max . . . . . . . . . . . . . . . .=
',1PG20.13/,
275 & 5X,'sig-
max . . . . . . . . . . . . . . . .=
',1PG20.13//)
276 1600 FORMAT(
277 & 5X,'strain rate coefficient cc. . . . . . .=',1PG20.13/,
278 & 5X,'reference strain rate . . . . . . . . .=',1PG20.13/,
279 & 5X,'flag
for strain rate on sig-
max . . . .=
',I10//)
280 1800 FORMAT(
281 & 5X,'damage strain limit . . . . . . . . . .=',1PG20.13/,
282 & 5X,'damage tangent modulus el . . . . . . .=',1PG20.13//)
283
284 RETURN
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)
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)