Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
            }
        }