/// <summary>
        /// Is used to build solution
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        private double PartialSolution(Point x)
        {
            DoubleCore <Point> core = new DoubleCore <Point>(RightPartCore);

            core.Prepare(x);
            return(-Integral.CalculateWithTrapeziumMethod(core, PointsNumber));
        }
        // Functions to calculate solution derivative on outer curve
        protected double Omega1(double tx)
        {
            DoubleCore <double> core = new DoubleCore <double>(Omega1CoreNotSingular);

            core.Prepare(tx);
            return(-Integral.CalculateWithHyperSingularCore(core, PointsNumber)); // перевірити обчисленн гіперсинугялрного інтегралу
        }
        private double DirectProblemRightPartFunction(double tParam)
        {
            DoubleCore <double> core = new DoubleCore <double>((t, tau) => {
                Point pointX = new Point(InnerCurve.GetX(t), InnerCurve.GetY(t));
                return(RightPartCore(pointX, tau));
            });

            core.Prepare(tParam);
            return(2.0 * Integral.CalculateWithTrapeziumMethod(core, PointsNumber) + 2.0 * OnCrackValueFunction(tParam));
        }
        private double LinDataEquationRightPartFucntion(double t)
        {
            var core = new DoubleCore <Point>(DataEquationOperatorCore);

            core.Prepare(new Point(
                             OuterCurve.GetX(t),
                             OuterCurve.GetY(t)));

            var result = -Integral.CalculateWithTrapeziumMethod(Density, core)
                         - Omega1(t);

            return(result);
        }
        public double[] BuildSolutionDerivativeOnOuterCurve(double[] density)
        {
            var descretePoints     = IntegralEquationDiscretezer.GetDiscretePoints(PointsNumber);
            var solutionDerivative = new double[descretePoints.Length];

            for (int i = 0; i < descretePoints.Length; i++)
            {
                var core = new DoubleCore <Point>(DataEquationOperatorCore);
                core.Prepare(new Point(
                                 OuterCurve.GetX(descretePoints[i]),
                                 OuterCurve.GetY(descretePoints[i])));

                solutionDerivative[i] = Integral.CalculateWithTrapeziumMethod(density, core)
                                        + Omega1(descretePoints[i]);
            }

            return(solutionDerivative);
        }