예제 #1
0
        /// <summary>
        /// Gets the local distributed load.
        /// </summary>
        /// <param name="elm">The elm.</param>
        /// <returns></returns>
        /// <remarks>
        /// Gets a vector that its components shows Wx, Wy and Wz in local coordination system of <see cref="elm"/>
        /// </remarks>
        private Vector GetLocalDistributedLoad(Element1D elm)
        {
            if (coordinationSystem == CoordinationSystem.Local)
            {
                return(new Vector(
                           direction == LoadDirection.X ? this.magnitude : 0,
                           direction == LoadDirection.Y ? this.magnitude : 0,
                           direction == LoadDirection.Z ? this.magnitude : 0));
            }

            if (elm is FrameElement2Node)
            {
                var frElm = elm as FrameElement2Node;

                var w = new Vector();


                var globalVc = new Vector(
                    direction == LoadDirection.X ? this.magnitude : 0,
                    direction == LoadDirection.Y ? this.magnitude : 0,
                    direction == LoadDirection.Z ? this.magnitude : 0);

                w = frElm.TransformGlobalToLocal(globalVc);

                return(w);
            }

            throw new NotImplementedException();
        }
예제 #2
0
        /// <summary>
        /// Gets the internal force based on only this load at defined position <see cref="x"/>.
        /// </summary>
        /// <param name="elm">The elm.</param>
        /// <param name="x">The x.</param>
        /// <returns></returns>
        /// <exception cref="System.NotImplementedException"></exception>
        public override Force GetInternalForceAt(Element1D elm, double x)
        {
            if (elm is FrameElement2Node)
            {
                var frElm = elm as FrameElement2Node;

                var l = (frElm.EndNode.Location - frElm.StartNode.Location).Length;
                var w = GetLocalDistributedLoad(elm);

                var gf1 = -GetGlobalEquivalentNodalLoads(elm)[0];
                var f1  = new Force();

                f1.Forces  = frElm.TransformGlobalToLocal(gf1.Forces);
                f1.Moments = frElm.TransformGlobalToLocal(gf1.Moments);


                var f2 = new Force(new Vector(w.X * x, w.Y * x, w.Z * x), new Vector());

                var buf = f1.Move(new Point(0, 0, 0), new Point(x, 0, 0)) +
                          f2.Move(new Point(x / 2, 0, 0), new Point(x, 0, 0));

                return(-buf);
            }

            throw new NotImplementedException();
        }
예제 #3
0
 public abstract Force GetInternalForceAt(Element1D elm, double x);
예제 #4
0
 /// <summary>
 /// Gets the internal force at.
 /// </summary>
 /// <param name="elm">The elm.</param>
 /// <param name="x">The x.</param>
 /// <returns></returns>
 /// <exception cref="System.NotImplementedException"></exception>
 public override Force GetInternalForceAt(Element1D elm, double x)
 {
     throw new NotImplementedException();
 }
예제 #5
0
        public override Force GetInternalForceAt(Element1D elm, double x)
        {
            if (elm is FrameElement2Node)
            {
                var e = elm as FrameElement2Node;

                var localForce = this.force;

                if (this.coordinationSystem == CoordinationSystem.Global)
                {
                    var tmp = e.TransformGlobalToLocal(localForce.Forces, localForce.Moments);

                    localForce.Forces  = tmp[0];
                    localForce.Moments = tmp[1];
                }

                var l = (e.EndNode.Location - e.StartNode.Location).Length;

                var l1 = distanseFromStartNode;
                var l2 = l - l1;

                var mymy1 = localForce.My * l2 / (l * l) * (l2 - 2 * l1);
                var myfz1 = 6 * localForce.My * l1 * l2 / (l * l * l);

                var mzmz1 = localForce.Mz * l2 / (l * l) * (l2 - 2 * l1);
                var mzfy1 = -6 * localForce.Mz * l1 * l2 / (l * l * l);

                var fzmy1 = -localForce.Fz * l1 * l2 * l2 / (l * l);
                var fzfz1 = localForce.Fz * l2 * l2 / (l * l * l) * (3 * l1 + l2);

                var fymz1 = localForce.Fy * l1 * l2 * l2 / (l * l);
                var fyfy1 = localForce.Fy * l2 * l2 / (l * l * l) * (3 * l1 + l2);


                var fxfx1 = localForce.Fx * l2 / l;
                var mxmx1 = localForce.Mx * l2 / l;

                var f1 = -new Force(
                    fxfx1,
                    mzfy1 + fyfy1,
                    fzfz1 + myfz1,
                    mxmx1,
                    mymy1 + fzmy1,
                    mzmz1 + fymz1
                    );

                if (x < this.distanseFromStartNode)
                {
                    var v1  = new Vector(x, 0, 0);
                    var buf = -f1.Move(v1);

                    return(buf);
                }

                else
                {
                    var v1 = new Vector(x, 0, 0);
                    var v2 = new Vector(x - this.distanseFromStartNode, 0, 0);

                    var buf = -f1.Move(v1) - this.force.Move(v2);

                    return(buf);
                }
            }

            throw new NotImplementedException();
        }