/// <inheritdoc/>
        public Matrix CalcLocalStiffnessMatrix(Element targetElement)
        {
            //edit
            var b = GetBMatrixAt(targetElement, 0, 0, 0);
            var d = GetDMatrixAt(targetElement, 0, 0, 0);

            var k = b.Transpose() * d * b;

            var v = GetJMatrixAt(targetElement, 0, 0, 0).Determinant() / 6.0;

            k.Scale(v);

            return(k);

            return(ElementHelperExtensions.CalcLocalKMatrix_Tetrahedron(this, targetElement));
        }
Example #2
0
        /// <inheritdoc/>
        public Matrix GetNMatrixAt(Element targetElement, params double[] isoCoords)
        {
            var xi = isoCoords[0];

            if (xi < -1 || xi > 1)
            {
                throw new ArgumentOutOfRangeException(nameof(isoCoords));
            }

            var bar = targetElement as BarElement;

            if (bar == null)
            {
                throw new Exception();
            }

            var L = (bar.EndNode.Location - bar.StartNode.Location).Length;

            var n1 = 1 / 4.0 * (1 - xi) * (1 - xi) * (2 + xi); //[slope(-1) = slope(1) = val(1) = 0, val(-1) = 1]
            var m1 = L / 8.0 * (1 - xi) * (1 - xi) * (xi + 1); //[slope(-1) = 1, slope(1) = val(1) = val(-1) = 0]

            var n2 = 1 / 4.0 * (1 + xi) * (1 + xi) * (2 - xi); //[val(1) = 1, slope(-1) = slope(1) = val(-1) = 0]
            var m2 = L / 8.0 * (1 + xi) * (1 + xi) * (xi - 1); //[slope(1) = 1, slope(-1) = val(1) = val(-1) = 0]


            var buf = new Matrix(1, 4);

            double[] arr;

            if (_direction == BeamDirection.Z)
            {
                arr = new double[] { n1, -m1, n2, -m2 }
            }
            ;
            else
            {
                arr = new double[] { n1, m1, n2, m2 }
            };

            buf.FillRow(0, arr);


            ElementHelperExtensions.RemoveReleasedMembers_bar(this, targetElement, buf);

            return(buf);
        }
Example #3
0
        /// <inheritdoc/>
        public Matrix CalcLocalStiffnessMatrix(Element targetElement)
        {
            /**/
            var tetra = targetElement as TetrahedronElement;

            var X = (Matrix)targetElement.AllocateFromPool(4, 4);

            {
                var ps = tetra.Nodes.Select(i => i.Location).ToArray();

                {//9.11
                    X.SetRow(0, new double[] { 1, 1, 1, 1 });
                    X.SetRow(1, new double[] { ps[0].X, ps[1].X, ps[2].X, ps[3].X });
                    X.SetRow(2, new double[] { ps[0].Y, ps[1].Y, ps[2].Y, ps[3].Y });
                    X.SetRow(3, new double[] { ps[0].Z, ps[1].Z, ps[2].Z, ps[3].Z });
                }
            }
            /**/
            //edit
            var b = GetBMatrixAt(targetElement, 0, 0, 0);
            var d = GetDMatrixAt(targetElement, 0, 0, 0);

            var k = (b.Transpose() * d) * b;

            var v = X.Determinant() / 6.0;


            if (v < 0)
            {
                throw new Exception();
            }


            k.Scale(v);

            return(k);

            return(ElementHelperExtensions.CalcLocalKMatrix_Tetrahedron(this, targetElement));
        }
Example #4
0
 /// <inheritdoc/>
 public Matrix CalcLocalCMatrix(Element targetElement)
 {
     return(ElementHelperExtensions.CalcLocalCMatrix_Bar(this, targetElement));
 }
Example #5
0
        /// <inheritdoc/>
        public Matrix CalcLocalMMatrix(Element targetElement)
        {
            var buf = ElementHelperExtensions.CalcLocalMMatrix_Bar(this, targetElement);

            return(buf);
        }
Example #6
0
        public Matrix CalcLocalStiffnessMatrix(Element targetElement)
        {
            var buf = ElementHelperExtensions.CalcLocalKMatrix_Triangle(this, targetElement);

            return(buf);
        }
Example #7
0
 /// <inheritdoc/>
 public Matrix CalcLocalKMatrix(Element targetElement)
 {
     return(ElementHelperExtensions.CalcLocalKMatrix_Triangle(this, targetElement));
 }