private int CheckDiagram(Generate_ω_LineForDiagram toCheck, double μRd, double νRd, int percision = 3) { var test = new List <μSd_And_νSd>(toCheck.ListOfDotsInLineOfDiagram); var νSdmax = test.Single(m => m.μSd == test.Max(n => n.μSd)).νSd; if (νRd >= νSdmax) { test.RemoveAll(n => n.νSd < νSdmax); var closestItemByM = test .Aggregate((x, y) => Math.Abs(x.μSd - μRd) < Math.Abs(y.μSd - μRd) ? x : y); if ( (Math.Round(μRd, percision) == Math.Round(closestItemByM.μSd, percision)) && (Math.Round(νRd, percision) == Math.Round(closestItemByM.νSd, percision))) { find = closestItemByM; return(0); } else if (closestItemByM.νSd > νRd) { find = closestItemByM; return(1); } else { find = closestItemByM; return(2); }; } else { test.RemoveAll(n => n.νSd > νSdmax); var closestItemByM = test .Aggregate((x, y) => Math.Abs(x.μSd - μRd) < Math.Abs(y.μSd - μRd) ? x : y); if ( (Math.Round(μRd, percision) == Math.Round(closestItemByM.μSd, percision)) && (Math.Round(νRd, percision) == Math.Round(closestItemByM.νSd, percision))) { find = closestItemByM; return(0); } else if (closestItemByM.νSd < νRd) { find = closestItemByM; return(1); } else { find = closestItemByM; return(2); }; } }
public List <μSd_And_νSdCollection> GetAllLines(ICoeffService coeffService) { var result = new List <μSd_And_νSdCollection>(); var r = new Generate_ω_LineForDiagram(_material, _geometry, coeffService, 0.05); result.Add(r.ListOfDotsInLineOfDiagram); for (double i = 0.1; i <= 1; i += 0.1) { r = new Generate_ω_LineForDiagram(_material, _geometry, coeffService, i); result.Add(r.ListOfDotsInLineOfDiagram); } return(result); }
public double Get_ω(double μRd, double νRd) { var ω = maxOf_ω.ω / 2; double addTo_ω = maxOf_ω.ω / 2; for (int i = 0; i < 50; i++) { addTo_ω = addTo_ω / 2; if (ω < 0.05) { break; } searchingOf_ω = new Generate_ω_LineForDiagram(_material, _geometry, coeffService, ω); switch (CheckDiagram(searchingOf_ω, μRd, νRd)) { case 0: return(ω); case 1: ω -= addTo_ω; break; case 2: ω += addTo_ω; break; default: break; } iterations = i; } if (ω > 1.0) { throw new Exception("the percentage of reinforcement has been exceeded, make cross-section bigger"); } if (ω < 0.05) { searchingOf_ω = minOf_ω; return(0.05); } ; return(ω); }
private void SetMinimumOf_ω_and_Max() { minOf_ω = new Generate_ω_LineForDiagram(_material, _geometry, coeffService, 0.05); maxOf_ω = new Generate_ω_LineForDiagram(_material, _geometry, coeffService, 1); }