2Module for the material models.
7import matplotlib.pyplot
as plt
11from abc
import abstractmethod
12from copy
import copy, deepcopy
21 Parent abstract class for the storage and manipulation of a material model
's information (mechanical
22 and geometrical parameters, etc)
and initialisation
in the model.
24 @param DataManagement: Parent abstract
class.
29 Abstract function used to check the applicability of the material model.
36 Class that stores funcions and material properties of a steel double symmetric I-shape profile
37 with modified Ibarra-Medina-Krawinkler
as the material model
for the nonlinear springs
and the OpenSeesPy command type used to model it
is Bilin.
38 The default values are valid
for a simple cantelever.
39 For more information about the empirical model
for the computation of the parameters, see Lignos Krawinkler 2011.
40 The parameter
'n' is used
as global throughout the SteelIShape sections to optimise the program (given the fact that
is constant everytime).
42 @param MaterialModels: Parent abstract
class.
47 def __init__(self, ID: int, Type: str, d, bf, tf, tw, h_1, Iy_mod, iz, E, Fy, Npl, My, L,
48 N_G = 0, K_factor = 3, L_0 = -1, L_b = -1, Mc = -1, K = -1, theta_u = -1, safety_factors =
False):
50 Constructor of the class. Every argument that
is optional
and is initialised
as -1, will be computed
in this
class.
52 @param ID (int): ID of the material model.
53 @param Type (str): Type of the section. It can be
'Col' for column
or 'Beam' for beams.
54 @param d (float): Depth of the section.
55 @param bf (float): Flange
's width of the section
56 @param tf (float): Flange
's thickness of the section
57 @param tw (float): Web
's thickness of the section
58 @param h_1 (float): Depth excluding the flange
's thicknesses and the weld fillets.
59 @param Iy_mod (float): n modified moment of inertia (strong axis)
60 @param iz (float): Radius of gyration (weak axis).
61 @param E (float): Young modulus.
62 @param Fy (float): Yield strength.
63 @param Npl (float): Maximal vertical axial load.
64 @param My (float): Yielding moment.
65 @param L (float): Effective length of the element associated
with this section.
66 If the panel zone
is present, exclude its dimension.
67 @param N_G (float, optional): Gravity axial load. Defaults to 0.
68 @param K_factor (float, optional): Rigidity factor. Defaults to 3 (assuming cantilever).
69 @param L_0 (float, optional): Position of the inflection point.
70 Defaults to -1, e.g. computed
as the total length, assuming cantilever.
71 @param L_b (float, optional): Maximal unbraced lateral torsional buckling length.
72 Defaults to -1, e.g. computed
as the total length, assuming cantilever
with no bracing support.
73 @param Mc (float, optional): Capping moment. Defaults to -1, e.g. computed
in ComputeMc.
74 @param K (float, optional): Residual strength ratio. Defaults to -1, e.g. computed
in ComputeK.
75 @param theta_u (float, optional): Ultimate rotation. Defaults to -1, e.g. computed
in ComputeTheta_u.
76 @param safety_factors (bool, optional): Safety factors used
if standard mechanical parameters are used (
not test results). Defaults to
False.
78 @exception NegativeValue: ID needs to be a positive integer.
79 @exception WrongArgument: Type needs to be
'Col' or 'Beam'.
80 @exception NegativeValue: d needs to be positive.
81 @exception NegativeValue: bf needs to be positive.
82 @exception NegativeValue: tf needs to be positive.
83 @exception NegativeValue: tw needs to be positive.
84 @exception NegativeValue: h_1 needs to be positive.
85 @exception NegativeValue: Iy_mod needs to be positive.
86 @exception NegativeValue: iz needs to be positive.
87 @exception NegativeValue: E needs to be positive.
88 @exception NegativeValue: Fy needs to be positive.
89 @exception NegativeValue: Npl needs to be positive.
90 @exception NegativeValue: My needs to be positive.
91 @exception NegativeValue: L needs to be positive.
92 @exception NegativeValue: N_G needs to be positive.
93 @exception NegativeValue: L_0 needs to be positive
if different
from -1.
94 @exception NegativeValue: L_b needs to be positive
if different
from -1.
95 @exception NegativeValue: Mc needs to be positive
if different
from -1.
96 @exception NegativeValue: K needs to be positive
if different
from -1.
97 @exception NegativeValue: theta_u needs to be positive
if different
from -1.
98 @exception InconsistentGeometry: h_1 can
't be bigger than d
99 @exception MemberFailure: N_G can
't be bigger than Npl (section failure).
100 @exception InconsistentGeometry: L_0 can
't be bigger than L
103 if ID < 0:
raise NegativeValue()
104 if Type !=
"Beam" and Type !=
"Col":
raise WrongArgument()
105 if d < 0:
raise NegativeValue()
106 if bf < 0:
raise NegativeValue()
107 if tf < 0:
raise NegativeValue()
108 if tw < 0:
raise NegativeValue()
109 if h_1 < 0:
raise NegativeValue()
110 if Iy_mod < 0:
raise NegativeValue()
111 if iz < 0:
raise NegativeValue()
112 if E < 0:
raise NegativeValue()
113 if Fy < 0:
raise NegativeValue()
114 if Npl < 0:
raise NegativeValue()
115 if My < 0:
raise NegativeValue()
116 if L < 0:
raise NegativeValue()
117 if N_G < 0:
raise NegativeValue()
118 if L_0 != -1
and L_0 < 0:
raise NegativeValue()
119 if L_b != -1
and L_b < 0:
raise NegativeValue()
120 if Mc != -1
and Mc < 0:
raise NegativeValue()
121 if K != -1
and K < 0:
raise NegativeValue()
122 if theta_u != -1
and theta_u < 0:
raise NegativeValue()
123 if h_1 > d:
raise InconsistentGeometry()
124 if N_G > Npl:
raise MemberFailure()
125 if L_0 > L:
raise InconsistentGeometry()
144 self.
L_0L_0 = L
if L_0 == -1
else L_0
145 self.
L_bL_b = L
if L_b == -1
else L_b
156 self.
ReInitReInit(Mc, K, theta_u)
160 def ReInit(self, Mc = -1, K = -1, theta_u = -1):
162 Implementation of the homonym abstract method.
165 @param Mc (float, optional): Capping moment. Defaults to -1, e.g. computed
in ComputeMc.
166 @param K (float, optional): Residual strength ratio. Defaults to -1, e.g. computed
in ComputeK.
167 @param theta_u (float, optional): Ultimate rotation. Defaults to -1, e.g. computed
in ComputeTheta_u.
197 Implementation of the homonym abstract method.
200 self.datadata = [["INFO_TYPE",
"ModifiedIMK"],
203 [
"Type", self.
TypeType],
208 [
"h_1", self.
h_1h_1],
209 [
"Iy_mod", self.
Iy_modIy_mod],
214 [
"N_G", self.
N_GN_G],
215 [
"K_factor", self.
K_factorK_factor],
217 [
"L_0", self.
L_0L_0],
218 [
"L_b", self.
L_bL_b],
219 [
"gamma_rm", self.
gamma_rmgamma_rm],
221 [
"Npl", self.
NplNpl],
223 [
"My_star", self.
My_starMy_star],
225 [
"McMy", self.
McMyMcMy],
227 [
"theta_y", self.
theta_ytheta_y],
228 [
"theta_p", self.
theta_ptheta_p],
229 [
"theta_pc", self.
theta_pctheta_pc],
230 [
"theta_u", self.
theta_utheta_u],
231 [
"rate_det", self.
rate_detrate_det],
233 [
"a_s", self.
a_sa_s],
239 Implementation of the homonym abstract method.
242 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
243 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
246 theta_p_plot = self.theta_ptheta_p
249 theta_r = self.
theta_ytheta_y + theta_p_plot + self.
theta_pctheta_pc*(1.0-Mr/self.
McMc)
250 if theta_r > self.
theta_utheta_u:
255 print(
"Requested info for Modified IMK (Ibarra-Medina-Krawinkler) material model Parameters, ID = {}".format(self.
IDID))
256 print(
"Section associated: {}".format(self.
section_name_tagsection_name_tag))
257 print(
'theta y = {}'.format(self.
theta_ytheta_y))
258 print(
'theta p = {}'.format(self.
theta_ptheta_p))
259 print(
'theta r = {}'.format(theta_r))
260 print(
'theta pc = {}'.format(self.
theta_pctheta_pc))
261 print(
'theta u = {}'.format(self.
theta_utheta_u))
262 print(
'My star = {} kNm'.format(self.
My_starMy_star/kNm_unit))
263 print(
'Mc = {} kNm'.format(self.
McMc/kNm_unit))
264 print(
'Mr = {} kNm'.format(Mr/kNm_unit))
265 print(
'a = {} '.format(self.
aa))
266 print(
'as = {} '.format(self.
a_sa_s))
267 print(
'lambda (deterioration rate) = {} '.format(self.
rate_detrate_det))
273 x_axis2 = np.array([self.
theta_ytheta_y + theta_p_plot, self.
theta_ytheta_y + theta_p_plot + self.
theta_pctheta_pc])
274 y_axis = np.array([0.0, self.
My_starMy_star, self.
McMc, Mr, Mr, 0.0])/kNm_unit
275 y_axis2 = np.array([self.
McMc, 0.0])/kNm_unit
277 fig, ax = plt.subplots()
278 ax.plot(x_axis, y_axis,
'k-')
279 ax.plot(x_axis2, y_axis2,
'k--')
281 ax.set(xlabel=
'Rotation [rad]', ylabel=
'Moment [kNm]',
282 title=
'Modified IMK deterioration model (ID={})'.format(self.
IDID))
291 Implementation of the homonym abstract method.
295 if self.
TypeType ==
"Beam":
296 if self.
dd/self.
twtw < 20
or self.
dd/self.
twtw > 55:
298 print(
"The d/tw check was not fullfilled")
299 if self.
L_bL_b/self.
iziz < 20
or self.
L_bL_b/self.
iziz > 80:
301 print(
"The Lb/iz check was not fullfilled")
302 if self.
bfbf/2/self.
tftf < 4
or self.
bfbf/2/self.
tftf > 8:
304 print(
"The bf/2/tf check was not fullfilled")
305 if self.
LL/self.
dd < 2.5
or self.
LL/self.
dd > 7:
307 print(
"The check L/d was not fullfilled")
308 if self.
dd < 102*mm_unit
or self.
dd > 914*mm_unit:
310 print(
"The d check was not fullfilled")
311 if self.
FyFy < 240*MPa_unit
or self.
FyFy > 450*MPa_unit:
313 print(
"The Fy check was not fullfilled")
315 if self.
h_1h_1/self.
twtw < 3.71
or self.
dd/self.
twtw > 57.5:
317 print(
"The h1/tw check was not fullfilled")
318 if self.
L_bL_b/self.
iziz < 38.4
or self.
L_bL_b/self.
iziz > 120:
320 print(
"The Lb/iz check was not fullfilled")
321 if self.
N_GN_G/self.
NplNpl < 0
or self.
N_GN_G/self.
NplNpl > 0.75:
323 print(
"The NG/Npl check was not fullfilled")
325 print(
"The validity of the equations is not fullfilled.")
326 print(
"!!!!!!! WARNING !!!!!!! Check material model of Modified IMK, ID=", self.
IDID)
331 Method that computes the elastic stiffness.
333 @returns float: The stiffness
339 Method that computes the strain hardening ratio with the n modification.
341 @returns float: Strain hardening ratio.
348 Method that computes the modified strain hardening ratio for the spring.
349 For more info see Ibarra & Krawinkler 2005.
351 @returns float: Strain hardening ratio.
353 return self.
aa/(1.0+n*(1.0-self.
aa))
357 Method that computes the effective yield moment.
358 For more info see Lignos & Krawinkler 2011
and Lignos et Al. 2019.
360 @returns float: Effective
yield moment.
362 if self.
TypeType ==
"Beam":
365 if self.
N_GN_G/self.
NplNpl > 0.2:
372 Method that computes the capping moment.
373 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
375 @returns float: Capping moment.
377 if self.
TypeType ==
"Beam":
378 return self.
My_starMy_star*1.11
381 tmp = 12.5*(self.
h_1h_1/self.
twtw)**(-0.2)*(self.
L_bL_b/self.
iziz)**(-0.4)*(1-self.
N_GN_G/self.
NplNpl)**0.4
382 return max(min(1.3, tmp), 1.0)*self.
My_starMy_star
386 Method that computes the residual strength ratio.
387 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
389 @returns float: Residual strength ratio.
391 if self.
TypeType ==
"Beam":
394 tmp = 0.5-0.4*self.
N_GN_G/self.
NplNpl
399 Method that computes the yield rotation.
400 For more info see Lignos & Krawinkler 2011
and Lignos et Al. 2019.
402 @returns float: Yield rotation.
404 return self.
My_starMy_star/self.
KeKe*(n+1)
408 Method that computes the plastic rotation.
409 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
411 @returns float: Plastic rotation.
413 if self.
TypeType ==
"Beam":
414 if self.
dd < 533.0*mm_unit:
415 return 0.0865*(self.
h_1h_1/self.
twtw)**(-0.365)*(self.
bfbf/2.0/self.
tftf)**(-0.14)*(self.
L_0L_0/self.
dd)**(0.34)*(self.
dd/(533.0*mm_unit))**(-0.721)*(self.
FyFy/(355.0*MPa_unit))**(-0.23)
417 return 0.318*(self.
h_1h_1/self.
twtw)**(-0.550)*(self.
bfbf/2.0/self.
tftf)**(-0.345)*(self.
L_0L_0/self.
dd)**(0.090)*(self.
L_bL_b/self.
iziz)**(-0.023)*(self.
dd/(533.0*mm_unit))**(-0.330)*(self.
FyFy/(355.0*MPa_unit))**(-0.130)
420 tmp = 294.0*(self.
h_1h_1/self.
twtw)**(-1.7)*(self.
L_bL_b/self.
iziz)**(-0.7)*(1.0-self.
N_GN_G/self.
NplNpl)**(1.6)
429 Method that computes the post capping rotation.
430 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
432 @returns float: Post capping rotation.
434 if self.
TypeType ==
"Beam":
435 if self.
dd < 533.0*mm_unit:
436 return 5.63*(self.
h_1h_1/self.
twtw)**(-0.565)*(self.
bfbf/2.0/self.
tftf)**(-0.800)*(self.
dd/(533.0*mm_unit))**(-0.280)*(self.
FyFy/(355.0*MPa_unit))**(-0.430)
438 return 7.50*(self.
h_1h_1/self.
twtw)**(-0.610)*(self.
bfbf/2.0/self.
tftf)**(-0.710)*(self.
L_bL_b/self.
iziz)**(-0.110)*(self.
dd/(533.0*mm_unit))**(-0.161)*(self.
FyFy/(355.0*MPa_unit))**(-0.320)
441 tmp = 90.0*(self.
h_1h_1/self.
twtw)**(-0.8)*(self.
L_bL_b/self.
iziz)**(-0.8)*(1.0-self.
N_GN_G/self.
NplNpl)**(2.5)
446 Method that computes the ultimate rotation.
447 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
449 @returns float: Ultimate rotation.
451 if self.
TypeType ==
"Beam":
458 Method that computes the reference energy dissipation capacity.
459 For more info see Lignos & Krawinkler 2011 and Lignos et Al. 2019.
461 @returns float: Reference energy dissipation capacity.
463 if self.
TypeType ==
"Beam":
464 if self.
dd < 533.0*mm_unit:
465 return 495.0*(self.
h_1h_1/self.
twtw)**(-1.34)*(self.
bfbf/2.0/self.
tftf)**(-0.595)*(self.
FyFy/(355.0*MPa_unit))**(-0.360)
467 return 536.0*(self.
h_1h_1/self.
twtw)**(-1.26)*(self.
bfbf/2.0/self.
tftf)**(-0.525)*(self.
L_bL_b/self.
iziz)**(-0.130)*(self.
FyFy/(355.0*MPa_unit))**(-0.291)
470 if self.
N_GN_G/self.
NplNpl > 0.35:
471 tmp = 268000.0*(self.
h_1h_1/self.
twtw)**(-2.30)*(self.
L_bL_b/self.
iziz)**(-1.130)*(1.0-self.
N_GN_G/self.
NplNpl)**(1.19)
474 tmp = 25000.0*(self.
h_1h_1/self.
twtw)**(-2.14)*(self.
L_bL_b/self.
iziz)**(-0.53)*(1.0-self.
N_GN_G/self.
NplNpl)**(4.92)
480 Generate the material model Bilin (Modified IMK) using the computed parameters.
481 See _Bilin function for more information.
490 Class that is the children of ModifiedIMK
and combine the
class SteelIShape (
section) to retrieve the information needed.
492 @param ModifiedIMK: Parent
class.
494 def __init__(self, ID, section: SteelIShape, N_G = 0, K_factor = 3, L_0 = -1, L_b = -1, Mc = -1, K = -1, theta_u = -1, safety_factors =
False):
496 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
497 and the section
class SteelIShape.
498 Every argument that
is optional
and is initialised
as -1, will be computed
in this
class.
499 The copy of the section passed
is stored
in the member variable self.
sectionsection.
501 @param ID (int): ID of the material model.
502 @param section (SteelIShape): Object that store informations
for a steel I shpae section.
503 @param N_G (float, optional): Gravity axial load. Defaults to 0.
504 @param K_factor (float, optional): Rigidity factor. Defaults to 3 (assuming cantilever).
505 @param L_0 (float, optional): Position of the inflection point.
506 Defaults to -1, e.g. computed
as the total length, assuming cantilever.
507 @param L_b (float, optional):Maximal unbraced lateral torsional buckling length.
508 Defaults to -1, e.g computed
as the total length, assuming cantilever
with no bracing support.
509 @param Mc (float, optional): Capping moment. Defaults to -1, e.g. computed
in ComputeMc.
510 @param K (float, optional): Residual strength ratio. Defaults to -1, e.g. computed
in ComputeK.
511 @param theta_u (float, optional): Ultimate rotation. Defaults to -1, e.g. computed
in ComputeTheta_u.
512 @param safety_factors (bool, optional): Safety factors used
if standard mechanical parameters are used (
not test results). Defaults to
False.
515 super().__init__(ID, section.Type, section.d, section.bf, section.tf, section.tw, section.h_1,
516 section.Iy_mod, section.iz, section.E, section.Fy, section.Npl, section.My, section.L, N_G,
517 K_factor, L_0, L_b, Mc, K, theta_u, safety_factors)
524 Class that stores funcions and material properties of a steel double symmetric I-shape profile
525 with Gupta 1999
as the material model
for the panel zone
and the OpenSeesPy command type used to model it
is Hysteresis.
526 The material model
is valid only
if the column
is continuous.
527 For more information about the empirical model
for the computation of the parameters, see Gupta 1999.
529 @param MaterialModels: Parent abstract
class.
531 def __init__(self, ID: int, d_c, bf_c, tf_c, I_c, d_b, tf_b, Fy, E, t_p,
532 t_dp = 0.0, a_s = 0.03, pinchx = 0.25, pinchy = 0.75, dmg1 = 0.0, dmg2 = 0.0, beta = 0.0, safety_factor =
False):
534 Constructor of the class.
536 @param ID (int): Unique material model ID.
537 @param d_c (float): Column depth.
538 @param bf_c (float): Column flange width.
539 @param tf_c (float): Column flange thickness.
540 @param I_c (float): Column moment of inertia (strong axis).
541 @param d_b (float): Beam depth.
542 @param tf_b (float): Beam flange thickness.
543 @param Fy (float): Yield strength (
if assume continous column, Fy of the web).
544 @param E (float): Young modulus.
545 @param t_p (float): Panel zone thickness.
546 @param t_dp (float, optional): Doubler plate thickness. Defaults to 0.0.
547 @param a_s (float, optional): Strain hardening. Defaults to 0.03.
548 @param pinchx (float, optional): Pinching factor
for strain (
or deformation) during reloading. Defaults to 0.25.
549 @param pinchy (float, optional): Pinching factor
for stress (
or force) during reloading. Defaults to 0.75.
550 @param dmg1 (float, optional): Damage due to ductility: D1(mu-1). Defaults to 0.0.
551 @param dmg2 (float, optional): Damage due to energy: D2(Eii/Eult). Defaults to 0.0.
552 @param beta (float, optional): Power used to determine the degraded unloading stiffness based on ductility, mu-beta. Defaults to 0.0.
553 @param safety_factor (bool, optional): Safety factor used
if standard mechanical parameters are used (
not test results). Defaults to
False.
555 @exception NegativeValue: ID needs to be a positive integer.
556 @exception NegativeValue: d_c needs to be positive.
557 @exception NegativeValue: bf_c needs to be positive.
558 @exception NegativeValue: tf_c needs to be positive.
559 @exception NegativeValue: d_b needs to be positive.
560 @exception NegativeValue: tf_b needs to be positive.
561 @exception NegativeValue: Fy needs to be positive.
562 @exception NegativeValue: E needs to be positive.
563 @exception NegativeValue: t_p needs to be positive.
564 @exception NegativeValue: a_s needs to be positive.
567 if ID < 1:
raise NegativeValue()
568 if d_c < 0:
raise NegativeValue()
569 if bf_c < 0:
raise NegativeValue()
570 if tf_c < 0:
raise NegativeValue()
571 if d_b < 0:
raise NegativeValue()
572 if tf_b < 0:
raise NegativeValue()
573 if Fy < 0:
raise NegativeValue()
574 if E < 0:
raise NegativeValue()
575 if t_p < 0:
raise NegativeValue()
576 if a_s < 0:
raise NegativeValue()
611 Implementation of the homonym abstract method.
624 self.
GG = self.
EE/(2.0 * (1.0 + 0.30))
645 Implementation of the homonym abstract method.
648 self.datadata = [["INFO_TYPE",
"Gupta1999"],
652 [
"d_c", self.
d_cd_c],
653 [
"bf_c", self.
bf_cbf_c],
654 [
"tf_c", self.
tf_ctf_c],
655 [
"I_c", self.
I_cI_c],
656 [
"d_b", self.
d_bd_b],
657 [
"tf_b", self.
tf_btf_b],
661 [
"t_p", self.
t_pt_p],
662 [
"t_dp", self.
t_dpt_dp],
663 [
"t_pz", self.
t_pzt_pz],
664 [
"a_s", self.
a_sa_s],
665 [
"pinchx", self.
pinchxpinchx],
666 [
"pinchy", self.
pinchypinchy],
667 [
"dmg1", self.
dmg1dmg1],
668 [
"dmg2", self.
dmg2dmg2],
669 [
"beta", self.
betabeta],
674 [
"gamma1_y", self.
gamma1_ygamma1_y],
675 [
"M1y", self.
M1yM1y],
676 [
"gamma2_y", self.
gamma2_ygamma2_y],
677 [
"M2y", self.
M2yM2y],
678 [
"gamma3_y", self.
gamma3_ygamma3_y],
679 [
"M3y", self.
M3yM3y],
684 Implementation of the homonym abstract method.
687 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
688 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
691 print(
"Requested info for Gupta 1999 material model Parameters, ID = {}".format(self.
IDID))
694 print(
"gamma1_y = {} rad".format(self.
gamma1_ygamma1_y))
695 print(
"gamma2_y = {} rad".format(self.
gamma2_ygamma2_y))
696 print(
"gamma3_y = {} rad".format(self.
gamma3_ygamma3_y))
697 print(
"M1y = {} kNm".format(self.
M1yM1y/kNm_unit))
698 print(
"M2y = {} kNm".format(self.
M2yM2y/kNm_unit))
699 print(
"M3y = {} kNm".format(self.
M3yM3y/kNm_unit))
705 gamma3_y_plot = 10.0 * self.
gamma1_ygamma1_y
706 M3y_plot = self.
M2yM2y + (self.
a_sa_s * self.
KeKe * self.
d_bd_b) * (gamma3_y_plot - self.
gamma2_ygamma2_y)
708 x_axis = np.array([0.0, self.
gamma1_ygamma1_y, self.
gamma2_ygamma2_y, gamma3_y_plot])
709 y_axis = np.array([0.0, self.
M1yM1y, self.
M2yM2y, M3y_plot])/kNm_unit
711 fig, ax = plt.subplots()
712 ax.plot(x_axis, y_axis,
'k-')
714 ax.set(xlabel=
'Rotation [rad]', ylabel=
'Moment [kNm]',
715 title=
'Gupta 1999 material model (ID={})'.format(self.
IDID))
724 Implementation of the homonym abstract method.
730 print(
"The validity of the equations is not fullfilled.")
731 print(
"!!!!!!! WARNING !!!!!!! Check material model of Gupta 1999, ID=", self.
IDID)
737 Generate the material model Hysteretic (Gupta 1999) using the computed parameters.
738 See _Hysteretic function for more information.
748 Class that is the children of Gupta1999
and combine the
class SteelIShape (section) to retrieve the information needed.
750 @param Gupta1999: Parent
class.
752 def __init__(self, ID: int, col: SteelIShape, beam: SteelIShape,
753 t_dp = 0.0, a_s = 0.03, pinchx = 0.25, pinchy = 0.75, dmg1 = 0.0, dmg2 = 0.0, beta = 0.0, safety_factor =
False):
755 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
756 and the section
class SteelIShape.
757 The copy of the sections (col
and beam) passed
is stored
in the member variable self.section.
759 @param ID (int): Unique material model ID.
760 @param col (SteelIShape): SteelIShape column section object.
761 @param beam (SteelIShape): SteelIShape beam section object.
762 @param t_dp (float, optional): Doubler plate thickness. Defaults to 0.0.
763 @param a_s (float, optional): Strain hardening. Defaults to 0.03.
764 @param pinchx (float, optional): Pinching factor
for strain (
or deformation) during reloading. Defaults to 0.25.
765 @param pinchy (float, optional): Pinching factor
for stress (
or force) during reloading. Defaults to 0.75
766 @param dmg1 (float, optional): Damage due to ductility: D1(mu-1). Defaults to 0.0.
767 @param dmg2 (float, optional): Damage due to energy: D2(Eii/Eult). Defaults to 0.0.
768 @param beta (float, optional): Power used to determine the degraded unloading stiffness based on ductility, mu-beta. Defaults to 0.0.
769 @param safety_factor (bool, optional): Safety factor used
if standard mechanical parameters are used (
not test results). Defaults to
False.
771 self.colcol = deepcopy(col)
773 super().__init__(ID, col.d, col.bf, col.tf, col.Iy, beam.d, beam.tf, col.Fy_web, col.E, col.tw,
774 t_dp, a_s, pinchx, pinchy, dmg1, dmg2, beta, safety_factor)
782 Class that stores funcions and material properties of a steel double symmetric I-shape profile
783 with Skiadopoulos 2021
as the material model
for the panel zone
and the OpenSeesPy command type used to model it
is Hysteresis.
784 The material model
is valid only
if the column
is continuous.
785 For more information about the empirical model
for the computation of the parameters, see Skiadopoulos et Al. 2021.
786 The vectors that forms the matrix used to compute the material model parameters (Kf_Ke_tests, Cw1_tests, Cf1_tests,
787 Cw4_tests, Cf4_tests, Cw6_tests, Cf6_tests) are used
as global throughout the
class to optimise the program (given the fact that is constant everytime).
789 @param MaterialModels: Parent abstract
class.
791 global Kf_Ke_tests, Cw1_tests, Cf1_tests, Cw4_tests, Cf4_tests, Cw6_tests, Cf6_tests
793 Kf_Ke_tests = [1.000, 0.153, 0.120, 0.090, 0.059, 0.031, 0.019, 0.009, 0.005, 0.004, 0.000]
794 Kf_Ke_tests.reverse()
795 Cw1_tests = [0.96, 0.96, 0.955, 0.94, 0.93, 0.90, 0.89, 0.89, 0.88, 0.88, 0.88]
797 Cf1_tests = [0.035, 0.035, 0.033, 0.031, 0.018, 0.015, 0.013, 0.009, 0.009, 0.010, 0.010]
799 Cw4_tests = [1.145, 1.145, 1.140, 1.133, 1.120, 1.115, 1.115, 1.11, 1.10, 1.10, 1.10]
801 Cf4_tests = [0.145, 0.145, 0.123, 0.111, 0.069, 0.040, 0.040, 0.018, 0.010, 0.012, 0.012]
803 Cw6_tests = [1.205, 1.2050, 1.2000, 1.1925, 1.1740, 1.1730, 1.1720, 1.1690, 1.1670, 1.1650, 1.1650]
805 Cf6_tests = [0.165, 0.1650, 0.1400, 0.1275, 0.0800, 0.0500, 0.0500, 0.0180, 0.0140, 0.0120, 0.0120]
808 def __init__(self, ID: int, d_c, bf_c, tf_c, I_c, d_b, tf_b, Fy, E, t_p,
809 t_dp = 0.0, a_s = 0.03, pinchx = 0.25, pinchy = 0.75, dmg1 = 0.0, dmg2 = 0.0, beta = 0.0, safety_factor =
False, t_fbp = 0):
811 Constructor of the class.
813 @param ID (int): Unique material model ID.
814 @param d_c (float): Column depth.
815 @param bf_c (float): Column flange width.
816 @param tf_c (float): Column flange thickness.
817 @param I_c (float): Column moment of inertia (strong axis).
818 @param d_b (float): Beam depth.
819 @param tf_b (float): Beam flange thickness.
820 @param Fy (float): Yield strength (
if assume continous column, Fy of the web).
821 @param E (float): Young modulus.
822 @param t_p (float): Panel zone thickness.
823 @param t_dp (float, optional): Doubler plate thickness. Defaults to 0.0.
824 @param a_s (float, optional): Strain hardening. Defaults to 0.03.
825 @param pinchx (float, optional): Pinching factor
for strain (
or deformation) during reloading. Defaults to 0.25
826 @param pinchy (float, optional): Pinching factor
for stress (
or force) during reloading. Defaults to 0.75
827 @param dmg1 (float, optional): Damage due to ductility: D1(mu-1). Defaults to 0.0.
828 @param dmg2 (float, optional): Damage due to energy: D2(Eii/Eult). Defaults to 0.0.
829 @param beta (float, optional): Power used to determine the degraded unloading stiffness based on ductility, mu-beta. Defaults to 0.0.
830 @param safety_factor (bool, optional): Safety factor used
if standard mechanical parameters are used (
not test results). Defaults to
False.
831 @param t_fbp (float, optional): Thickness of the face bearing plate (
if present). Defaults to 0.
833 @exception NegativeValue: ID needs to be a positive integer.
834 @exception NegativeValue: d_c needs to be positive.
835 @exception NegativeValue: bf_c needs to be positive.
836 @exception NegativeValue: tf_c needs to be positive.
837 @exception NegativeValue: d_b needs to be positive.
838 @exception NegativeValue: tf_b needs to be positive.
839 @exception NegativeValue: Fy needs to be positive.
840 @exception NegativeValue: E needs to be positive.
841 @exception NegativeValue: t_p needs to be positive.
842 @exception NegativeValue: a_s needs to be positive.
845 if ID < 1:
raise NegativeValue()
846 if d_c < 0:
raise NegativeValue()
847 if bf_c < 0:
raise NegativeValue()
848 if tf_c < 0:
raise NegativeValue()
849 if d_b < 0:
raise NegativeValue()
850 if tf_b < 0:
raise NegativeValue()
851 if Fy < 0:
raise NegativeValue()
852 if E < 0:
raise NegativeValue()
853 if t_p < 0:
raise NegativeValue()
854 if a_s < 0:
raise NegativeValue()
855 if t_fbp < 0:
raise NegativeValue()
891 Implementation of the homonym abstract method.
901 self.
GG = self.
EE/(2.0 * (1.0 + 0.30))
906 self.
KbKb = 12.0*self.
EE*(self.
I_cI_c+self.
t_dpt_dp*(self.
d_cd_c-2.0*self.
tf_ctf_c)**3/12.0)/(self.
d_bd_b-0)**2
918 self.
Cw1Cw1 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cw1_tests)
919 self.
Cf1Cf1 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cf1_tests)
920 self.
Cw4Cw4 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cw4_tests)
921 self.
Cf4Cf4 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cf4_tests)
922 self.
Cw6Cw6 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cw6_tests)
923 self.
Cf6Cf6 = np.interp(self.
Kf_KeKf_Ke, Kf_Ke_tests, Cf6_tests)
944 Implementation of the homonym abstract method.
947 self.datadata = [["INFO_TYPE",
"Skiadopoulos2021"],
951 [
"d_c", self.
d_cd_c],
952 [
"bf_c", self.
bf_cbf_c],
953 [
"tf_c", self.
tf_ctf_c],
954 [
"I_c", self.
I_cI_c],
955 [
"d_b", self.
d_bd_b],
956 [
"tf_b", self.
tf_btf_b],
960 [
"t_p", self.
t_pt_p],
961 [
"t_dp", self.
t_dpt_dp],
962 [
"t_pz", self.
t_pzt_pz],
963 [
"a_s", self.
a_sa_s],
964 [
"pinchx", self.
pinchxpinchx],
965 [
"pinchy", self.
pinchypinchy],
966 [
"dmg1", self.
dmg1dmg1],
967 [
"dmg2", self.
dmg2dmg2],
968 [
"beta", self.
betabeta],
973 [
"Ksf", self.
KsfKsf],
974 [
"Kbf", self.
KbfKbf],
976 [
"Kf_Ke", self.
Kf_KeKf_Ke],
983 [
"Gamma_1", self.
Gamma_1Gamma_1],
984 [
"Gamma_4", self.
Gamma_4Gamma_4],
985 [
"Gamma_6", self.
Gamma_6Gamma_6],
991 Implementation of the homonym abstract method.
994 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
995 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
998 print(
"Requested info for Skiadopoulos 2021 material model Parameters, ID = {}".format(self.
IDID))
1001 print(
"Gamma_1 = {} rad".format(self.
Gamma_1Gamma_1))
1002 print(
"Gamma_4 = {} rad".format(self.
Gamma_4Gamma_4))
1003 print(
"Gamma_6 = {} rad".format(self.
Gamma_6Gamma_6))
1004 print(
"M1 = {} kNm".format(self.
M1M1/kNm_unit))
1005 print(
"M4 = {} kNm".format(self.
M4M4/kNm_unit))
1006 print(
"M6 = {} kNm".format(self.
M6M6/kNm_unit))
1012 y_axis = np.array([0.0, self.
M1M1, self.
M4M4, self.
M6M6])/kNm_unit
1014 fig, ax = plt.subplots()
1015 ax.plot(x_axis, y_axis,
'k-')
1017 ax.set(xlabel=
'Rotation [rad]', ylabel=
'Moment [kNm]',
1018 title=
'Skiadopoulos 2021 material model (ID={})'.format(self.
IDID))
1027 Implementation of the homonym abstract method.
1033 print(
"The validity of the equations is not fullfilled.")
1034 print(
"!!!!!!! WARNING !!!!!!! Check material model of Skiadopoulos 2021, ID=", self.
IDID)
1040 Generate the material model Hysteretic (Skiadopoulos 2021) using the computed parameters.
1041 See _Hysteretic function for more information.
1051 Class that is the children of Skiadopoulos2021
and combine the
class SteelIShape (section) to retrieve the information needed.
1053 @param Skiadopoulos2021: Parent
class.
1055 def __init__(self, ID: int, col: SteelIShape, beam: SteelIShape,
1056 t_dp=0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0, dmg2=0, beta=0, safety_factor=
False, t_fbp = 0):
1058 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
1059 and the section
class SteelIShape.
1060 The copy of the sections (col
and beam) passed are stored
in the member variable self.
colcol
and self.
beambeam.
1062 @param ID (int): Unique material model ID.
1063 @param col (SteelIShape): SteelIShape column section object.
1064 @param beam (SteelIShape): SteelIShape beam section object.
1065 @param t_dp (float, optional): Doubler plate thickness. Defaults to 0.0.
1066 @param a_s (float, optional): Strain hardening. Defaults to 0.03.
1067 @param pinchx (float, optional): Pinching factor
for strain (
or deformation) during reloading. Defaults to 0.25.
1068 @param pinchy (float, optional): Pinching factor
for stress (
or force) during reloading. Defaults to 0.75.
1069 @param dmg1 (float, optional): Damage due to ductility: D1(mu-1). Defaults to 0.0.
1070 @param dmg2 (float, optional): Damage due to energy: D2(Eii/Eult). Defaults to 0.0.
1071 @param beta (float, optional): Power used to determine the degraded unloading stiffness based on ductility, mu-beta. Defaults to 0.0.
1072 @param safety_factor (bool, optional): Safety factor used
if standard mechanical parameters are used (
not test results). Defaults to
False.
1073 @param t_fbp (float, optional): Thickness of the face bearing plate (
if present). Defaults to 0.
1077 super().__init__(ID, col.d, col.bf, col.tf, col.Iy, beam.d, beam.tf, col.Fy_web, col.E, col.tw,
1078 t_dp=t_dp, a_s=a_s, pinchx=pinchx, pinchy=pinchy, dmg1=dmg1, dmg2=dmg2, beta=beta, safety_factor=safety_factor, t_fbp=t_fbp)
1086 WIP: Class that is the children of Skiadopoulos2021
and it
's used for the panel zone spring in a RCS (RC column continous, Steel beam).
1088 @param Skiadopoulos2021: Parent
class.
1090 def __init__(self, ID: int, beam: SteelIShape, d_col, t_fbp = 0,
1091 t_dp=0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0, dmg2=0, beta=0, safety_factor=
False):
1093 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
1094 and the section
class SteelIShape.
1095 The copy of the section (beam) passed
is stored
in the member variable self.
beambeam.
1097 @param ID (int): Unique material model ID.
1098 @param beam (SteelIShape): SteelIShape beam section object.
1099 @param d_col (float): Depth of the RC column (continous)
1100 @param t_fbp (float, optional): Thickness of the face bearing plate (
if present). Defaults to 0.
1101 @param t_dp (float, optional): Doubler plate thickness. Defaults to 0.0.
1102 @param a_s (float, optional): Strain hardening. Defaults to 0.03.
1103 @param pinchx (float, optional): Pinching factor
for strain (
or deformation) during reloading. Defaults to 0.25
1104 @param pinchy (float, optional): Pinching factor
for stress (
or force) during reloading. Defaults to 0.75
1105 @param dmg1 (float, optional): Damage due to ductility: D1(mu-1). Defaults to 0.0.
1106 @param dmg2 (float, optional): Damage due to energy: D2(Eii/Eult). Defaults to 0.0.
1107 @param beta (float, optional): Power used to determine the degraded unloading stiffness based on ductility, mu-beta. Defaults to 0.0.
1108 @param safety_factor (bool, optional): Safety factor used
if standard mechanical parameters are used (
not test results). Defaults to
False.
1111 super().__init__(ID, beam.d, beam.bf, beam.tf, beam.Iy, d_col, 0, beam.Fy_web, beam.E, beam.tw,
1112 t_dp=t_dp, a_s=a_s, pinchx=pinchx, pinchy=pinchy, dmg1=dmg1, dmg2=dmg2, beta=beta, safety_factor=safety_factor, t_fbp=t_fbp)
1119 Class that stores funcions and material properties of a RC rectangular or circular section
1120 with Mander 1988
as the material model
for the unconfined reinforced concrete
and the OpenSeesPy command type used to model it
is Concrete04
or Concrete01.
1121 For more information about the empirical model
for the computation of the parameters, see Mander et Al. 1988, Karthik
and Mander 2011
and SIA 262:2012.
1123 @param MaterialModels: Parent abstract
class.
1125 def __init__(self, ID: int, fc, Ec, ec = 1, ecp = 1, fct = -1, et = -1, beta = 0.1):
1127 Constructor of the class.
1129 @param ID (int): Unique material model ID.
1130 @param fc (float): Compressive concrete
yield strength (needs to be negative).
1131 @param Ec (float): Young modulus.
1132 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1133 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1134 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1135 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1136 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
1137 Defaults to 0.1 (according to OpenSeesPy documentation)
1139 @exception NegativeValue: ID needs to be a positive integer.
1140 @exception PositiveValue: fc needs to be negative.
1141 @exception NegativeValue: Ec needs to be positive.
1142 @exception PositiveValue: ec needs to be negative
if different
from 1.
1143 @exception PositiveValue: ecp needs to be positive
if different
from 1.
1144 @exception NegativeValue: fct needs to be positive
if different
from -1.
1145 @exception NegativeValue: et needs to be positive
if different
from -1.
1148 if ID < 0:
raise NegativeValue()
1149 if fc > 0:
raise PositiveValue()
1150 if Ec < 0:
raise NegativeValue()
1151 if ec != 1
and ec > 0:
raise PositiveValue()
1152 if ecp != 1
and ecp > 0:
raise PositiveValue()
1153 if fct != -1
and fct < 0:
raise NegativeValue()
1154 if et != -1
and et < 0:
raise NegativeValue()
1165 self.
ReInitReInit(ec, ecp, fct, et)
1168 def ReInit(self, ec = 1, ecp = 1, fct = -1, et = -1):
1170 Implementation of the homonym abstract method.
1173 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1174 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1175 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1176 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1197 Implementation of the homonym abstract method.
1200 self.datadata = [["INFO_TYPE",
"UnconfMander1988"],
1206 [
"ecp", self.
ecpecp],
1207 [
"ecu", self.
ecuecu],
1208 [
"fct", self.
fctfct],
1210 [
"beta", self.
betabeta],
1214 def ShowInfo(self, plot = False, block = False, concrete04 = True):
1216 Implementation of the homonym abstract method.
1219 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
1220 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
1221 @param concrete04 (bool, optional): Option to show
in the plot the concrete04
or concrete01
if False. Defaults to
True.
1224 print(
"Requested info for Unconfined Mander 1988 material model Parameters, ID = {}".format(self.
IDID))
1225 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
1226 print(
'Concrete strength fc = {} MPa'.format(self.
fcfc/MPa_unit))
1227 print(
'Strain at maximal strength ec = {}'.format(self.
ecec))
1228 print(
'Maximal strain ecu = {}'.format(self.
ecuecu))
1232 fig, ax = plt.subplots()
1244 Implementation of the homonym abstract method.
1248 if self.
fcfc < -110*MPa_unit:
1250 print(
"With High Strength concrete (< -110 MPa), a better material model should be used (see Abdesselam et Al. 2019")
1252 print(
"The validity of the equations is not fullfilled.")
1253 print(
"!!!!!!! WARNING !!!!!!! Check material model of Unconfined Mander 1988, ID=", self.
IDID)
1259 Method that computes the compressive concrete yield strain.
1260 For more information, see Karthik
and Mander 2011.
1262 @returns float: Strain
1265 return -0.0015 + self.
fcfc/MPa_unit/70000
1269 Method that computes the compressive concrete spalling strain.
1270 For more information, see Mander et Al. 1988.
1272 @returns float: Strain
1274 return 2.0*self.
ecec
1279 Method that computes the tensile concrete yield stress.
1280 For more information, see SIA 262:2012.
1282 @returns float: Stress.
1284 return 0.30 * math.pow(-self.
fcfc/MPa_unit, 2/3) * MPa_unit
1289 Method that computes the tensile concrete yield strain.
1290 For more information, see Mander et Al. 1988 (eq 45).
1292 @returns float: Strain.
1294 return self.
fctfct/self.
EcEc
1299 Method that computes the compressive concrete failure strain.
1300 For more information, see Karthik and Mander 2011.
1302 @returns float: Strain
1305 return -0.012 - 0.0001 * self.
fcfc/MPa_unit
1309 Generate the material model Concrete01 for unconfined concrete using the computed parameters.
1310 See _Concrete01 function
for more information. Use this method
or Concrete04,
not both (only one material model
for ID).
1312 _Concrete01(self.IDID, self.ecec, self.fcfc, self.ecuecu)
1319 Generate the material model Concrete04 for unconfined concrete (Mander 1988) using the computed parameters.
1320 See _Concrete04 function
for more information. Use this method
or Concrete01,
not both (only one material model
for ID).
1322 _Concrete04(self.IDID, self.fcfc, self.ecec, self.ecuecu, self.EcEc, self.fctfct, self.etet, self.betabeta)
1329 Class that is the children of UnconfMander1988
and combine the
class RCRectShape (
section) to retrieve the information needed.
1331 @param UnconfMander1988: Parent
class.
1333 def __init__(self, ID: int, section: RCRectShape, ec=1, ecp=1, fct=-1, et=-1, beta=0.1):
1335 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
1336 and the section
class RCRectShape.
1337 The copy of the section passed
is stored
in the member variable self.
sectionsection.
1339 @param ID (int): Unique material model ID.
1340 @param section (RCRectShape): RCRectShape section object.
1341 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1342 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1343 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1344 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1345 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
1346 Defaults to 0.1 (according to OpenSeesPy documentation)
1349 super().__init__(ID, section.fc, section.Ec, ec=ec, ecp=ecp, fct=fct, et=et, beta=beta)
1356 Class that is the children of UnconfMander1988
and combine the
class RCCircShape (
section) to retrieve the information needed.
1358 @param UnconfMander1988: Parent
class.
1360 def __init__(self, ID: int, section: RCCircShape, ec=1, ecp=1, fct=-1, et=-1, beta=0.1):
1362 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
1363 and the section
class RCCircShape.
1364 The copy of the section passed
is stored
in the member variable self.
sectionsection.
1366 @param ID (int): Unique material model ID.
1367 @param section (RCCircShape): RCCircShape section object.
1368 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1369 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1370 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1371 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1372 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
1373 Defaults to 0.1 (according to OpenSeesPy documentation)
1376 super().__init__(ID, section.fc, section.Ec, ec=ec, ecp=ecp, fct=fct, et=et, beta=beta)
1383 Class that stores funcions and material properties of a RC rectangular section
1384 with Mander 1988
as the material model
for the confined reinforced concrete
and the OpenSeesPy command type used to model it
is Concrete04
or Concrete01.
1385 For more information about the empirical model
for the computation of the parameters, see Mander et Al. 1988, Karthik
and Mander 2011
and SIA 262:2012.
1386 The array array_fl2
and curve curve_fl1 are the parameter of the digitized table used to extrapolate the confinement factor;
1387 they are used
as global throughout the ConfMander1988Rect material model to optimise the program (given the fact that
is constant everytime).
1389 @param MaterialModels: Parent abstract
class.
1391 global array_fl2, curve_fl1
1393 curve_fl1 = np.arange(0, 0.3+0.02, 0.02)
1394 array_fl2 = [
None] * len(curve_fl1)
1396 array_fl2[0] = [[1.0, 0],
1397 [1.0026455026455026, 6.5359477124183E-4],
1398 [1.0423280423280423, 0.01699346405228758],
1399 [1.0846560846560847, 0.037254901960784306],
1400 [1.119047619047619, 0.05686274509803921],
1401 [1.1455026455026456, 0.0784313725490196],
1402 [1.1666666666666667, 0.09607843137254903],
1403 [1.193121693121693, 0.11830065359477124],
1404 [1.208994708994709, 0.1392156862745098],
1405 [1.2248677248677249, 0.15751633986928104],
1406 [1.2380952380952381, 0.17712418300653593],
1407 [1.2513227513227514, 0.19673202614379084],
1408 [1.2645502645502646, 0.21699346405228756],
1409 [1.2724867724867726, 0.23660130718954248],
1410 [1.2804232804232805, 0.2594771241830065],
1411 [1.2883597883597884, 0.2777777777777778],
1412 [1.2936507936507937, 0.3]]
1414 array_fl2[1] = [[1.1349206349206349, 0.01895424836601307],
1415 [1.1825396825396826, 0.03790849673202614],
1416 [1.2222222222222223, 0.05686274509803921],
1417 [1.2513227513227514, 0.07777777777777777],
1418 [1.2724867724867726, 0.09738562091503267],
1419 [1.291005291005291, 0.11895424836601308],
1420 [1.3174603174603174, 0.13856209150326795],
1421 [1.335978835978836, 0.1588235294117647],
1422 [1.3518518518518519, 0.17777777777777776],
1423 [1.3677248677248677, 0.19738562091503267],
1424 [1.3783068783068784, 0.2176470588235294],
1425 [1.3941798941798942, 0.238562091503268],
1426 [1.41005291005291, 0.2594771241830065],
1427 [1.4126984126984126, 0.28104575163398693],
1428 [1.4232804232804233, 0.3]]
1430 array_fl2[2] = [[1.246031746031746, 0.037254901960784306],
1431 [1.298941798941799, 0.05751633986928104],
1432 [1.335978835978836, 0.07712418300653595],
1433 [1.3650793650793651, 0.09869281045751634],
1434 [1.3888888888888888, 0.11699346405228757],
1435 [1.4153439153439153, 0.1392156862745098],
1436 [1.439153439153439, 0.1568627450980392],
1437 [1.4603174603174602, 0.17712418300653593],
1438 [1.4735449735449735, 0.1980392156862745],
1439 [1.4894179894179893, 0.21633986928104573],
1440 [1.5052910052910053, 0.23790849673202616],
1441 [1.5211640211640212, 0.2581699346405229],
1442 [1.5317460317460316, 0.2777777777777778],
1443 [1.5423280423280423, 0.3]]
1445 array_fl2[3] = [[1.3544973544973544, 0.05686274509803921],
1446 [1.3994708994708995, 0.07777777777777777],
1447 [1.4417989417989419, 0.09738562091503267],
1448 [1.4735449735449735, 0.11699346405228757],
1449 [1.4947089947089947, 0.13790849673202613],
1450 [1.5238095238095237, 0.15751633986928104],
1451 [1.5423280423280423, 0.17777777777777776],
1452 [1.560846560846561, 0.1980392156862745],
1453 [1.5820105820105819, 0.21633986928104573],
1454 [1.5952380952380953, 0.2372549019607843],
1455 [1.6137566137566137, 0.2588235294117647],
1456 [1.626984126984127, 0.27908496732026145],
1457 [1.6375661375661377, 0.3]]
1459 array_fl2[4] = [[1.455026455026455, 0.07647058823529412],
1460 [1.5, 0.09738562091503267],
1461 [1.5423280423280423, 0.1196078431372549],
1462 [1.574074074074074, 0.13856209150326795],
1463 [1.6058201058201058, 0.1588235294117647],
1464 [1.6296296296296298, 0.17777777777777776],
1465 [1.6534391534391535, 0.1980392156862745],
1466 [1.671957671957672, 0.21699346405228756],
1467 [1.6904761904761905, 0.238562091503268],
1468 [1.7063492063492065, 0.2588235294117647],
1469 [1.716931216931217, 0.27908496732026145],
1470 [1.7248677248677249, 0.3]]
1472 array_fl2[5] = [[1.5634920634920635, 0.09869281045751634],
1473 [1.6058201058201058, 0.11895424836601308],
1474 [1.6428571428571428, 0.13790849673202613],
1475 [1.6746031746031746, 0.1588235294117647],
1476 [1.701058201058201, 0.17908496732026144],
1477 [1.7222222222222223, 0.19673202614379084],
1478 [1.7433862433862433, 0.2176470588235294],
1479 [1.7698412698412698, 0.2392156862745098],
1480 [1.783068783068783, 0.2581699346405229],
1481 [1.798941798941799, 0.27908496732026145],
1482 [1.8095238095238095, 0.3]]
1484 array_fl2[6] = [[1.6507936507936507, 0.11633986928104575],
1485 [1.693121693121693, 0.13856209150326795],
1486 [1.7328042328042328, 0.15751633986928104],
1487 [1.7645502645502646, 0.17843137254901958],
1488 [1.7910052910052912, 0.1980392156862745],
1489 [1.8148148148148149, 0.2176470588235294],
1490 [1.8333333333333335, 0.23790849673202616],
1491 [1.8571428571428572, 0.2581699346405229],
1492 [1.8677248677248677, 0.2797385620915033],
1493 [1.8915343915343916, 0.3]]
1495 array_fl2[7] = [[1.753968253968254, 0.14052287581699346],
1496 [1.7883597883597884, 0.15816993464052287],
1497 [1.8174603174603174, 0.17843137254901958],
1498 [1.8412698412698414, 0.19738562091503267],
1499 [1.8677248677248677, 0.21699346405228756],
1500 [1.8835978835978837, 0.2372549019607843],
1501 [1.9047619047619047, 0.257516339869281],
1502 [1.925925925925926, 0.27908496732026145],
1503 [1.9417989417989419, 0.3]]
1505 array_fl2[8] = [[1.8386243386243386, 0.16013071895424835],
1506 [1.8703703703703702, 0.17908496732026144],
1507 [1.8994708994708995, 0.1980392156862745],
1508 [1.925925925925926, 0.2176470588235294],
1509 [1.9497354497354498, 0.23790849673202616],
1510 [1.9761904761904763, 0.2588235294117647],
1511 [1.992063492063492, 0.27908496732026145],
1512 [2.0132275132275135, 0.3]]
1514 array_fl2[9] = [[1.9179894179894181, 0.1823529411764706],
1515 [1.939153439153439, 0.19869281045751636],
1516 [1.9682539682539684, 0.21895424836601307],
1517 [1.992063492063492, 0.238562091503268],
1518 [2.0132275132275135, 0.2568627450980392],
1519 [2.0396825396825395, 0.27908496732026145],
1520 [2.060846560846561, 0.3]]
1522 array_fl2[10] = [[1.9761904761904763, 0.19673202614379084],
1523 [2.007936507936508, 0.21633986928104573],
1524 [2.0343915343915344, 0.2372549019607843],
1525 [2.066137566137566, 0.257516339869281],
1526 [2.08994708994709, 0.2784313725490196],
1527 [2.111111111111111, 0.3]]
1529 array_fl2[11] = [[2.044973544973545, 0.21633986928104573],
1530 [2.0767195767195767, 0.238562091503268],
1531 [2.1084656084656084, 0.2581699346405229],
1532 [2.134920634920635, 0.28039215686274505],
1533 [2.158730158730159, 0.3]]
1535 array_fl2[12] = [[2.113756613756614, 0.2372549019607843],
1536 [2.1455026455026456, 0.257516339869281],
1537 [2.1719576719576716, 0.2797385620915033],
1538 [2.193121693121693, 0.3]]
1540 array_fl2[13] = [[2.177248677248677, 0.2581699346405229],
1541 [2.2063492063492065, 0.27908496732026145],
1542 [2.2275132275132274, 0.3]]
1544 array_fl2[14] = [[2.2407407407407405, 0.2784313725490196],
1545 [2.261904761904762, 0.3]]
1547 array_fl2[15] = [[2.2962962962962963, 0.3]]
1549 def __init__(self, ID: int, bc, dc, Ac, fc, Ec, nr_bars, D_bars, wx_top: np.ndarray, wx_bottom: np.ndarray, wy: np.ndarray, s, D_hoops, rho_s_x, rho_s_y, fs,
1550 ec = 1, ecp = 1, fct = -1, et = -1, esu = -1, beta = 0.1):
1552 Constructor of the class.
1554 @param ID (int): Unique material model ID.
1555 @param bc (float): Width of the confined core (
from the centerline of the hoops, according to Mander et Al. 1988).
1556 @param dc (float): Depth of the confined core (
from the centerline of the hoops, according to Mander et Al. 1988).
1557 @param Ac (float): Area of the confined core (according to Mander et Al. 1988).
1558 @param fc (float): Compressive concrete
yield strength (needs to be negative).
1559 @param Ec (float): Young modulus.
1560 @param nr_bars (float): Number of reinforcement (allow float
for computing the equivalent nr_bars
with different reinforcement areas).
1561 @param D_bars (float): Diameter of the vertical reinforcing bars.
1562 @param wx_top (np.ndarray): Vector of 1 dimension that defines the distance between top vertical bars
in x direction (NOT CENTERLINE DISTANCES).
1563 @param wx_bottom (np.ndarray): Vector of 1 dimension that defines the distance between bottom vertical bars
in x direction (NOT CENTERLINE DISTANCES).
1564 @param wy (np.ndarray): Vector of 1 dimension that defines the distance between vertical bars
in y direction (lateral) (NOT CENTERLINE DISTANCES).
1565 @param s (float): Vertical spacing between hoops.
1566 @param D_hoops (float): Diameter of hoops.
1567 @param rho_s_x (float): Ratio of the transversal area of the hoops to the associated concrete area
in the x direction.
1568 @param rho_s_y (float): Ratio of the transversal area of the hoops to the associated concrete area
in the y direction.
1569 @param fs (float): Yield stress
for the hoops.
1570 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1571 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1572 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1573 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1574 @param esu (float, optional): Tensile steel bars failure strain. Defaults to -1, e.g. computed according to Mander 1988.
1575 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
1576 Defaults to 0.1 (according to OpenSeesPy documentation)
1578 @exception NegativeValue: ID needs to be a positive integer.
1579 @exception NegativeValue: bc needs to be positive.
1580 @exception NegativeValue: dc needs to be positive.
1581 @exception NegativeValue: Ac needs to be positive.
1582 @exception PositiveValue: fc needs to be negative.
1583 @exception NegativeValue: Ec needs to be positive.
1584 @exception NegativeValue: nr_bars needs to be positive.
1585 @exception NegativeValue: D_bars needs to be positive.
1586 @exception NegativeValue: s needs to be positive.
1587 @exception NegativeValue: D_hoops needs to be positive.
1588 @exception NegativeValue: rho_s_x needs to be positive.
1589 @exception NegativeValue: rho_s_y needs to be positive.
1590 @exception NegativeValue: fs needs to be positive.
1591 @exception PositiveValue: ec needs to be negative
if different
from 1.
1592 @exception PositiveValue: ecp needs to be negative
if different
from 1.
1593 @exception NegativeValue: fct needs to be positive
if different
from -1.
1594 @exception NegativeValue: et needs to be positive
if different
from -1.
1595 @exception NegativeValue: esu needs to be positive
if different
from -1.
1598 if ID < 1:
raise NegativeValue()
1599 if bc < 0:
raise NegativeValue()
1600 if dc < 0:
raise NegativeValue()
1601 if Ac < 0:
raise NegativeValue()
1602 if fc > 0:
raise PositiveValue()
1603 if Ec < 0:
raise NegativeValue()
1604 if nr_bars < 0:
raise NegativeValue()
1605 if D_bars < 0:
raise NegativeValue()
1606 if s < 0:
raise NegativeValue()
1607 if D_hoops < 0:
raise NegativeValue()
1608 if rho_s_x < 0:
raise NegativeValue()
1609 if rho_s_y < 0:
raise NegativeValue()
1610 if fs < 0:
raise NegativeValue()
1611 if ec != 1
and ec > 0:
raise PositiveValue()
1612 if ecp != 1
and ecp > 0:
raise PositiveValue()
1613 if fct != -1
and fct < 0:
raise NegativeValue()
1614 if et != -1
and et < 0:
raise NegativeValue()
1615 if esu != -1
and esu < 0:
raise NegativeValue()
1634 self.
esuesu = 0.05
if esu == -1
else esu
1640 self.
ReInitReInit(ec, ecp, fct, et)
1642 def ReInit(self, ec = 1, ecp = 1, fct = -1, et = -1):
1644 Implementation of the homonym abstract method.
1647 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1648 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1649 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1650 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1683 Implementation of the homonym abstract method.
1686 self.datadata = [["INFO_TYPE",
"ConfMander1988rect"],
1695 [
"ecp", self.
ecpecp],
1696 [
"ecu", self.
ecuecu],
1697 [
"fct", self.
fctfct],
1699 [
"fcc", self.
fccfcc],
1700 [
"ecc", self.
eccecc],
1701 [
"eccu", self.
eccueccu],
1702 [
"beta", self.
betabeta],
1703 [
"nr_bars", self.
nr_barsnr_bars],
1704 [
"D_bars", self.
D_barsD_bars],
1705 [
"wx_top", self.
wx_topwx_top],
1709 [
"D_hoops", self.
D_hoopsD_hoops],
1710 [
"rho_s_x", self.
rho_s_xrho_s_x],
1711 [
"rho_s_y", self.
rho_s_yrho_s_y],
1713 [
"esu", self.
esuesu],
1716 [
"rho_cc", self.
rho_ccrho_cc],
1717 [
"Acc", self.
AccAcc],
1719 [
"fl_x", self.
fl_xfl_x],
1720 [
"fl_y", self.
fl_yfl_y],
1721 [
"K_combo", self.
K_comboK_combo],
1725 def ShowInfo(self, plot = False, block = False, concrete04 = True):
1727 Implementation of the homonym abstract method.
1730 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
1731 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
1732 @param concrete04 (bool, optional): Option to show
in the plot the concrete04
or concrete01
if False. Defaults to
True.
1735 print(
"Requested info for Confined Mander 1988 (rectangular) material model Parameters, ID = {}".format(self.
IDID))
1736 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
1737 print(
'Concrete strength fc = {} MPa'.format(self.
fcfc/MPa_unit))
1738 print(
'Concrete strength confined fcc = {} MPa'.format(self.
fccfcc/MPa_unit))
1739 print(
'Strain at maximal strength ec = {}'.format(self.
ecec))
1740 print(
'Strain at maximal strength confined ecc = {}'.format(self.
eccecc))
1741 print(
'Maximal strain ecu = {}'.format(self.
ecuecu))
1742 print(
'Maximal strain confined eccu = {}'.format(self.
eccueccu))
1746 fig, ax = plt.subplots()
1758 Implementation of the homonym abstract method.
1762 if self.
fcfc < -110*MPa_unit:
1764 print(
"With High Strength concrete (< -110 MPa), a better material model should be used (see Abdesselam et Al. 2019")
1766 print(
"The validity of the equations is not fullfilled.")
1767 print(
"!!!!!!! WARNING !!!!!!! Check material model of Confined Mander 1988, ID=", self.
IDID)
1773 Method that computes the compressive concrete yield strain.
1774 For more information, see Karthik
and Mander 2011.
1776 @returns float: Strain
1779 return -0.0015 + self.
fcfc/MPa_unit/70000
1784 Method that computes the compressive concrete spalling strain.
1785 For more information, see Mander et Al. 1988.
1787 @returns float: Strain
1789 return 2.0*self.
ecec
1794 Method that computes the tensile concrete yield stress.
1795 For more information, see SIA 262:2012. Assume that the confinement do
not play an essential role
in tension.
1797 @returns float: Stress.
1799 return 0.30 * math.pow(-self.
fcfc/MPa_unit, 2/3) * MPa_unit
1804 Method that computes the tensile concrete yield strain.
1805 For more information, see Mander et Al. 1988 (eq 45).
1807 @returns float: Strain.
1809 return self.
fctfct/self.
EcEc
1814 Method that computes the compressive concrete failure strain.
1815 For more information, see Karthik and Mander 2011.
1817 @returns float: Strain
1820 return -0.012 - 0.0001 * self.
fcfc/MPa_unit
1825 Method that computes the compressive confined concrete yield strain.
1826 For more information, see Karthik
and Mander 2011.
1828 @returns float: Strain
1830 return (1.0 + 5.0 * (self.
K_comboK_combo-1.0)) * self.
ecec
1835 Method that computes the compressive confined concrete failure strain.
1836 For more information, see Karthik and Mander 2011.
1838 @returns float: Strain
1841 return 5*self.
eccecc
1846 Method that computes the ineffectual area.
1847 For more information, see Mander et Al. 1988.
1849 @returns float: Area.
1851 return ( np.sum(np.multiply(self.
wywy, self.
wywy))*2.0 +
1852 np.sum(np.multiply(self.
wx_topwx_top, self.
wx_topwx_top)) +
1858 Method that computes the confinement factor using the digitized table from Mander et Al. 1988 that
1859 extrapolates the factor using the lateral confining stress
in the two direction.
1861 @exception NoApplicability: The table
from Mander accept ratio of fl/fc smaller than 0.3.
1862 @exception NoApplicability: The table
from Mander accept ratio of fl/fc smaller than 0.3.
1863 @exception NegativeValue: fl1_ratio needs to be positive.
1864 @exception NegativeValue: fl2_ratio needs to be positive.
1866 @returns float: Confinement factor.
1869 return -1.254 + 2.254 * math.sqrt(1.0+7.94*self.
fl_xfl_x*self.
keke/self.
fcfc) - 2.0*self.
fl_xfl_x*self.
keke/self.
fcfc
1871 fl2_ratio = max(self.
fl_xfl_x*self.
keke/self.
fcfc, self.
fl_yfl_y*self.
keke/self.
fcfc)
1872 fl1_ratio = min(self.
fl_xfl_x*self.
keke/self.
fcfc, self.
fl_yfl_y*self.
keke/self.
fcfc)
1874 if fl1_ratio > 0.3:
raise NoApplicability()
1875 if fl2_ratio > 0.3:
raise NoApplicability()
1876 if fl1_ratio < 0:
raise NegativeValue()
1877 if fl2_ratio < 0:
raise NegativeValue()
1880 for ii, fl1
in enumerate(curve_fl1):
1881 if fl1 == fl1_ratio:
1885 curve_fl2 = array_fl2[ii]
1888 K = [item[0]
for item
in curve_fl2]
1889 fl2 = [item[1]
for item
in curve_fl2]
1890 K_res = np.interp(fl2_ratio, fl2, K)
1903 fl1_min = curve_fl1[ii-1]
1904 curve_fl2_max = array_fl2[ii]
1905 curve_fl2_min = array_fl2[ii-1]
1908 K_max = [item[0]
for item
in curve_fl2_max]
1909 fl2_max = [item[1]
for item
in curve_fl2_max]
1910 K_res_max = np.interp(fl2_ratio, fl2_max, K_max)
1912 K_min = [item[0]
for item
in curve_fl2_min]
1913 fl2_min = [item[1]
for item
in curve_fl2_min]
1914 K_res_min = np.interp(fl2_ratio, fl2_min, K_min)
1918 K_res = np.interp(fl1_ratio, [fl1_min, fl1_max], [K_res_min, K_res_max])
1924 Generate the material model Concrete01 for rectangular section confined concrete (Mander 1988).
1925 See _Concrete01 function
for more information. Use this method
or Concrete04,
not both (only one material model
for ID).
1927 _Concrete01(self.IDID, self.eccecc, self.fccfcc, self.eccueccu)
1934 Generate the material model Concrete04 for rectangular section confined concrete (Mander 1988).
1935 See _Concrete04 function
for more information. Use this method
or Concrete01,
not both (only one material model
for ID).
1937 _Concrete04(self.IDID, self.fccfcc, self.eccecc, self.eccueccu, self.EcEc, self.fctfct, self.etet, self.betabeta)
1944 Class that is the children of ConfMander1988Rect
and combine the
class RCRectShape (
section) to retrieve the information needed.
1946 @param ConfMander1988Rect: Parent
class.
1948 def __init__(self, ID: int, section: RCRectShape, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1):
1950 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
1951 and the section
class RCRectShape. wx_bottom, wx_top
and wy are computed using the private method __Compute_w that
1952 and the member variable bars_ranges_position_y
and bars_position_x
from the section passed.
1953 The copy of the section passed
is stored
in the member variable self.
sectionsection.
1955 @param ID (int): Unique material model ID.
1956 @param section (RCRectShape): RCRectShape section object.
1957 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
1958 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
1959 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1960 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
1961 @param esu (float, optional): Tensile steel bars failure strain. Defaults to -1, e.g. computed according to Mander 1988.
1962 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
1963 Defaults to 0.1 (according to OpenSeesPy documentation)
1966 ranges = section.bars_ranges_position_y
1967 bars = section.bars_position_x
1968 wy = self.__Compute_w__Compute_w(ranges, section.D_bars)
1969 wx_top = self.__Compute_w__Compute_w(bars[0], section.D_bars)
1970 wx_bottom = self.__Compute_w__Compute_w(bars[-1], section.D_bars)
1972 super().__init__(ID, section.bc, section.dc, section.Ac, section.fc, section.Ec, section.nr_bars, section.D_bars,
1973 wx_top, wx_bottom, wy, section.s, section.D_hoops, section.rho_s_x, section.rho_s_y, section.fs,
1974 ec=ec, ecp=ecp, fct=fct, et=et, esu=esu, beta=beta)
1978 def __Compute_w(self, vector, D_bars):
1980 Private method that converts information from the section passed to the format of the
class ConfMander1988Rect.
1982 @param vector (list): Vector
with the information
from the section.
1983 @param D_bars (float): Diameter of the bars.
1985 @returns list: Converted information.
1989 for i, elem
in enumerate(vector[1:l-1]):
1990 w[i] = elem - D_bars
1996 Class that stores funcions and material properties of a RC circular section
1997 with Mander 1988
as the material model
for the confined reinforced concrete
and the OpenSeesPy command type used to model it
is Concrete04
or Concrete01.
1998 For more information about the empirical model
for the computation of the parameters, see Mander et Al. 1988, Karthik
and Mander 2011
and SIA 262:2012.
2000 @param MaterialModels: Parent abstract
class.
2002 def __init__(self, ID: int, bc, Ac, fc, Ec, nr_bars, D_bars, s, D_hoops, rho_s_vol, fs,
2003 ec = 1, ecp = 1, fct = -1, et = -1, esu = -1, beta = 0.1):
2005 Constructor of the class.
2007 @param ID (int): Unique material model ID.
2008 @param bc (float): Width of the confined core (
from the centerline of the hoops, according to Mander et Al. 1988).
2009 @param Ac (float): Area of the confined core (according to Mander et Al. 1988).
2010 @param fc (float): Compressive concrete
yield strength (needs to be negative).
2011 @param Ec (float): Young modulus.
2012 @param nr_bars (float): Number of reinforcement (allow float
for computing the equivalent nr_bars
with different reinforcement areas).
2013 @param D_bars (float): Diameter of the vertical reinforcing bars.
2014 @param s (float): Vertical spacing between hoops.
2015 @param D_hoops (float): Diameter of hoops.
2016 @param rho_s_vol (float): Compute the ratio of the volume of transverse confining steel to the volume of confined concrete core.
2017 @param fs (float): Yield stress
for the hoops.
2018 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
2019 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
2020 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2021 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2022 @param esu (float, optional): Tensile steel bars failure strain. Defaults to -1, e.g. computed according to Mander 1988.
2023 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
2024 Defaults to 0.1 (according to OpenSeesPy documentation)
2026 @exception NegativeValue: ID needs to be a positive integer.
2027 @exception NegativeValue: bc needs to be positive.
2028 @exception NegativeValue: Ac needs to be positive.
2029 @exception PositiveValue: fc needs to be negative.
2030 @exception NegativeValue: Ec needs to be positive.
2031 @exception NegativeValue: nr_bars needs to be positive.
2032 @exception NegativeValue: D_bars needs to be positive.
2033 @exception NegativeValue: s needs to be positive.
2034 @exception NegativeValue: D_hoops needs to be positive.
2035 @exception NegativeValue: rho_s_vol needs to be positive.
2036 @exception NegativeValue: fs needs to be positive.
2037 @exception PositiveValue: ec needs to be negative
if different
from 1.
2038 @exception PositiveValue: ecp needs to be negative
if different
from 1.
2039 @exception NegativeValue: fct needs to be positive
if different
from -1.
2040 @exception NegativeValue: et needs to be positive
if different
from -1.
2041 @exception NegativeValue: esu needs to be positive
if different
from -1.
2044 if ID < 0:
raise NegativeValue()
2045 if bc < 0:
raise NegativeValue()
2046 if Ac < 0:
raise NegativeValue()
2047 if fc > 0:
raise PositiveValue()
2048 if Ec < 0:
raise NegativeValue()
2049 if nr_bars < 0:
raise NegativeValue()
2050 if D_bars < 0:
raise NegativeValue()
2051 if s < 0:
raise NegativeValue()
2052 if D_hoops < 0:
raise NegativeValue()
2053 if rho_s_vol < 0:
raise NegativeValue()
2054 if fs < 0:
raise NegativeValue()
2055 if ec != 1
and ec > 0:
raise PositiveValue()
2056 if ecp != 1
and ecp > 0:
raise PositiveValue()
2057 if fct != -1
and fct < 0:
raise NegativeValue()
2058 if et != -1
and et < 0:
raise NegativeValue()
2059 if esu != -1
and esu < 0:
raise NegativeValue()
2073 self.
esuesu = 0.05
if esu == -1
else esu
2079 self.
ReInitReInit(ec, ecp, fct, et)
2081 def ReInit(self, ec = 1, ecp = 1, fct = -1, et = -1):
2083 Implementation of the homonym abstract method.
2086 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
2087 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
2088 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2089 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2101 s_prime = self.
ss - self.
D_hoopsD_hoops
2103 self.
AeAe = math.pi/4 * (self.
bcbc - s_prime/2)**2
2122 Implementation of the homonym abstract method.
2125 self.datadata = [["INFO_TYPE",
"ConfMander1988Circ"],
2133 [
"ecp", self.
ecpecp],
2134 [
"ecu", self.
ecuecu],
2135 [
"fct", self.
fctfct],
2137 [
"fcc", self.
fccfcc],
2138 [
"ecc", self.
eccecc],
2139 [
"eccu", self.
eccueccu],
2140 [
"beta", self.
betabeta],
2141 [
"nr_bars", self.
nr_barsnr_bars],
2142 [
"D_bars", self.
D_barsD_bars],
2144 [
"D_hoops", self.
D_hoopsD_hoops],
2147 [
"esu", self.
esuesu],
2151 def ShowInfo(self, plot = False, block = False, concrete04 = True):
2153 Implementation of the homonym abstract method.
2156 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
2157 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
2158 @param concrete04 (bool, optional): Option to show
in the plot the concrete04
or concrete01
if False. Defaults to
True.
2161 print(
"Requested info for Confined Mander 1988 (circular) material model Parameters, ID = {}".format(self.
IDID))
2162 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
2163 print(
'Concrete strength fc = {} MPa'.format(self.
fcfc/MPa_unit))
2164 print(
'Concrete strength confined fcc = {} MPa'.format(self.
fccfcc/MPa_unit))
2165 print(
'Strain at maximal strength ec = {}'.format(self.
ecec))
2166 print(
'Strain at maximal strength confined ecc = {}'.format(self.
eccecc))
2167 print(
'Maximal strain ecu = {}'.format(self.
ecuecu))
2168 print(
'Maximal strain confined eccu = {}'.format(self.
eccueccu))
2172 fig, ax = plt.subplots()
2184 Implementation of the homonym abstract method.
2188 if self.
fcfc < -110*MPa_unit:
2190 print(
"With High Strength concrete (< -110 MPa), a better material model should be used (see Abdesselam et Al. 2019")
2192 print(
"The validity of the equations is not fullfilled.")
2193 print(
"!!!!!!! WARNING !!!!!!! Check material model of Confined Mander 1988, ID=", self.
IDID)
2199 Method that computes the compressive concrete yield strain.
2200 For more information, see Karthik
and Mander 2011.
2202 @returns float: Strain
2205 return -0.0015 + self.
fcfc/MPa_unit/70000
2210 Method that computes the compressive concrete spalling strain.
2211 For more information, see Mander et Al. 1988.
2213 @returns float: Strain
2215 return 2.0*self.
ecec
2220 Method that computes the tensile concrete yield stress.
2221 For more information, see SIA 262:2012. Assume that the confinement do
not play an essential role
in tension.
2223 @returns float: Stress.
2225 return 0.30 * math.pow(-self.
fcfc/MPa_unit, 2/3) * MPa_unit
2230 Method that computes the tensile concrete yield strain.
2231 For more information, see Mander et Al. 1988 (eq 45).
2233 @returns float: Strain.
2235 return self.
fctfct/self.
EcEc
2240 Method that computes the compressive concrete failure strain.
2241 For more information, see Karthik and Mander 2011.
2243 @returns float: Strain
2246 return -0.012 - 0.0001 * self.
fcfc/MPa_unit
2251 Method that computes the compressive confined concrete yield strain.
2252 For more information, see Karthik
and Mander 2011.
2254 @returns float: Strain
2256 return (1.0 + 5.0 * (self.
K_comboK_combo-1.0)) * self.
ecec
2261 Method that computes the compressive confined concrete failure strain.
2262 For more information, see Karthik and Mander 2011.
2264 @returns float: Strain
2267 return 5*self.
eccecc
2272 Generate the material model Concrete01 for rectangular section confined concrete (Mander 1988).
2273 See _Concrete01 function
for more information. Use this method
or Concrete04,
not both (only one material model
for ID).
2275 _Concrete01(self.IDID, self.eccecc, self.fccfcc, self.eccueccu)
2282 Generate the material model Concrete04 for circular section confined concrete (Mander 1988).
2283 See _Concrete04 function
for more information. Use this method
or Concrete01,
not both (only one material model
for ID).
2285 _Concrete04(self.IDID, self.fccfcc, self.eccecc, self.eccueccu, self.EcEc, self.fctfct, self.etet, self.betabeta)
2292 Class that is the children of ConfMander1988Circ
and combine the
class RCCircShape (
section) to retrieve the information needed.
2294 @param ConfMander1988Circ: Parent
class.
2296 def __init__(self, ID: int, section: RCCircShape, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1):
2298 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
2299 and the section
class RCCircShape.
2300 The copy of the section passed
is stored
in the member variable self.
sectionsection.
2302 @param ID (int): Unique material model ID.
2303 @param section (RCCircShape): RCCircShape section object.
2304 @param ec (float, optional): Compressive concrete
yield strain. Defaults to 1, e.g. computed according to Karthik
and Mander 2011.
2305 @param ecp (float, optional): Concrete spalling strain. Defaults to 1, e.g. computed according to Mander 1988.
2306 @param fct (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2307 @param et (float, optional): Tensile concrete
yield strain. Defaults to -1, e.g. computed according to SIA 262:2012.
2308 @param esu (float, optional): Tensile steel bars failure strain. Defaults to -1, e.g. computed according to Mander 1988.
2309 @param beta (float, optional): Loating point value defining the exponential curve parameter to define the residual stress.
2310 Defaults to 0.1 (according to OpenSeesPy documentation)
2313 super().__init__(ID, section.bc, section.Ac, section.fc, section.Ec, section.n_bars, section.D_bars, section.s, section.D_hoops,
2314 section.rho_s_vol, section.fs, ec=ec, ecp=ecp, fct=fct, et=et, esu=esu, beta=beta)
2321 Class that stores funcions and material properties of a simple uniaxial bilinear model
2322 with the OpenSeesPy command type used to model it
is Steel01.
2324 @param MaterialModels: Parent abstract
class.
2328 Constructor of the class.
2330 @param ID (int): Unique material model ID.
2331 @param fy (float): Yield stress.
2332 @param Ey (float): Young modulus.
2333 @param b (float, optional): Strain hardening factor. Defaults to 0.01.
2335 @exception NegativeValue: ID needs to be a positive integer.
2336 @exception NegativeValue: fy needs to be positive.
2337 @exception NegativeValue: Ey needs to be positive.
2340 if ID < 1:
raise NegativeValue()
2341 if fy < 0:
raise NegativeValue()
2342 if Ey < 0:
raise NegativeValue()
2357 Implementation of the homonym abstract method.
2374 Implementation of the homonym abstract method.
2377 self.datadata = [["INFO_TYPE",
"UniaxialBilinear"],
2389 Implementation of the homonym abstract method.
2392 @param plot (bool, optional): Option to show the plot of the material model. Defaults to
False.
2393 @param block (bool, optional): Option to wait the user command
'plt.show()' (avoiding the stop of the program everytime that a plot should pop up). Defaults to
False.
2396 print(
"Requested info for Uniaxial Bilinear material model Parameters, ID = {}".format(self.
IDID))
2397 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
2398 print(
'Yielding stress fy = {} MPa'.format(self.
fyfy/MPa_unit))
2399 print(
'Young modulus Ey = {} MPa'.format(self.
EyEy/MPa_unit))
2400 print(
'Maximal elastic strain epsilon y = {}'.format(self.
eyey))
2401 print(
'Hardening factor b = {}'.format(self.
bb))
2406 e_pl = 10.0 * self.
eyey
2407 sigma_pl = self.
bb * self.
EyEy * e_pl
2409 x_axis = np.array([0.0, self.
eyey, (self.
eyey+e_pl)])*100
2410 y_axis = np.array([0.0, self.
fyfy, (self.
fyfy+sigma_pl)])/MPa_unit
2412 fig, ax = plt.subplots()
2413 ax.plot(x_axis, y_axis,
'k-')
2415 ax.set(xlabel=
'Strain [%]', ylabel=
'Stress [MPa]',
2416 title=
'Uniaxial Bilinear model for material ID={}'.format(self.
IDID))
2425 Implementation of the homonym abstract method.
2433 print(
"The validity of the equations is not fullfilled.")
2434 print(
"!!!!!!! WARNING !!!!!!! Check material model of Uniaxial Bilinear, ID=", self.
IDID)
2440 Generate the material model Steel01 uniaxial bilinear material model.
2441 See _Steel01 function for more information.
2443 _Steel01(self.IDID, self.fyfy, self.EyEy, self.bb)
2450 Class that is the children of UniaxialBilinear
and combine the
class SteelIShape (
section) to retrieve the information needed.
2452 @param UniaxialBilinear: Parent
class.
2454 def __init__(self, ID: int, section: SteelIShape, b=0.01):
2456 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
2457 and the section
class SteelIShape.
2458 The copy of the section passed
is stored
in the member variable self.
sectionsection.
2460 @param ID (int): Unique material model ID.
2461 @param section (SteelIShape): SteelIShape section object.
2462 @param b (float, optional): Strain hardening factor. Defaults to 0.01.
2465 super().__init__(ID, section.Fy, section.E, b=b)
2472 Class that stores funcions and material properties of the vertical steel reinforcement bars
2473 with Giuffré, Menegotto
and Pinto 1970
as the material model
and the OpenSeesPy command type used to model it
is Steel02.
2474 For more information about the empirical model
for the computation of the parameters, see Giuffré, Menegotto
and Pinto 1970
and Carreno et Al. 2020.
2476 @param MaterialModels: Parent abstract
class.
2478 def __init__(self, ID: int, fy, Ey, b = 0.02, R0 = 20, cR1 = 0.9, cR2 = 0.08, a1 = 0.039, a2 = 1.0, a3 = 0.029, a4 = 1.0):
2480 Constructor of the class. The parameters are suggested
as exposed
in Carreno et Al. 2020 but also the one suggested by OpenSeesPy documentation are reliable
2481 (b = 0.015, R0 = 10, cR1 = 0.925, cR2 = 0.15).
2483 @param ID (int): Unique material model ID.
2484 @param fy (float): Steel
yield strength.
2485 @param Ey (float): Young modulus.
2486 @param b (float, optional): Strain-hardening ratio. Defaults to 0.02, according to Carreno et Al. 2020.
2487 @param R0 (int, optional): First parameter to control the transition
from elastic to plastic branches. Defaults to 20, according to Carreno et Al. 2020.
2488 @param cR1 (float, optional): Second parameter to control the transition
from elastic to plastic branches. Defaults to 0.9, according to Carreno et Al. 2020.
2489 @param cR2 (float, optional): Third parameter to control the transition
from elastic to plastic branches. Defaults to 0.08, according to Carreno et Al. 2020.
2490 @param a1 (float, optional): Isotropic hardening parameter, increase of compression
yield envelope
as proportion of
yield strength after a plastic strain.
2491 Defaults to 0.039, according to Carreno et Al. 2020.
2492 @param a2 (float, optional): Coupled
with a1. Defaults to 1.0, according to Carreno et Al. 2020.
2493 @param a3 (float, optional): Isotropic hardening parameter, increase of tension
yield envelope
as proportion of
yield strength after a plastic strain.
2494 Defaults to 0.029, according to Carreno et Al. 2020.
2495 @param a4 (float, optional): Coupled
with a3. Defaults to 1.0, according to Carreno et Al. 2020.
2497 @exception NegativeValue: ID needs to be a positive integer.
2500 if ID < 1:
raise NegativeValue()
2522 Implementation of the homonym abstract method.
2538 Implementation of the homonym abstract method.
2541 self.datadata = [["INFO_TYPE",
"GMP1970"],
2548 [
"cR1", self.
cR1cR1],
2549 [
"cR2", self.
cR2cR2],
2559 Implementation of the homonym abstract method.
2563 print(
"Requested info for GMP1970 (Giuffré-Menegotto-Pinto) material model Parameters, ID = {}".format(self.
IDID))
2564 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
2565 print(
"Yield stress fy = {} MPa".format(self.
fyfy/MPa_unit))
2566 print(
"Young modulus Ey = {} MPa".format(self.
EyEy/MPa_unit))
2567 print(
"Strain hardening ratio b = {}".format(self.
bb))
2568 print(
"Bauschinger effect factors R0 = {}, cR1 = {} and cR2 = {}".format(self.
R0R0, self.
cR1cR1, self.
cR2cR2))
2569 print(
"Isotropic hardening factors a1 = {}, a2 = {}, a3 = {} and a4 = {}".format(self.
a1a1, self.
a2a2, self.
a3a3, self.
a4a4))
2577 Implementation of the homonym abstract method.
2583 print(
"The validity of the equations is not fullfilled.")
2584 print(
"!!!!!!! WARNING !!!!!!! Check material model of GMP1970, ID=", self.
IDID)
2590 Generate the material model Steel02 uniaxial Giuffre-Menegotto-Pinto steel material with isotropic strain hardening.
2591 See _Steel02 function
for more information.
2593 _Steel02(self.IDID, self.fyfy, self.EyEy, self.bb, self.R0R0, self.cR1cR1, self.cR2cR2, self.a1a1, self.a2a2, self.a3a3, self.a4a4)
2600 Class that is the children of GMP1970
and combine the
class RCRectShape (
section) to retrieve the information needed.
2602 @param GMP1970: Parent
class.
2604 def __init__(self, ID: int, section: RCRectShape, b=0.02, R0=20.0, cR1=0.9, cR2=0.08, a1=0.039, a2=1.0, a3=0.029, a4=1.0):
2606 Constructor of the class. It passes the arguments into the parent
class to generate the combination of the parent class
2607 and the section
class RCRectShape.
2608 The copy of the section passed
is stored
in the member variable self.
sectionsection.
2610 @param ID (int): Unique material model ID.
2611 @param section (RCRectShape): RCRectShape section object.
2612 @param b (float, optional): Strain-hardening ratio. Defaults to 0.02, according to Carreno et Al. 2020.
2613 @param R0 (int, optional): First parameter to control the transition
from elastic to plastic branches. Defaults to 20, according to Carreno et Al. 2020.
2614 @param cR1 (float, optional): Second parameter to control the transition
from elastic to plastic branches. Defaults to 0.9, according to Carreno et Al. 2020.
2615 @param cR2 (float, optional): Third parameter to control the transition
from elastic to plastic branches. Defaults to 0.08, according to Carreno et Al. 2020.
2616 @param a1 (float, optional): Isotropic hardening parameter, increase of compression
yield envelope
as proportion of
yield strength after a plastic strain.
2617 Defaults to 0.039, according to Carreno et Al. 2020.
2618 @param a2 (float, optional): Coupled
with a1. Defaults to 1.0, according to Carreno et Al. 2020.
2619 @param a3 (float, optional): Isotropic hardening parameter, increase of tension
yield envelope
as proportion of
yield strength after a plastic strain.
2620 Defaults to 0.029, according to Carreno et Al. 2020.
2621 @param a4 (float, optional): Coupled
with a3. Defaults to 1.0, according to Carreno et Al. 2020.
2624 super().__init__(ID, section.fy, section.Ey, b=b, R0=R0, cR1=cR1, cR2=cR2, a1=a1, a2=a2, a3=a3, a4=a4)
2631 Class that stores funcions and material properties of a steel profile or reinforcing bar
2632 with Updated Voce-Chaboche
as the material model
and the OpenSeesPy command type used to model it
is UVCuniaxial.
2633 For more information about the how to calibrate the set of parameters, see
2634 de Castro e Sousa, Suzuki
and Lignos 2020
and Hartloper, de Castro e Sousa
and Lignos 2021.
2636 @param MaterialModels: Parent abstract
class.
2638 def __init__(self, ID: int, fy, Ey, QInf, b, DInf, a, cK: np.ndarray, gammaK: np.ndarray):
2640 Constructor of the class.
2642 @param ID (int): Unique material model ID.
2643 @param fy (float): Initial
yield stress of the steel material.
2644 @param Ey (float): Elastic modulus of the steel material.
2645 @param QInf (float): Maximum increase
in yield stress due to cyclic hardening (isotropic hardening).
2646 @param b (float): Saturation rate of QInf.
2647 @param DInf (float): Decrease
in the initial
yield stress, to neglect the model updates set DInf = 0.
2648 @param a (float): Saturation rate of DInf, a > 0. If DInf == 0, then a
is arbitrary (but still a > 0).
2649 @param cK (np.ndarray): Array of 1 dimension; each entry
is one kinematic hardening parameter associated
with one backstress, up to 8 may be specified.
2650 @param gammaK (np.ndarray): Array of 1 dimension; each entry
is one saturation rate of kinematic hardening associated
with one backstress, up to 8 may be specified.
2652 @exception NegativeValue: ID needs to be a positive integer.
2653 @exception NegativeValue: fy needs to be positive.
2654 @exception NegativeValue: Ey needs to be positive.
2655 @exception NegativeValue: QInf needs to be positive.
2656 @exception NegativeValue: b needs to be positive.
2657 @exception NegativeValue: DInf needs to be positive.
2658 @exception NegativeValue: a needs to be positive.
2659 @exception WrongArgument: cK can
't be empty.
2660 @exception WrongArgument: cK
and gammaK have
as many entries
as the number of backstresses (thus they have the same length).
2663 if ID < 1:
raise NegativeValue()
2664 if fy < 0:
raise NegativeValue()
2665 if Ey < 0:
raise NegativeValue()
2666 if QInf < 0:
raise NegativeValue()
2667 if b < 0:
raise NegativeValue()
2668 if DInf < 0:
raise NegativeValue()
2669 if a < 0:
raise NegativeValue()
2670 if len(cK) == 0:
raise WrongArgument()
2671 if len(cK) != len(gammaK):
raise WrongArgument()
2672 if len(cK) != 2: print(
"!!!!!!! WARNING !!!!!!! Number of backstresses should be 2 for optimal performances")
2673 if DInf == 0: print(
"!!!!!!! WARNING !!!!!!! With DInf = 0, the model used is Voce-Chaboche (VC) not updated (UVC)")
2693 Implementation of the homonym abstract method.
2710 Implementation of the homonym abstract method.
2713 self.datadata = [["INFO_TYPE",
"UVC"],
2718 [
"QInf", self.
QInfQInf],
2720 [
"DInf", self.
DInfDInf],
2724 [
"gammaK", self.
gammaKgammaK],
2730 Implementation of the homonym abstract method.
2734 print(
"Requested info for UVC material model Parameters, ID = {}".format(self.
IDID))
2735 print(
"Section associated: {} ".format(self.
section_name_tagsection_name_tag))
2736 print(
"Yield strength fy = {} MPa".format(self.
fyfy/MPa_unit))
2737 print(
"Young modulus Ey = {} MPa".format(self.
EyEy/MPa_unit))
2738 print(
"Isotropic hardening factor QInf = {} MPa and saturation rate b = {}".format(self.
QInfQInf/MPa_unit, self.
bb))
2739 print(
"Decrease the initial yield stress DInf = {} MPa and saturation rate a = {}".format(self.
DInfDInf/MPa_unit, self.
aa))
2740 print(
"Kinematic hardening vector ({} backstresses) cK = {} MPa".format(self.
NN, self.
cKcK/MPa_unit))
2741 print(
"And associated saturation rate gammaK = {}".format(self.
gammaKgammaK))
2749 Implementation of the homonym abstract method.
2755 print(
"The validity of the equations is not fullfilled.")
2756 print(
"!!!!!!! WARNING !!!!!!! Check material model of UVC, ID=", self.
IDID)
2762 Generate the material model Updated Voce-Chaboche (UVC) for uniaxial stress states.
2763 See _UVCuniaxial function
for more information.
2765 _UVCuniaxial(self.IDID, self.EyEy, self.fyfy, self.QInfQInf, self.bb, self.DInfDInf, self.aa, self.NN, self.cKcK, self.gammaKgammaK)
2772 Class that is the children of UVC that retrieve calibrated parameters
from UVC_calibrated_parameters.txt.
2773 The file text can be modified by adding more calibrated parameters.
2775 @param UVC: Parent
class.
2777 def __init__(self, ID: int, calibration: str, fy = -1, E = -1):
2779 Constructor of the class. It retrieve the parameters
from UVC_calibrated_parameters.txt
and pass them
in the parent
class.
2781 @param ID (int): Unique material model ID.
2782 @param calibration (str): Label of the calibration parameter set. The options are: \n
2795 @param fy (float, optional): Yield strength. Defaults to -1, e.g. taken equal to the one given
in the calibration parameter set.
2796 @param E (float, optional): Young modulus. Defaults to -1, e.g. taken equal to the one given
in the calibration parameter set.
2798 @exception NegativeValue: fy needs to be positive
if different
from -1.
2799 @exception NegativeValue: E needs to be positive
if different
from -1.
2800 @exception NameError: calibration needs to be equal to the label of one of the set of calibrated parameters.
2802 if fy != -1
and fy < 0:
raise NegativeValue()
2803 if E != -1
and E < 0:
raise NegativeValue()
2808 names = [
"Material",
"Ey",
"fy",
"QInf",
"b",
"DInf",
"a",
"C1",
"gamma1",
"C2",
"gamma2"]
2810 __location__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__)))
2811 UVC_data = np.genfromtxt(os.path.join(__location__,
'UVC_calibrated_parameters.txt'), dtype=
None, skip_header=1, names = names, encoding=
'ascii', delimiter=
'\t')
2813 index = UVC_data[
"Material"] == calibration
2814 fy = UVC_data[
"fy"][index][0]*MPa_unit
if fy == -1
else fy
2815 E = UVC_data[
"Ey"][index][0]*GPa_unit
if E == -1
else E
2817 if not index.any():
raise NameError(
"No calibrated parameters with that name. Note that there are no spaces in the label.")
2820 super().
__init__(ID, fy, E, UVC_data[
"QInf"][index][0]*MPa_unit, UVC_data[
"b"][index][0],
2821 UVC_data[
"DInf"][index][0]*MPa_unit, UVC_data[
"a"][index][0],
2822 np.array([UVC_data[
"C1"][index][0], UVC_data[
"C2"][index][0]])*MPa_unit,
2823 np.array([UVC_data[
"gamma1"][index][0], UVC_data[
"gamma2"][index][0]]))
2828 Class that is the children of UVCCalibrated
and combines the
class RCRectShape (
section) to retrieve the information needed.
2830 @param UVCCalibrated: Parent
class.
2832 def __init__(self, ID: int, section: RCRectShape, calibration =
'S460NL_25mm_plate'):
2834 Constructor of the class.
2836 @param ID (int): Unique material model ID.
2837 @param section (RCRectShape): RCRectShape section object.
2838 @param calibration (str): Label of the calibration parameter set. The options are listed
in UVCCalibrated.
2839 Defaults to
'S460NL_25mm_plate'. Change it accordingly to the steel rebars material properties.
2842 super().__init__(ID, calibration, section.fy, section.Ey)
2849 Class that is the children of UVCCalibrated
and combine the
class RCCircShape (
section) to retrieve the information needed.
2851 @param UVCCalibrated: Parent
class.
2853 def __init__(self, ID: int, section: RCCircShape, calibration =
'S460NL_25mm_plate'):
2855 Constructor of the class.
2857 @param ID (int): Unique material model ID.
2858 @param section (RCCircShape): RCCircShape section object.
2859 @param calibration (str, optional): Label of the calibration parameter set. The options are listed
in UVCCalibrated.
2860 Defaults to
'S460NL_25mm_plate'. Change it accordingly to the steel rebars material properties.
2863 super().__init__(ID, calibration, section.fy, section.Ey)
2870 Class that is the children of UVCCalibrated
and combine the
class SteelIShape (
section) to retrieve the information needed
2871 for the material model of the flange (often used fo the entire section).
2873 @param UVCCalibrated: Parent
class.
2875 def __init__(self, ID: int, section: SteelIShape, calibration =
'S355J2_HEB500_flange'):
2877 Constructor of the class.
2879 @param ID (int): Unique material model ID.
2880 @param section (SteelIShape): SteelIShape section object.
2881 @param calibration (str, optional): Label of the calibration parameter set. The options are listed
in UVCCalibrated.
2882 Defaults to
'S355J2_HEB500_flange'. Change it accordingly to the steel rebars material properties.
2885 super().__init__(ID, calibration, section.Fy, section.E)
2892 Class that is the children of UVCCalibrated
and combine the
class SteelIShape (
section) to retrieve the information needed
2893 for the material model of the web.
2895 @param UVCCalibrated: Parent
class.
2897 def __init__(self, ID: int, section: SteelIShape, calibration =
'S355J2_HEB500_web'):
2899 Constructor of the class.
2901 @param ID (int): Unique material model ID.
2902 @param section (SteelIShape): SteelIShape section object.
2903 @param calibration (str, optional): Label of the calibration parameter set. The options are listed
in UVCCalibrated.
2904 Defaults to
'S355J2_HEB500_web'. Change it accordingly to the steel rebars material properties.
2907 super().__init__(ID, calibration, section.Fy_web, section.E)
2915 Function with the equation of the curve of the confined
and unconfined concrete (Popovics 1973).
2917 @param fc (float): Compressive concrete
yield stress (negative).
2918 @param discretized_eps (float): Variable strain.
2919 @param ec (float): Compressive concrete
yield strain (negative).
2920 @param Ec (float): Concrete Young modulus.
2922 @returns float: Stress
in function of variable strain.
2924 x = discretized_eps/ec
2925 r = Ec / (Ec - fc/ec)
2926 return fc*x*r / (r-1+x**r)
2931 Function that plots the confined/unconfined Concrete04 stress-strain curve.
2933 @param fc (float): Compressive concrete
yield strength (needs to be negative).
2934 @param Ec (float): Young modulus.
2935 @param ec (float): Compressive concrete
yield strain.
2936 @param ecu (float): Compressive concrete failure strain (negative).
2937 @param Type (str): Type of concrete (confined =
'C', unconfined =
'U')
2938 @param ax (matplotlib.axes._subplots.AxesSubplot): The figure
's wrapper.
2939 @param ID (int, optional): ID of the material model. Defaults to 0 (=
not defined).
2941 @exception NameError:
2943 Example: to create the plot, call this line to
pass the correct ax:
2944 fig, ax = plt.subplots()
2947 name =
"Confined (Co04)"
2949 name =
"Unconfined (Co04)"
2951 raise NameError(
"Type should be C or U (ID={})".format(ID))
2955 x_axis = np.zeros(N)
2956 y_axis = np.zeros(N)
2962 ax.plot(x_axis*100.0, y_axis/MPa_unit,
'k-', label = name)
2963 ax.set(xlabel=
'Strain [%]', ylabel=
'Stress [MPa]',
2964 title=
'Mander 1988 (Concrete04) material model (ID={})'.format(ID))
2971 Function with the equation of the curve of the Concrete01 model.
2972 For more information, see Kent-Scott-Park concrete material object
with
2973 degraded linear unloading/reloading stiffness according to the work of Karsan-Jirsa
and no tensile strength.
2975 @param fc (float): Compressive concrete
yield stress (negative).
2976 @param ec (float): Compressive concrete
yield strain (negative).
2977 @param fpcu (float): Concrete crushing strength (negative).
2978 @param ecu (float): Concrete strain at crushing strength (negative).
2979 @param discretized_eps (float): Variable strain.
2981 @returns float: Stress
in function of variable strain.
2983 if discretized_eps > ec:
2984 eta = discretized_eps/ec;
2985 return fc*(2*eta-eta*eta);
2987 Ttangent = (fc-fpcu)/(ec-ecu)
2988 return fc + Ttangent*(discretized_eps-ec);
2993 Function that plots the Concrete01 stress-strain curve.
2995 @param fc (float): Compressive concrete
yield stress (negative).
2996 @param ec (float): Compressive concrete
yield strain (negative).
2997 @param fpcu (float): Concrete crushing strength (negative).
2998 @param ecu (float): Concrete strain at crushing strength (negative).
2999 @param ax (matplotlib.axes._subplots.AxesSubplot): The figure
's wrapper.
3000 @param ID (int, optional): ID of the material model. Defaults to 0 (=
not defined).
3002 Example: to create the plot, call this line to
pass the correct ax:
3003 fig, ax = plt.subplots()
3008 x_axis = np.zeros(N)
3009 y_axis = np.zeros(N)
3015 ax.plot(x_axis*100.0, y_axis/MPa_unit,
'k--', label =
"Co01")
3016 ax.set(xlabel=
'Strain [%]', ylabel=
'Stress [MPa]',
3017 title=
'Mander 1988 (Concrete01) material model (ID={})'.format(ID))
3023def _Bilin(ID, Ke, a_s, My_star, theta_p, theta_pc, K, theta_u, rate_det):
3025 Private function that generates the material model Bilin.
3026 OpenSeesPy command: \n
3027 uniaxialMaterial("Bilin", IDMat, K, asPos, asNeg, MyPos, MyNeg, LS, LK, LA, LD, cS, cK, cA, cD, th_pP, th_pN, th_pcP, th_pcN, ResP, ResN, th_uP, th_uN, DP, DN) \n
3028 Parameters (see OpenSeesPy documentation
for more information): \n
3029 ID Material Identification (integer)
3030 K Initial stiffness after the modification
for n (see Ibarra
and Krawinkler, 2005)
3031 asPos Strain hardening ratio after n modification (see Ibarra
and Krawinkler, 2005)
3032 asNeg Strain hardening ratio after n modification (see Ibarra
and Krawinkler, 2005)
3033 MyPos Positive
yield moment (
with sign)
3034 MyNeg Negative
yield moment (
with sign)
3035 LS = 1000 Basic strength deterioration parameter (see Lignos
and Krawinkler, 2009) (a very large
3036 LK = 1000 Unloading stiffness deterioration parameter (see Lignos
and Krawinkler, 2009) (a very large
3037 LA = 1000 Accelerated reloading stiffness deterioration parameter (see Lignos
and Krawinkler, 2009) (a very large
3038 LD = 1000 Post-capping strength deterioration parameter (see Lignos
and Krawinkler, 2009) (a very large
3039 cS = 1 Exponent
for basic strength deterioration (c = 1.0
for no deterioration)
3040 cK = 1 Exponent
for unloading stiffness deterioration (c = 1.0
for no deterioration)
3041 cA = 1 Exponent
for accelerated reloading stiffness deterioration (c = 1.0
for no deterioration)
3042 cD = 1 Exponent
for post-capping strength deterioration (c = 1.0
for no deterioration)
3043 th_pP Plastic rotation capacity
for positive loading direction (exemple 0.025)
3044 th_pN Plastic rotation capacity
for negative loading direction (exemple 0.025)
3045 th_pcP Post-capping rotation capacity
for positive loading direction (exemple 0.3)
3046 th_pcN Post-capping rotation capacity
for negative loading direction (exemple 0.3)
3047 KP Residual strength ratio
for positive loading direction (exemple 0.4)
3048 KN Residual strength ratio
for negative loading direction (exemple 0.4)
3049 th_uP Ultimate rotation capacity
for positive loading direction (exemple 0.4)
3050 th_uN Ultimate rotation capacity
for negative loading direction (exemple 0.4)
3051 rateDetP Rate of cyclic deterioration
for positive loading direction (exemple 1.0)
3052 rateDetN Rate of cyclic deterioration
for negative loading direction (exemple 1.0)
3054 uniaxialMaterial("Bilin", ID, Ke, a_s, a_s, My_star, -1.0*My_star, 1., 1., 1., 1., 1., 1., 1., 1., theta_p, theta_p, theta_pc, theta_pc,
3055 K, K, theta_u, theta_u, rate_det, rate_det)
3058def _Hysteretic(ID, M1, gamma1, M2, gamma2, M3, gamma3, pinchx, pinchy, dmg1, dmg2, beta):
3060 Private function that generates the material model Hysteretic.
3061 OpenSeesPy command: \n
3062 uniaxialMaterial('Hysteretic', matTag, *p1, *p2, *p3=p2, *n1, *n2, *n3=n2, pinchX, pinchY, damage1, damage2, beta=0.0) \n
3063 Parameters (see OpenSeesPy documentation
for more information): \n
3064 matTag integer tag identifying material
3065 p1 stress
and strain (
or force & deformation) at first point of the envelope
in the positive direction
3066 p2 stress
and strain (
or force & deformation) at second point of the envelope
in the positive direction
3067 p3 stress
and strain (
or force & deformation) at third point of the envelope
in the positive direction (optional)
3068 n1 stress
and strain (
or force & deformation) at first point of the envelope
in the negative direction
3069 n2 stress
and strain (
or force & deformation) at second point of the envelope
in the negative direction
3070 n3 stress
and strain (
or force & deformation) at third point of the envelope
in the negative direction (optional)
3071 pinchX pinching factor
for strain (
or deformation) during reloading
3072 pinchY pinching factor
for stress (
or force) during reloading
3073 damage1 damage due to ductility: D1(mu-1)
3074 damage2 damage due to energy: D2(Eii/Eult)
3075 beta power used to determine the degraded unloading stiffness based on ductility, mu-beta (optional, default=0.0)
3077 uniaxialMaterial("Hysteretic", ID, M1, gamma1, M2, gamma2, M3, gamma3, -M1, -gamma1, -M2, -gamma2, -M3, -gamma3,
3078 pinchx, pinchy, dmg1, dmg2, beta)
3081def _Concrete04(ID, fc, ec, ecu, Ec, fct, et, beta):
3083 Private function that generates the material model Concrete04 Popovics Concrete material model.
3084 OpenSeesPy command: \n
3085 uniaxialMaterial("Concrete04", matTag, fc, ec, ecu, Ec, <fct et> <beta>) \n
3086 Parameters (see OpenSeesPy documentation
for more information): \n
3087 matTag integer tag identifying material
3088 fc floating point values defining concrete compressive strength at 28 days (compression
is negative)*
3089 ec floating point values defining concrete strain at maximum strength*
3090 ecu floating point values defining concrete strain at crushing strength*
3091 Ec floating point values defining initial stiffness**
3092 fct floating point value defining the maximum tensile strength of concrete
3093 et floating point value defining ultimate tensile strain of concrete
3094 beta loating point value defining the exponential curve parameter to define the residual stress (
as a factor of ft) at etu
3096 uniaxialMaterial("Concrete04", ID, fc, ec, ecu, Ec, fct, et, beta)
3099def _Concrete01(ID, ec, fc, ecu, fpcu = 0.0):
3101 Private function that generates the material model Concrete02 concrete material model.
3102 OpenSeesPy command: \n
3103 uniaxialMaterial('Concrete01', matTag, fpc, epsc0, fpcu, epsU) \n
3104 Parameters (see OpenSeesPy documentation
for more information): \n
3105 matTag integer tag identifying material
3106 fpc concrete compressive strength at 28 days (compression
is negative)*
3107 epsc0 concrete strain at maximum strength*
3108 fpcu concrete crushing strength *
3109 epsU concrete strain at crushing strength*
3111 uniaxialMaterial('Concrete01', ID, fc, ec, fpcu, ecu)
3114def _Steel01(ID, fy, Ey, b):
3116 Private function that generates the material model Steel01 uniaxial bilinear steel material
3117 with kinematic hardening
and optional isotropic hardening described by a non-linear evolution equation.
3118 OpenSeesPy command: \n
3119 uniaxialMaterial(
'Steel01', matTag, Fy, E0, b, a1, a2, a3, a4) \n
3120 Parameters (see OpenSeesPy documentation
for more information): \n
3121 matTag integer tag identifying material
3123 E0 initial elastic tangent
3124 b strain-hardening ratio (ratio between post-
yield tangent
and initial elastic tangent)
3125 a1 isotropic hardening parameter, increase of compression
yield envelope
as proportion of
yield strength after a plastic strain of a2*(Fy/E0). (optional)
3126 a2 isotropic hardening parameter (see explanation under a1). (optional).
3127 a3 isotropic hardening parameter, increase of tension
yield envelope
as proportion of
yield strength after a plastic strain of a4*(Fy/E0). (optional)
3128 a4 isotropic hardening parameter (see explanation under a3). (optional)
3130 uniaxialMaterial("Steel01", ID, fy, Ey, b)
3133def _Steel02(ID, fy, Ey, b, R0, cR1, cR2, a1, a2, a3, a4):
3135 Private function that generates the material model Steel02 uniaxial Giuffre-Menegotto-Pinto steel material with isotropic strain hardening.
3136 OpenSeesPy command: \n
3137 uniaxialMaterial(
'Steel02', matTag, Fy, E, b, R0, cR1, cR2, a1, a2, a3, a4, sigInit) \n
3138 Parameters (see OpenSeesPy documentation
for more information): \n
3139 matTag Integer tag identifying material
3141 E0 Initial elastic tangent
3142 b Strain-hardening ratio (ratio between post-
yield tangent
and initial elastic tangent)
3143 R0 CR1 CR2 Parameters to control the transition
from elastic to plastic branches.
3144 a1 Isotropic hardening parameter, increase of compression
yield envelope
as proportion of
yield strength after a plastic strain of a2*(Fy/E0). (optional)
3145 a2 Isotropic hardening parameter (see explanation under a1). (optional default = 1.0).
3146 a3 Isotropic hardening parameter, increase of tension
yield envelope
as proportion of
yield strength after a plastic strain of a4*(Fy/E0). (optional default = 0.0)
3147 a4 Isotropic hardening parameter (see explanation under a3). (optional default = 1.0)
3148 sigInit Initial Stress Value (optional, default: 0.0) the strain
is calculated
from epsP=sigInit/E
3149 if (sigInit!= 0.0) { double epsInit = sigInit/E; eps = trialStrain+epsInit; }
else eps = trialStrain;
3151 uniaxialMaterial('Steel02', ID, fy, Ey, b, R0, cR1, cR2, a1, a2, a3, a4)
3154def _UVCuniaxial(ID, Ey, fy, QInf, b, DInf, a, N, cK, gammaK):
3156 Private function that generates the material model Updated Voce-Chaboche (UVC) material for uniaxial stress states.
3157 This material
is a refined version of the classic nonlinear isotropic/kinematic hardening material model based on the Voce
3158 isotropic hardening law
and the Chaboche kinematic hardening law.
3159 The UVC model contains an updated isotropic hardening law,
with parameter constraints, to simulate the permanent decrease
3160 in yield stress
with initial plastic loading associated
with the discontinuous yielding phenomenon
in mild steels.
3161 OpenSeesPy command: \n
3162 uniaxialMaterial(
'UVCuniaxial', matTag, E, fy, QInf, b, DInf, a, N, C1, gamma1, <C2 gamma2 C3 gamma3 … C8 gamma8>) \n
3163 Parameters (see OpenSeesPy documentation
for more information): \n
3164 matTag Integer tag identifying the material.
3165 E Elastic modulus of the steel material.
3166 fy Initial
yield stress of the steel material.
3167 QInf Maximum increase
in yield stress due to cyclic hardening (isotropic hardening).
3168 b Saturation rate of QInf, b > 0.
3169 DInf Decrease
in the initial
yield stress, to neglect the model updates set DInf = 0.
3170 a Saturation rate of DInf, a > 0. If DInf == 0, then a
is arbitrary (but still a > 0).
3171 N Number of backstresses to define, N >= 1.
3172 cK Kinematic hardening parameter associated
with backstress component k (vector).
3173 gammaK Saturation rate of kinematic hardening associated
with backstress component k (vector).
3177 backstresses.append(cK[ii])
3178 backstresses.append(gammaK[ii])
3179 uniaxialMaterial(
'UVCuniaxial', ID, Ey, fy, QInf, b, DInf, a, N, *backstresses)
Class that is the children of ConfMander1988Circ and combine the class RCCircShape (section) to retri...
def __init__(self, int ID, RCCircShape section, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1)
Constructor of the class.
Class that stores funcions and material properties of a RC circular section with Mander 1988 as the m...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def Concrete04(self)
Generate the material model Concrete04 for circular section confined concrete (Mander 1988).
def ReInit(self, ec=1, ecp=1, fct=-1, et=-1)
Implementation of the homonym abstract method.
def Compute_et(self)
Method that computes the tensile concrete yield strain.
def ShowInfo(self, plot=False, block=False, concrete04=True)
Implementation of the homonym abstract method.
def Concrete01(self)
Generate the material model Concrete01 for rectangular section confined concrete (Mander 1988).
def Compute_fct(self)
Method that computes the tensile concrete yield stress.
def Compute_ec(self)
Method that computes the compressive concrete yield strain.
def Compute_ecc(self)
Method that computes the compressive confined concrete yield strain.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def Compute_ecu(self)
Method that computes the compressive concrete failure strain.
def __init__(self, int ID, bc, Ac, fc, Ec, nr_bars, D_bars, s, D_hoops, rho_s_vol, fs, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1)
Constructor of the class.
def Compute_ecp(self)
Method that computes the compressive concrete spalling strain.
def Compute_eccu(self)
Method that computes the compressive confined concrete failure strain.
Class that is the children of ConfMander1988Rect and combine the class RCRectShape (section) to retri...
def __Compute_w(self, vector, D_bars)
def __init__(self, int ID, RCRectShape section, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1)
Constructor of the class.
Class that stores funcions and material properties of a RC rectangular section with Mander 1988 as th...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def Concrete04(self)
Generate the material model Concrete04 for rectangular section confined concrete (Mander 1988).
def ReInit(self, ec=1, ecp=1, fct=-1, et=-1)
Implementation of the homonym abstract method.
def Compute_et(self)
Method that computes the tensile concrete yield strain.
def ShowInfo(self, plot=False, block=False, concrete04=True)
Implementation of the homonym abstract method.
def Concrete01(self)
Generate the material model Concrete01 for rectangular section confined concrete (Mander 1988).
def Compute_fct(self)
Method that computes the tensile concrete yield stress.
def ComputeAi(self)
Method that computes the ineffectual area.
def Compute_ec(self)
Method that computes the compressive concrete yield strain.
def __init__(self, int ID, bc, dc, Ac, fc, Ec, nr_bars, D_bars, np.ndarray wx_top, np.ndarray wx_bottom, np.ndarray wy, s, D_hoops, rho_s_x, rho_s_y, fs, ec=1, ecp=1, fct=-1, et=-1, esu=-1, beta=0.1)
Constructor of the class.
def Compute_ecc(self)
Method that computes the compressive confined concrete yield strain.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def Compute_ecu(self)
Method that computes the compressive concrete failure strain.
def Compute_ecp(self)
Method that computes the compressive concrete spalling strain.
def ComputeConfinementFactor(self)
Method that computes the confinement factor using the digitized table from Mander et Al.
def Compute_eccu(self)
Method that computes the compressive confined concrete failure strain.
Class that is the children of GMP1970 and combine the class RCRectShape (section) to retrieve the inf...
def __init__(self, int ID, RCRectShape section, b=0.02, R0=20.0, cR1=0.9, cR2=0.08, a1=0.039, a2=1.0, a3=0.029, a4=1.0)
Constructor of the class.
Class that stores funcions and material properties of the vertical steel reinforcement bars with Giuf...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def ShowInfo(self)
Implementation of the homonym abstract method.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def ReInit(self)
Implementation of the homonym abstract method.
def Steel02(self)
Generate the material model Steel02 uniaxial Giuffre-Menegotto-Pinto steel material with isotropic st...
def __init__(self, int ID, fy, Ey, b=0.02, R0=20, cR1=0.9, cR2=0.08, a1=0.039, a2=1.0, a3=0.029, a4=1.0)
Constructor of the class.
Class that is the children of Gupta1999 and combine the class SteelIShape (section) to retrieve the i...
def __init__(self, int ID, SteelIShape col, SteelIShape beam, t_dp=0.0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0.0, dmg2=0.0, beta=0.0, safety_factor=False)
Constructor of the class.
Class that stores funcions and material properties of a steel double symmetric I-shape profile with G...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def ShowInfo(self, plot=False, block=False)
Implementation of the homonym abstract method.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def __init__(self, int ID, d_c, bf_c, tf_c, I_c, d_b, tf_b, Fy, E, t_p, t_dp=0.0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0.0, dmg2=0.0, beta=0.0, safety_factor=False)
Constructor of the class.
def ReInit(self)
Implementation of the homonym abstract method.
def Hysteretic(self)
Generate the material model Hysteretic (Gupta 1999) using the computed parameters.
Parent abstract class for the storage and manipulation of a material model's information (mechanical ...
def CheckApplicability(self)
Abstract function used to check the applicability of the material model.
Class that is the children of ModifiedIMK and combine the class SteelIShape (section) to retrieve the...
def __init__(self, ID, SteelIShape section, N_G=0, K_factor=3, L_0=-1, L_b=-1, Mc=-1, K=-1, theta_u=-1, safety_factors=False)
Constructor of the class.
Class that stores funcions and material properties of a steel double symmetric I-shape profile with m...
def ComputeMyStar(self)
Method that computes the effective yield moment.
def CheckApplicability(self)
Implementation of the homonym abstract method.
def Computea(self)
Method that computes the strain hardening ratio with the n modification.
def ComputeRefEnergyDissipationCap(self)
Method that computes the reference energy dissipation capacity.
def ShowInfo(self, plot=False, block=False)
Implementation of the homonym abstract method.
def Bilin(self)
Generate the material model Bilin (Modified IMK) using the computed parameters.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def __init__(self, int ID, str Type, d, bf, tf, tw, h_1, Iy_mod, iz, E, Fy, Npl, My, L, N_G=0, K_factor=3, L_0=-1, L_b=-1, Mc=-1, K=-1, theta_u=-1, safety_factors=False)
Constructor of the class.
def ComputeTheta_p(self)
Method that computes the plastic rotation.
def ComputeKe(self)
Method that computes the elastic stiffness.
def ComputeK(self)
Method that computes the residual strength ratio.
def Computea_s(self)
Method that computes the modified strain hardening ratio for the spring.
def ComputeTheta_u(self)
Method that computes the ultimate rotation.
def ComputeMc(self)
Method that computes the capping moment.
def ComputeTheta_y(self)
Method that computes the yield rotation.
def ReInit(self, Mc=-1, K=-1, theta_u=-1)
Implementation of the homonym abstract method.
def ComputeTheta_pc(self)
Method that computes the post capping rotation.
WIP: Class that is the children of Skiadopoulos2021 and it's used for the panel zone spring in a RCS ...
def __init__(self, int ID, SteelIShape beam, d_col, t_fbp=0, t_dp=0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0, dmg2=0, beta=0, safety_factor=False)
Constructor of the class.
Class that is the children of Skiadopoulos2021 and combine the class SteelIShape (section) to retriev...
def __init__(self, int ID, SteelIShape col, SteelIShape beam, t_dp=0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0, dmg2=0, beta=0, safety_factor=False, t_fbp=0)
Constructor of the class.
Class that stores funcions and material properties of a steel double symmetric I-shape profile with S...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def ShowInfo(self, plot=False, block=False)
Implementation of the homonym abstract method.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def ReInit(self)
Implementation of the homonym abstract method.
def Hysteretic(self)
Generate the material model Hysteretic (Skiadopoulos 2021) using the computed parameters.
def __init__(self, int ID, d_c, bf_c, tf_c, I_c, d_b, tf_b, Fy, E, t_p, t_dp=0.0, a_s=0.03, pinchx=0.25, pinchy=0.75, dmg1=0.0, dmg2=0.0, beta=0.0, safety_factor=False, t_fbp=0)
Constructor of the class.
Class that is the children of UVCCalibrated and combine the class RCCircShape (section) to retrieve t...
def __init__(self, int ID, RCCircShape section, calibration='S460NL_25mm_plate')
Constructor of the class.
Class that is the children of UVCCalibrated and combines the class RCRectShape (section) to retrieve ...
def __init__(self, int ID, RCRectShape section, calibration='S460NL_25mm_plate')
Constructor of the class.
Class that is the children of UVCCalibrated and combine the class SteelIShape (section) to retrieve t...
def __init__(self, int ID, SteelIShape section, calibration='S355J2_HEB500_flange')
Constructor of the class.
Class that is the children of UVCCalibrated and combine the class SteelIShape (section) to retrieve t...
def __init__(self, int ID, SteelIShape section, calibration='S355J2_HEB500_web')
Constructor of the class.
Class that is the children of UVC that retrieve calibrated parameters from UVC_calibrated_parameters....
def __init__(self, int ID, str calibration, fy=-1, E=-1)
Constructor of the class.
Class that stores funcions and material properties of a steel profile or reinforcing bar with Updated...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def UVCuniaxial(self)
Generate the material model Updated Voce-Chaboche (UVC) for uniaxial stress states.
def ShowInfo(self)
Implementation of the homonym abstract method.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def ReInit(self)
Implementation of the homonym abstract method.
def __init__(self, int ID, fy, Ey, QInf, b, DInf, a, np.ndarray cK, np.ndarray gammaK)
Constructor of the class.
Class that is the children of UnconfMander1988 and combine the class RCCircShape (section) to retriev...
def __init__(self, int ID, RCCircShape section, ec=1, ecp=1, fct=-1, et=-1, beta=0.1)
Constructor of the class.
Class that is the children of UnconfMander1988 and combine the class RCRectShape (section) to retriev...
def __init__(self, int ID, RCRectShape section, ec=1, ecp=1, fct=-1, et=-1, beta=0.1)
Constructor of the class.
Class that stores funcions and material properties of a RC rectangular or circular section with Mande...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def Concrete04(self)
Generate the material model Concrete04 for unconfined concrete (Mander 1988) using the computed param...
def ReInit(self, ec=1, ecp=1, fct=-1, et=-1)
Implementation of the homonym abstract method.
def Compute_et(self)
Method that computes the tensile concrete yield strain.
def ShowInfo(self, plot=False, block=False, concrete04=True)
Implementation of the homonym abstract method.
def Concrete01(self)
Generate the material model Concrete01 for unconfined concrete using the computed parameters.
def Compute_fct(self)
Method that computes the tensile concrete yield stress.
def Compute_ec(self)
Method that computes the compressive concrete yield strain.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def Compute_ecu(self)
Method that computes the compressive concrete failure strain.
def __init__(self, int ID, fc, Ec, ec=1, ecp=1, fct=-1, et=-1, beta=0.1)
Constructor of the class.
def Compute_ecp(self)
Method that computes the compressive concrete spalling strain.
Class that is the children of UniaxialBilinear and combine the class SteelIShape (section) to retriev...
def __init__(self, int ID, SteelIShape section, b=0.01)
Constructor of the class.
Class that stores funcions and material properties of a simple uniaxial bilinear model with the OpenS...
def CheckApplicability(self)
Implementation of the homonym abstract method.
def ShowInfo(self, plot=False, block=False)
Implementation of the homonym abstract method.
def UpdateStoredData(self)
Implementation of the homonym abstract method.
def ReInit(self)
Implementation of the homonym abstract method.
def Steel01(self)
Generate the material model Steel01 uniaxial bilinear material model.
def __init__(self, int ID, fy, Ey, b=0.01)
Constructor of the class.
Module with the parent abstract class DataManagement.
def Concrete01Funct(fc, ec, fpcu, ecu, discretized_eps)
Function with the equation of the curve of the Concrete01 model.
def PlotConcrete04(fc, Ec, ec, ecu, str Type, ax, ID=0)
Function that plots the confined/unconfined Concrete04 stress-strain curve.
def Concrete04Funct(fc, discretized_eps, ec, Ec)
Function with the equation of the curve of the confined and unconfined concrete (Popovics 1973).
def PlotConcrete01(fc, ec, fpcu, ecu, ax, ID=0)
Function that plots the Concrete01 stress-strain curve.