public Frame(FrameSection section, Node nodei, Node nodej) : base(nodei, nodej) { Section = section; Loads = new List<FrameLoad>(); }
/// <summary> /// Adds a new frame to the model. /// </summary> public Frame AddFrame(FrameSection section, Node n1, Node n2) { Frame n = new Frame(section, n1, n2); Frames.Add(n); return n; }
/// <summary> /// Divides the given frame into given number of pieces. /// </summary> public void DivideFrame(Frame f, int n) { Node n1 = f.NodeI; Node n2 = f.NodeJ; double xStep = (n2.X - n1.X) / (double)n; double zStep = (n2.Z - n1.Z) / (double)n; Node[] nodes = new Node[n + 1]; nodes[0] = n1; nodes[nodes.Length - 1] = n2; double x = n1.X + xStep; double z = n1.Z + zStep; for (int i = 0; i < n - 1; i++) { nodes[i + 1] = AddNode(x, z); x += xStep; z += zStep; } Frames.Remove(f); for (int i = 0; i < n; i++) { Frame newFrame = AddFrame(f.Section, nodes[i], nodes[i + 1]); // Transfer loads // Uniform loads foreach (FrameLoad masterLoad in f.Loads.FindAll((e) => e is FrameUniformLoad)) { FrameUniformLoad masterUniformLoad = masterLoad as FrameUniformLoad; newFrame.AddUniformLoad(masterUniformLoad.AnalysisCase, masterUniformLoad.FX, masterUniformLoad.FZ); } // Trapezoidal loads foreach (FrameLoad masterLoad in f.Loads.FindAll((e) => e is FrameTrapezoidalLoad)) { FrameTrapezoidalLoad masterTrapezoidalLoad = masterLoad as FrameTrapezoidalLoad; double mxi = masterTrapezoidalLoad.FXI; double mzi = masterTrapezoidalLoad.FZI; double mxj = masterTrapezoidalLoad.FXJ; double mzj = masterTrapezoidalLoad.FZJ; double xTotal = f.Length; double xStart = newFrame.NodeI.DistanceTo(f.NodeI); double xEnd = newFrame.NodeJ.DistanceTo(f.NodeI); double fxi = xStart / xTotal * (mxj - mxi) + mxi; double fzi = xStart / xTotal * (mzj - mzi) + mzi; double fxj = xEnd / xTotal * (mxj - mxi) + mxi; double fzj = xEnd / xTotal * (mzj - mzi) + mzi; newFrame.AddTrapezoidalLoad(masterTrapezoidalLoad.AnalysisCase, fxi, fzi, fxj, fzj); } } }
/// <summary> /// Adds a new spring to the model. /// </summary> public Spring AddSpring(double stiffness, double shearStiffness, double rotationalStiffness, Node n1, Node n2) { Spring n = new Spring(stiffness, shearStiffness, rotationalStiffness, n1, n2); Springs.Add(n); return n; }
/// <summary> /// Adds a new node point load. /// </summary> public void AddNodePointLoad(AnalysisCase analysisCase, Node node, double fx, double fz, double my) { node.AddPointLoad(analysisCase, fx, fz, my); }
/// <summary> /// Adds a new node to the model. /// </summary> public Node AddNode(double x, double z) { Node n = new Node(x, z); Nodes.Add(n); return n; }
public TwoNodeElement(Node nodei, Node nodej) { NodeI = nodei; NodeJ = nodej; }
public double DistanceTo(Node n) { return (float)Math.Sqrt((X - n.X) * (X - n.X) + (Z - n.Z) * (Z - n.Z)); }
public static double Distance(Node n1, Node n2) { return n1.DistanceTo(n2); }
public Spring(double axialStiffness, double shearStiffness, double rotationalStiffness, Node nodei, Node nodej) : base(nodei, nodej) { AxialStiffness = axialStiffness; RotationalStiffness = rotationalStiffness; }