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 concreteproperties.concrete_section.ConcreteSection(geometry: CompoundGeometry, moment_centroid: tuple[float, float] | None = None, geometric_centroid_override: bool = False)[source]

Class for a reinforced concrete section.

__init__(geometry: CompoundGeometry, moment_centroid: tuple[float, float] | None = None, geometric_centroid_override: bool = False) None[source]

Inits the ConcreteSection class.

Parameters:
  • geometry (CompoundGeometry) – sectionproperties CompoundGeometry object describing the reinforced concrete section

  • moment_centroid (tuple[float, float] | 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. Defaults to None.

  • geometric_centroid_override (bool) – If set to True, sets moment_centroid to the geometric centroid i.e. material properties applied (useful for composite section analysis). Defaults to False.

Raises:

ValueError – If steel strand materials are detected, use a PrestressedSection instead

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.

Visualising the Cross-Section

The ConcreteSection object can be visualised by calling the plot_section() method.

ConcreteSection.plot_section(title: str = 'Reinforced Concrete Section', background: bool = False, **kwargs) matplotlib.axes.Axes[source]

Plots the reinforced concrete section.

Parameters:
  • title (str) – Plot title. Defaults to "Reinforced Concrete Section".

  • background (bool) – If set to True, uses the plot as a background plot. Defaults to False.

  • kwargs – Passed to plotting_context()

Returns:

Matplotlib axes object

Return type:

matplotlib.axes.Axes

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.

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: float = 0) CrackedResults[source]

Calculates cracked section properties given a neutral axis angle theta.

Parameters:

theta (float) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\)). Defaults to 0.

Raises:

AnalysisError – If the analysis fails

Returns:

Cracked results object

Return type:

CrackedResults

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.

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: float = 0, n: float = 0, kappa0: float = 0, kappa_inc: float = 1e-07, kappa_mult: float = 2, kappa_inc_max: float = 5e-06, delta_m_min: float = 0.15, delta_m_max: float = 0.3, progress_bar: bool = True) MomentCurvatureResults[source]

Moment curvature analysis.

Performs a moment curvature analysis given a bending angle theta and applied axial force n. Analysis continues until a material reaches its ultimate strain.

Parameters:
  • theta (float) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\)). Defaults to 0.

  • n (float) – Axial force. Defaults to 0.

  • kappa0 (float) – Initial curvature. Defaults to 0.

  • kappa_inc (float) – Initial curvature increment. Defaults to 1e-7.

  • kappa_mult (float) – Multiplier to apply to the curvature increment kappa_inc when delta_m_max is satisfied. When delta_m_min is satisfied, the inverse of this multipler is applied to kappa_inc. Defaults to 2.

  • kappa_inc_max (float) – Maximum curvature increment. Defaults to 5e-6.

  • delta_m_min (float) – Relative change in moment at which to reduce the curvature increment. Defaults to 0.15.

  • delta_m_max (float) – Relative change in moment at which to increase the curvature increment. Defaults to 0.3.

  • progress_bar (bool) – If set to True, displays the progress bar. Defaults to True.

Returns:

Moment curvature results object

Return type:

MomentCurvatureResults

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.

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: float = 0, n: float = 0) UltimateBendingResults[source]

Calculates ultiamte bending capacity.

Given a neutral axis angle theta and an axial force n, 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

k_u is calculated only for lumped (non-meshed) geometries.

Parameters:
  • theta (float) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\)). Defaults to 0.

  • n (float) – Net axial force (nominal axial load). Defaults to 0.

Raises:

AnalysisError – If the analysis fails

Returns:

Ultimate bending results object

Return type:

UltimateBendingResults

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.

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: float = 0, limits: list[tuple[str, float]] | None = None, control_points: list[tuple[str, float]] | None = None, labels: list[str] | None = None, n_points: int = 24, n_spacing: int | None = None, max_comp: float | None = None, max_comp_labels: list[str] | None = None, progress_bar: bool = True) MomentInteractionResults[source]

Generates a moment interaction diagram given a neutral axis angle theta.

limits and control_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) – Angle (in radians) the neutral axis makes with the horizontal axis (\(-\pi \leq \theta \leq \pi\))

  • limits (list[tuple[str, float]] | None) – 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, i.e. [("D", 1.0), ("d_n", 1e-6)]. Defaults to None.

  • control_points (list[tuple[str, float]] | None) – 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), i.e. [("kappa0", 0.0), ("fy", 1.0), ("N", 0.0)]. Control points may lie outside the limits of the moment interaction diagram as long as equilibrium can be found. Defaults to None.

  • labels (list[str] | None) – List of labels to apply to the limits and control_points for plotting purposes. The first two values in labels apply labels to the limits, the remaining values apply labels to the control_points. If a single value is provided, this value will be applied to both limits and all control_points. The length of labels must equal 1 or 2 + len(control_points). Defaults to None.

  • n_points (int) – Number of points to compute including and between the limits of the moment interaction diagram. Generates equally spaced neutral axis depths between the limits. Defaults to 24.

  • n_spacing (int | None) – If provided, overrides n_points and generates the moment interaction diagram using n_spacing equally spaced axial loads. Note that using n_spacing negatively affects performance, as the neutral axis depth must first be located for each point on the moment interaction diagram. Defaults to None.

  • max_comp (float | None) – If provided, limits the maximum compressive force in the moment interaction diagram to max_comp. Defaults to None.

  • max_comp_labels (list[str] | None) – Labels to apply to the max_comp intersection points, first value is at zero moment, second value is at the intersection with the interaction diagram

  • progress_bar (bool) – If set to True, displays the progress bar. Defaults to True.

Raises:
  • ValueError – Length of limits must equal 2

  • ValueError – Length of labels must be 1 or 2 + len(control_points)

  • ValueError – If max_comp is greater than the maximum axial capacity

Returns:

Moment interaction results object

Return type:

MomentInteractionResults

See also

For an application of the above, see the example Moment Interaction Diagram.

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: float = 0, n_points: int = 48, progress_bar: bool = True) BiaxialBendingResults[source]

Generates a biaxial bending diagram.

Generates a biaxial bending diagram given a net axial force n and n_points calculation points.

Parameters:
  • n (float) – Net axial force. Defaults to 0.

  • n_points (int) – Number of calculation points. Defaults to 48.

  • progress_bar (bool) – If set to True, displays the progress bar. Defaults to True.

Returns:

Biaxial bending results

Return type:

BiaxialBendingResults

See also

For an application of the above, see the example Biaxial Bending Diagram.

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.

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: float = 0, m_x: float = 0, m_y: float = 0) StressResult[source]

Calculates uncracked stresses.

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 moments m_x and m_y.

Parameters:
  • n (float) – Axial force. Defaults to 0.

  • m_x (float) – Bending moment about the x-axis. Defaults to 0.

  • m_y (float) – Bending moment about the y-axis. Defaults to 0.

Returns:

Stress results object

Return type:

StressResult

Note

Forces/moments are assumed to be acting at the geometric centroid, i.e. cx and cy in get_gross_properties()

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: CrackedResults, n: float = 0, m: float = 0) StressResult[source]

Calculates cracked stresses.

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 moment m about the bending axis stored in cracked_results.

Parameters:
  • cracked_results (CrackedResults) – Cracked results objects

  • n (float) – Axial force. Defaults to 0.

  • m (float) – Bending moment. Defaults to 0.

Returns:

Stress results object

Return type:

StressResult

Note

Forces/moments are assumed to be acting at the geometric centroid, i.e. cx and cy in get_gross_properties()

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: MomentCurvatureResults, m: float, kappa: float | None = None) StressResult[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 objects

  • m (float) – Bending moment

  • kappa (float | None) – Curvature, if provided overrides the supplied bending moment and calculates the stress at the given curvature. Defaults to None.

Raises:

AnalysisError – If the stress analysis fails

Returns:

Stress results object

Return type:

StressResult

Note

Forces/moments are assumed to be acting at the gross centroid, i.e. cx_gross and cy_gross in get_gross_properties()

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: UltimateBendingResults) StressResult[source]

Calculates ultimate stresses within the reinforced concrete section.

Parameters:

ultimate_results (UltimateBendingResults) – Ultimate bending results objects

Returns:

Stress results object

Return type:

StressResult

Note

Forces/moments are assumed to be acting at the gross centroid, i.e. cx_gross and cy_gross in get_gross_properties()