Skip to content

Add prestressed concrete sections #73

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 21 commits into from
Dec 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8bb139b
Start adding prestressing
robbievanleeuwen Oct 31, 2022
5ea46c9
Add calculation of prestressing actions
robbievanleeuwen Nov 7, 2022
75432a2
Add PrestressedConcrete class
robbievanleeuwen Nov 7, 2022
0486874
Move PrestressedSection to own module; implement cracked analysis
robbievanleeuwen Nov 8, 2022
8916358
Update prestress test notebooks
robbievanleeuwen Nov 8, 2022
f10843c
Modify service analysis, based on eps0 rather than d_n
robbievanleeuwen Nov 11, 2022
dc3459b
Fix service_stress; fix bug in split_geom_at_strains_service
robbievanleeuwen Nov 11, 2022
67fc6d7
Add moment curvature for prestressed
robbievanleeuwen Nov 14, 2022
4ca5f7d
Prestress service stress; update examples
robbievanleeuwen Nov 14, 2022
6f12181
Ultimate capacity and stress; fix service/mk bug
robbievanleeuwen Nov 25, 2022
0121306
Fix strand stress-strain definition; start to add PCI
robbievanleeuwen Nov 25, 2022
3365670
Finish PCI 1992
robbievanleeuwen Nov 25, 2022
321d2c1
Update prestress docs; cracking analysis bug fix; allow negative bend…
robbievanleeuwen Dec 18, 2022
d83339b
Merge branch 'master' into prestress
robbievanleeuwen Dec 18, 2022
e9fe9b6
Add prestress test file
robbievanleeuwen Dec 18, 2022
a74c24d
Fix prestressed moment centroid; add prestressed validation tests
robbievanleeuwen Dec 19, 2022
41f2efa
Fix cracked analysis bug; add more prestress tests
robbievanleeuwen Dec 19, 2022
c78a266
Change prestressing force to stress
robbievanleeuwen Dec 19, 2022
dcfd1d9
Prestress example
robbievanleeuwen Dec 20, 2022
cd18c58
Update README
robbievanleeuwen Dec 20, 2022
f939944
Fix prestress workbook bug
robbievanleeuwen Dec 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ through submitting bug reports, feature requests or pull requests. Please read t

## Current Capabilities

### Analysis Types

- [x] Reinforced Concrete
- [x] Steel-Concrete Composite
- [x] Prestressed Concrete

### Material Properties

- [x] Concrete material
Expand All @@ -53,10 +59,14 @@ through submitting bug reports, feature requests or pull requests. Please read t
- [x] Stress-strain profiles
- [x] Elastic-plastic
- [x] Elastic-plastic (with hardening)
- [x] Strand material
- [x] Stress-strain profiles
- [x] Elastic-plastic (with hardening)
- [x] PCI journal (1992) non-linear

### Gross Section Properties

- [x] Cross-sectional areas (total, concrete, steel)
- [x] Cross-sectional areas (total, concrete, steel, strand)
- [x] Axial rigidity
- [x] Cross-section mass
- [x] Cross-section perimeter
Expand All @@ -68,11 +78,12 @@ through submitting bug reports, feature requests or pull requests. Please read t
- [x] Principal second moments of area
- [x] Centroidal section moduli
- [x] Principal section moduli
- [x] Prestressed Aations

### Service Analysis

- [x] Cracking moment
- [x] Cracked second moment of area
- [x] Cracked area properties
- [x] Moment-curvature diagram

### Ultimate Analysis
Expand Down
33 changes: 20 additions & 13 deletions concreteproperties/analysis_section.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,16 @@ def get_elastic_stress(

def service_analysis(
self,
point_na: Tuple[float, float],
ecf: Tuple[float, float],
eps0: float,
theta: float,
kappa: float,
centroid: Tuple[float, float],
) -> Tuple[float, float, float, float, float]:
r"""Performs a service stress analysis on the section.

:param point_na: Point on the neutral axis
:param d_n: Depth of the neutral axis from the extreme compression fibre
:param ecf: Global coordinate of the extreme compressive fibre
:param eps0: Strain at top fibre
:param theta: Angle (in radians) the neutral axis makes with the
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
:param kappa: Curvature
Expand All @@ -204,7 +205,8 @@ def service_analysis(
el_min_strain,
el_max_strain,
) = el.calculate_service_actions(
point_na=point_na,
ecf=ecf,
eps0=eps0,
theta=theta,
kappa=kappa,
centroid=centroid,
Expand All @@ -220,18 +222,18 @@ def service_analysis(

def get_service_stress(
self,
d_n: float,
kappa: float,
point_na: Tuple[float, float],
ecf: Tuple[float, float],
eps0: float,
theta: float,
centroid: Tuple[float, float],
) -> Tuple[np.ndarray, float, float, float]:
r"""Given the neutral axis depth `d_n` and curvature `kappa` determines the
service stresses within the section.

:param d_n: Neutral axis depth
:param kappa: Curvature
:param point_na: Point on the neutral axis
:param ecf: Global coordinate of the extreme compressive fibre
:param eps0: Strain at top fibre
:param theta: Angle (in radians) the neutral axis makes with the
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
:param centroid: Centroid about which to take moments
Expand All @@ -248,7 +250,8 @@ def get_service_stress(
# get strain at node
strain = utils.get_service_strain(
point=(node[0], node[1]),
point_na=point_na,
ecf=ecf,
eps0=eps0,
theta=theta,
kappa=kappa,
)
Expand All @@ -258,7 +261,8 @@ def get_service_stress(

# calculate total force
n_sec, m_x_sec, m_y_sec, _, _ = self.service_analysis(
point_na=point_na,
ecf=ecf,
eps0=eps0,
theta=theta,
kappa=kappa,
centroid=centroid,
Expand Down Expand Up @@ -607,14 +611,16 @@ def calculate_elastic_actions(

def calculate_service_actions(
self,
point_na: Tuple[float, float],
ecf: Tuple[float, float],
eps0: float,
theta: float,
kappa: float,
centroid: Tuple[float, float],
) -> Tuple[float, float, float, float, float]:
r"""Calculates service actions for the current finite element.

:param point_na: Point on the neutral axis
:param ecf: Global coordinate of the extreme compressive fibre
:param eps0: Strain at top fibre
:param theta: Angle (in radians) the neutral axis makes with the
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
:param kappa: Curvature
Expand Down Expand Up @@ -645,7 +651,8 @@ def calculate_service_actions(
# get strain at gauss point
strain = utils.get_service_strain(
point=(x, y),
point_na=point_na,
ecf=ecf,
eps0=eps0,
theta=theta,
kappa=kappa,
)
Expand Down
Loading