示例#1
0
        public static ValidationResult Test_Trapezoid_1()
        {
            var buff = new ValidationResult();

            buff.Title = "Test #2 for Trapezoid Load on BarElement";

            buff.Span = new HtmlTag("span");

            buff.Span.Add("p").Text("endforces from Trapezoidal load with 0 offset and same start and end should be same as uniform load");

            var elm = new BarElement(new Node(0, 0, 0), new Node(1, 0, 0));

            elm.Behavior = BarElementBehaviours.BeamZ;

            var direction = Vector.K + Vector.I + Vector.J;
            var ld_u      = new Loads.UniformLoad();

            ld_u.Magnitude          = 1;//*Math.Sqrt(2);
            ld_u.Direction          = direction;
            ld_u.CoordinationSystem = CoordinationSystem.Global;

            var ld_t = new Loads.PartialTrapezoidalLoad();

            ld_t.EndIsoLocations    = ld_t.StarIsoLocations = new double[] { 0 };
            ld_t.StartMagnitudes    = ld_t.EndMagnitudes = new double[] { 1 };
            ld_t.Direction          = direction;
            ld_t.CoordinationSystem = CoordinationSystem.Global;

            var loads  = elm.GetGlobalEquivalentNodalLoads(ld_u);
            var loads2 = elm.GetGlobalEquivalentNodalLoads(ld_t);

            var epsilon = 1e-9;

            {//test 1 : equality betweeb above
                var resid = new Force[loads.Length];

                for (var i = 0; i < loads.Length; i++)
                {
                    var f = resid[i] = loads[i] - loads2[i];

                    buff.ValidationFailed = Math.Abs(f.Forces.Length) > epsilon || Math.Abs(f.Moments.Length) > epsilon;
                }
            }


            return(buff);
        }
示例#2
0
        public static void ValidateLoadInternalForce_B_y()
        {
            var load = new Loads.PartialTrapezoidalLoad();

            load.Direction = Vector.K;

            var w = 1;

            load.StarIsoLocations = new double[] { -1 };
            load.EndIsoLocations  = new double[] { 1 };

            load.StartMagnitudes = new double[] { w };
            load.EndMagnitudes   = new double[] { w };

            var hlpr = new BriefFiniteElementNet.ElementHelpers.EulerBernoulliBeamHelper(ElementHelpers.BeamDirection.Y);

            var elm = new BarElement(new Node(0, 0, 0), new Node(2, 0, 0));

            var l = (elm.Nodes[0].Location - elm.Nodes[1].Location).Length;

            var v = new Func <double, double>(x => w * (l / 2 - x));
            var m = new Func <double, double>(x => (w / 12.0) * (6 * l * x - l * l - 6 * x * x));

            var rdn = new Random(0);

            for (var i = 0; i < 10; i++)
            {
                var x_t =
                    rdn.NextDouble()
                    //0.125
                    * l;

                var xi = hlpr.Local2Iso(elm, x_t);

                var frc = hlpr.GetLoadInternalForceAt(elm, load, xi);

                var rv = v(x_t);
                var rm = m(x_t);

                //var dv = v(x_t) - frc.MembraneTensor.S12;
                //var dm = m(x_t) - frc.BendingTensor.M13;
            }
        }