public LoadCaseResult CalculateCapacity(double nEd, Section section, IList <Bar> bars) { this.section = section; this.strainCalculations = new StrainCalculations(this.concrete, this.steel, section); if (this.concrete.N == 2d) { this.compressionZoneCalculations = new CompressionZoneCalculationsGreenFormula(this.concrete, this.strainCalculations); } else { this.compressionZoneCalculations = new CompressionZoneCalculationsNumericalFormula(this.concrete, this.strainCalculations); } createReinforcement(bars); this.section.D = this.calculateEffectiveDepthOfSectionAndBars(); this.nEd = nEd; var result = new LoadCaseResult(); result.D = this.section.D; result.X = this.solveEqulibriumEquation(); if (double.IsNaN(result.X)) { result.HasSolution = false; return(result); } result.HasSolution = true; var forces = this.compressionZoneCalculations.Calculate(result.X, this.section); result.MrdConcrete = forces.Moment; result.ForceConcrete = forces.NormalForce; result.Mrd = mrdReinforcement(result.X) + result.MrdConcrete - this.nEd * (this.section.H - this.section.Cz); result.CompressionZone = CompressionZoneCoordinates.CoordinatesOfCompressionZone(this.section.Coordinates, this.section.MaxY - result.X); result.Bars = this.reinforcement; result.Ec = this.strainCalculations.StrainInConcrete(result.X, 0); //result.H = section.H; //result.Cz = section.Cz; result.ForceReinforcement = this.reinforcement.Sum(e => e.Force); result.MomentReinforcement = this.reinforcement.Sum(e => e.Moment); return(result); }
public CompressionZoneCalculationsGreenFormula(Concrete concrete, IStrainCalculations strainCalculations) { this.concrete = concrete; this.strainCalculations = strainCalculations; }
public CompressionZoneCalculationsNumericalFormula(Concrete concrete, IStrainCalculations strainCalculations) { this.strainCalculations = strainCalculations; this.concrete = concrete; }