45
46
47
52 USE matparam_def_mod
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68#include "implicit_f.inc"
69
70
71
72#include "units_c.inc"
73#include "param_c.inc"
74
75
76
77 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
78 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXFUNC,MAXTABL
79 my_real,
DIMENSION(NPROPM) ,
INTENT(INOUT) :: pm
80 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
81 INTEGER, INTENT(INOUT) :: ISRAT ,NTABLE,ITABLE(MAXTABL)
82 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR
83 INTEGER, INTENT(INOUT) :: MFUNC
84 INTEGER, DIMENSION(MAXFUNC) ,INTENT(INOUT) :: IFUNC
85 my_real,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
86 my_real,
DIMENSION(100),
INTENT(INOUT) :: parmat
87 TYPE(SUBMODEL_DATA), DIMENSION(*),INTENT(IN) :: LSUBMODEL
88 TYPE(MLAW_TAG_), INTENT(INOUT) :: MTAG
89 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
90
91
92
93 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
95 . e, nu, yeild, et,csd, visp, q1, q2, q3, sn, epsn,
96 . f1,fn,fc, ff, fu,fi,g,c1,n,fac_l,fac_t,fac_m,fac_c,
97 . r,xfac,yfac,rho0,rhor,fcut
98 INTEGER NRATE,J,I,NFUNC, IFLAG,IYIELDTAB,ITAB, ISRATE
99
100 is_encrypted = .false.
101 is_available = .false.
102 israt = 1
103 iyieldtab = 0
104 ntable = 0
105 itable(1) = 0
106 xfac = zero
107 yfac = zero
108
110
111 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
113
114 CALL hm_get_floatv(
'MAT_E' ,e ,is_available, lsubmodel, unitab)
115 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
116 CALL hm_get_intv (
'MAT_Iflag' ,iflag ,is_available,lsubmodel)
117 CALL hm_get_intv (
'Fsmooth' ,israte ,is_available,lsubmodel)
118 CALL hm_get_floatv(
'Fcut' ,fcut ,is_available, lsubmodel, unitab)
119 CALL hm_get_intv (
'MAT_Iyield' ,iyieldtab ,is_available,lsubmodel)
120
121 CALL hm_get_floatv(
'MAT_A' ,yeild ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv(
'MAT_B' ,et ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv(
'MAT_N' ,n ,is_available, lsubmodel, unitab)
124 CALL hm_get_floatv(
'MAT_C' ,csd ,is_available, lsubmodel, unitab)
125 CALL hm_get_floatv(
'MAT_PC' ,visp ,is_available, lsubmodel, unitab)
126
127 CALL hm_get_floatv(
'MAT_q1' ,q1 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'MAT_q2' ,q2 ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'MAT_q3' ,q3 ,is_available, lsubmodel, unitab)
130 CALL hm_get_floatv(
'MAT_S_N' ,sn ,is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'MAT_EPS_N' ,epsn ,is_available, lsubmodel, unitab)
132
133 CALL hm_get_floatv(
'MAT_f_I' ,fi ,is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'MAT_f_N' ,fn ,is_available, lsubmodel, unitab)
135 CALL hm_get_floatv(
'MAT_f_C' ,fc ,is_available, lsubmodel, unitab)
136 CALL hm_get_floatv(
'MAT_f_F' ,ff ,is_available, lsubmodel, unitab)
137
138
139 IF(iyieldtab > 0) THEN
143 ENDIF
144 IF (rhor == zero) rhor=rho0
145 pm(1) = rhor
146 pm(89)= rho0
147
148 g = half*e/(1.+nu)
149 c1 = e / three / (one - two*nu)
150 IF( csd > zero .AND.THEN
152 . msgtype=msgwarning,
153 . anmode=aninfo_blind_1,
154 . i1=mat_id,
155 . c1=titr)
156 ENDIF
157 IF (fcut == zero) fcut = infinity
158 israte = 1
159 IF(itable(1) /= 0) ntable = 1
160 IF(xfac == zero) xfac = one
161 IF(yfac == zero) yfac = one
162
163
164
165 IF(ff < fc .OR. ff < fi .OR. fc < fi ) THEN
167 . msgtype=msgerror,
168 . anmode=aninfo_blind_1,
169 . i1=mat_id,
170 . c1=titr)
171 ENDIF
172
173
174
175 uparam(1)=e
176 uparam(2)=nu
177 uparam(3)= yeild
178 uparam(4)= et
179 uparam(5)= n
180 IF(csd == zero) csd = infinity
181 uparam(6)= csd
182 IF(visp == zero)visp=one
183 visp=1/visp
184 uparam(7)=visp
185 uparam(8)=q1
186 uparam(9)=q2
187 uparam(10)=q3
188 uparam(11)=sn
189 uparam(12)=epsn
190 uparam(13)=fi
191 uparam(14)=fn
192 uparam(15)=fc
193 uparam(16)=ff
194 IF(q1 == zero)q1=em20
195 fu=one/q1
196 uparam(17)=fu
197 uparam(18)=iflag
198 uparam(19) = israte
199 uparam(20) = fcut
200 IF(ntable == 1) uparam(21) = 1
201 uparam(22) = xfac
202 uparam(23) = yfac
203
204
205 parmat(1) = c1
206 parmat(2) = e
207 parmat(3) = nu
208 parmat(4) = israte
209 parmat(5) = fcut
210 nuparam = 23
211 nfunc = 0
212 nuvar = 2
213
214 parmat(16) = 2
215 parmat(17) = (one - two*nu)/(one + nu)
216
217 mtag%G_PLA = 1
218 mtag%L_PLA = 1
219 mtag%G_EPSD = 1
220 mtag%L_EPSD = 1
221
222
223
224 matparam%NMOD = 4
225
226
227
228 mtag%G_DMG = 1 + matparam%NMOD
229 mtag%L_DMG = 1 + matparam%NMOD
230
231 ALLOCATE(matparam%MODE(matparam%NMOD))
232 matparam%MODE(1) = "Void growth volume fraction fg"
233 matparam%MODE(2) = "Nucleation volume fraction fn"
234 matparam%MODE(3) = "Total void volume fraction ft"
235 matparam%MODE(4) = "Effective void volume fraction f*"
236
237
239
242
243 WRITE(iout,1001) trim(titr),mat_id,52
244 WRITE(iout,1000)
245
246 IF(is_encrypted)THEN
247 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
248 ELSE
249 WRITE(iout,1002) rho0
250 WRITE(iout,1100) e,nu,yeild, et, n,csd, visp,sn,epsn, q1,q2,q3,fi,fn,fc, ff, fu,israte,fcut, iflag
251 IF( iyieldtab > 0) THEN
252 write(iout,1200)itable(1),yfac,xfac
253 ENDIF
254
255 ENDIF
256
257 RETURN
258 1000 FORMAT(
260 &5x,30h -------------------- ,//)
261 1001 FORMAT(/
262 &5x,a,/,
263 &5x,'MATERIAL NUMBER. . . . . . . . . . . . . . . . . =',i10/,
264 &5x,'MATERIAL LAW . . . . . . . . . . . . . . . . . . =',i10/)
265 1002 FORMAT(
266 &5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . =',1pg20.13/)
267 1100 FORMAT(
268 &5x,'YOUNG''S MODULUS. . . . . . . . . . . . . . . . =',1pg20.13,/
269 &5x,'POISSON''S RATIO. . . . . . . . . . . . . . . . =',1pg20.13,/
270 &5x,'YIELD STRESS. . . . . . . . . . . . . . . . . . =',1pg20.13,/
271 &5x,'TANGENT MODULUS . . . . . . . . . . . . . . . . =',1pg20.13,/
272 &5x,'HARDENING EXPONENT. . . . . . . . . . . . . . . =',1pg20.13,/
273 &5x,'COEFFICIENT OF THE COWPER-SYMOND .. . . . . . . =',1pg20.13,/
274 &5x,'STRAIN RATE EXPONENT IN COWPER-SYMOND LAW . . . =',1pg20.13,/
275 &5x,'GAUSSIAN STANDARD DEVIATION. . . . . . . . . . =',1pg20.13,/
276 &5x,'NUCLUETED EFFECTIVE PLASTIC STRAIN . . . . . . =',1pg20.13,/
277 &5x,'MATERIAL PARAMETERS :',/
278 &10x, 'Q1. . . . . . . . . . . . . . . . . . . . . =',1pg20.13,/
279 &10x, 'Q2. . . . . . . . . . . . . . . . . . . . . . =',1pg20.13,/
280 &10x, 'Q3. . . . . . . . . . . . . . . . . . . . . . =',1pg20.13,/
281 &5x,'INITIAL VOID VOLUME FRACTION . . . . . . . . . =',1pg20.13,/
282 &5x,'NUCLUETED VOID VOLUME FRACTION . . . . . . . . =',1pg20.13,/
283 &5x,'CRITICAL VOID VOLUME FRACTION AT COALESCENCE. . =',1pg20.13,/
284 &5x,'CRITICAL VOID VOLUME FRACTION AT DUCTILE FRACTURE=',1pg20
285 &5x,'VALUE OF THE COELESCENCE VALUE. . . . . . . . . =',1pg20.13,/
286 &5x,'SMOOTH STRAIN RATE OPTION. . . . . . . . . . . =',i10/
287 &5x,'STRAIN RATE CUTTING FREQUENCY. . . . . . . . . =',1pg20.13/
288 &5x,'The CHOICE OF VISCOPLASTIC FLOW. . . . . . . . . =',i10)
289
290 1200 FORMAT(
291 & 5x,'YIELD TABLE ID . . . . . . . . .. . . . . . . . =',i10/
292 & 5x,'YIELD SCALE FACTOR . . . . . . . . . . . . . . =',1pg20.1
293 & 5x,'PLASTIC STRAIN SCALE FACTOR . . . . . . .. . =',1pg20.13)
294
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
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)
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)