public static void SetRandomiseSections(Model mdl)
        {
            foreach (var ele in mdl.Elements)
            {
                if (ele is Elements.BarElement)
                {
                    var br = ele as Elements.BarElement;

                    var sec = new Sections.UniformParametric1DSection();

                    var b = RandomHelper.GetRandomNumber(0.03, 0.05);
                    var h = RandomHelper.GetRandomNumber(0.03, 0.05);

                    sec.A  = b * h;
                    sec.Iy = b * b * b * h / 12;
                    sec.Iz = h * h * h * b / 12;

                    br.Section = sec;
                }

                if (ele is Elements.TriangleElement)
                {
                    var tri = ele as Elements.TriangleElement;

                    var sec = new Sections.UniformParametric2DSection();

                    var t = RandomHelper.GetRandomNumber(0.03, 0.05);
                    sec.T = t;

                    tri.Section = sec;
                }
            }
        }
Exemple #2
0
        public static void SetRandomiseSections(Model mdl)
        {
            foreach (var ele in mdl.Elements)
            {
                if (ele is Elements.BarElement)
                {
                    var br = ele as Elements.BarElement;

                    var sec = new Sections.UniformParametric1DSection();

                    var b = RandomStuff.GetRandomNumber(0.03, 0.05);
                    var h = RandomStuff.GetRandomNumber(0.03, 0.05);

                    sec.A  = b * h;
                    sec.Iy = b * b * b * h / 12;
                    sec.Iz = h * h * h * b / 12;
                    sec.J  = (sec.Iy + sec.Iz) / 2;//!!!

                    br.Section = sec;
                }
            }
        }
        static public void test1()
        {
            // Two span beam of 20m overall length with elements of 1m length

            List <Node>       nodeList    = new List <Node>();
            List <BarElement> elementList = new List <BarElement>();

            var model = new BriefFiniteElementNet.Model();

            for (double n = 0; n <= 20; n = n + 1)
            {
                nodeList.Add(new Node(x: n, y: 0.0, z: 0.0)
                {
                    Label = "N" + n
                });
            }

            nodeList[0].Constraints  = Constraints.MovementFixed & Constraints.FixedRX;
            nodeList[10].Constraints = Constraints.FixedDZ & Constraints.FixedDY;                 // z = vertical
            nodeList[nodeList.Count - 1].Constraints = Constraints.FixedDZ & Constraints.FixedDY; // z = vertical

            model.Nodes.AddRange(nodeList);

            model.Nodes[10].Settlements.Add(new Settlement(LoadCase.DefaultLoadCase, new Displacement(0, 0, -0.0000000000010, 0, 0, 0)));             // This does not seem to be working correctly based on the reported displacement at Node 10

            var load1 = new BriefFiniteElementNet.Loads.UniformLoad(LoadCase.DefaultLoadCase, new Vector(0, 0, 1), -6000, CoordinationSystem.Global); // Load in N/m

            var a     = 0.1;                                                                                                                          // m²
            var iy    = 0.008333;                                                                                                                     // m4
            var iz    = 8.333e-5;                                                                                                                     // m4
            var j     = 0.1 * 0.1 * 0.1 * 1 / 12.0;                                                                                                   // m4
            var e     = 205e9;                                                                                                                        // N/m²
            var nu    = 0.3;                                                                                                                          // Poisson's ratio
            var secAA = new BriefFiniteElementNet.Sections.UniformParametric1DSection(a, iy, iz, j);

            var mat = BriefFiniteElementNet.Materials.UniformIsotropicMaterial.CreateFromYoungPoisson(e, nu);

            for (int m = 0; m <= 19; m++)
            {
                BarElement el = new BarElement(nodeList[m], nodeList[m + 1]);
                el.Section  = secAA;
                el.Material = mat;
                el.Loads.Add(load1);
                elementList.Add(el);
            }

            model.Elements.Add(elementList.ToArray());

            model.Solve_MPC();//or model.Solve();

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

            PosdefChecker.CheckModel_mpc(model, LoadCase.DefaultLoadCase);


            var nde  = nodeList[10];
            var disp = nde.GetNodalDisplacement();

            Console.WriteLine("Node 10 displacement in Z direction is {0:0.000} m", disp.DZ);
            Console.WriteLine("Node 10 rotation in YY direction is {0:0.000} rads\n", disp.RY);

            foreach (BarElement elem in elementList)
            {
                Force f1 = elem.GetExactInternalForceAt(-0.999999);  // -1 = start, 0 = mid, 1 = end, exact solver takes UDL on member into account, doesn't then accept -1 or 1
                Console.WriteLine("Element BMyy is {0:0.000} kNm", f1.My / 1000);
            }


            var str = new MemoryStream();

            Model.Save(str, model);

            str.Position = 0;
            var m2 = Model.Load(str);

            Console.WriteLine("Element BMyy is {0:0.000} kNm", elementList[19].GetExactInternalForceAt(0.999999).My / 1000);
        }