Exemple #1
0
        /// <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);
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// Adds a new frame uniform load.
 /// </summary>
 public void AddFrameUniformLoad(AnalysisCase analysisCase, Frame frame, double fx, double fz)
 {
     frame.AddUniformLoad(analysisCase, fx, fz);
 }
Exemple #3
0
 /// <summary>
 /// Adds frame self weight load.
 /// </summary>
 public void AddFrameSelfWeight(AnalysisCase analysisCase, Frame frame)
 {
     frame.AddUniformLoad(analysisCase, 0, -frame.WeightPerLength);
 }
Exemple #4
0
 /// <summary>
 /// Adds a new frame uniform load.
 /// </summary>
 public void AddFrameUniformLoad(AnalysisCase analysisCase, Frame frame, double fx, double fz)
 {
     frame.AddUniformLoad(analysisCase, fx, fz);
 }
Exemple #5
0
 /// <summary>
 /// Adds frame self weight load.
 /// </summary>
 public void AddFrameSelfWeight(AnalysisCase analysisCase, Frame frame)
 {
     frame.AddUniformLoad(analysisCase, 0, -frame.WeightPerLength);
 }