42
43
44
48 USE matparam_def_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59
60
61
62 INTEGER ,INTENT(IN) :: MAT_ID,MAXTABL,MAXUPARAM
63 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
65 my_real ,
DIMENSION(100) ,
INTENT(INOUT) :: parmat
66 my_real ,
DIMENSION(MAXUPARAM) ,
INTENT(INOUT) :: uparam
67 INTEGER ,DIMENSION(MAXTABL) ,INTENT(INOUT) :: ITABLE
68 INTEGER ,INTENT(INOUT) :: NTABL,NUPARAM,NUVAR,NVARTMP
69 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
70 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
71 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
72 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
73
74
75
76 INTEGER :: ISMOOTH,ILAW,TAB_YLD,TAB_TEMP,TAB_ETA
77 my_real :: young,nu,g,lame,bulk,a1,a2,cp,tref,tini,eta,xrate,
78 . xscale,yscale,yscale_unit,xscale_unit,fcut
79 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
80
81 is_encrypted = .false.
82 is_available = .false.
83 ilaw = 109
84
86
87
88
89 CALL hm_get_floatv(
'MAT_RHO' ,rho ,is_available, lsubmodel, unitab)
90
91 CALL hm_get_floatv(
'MAT_E' ,young ,is_available, lsubmodel, unitab)
92 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
93
94
95 CALL hm_get_floatv(
'MAT_SPHEAT' ,cp ,is_available, lsubmodel, unitab)
96 CALL hm_get_floatv(
'MAT_ETA' ,eta ,is_available, lsubmodel, unitab)
97 CALL hm_get_floatv(
'WPREF' ,tref ,is_available, lsubmodel, unitab)
98 CALL hm_get_floatv(
'T_Initial' ,tini ,is_available, lsubmodel, unitab)
99
100 CALL hm_get_intv (
'MAT_TAB_YLD' ,tab_yld ,is_available,lsubmodel)
101 CALL hm_get_intv (
'MAT_TAB_TEMP' ,tab_temp ,is_available,lsubmodel)
102 CALL hm_get_floatv(
'MAT_Xscale' ,xscale ,is_available, lsubmodel, unitab)
103 CALL hm_get_floatv(
'MAT_Yscale' ,yscale ,is_available, lsubmodel, unitab)
104 CALL hm_get_intv (
'MAT_Ismooth' ,ismooth ,is_available,lsubmodel)
105
106 CALL hm_get_intv (
'TAB_ETA' ,tab_eta ,is_available,lsubmodel)
107 CALL hm_get_floatv(
'MAT_Xrate' ,xrate ,is_available, lsubmodel, unitab)
108
109
110
111 g = half *young / (one + nu)
112 lame = two * g * nu /(one - two*nu)
113 bulk = third * young / (one - nu*two)
114
115
116
117
118 IF (ismooth == 0) ismooth = 1
119 IF (tref == zero) tref = 293.0
120 IF (tini == zero) tini = tref
121 IF (yscale == zero) THEN
122 CALL hm_get_floatv_dim(
'MAT_Yscale' ,yscale_unit ,is_available, lsubmodel, unitab)
123 yscale = one * yscale_unit
124 ENDIF
125 IF (xscale == zero) THEN
126 CALL hm_get_floatv_dim(
'MAT_Xscale' ,xscale_unit ,is_available, lsubmodel, unitab)
127 xscale = one * xscale_unit
128 ENDIF
129 IF (xrate == zero) THEN
130 CALL hm_get_floatv_dim(
'MAT_XRATE' ,xscale_unit ,is_available, lsubmodel, unitab)
131 xrate = one * xscale_unit
132 ENDIF
133
134 a1 = young / (one - nu*nu)
135 a2 = a1 * nu
136 fcut = 10000.0d0*unitab%FAC_T_WORK
137
138 uparam(1) = young
139 uparam(2) = nu
140 uparam(3) = eta
141 uparam(4) = tref
142 uparam(5) = tini
143 uparam(6) = ismooth
144
145
146
147 uparam(7) = one/xrate
148 uparam(8) = one/xscale
149 uparam(9) = yscale
150 uparam(10) = 0
151 uparam(11) = g
152 uparam(12) = g * two
153 uparam(13) = g * three
154 uparam(14) = bulk
155 uparam(15) = lame
156 uparam(16) = a1
157 uparam(17) = a2
158 uparam(18) = nu / (one - nu)
159 uparam(19) = (one - two*nu) / (one - nu)
160 uparam(20) = cp
161 uparam(21) = fcut*two*pi
162
163 parmat(1) = bulk
164 parmat(2) = young
165 parmat(3) = nu
166
167 parmat(16) = 2
168 parmat(17) = two*g / (bulk + four_over_3*g)
169
170 mtag%G_EPSD = 1
171 mtag%L_EPSD = 1
172 mtag%G_PLA = 1
173 mtag%L_PLA = 1
174 mtag%G_TEMP = 1
175 mtag%L_TEMP = 1
176 mtag%G_SEQ = 1
177 mtag%L_SEQ = 1
178
179
180 matparam%HEAT_FLAG = 1
181
183 CALL INIT_MAT_KEYWORD(MATPARAM ,"incremental" )
184 CALL INIT_MAT_KEYWORD(MATPARAM ,"large_strain" )
185 CALL INIT_MAT_KEYWORD(MATPARAM ,"hook")
186 ! Material compatibility with /EOS option
187 CALL INIT_MAT_KEYWORD(MATPARAM,"eos")
188 ! Properties compatibility
189 CALL INIT_MAT_KEYWORD(MATPARAM,"shell_isotropic")
190 CALL INIT_MAT_KEYWORD(MATPARAM,"solid_isotropic")
191 CALL INIT_MAT_KEYWORD(MATPARAM,"sph")
192
193 NUPARAM = 21
194 NUVAR = 0
195 NTABL = 3
196
197 ITABLE(1) = TAB_YLD ! Yield function table = f(epsp,epsdot)
198 ITABLE(2) = TAB_TEMP ! Temperature scale factor table = f(epsp,T)
199 ITABLE(3) = TAB_ETA ! Taylor-Quinney scale factor table = f(epsp,epsdot,T)
200.or. IF (TAB_TEMP > 0 TAB_ETA > 0) THEN
201 NVARTMP = 5
202 ELSE
203 NVARTMP = 1
204 ENDIF
205
206 WRITE(IOUT,1001) TRIM(TITR),MAT_ID,ILAW
207 WRITE(IOUT,1000)
208 IF (IS_ENCRYPTED)THEN
209 WRITE(IOUT,'(5X,A,//)')'CONFIDENTIAL DATA'
210 ELSE
211 WRITE(IOUT,1100) RHO
212 WRITE(IOUT,1200) YOUNG,NU
213 WRITE(IOUT,1300) TAB_YLD,ISMOOTH,XSCALE,YSCALE
214 WRITE(IOUT,1400) TAB_TEMP,TREF,TAB_ETA,CP,TINI,ETA,XRATE
215 ENDIF
216
217 RETURN
218
219 1000 FORMAT(/
220 & 5X,'-------------------------------------------------------',/
221 & 5X,' MATERIAL MODEL: TABULATED ELASTO-PLASTIC ',/,
222 & 5X,'-------------------------------------------------------',/)
223 1001 FORMAT(/
224 & 5X,A,/,
225 & 5X,'MATERIAL NUMBER. . . . . . . . . . . . . . . . . . . .=',I10/,
226 & 5X,'MATERIAL LAW . . . . . . . . . . . . . . . . . . . . .=',I10/)
227 1100 FORMAT(/
228 & 5X,'INITIAL DENSITY. . . . . . . . . . . . . . . . . . . .=',1PG20.13/)
229 1200 FORMAT(/
230 & 5X,'ELASTIC PARAMETERS: ',/,
231 & 5X,'------------------- ',/,
232 & 5X,'YOUNG MODULUS. . . . . . . . . . . . . . . . . . . . .=',1PG20.13/,
233 & 5X,"poisson'S RATIO. . . . . . . . . . . . . . . . . . . .=",1PG20.13/)
234 1300 FORMAT(/
235 & 5X,'plastic parameters: ',/,
236 & 5X,'------------------- ',/,
237 & 5X,'yield stress vs pl. strain(vs strain rate) table
id .=
',I10/,
238 & 5X,'interpolation flag:. . . . . . . . . . . . . . . . . .=',I10/,
239 & 5X,' = 1: linear interpolation',/,
240 & 5X,' = 2: logarithmic interpolation base 10 ',/,
241 & 5X,' = 3: logarithmic interpolation base n ',/,
242 & 5X,'strain rate scale factor . . . . . . . . . . . . . . .=',1PG20.13/
243 & 5X,'yield stress scale factor. . . . . . . . . . . . . . .=',1PG20.13/)
244 1400 FORMAT(/
245 & 5X,'thermal parameters: ',/,
246 & 5X,'------------------- ',/,
247 & 5X,'yield stress temperature dependency table
id . . . . .=
',I10/
248 & 5X,'reference temperature. . . . . . . . . . . . . . . . .=',1PG20.13/
249 & 5X,'heat fraction table
id . . . . . . . . . . . . . . . .=
',I10/
250 & 5X,'specific heat coefficient. . . . . . . . . . . . . . .=',1PG20.13/
251 & 5X,'initial temperature. . . . . . . . . . . . . . . . . .=',1PG20.13/
252 & 5X,'taylor-quinney coefficient . . . . . . . . . . . . . .=',1PG20.13/
253 & 5X,'strain rate scale factor
for heat fraction . . . . . .=
',1PG20.13/)
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)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle