public CompressionZoneResult Calculate(double x, Section section) { var compressionZoneCoordinates = CompressionZoneCoordinates.CoordinatesOfCompressionZone(section.Coordinates, section.MaxY - x); var compressionZone = new Section(compressionZoneCoordinates); compressionZone.IntegrationPointY = section.IntegrationPointY; Func <double, double> distance = y => section.MaxY - y; Func <double, double> strain = di => this.strainCalculations.StrainInConcrete(x, distance(di)); Func <double, double> stress = e => StressFunctions.ConcreteStressDesign(strain(e), this.concrete); var integration = new Integration(); var result = integration.Integrate(compressionZone, stress); return(result); }
public CompressionZoneResult Calculate(double x, Section section) { yNeutralAxis = section.MaxY - x; double ec2Y = this.strainCalculations.Ec2Y(x); y2Promiles = yNeutralAxis + ec2Y; compressionZone = CompressionZoneCoordinates.CoordinatesOfCompressionZone(section.Coordinates, yNeutralAxis); parabolicZone = CompressionZoneCoordinates.CoordinatesOfParabolicSection(compressionZone, y2Promiles); linearZone = CompressionZoneCoordinates.CoordinatesOfLinearSection(compressionZone, y2Promiles); var result = new CompressionZoneResult(); result.NormalForce = this.calculateResultantForce(); result.Moment = this.calculateResultantMoment(x, section); return(result); }
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); }