예제 #1
0
        private static void TestTriangle()
        {
            var t  = 0.01;
            var e  = 210e9;
            var nu = 0.2;

            var n1 = new Node(new Point(0, 0, 0));
            var n2 = new Node(new Point(3, 5, 7));
            var n3 = new Node(new Point(1, -5, 4));

            var dkt = new TriangleFlatShell()
            {
                Behavior       = PlaneElementBehaviour.ThinPlate,
                PoissonRatio   = nu,
                ElasticModulus = e,
                Thickness      = t
            };


            dkt.Nodes[0] = n1;
            dkt.Nodes[1] = n2;
            dkt.Nodes[2] = n3;

            var tri = new TriangleElement();

            tri.Behavior = PlateElementBehaviours.Shell;
            tri.Section  = new UniformParametric2DSection()
            {
                T = t
            };
            tri.Material = new UniformIsotropicMaterial(e, nu);// {E = e, Nu = nu};

            tri.Nodes[0] = n1;
            tri.Nodes[1] = n2;
            tri.Nodes[2] = n3;


            var kTri = tri.GetLocalStifnessMatrix();
            var kDkt = dkt.GetLocalPlateBendingStiffnessMatrix();

            var d = kTri - kDkt;

            var xi  = 0.162598494;
            var eta = 0.284984989;

            var b1   = new DktHelper().GetBMatrixAt(tri, xi, eta);
            var lpts = dkt.GetLocalPoints();

            var b2 = DktElement.GetBMatrix(xi, eta,
                                           new[] { lpts[0].X, lpts[1].X, lpts[2].X },
                                           new[] { lpts[0].Y, lpts[1].Y, lpts[2].Y });

            // new DktHelper().GetBMatrixAt(tri, tri.GetTransformationMatrix(), xi, eta);


            tri.GetLocalStifnessMatrix();
            //GC.Collect();

            var db = b1 - b2;
        }
        public Force[] GetGlobalEquivalentNodalLoads(DktElement element)
        {
            var a = (element as DktElement).GetArea();

            Vector local = Vector.Zero;


            if (CoordinationSystem == CoordinationSystem.Global)
            {
                var global = new Vector(_ux, _uy, _uz);

                local = element.TranformGlobalToLocal(global);
            }
            else
            {
                local = new Vector(_ux, _uy, _uz);
            }

            local.X = local.Y = 0;//dkt only local Uz

            var glob = element.TranformLocalToGlobal(local);

            var buf = new Force[]
            { new Force(glob * a / 3, Vector.Zero), new Force(glob * a / 3, Vector.Zero), new Force(glob * a / 3, Vector.Zero) };

            return(buf);
        }
        private void AddDktElement(MeshBuilder bldr, DktElement elm)
        {
            PolygonYz section = null;

            var r = ElementVisualThickness / 2;


            var p1 = elm.Nodes[0].Location;
            var p2 = elm.Nodes[1].Location;
            var p3 = elm.Nodes[2].Location;


            bldr.AddTriangle(p1, p3, p2);
        }
예제 #4
0
        private Force[] GetGlobalEquivalentNodalLoads(DktElement elm)
        {
            //using lumped method.

            var area = elm.GetArea();

            var totv = area * elm.Thickness;

            var totfx = _vx * totv;
            var totfy = _vy * totv;
            var totfz = _vz * totv;

            var f = new Force(totfx / 3, totfy / 3, totfz / 3, 0, 0, 0);

            return(new Force[] { f, f, f });
        }
예제 #5
0
        public static void Test2()
        {
            //a console beam

            #region creating model

            var model = new Model();

            var l = 10; //in [m]
            var w = 1;

            var t = 0.1;    //

            var e  = 210e9; //3600 ksi
            var no = 0.2;   //Poisson ratio

            var n = 10;
            var m = 100;

            var span = 0.1;

            var nodes = new Node[n + 1][];

            for (var i = 0; i <= n; i++)
            {
                nodes[i] = new Node[m + 1];

                for (var j = 0; j <= m; j++)
                {
                    model.Nodes.Add(nodes[i][j] = new Node(i * span, j * span, 0));

                    if (j == 0)
                    {
                        nodes[i][j].Constraints = Constraint.Fixed;
                    }

                    var newCns = new Constraint(DofConstraint.Fixed, DofConstraint.Fixed, DofConstraint.Released,
                                                DofConstraint.Released, DofConstraint.Released, DofConstraint.Fixed);

                    nodes[i][j].Constraints = nodes[i][j].Constraints & newCns;
                }
            }

            for (var i = 0; i < n; i++)
            {
                for (var j = 0; j < m; j++)
                {
                    //first elements
                    var elm1 = new DktElement()
                    {
                        ElasticModulus = e, PoissonRatio = no, Thickness = t
                    };

                    elm1.Nodes[0] = nodes[i][j];
                    elm1.Nodes[1] = nodes[i][j + 1];
                    elm1.Nodes[2] = nodes[i + 1][j];

                    model.Elements.Add(elm1);

                    //second elements
                    var elm2 = new DktElement()
                    {
                        ElasticModulus = e, PoissonRatio = no, Thickness = t
                    };

                    elm2.Nodes[0] = nodes[i + 1][j + 1];
                    elm2.Nodes[1] = nodes[i][j + 1];
                    elm2.Nodes[2] = nodes[i + 1][j];

                    model.Elements.Add(elm2);
                }
            }

            //loading, 0.1 kips/sq. in. on all elements
            foreach (var elm in model.Elements)
            {
                elm.Loads.Add(new UniformLoadForPlanarElements()
                {
                    CoordinationSystem = CoordinationSystem.Global,
                    Uz = -1e3
                });
            }

            //test loading, not one who is defined at pdf

            /*
             * for (var i = 0; i < n; i++)
             * {
             *  for (var j = 0; j < n; j++)
             *  {
             *      nodes[i][j].Loads.Add(new NodalLoad(new Force(0, 0, 100, 0, 0, 0)));
             *  }
             * }
             */


            #endregion

            model.Trace.Listeners.Add(new ConsoleTraceListener());
            new ModelWarningChecker().CheckModel(model);

            model.Solve();

            var d = nodes[n / 2][m].GetNodalDisplacement();
        }
예제 #6
0
        public static void Test1()
        {
            //Example 7, page 120 of "Kaushalkumar Kansara" thesis

            #region creating model

            var model = new Model();

            var l = 144 * 0.0254;    //in [m]
            var t = 6 * 0.0254;      //

            var e  = 24821126255.44; //3600 ksi
            var no = 0.2;            //Poisson ratio

            var n = 9;

            var span = l / (n - 1);

            var nodes = new Node[n][];

            for (var i = 0; i < n; i++)
            {
                nodes[i] = new Node[n];

                for (var j = 0; j < n; j++)
                {
                    model.Nodes.Add(nodes[i][j] = new Node(i * span, j * span, 0));

                    if (i == 0 || i == n - 1 || j == 0 || j == n - 1)
                    {
                        nodes[i][j].Constraints = Constraint.Fixed;
                    }

                    var newCns = new Constraint(DofConstraint.Fixed, DofConstraint.Fixed, DofConstraint.Released,
                                                DofConstraint.Released, DofConstraint.Released, DofConstraint.Fixed);

                    nodes[i][j].Constraints = nodes[i][j].Constraints & newCns;
                }
            }

            for (var i = 0; i < n - 1; i++)
            {
                for (var j = 0; j < n - 1; j++)
                {
                    //first elements
                    var elm1 = new DktElement()
                    {
                        ElasticModulus = e, PoissonRatio = no, Thickness = t
                    };

                    elm1.Nodes[0] = nodes[i][j];
                    elm1.Nodes[1] = nodes[i][j + 1];
                    elm1.Nodes[2] = nodes[i + 1][j];

                    model.Elements.Add(elm1);

                    //second elements
                    var elm2 = new DktElement()
                    {
                        ElasticModulus = e, PoissonRatio = no, Thickness = t
                    };

                    elm2.Nodes[0] = nodes[i + 1][j + 1];
                    elm2.Nodes[1] = nodes[i][j + 1];
                    elm2.Nodes[2] = nodes[i + 1][j];

                    model.Elements.Add(elm2);
                }
            }

            //loading, 0.1 kips/sq. in. on all elements
            foreach (var elm in model.Elements)
            {
                elm.Loads.Add(new UniformLoadForPlanarElements()
                {
                    CoordinationSystem = CoordinationSystem.Global,
                    Uz = 689475.728 //0.1 kips/sq. in.
                });
            }

            //test loading, not one who is defined at pdf

            /*
             * for (var i = 0; i < n; i++)
             * {
             *  for (var j = 0; j < n; j++)
             *  {
             *      nodes[i][j].Loads.Add(new NodalLoad(new Force(0, 0, 100, 0, 0, 0)));
             *  }
             * }
             */


            #endregion

            model.Trace.Listeners.Add(new ConsoleTraceListener());
            new ModelWarningChecker().CheckModel(model);

            model.Solve();

            var d = nodes[n / 2][n / 2].GetNodalDisplacement();
        }