Skip to content

Commit 431c9eb

Browse files
Merge pull request #73 from robbievanleeuwen/prestress
Add prestressed concrete sections
2 parents 697198a + f939944 commit 431c9eb

23 files changed

+3325
-256
lines changed

README.md

+13-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ through submitting bug reports, feature requests or pull requests. Please read t
3636

3737
## Current Capabilities
3838

39+
### Analysis Types
40+
41+
- [x] Reinforced Concrete
42+
- [x] Steel-Concrete Composite
43+
- [x] Prestressed Concrete
44+
3945
### Material Properties
4046

4147
- [x] Concrete material
@@ -53,10 +59,14 @@ through submitting bug reports, feature requests or pull requests. Please read t
5359
- [x] Stress-strain profiles
5460
- [x] Elastic-plastic
5561
- [x] Elastic-plastic (with hardening)
62+
- [x] Strand material
63+
- [x] Stress-strain profiles
64+
- [x] Elastic-plastic (with hardening)
65+
- [x] PCI journal (1992) non-linear
5666

5767
### Gross Section Properties
5868

59-
- [x] Cross-sectional areas (total, concrete, steel)
69+
- [x] Cross-sectional areas (total, concrete, steel, strand)
6070
- [x] Axial rigidity
6171
- [x] Cross-section mass
6272
- [x] Cross-section perimeter
@@ -68,11 +78,12 @@ through submitting bug reports, feature requests or pull requests. Please read t
6878
- [x] Principal second moments of area
6979
- [x] Centroidal section moduli
7080
- [x] Principal section moduli
81+
- [x] Prestressed Aations
7182

7283
### Service Analysis
7384

7485
- [x] Cracking moment
75-
- [x] Cracked second moment of area
86+
- [x] Cracked area properties
7687
- [x] Moment-curvature diagram
7788

7889
### Ultimate Analysis

concreteproperties/analysis_section.py

+20-13
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,16 @@ def get_elastic_stress(
172172

173173
def service_analysis(
174174
self,
175-
point_na: Tuple[float, float],
175+
ecf: Tuple[float, float],
176+
eps0: float,
176177
theta: float,
177178
kappa: float,
178179
centroid: Tuple[float, float],
179180
) -> Tuple[float, float, float, float, float]:
180181
r"""Performs a service stress analysis on the section.
181182
182-
:param point_na: Point on the neutral axis
183-
:param d_n: Depth of the neutral axis from the extreme compression fibre
183+
:param ecf: Global coordinate of the extreme compressive fibre
184+
:param eps0: Strain at top fibre
184185
:param theta: Angle (in radians) the neutral axis makes with the
185186
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
186187
:param kappa: Curvature
@@ -204,7 +205,8 @@ def service_analysis(
204205
el_min_strain,
205206
el_max_strain,
206207
) = el.calculate_service_actions(
207-
point_na=point_na,
208+
ecf=ecf,
209+
eps0=eps0,
208210
theta=theta,
209211
kappa=kappa,
210212
centroid=centroid,
@@ -220,18 +222,18 @@ def service_analysis(
220222

221223
def get_service_stress(
222224
self,
223-
d_n: float,
224225
kappa: float,
225-
point_na: Tuple[float, float],
226+
ecf: Tuple[float, float],
227+
eps0: float,
226228
theta: float,
227229
centroid: Tuple[float, float],
228230
) -> Tuple[np.ndarray, float, float, float]:
229231
r"""Given the neutral axis depth `d_n` and curvature `kappa` determines the
230232
service stresses within the section.
231233
232-
:param d_n: Neutral axis depth
233234
:param kappa: Curvature
234-
:param point_na: Point on the neutral axis
235+
:param ecf: Global coordinate of the extreme compressive fibre
236+
:param eps0: Strain at top fibre
235237
:param theta: Angle (in radians) the neutral axis makes with the
236238
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
237239
:param centroid: Centroid about which to take moments
@@ -248,7 +250,8 @@ def get_service_stress(
248250
# get strain at node
249251
strain = utils.get_service_strain(
250252
point=(node[0], node[1]),
251-
point_na=point_na,
253+
ecf=ecf,
254+
eps0=eps0,
252255
theta=theta,
253256
kappa=kappa,
254257
)
@@ -258,7 +261,8 @@ def get_service_stress(
258261

259262
# calculate total force
260263
n_sec, m_x_sec, m_y_sec, _, _ = self.service_analysis(
261-
point_na=point_na,
264+
ecf=ecf,
265+
eps0=eps0,
262266
theta=theta,
263267
kappa=kappa,
264268
centroid=centroid,
@@ -607,14 +611,16 @@ def calculate_elastic_actions(
607611

608612
def calculate_service_actions(
609613
self,
610-
point_na: Tuple[float, float],
614+
ecf: Tuple[float, float],
615+
eps0: float,
611616
theta: float,
612617
kappa: float,
613618
centroid: Tuple[float, float],
614619
) -> Tuple[float, float, float, float, float]:
615620
r"""Calculates service actions for the current finite element.
616621
617-
:param point_na: Point on the neutral axis
622+
:param ecf: Global coordinate of the extreme compressive fibre
623+
:param eps0: Strain at top fibre
618624
:param theta: Angle (in radians) the neutral axis makes with the
619625
horizontal axis (:math:`-\pi \leq \theta \leq \pi`)
620626
:param kappa: Curvature
@@ -645,7 +651,8 @@ def calculate_service_actions(
645651
# get strain at gauss point
646652
strain = utils.get_service_strain(
647653
point=(x, y),
648-
point_na=point_na,
654+
ecf=ecf,
655+
eps0=eps0,
649656
theta=theta,
650657
kappa=kappa,
651658
)

0 commit comments

Comments
 (0)