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