private void calculateCollocationPoints(int collocationPointsCount, CollocationPlacementType collocationPlacementType)
 {
     CollocationPoints = new List <CollocationPoint>();
     for (int index = 0; index < collocationPointsCount; index++)
     {
         var collocationPoint = new CollocationPoint(index, collocationPointsCount, collocationPlacementType, this.ShapeFunction);
         CollocationPoints.Add(collocationPoint);
     }
 }
Пример #2
0
        private void calculateCollocationPoints(int collocationPointsCount, CollocationPlacementType collocationPlacementType, double realDistanceFromEdge)
        {
            CollocationPoints = new List <CollocationPoint>();
            var parametricDistanceFromEdge = realDistanceFromEdge / this.Lenght;

            for (int index = 0; index < collocationPointsCount; index++)
            {
                var collocationPoint = new CollocationPoint(index, collocationPointsCount, collocationPlacementType, this.ShapeFunction, parametricDistanceFromEdge);
                CollocationPoints.Add(collocationPoint);
            }
        }
        public double GetInitialConditionValueFromCollocationPointsConstants(CollocationPoint point)
        {
            double value = 0.0;
            var    k     = 0;

            foreach (var area in this.Areas)
            {
                foreach (var surface in area.Surfaces)
                {
                    foreach (var surfaceIntegrationPoint in surface.InitialConditionSurfaceIntegrationPoints)
                    {
                        value += point.SurfaceIntegrationPointsInitialConditionConstantValues[k] * surfaceIntegrationPoint.TemperatureValue;
                        k++;
                    }
                }
            }
            return(value);
        }
Пример #4
0
        private static double SigularSeparate(double denominator2, Segment segmentR, CollocationPoint collPointR, Segment segmentI, CollocationPoint collPointI)
        {
            double value = 0.0;
            ///TODO: Sprawdzić jak dla nieliniowych ma być
            var destx = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().x + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().x;
            var desty = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().y + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().y;
            var dest  = (double)Math.Sqrt((segmentI.ShapeFunction.GetV0().x - destx) * (segmentI.ShapeFunction.GetV0().x - destx) + (segmentI.ShapeFunction.GetV0().y - desty) * (segmentI.ShapeFunction.GetV0().y - desty));

            value = 0.5 * CzebyshewSeries.calculate(dest, collPointI.Index);

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    0.0,
                    collPointR.ParametricPosition,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((collPointR.ParametricPosition) * CalculateCore(denominator2, collPointR.RealPosition, singularIntegrationPoint, segmentI, collPointI));
            }

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    collPointR.ParametricPosition,
                    1.0,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((1.0 - collPointR.ParametricPosition) * CalculateCore(denominator2, collPointR.RealPosition, singularIntegrationPoint, segmentI, collPointI));
            }
            return(value);
        }
        private static double SingularSeparate(double denominator1, double denominator2, CollocationPoint collPointR, Segment segmentI, CollocationPoint collPointI)
        {
            double value = 0.0;
            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    0.0,
                    collPointR.ParametricPosition,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((collPointR.ParametricPosition) * CalculateCore(collPointR.RealPosition, singularIntegrationPoint, denominator1, denominator2, segmentI, collPointI));
            }

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    collPointR.ParametricPosition,
                    1.0,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((1.0 - collPointR.ParametricPosition) * CalculateCore(collPointR.RealPosition, singularIntegrationPoint, denominator1, denominator2, segmentI, collPointI));
            }
            return value;
        }
        private static double CalculateCore(RealPoint point, BoundaryIntegrationPoint integrationPoint, double denominator1, double denominator2, Segment segment, CollocationPoint collPoint)
        {
            double lambda1 = point.x - integrationPoint.RealPosition.x;
            double lambda2 = point.y - integrationPoint.RealPosition.y;

            double r2 = (double)(lambda1 * lambda1 + lambda2 * lambda2);
            double a = (double)r2 / denominator1;

            return (double)(integrationPoint.QuadratureValue
                               * CzebyshewSeries.calculate(integrationPoint.ParametricPosition * segment.Lenght, collPoint.Index)
                               * integrationPoint.Jacobian
                               * (FunctionEi.calculate(a) / denominator2));
        }
         public static double CalculateAreaValue(RealPoint resultPoint, Segment segmentI, CollocationPoint collPointI, ConfigurationData configurationData)
        {
            double result = 0.0;
            double denominator1 = Function_T.denominator1(configurationData.GetDiffusionCoefficient(), configurationData.iterationProcess.TimeStep);
            double denominator2 = Function_T.denominator2(configurationData.GetThermalConductivity());

            if (configurationData.arePropertiesTimeDependent())
            {
                denominator1 = Function_T.denominator1(configurationData.GetDiffusionCoefficient(segmentI.TemperatureValue), configurationData.iterationProcess.TimeStep);
                denominator2 = Function_T.denominator2(configurationData.GetThermalConductivity(segmentI.TemperatureValue));
            }

            foreach (var integrationPoint in segmentI.SingularBoundaryIntegrationPointsForArea)
            {
                result += CalculateCore(resultPoint, integrationPoint, denominator1, denominator2, segmentI, collPointI);
            }
            return result;
        }
 private static double SigularAnalitycalMajchrzak(double denominator1, double denominator2, Segment segmentR, CollocationPoint collPointR, Segment segmentI, CollocationPoint collPointI)
 {
     var destx = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().x + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().x;
     var desty = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().y + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().y;
     var dest = (double)Math.Sqrt((segmentI.ShapeFunction.GetV0().x - destx) * (segmentI.ShapeFunction.GetV0().x - destx) + (segmentI.ShapeFunction.GetV0().y - desty) * (segmentI.ShapeFunction.GetV0().y - desty));
     var beta = Math.Pow(segmentI.Lenght, 2.0) / (4.0 * denominator1);
     double value = 2.0 / denominator2 * (2.0 - FunctionEi.gamma - Math.Log10(beta) + (beta * FunctionEi.w[0]) / 3.0 + (Math.Pow(beta, 2) * FunctionEi.w[1]) / 5.0
        + (Math.Pow(beta, 3) * FunctionEi.w[2]) / 7.0 + (Math.Pow(beta, 4) * FunctionEi.w[3]) / 9.0 + (Math.Pow(beta, 5) * FunctionEi.w[4]) / 11.0);
     value *= CzebyshewSeries.calculate(dest, collPointI.Index);
     return value;
 }
Пример #9
0
        private static double CalculateCore(double denominator2, RealPoint point, BoundaryIntegrationPoint integrationPoint, Segment segment, CollocationPoint collPoint)
        {
            double lambda1 = point.x - integrationPoint.RealPosition.x;
            double lambda2 = point.y - integrationPoint.RealPosition.y;

            double r2           = (double)(lambda1 * lambda1 + lambda2 * lambda2);
            double d            = (double)(lambda1 * integrationPoint.NormalVector.X + lambda2 * integrationPoint.NormalVector.Y);
            double denomiantor1 = (double)4.0 * Math.PI * r2;
            double core         = (double)d / denomiantor1 * Math.Exp(-r2 / denominator2);

            return((double)(integrationPoint.QuadratureValue
                            * CzebyshewSeries.calculate(integrationPoint.ParametricPosition * segment.Lenght, collPoint.Index)
                            * integrationPoint.Jacobian
                            * core));
        }
Пример #10
0
        public static double CalculateAreaValue(RealPoint resultPoint, Segment segmentI, CollocationPoint collPointI, ConfigurationData configurationData)
        {
            double result       = 0.0;
            double denominator2 = Function_q.denominator2(configurationData.GetDiffusionCoefficient(segmentI.TemperatureValue), configurationData.iterationProcess.TimeStep);

            foreach (var integrationPoint in segmentI.SingularBoundaryIntegrationPointsForArea)
            {
                result += CalculateCore(denominator2, resultPoint, integrationPoint, segmentI, collPointI);
            }
            return(result);
        }
Пример #11
0
        private static double SigularSeparateWithAnalitycal(double denominator2, Segment segmentR, CollocationPoint collPointR, Segment segmentI, CollocationPoint collPointI)
        {
            double value = 0.0;
            ///TODO: Sprawdzić jak dla nieliniowych ma być
            var destx = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().x + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().x;
            var desty = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().y + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().y;
            var dest  = (double)Math.Sqrt((segmentI.ShapeFunction.GetV0().x - destx) * (segmentI.ShapeFunction.GetV0().x - destx) + (segmentI.ShapeFunction.GetV0().y - desty) * (segmentI.ShapeFunction.GetV0().y - desty));

            value = 0.5 * CzebyshewSeries.calculate(dest, collPointI.Index);

            double distance = segmentR.DistanceFromSingularPoint;
            double a        = collPointR.ParametricPosition - distance;
            double b        = collPointR.ParametricPosition + distance;

            double I1            = 0.0;
            double I2            = 0.0;
            double s1            = collPointR.ParametricPosition;
            var    boundaryShape = (BezieCurve)segmentR.ShapeFunction;

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                double w          = 0.5 * (segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1] + 1.0);
                double parametera = (a - s1) * w + s1;
                double parameterb = (b - s1) * w + s1;
                double sa         = (parametera - a);
                double sb         = (parameterb - b);

                I1 -= (functionF(boundaryShape, sa, s1, denominator2, collPointR.Index)
                       * segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1])
                      - (functionF(boundaryShape, s1, s1, denominator2, collPointR.Index)
                         * Math.Log(Math.Abs(a * boundaryShape.lenght - s1 * boundaryShape.lenght)));

                I2 += (functionF(boundaryShape, sb, s1, denominator2, collPointR.Index)
                       * segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1])
                      + (functionF(boundaryShape, s1, s1, denominator2, collPointR.Index)
                         * Math.Log(Math.Abs(b * boundaryShape.lenght - s1 * boundaryShape.lenght)));
            }

            value += (1.0 / (2.0 * Math.PI)) * (I1 + I2);

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    0.0,
                    a,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((collPointR.ParametricPosition) * CalculateCore(denominator2, collPointR.RealPosition, singularIntegrationPoint, segmentI, collPointI));
            }

            for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularBoundaryIntegrationPointsCount; singularIndex1++)
            {
                var singularIntegrationPoint = new BoundaryIntegrationPoint(
                    singularIndex1,
                    segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1],
                    b,
                    1.0,
                    segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1],
                    segmentI.ShapeFunction);

                value += (double)((1.0 - collPointR.ParametricPosition) * CalculateCore(denominator2, collPointR.RealPosition, singularIntegrationPoint, segmentI, collPointI));
            }
            return(value);
        }
Пример #12
0
        private static double SigularAnalitycalMajchrzak(double denominator2, Segment segmentR, CollocationPoint collPointR, Segment segmentI, CollocationPoint collPointI)
        {
            var destx = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().x + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().x;
            var desty = (1 - collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV0().y + (collPointR.ParametricPosition) * segmentR.ShapeFunction.GetV1().y;
            var dest  = (double)Math.Sqrt((segmentI.ShapeFunction.GetV0().x - destx) * (segmentI.ShapeFunction.GetV0().x - destx) + (segmentI.ShapeFunction.GetV0().y - desty) * (segmentI.ShapeFunction.GetV0().y - desty));

            return(0.5 * CzebyshewSeries.calculate(dest, collPointI.Index));
        }