public static double CalculateSiglePointFunctionValue(RealPoint point, double denominator1, double denominator2, SurfaceIntegrationPoint surfaceIntegrationPoint) { double lambda1 = point.x - surfaceIntegrationPoint.RealPosition.x; double lambda2 = point.y - surfaceIntegrationPoint.RealPosition.y; double r2 = (double)(lambda1 * lambda1 + lambda2 * lambda2); double a = (double)r2 / denominator1; double value = (double)(surfaceIntegrationPoint.QuadratureValue.v * surfaceIntegrationPoint.QuadratureValue.w * surfaceIntegrationPoint.Jacobian * (FunctionEi.calculate(a) / denominator2)); return(value); }
public void Calculate() { double secondDenominator = (double)8.0 * Math.PI * configurationData.ThermalConductivity; double firstDenominator = (double)4.0 * configurationData.DiffusionCoefficient * (configurationData.TimeStep); foreach (Segment segmentR in segments) { foreach (Segment segmentI in segments) { foreach (var collPointR in segmentR.CollocationPoints) { foreach (var collPointI in segmentI.CollocationPoints) { var r = segmentR.Index * segmentR.CollocationPoints.Count() + collPointR.Index; var i = segmentI.Index * segmentI.CollocationPoints.Count() + collPointI.Index; double returnValue = 0.0; if (i != r) { foreach (var integrationPoint in segmentI.IntegrationPoints) { double lambda1 = collPointR.RealPosition.x - integrationPoint.RealPosition.x; double lambda2 = collPointR.RealPosition.y - integrationPoint.RealPosition.y; double r2 = (double)(lambda1 * lambda1 + lambda2 * lambda2); double a = (double)r2 / firstDenominator; returnValue -= (double)(integrationPoint.QuadratureValue * CzebyshevSeries.calculate(integrationPoint.ParametricPosition * segmentI.Lenght, collPointI.Index) * integrationPoint.Jacobian * (FunctionEi.calculate(a) / secondDenominator)); } } else { for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularIntegrationPointsCount; singularIndex1++) { var singularIntegrationPoint = new IntegrationPoint( singularIndex1, segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1], 0.0, collPointR.ParametricPosition, segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1], segmentI.ShapeFunction); double lambda1 = collPointR.RealPosition.x - singularIntegrationPoint.RealPosition.x; double lambda2 = collPointR.RealPosition.y - singularIntegrationPoint.RealPosition.y; double r2 = (double)(lambda1 * lambda1 + lambda2 * lambda2); double a = (double)r2 / firstDenominator; returnValue -= (double)((collPointR.ParametricPosition) * singularIntegrationPoint.QuadratureValue * CzebyshevSeries.calculate(singularIntegrationPoint.ParametricPosition * segmentI.Lenght, collPointI.Index) * singularIntegrationPoint.Jacobian * (FunctionEi.calculate(a) / secondDenominator)); } for (int singularIndex1 = 0; singularIndex1 < segmentI.SingularIntegrationPointsCount; singularIndex1++) { var singularIntegrationPoint = new IntegrationPoint( singularIndex1, segmentI.GaussQuadratureForSingularIntegral.xi[singularIndex1], collPointR.ParametricPosition, 1.0, segmentI.GaussQuadratureForSingularIntegral.Ai[singularIndex1], segmentI.ShapeFunction); double lambda1 = collPointR.RealPosition.x - singularIntegrationPoint.RealPosition.x; double lambda2 = collPointR.RealPosition.y - singularIntegrationPoint.RealPosition.y; double r2 = (double)(lambda1 * lambda1 + lambda2 * lambda2); double a = (double)r2 / firstDenominator; returnValue -= (double)((1.0 - collPointR.ParametricPosition) * singularIntegrationPoint.QuadratureValue * CzebyshevSeries.calculate(singularIntegrationPoint.ParametricPosition * segmentI.Lenght, collPointI.Index) * singularIntegrationPoint.Jacobian * (FunctionEi.calculate(a) / secondDenominator)); } } } } } } }