Exemplo n.º 1
0
        public override bool Equals(object obj)
        {
            EmbeddedNode e = obj as EmbeddedNode;

            if (e == null)
            {
                return(false);
            }

            return(e.Node == this.node && e.EmbeddedInElement == embeddedInElement);
        }
        public double[][] GetTransformationVector(EmbeddedNode node)
        {
            CheckElementType(node.EmbeddedInElement.ElementType);

            const int commonDofsPerNode       = 3;
            const int hostDofsPerNode         = 3;
            const int hostShapeFunctionLength = 8;

            double[] hostShapeFunctions = ((IEmbeddedHostElement)node.EmbeddedInElement.ElementType).GetShapeFunctionsForNode(node.EmbeddedInElement, node);

            var transformation = new double[commonDofsPerNode][];

            for (int j = 0; j < commonDofsPerNode; j++)
            {
                transformation[j] = new double[hostShapeFunctionLength * hostDofsPerNode];
                for (int k = 0; k < hostShapeFunctionLength; k++)
                {
                    transformation[j][hostDofsPerNode * k + j] = hostShapeFunctions[k];
                }
            }

            return(transformation);
        }
        public double[][] GetTransformationVector(EmbeddedNode node)
        {
            //CheckElementType(node.EmbeddedInElement.ElementType);

            const int commonDofsPerNode       = 1;
            const int hostDofsPerNode         = 1;
            const int hostShapeFunctionLength = 4; //TODO: Use the interpolation for this. Probably for the next line too.

            double[] hostShapeFunctions = ((IEmbeddedHostElement)node.EmbeddedInElement.ElementType).GetShapeFunctionsForNode(node.EmbeddedInElement, node);

            var transformation = new double[commonDofsPerNode][];

            for (int j = 0; j < commonDofsPerNode; j++)
            {
                transformation[j] = new double[hostShapeFunctionLength * hostDofsPerNode];
                for (int k = 0; k < hostShapeFunctionLength; k++)
                {
                    transformation[j][hostDofsPerNode * k + j] = hostShapeFunctions[k];
                }
            }

            return(transformation);
        }
 public IReadOnlyList <IReadOnlyList <IDofType> > GetDOFTypesOfHost(EmbeddedNode node)
 {
     return(node.EmbeddedInElement.ElementType.GetElementDofTypes(node.EmbeddedInElement));
 }
        private double[][] GetTransformationVectorForTranslationsOnly(EmbeddedNode node)
        {
            if (node.EmbeddedInElement.ElementType is Hexa8 == false &&
                node.EmbeddedInElement.ElementType is Hexa8Fixed == false &&
                node.EmbeddedInElement.ElementType is Hexa8NonLinear == false &&
                node.EmbeddedInElement.ElementType is Hexa8u8p == false)
            {
                throw new ArgumentException("Host element is not Hexa8.");
            }

            double[] hostShapeFunctions = ((IEmbeddedHostElement)node.EmbeddedInElement.ElementType).GetShapeFunctionsForNode(node.EmbeddedInElement, node);
            var      transformation     = new double[commonDofsPerNode + rotationalDofsPerNode][];

            for (int j = 0; j < commonDofsPerNode; j++)
            {
                transformation[j] = new double[hostShapeFunctionLength * hostDofsPerNode];
                for (int k = 0; k < hostShapeFunctionLength; k++)
                {
                    transformation[j][hostDofsPerNode * k + j] = hostShapeFunctions[k];
                }
            }
            for (int j = 0; j < rotationalDofsPerNode; j++)
            {
                transformation[commonDofsPerNode + j] = new double[hostShapeFunctionLength * hostDofsPerNode];
            }

            var jacobianAndInverse = GetJacobiansFromShapeFunctionsVector(hostShapeFunctions);

            transformation[commonDofsPerNode - 1 + 1][0]  = 0;
            transformation[commonDofsPerNode - 1 + 1][1]  = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 1][2]  = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 1][3]  = 0;
            transformation[commonDofsPerNode - 1 + 1][4]  = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 1][5]  = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 1][6]  = 0;
            transformation[commonDofsPerNode - 1 + 1][7]  = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 1][8]  = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 1][9]  = 0;
            transformation[commonDofsPerNode - 1 + 1][10] = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 1][11] = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 1][12] = 0;
            transformation[commonDofsPerNode - 1 + 1][13] = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 1][14] = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 1][15] = 0;
            transformation[commonDofsPerNode - 1 + 1][16] = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 1][17] = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 1][18] = 0;
            transformation[commonDofsPerNode - 1 + 1][19] = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 1][20] = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 1][21] = 0;
            transformation[commonDofsPerNode - 1 + 1][22] = -jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] - jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] - jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 1][23] = jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] + jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] + jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 2][0]  = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 2][1]  = 0;
            transformation[commonDofsPerNode - 1 + 2][2]  = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 2][3]  = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 2][4]  = 0;
            transformation[commonDofsPerNode - 1 + 2][5]  = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 2][6]  = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 2][7]  = 0;
            transformation[commonDofsPerNode - 1 + 2][8]  = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 2][9]  = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 2][10] = 0;
            transformation[commonDofsPerNode - 1 + 2][11] = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 2][12] = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 2][13] = 0;
            transformation[commonDofsPerNode - 1 + 2][14] = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 2][15] = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 2][16] = 0;
            transformation[commonDofsPerNode - 1 + 2][17] = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 2][18] = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 2][19] = 0;
            transformation[commonDofsPerNode - 1 + 2][20] = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 2][21] = jacobianAndInverse.Item2[2, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] + jacobianAndInverse.Item2[2, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] + jacobianAndInverse.Item2[2, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 2][22] = 0;
            transformation[commonDofsPerNode - 1 + 2][23] = -jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] - jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] - jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 3][0]  = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 3][1]  = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 9] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 1] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 17];
            transformation[commonDofsPerNode - 1 + 3][2]  = 0;
            transformation[commonDofsPerNode - 1 + 3][3]  = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 3][4]  = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 10] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 2] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 18];
            transformation[commonDofsPerNode - 1 + 3][5]  = 0;
            transformation[commonDofsPerNode - 1 + 3][6]  = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 3][7]  = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 11] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 3] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 19];
            transformation[commonDofsPerNode - 1 + 3][8]  = 0;
            transformation[commonDofsPerNode - 1 + 3][9]  = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 3][10] = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 12] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 4] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 20];
            transformation[commonDofsPerNode - 1 + 3][11] = 0;
            transformation[commonDofsPerNode - 1 + 3][12] = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 3][13] = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 13] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 5] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 21];
            transformation[commonDofsPerNode - 1 + 3][14] = 0;
            transformation[commonDofsPerNode - 1 + 3][15] = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 3][16] = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 14] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 6] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 22];
            transformation[commonDofsPerNode - 1 + 3][17] = 0;
            transformation[commonDofsPerNode - 1 + 3][18] = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 3][19] = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 15] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 7] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 23];
            transformation[commonDofsPerNode - 1 + 3][20] = 0;
            transformation[commonDofsPerNode - 1 + 3][21] = -jacobianAndInverse.Item2[1, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] - jacobianAndInverse.Item2[1, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] - jacobianAndInverse.Item2[1, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 3][22] = jacobianAndInverse.Item2[0, 1] * hostShapeFunctions[hostShapeFunctionLength - 1 + 16] + jacobianAndInverse.Item2[0, 0] * hostShapeFunctions[hostShapeFunctionLength - 1 + 8] + jacobianAndInverse.Item2[0, 2] * hostShapeFunctions[hostShapeFunctionLength - 1 + 24];
            transformation[commonDofsPerNode - 1 + 3][23] = 0;

            for (int j = commonDofsPerNode; j < commonDofsPerNode + 3; j++)
            {
                for (int k = 0; k < 24; k++)
                {
                    transformation[j][k] *= 0.5;
                }
            }

            return(transformation);
        }
 public double[][] GetTransformationVector(EmbeddedNode node)
 {
     return(GetTransformationVectorForTranslationsOnly(node));
 }