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