Source code for fconcrete.StructuralConcrete.Concrete

from fconcrete.Structural import Material
from fconcrete.helpers import to_unit
from math import log

[docs]class Concrete(Material): """ Define the Concrete to be used and all its properties. Attributes ---------- fck : number Define the characteristic resistance of the concrete in kN/cmˆ2. E_ci : number Modulus of elasticity or initial tangent deformation module of concrete, always referring to the cordal module in kN/cmˆ2. E_cs : number Secant deformation module of concrete in kN/cmˆ2. fctm : number Average concrete tensile strength in kN/cmˆ2. fctk_inf : number Minimum value of direct tensile strength in kN/cmˆ2. fctk_sup : number Maximum value of direct tensile strength in kN/cmˆ2. fcd : number Minimum value of design direct tensile strength in kN/cmˆ2. c : number Concrete covering in cm. wk : number Characteristic crack opening in the concrete surface in cm. """ def __init__(self, fck, aggressiveness, aggregate="granite"): """ Define properties of the concrete. Call signatures: fc.Concrete(fck, aggressiveness, aggregate='granite', **kwargs) >>> material = fc.Concrete(fck=30, aggressiveness=3) >>> round(material.fck) 3 Parameters ---------- fck : number Define the characteristic resistance of the concrete. If it is a number, default unit is MPa, but also [force]/[length]**2 unit can be given. Example: '20kN/cm**2', '10Pa', etc aggressiveness : int Aggressiveness value from 1 (very low) to 4 (very height) aggregate : {'basalt', 'diabase', 'granite', 'gneiss', 'limestone', 'sandstone'} Aggregate type. """ fck = to_unit(fck, "MPa") alpha_e = 0 if aggregate in ['basalt', 'diabase']: alpha_e = 1.2 if aggregate in ['granite', 'gneiss']: alpha_e = 1 if aggregate in ["limestone"]: alpha_e = 0.9 if aggregate in ["sandstone"]: alpha_e = 0.7 if alpha_e == 0: raise Exception("Must select a valid aggregate: 'basalt', 'diabase', 'granite', 'gneiss', 'limestone' or 'sandstone'") if fck<20 or fck>90: raise Exception("Must select a valid fck value (between 20MPa and 90MPa)") if (fck>=20 and fck<=50): E_ci = alpha_e*5600*(fck**0.5) E_ci = alpha_e*21500*(fck/10+1.25)**(1/3) if fck>50 else E_ci alpha_i = min(0.8+0.2*fck/80, 1) E_cs = alpha_i*E_ci fctm = 0.3*(fck**(2/3)) if fck<=50 else 2.12*log(1+0.11*fck, 10) fctk_inf = 0.7*fctm fctk_sup = 1.3*fctm fcd = fck/1.4 fctd = fctk_inf/1.4 c = 2.5 if aggressiveness==1 else 3 if aggressiveness==2 else 4 if aggressiveness==3 else 5 if aggressiveness==4 else 0 if c==0: raise Exception("Must select a valid aggressiveness value (between 1 and 4)") wk = 0.04 if aggressiveness==1 else 0.03 if aggressiveness in [2, 3] else 0.02 if aggressiveness==4 else 0 self.fck = to_unit(fck, "MPa", "kN/cm**2") self.E_ci = to_unit(E_ci, "MPa", "kN/cm**2") self.E_cs = to_unit(E_cs, "MPa", "kN/cm**2") self.fctm = to_unit(fctm, "MPa", "kN/cm**2") self.fctk_inf = to_unit(fctk_inf, "MPa", "kN/cm**2") self.fctk_sup = to_unit(fctk_sup, "MPa", "kN/cm**2") self.fcd = to_unit(fcd, "MPa", "kN/cm**2") self.fctd = to_unit(fctd, "MPa", "kN/cm**2") self.c = c self.wk = wk self.aggressiveness = aggressiveness self.aggregate = aggregate Material.__init__(self, E_cs, 0.2, 10**(-5))