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); }
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; } }