Exemplo n.º 1
0
        public static Model GenerateRandomStructure(int nodeCount)
        {
            var rnd = new Random();

            var buf = new Model();

            for (int i = 0; i < nodeCount; i++)
            {
                var nde = new Node()
                {
                    Location = new Point(rnd.NextDouble() * 100, rnd.NextDouble() * 100, rnd.NextDouble() * 100)
                };
                buf.Nodes.Add(nde);
            }


            for (var i = 0; i < nodeCount - 1; i++)
            {
                var framElm = new FrameElement2Node()
                {
                    StartNode = buf.Nodes[i], EndNode = buf.Nodes[i + 1]
                };
                framElm.A  = 0.01;
                framElm.Iy = framElm.Iz = framElm.J = 0.1 * 0.1 * 0.1 * 0.1 / 12;
                framElm.E  = framElm.G = 210e9;

                buf.Elements.Add(framElm);
            }

            return(buf);
        }
        private void AddFrameElementLoad(MeshBuilder bldr, FrameElement2Node elm, Point[] localPoints)
        {
            var n = SamplingCount;

            var diagramPoints     = new Point[n]; //Y=Fx or Fy or etc
            var baseDiagramPoints = new Point[n]; //Y=0



            #region calculating the graph nodes

            var delta = (elm.EndNode.Location - elm.StartNode.Location).Length / (SamplingCount - 1);

            var xs = Enumerable.Range(0, SamplingCount).Select(i => i * delta).ToList();

            var st = elm.StartNode.Location;


            for (var i = 0; i < n; i++)
            {
                var x           = delta * i;
                var localPoint  = localPoints[i];//new Vector(x, y*scale, z*scale);
                var globalPoint = st + elm.TransformLocalToGlobal((Vector)localPoint);

                var globalBase = st + elm.TransformLocalToGlobal(new Vector(x, 0, 0));

                diagramPoints[i]     = globalPoint;
                baseDiagramPoints[i] = globalBase;
            }


            #endregion

            for (var i = 0; i < n - 1; i++)
            {
                var p1 = baseDiagramPoints[i];
                var p2 = baseDiagramPoints[i + 1];
                var p3 = diagramPoints[i];
                var p4 = diagramPoints[i + 1];

                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, p23d, p33d);
                bldr.AddTriangle(p33d, p23d, p43d);
            }
        }
        private void AddFrameElement(MeshBuilder bldr, FrameElement2Node 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);
            }
        }
Exemplo n.º 4
0
        public static Model GetRandomFrameModel(int n = 50)
        {
            var buf = new Model();

            var nodes = new Node[n];

            for (var i = 0; i < n; i++)
            {
                nodes[i] = new Node(BriefFiniteElementNet.RandomHelper.GetRandomNumber(0, 10), BriefFiniteElementNet.RandomHelper.GetRandomNumber(0, 10), BriefFiniteElementNet.RandomHelper.GetRandomNumber(0, 10));

                nodes[i].Constraints = BriefFiniteElementNet.RandomHelper.GetRandomConstraint();
            }

            buf.Nodes.Add(nodes);

            for (var i = 0; i < n; i++)
            {
                for (var j = 0; j < n; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }

                    var elm = new FrameElement2Node(nodes[i], nodes[j]);
                    elm.A  = BriefFiniteElementNet.RandomHelper.GetRandomNumber();
                    elm.Iy = BriefFiniteElementNet.RandomHelper.GetRandomNumber();
                    elm.Iz = BriefFiniteElementNet.RandomHelper.GetRandomNumber();
                    elm.J  = BriefFiniteElementNet.RandomHelper.GetRandomNumber();

                    elm.E = BriefFiniteElementNet.RandomHelper.GetRandomNumber();
                    elm.G = BriefFiniteElementNet.RandomHelper.GetRandomNumber();

                    var ld = new UniformLoad1D(BriefFiniteElementNet.RandomHelper.GetRandomNumber(100, 1000), LoadDirection.Z, CoordinationSystem.Global);

                    elm.Loads.Add(ld);

                    buf.Elements.Add(elm);
                }
            }

            for (int i = 0; i < n; i++)
            {
                nodes[i].Loads.Add(new NodalLoad(BriefFiniteElementNet.RandomHelper.GetRandomForce(1000, 10000)));
            }

            return(buf);
        }
Exemplo n.º 5
0
        public static Model GenerateSimpleBeam(int nodes)
        {
            var delta = 1.0;

            var buf = new Model();

            for (int i = 0; i < nodes; i++)
            {
                buf.Nodes.Add(new Node()
                {
                    Location = new Point(i * delta, 0, 0)
                });
            }

            for (int i = 0; i < nodes - 1; i++)
            {
                var start = buf.Nodes[i];
                var end   = buf.Nodes[i + 1];
                var elm   = new FrameElement2Node()
                {
                    StartNode = start, EndNode = end
                };
                buf.Elements.Add(elm);
            }

            foreach (var elm in buf.Elements)
            {
                var framElm = elm as FrameElement2Node;

                if (framElm == null)
                {
                    continue;
                }

                framElm.A  = 0.01;
                framElm.Iy = framElm.Iz = 0.1 * 0.1 * 0.1 * 0.1 / 12;
                framElm.J  = 2 * 0.1 * 0.1 * 0.1 * 0.1 / 12;
                framElm.E  = 210e9;
                var no = 0.3;
                framElm.G = framElm.E / (2 * (1 + no));
            }

            buf.Nodes[0].Constraints = Constraint.Fixed;

            TagModel(buf);
            return(buf);
        }
        private static FrameElement2Node MakeBeam(Node pN1, Node pN2, string pName)
        {
            var frameBeam = new FrameElement2Node(pN1, pN2);

            frameBeam.Label               = pName;
            frameBeam.A                   = 116;
            frameBeam.Ay                  = 105;
            frameBeam.Az                  = 105;
            frameBeam.J                   = 408;
            frameBeam.Iy                  = 1080;
            frameBeam.Iz                  = 1080;
            frameBeam.E                   = 1660;
            frameBeam.G                   = 0.620;
            frameBeam.MassDensity         = 0.3;
            frameBeam.MassFormulationType = MassFormulation.Consistent;
            return(frameBeam);
        }
        public static void TestBarStiffness()
        {
            var iy = 0.02;
            var iz = 0.02;
            var a  = 0.01;

            var j = iy + iz;

            var e = 210e9;
            var g = 70e9;
            //var rho = 13;

            var model = new Model();

            model.Nodes.Add(new Node(0, 0, 0));
            model.Nodes.Add(new Node(3, 5, 7));

            var barElement = new BarElement(model.Nodes[0], model.Nodes[1]);

            barElement.Behavior = BarElementBehaviours.FullFrame;
            barElement.Material = UniformIsotropicMaterial.CreateFromYoungShear(e, g);

            var frameElement = new FrameElement2Node(model.Nodes[0], model.Nodes[1])
            {
                Iy = iy,
                Iz = iz,
                A  = a,
                J  = j,
                E  = e,
                G  = g,
                //MassDensity = rho
            };

            frameElement.ConsiderShearDeformation = false;

            //barElement.Material = new UniformBarMaterial(e, g, rho);
            barElement.Section = new UniformParametric1DSection()
            {
                Iy = iy, Iz = iz, A = a
            };

            var frK  = frameElement.GetGlobalStifnessMatrix();
            var barK = barElement.GetGlobalStifnessMatrix();

            var d = (frK - barK).Max(i => Math.Abs(i));
        }
Exemplo n.º 8
0
        public static void TestNoFreeDof()
        {
            var model = new Model();

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

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

            var elm = new FrameElement2Node(n1, n2);

            n1.Constraints = n2.Constraints = Constraint.Fixed;

            model.Nodes.Add(n1, n2);

            model.Elements.Add(elm);

            model.Solve();
        }
 private int Index(FrameElement2Node elm)
 {
     return(elements.IndexOfReference(elm));
 }
Exemplo n.º 10
0
        public static void ValidateConsoleUniformLoad()
        {
            var model = new Model();

            var ndes = new Node[] {
                new Node(0, 0, 0),
                new Node(3, 0, 0)
            };

            /**/
            var h = 0.1;
            var w = 0.05;

            var a  = h * w;
            var iy = h * h * h * w / 12;
            var iz = w * w * w * h / 12;
            var j  = iy + iz;
            var e  = 210e9;
            var nu = 0.3;

            var g = e / (2 * 1 + nu);
            /**/

            var sec = new Sections.UniformParametric1DSection(a, iy, iz, j);
            var mat = UniformIsotropicMaterial.CreateFromYoungShear(e, g);

            BarElement        belm;
            FrameElement2Node frmelm;

            belm = new BarElement(ndes[0], ndes[1])
            {
                Material = mat, Section = sec, Behavior = BarElementBehaviours.FullFrame
            };
            frmelm = new FrameElement2Node(ndes[0], ndes[1])
            {
                Iz = sec.Iz, Iy = sec.Iy, A = sec.A, J = sec.J, E = e, G = g
            };

            var bk   = belm.GetGlobalStifnessMatrix();
            var fk   = frmelm.GetGlobalStifnessMatrix();
            var diff = bk - fk;

            model.Elements.Add(belm);

            model.Nodes.Add(ndes);

            ndes[0].Constraints = Constraints.Fixed;

            ndes[1].Constraints =
                Constraints.FixedDX & Constraints.FixedRX
                //& Constraints.FixedDY & Constraints.FixedRZ//find beam.z dofs

            ;
            //(model.Elements[0] as BarElement).Loads.Add(new Loads.UniformLoad(LoadCase.DefaultLoadCase, Vector.K, 1000, CoordinationSystem.Local));

            ndes[1].Loads.Add(new NodalLoad(new Force(Vector.K, Vector.Zero)));
            ndes[1].Loads.Add(new NodalLoad(new Force(Vector.J * 2, Vector.Zero)));

            model.Solve_MPC();


            var d = model.Nodes[1].GetNodalDisplacement();

            var t = (model.Elements[0] as BarElement).GetInternalForceAt(-1);


            var res = OpenseesValidator.OpenseesValidate(model, LoadCase.DefaultLoadCase, false);

            var disp = res[0];

            var idx = disp.Columns["Absolute Error"].Ordinal;

            var max = disp.Rows.Cast <DataRow>().Select(i => (double)i[idx]).Max();
        }
Exemplo n.º 11
0
        private static void TestBar()
        {
            var iy = 0.03;
            var iz = 0.02;
            var a  = 0.01;
            var j  = iy + iz;

            var e   = 7;
            var g   = 11;
            var rho = 13;

            var model = new Model();

            model.Nodes.Add(new Node(0, 0, 0));
            model.Nodes.Add(new Node(1, 0, 0));

            var barElement = new BarElement(model.Nodes[0], model.Nodes[1]);

            barElement.Behavior = BarElementBehaviours.FullFrame;

            var frameElement = new FrameElement2Node(model.Nodes[0], model.Nodes[1])
            {
                Iy          = iy,
                Iz          = iz,
                A           = a,
                J           = j,
                E           = e,
                G           = g,
                MassDensity = rho
            };


            //barElement.Material = new UniformBarMaterial(e, g, rho);
            barElement.Section = new UniformParametric1DSection()
            {
                Iy = iy, Iz = iz, A = a
            };

            frameElement.MassFormulationType = MassFormulation.Consistent;

            //barElement.EndConnection = BarElementEndConnection.TotallyHinged;
            //barElement.StartConnection = BarElementEndConnection.TotallyHinged;

            frameElement.HingedAtStart = true;
            //frameElement.HingedAtEnd = true;


            var frameM = frameElement.GetLocalStiffnessMatrix();
            //MathUtil.FillLowerTriangleFromUpperTriangle(frameM);

            var barM = barElement.GetLocalStifnessMatrix();

            var t = 1;                      //- 1e-10;

            var d    = (frameM - t * barM); //
            var dMax = d.CoreArray.Max(i => Math.Abs(i));

            model.Nodes[0].Constraints = Constraint.Fixed;

            model.Solve();
        }
Exemplo n.º 12
0
        public static Model Generate3DFrameElementGrid(int m, int n, int l)
        {
            var buf = new Model();

            var dx = 1.0;
            var dy = 1.0;
            var dz = 1.0;

            var nodes = new Node[m, n, l];

            for (int k = 0; k < l; k++)
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        var pos = new Point(i * dx, j * dy, k * dz);
                        var nde = new Node()
                        {
                            Location = pos
                        };
                        buf.Nodes.Add(nde);
                        nodes[j, i, k] = nde;
                    }
                }
            }

            for (int k = 0; k < l - 1; k++)
            {
                for (int i = 0; i < n; i++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        var elm = new FrameElement2Node();
                        elm.StartNode = nodes[j, i, k];
                        elm.EndNode   = nodes[j, i, k + 1];
                        buf.Elements.Add(elm);
                    }
                }
            }


            for (int i = 0; i < n - 1; i++)
            {
                for (int k = 0; k < l; k++)
                {
                    for (int j = 0; j < m; j++)
                    {
                        var elm = new FrameElement2Node();
                        elm.StartNode = nodes[j, i, k];
                        elm.EndNode   = nodes[j, i + 1, k];
                        buf.Elements.Add(elm);
                    }
                }
            }

            for (int j = 0; j < m - 1; j++)
            {
                for (int k = 0; k < l; k++)
                {
                    for (int i = 0; i < n; i++)

                    {
                        var elm = new FrameElement2Node();
                        elm.StartNode = nodes[j, i, k];
                        elm.EndNode   = nodes[j + 1, i, k];
                        buf.Elements.Add(elm);
                    }
                }
            }

            foreach (var elm in buf.Elements)
            {
                var framElm = elm as FrameElement2Node;

                if (framElm == null)
                {
                    continue;
                }

                framElm.A           = 7.64 * 1e-4;                        // 0.01;
                framElm.Iy          = framElm.Iz = framElm.J = 80 * 1e-8; // 0.1 * 0.1 * 0.1 * 0.1 / 12.0;
                framElm.E           = framElm.G = 210e9;
                framElm.MassDensity = 7800;
            }


            for (int i = 0; i < n * m; i++)
            {
                buf.Nodes[i].Constraints = Constraint.Fixed;
            }


            return(buf);
        }
Exemplo n.º 13
0
        private static void Example2()
        {
            Console.WriteLine("Example 1: Simple 3D Frame with distributed loads");

            var model = new Model();

            var n1 = new Node(-10, 0, 0);
            var n2 = new Node(-10, 0, 6);
            var n3 = new Node(0, 0, 8);
            var n4 = new Node(10, 0, 6);
            var n5 = new Node(10, 0, 0);

            model.Nodes.Add(n1, n2, n3, n4, n5);

            var secAA = new PolygonYz(SectionGenerator.GetISetion(0.24, 0.67, 0.01, 0.006));
            var secBB = new PolygonYz(SectionGenerator.GetISetion(0.24, 0.52, 0.01, 0.006));

            var e1 = new FrameElement2Node(n1, n2);

            e1.Label = "e1";
            var e2 = new FrameElement2Node(n2, n3);

            e2.Label = "e2";
            var e3 = new FrameElement2Node(n3, n4);

            e3.Label = "e3";
            var e4 = new FrameElement2Node(n4, n5);

            e4.Label = "e4";


            e1.Geometry = e4.Geometry = secAA;
            e2.Geometry = e3.Geometry = secBB;

            e1.E = e2.E = e3.E = e4.E = 210e9;
            e1.G = e2.G = e3.G = e4.G = 210e9 / (2 * (1 + 0.3));//G = E / (2*(1+no))

            e1.UseOverridedProperties     =
                e2.UseOverridedProperties = e3.UseOverridedProperties = e4.UseOverridedProperties = false;

            model.Elements.Add(e1, e2, e3, e4);


            n1.Constraints                 =
                n2.Constraints             =
                    n3.Constraints         =
                        n4.Constraints     =
                            n5.Constraints =
                                Constraints.FixedDY & Constraints.FixedRX & Constraints.FixedRZ;//DY fixed and RX fixed and RZ fixed


            n1.Constraints = n1.Constraints & Constraints.MovementFixed;
            n5.Constraints = n5.Constraints & Constraints.MovementFixed;


            var ll = new UniformLoad1D(-10000, LoadDirection.Z, CoordinationSystem.Global);
            var lr = new UniformLoad1D(-10000, LoadDirection.Z, CoordinationSystem.Local);

            e2.Loads.Add(ll);
            e3.Loads.Add(lr);

            var wnd = WpfTraceListener.CreateModelTrace(model);

            new ModelWarningChecker().CheckModel(model);
            wnd.ShowDialog();

            model.Solve();
        }