Пример #1
0
        /// <inheritdoc/>
        public FluentElementPermuteManager.ElementLocalDof[] GetDofOrder(Element targetElement)
        {
            var n = targetElement.Nodes.Length;

            var buf = new FluentElementPermuteManager.ElementLocalDof[n];

            for (int i = 0; i < n; i++)
            {
                buf[i] = new FluentElementPermuteManager.ElementLocalDof(i, DoF.Rx);
            }

            return(buf);
        }
Пример #2
0
        /// <inheritdoc/>
        public FluentElementPermuteManager.ElementLocalDof[] GetDofOrder(Element targetElement)
        {
            var buf = new FluentElementPermuteManager.ElementLocalDof[]
            {
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dx),
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dy),

                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dx),
                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dy),

                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Dx),
                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Dy),
            };

            return(buf);
        }
Пример #3
0
        public override Matrix GetGlobalStifnessMatrix()
        {
            if (nodes[0].Location.Equals(nodes[1].Location))
            {
                var kl = new Matrix(6, 6);

                kl[0, 0]     = kl[1, 1] = kl[2, 2] = kl[3, 3] =
                    kl[4, 4] = kl[5, 5] = _k;

                kl[1, 0]         = kl[0, 1] =
                    kl[2, 3]     = kl[3, 2] =
                        kl[4, 5] = kl[5, 4] = -_k;

                var currentOrder = new FluentElementPermuteManager.ElementLocalDof[]
                {
                    new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dx),
                    new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dx),

                    new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dy),
                    new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dy),

                    new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dz),
                    new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dz),
                };

                var kle = FluentElementPermuteManager.FullyExpand(kl, currentOrder, 2);

                return(kle);
            }
            else
            {
                var kl = new Matrix(12, 12);//.FromRowColCoreArray(12, 12, baseArr);

                kl[0, 0] = kl[6, 6] = _k;
                kl[6, 0] = kl[0, 6] = -_k;

                var t = CalcUtil.Get2NodeElementTransformationMatrix(EndNode.Location - StartNode.Location);


                return(t.Transpose() * kl * t);
            }


            throw new NotImplementedException();
        }
Пример #4
0
        /// <inheritdoc />
        public override Matrix GetGlobalStifnessMatrix()
        {
            //step 1 : get points in local system
            //step 2 : get local stiffness matrix
            //step 3 : expand local stiffness matrix
            //step 4 : get global stiffness matrix

            //step 1
            var ls = GetLocalPoints();

            var xs = new double[] { ls[0].X, ls[1].X, ls[2].X };
            var ys = new double[] { ls[0].Y, ls[1].Y, ls[2].Y };

            //step 2
            var kl = DktElement.GetStiffnessMatrix(xs, ys, this._thickness, this.ElasticModulus, this.PoissonRatio);

            //step 3
            var currentOrder = new FluentElementPermuteManager.ElementLocalDof[]
            {
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Ry),

                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Ry),

                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Ry),
            };

            var kle = FluentElementPermuteManager.FullyExpand(kl, currentOrder, 3);

            var lambda = GetTransformationMatrix();

            var t = Matrix.DiagonallyRepeat(lambda.Transpose(), 6); // eq. 5-16 page 78 (87 of file)

            //step 4 : get global stiffness matrix
            var buf = t.Transpose() * kle * t; //eq. 5-15 p77

            return(buf);
        }
Пример #5
0
        public Matrix GetLocalPlateBendingStiffnessMatrix()
        {
            //dkt

            //step 1 : get points in local system
            //step 2 : get local stiffness matrix
            //step 3 : expand local stiffness matrix
            //step 4 : get global stiffness matrix

            //step 1
            var ls = GetLocalPoints();

            var xs = new double[] { ls[0].X, ls[1].X, ls[2].X };
            var ys = new double[] { ls[0].Y, ls[1].Y, ls[2].Y };

            //step 2
            var kl = DktElement.GetStiffnessMatrix(xs, ys, this._thickness, this.ElasticModulus, this.PoissonRatio);

            //step 3
            var currentOrder = new FluentElementPermuteManager.ElementLocalDof[]
            {
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(0, DoF.Ry),

                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(1, DoF.Ry),

                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Dz),
                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Rx),
                new FluentElementPermuteManager.ElementLocalDof(2, DoF.Ry),
            };

            var kle = FluentElementPermuteManager.FullyExpand(kl, currentOrder, 3);


            return(kle);
        }