Replies: 2 comments 6 replies
-
@afugur - FYI - Note I'm actually working at the moment on a specific implementation of this which relates to the New Zealand code implementation of the mander confined and unconfined concrete models. I get the same warning when doing a moment curvature analysis (right at the start). Not looked into why yet, but I suspect it is possibly due to the brentq algorithm picking a value for the neutral axis that is beyond the failure strain of the concrete or steel possibly? My curve for comparison, not 100% if the curve needs to return to zero or horizontal (was going to ask this question @robbievanleeuwen ?) as noted in the Eurocode curve a small horizontal return at both ends of the min/max strain regions had been added. (NZ implementation caps the max compressive strain at 0.004 which is why it does not return to spalling strain like your curve. Note I tried your code @afugur and something must have changed in later versions of |
Beta Was this translation helpful? Give feedback.
-
@Agent6-6-6 firstly thanks for your answer. I use the v0.21 of concrete properties because of that I haven't removed the alpha squash. I agreed with this "Not looked into why yet, but I suspect it is possibly due to the brentq algorithm picking a value for the neutral axis that is beyond the failure strain of the concrete or steel possibly?" Maybe this depends on split_section_at_strains function. def split_section_at_strains(
concrete_geometries: List[Geometry],
theta: float,
point_na: Tuple[float],
ultimate: bool,
ultimate_strain: float = None,
d_n: float = None,
kappa: float = None,
) -> List[Geometry]:
r"""Splits concrete geometries at discontinuities in its stress-strain profile.
:param concrete_geometries: List of concrete geometries
:type concrete_geometries: List[Geometry]
:param float theta: Angle (in radians) the neutral axis makes with the horizontal
axis (:math:`-\pi \leq \theta \leq \pi`)
:param point_na: Point on the neutral axis
:type point_na: Tuple[float]
:param bool ultimate: If set to True, uses ultimate stress-strain profile
:param float ultimate_strain: Concrete strain at failure
:param float d_n: Depth of the neutral axis from the extreme compression fibre
:param float kappa: Curvature
:return: List of split geometries
:rtype: List[:class:`sectionproperties.pre.geometry.Geometry`]
"""
# create splits in concrete geometries at points in stress-strain profiles
concrete_split_geoms = []
for conc_geom in concrete_geometries:
if ultimate:
strains = (
conc_geom.material.ultimate_stress_strain_profile.get_unique_strains()
)
else:
strains = conc_geom.material.stress_strain_profile.get_unique_strains()
# loop through intermediate points on stress-strain profile
for idx, strain in enumerate(strains[1:-1]):
# depth to point with `strain` from NA
if ultimate:
d = strain / ultimate_strain * d_n
else:
d = strain / kappa
# convert depth to global coordinates
dx, dy = global_coordinate(phi=theta * 180 / np.pi, x11=0, y22=d)
# calculate location of point with `strain`
pt = point_na[0] + dx, point_na[1] + dy
# split concrete geometry (from bottom up)
top_geoms, bot_geoms = split_section(
geometry=conc_geom,
point=pt,
theta=theta,
)
# save bottom geoms
concrete_split_geoms.extend(bot_geoms)
# continue to split top geoms
conc_geom = CompoundGeometry(geoms=top_geoms)
# save final top geoms
concrete_split_geoms.extend(top_geoms)
return concrete_split_geoms |
Beta Was this translation helpful? Give feedback.
-
Hello mr.@robbievanleeuwen,
I want to add Unconfined-Mander concrete model reference from Turkey Building Earthquake Code-2018. I tried to make this like EurocodeNonLinear class which it is in Concreteproperties library. Also I want this concrete model tension strength is zero. If I make this I take this error --> "brentq algorithm failed."
Is it possible to add this model in Concrete Properties ?
My Stress-Strain Profile Code:
Stress-strain profile graph is like this.
scipy version ==> 1.6.2
Beta Was this translation helpful? Give feedback.
All reactions