/// <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(); }
/// <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(); }
public abstract Force GetInternalForceAt(Element1D elm, double x);
/// <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(); }
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(); }