SharpFE
SharpFE copied to clipboard
Displacement of a single beam and a stacked beam are different
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");
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.
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.
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?
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.
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.