Esempio n. 1
0
        //TODO: Either work with Tensor class or double[]
        private IReadOnlyList <Tensor2D> ElementNodalTensorsExtrapolation(XContinuumElement2D element,
                                                                          Vector freeDisplacements, Vector constrainedDisplacements, IOutputField field)
        {
            Vector standardDisplacements = dofOrderer.ExtractDisplacementVectorOfElementFromGlobal(element,
                                                                                                   freeDisplacements, constrainedDisplacements);
            Vector enrichedDisplacements =
                dofOrderer.ExtractEnrichedDisplacementsOfElementFromGlobal(element, freeDisplacements);

            IReadOnlyList <NaturalPoint> gaussPoints = element.GaussPointExtrapolation.Quadrature.IntegrationPoints;
            var gpTensors = new Tensor2D[gaussPoints.Count];

            for (int i = 0; i < gaussPoints.Count; ++i)
            {
                gpTensors[i] =
                    field.EvaluateAt(element, gaussPoints[i], standardDisplacements, enrichedDisplacements);
            }
            return(element.GaussPointExtrapolation.ExtrapolateTensorFromGaussPointsToNodes(gpTensors, element.Interpolation));
        }
Esempio n. 2
0
        // Computes stresses directly at the nodes. The other approach is to compute them at Gauss points and then extrapolate
        private IReadOnlyList <Tensor2D> ElementNodalTensorsDirectly(XContinuumElement2D element,
                                                                     Vector freeDisplacements, Vector constrainedDisplacements, IOutputField field)
        {
            Vector standardDisplacements = dofOrderer.ExtractDisplacementVectorOfElementFromGlobal(element,
                                                                                                   freeDisplacements, constrainedDisplacements);
            Vector enrichedDisplacements =
                dofOrderer.ExtractEnrichedDisplacementsOfElementFromGlobal(element, freeDisplacements);

            IReadOnlyList <NaturalPoint> naturalNodes = element.Interpolation.NodalNaturalCoordinates;
            var nodalTensors = new Tensor2D[element.Nodes.Count];

            for (int i = 0; i < element.Nodes.Count; ++i)
            {
                nodalTensors[i] =
                    field.EvaluateAt(element, naturalNodes[i], standardDisplacements, enrichedDisplacements);
            }
            return(nodalTensors);
        }