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
186
188
192
193 nuparam = 21
194 nuvar = 1
195 ntabl = 3
196
197 itable(1) = tab_yld
198 itable(2) = tab_temp
199 itable(3) = tab_eta
200 IF (tab_temp > 0 .or. 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 (DEFAULT) ',/,
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