Prestressed Analysis#

This section of the documentation outlines how to perform analyses of prestressed concrete sections in concreteproperties.

An prestressed analysis in concreteproperties begins by creating a PrestressedSection object from a CompoundGeometry object with assigned material properties.

class concreteproperties.prestressed_section.PrestressedSection(geometry: CompoundGeometry, moment_centroid: tuple[float, float] | None = None, geometric_centroid_override: bool = True)[source]

Class for a prestressed concrete section.

Note

Prestressed concrete sections analysed in concreteproperties must be symmetric about their vertical (y) axis, with all flexure assumed to be about the x axis.

Warning

The only meshed geometries that are permitted are concrete geometries.

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

Inits the ConcreteSection class.

Parameters:
  • geometry (CompoundGeometry) – sectionproperties CompoundGeometry object describing the prestressed 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.

  • geometric_centroid_override (bool) – If set to True, sets moment_centroid to the geometric centroid i.e. material properties applied

Raises:
  • ValueError – If the section is not symmetric about the y-axis

  • ValueError – If meshed reinforcement geometries are provided

Note

The internal axial force and bending moment generated by the prestressing strands is automatically included in all analyses.

See also

See Prestressed Sections for an example on how to conduct a prestressed analysis with concreteproperties.

Visualising the Cross-Section#

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

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

Plots the reinforced concrete section.

Parameters:
  • title (str) – Plot title

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

  • kwargs – Passed to plotting_context()

Returns:

Matplotlib axes object

Return type:

matplotlib.axes.Axes

Gross Area Properties#

Upon creating a PrestressedSection object, concreteproperties will automatically calculate the area properties based on the gross prestressed concrete cross-section.

Cracked Area Properties#

The area properties of the cracked cross-section can be determined by calling the calculate_cracked_properties() method.

Unlike regular reinforced concrete sections, the cracked section properties of prestressed sections are sensitive to external loads, e.g. moment due to self-weight. These can be provided to the analysis by providing the arguments m_ext and n_ext.

Note

The combination of m_ext and n_ext, combined with the prestressing actions, must result in tension within the concrete. If the provided loads results in compression across the entire cross-section, a cracked analysis cannot be carried out and a ValueError will be raised. An easy way to test this is to set the flexural tensile strength of the concrete to zero and review the positive and negative cracking moments.

PrestressedSection.calculate_cracked_properties(m_ext: float, n_ext: float = 0) CrackedResults[source]

Calculate cracked section properties.

Calculates cracked section properties given an axial loading and bending moment.

Parameters:
  • m_ext (float) – External bending moment

  • n_ext (float) – External axial force

Raises:

AnalysisError – If the provided loads do not result in tension within the concrete

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.

Moment Curvature Analysis#

A moment curvature analysis can be performed on the prestressed concrete cross-section by calling the moment_curvature_analysis() method.

PrestressedSection.moment_curvature_analysis(positive: bool = True, n: 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]

Performs a moment curvature analysis given an applied axial force n.

Analysis continues until a material reaches its ultimate strain.

Parameters:
  • positive (bool) – If set to True, performs the moment curvature analysis for positive bending, otherwise performs the moment curvature analysis for negative bending

  • n (float) – Axial force

  • kappa_inc (float) – Initial curvature increment

  • 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.

  • kappa_inc_max (float) – Maximum curvature increment

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

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

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

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.

Ultimate Bending Capacity#

The ultimate bending capacity of the prestressed concrete cross-section can be calculated by calling the ultimate_bending_capacity() method.

PrestressedSection.ultimate_bending_capacity(positive: bool = True, n: float = 0) UltimateBendingResults[source]

Given axial force n, calculates the ultimate bending capacity.

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

Parameters:
  • positive (bool) – If set to True, calculates the positive bending capacity, otherwise calculates the negative bending capacity.

  • n (float) – Net axial force

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.

Moment Interaction Diagram#

Attention

Moment interaction diagrams for prestressed concrete sections are not yet implemented.

Biaxial Bending Diagram#

Attention

Biaxial bending diagrams for prestressed concrete sections are not yet implemented.

Stress Analysis#

concreteproperties allows you to perform four different kinds of stress analysis. Each is detailed separately below.

Uncracked Stress#

A stress analysis can be performed on the gross prestressed concrete cross-section by calling the calculate_uncracked_stress() method.

PrestressedSection.calculate_uncracked_stress(n: float = 0, m: float = 0) StressResult[source]

Calculates uncracked streses.

Calculates stresses within the prestressed concrete section assuming an uncracked section. Uses gross area section properties to determine concrete, reinforcement and strand stresses given an axial force n and bending moment m.

Parameters:
  • n (float) – Axial force

  • m (float) – Bending moment

Returns:

Stress results object

Return type:

StressResult

Cracked Stress#

A stress analysis can be performed on the cracked prestressed 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().

Note

Unlike ConcreteSection.calculate_cracked_stress(), the external forces for the cracked stress analysis are supplied to the PrestressedSection.calculate_cracked_properties() method prior to calling PrestressedSection.calculate_cracked_stress().

PrestressedSection.calculate_cracked_stress(cracked_results: CrackedResults) StressResult[source]

Calculates cracked streses.

Calculates stresses within the prestressed concrete section assuming a cracked section. Uses cracked area section properties to determine concrete, reinforcement and strand stresses given the actions provided during the cracked analysis.

Parameters:

cracked_results (CrackedResults) – Cracked results objects

Returns:

Stress results object

Return type:

StressResult

Service Stress#

A service stress analysis can be performed on the prestressed 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().

PrestressedSection.calculate_service_stress(moment_curvature_results: MomentCurvatureResults, m: float, kappa: float | None = None) StressResult[source]

Calculates service stresses within the prestressed 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

Raises:

AnalysisError – If the analysis fails

Returns:

Stress results object

Return type:

StressResult

Ultimate Stress#

An ultimate stress analysis can be performed on the prestressed 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().

PrestressedSection.calculate_ultimate_stress(ultimate_results: UltimateBendingResults) StressResult[source]

Calculates ultimate stresses within the prestressed concrete section.

Parameters:

ultimate_results (UltimateBendingResults) – Ultimate bending results objects

Returns:

Stress results object

Return type:

StressResult