forked from denavit/OpenSees-Tcl-Scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
concreteMaterials.tcl
267 lines (249 loc) · 8.54 KB
/
concreteMaterials.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
proc OpenSeesComposite::changManderConcreteMaterial { matTag fc units args} {
# ###################################################################
# changManderConcreteMaterial $matTag $fc $units <options>
# ###################################################################
# create a unaxialMaterial object using the changMadnderConcrete01 model
#
# Required Input Parameters:
# $matTag - integer tag for uniaxialMaterial
# $fc - compressive strength of the concrete core (cylinder strength)
# $units - unit system
# US = United States customary units (i.e., kips, inches, ksi)
# SI = International System of Units (i.e., N, mm, MPa)
#
# Optional Input:
# -biaxial $fl - model a biaxial state of stress
# -symmetric $fl - model a symmetric triaxial state of stress
# -triaxial $fl1 $fl2 - model a general triaxial state of stress
# -cover - set confinement to zero and model spalling
# -spall $xcr - model spalling
# -tension - set the type of tension to use
# -Ec - set the type of Ec to use
# -ec - set the type of ec to use
# -r - set the type of r to use
#
# ########### Set Constants and Default Values ###########
set extraArgs [list]
set fl1 0.0
set fl2 0.0
set tension_type ChangMander
set rn_pre_type ChangMander
set rn_post_type ChangMander
set Ec_type design
set ec_type ChangMander
# ########### Read Optional Input ###########
for { set i 0 } { $i < [llength $args] } { incr i } {
set param [lindex $args $i]
if { $param == "-biaxial" } {
set fl1 [lindex $args [expr $i+1]]
set fl2 0.0
incr i 1
continue
}
if { $param == "-symmetric" } {
set fl1 [lindex $args [expr $i+1]]
set fl2 $fl1
incr i 1
continue
}
if { $param == "-triaxial" } {
set fl1 [lindex $args [expr $i+1]]
set fl2 [lindex $args [expr $i+2]]
incr i 2
continue
}
if { $param == "-cover" } {
set fl1 0.0
set fl2 0.0
lappend extraArgs "-spall" 2.0
continue
}
if { $param == "-spall" } {
set xcr [lindex $args [expr $i+1]]
incr i 1
lappend extraArgs "-spall" $xcr
continue
}
if { $param == "-tension" } {
set tension_type [lindex $args [expr $i+1]]
incr i 1
continue
}
if { $param == "-Ec" } {
set Ec_type [lindex $args [expr $i+1]]
incr i 1
continue
}
if { $param == "-ec" } {
set ec_type [lindex $args [expr $i+1]]
incr i 1
continue
}
if { $param == "-rn_pre" } {
set rn_pre_type [lindex $args [expr $i+1]]
incr i 1
continue
}
if { $param == "-rn_post" } {
set rn_post_type [lindex $args [expr $i+1]]
incr i 1
continue
}
if { $param == "-r" } {
set rn_pre_type [lindex $args [expr $i+1]]
set rn_post_type $rn_pre_type
incr i 1
continue
}
error "Error - changManderConcreteMaterial: unknown optional parameter: $param"
}
# ############### Check Input Data ###############
set fc [expr double($fc)]
if { $fc <= 0.0 } {
puts "Warning - changManderConcreteMaterial: fc should be input as a positive value"
set fc [expr -1*$fc]
}
set fl1 [expr double($fl1)]
set fl2 [expr double($fl2)]
if { $fl1 < 0.0 || $fl2 < 0.0 } {
error "Error - changManderConcreteMaterial: confinement pressure should be input as a positive value"
}
# Make sure fl2 is the greater value
if { $fl2 < $fl1 } {
set temp $fl1
set $fl1 $fl2
set $fl2 $fl1
}
# ############### Intial Stiffness ###############
switch -exact -- $Ec_type {
ChangMander {
switch -exact -- $units {
US { set Ec [expr (8200.0*pow($fc*6.89476,0.375))/6.89476] }
SI { set Ec [expr 8200.0*pow($fc,0.375)] }
default { error "ERROR: units not recgonized" }
}
}
design {
switch -exact -- $units {
US { set Ec [expr 1802.5*sqrt($fc)] }
SI { set Ec [expr 4733.0*sqrt($fc)] }
default { error "ERROR: units not recgonized" }
}
}
default {
error "ERROR: Ec_type not recgonized -- $Ec_type"
}
}
# ############### Strain at Peak Stress ###############
switch -exact -- $ec_type {
ChangMander {
switch -exact -- $units {
US { set ec [expr pow($fc*6.89476,0.25)/1150.0] }
SI { set ec [expr pow($fc,0.25)/1150.0] }
default { error "ERROR: units not recgonized" }
}
}
default {
error "ERROR: ec_type not recgonized -- $ec_type"
}
}
# ############### Confinement Model ###############
if { $fl2 == 0.0 } {
set fcc $fc
} elseif { $fl2 == $fl1 } {
set fl $fl1
set fcc [expr $fc*(-1.254 + 2.254*sqrt(1 + 7.94*$fl/$fc) - 2*$fl/$fc)]
} else {
set xbar [expr ($fl1+$fl2)/(2.0*$fc)]
set r [expr ($fl1/$fl2)]
set A [expr 6.8886-(0.6069+17.275*$r)*exp(-4.989*$r)]
set B [expr 4.5/((5/$A)*(0.9849-0.6306*exp(-3.8939*$r))-0.1)-5]
set K [expr 1+$A*$xbar*(0.1+0.9/(1+$B*$xbar))]
set fcc [expr $K*$fc]
}
set ecc [expr $ec*(1 + 5*($fcc/$fc - 1))]
# ############### Tension Properties ###############
switch -exact -- $tension_type {
ChangMander {
switch -exact -- $units {
US { set ft [expr (0.5*sqrt($fc*6.89476))/6.89476] }
SI { set ft [expr 0.5*sqrt($fc)] }
default { error "ERROR: units not recgonized" }
}
set et [expr 1.23*$ft/$Ec]
set rp 4.0
set xp_cr 4.0
}
Popovics {
switch -exact -- $units {
US { set ft [expr (0.5*sqrt($fc*6.89476))/6.89476] }
SI { set ft [expr 0.5*sqrt($fc)] }
default { error "ERROR: units not recgonized" }
}
set et [expr 1.23*$ft/$Ec]
set n [expr $Ec*$et/$ft]
set rp [expr $n/($n-1)]
set xp_cr 2.0
}
none {
set ft 0.0
set et 0.0
set rp 4.0
set xp_cr 4.0
}
default {
error "ERROR: tension_type not recgonized -- $tension_type"
}
}
# ############### "rn_pre" factor ###############
switch -exact -- $rn_pre_type {
Popovics {
set n [expr $Ec*$ecc/$fcc]
set rn_pre [expr $n/($n-1)]
}
ChangMander {
switch -exact -- $units {
US { set rn_pre [expr $fc*6.89476/5.2 - 1.9] }
SI { set rn_pre [expr $fc/5.2 - 1.9] }
default { error "ERROR: units not recgonized" }
}
if { $rn_pre <= 0 } {
set n [expr $Ec*$ecc/$fcc]
set rn_pre [expr $n/($n-1)]
}
}
default {
if { [string is double -strict $rn_pre_type ] } {
set rn_pre $rn_pre_type
} else {
error "ERROR: rn_pre_type not recgonized -- $rn_pre_type"
}
}
}
# ############### "rn_post" factor ###############
switch -exact -- $rn_post_type {
Popovics {
set n [expr $Ec*$ecc/$fcc]
set rn_post [expr $n/($n-1)]
}
ChangMander {
switch -exact -- $units {
US { set rn_post [expr $fc*6.89476/5.2 - 1.9] }
SI { set rn_post [expr $fc/5.2 - 1.9] }
default { error "ERROR: units not recgonized" }
}
}
default {
if { [string is double -strict $rn_post_type ] } {
set rn_post $rn_post_type
} else {
error "ERROR: rn_post_type not recgonized -- $rn_post_type"
}
}
}
# ############### Define Material ###############
eval uniaxialMaterial changManderConcrete01 $matTag -$fcc -$ecc $Ec \
$rn_pre $rn_post $ft $et $rp $xp_cr $extraArgs
# uniaxialMaterial Concrete04 $matTag -$fcc -$ecc -1.0 $Ec
# uniaxialMaterial Concrete01 $matTag -$fcc -$ecc [expr -0.85*$fcc] [expr -5*$ecc]
}