public AuxiliaryStatesTensors ComputeTensorsAt(CartesianPoint globalIntegrationPoint, TipCoordinateSystem tipCoordinateSystem) { // Common calculations PolarPoint2D polarCoordinates = tipCoordinateSystem.TransformPointGlobalCartesianToLocalPolar(globalIntegrationPoint); var commonValues = new CommonValues(polarCoordinates.R, polarCoordinates.Theta); // Displacement field derivatives Matrix2by2 displacementGradientMode1, displacementGradientMode2; TipJacobians polarJacobians = tipCoordinateSystem.CalculateJacobiansAt(polarCoordinates); ComputeDisplacementDerivatives(polarJacobians, commonValues, out displacementGradientMode1, out displacementGradientMode2); // Strains Tensor2D strainTensorMode1 = ComputeStrainTensor(displacementGradientMode1); Tensor2D strainTensorMode2 = ComputeStrainTensor(displacementGradientMode2); // Stresses Tensor2D stressTensorMode1, stressTensorMode2; ComputeStressTensors(commonValues, out stressTensorMode1, out stressTensorMode2); return(new AuxiliaryStatesTensors(displacementGradientMode1, displacementGradientMode2, strainTensorMode1, strainTensorMode2, stressTensorMode1, stressTensorMode2)); }
public double[] EvaluateFunctionsAt(XNode node) { PolarPoint2D polarPoint = TipSystem.TransformPointGlobalCartesianToLocalPolar(node); var enrichments = new double[enrichmentFunctions.Count]; for (int i = 0; i < enrichments.Length; ++i) { enrichments[i] = enrichmentFunctions[i].EvaluateAt(polarPoint); } return(enrichments); }
public EvaluatedFunction2D EvaluateAllAt(PolarPoint2D point, TipJacobians jacobian) { double sqrtR = Math.Sqrt(point.R); double cosThetaHalf = Math.Cos(point.Theta / 2.0); double sinThetaHalf = Math.Sin(point.Theta / 2.0); double value = sqrtR * cosThetaHalf; var gradientPolar = Vector2.Create(0.5 / sqrtR * cosThetaHalf, -0.5 * sqrtR * sinThetaHalf); Vector2 gradientGlobal = jacobian.TransformScalarFieldDerivativesLocalPolarToGlobalCartesian(gradientPolar); return(new EvaluatedFunction2D(value, gradientGlobal)); }
public TipJacobians(TipCoordinateSystem tipSystem, PolarPoint2D polarCoordinates) { this.tipSystem = tipSystem; double r = polarCoordinates.R; double cosTheta = Math.Cos(polarCoordinates.Theta); double sinTheta = Math.Sin(polarCoordinates.Theta); inverseJacobianPolarToLocal = Matrix2by2.CreateFromArray(new double[, ] { { cosTheta, sinTheta }, { -sinTheta / r, cosTheta / r } }); inverseJacobianPolarToGlobal = inverseJacobianPolarToLocal * tipSystem.RotationMatrixGlobalToLocal; }
public EvaluatedFunction2D[] EvaluateAllAt(NaturalPoint point, XContinuumElement2D element, EvalInterpolation2D interpolation) { PolarPoint2D polarPoint = TipSystem.TransformPointGlobalCartesianToLocalPolar( interpolation.TransformPointNaturalToGlobalCartesian()); TipJacobians tipJacobians = TipSystem.CalculateJacobiansAt(polarPoint); var enrichments = new EvaluatedFunction2D[enrichmentFunctions.Count]; for (int i = 0; i < enrichments.Length; ++i) { enrichments[i] = enrichmentFunctions[i].EvaluateAllAt(polarPoint, tipJacobians); } return(enrichments); }
/// <summary> /// Gives a displacement a(s) value between a(v1) and a(v2). /// Increments/decrements a(s) with 2 * PI until between a(v1) and a(v2). /// </summary> /// <param name="s"></param> /// <param name="v1"></param> /// <param name="v2"></param> /// <returns> The generated vertex-displacement pair. </returns> public static VertDispl DisplacementInBetween(PolarPoint2D s, VertDispl v1, VertDispl v2) { var bot = Math.Min(v1.alpha, v2.alpha); var top = Math.Max(v1.alpha, v2.alpha); if (MathUtil.EqualsEps(bot, top)) { return(new VertDispl(s, bot)); } var temp = s.Theta; while (MathUtil.GreaterEps(temp, top)) { temp -= MathUtil.PI2; } while (MathUtil.LessEps(temp, bot)) { temp += MathUtil.PI2; } return(new VertDispl(s, temp)); }
public double EvaluateAt(PolarPoint2D point) { return(Math.Sqrt(point.R) * Math.Cos(point.Theta / 2.0) * Math.Sin(point.Theta)); }
internal double alpha; // angular displacement public VertDispl(PolarPoint2D p, double alpha) { this.p = p; this.alpha = alpha; }
public TipJacobians CalculateJacobiansAt(PolarPoint2D polarCoordinates) { return(new TipJacobians(this, polarCoordinates)); }