SharpFE icon indicating copy to clipboard operation
SharpFE copied to clipboard

Displacement of a single beam and a stacked beam are different

Open rkmore opened this issue 12 years ago • 5 comments
trafficstars

I have been running a test where I have a single cantilevered 3D beam with two nodes of length N and a stacked beam divided into multiple segments whose total length is also N. When I apply a single point load to the tip node of these two beams I get two very different displacements at the tip. Interestingly neither displacement is correct when compared to a simple euler beam with all the same params. Here are the two tests.

    public String SingleBeam()
    {
        FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D);

        // create a node at the groundline
        FiniteElementNode glNode = model.NodeFactory.Create(0, 0, 0);
        model.ConstrainNode(glNode, DegreeOfFreedom.X);
        model.ConstrainNode(glNode, DegreeOfFreedom.Y);
        model.ConstrainNode(glNode, DegreeOfFreedom.Z);

        //southern pine
        IMaterial material = new GenericElasticMaterial(0.0347222 /*lbs/in^3*/, 1600000 /*psi*/, 0.49 /*rho*/, 3200000 /*psi*/);

        // create tip node
        FiniteElementNode tipNode = model.NodeFactory.Create(0, 0, 50 * 12);
        ICrossSection section = new SolidRectangle(12, 12);
        Linear3DBeam beam = model.ElementFactory.CreateLinear3DBeam(glNode, tipNode, material, section);

        //put a 1000 lbs point force on the tip
        ForceVector force = model.ForceFactory.Create(1000, 0, 0, 0, 0, 0);
        model.ApplyForceToNode(force, tipNode);

        System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
        timer.Start();
        IFiniteElementSolver solver = new LinearSolver(model);
        FiniteElementResults results = solver.Solve();
        timer.Stop();


        //get the displacement at the tip
        DisplacementVector displacement = results.GetDisplacement(tipNode);

        //get the reaction at the base
        ReactionVector reaction = results.GetReaction(glNode);

        return "Ellapsed:" + timer.ElapsedMilliseconds.ToString() + "  Disp:" + displacement.AbsoluteMaximum().ToString("0.00") + "  React:" + reaction.AbsoluteMaximum().ToString("0.00");
    }

    public String StackedBeam()
    {
        FiniteElementModel model = new FiniteElementModel(ModelType.Truss3D);

        // create a node at the groundline
        FiniteElementNode glNode = model.NodeFactory.Create(0, 0, 0);
        model.ConstrainNode(glNode, DegreeOfFreedom.X);
        model.ConstrainNode(glNode, DegreeOfFreedom.Y);
        model.ConstrainNode(glNode, DegreeOfFreedom.Z);

        //southern pine
        IMaterial material = new GenericElasticMaterial(0.0347222 /*lbs/in^3*/, 1600000 /*psi*/, 0.49 /*rho*/, 3200000 /*psi*/);

        //make a 50 foot beam out of 1 foot segments
        FiniteElementNode prevNode = glNode;
        for (int i = 1; i < 51; i++)
        {
            FiniteElementNode node = model.NodeFactory.Create(0, 0, i * 12); // create a node

            ICrossSection section = new SolidRectangle(12, 12);
            model.ElementFactory.CreateLinear3DBeam(prevNode, node, material, section);
            prevNode = node;
        }
        FiniteElementNode tipNode = prevNode;

        //put a 1000 lbs point force on the tip
        ForceVector force = model.ForceFactory.Create(1000, 0, 0, 0, 0, 0);
        model.ApplyForceToNode(force, tipNode);

        System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
        timer.Start();
        IFiniteElementSolver solver = new LinearSolver(model);
        FiniteElementResults results = solver.Solve();
        timer.Stop();


        //get the displacement at the tip
        DisplacementVector displacement = results.GetDisplacement(tipNode);

        //get the reaction at the base
        ReactionVector reaction = results.GetReaction(glNode);

        return "Ellapsed:" + timer.ElapsedMilliseconds.ToString() + "  Disp:" + displacement.AbsoluteMaximum().ToString() + "  React:" + reaction.AbsoluteMaximum().ToString("0.00");

rkmore avatar Jan 24 '13 20:01 rkmore

Well.... I am stumped. I have verified that the stiffness matrices are what I would have expected, and I don't see anything obviously wrong with the processing, but the 3D displacements are quite obviously wrong.

Sorry I was not able to help find the source of the problem.

I will definitely be keeping an eye on the project. I hope that it can be corrected as I really like it conceptually.

rkmore avatar Feb 14 '13 19:02 rkmore

Randy, thanks for the update. I have also hand calculated the matrices for a smaller example which shows that 1D beams are working in a 2DFrame system for the small example I checked. The results for the example I checked do not match up with static analysis/elastic beam theory using standard hand calculations but conform to finite element theory. I haven't had the time recently to work much on SharpFE but will get that time very soon - I'll tackle this issue when I do.

On Thu, Feb 14, 2013 at 7:11 PM, Randy More [email protected]:

Well.... I am stumped. I have verified that the stiffness matrices are what I would have expected, and I don't see anything obviously wrong with the processing, but the 3D displacements are quite obviously wrong.

Sorry I was not able to help find the source of the problem.

I will definitely be keeping an eye on the project. I hope that it can be corrected as I really like it conceptually.

— Reply to this email directly or view it on GitHubhttps://github.com/iainsproat/SharpFE/issues/5#issuecomment-13572702.

iainsproat avatar Feb 14 '13 20:02 iainsproat

Randy - I found a flaw in the global rotational matrix and have now resolved it. Would you be able to checkout the latest code and verify whether the expected results match with the output?

iainsproat avatar Jul 02 '13 19:07 iainsproat

I will take a look right away and get the results back to you as soon as I have them.

Thank you.

Randy More

From: Iain Sproat [mailto:[email protected]] Sent: Tuesday, July 02, 2013 3:55 PM To: iainsproat/SharpFE Cc: More, Randy Subject: Re: [SharpFE] Displacement of a single beam and a stacked beam are different (#5)

Randy - I found a flaw in the global rotational matrix and have now resolved it. Would you be able to checkout the latest code and verify whether the expected results match with the output?

— Reply to this email directly or view it on GitHubhttps://github.com/iainsproat/SharpFE/issues/5#issuecomment-20371279.

rkmore avatar Jul 02 '13 19:07 rkmore

Hello Ian

I had the chance to try a few test cases.

For ModelType.Full3D I now get the answers I would expect (excellent !!! Thank you!)

I think there might still be an issue with ModelType.Truss3D. When I build a stacked beam in ModelType.Truss3D it still seems to exhibit a similar problem as before (a stacked cantilevered beam and a single of equal length and properties do not deflect the same when constrained at one end and loaded at the other).

Sorry it took a little time to get back to you. I had to update my test code to reflect some of the refactoring that has gone on in the library (all of which makes it much more legible IMO).

Thank you again for all of your effort. This library is really coming along!

Randy

From: Iain Sproat [mailto:[email protected]] Sent: Tuesday, July 02, 2013 3:55 PM To: iainsproat/SharpFE Cc: More, Randy Subject: Re: [SharpFE] Displacement of a single beam and a stacked beam are different (#5)

Randy - I found a flaw in the global rotational matrix and have now resolved it. Would you be able to checkout the latest code and verify whether the expected results match with the output?

— Reply to this email directly or view it on GitHubhttps://github.com/iainsproat/SharpFE/issues/5#issuecomment-20371279.

rkmore avatar Jul 03 '13 01:07 rkmore