cracking
Summary
Thick-walled expansive cylinder model to calculate internal stress strain through the concrete cover and the location of the crack tip
Resistance: cover depth
Load: crack length
limit-state: crack length = cover depth
- Field data: concrete mechanical properties
(compressive, tensile strength Young’s modulus) delamination, visible crack ratio
- class cracking.Cracking_Model(pars)[source]
Bases:
object
- run(stochastic=True, plot_deterministic_result=True)[source]
Solve stress, strain, and crack tip location in concrete cover.
- Parameters:
stochastic (bool, optional) – If True, run the model in stochastic mode, by default True
plot_deterministic_result (bool, optional) – If True, plot the deterministic result, by default True
- cracking.bilinear_stress_strain(epsilon_theta, f_t, E_0)[source]
Return the stress in concrete from strain using the bilinear stress-strain curve.
- Parameters:
epsilon_theta (numpy array) – strain [-]
f_t (numpy array) – cracking tensile strength [MPa]
E_0 (numpy array) – modulus of elasticity [MPa]
- Returns:
stress [MPa]
- Return type:
numpy array
- cracking.crack_width_open(a, b, u_st, f_t, E_0)[source]
Calculate crack opening size on the concrete cover surface.
- Parameters:
a (numpy array) – inner radius boundary of the rust (center of rebar to rust-concrete interface) [m]
b (numpy array) – outer radius boundary of the concrete (center of rebar to cover surface) [m]
u_st (numpy array) – rust expansion(to original rebar surface) beyond the porous zone [m]
f_t (numpy array) – ultimate tensile strength [MPa]
E_0 (numpy array) – modulus of elasticity [MPa]
- Returns:
samples of crack opening size on the concrete cover surface
- Return type:
numpy array
- cracking.solve_stress_strain_crack_deterministic(pars, number_of_points=100, plot=True)[source]
Solve the stress and strain along the polar axis using strain_stress_crack_f(). One deterministic solution is returned by the mean values of all input variables.
- Parameters:
pars (Param object instance) – an object instance containing material properties
number_of_points (int, optional) – number of points where the stress and strain is reported along the polar axis, by default 100
plot (bool, optional) – If True, plot the stress and strain diagram, by default True
- Returns:
(epsilon_theta, sigma_theta, rust_thickness, crack_condition, R_c, w_open)
(strain, stress, rust thickness, crack condition code, crack front coordinate, open crack width)
- Return type:
tuple
- cracking.solve_stress_strain_crack_stochastic(pars, number_of_points=100)[source]
Solve the stress and strain along the polar axis using strain_stress_crack_f(). the stochastic solution matrix is returned, where each row represents a deterministic solution
- Parameters:
pars (Param object instance) – an object instance containing material properties
number_of_points (int, optional) – number of points where the stress and strain is reported along the polar axis, by default 100
- Returns:
(epsilon_theta, sigma_theta, rust_thickness, crack_condition, R_c, w_open)
(strain, stress, rust thickness, crack condition code, crack front coordinate, open crack width)
- Return type:
tuple
- cracking.strain_f(r, a, b, u_st, f_t, E_0, crack_condition)[source]
Calculate the strain along the polar axis r, a <= r <= b, fully vectorized for matrix representing samples.
- Parameters:
r (2D numpy array) – coordinate along the polar axis, a matrix with rows representing each r grid, column number is repeated values [m]
a (numpy array) – inner radius boundary of the rust (center of rebar to rust-concrete interface) [m]
b (numpy array) – outer radius boundary of the concrete (center of rebar to cover surface) [m]
u_st (numpy array) – rust expansion (to original rebar surface) beyond the porous zone [m]
f_t (array) – ultimate tensile strength [MPa]
E_0 (array) – modulus of elasticity [MPa]
crack_condition (array) – crack_condition array [int]. Each element corresponds to the condition of each row of the matrix - 0: ‘sound cover’ - 1: ‘partially cracked’ - 2: ‘fully cracked’
- Returns:
strain, epsilon_theta matrix. Row is the strain along the polar axis.
- Return type:
2D numpy array
- cracking.strain_stress_crack_f(r, r0_bar, x_loss, cover, f_t, E_0, w_c, r_v, plot=False, ax=None)[source]
- calculate the stress, strain, crack_condition for the whole concrete cover
(fully vectorized with numpy matrix functions).
- Parameters:
r (2D numpy array) – coordinate along the polar axis, a matrix with rows representing each r grid, column number is repeated values [m]
r0_bar (numpy array) – original rebar radius [m]
x_loss (numpy array) – section loss of the steel due to corrosion
cover (numpy array) – concrete cover depth [m]
f_t (array) – ultimate tensile strength [MPa]
E_0 (array) – modulus of elasticity [MPa]
w_c (float, array) – water cement ratio
r_v (numpy array) – expansion rate r_v ranges from 2 to 6.5 times
plot (bool, optional) – if true, plot the stress and strain along r, by default False
ax (axis instance) – subplot axis, by default None
- Returns:
(epsilon_theta, sigma_theta, rust_thickness, crack_condition, R_c, w_open)
(strain, stress, rust thickness, crack condition code, crack front coordinate, open crack width)
- Return type:
tuple
Note
Vectorization: r is a matrix. Other material property parameters(such as E) are 1-D arrays (to be converted to column vector in the calculation)