Пример #1
0
        private static void WriteTrussElement(XmlWriter w, TrussElement2Node elm)
        {
            w.WriteStartElement("TrussElement2Node");

            w.WriteAttributeString("Node1Index", elm.StartNode.Index.ToString());
            w.WriteAttributeString("Node2Index", elm.EndNode.Index.ToString());

            w.WriteAttributeString("A", elm.A.ToString());
            w.WriteAttributeString("Density", elm.MassDensity.ToString());

            w.WriteEndElement();
        }
        public static void Test2()
        {
            Console.WriteLine("Simple 2D truss with 3 members");

            var model = new Model();

            var n1 = new Node(0, 0, 0);

            n1.Label = "n1";//Set a unique label for node
            var n2 = new Node(1, 0, 1.732)
            {
                Label = "n2"
            };                                              //using object initializer for assigning Label
            var n3 = new Node(1, 0, 0)
            {
                Label = "n3"
            };

            var e1 = new TrussElement2Node(n1, n2)
            {
                Label = "e1"
            };
            var e2 = new TrussElement2Node(n2, n3)
            {
                Label = "e2"
            };
            var e3 = new TrussElement2Node(n1, n3)
            {
                Label = "e3"
            };

            e1.A = e2.A = e3.A = 0.001;
            e1.E = e2.E = e3.E = 200e9;

            model.Nodes.Add(n1, n2, n3);
            model.Elements.Add(e1, e2, e3);

            n1.Constraints = Constraints.Fixed;
            n2.Constraints = Constraints.RotationFixed & Constraints.FixedDY;
            n3.Constraints = Constraints.Fixed;

            var force = new Force(10000, 0, 0, 0, 0, 0);

            n2.Loads.Add(new NodalLoad(force));//adds a load with LoadCase of DefaultLoadCase to node loads

            model.Solve();

            var d = n2.GetNodalDisplacement();

            Console.WriteLine("displacement on node 2: " + d.DX.ToString(CultureInfo.CurrentCulture));

            Console.ReadKey();
        }
        private void AddTrussElement(MeshBuilder bldr, TrussElement2Node elm)
        {
            PolygonYz section = null;

            var r = ElementVisualThickness / 2;


            if (elm.UseOverridedProperties)
            {
                section = new PolygonYz(
                    new PointYZ(-r, -r),
                    new PointYZ(-r, r),
                    new PointYZ(r, r),
                    new PointYZ(r, -r),
                    new PointYZ(-r, -r));
            }
            else
            {
                section = elm.Geometry;
            }


            for (var i = 0; i < section.Count - 1; i++)
            {
                var v1 = new Vector(0, section[i].Y, section[i].Z);
                var v2 = new Vector(0, section[i + 1].Y, section[i + 1].Z);

                var p1 = elm.StartNode.Location + elm.TransformLocalToGlobal(v1);
                var p2 = elm.StartNode.Location + elm.TransformLocalToGlobal(v2);

                var v = elm.EndNode.Location - elm.StartNode.Location;

                if (Math.Abs(v.Z) < 0.01)
                {
                    Guid.NewGuid();
                }

                var p3 = p1 + v;
                var p4 = p2 + v;

                var p13d = new Point3D(p1.X, p1.Y, p1.Z);
                var p23d = new Point3D(p2.X, p2.Y, p2.Z);
                var p33d = new Point3D(p3.X, p3.Y, p3.Z);
                var p43d = new Point3D(p4.X, p4.Y, p4.Z);

                bldr.AddTriangle(p13d, p33d, p23d);
                bldr.AddTriangle(p43d, p23d, p33d);
            }
        }
Пример #4
0
        private static void Example1()
        {
            Console.WriteLine("Example 1: Simple 3D truss with four members");


            // Initiating Model, Nodes and Members
            var model = new Model();

            var n1 = new Node(1, 1, 0);

            n1.Label = "n1";//Set a unique label for node
            var n2 = new Node(-1, 1, 0)
            {
                Label = "n2"
            };                                         //using object initializer for assigning Label
            var n3 = new Node(1, -1, 0)
            {
                Label = "n3"
            };
            var n4 = new Node(-1, -1, 0)
            {
                Label = "n4"
            };
            var n5 = new Node(0, 0, 1)
            {
                Label = "n5"
            };

            var e1 = new TrussElement2Node(n1, n5)
            {
                Label = "e1"
            };
            var e2 = new TrussElement2Node(n2, n5)
            {
                Label = "e2"
            };
            var e3 = new TrussElement2Node(n3, n5)
            {
                Label = "e3"
            };
            var e4 = new TrussElement2Node(n4, n5)
            {
                Label = "e4"
            };

            //Note: labels for all members should be unique, else you will receive InvalidLabelException when adding it to model

            e1.A = e2.A = e3.A = e4.A = 9e-4;
            e1.E = e2.E = e3.E = e4.E = 210e9;

            model.Nodes.Add(n1, n2, n3, n4, n5);
            model.Elements.Add(e1, e2, e3, e4);

            //Applying restrains


            n1.Constraints = n2.Constraints = n3.Constraints = n4.Constraints = Constraint.Fixed;
            n5.Constraints = Constraint.RotationFixed;


            //Applying load
            var force = new Force(0, 1000, -1000, 0, 0, 0);

            n5.Loads.Add(new NodalLoad(force));//adds a load with LoadCase of DefaultLoadCase to node loads

            //Adds a NodalLoad with Default LoadCase

            model.Solve();

            var r1 = n1.GetSupportReaction();
            var r2 = n2.GetSupportReaction();
            var r3 = n3.GetSupportReaction();
            var r4 = n4.GetSupportReaction();

            var rt = r1 + r2 + r3 + r4;//shows the Fz=1000 and Fx=Fy=Mx=My=Mz=0.0

            Console.WriteLine("Total reactions SUM :" + rt.ToString());
        }
Пример #5
0
        public override void UpdateCalc()
        {
            // Initiating Model, Nodes and Members
            model = new Model();

            double spt = _spacingTop.Value / 2;
            double spb = _spacingBottom.Value / 2;
            double spv = _spacingVertical.Value;

            var n1a = new BriefFiniteElementNet.Node(-spt, 0, spv)
            {
                Label = "1a"
            };
            var n1b = new BriefFiniteElementNet.Node(spt, 0, spv)
            {
                Label = "1b"
            };
            var n2a = new BriefFiniteElementNet.Node(0, -spb, 0)
            {
                Label = "2a"
            };
            var n2b = new BriefFiniteElementNet.Node(0, spb, 0)
            {
                Label = "2b"
            };

            var e1 = new TrussElement2Node(n1a, n2a)
            {
                Label = "e1"
            };
            var e2 = new TrussElement2Node(n1a, n2b)
            {
                Label = "e2"
            };
            var e3 = new TrussElement2Node(n1b, n2a)
            {
                Label = "e3"
            };
            var e4 = new TrussElement2Node(n1b, n2b)
            {
                Label = "e4"
            };
            var e5 = new TrussElement2Node(n1a, n1b)
            {
                Label = "e5"
            };
            var e6 = new TrussElement2Node(n2a, n2b)
            {
                Label = "e6"
            };

            //Note: labels for all members should be unique,
            //else you will receive InvalidLabelException when adding it to model

            e1.A = e2.A = e3.A = e4.A = e5.A = e6.A = 0.009;
            e1.E = e2.E = e3.E = e4.E = e5.E = e6.E = 210e9;

            model.Nodes.Add(n1a, n1b, n2a, n2b);
            model.Elements.Add(e1, e2, e3, e4, e5, e6);

            //Applying restraints

            n1a.Constraints = Constraint.FromString("100111");
            n1b.Constraints = Constraint.FromString("000111");
            n2a.Constraints = Constraint.FromString("111111");
            n2b.Constraints = Constraint.FromString("101111");

            //Applying load
            var forceA   = new Force(0, 0, -_loadA.Value / 2, 0, 0, 0);
            var forceB   = new Force(0, 0, -_loadA.Value / 2, 0, 0, 0);
            var loadCase = new LoadCase("test", LoadType.Live);

            n1a.Loads.Add(new NodalLoad(forceA, loadCase));
            n1b.Loads.Add(new NodalLoad(forceB, loadCase));
            var loadComb = new LoadCombination();

            loadComb.Add(loadCase, 1);

            //Adds a NodalLoad with Default LoadCase

            try
            {
                model.Solve();
                var rA        = n2a.GetSupportReaction(loadCase);
                var rB        = n2b.GetSupportReaction(loadCase);
                var T         = e6.GetInternalForceAt(0.5, loadComb);
                var F1        = e1.GetInternalForceAt(0.5, loadComb);
                var F2        = e3.GetInternalForceAt(0.5, loadComb);
                var Fresolved = F1 + F2;

                _reactionA.Value          = rA.Forces.Z;
                _reactionB.Value          = rB.Forces.Z;
                _strutResolvedForce.Value = Fresolved.Forces.Length;
                _tieForce.Value           = T.Forces.Length;
            }
            catch (Exception)
            {
                _reactionA.Value = double.NaN;
                _reactionB.Value = double.NaN;
            }
        }