Пример #1
0
        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);
        }
Пример #3
0
            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));
            }
Пример #4
0
        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));
        }
Пример #7
0
 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;
            }
Пример #9
0
 public TipJacobians CalculateJacobiansAt(PolarPoint2D polarCoordinates)
 {
     return(new TipJacobians(this, polarCoordinates));
 }