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