/// <summary> /// Combine weld elements from all lines into a single collection. /// </summary> /// <returns></returns> private List <FilletWeldElement> GetWeldElements() { List <FilletWeldElement> weldPoints = new List <FilletWeldElement>(); foreach (var line in this.Lines) { foreach (var weldElem in line.WeldElements) { FilletWeldElement el = weldElem as FilletWeldElement; if (el != null) { weldPoints.Add(el); } } } return(weldPoints); }
protected override double GetElementForce(ILocationArrayElement element, Point2D center, ILocationArrayElement controllingWeld, double angle) { FilletWeldElement el = element as FilletWeldElement; FilletWeldElement cp = controllingWeld as FilletWeldElement; double elementForce = 0; if (el != null && cp != null) { double theta = el.GetAngleTheta(center); //this weld actual deformation double Delta_r = el.DistanceFromCentroid * (cp.LimitDeformation / cp.DistanceFromCentroid); //this weld ultimate deformation double pi = Delta_r / el.UltimateLoadDeformation; //double pi = Delta_r / el.LimitDeformation; //calculate element force elementForce = el.CalculateNominalShearStrength(pi, theta); } return(elementForce); }
/// <summary> /// Finds the controlling element in the weld group. /// </summary> /// <param name="Center">Instantaneous center (IC) of rotation.</param> /// <returns></returns> protected override ILocationArrayElement FindUltimateDeformationElement(Point2D Center) { FilletWeldElement governingElement = null; double DeltaMaxToRMin = double.PositiveInfinity; foreach (var we in WeldElements) { double DeltaFracture_n = GetElementFractureDeformation(we.LegLength, we.GetAngleTheta(Center)); double DeltaUltimate_n = GetElementUltimateForceDeformation(we.LegLength, we.GetAngleTheta(Center)); double rn = we.GetDistanceToPoint(Center); //store ultmate deformation and distance to IC for further use. we.LimitDeformation = DeltaFracture_n; we.UltimateLoadDeformation = DeltaUltimate_n; we.DistanceFromCentroid = rn; if (DeltaFracture_n / rn < DeltaMaxToRMin) { DeltaMaxToRMin = DeltaFracture_n / rn; governingElement = we; } } return(governingElement); }
protected override void CalculateElements() { WeldElements = new List <IWeldElement>(); double dx = NodeJ.X - NodeI.X; double dy = NodeJ.Y - NodeI.Y; Vector seg = new Vector(dx, dy); int N = NumberOfSubdivisions; double segDx; double segDy; segDx = dx / N; segDy = dy / N; for (int i = 0; i < NumberOfSubdivisions; i++) { Point2D stPt = new Point2D(NodeI.X + i * segDx, NodeI.Y + i * segDy); Point2D enPt = new Point2D(NodeI.X + (i + 1) * segDx, NodeI.Y + (i + 1) * segDy); //Need to change this to be independent of fillet weld type FilletWeldElement weld = new FilletWeldElement(stPt, enPt, Leg, ElectrodeStrength, IsLoadedOutOfPlane); WeldElements.Add(weld); } }
protected override void CalculateElements() { WeldElements = new List<IWeldElement>(); double dx = NodeJ.X - NodeI.X; double dy = NodeJ.Y - NodeI.Y; Vector seg = new Vector(dx, dy); int N = NumberOfSubdivisions; double segDx; double segDy; segDx = dx / N; segDy = dy / N; for (int i = 0; i < NumberOfSubdivisions; i++) { Point2D stPt = new Point2D(NodeI.X + i * segDx, NodeI.Y + i * segDy); Point2D enPt = new Point2D(NodeI.X + (i + 1) * segDx, NodeI.Y + (i + 1) * segDy); //Need to change this to be independent of fillet weld type FilletWeldElement weld = new FilletWeldElement(stPt, enPt, Leg, ElectrodeStrength, IsLoadedOutOfPlane); WeldElements.Add(weld); } }