3. Analysis#
This section of the documentation outlines how to perform analyses in concreteproperties. The Results section outlines how to retrieve and display the results obtained from these analyses.
An analysis in concreteproperties begins by creating a
ConcreteSection
object from a
CompoundGeometry
object with assigned
material properties.
- class ConcreteSection(geometry, moment_centroid=None, geometric_centroid_override=False)[source]
Class for a reinforced concrete section.
Inits the ConcreteSection class.
- Parameters
geometry (
CompoundGeometry
) – sectionproperties CompoundGeometry object describing the reinforced concrete sectionmoment_centroid (
Optional
[Tuple
[float
,float
]], default:None
) – If specified, all moments for service and ultimate analyses are calculated about this point. If not specified, all moments are calculated about the gross cross-section centroid, i.e. no material properties applied.geometric_centroid_override (
bool
, default:False
) – If set to True, setsmoment_centroid
to the geometric centroid i.e. material properties applied (useful for composite section analysis)
If a prestressed concrete section is being analysed, a
PrestressedSection
object must be used
instead of a ConcreteSection
object, see
Prestressed Analysis.
Warning
If the cross-section geometry contains a
SteelStrand
material object, a ValueError
will be raised if trying to create a
ConcreteSection
object.
3.1. Visualising the Cross-Section#
The ConcreteSection
object can be
visualised by calling the
plot_section()
method.
- ConcreteSection.plot_section(title='Reinforced Concrete Section', background=False, **kwargs)[source]
Plots the reinforced concrete section.
- Parameters
title (
str
, default:'Reinforced Concrete Section'
) – Plot titlebackground (
bool
, default:False
) – If set to True, uses the plot as a background plotkwargs – Passed to
plotting_context()
- Returns
Axes
– Matplotlib axes object
3.2. Gross Area Properties#
Upon creating a ConcreteSection
object,
concreteproperties will automatically calculate the area properties based on the gross
reinforced concrete cross-section.
See also
For an application of the above, see the example Calculating Area Properties.
3.3. Cracked Area Properties#
The area properties of the cracked cross-section can be determined by calling the
calculate_cracked_properties()
method. By default the cracked properties are calculated for bending about the x
axis, but this can be modified by providing a bending axis angle theta
.
- ConcreteSection.calculate_cracked_properties(theta=0)[source]
Calculates cracked section properties given a neutral axis angle
theta
.- Parameters
theta (
float
, default:0
) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\))- Returns
CrackedResults
– Cracked results object
The cracking moment is determined assuming cracking occurs once the stress in the
concrete reaches the flexural_tensile_strength
. Cracked properties are calculated
assuming the concrete is linear elastic and can only resist compression.
See also
For an application of the above, see the example Calculating Cracked Properties.
3.4. Moment Curvature Analysis#
A moment curvature analysis can be performed on the reinforced concrete cross-section
by calling the
moment_curvature_analysis()
method. By default the moment curvature analysis is calculated for bending about the
x
axis, but this can be modified by providing a bending axis angle theta
.
- ConcreteSection.moment_curvature_analysis(theta=0, n=0, kappa0=0, kappa_inc=1e-07, kappa_mult=2, kappa_inc_max=5e-06, delta_m_min=0.15, delta_m_max=0.3, progress_bar=True)[source]
Performs a moment curvature analysis given a bending angle
theta
and applied axial forcen
.Analysis continues until a material reaches its ultimate strain.
- Parameters
theta (
float
, default:0
) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\))n (
float
, default:0
) – Axial forcekappa0 (
float
, default:0
) – Initial curvaturekappa_inc (
float
, default:1e-07
) – Initial curvature incrementkappa_mult (
float
, default:2
) – Multiplier to apply to the curvature incrementkappa_inc
whendelta_m_max
is satisfied. Whendelta_m_min
is satisfied, the inverse of this multipler is applied tokappa_inc
.kappa_inc_max (
float
, default:5e-06
) – Maximum curvature incrementdelta_m_min (
float
, default:0.15
) – Relative change in moment at which to reduce the curvature incrementdelta_m_max (
float
, default:0.3
) – Relative change in moment at which to increase the curvature incrementprogress_bar (
bool
, default:True
) – If set to True, displays the progress bar
- Returns
MomentCurvatureResults
– Moment curvature results object
This analysis uses the stress_strain_profile
given to the
Concrete
and
Steel
material properties to calculate a moment
curvature response. The analysis is displacement controlled with an adaptive curvature
increment controlled by the parameters kappa_inc
, kappa_mult
, kappa_inc_max
,
delta_m_min
and delta_m_max
.
See also
For an application of the above, see the example Moment Curvature Analysis.
3.5. Ultimate Bending Capacity#
The ultimate bending capacity of the reinforced concrete cross-section can be calculated
by calling the
ultimate_bending_capacity()
method. By default the ultimate bending capacity is calculated for bending about the
x
axis with zero axial force, but this can be modified by providing a bending axis
angle theta
and axial force n
.
- ConcreteSection.ultimate_bending_capacity(theta=0, n=0)[source]
Given a neutral axis angle
theta
and an axial forcen
, calculates the ultimate bending capacity.Note
This calculation is code agnostic and no capacity reduction factors are applied. If design capacities are required, use the applicable
design_code
module or consult your local design code on how to treat nominal axial loads in ultimate bending calculations.Note that
k_u
is calculated only for lumped (non-meshed) geometries.- Parameters
theta (
float
, default:0
) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\))n (
float
, default:0
) – Net axial force (nominal axial load)
- Returns
UltimateBendingResults
– Ultimate bending results object
This analysis uses the ultimate_stress_strain_profile
given to the
Concrete
materials and the
stress_strain_profile
given to the Steel
materials. The ultimate strain profile within the cross-section is determined by setting
the strain at the extreme compressive fibre to the ultimate_strain
parameter (see
Concrete Ultimate Stress-Strain Profiles) and finding the neutral axis that satisfies the
equilibrium of axial forces.
See also
For an application of the above, see the example Ultimate Bending Capacity.
3.6. Moment Interaction Diagram#
A moment interaction diagram can be generated for the reinforced concrete cross-section
by calling the
moment_interaction_diagram()
method. By default the moment interaction diagram is generated for bending about the
x
axis, but this can be modified by providing a bending axis angle theta
.
The moment interaction diagram is generated by shifting the neutral axis throughout the
cross-section between the limits
using either n_points
or n_spacing
.
Additional control_points
can be added to the analysis.
- ConcreteSection.moment_interaction_diagram(theta=0, limits=[('D', 1.0), ('d_n', 1e-06)], control_points=[('kappa0', 0.0), ('fy', 1.0), ('N', 0.0)], labels=None, n_points=24, n_spacing=None, max_comp=None, max_comp_labels=None, progress_bar=True)[source]
Generates a moment interaction diagram given a neutral axis angle
theta
.limits
andcontrol_points
accept a list of tuples that define points on the moment interaction diagram. The first item in the tuple defines the type of control points, while the second item defines the location of the control point. Types of control points are detailed below:Control points
"D"
- ratio of neutral axis depth to section depth"d_n"
- neutral axis depth"fy"
- yield ratio of the most extreme tensile bar"N"
- net (nominal) axial force"kappa0"
- zero curvature compression (N.B second item in tuple is not used)
- Parameters
theta (
float
, default:0
) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\))limits (
List
[Tuple
[str
,float
]], default:[('D', 1.0), ('d_n', 1e-06)]
) – List of control points that define the start and end of the interaction diagram. List length must equal two. The default limits range from concrete decompression strain to zero curvature tension.control_points (
List
[Tuple
[str
,float
]], default:[('kappa0', 0.0), ('fy', 1.0), ('N', 0.0)]
) – List of additional control points to add to the moment interatction diagram. The default control points include the pure compression point (kappa0
), the balanced point (fy=1
) and the pure bending point (N=0
). Control points may lie outside the limits of the moment interaction diagram as long as equilibrium can be found.labels (
Optional
[List
[str
]], default:None
) – List of labels to apply to thelimits
andcontrol_points
for plotting purposes. The first two values inlabels
apply labels to thelimits
, the remaining values apply labels to thecontrol_points
. If a single value is provided, this value will be applied to bothlimits
and allcontrol_points
. The length oflabels
must equal1
or2 + len(control_points)
.n_points (
int
, default:24
) – Number of points to compute including and between thelimits
of the moment interaction diagram. Generates equally spaced neutral axis depths between thelimits
.n_spacing (
Optional
[int
], default:None
) – If provided, overridesn_points
and generates the moment interaction diagram usingn_spacing
equally spaced axial loads. Note that usingn_spacing
negatively affects performance, as the neutral axis depth must first be located for each point on the moment interaction diagram.max_comp (
Optional
[float
], default:None
) – If provided, limits the maximum compressive force in the moment interaction diagram tomax_comp
max_comp_labels (
Optional
[List
[str
]], default:None
) – Labels to apply to themax_comp
intersection points, first value is at zero moment, second value is at the intersection with the interaction diagramprogress_bar (
bool
, default:True
) – If set to True, displays the progress bar
- Returns
MomentInteractionResults
– Moment interaction results object
See also
For an application of the above, see the example Moment Interaction Diagram.
3.7. Biaxial Bending Diagram#
A biaxial bending diagram can be generated for the reinforced concrete cross-section,
by calling the
biaxial_bending_diagram()
method. By default the biaxial bending diagram is generated for pure bending, but this
can be modified by providing an axial force n
.
The biaxial bending diagram is generated by rotating the bending axis angle through its
permissable range \(-\pi \leq \theta \leq \pi\) and calculating the resultant
ultimate bending moments about the x
and y
axes.
- ConcreteSection.biaxial_bending_diagram(n=0, n_points=48, progress_bar=True)[source]
Generates a biaxial bending diagram given a net axial force
n
andn_points
calculation points.- Parameters
n (
float
, default:0
) – Net axial forcen_points (
int
, default:48
) – Number of calculation pointsprogress_bar (
bool
, default:True
) – If set to True, displays the progress bar
- Returns
BiaxialBendingResults
– Biaxial bending results
See also
For an application of the above, see the example Biaxial Bending Diagram.
3.8. Stress Analysis#
concreteproperties allows you to perform four different kinds of stress analysis. Each is detailed separately below.
See also
For an application of stress analysis, see the example Stress Analysis.
3.8.1. Uncracked Stress#
A stress analysis can be performed on the gross reinforced concrete cross-section by
calling the
calculate_uncracked_stress()
method.
- ConcreteSection.calculate_uncracked_stress(n=0, m_x=0, m_y=0)[source]
Calculates stresses within the reinforced concrete section assuming an uncracked section.
Uses gross area section properties to determine concrete and reinforcement stresses given an axial force
n
, and bending momentsm_x
andm_y
.- Parameters
n (
float
, default:0
) – Axial forcem_x (
float
, default:0
) – Bending moment about the x-axism_y (
float
, default:0
) – Bending moment about the y-axis
- Returns
StressResult
– Stress results object
Note
Forces/moments are assumed to be acting at the geometric centroid, i.e. cx
and
cy
in
get_gross_properties()
3.8.2. Cracked Stress#
A stress analysis can be performed on the cracked reinforced concrete cross-section by
calling the
calculate_cracked_stress()
method. Prior to calling this method, the cracked properties must be calculated using
the calculate_cracked_properties()
method and these results passed to
calculate_cracked_stress()
.
- ConcreteSection.calculate_cracked_stress(cracked_results, n=0, m=0)[source]
Calculates stresses within the reinforced concrete section assuming a cracked section.
Uses cracked area section properties to determine concrete and reinforcement stresses given an axial force
n
and bending momentm
about the bending axis stored incracked_results
.- Parameters
cracked_results (
CrackedResults
) – Cracked results objectsn (
float
, default:0
) – Axial forcem (
float
, default:0
) – Bending moment
- Returns
StressResult
– Stress results object
Note
Forces/moments are assumed to be acting at the geometric centroid, i.e. cx
and
cy
in
get_gross_properties()
3.8.3. Service Stress#
A service stress analysis can be performed on the reinforced concrete cross-section by
calling the
calculate_service_stress()
method. Prior to calling this method, a moment curvature analysis must be performed by
calling the
moment_curvature_analysis()
method and these results passed to
calculate_service_stress()
.
- ConcreteSection.calculate_service_stress(moment_curvature_results, m, kappa=None)[source]
Calculates service stresses within the reinforced concrete section.
Uses linear interpolation of the moment-curvature results to determine the curvature of the section given the user supplied moment, and thus the stresses within the section. Otherwise, a curvature can be provided which overrides the supplied moment.
- Parameters
moment_curvature_results (
MomentCurvatureResults
) – Moment-curvature results objectsm (
float
) – Bending momentkappa (
Optional
[float
], default:None
) – Curvature, if provided overrides the supplied bending moment and calculates the stress at the given curvature
- Returns
StressResult
– Stress results object
Note
Forces/moments are assumed to be acting at the gross centroid, i.e. cx_gross
and
cy_gross
in
get_gross_properties()
3.8.4. Ultimate Stress#
An ultimate stress analysis can be performed on the reinforced concrete cross-section by
calling the
calculate_ultimate_stress()
method. Prior to calling this method, the ultimate bending capacity must be calculated
by calling the
ultimate_bending_capacity()
method and these results passed to
calculate_ultimate_stress()
.
- ConcreteSection.calculate_ultimate_stress(ultimate_results)[source]
Calculates ultimate stresses within the reinforced concrete section.
- Parameters
ultimate_results (
UltimateBendingResults
) – Ultimate bending results objects- Returns
StressResult
– Stress results object
Note
Forces/moments are assumed to be acting at the gross centroid, i.e. cx_gross
and
cy_gross
in
get_gross_properties()