Topic: output file 3d beam values

I have a couple of questions as to what the output file is returning.
I am a bit confused as to what the 12 values returned are from the 3d beam element. I would assume that they are the 6 bc results from each end of the beam, but if 3 are displacement and 3 are rotation then why would rotation have a displacement value? So what are these values? Additionally the nodes have reaction output, these are the values of displacement in x,y,z(globally) and an angle of rotation in degrees or radians for the rotations? Is there anyway to return stresses/moments from these elements?

Thank you

2

Re: output file 3d beam values

Hi,

o) the local displacements values (of size 12) reported by the beam3d element have the following meaning:
u1 v1 w1 rx1 ry1 rz1 u2 v2 w2 rx2 ry2 rz2,
where u,v,w are displacements in x,y,and z local beam directions  and rx,ry,and rz are rotations around x,y,and z local beam axes. The numbers denote start (1) and end (2) nodes of the beam.

o) the local end forces have similar meaning, again first six components related to starting node, last six to end node, with following meaning:
Nx, Vz, Vy, Mx, My, Mz, where N end force in direction of local x-axis, Vz and Vy are local end forces in direction of local y and z axes, and Mx, My, Mz are end moments (in local coordinate system).

o) For each Node, three displacements and three rotations are reported (in nodal coordinate system which by default coincides with global cs)
dof number 1 is displacement in x direction, 2 displacement in y direction, 3 displacement in z dir, 4 rotation around x, 5 rotation around y, 6 rotation around z. The same convention applies to reaction forces.


Borek

Re: output file 3d beam values

Dear all,
I noticed something strange in the results of Beam3d elements. In the attached example I analyzed a cantilever beam with square cross section and 2 loads on the free end in directions -globalZ (-20) and globalY (10):

1 - file two-st.in uses refAngle = 0
2 - file two-st-refNode uses node 3 (coords 0 0 1 - same as globalZ) as reference node for the cross section; it gives the same results as in case 1
3 - file two-st-refNode uses node 3 (coords 0 0 1 - same as globalY) as reference node for the cross section; results looks strange in the DofManager output (I would expect to see the same displacements...)

The issues I found are:
a. Myy (5th and 11th values) has not the correct sign, I would expect the opposite of the one I get;
b. the ouput files are not reporting in any line the correct element number! I read beam element 1 and in the input deck it is defined as number 5
c. is the square cross section definition correct? I read this page but I suspect I'm missing something in it.

Finally, I would definitely prefer to use refAngle instead of refNode, but I'm still confused with the results I get. I'm running OOFEM updated to the last code from Mikael's Git.
Please don't mind the unuseful lines like the 1st cross section or the doubled nodalload.

thanks,
Giovanni

Post's attachments

beam3ds.zip 4.16 kb, 6 downloads since 2015-05-27 

You don't have the permssions to download the attachments of this post.

Re: output file 3d beam values

I've looked at the input files, and I agree that it seems odd that  two-st-refNode2.in doesn't produce the same nodal values, as Iz == Iy.
refangle = 0 produces a switch of the y and z axis in the local c.s.

 1  0  0 
 0  0  1
 0 -1  0

so at this point, it's not surprising that those two cases produces the same results.
I've checked that the D-matrix is invariant of this rotation, but rotating the K matrix with this rotation yields a different result. As far as I can tell, there is something wrong with the B-matrix.

Numerically checking the B matrix reveals

octave:80> B([1, 3, 2, 4, 6, 5], [1, 3, 2, 4, 6, 5, 7, 9, 8, 10, 12, 11]) - B
ans =

   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000   0.00000
   0.00000   0.00000  -9.01400   0.00000   0.00000   0.00000   0.00000   0.00000   9.01400   0.00000   0.00000   0.00000
   0.00000   9.01400   0.00000   0.00000   0.00000   0.00000   0.00000  -9.01400   0.00000   0.00000   0.00000   0.00000

though, it's possible that I haven't thought this through properly.

The sources for these lines are

    answer.at(5, 3) =   ( 6. - 12. * ksi ) / ( l * l * c1y );
...
    answer.at(6, 2) =  -( 6. - 12. * ksi ) / ( l * l * c1z ); // new

Are those signs correct?

-------------------

a) I suppose the output from the element (the beam element does it's own thing here, compared to what most other elements do) if the reaction forces, which would explain the sign maybe?

b) Yes, the beam only prints the local number. It should be fixed to include the global number (5). A few other elements also do this (incorrectly) and they should be fixed.

c) Well, the cross-section only knows about Iy and Iz. It does not know anything about the shape other than through the cross-sections properties. It should be invariant to a 90 degree rotation around the x-axis as far as I can tell.

Re: output file 3d beam values

Thanks Mikael.

I was thinking mee too the lines:

    answer.at(5, 3) =   ( 6. - 12. * ksi ) / ( l * l * c1y );
...
    answer.at(6, 2) =  -( 6. - 12. * ksi ) / ( l * l * c1z ); // new

and they seems to have the opposite sign, as can be seen  here.

In the meanwhile, I tested the same files with beamShearCoefficient 1.e30 (as I found in the example files) and with the correct factor (5/6 for the rectangular section).

In this last case, the equilibrium is not respected, and also the local displacements are not correct. I attach some hand calculations to clarify; this is very annoying and I cannot understand where the bug is located (maybe in the same 2 lines above).

Post's attachments

case1.pdf 18.54 kb, 5 downloads since 2015-05-28 

You don't have the permssions to download the attachments of this post.

Re: output file 3d beam values

Well that matrix seems to be for a 2D beam, so there is nothing to compare with there.

I've looked and thought about this a bit more now, and I'm now convinced that there is an error in the B-matrix.
B(5,3) and B(6,2) should have the same sign.
B(5,9) and B(6,8) should also have the same sign.
and this should also hold:
B(5,3) = -B(5,9)
B(6,2) = -B(6,8)
This can be achieved by changing the signs of either B(5,3) and B(5,9),  or  B(6,2) and B(6,8), though, without seeing the derivations for this elements, it's hard to tell which terms should be corrected.

Re: output file 3d beam values

Thanks, I'll give it a try.

Yes, I posted the stiffness matrix for 2D beam, we need the B matrix in the 3d case, sorry.

Re: output file 3d beam values

Actually, I looked a bit closer, and now I'm less convinced where the problem lies (I take back all that certainty I had in my last post)
I will have a closer look this evening if I can spot exactly what causes the differences.

Re: output file 3d beam values

So, the problem has nothing to do with the rotation or how they are defined.
Looking at the local stiffness matrix K (before rotation), a few components are not equal, but they should be.
It should be that
K(5,3) = - K(6,2)
but they are not equal
(this applies to other components as well, which follows from symmetry)

   2100000         0         0         0         0         0 ...
         0     20360         0         0         0      9566 ...
         0         0     20360         0    -10180         0 ...
         0         0         0      1346         0         0 ...
         0         0    -10180         0      6841         0 ...
         0      9566         0         0         0      6841 ...
...

So, the source for those terms
K_ij = B^T_ik D_km B_mj
which reduces (diagonal D matrix in this case)
K_62 = B^T_6k D_kk B_k2 = B_k6 D_kk B_k2
K_53 = B^T_5k D_kk B_k3 = B_k5 D_kk B_k3
and the sum taking into account all the zero components we get the further simplfications:
K_62 = B_26 D_22 B_22 + B_66 D_66 B_62
K_53 = B_35 D_33 B_33 + B_55 D_55 B_53
where D_22 = D_33 and D_55 = D_66 (which I can see is fullfilled.
should be satisfied (and it is not).
Continue to dig and I end up with the core difference:
B_55 * B_53 == B_66 * B_62
These terms should be equal, but now, they differ in sign.
Note: There is other components as well due to symmetries


Changing the signs of
B_6,6 and B_6,12
results in a stiffness matrix that is identical to the beam2d case in both the x-z and x-y planes.
Assuming that someone checked the beam2d case carefully, I'm fairly certain this is the correct fix for this problem.

(the N matrix should probably change sign in the same positions, but I haven't checked closely).

Preferably, I'd like to find a resource which derives the B matrix used in this element. All the texts I find jump directly to a hardcoded K-matrix, which is no good (I'm quite frustrated that so many textbooks do this)

10 (edited by johnnyontheweb 16-06-2015 18:11:08)

Re: output file 3d beam values

I was looking for the same thing yesterday, but as you said all the books report only the final hard coded matrix. If I find something suitable I will send it, otherwise I will calculate the derivatives via matlab.

EDIT: cannot definetely find a ready-to-copy B matrix for the beam in 3D. I hope to have time to find out the derivatives. Borek, do you have some references to suggest?

EDIT2: the error should be definitely in the sign of the Timoshenko's terms. If the beamShearCoeff is sufficiently high, the element response is always correct.

11

Re: output file 3d beam values

Hi, I was trying to have a look at the beam3d problem, but I am not sure if the problem is still there or has been resolved already.
To test it, I have created a model of simply supported beam with square cross section. As the bending around y and z principal axes is independent, I should get the same displacements and rotations. The height/length ration is 0.1/5 =  0.2, so definitely a thin beam. Beam is loaded by a constant load.
The deflection in the middle should be 5/384*(f*l^4/EI) = 2,929804692, rotation at the supports should be fl^3/(24/*EI)=1,875075, so at x=0 the rot_y = -1,875075, rot_z=1,875075 and at the end (x=5) rot_y=1,875075 and rot_z=-1,875075.
The local end forces reported by individual elements are also ok.
And this is what I get (input file attached) from the repo (oofem.org) version.

Post's attachments

beam01.in 929 b, 5 downloads since 2015-06-20 

You don't have the permssions to download the attachments of this post.

Re: output file 3d beam values

Hi all
I did change some signs in the B-matrix (B_6,6 and B_6,12), so that it maches beam2d (in both x-z and x-y). I did this back when i replied to this thread last time (sorry for being unclear).

Re: output file 3d beam values

Thank you all for the support.
Please have a look to the attached files: in a cantilever beam, when I put:

beamShearCoeff 0.8333333333333

the element still misses the equilibrium. If you try with

beamShearCoeff 0.8333333333333

it's ok except but the moment at the free end is not zero (see here).
Is the Timoshenk's contribution really supported?

thanks

Post's attachments

OneDistrib-Qk1T.zip 1.41 kb, 5 downloads since 2015-06-22 

You don't have the permssions to download the attachments of this post.

Re: output file 3d beam values

You wrote the same beamShearCoeff twice, I assume that was a copy-paste mistake?

Re: output file 3d beam values

And does that output file really match the input file in the zip?
The output file shows deflection in both y and z.
Your input file is only loaded in z-direction, and when i run it, i only get deflection in z (like expected).




I also looked at the beamshearcoeff (I'm not to familiar with these things), but I cannot see it being used, well, anywhere.
Instead, the only place I find it is here

    //shearCoeff = this->give(CS_BeamShearCoeff);
    shearAreay = this->give(CS_ShearAreaY, gp);
    shearAreaz = this->give(CS_ShearAreaZ, gp);

which makes it clear that BeamShearCoeff has been replaced, and these 2 areas are used instead (but someone forgot to update the documentation).

Re: output file 3d beam values

Yes, sorry, I wanted to write the second time:

beamShearCoeff 1e18

which is used in the sample loaded in the other discussion here.

The code seems strange, I should have looked at that before to write the post. Anyway, it affect the results. How is it possible?

Re: output file 3d beam values

Ah, my mistake (i thought i tested the two versions and found the same output, but I must have been looking at the wrong files.
The shear coefficient is indeed used to compute the shear areas.
As in  "shear_area_z = shear_area_y = beamshearcoeff * area;"
I'm not at all familiar with these shear coefficients, so I'm just going with what I see in the code (though, it seems I easily miss things).

Re: output file 3d beam values

Regarding the moment though, it seems to all add up to for me?

beamShearCoeff = 0.833333:
  local displacements  0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 -3.9894e+02 0.0000e+00 0.0000e+00 0.0000e+00 -1.8327e-01
  local end forces     0.0000e+00 1.2500e+07 0.0000e+00 0.0000e+00 0.0000e+00 1.8954e+10 0.0000e+00 -1.2500e+07 0.0000e+00 0.0000e+00 0.0000e+00 5.2083e+09

beamShearCoeff = 1e18:
  local displacements  0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 -5.2083e+02 0.0000e+00 0.0000e+00 0.0000e+00 -2.7778e-01
  local end forces     0.0000e+00 1.2500e+07 0.0000e+00 0.0000e+00 0.0000e+00 2.6042e+10 0.0000e+00 -1.2500e+07 0.0000e+00 0.0000e+00 0.0000e+00 5.2083e+09

Since these are the internal forces (since the beam output misses the loads applied through sets) these are the internal forces/moments only, so the reaction moment in the free end is
R = M_internal - M_external
M_internal = 5.2083e+09
and
M_external = 5.2083e+09
thus, at the free end, R = 0 (momentless node)

To compute the external load, it would be the constant applied load in y over the shape function for the free node:

integrate_0^1   -load_y * L^2 * ( kappaz * ksi + ( 1. - kappaz ) * ksi^2 - ksi^3 ) / c1z  dksi
 =
 load_y * -L^2 / c1z * [ 1/2 * kappaz * ksi^2 + 1/3 * ( 1. - kappaz ) * ksi^3 - 1/4 * ksi^4 ]_0^1
 =
 load_y * -L^2 / 12 = 5.2083e+09

Re: output file 3d beam values

Thanks Mikael.
Ok, but it is definitely complicated, at least in my opinion.the post processor needs to know the shape functions...
I say again that we must find a way to account for the external load even if it is applied via sets, the output is pretty confusing now.

Re: output file 3d beam values

I just wanted to highlight that with just like with solid elements in FE-analysis, the dislacement/reaction forces might be OK with a coarse mesh, but the stress (moment/) distribution might be smeared out.

The loads are projected to the at the basis function like normal, so from the elements point of view, there is no difference between a distributed load, and matching nodal loads. But in the analytical solution, the difference is huge!

You would see the exact same thing if you use a distributed load on a bar. The external force would be lumped into 2 nodal forces.

It's only that we can "cheat" and easily solve equilibrium for the 1D beam/bars analytically. Normally, the option is to refine the elements.
If you have a stress the varies greatly within the integration points, it is a sign that the mesh is to coarse.
In this case, there is just one element, with the extreme values for the moment at each end.

Of course, we don't want to solve problems by just throwing more elements at them. I'm all in favor of adding a specialized beam export module that does the best one possible can (using the fact that we can solve this analytically).
I just want to mention this, as it applies to shell/plate elements as well, where we can't solve equilibrium analytically.


What is written in the standard output is the values that is used in the analysis. Where the distributed loads have been projected to the base functions. I do think there is value in exporting these as well.

Re: output file 3d beam values

I made a simple example to illustrate what i meant about other element types.

Lets have a bar prescribed at the left hand side, and free at the right hand side, and we will discretize this to a single element.

|[                 ] Free end


Distributed load along x-direction:
|[-> -> -> -> -> ->]


Projected load onto FE-approximation:
|[                 ]---->


Integration points along the bar element:
|[  x     x     x  ]

All three integration points will contain the same stress, as this problem is from the point of view of the element, is indistinguishable from that of a concentrated nodal force.
ted nodal load.

The same thing happens with all element types (2D/3D), and the only difference is that we don't have an analytical value to compare against, as those are not statically determined.
The only option then is to refine the problem (higher order or finer mesh).

Re: output file 3d beam values

The loads are projected to the at the basis function like normal, so from the elements point of view, there is no difference between a distributed load, and matching nodal loads. But in the analytical solution, the difference is huge!

I agree, and now it's clear. You use "statically determined" to say "balanced", while for me "statically determined" means non-labile, not singular.

However, since the beams have a quadratic (4th) shape function (or a cubic func. for Euler Bernoulli case), the beam must be always balanced even if the mesh is coarse and if the distributed load is linear or constant.

If you and the other devs think that there's no need to adjust the standard output for beams, that's ok, I'll follow up and I will agree with the specialized beam export module you proposed.

Re: output file 3d beam values

Perhaps this is a language issue (I'm not a native english speaker myself), but I mean statically determined as opposed to statically indeterminate. In the 1D specimens, there is only one point where the reaction forces apply, as opposed to the distributed of line forces where you cut out a piece of a plate.
So all I tried to say was that this type of post-processing is only possible for 1D specimens.

I only wanted to point out that there is nothing special going on with the beam here; The integration point values always reflect a load that is projected on the shape functions. The shear force matches the beam kinematics and the shear coefficient the user supplies. So there is no lies in the output. If there is a fine enough mesh, the integration-point moments will match the analytical solution. But for a coarse mesh, it'll be way off, just like with the bar.


When it comes to local end forces, yes, the output misses loads applies by sets, and this is certainly not intentional. It's a side-effect of the way the standard output writes data, that there is no (nice) way to get to the loads from sets. This might seem like I'm being a tad stubborn, but it will complicate quite a few plans I had.
I'd be much better if we got rid of the "local end forces" from the output, and made a specialized beam export tool.
(This reminds me much of how ANSYS workbench deals with beams, where you add the "beam tool" to the results)

Re: output file 3d beam values

Thanks for the reply, Mikael. That's ok for me, please tell me how can I give a hand for the specialized beam export tool.

Re: output file 3d beam values

Well, as a starting point, taking one of the simpler export modules would be good.
A suitable candiate is "HOMExportModule"

Steps:
0. Copy HOMExportModule, and rename everything suitably to, say, "BeamExportModule". Get rid of the stuff you don't need (I don't think we need to have any options for this export module)

1. to create some vector to keep track of the results (how do be best represent a moment/force diagram in code?) The simplest case would probably be just using the moments/forces at each end, though only captures linearly interpolating diagrams).

2. then go through the elements, check to see if they are beams, and is so, start with their internal forces to compute the diagrams.

3. and lastly loop through the loads, and apply them to whatever beam elements that happen to be in their sets. The crudest diagrams would be obtained by simply computing the nodal forces (calling "Element :: computeBoundaryEdgeLoadVector").
Superimpose these moment/force diagrams on the one obtained from the internal forces for each element.

4. Write it to a file in a suitable format

Step number 3 can be refined to take the load shape into account (probably by adding some beam support method to deal with this). In this case, the loads will diagrams will no longer to linearly varying, so one has to think through how to store the diagrams.