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);
 }