Re: Material plasticity for 2dBeam with LayeredCrossSection

Hi Mikael,

Mikael Öhman wrote:

Hi Vitalii
It's always nice to have more developers, as it also helps us find bugs.

In this case, please be aware that the libeam model is a mindlin beam theory, which (like most beam models) is only valid for small deflections and does not couple longitudinal deformation with the transversal deflection.
In fact, libeam2d does not take into account geometrical nonlinearities either.
There is not really any error, this is precisely what the mindlin theory assumes, and the beam model reflects this. All beam models in OOFEM are only valid for small deformations.
I'm not at all familiar with large deformation beam models, but if you have a (detailed) reference of any particular beam theory you'd like to see implemented, then we (probably me) can help you implement it.

Regarding the beam models with large deformations, I've made a small literature study and found two models. One Euler-Bernoulli without shear and one Timoshenko type with shear. The references are as follows:

  1. Panakorn and Vu - A 2D field-consistent beam element for large displacement analysis using the total Lagrangian formulation

  2. Kien - A Timoshenko beam element for large displacement analysis of planar beams and frames

Do you consider these sources as detail references? If you have any remarks, please let me know. I have the pdf versions of the papers if you might need them. And of course I'm willing to help as much as I can.

Mikael Öhman wrote:

There has been some initial work on contact support in OOFEM as well. I'd expect this situation to improve in the future (though, unless there is interest in new developers, I don't see it happening very fast).

I can see some work in the code regarding the contact interaction. Hope it'll be available soon. However, I'll have an idea how to implement the contact for my task specifically, without general contact implementation.

Mikael Öhman wrote:

Regarding your second question:
We have a bug tracker at https://www.oofem.org/trac  but in reality, noone posts there and I never check it. If it's something directed to me, I'd be more likely to check the github bug tracker. Or users can post about it here on the forum.
Regarding your example though, I don't understand it.
What values shouldn't be declared in BoundaryCondition? GeneralBoundaryCondition doesn't have any function "giveValues()" (nor should it).

I'll try to explain in more details what I did mean. I want to read the values from the GeneralBoundaryCondition

        engmdl = model;
        dmn = model->giveDomain(1);

        GeneralBoundaryCondition *bc1 = dmn->giveBc(5);
        FloatArray displacementValue = bc1->giveValues();

If I do it and don't comment the values in the BoundaryCondition, I always get the empty array by bc1-> giveValues();, with commented line it does work as expected. Thus, I get the displacements from GeneralBoundaryCondition.

class OOFEM_EXPORT BoundaryCondition : public GeneralBoundaryCondition
{
protected:
    /// Prescribed values for each resp. dof
   //I should comment the line below, than I can read values from GeneralBoundaryCondition
   //FloatArray values;
Mikael Öhman wrote:

And lastly, the material models:
I don't think we have any such models.
Except for the few common basic models, the models are developed in research projects, and are usually highly specialized.
TutorialMaterial was added fairly recently, as we wanted a simple tutorial to introduce new PhD students to.
Contributions are of course most welcome.

We do also have the option for using abaqus user materials (umat), so there might be some existing umat files you can use. Other interfaces like this can be added if there is a need (like the ANSYS usermat, etc.)

Does this mean that I can use any implemented umat/usermat without Abaqus license? That'll be perfect, because the common materials (conventional isotropic/kinematic hardening) should be implemented there.

Kind regards,

Vitalii

Re: Material plasticity for 2dBeam with LayeredCrossSection

Vitalii.Vorkov wrote:

Hi Mikael,

Regarding the beam models with large deformations, I've made a small literature study and found two models. One Euler-Bernoulli without shear and one Timoshenko type with shear. The references are as follows:

  1. Panakorn and Vu - A 2D field-consistent beam element for large displacement analysis using the total Lagrangian formulation

  2. Kien - A Timoshenko beam element for large displacement analysis of planar beams and frames

Do you consider these sources as detail references? If you have any remarks, please let me know. I have the pdf versions of the papers if you might need them. And of course I'm willing to help as much as I can.

If they, preferably, explicitly express the "B" matrices, then it will be easy to implement.

I'll try to explain in more details what I did mean. I want to read the values from the GeneralBoundaryCondition

        engmdl = model;
        dmn = model->giveDomain(1);

        GeneralBoundaryCondition *bc1 = dmn->giveBc(5);
        FloatArray displacementValue = bc1->giveValues();

If I do it and don't comment the values in the BoundaryCondition, I always get the empty array by bc1-> giveValues();, with commented line it does work as expected. Thus, I get the displacements from GeneralBoundaryCondition.

class OOFEM_EXPORT BoundaryCondition : public GeneralBoundaryCondition
{
protected:
    /// Prescribed values for each resp. dof
   //I should comment the line below, than I can read values from GeneralBoundaryCondition
   //FloatArray values;

I must be clear that none of those changes will ever make it into OOFEM. GeneralBoundaryCondition is a base class for all types of boundary conditions (Neumann/Newton/Dirichlet/???) and should not have an array. Even if you cast to BoundaryCondition, you should still not access the underlying arrays directly. Here, you are not using the boundary condition for anything it was designed for (there are no DOFs here, you ignore the load time function, etc.).
I don't know what you are using the displacement value for so I can't speculate in what I would suggest you do instead, but I'm sure there are alternatives to this approach.

It is quite clear that these are highly specialized customizations that you have done, but to be included in main OOFEM, it must be written in a much more general way. If we don't stick to this it will be difficult to improve OOFEM in the future.


Does this mean that I can use any implemented umat/usermat without Abaqus license? That'll be perfect, because the common materials (conventional isotropic/kinematic hardening) should be implemented there.

Kind regards,

Vitalii

Yes they can be used without Abaqus (it's just a fortran function). There is a very tiny file to include "aba_param_dp.inc" which typically contains 2 lines, one which defines some implicit variables, "implicit real*8(a-h,o-z)" and one that defines whether or not it's a double or single precision machine (is there ever any single precision machines around?)  "parameter (nprecd=2)"

Re: Material plasticity for 2dBeam with LayeredCrossSection

Mikael Öhman wrote:
Vitalii.Vorkov wrote:

Hi Mikael,

Regarding the beam models with large deformations, I've made a small literature study and found two models. One Euler-Bernoulli without shear and one Timoshenko type with shear. The references are as follows:

  1. Panakorn and Vu - A 2D field-consistent beam element for large displacement analysis using the total Lagrangian formulation

  2. Kien - A Timoshenko beam element for large displacement analysis of planar beams and frames

Do you consider these sources as detail references? If you have any remarks, please let me know. I have the pdf versions of the papers if you might need them. And of course I'm willing to help as much as I can.

If they, preferably, explicitly express the "B" matrices, then it will be easy to implement.

Hi Mikael,

I've found a number of references with shape functions and/or <B> matrix. Would you be so kind to give/write a crash-course or kind of manual that can help to implement new elements? Any recommendation are extremely welcome.

Also, I looked into beam2d.c and it seems to be much more complicated than libeam2d.c. Is it possible as the first approach transfer <B> matrix of beam2d into libeam2d?

Regards,

Vitalii

Re: Material plasticity for 2dBeam with LayeredCrossSection

libeam2d is supposed to be a Mindlin beam, so it should be modified. Adding a new formulation would be fine.
beam2d wouldn't be of any use for you either. It's still only valid for small deflections.


For implementing a new element, there are 2 things (minimum) that needs to be supported:

1. Computing the internal forces. In most elements, this is done by "q = integral B^T * stress(B*u) dV". u are the nodal unknowns, and B*u is the strain, evaluated at each integration point. For beams and structural elements, stress and strain refer to the generalized stresses and strains (includes curvatures).

2. Computing the stiffness matrix. In most elements, this is done by "K = integral B^T * D * B dV" by numerical integration. The D-matrix is taken from each integration point.
This is only used for the Newton-iterations (and if you use an alternative solution strategy, you could technically do without K).

So, as long as one can compute the internal forces (q), and the stiffness (K) one can solve the FE-analysis with normal Newton iterations.
One probably also wants to support external loads; "f = integral N^T * t dA", though support for this is optional.

The elements don't need to use the standard B^T * D * B formulation to compute the stiffness matrix. Some elements (like the large deformation shell element "shell7") can't really use this formulation, and if so, then the elements are free to overload the functions to compute the stiffness matrix and do whatever they want.

I would suspect that a large deformation beam element would need to do such a completely different formulation. It is probably a lot harder to implement.


Note on element local c.s.
Also worth adding is the local coordinate systems. Elements can define a local c.s. and compute all the vectors and matrices in this local c.s., which is then transformed into global c.s. automatically. For example, the beam2d and libeam2d elements do this.

For a large deformation structural elements (like the shell7 elements), defining a local c.s. doesn't simplify anything, since it's curved in space. So, typically, the local c.s. is only ever used for small deformation elements.


Do you really need a beam?
Just as a side-note. I'm wondering if you really need beam/shell elements. The beam kinematics and all the assumptions about shear stresses etc. might not be very accurate for forming processes.
All the elements you need for a forming analysis already exists with solid elements.

Re: Material plasticity for 2dBeam with LayeredCrossSection

Hello Mikael,

Sorry for the late reply, the end of the academic year...

Mikael Öhman wrote:

libeam2d is supposed to be a Mindlin beam, so it should be modified. Adding a new formulation would be fine.
beam2d wouldn't be of any use for you either. It's still only valid for small deflections.


For implementing a new element, there are 2 things (minimum) that needs to be supported:

1. Computing the internal forces. In most elements, this is done by "q = integral B^T * stress(B*u) dV". u are the nodal unknowns, and B*u is the strain, evaluated at each integration point. For beams and structural elements, stress and strain refer to the generalized stresses and strains (includes curvatures).

2. Computing the stiffness matrix. In most elements, this is done by "K = integral B^T * D * B dV" by numerical integration. The D-matrix is taken from each integration point.
This is only used for the Newton-iterations (and if you use an alternative solution strategy, you could technically do without K).

So, as long as one can compute the internal forces (q), and the stiffness (K) one can solve the FE-analysis with normal Newton iterations.
One probably also wants to support external loads; "f = integral N^T * t dA", though support for this is optional.

The elements don't need to use the standard B^T * D * B formulation to compute the stiffness matrix. Some elements (like the large deformation shell element "shell7") can't really use this formulation, and if so, then the elements are free to overload the functions to compute the stiffness matrix and do whatever they want.

I would suspect that a large deformation beam element would need to do such a completely different formulation. It is probably a lot harder to implement.


Note on element local c.s.
Also worth adding is the local coordinate systems. Elements can define a local c.s. and compute all the vectors and matrices in this local c.s., which is then transformed into global c.s. automatically. For example, the beam2d and libeam2d elements do this.

For a large deformation structural elements (like the shell7 elements), defining a local c.s. doesn't simplify anything, since it's curved in space. So, typically, the local c.s. is only ever used for small deformation elements.

Thanks for this, I will try to implement it. However, it's hard to find "ready-to-use" matrixes smile All of them in the integral form, and written in a special "quiz" way. I figure out how to deal it, but it's surprising that the FEM society still doesn't have a library with ready to use (at least) beam elements. yikes

Mikael Öhman wrote:

Do you really need a beam?
Just as a side-note. I'm wondering if you really need beam/shell elements. The beam kinematics and all the assumptions about shear stresses etc. might not be very accurate for forming processes.
All the elements you need for a forming analysis already exists with solid elements.

The idea of my calculations is that its going to use in a CNC-controller of a press-brake with quite limited calculation capability. And even for the offline (desktop) calculations, I have a requirement to do it in about 30 seconds. Also, I've done Abaqus calculations for the beam/plane/shell/solid formulation and all of them under certain conditions will yield correct results. Of course I won't have any 3D effects by it's not a cardinal parameter.

Re: Material plasticity for 2dBeam with LayeredCrossSection

Vitalii.Vorkov wrote:

Thanks for this, I will try to implement it. However, it's hard to find "ready-to-use" matrixes smile All of them in the integral form, and written in a special "quiz" way. I figure out how to deal it, but it's surprising that the FEM society still doesn't have a library with ready to use (at least) beam elements. yikes

In my experience, going to textbooks is the only option. Research articles is a dead end, because they typically write things in a speciaized "quiz" way as you describe it smile

When it comes to OOFEM, work is typically only done while there is a project (often a PhD student). Few research projects involve implementing existing beam models (even though it would be very valuable). Often something new and fancy instead.

The idea of my calculations is that its going to use in a CNC-controller of a press-brake with quite limited calculation capability. And even for the offline (desktop) calculations, I have a requirement to do it in about 30 seconds. Also, I've done Abaqus calculations for the beam/plane/shell/solid formulation and all of them under certain conditions will yield correct results. Of course I won't have any 3D effects by it's not a cardinal parameter.

Well, in under 30 seconds you could still probably have many tens of thousands of unknowns, so I don't really think that would limit you to much  when it comes to solid elements.  Of couse, it always depends on how thin geometries you have (something like the video you showed earlier would probably be doable in solid elements under 30 seconds).

Re: Material plasticity for 2dBeam with LayeredCrossSection

Mikael Öhman wrote:
Vitalii.Vorkov wrote:

The idea of my calculations is that its going to use in a CNC-controller of a press-brake with quite limited calculation capability. And even for the offline (desktop) calculations, I have a requirement to do it in about 30 seconds. Also, I've done Abaqus calculations for the beam/plane/shell/solid formulation and all of them under certain conditions will yield correct results. Of course I won't have any 3D effects by it's not a cardinal parameter.

Well, in under 30 seconds you could still probably have many tens of thousands of unknowns, so I don't really think that would limit you to much  when it comes to solid elements.  Of couse, it always depends on how thin geometries you have (something like the video you showed earlier would probably be doable in solid elements under 30 seconds).

In the attachment you can find a typical solid mesh that is suitable for the simulation of the bending process. Usually the necessary amount of elements through thickness for correct results is about 15 (for thick plates). What is your opinion? Will it be possible to squeeze the calculation time within 1-2 minutes range for solid elements? Solid elements are of course preferable and provide most accurate and adequate results, however usually it costs quite a lot... sad

Post's attachments

mesh.png 88.53 kb, file has never been downloaded. 

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

Re: Material plasticity for 2dBeam with LayeredCrossSection

A rough count, ~30 elements from the edge til the middle,  say, 5 elements in thickness. Solving that problem in 2D (plane stress) should be very accurate.
Using symmetry, and only 1 element in thickness (since nothing really happens in thickness here), just like with your beam examples.
So 31 * 6 nodes, 3 dofs per node, 31 * 6 * 3 = 372 dofs (for a 2D problem), which is nothing. It's hard to tell how many iterations you will need to obtain final converged shape.
If there is some performance sink, I'm sure things could be done to improve that.

I solve system with several hundred thousands of unknowns, and it takes a couple of seconds (partly because I have no lagrange multipliers in my system, so that I can use a iterative (conjugate gradient) solver).

Is it much work for you to duplicate the nodes in thickness for your pre-processor, and add some plane stress elements?
I think this is worth checking out, as beam models for this type of problem can get very very complicated (I browsed through Zienkiewicz book yesterday, and it was over 50 pages long to derive the rod element).

(It's important that you run OOFEM with release mode, and good with a good lapack library and suitable solver, as these options together will speed up OOFEM at least 100 times over compared to a simple debug compilation).

Re: Material plasticity for 2dBeam with LayeredCrossSection

Mikael Öhman wrote:

A rough count, ~30 elements from the edge til the middle,  say, 5 elements in thickness. Solving that problem in 2D (plane stress) should be very accurate.
Using symmetry, and only 1 element in thickness (since nothing really happens in thickness here), just like with your beam examples.
So 31 * 6 nodes, 3 dofs per node, 31 * 6 * 3 = 372 dofs (for a 2D problem), which is nothing. It's hard to tell how many iterations you will need to obtain final converged shape.
If there is some performance sink, I'm sure things could be done to improve that.

I solve system with several hundred thousands of unknowns, and it takes a couple of seconds (partly because I have no lagrange multipliers in my system, so that I can use a iterative (conjugate gradient) solver).

Is it much work for you to duplicate the nodes in thickness for your pre-processor, and add some plane stress elements?
I think this is worth checking out, as beam models for this type of problem can get very very complicated (I browsed through Zienkiewicz book yesterday, and it was over 50 pages long to derive the rod element).

(It's important that you run OOFEM with release mode, and good with a good lapack library and suitable solver, as these options together will speed up OOFEM at least 100 times over compared to a simple debug compilation).

Hi Mikael

That's what I wanted to hear ;-)

I checked the PlaneStress solution, and it seems that it doesn't increase calculation time. For the reference, I used Abaqus solution and there you have quite big difference between this two solution and especially for solid/shell.

However, the air bending is PlaneStrain and OOFEM doesn't have PlaneStrain effect with nlgeo 1 or 2. There is also no shell/plate with nlgeo 0,1 except for tr2shell7.

Now, I'll try the Solid elements formulation and if it'll be within reasonable calculation time. Especially, with taking into account your remark about release mode, which I wasn't aware of. It seems quite realistic, I'll report it shortly. I expected around 3000 nodes => 200 elements. I believe Salome is a good way to model 3D structures and convert it to OOFEM input file.

Regards,

Vitalii

Re: Material plasticity for 2dBeam with LayeredCrossSection

There are plane strain element with nlgeo 1, see for example quad1planestrain.C. However, it depends on what exactly you want/need, since appropriate large strain material model is also needed, and there are only a few large strain models in oofem.

Nlgeo 2 doesn't exist in oofem anymore.

36 (edited by Vitalii.Vorkov 29-06-2015 14:59:10)

Re: Material plasticity for 2dBeam with LayeredCrossSection

nitramkaroh wrote:

There are plane strain element with nlgeo 1, see for example quad1planestrain.C. However, it depends on what exactly you want/need, since appropriate large strain material model is also needed, and there are only a few large strain models in oofem.

Nlgeo 2 doesn't exist in oofem anymore.

Hi Martin,

In the Element Library Manual the element is described as nlgeom 0, but I'm going to look through it.

I'm planning to use a material based on tutorialmaterial.c with a bit rewritten hardening behavior. In principle, I need isotropic hardening with piece wise approximation of strain-stress curve.

Kind regards,

Vitalii

Update Ok, now I see nlgeo 0 means that it has non-linear capability. I was thinking that it means, there is no nlgeom. Sorry.

Re: Material plasticity for 2dBeam with LayeredCrossSection

The problem is that the manual is old and need to be updated, sorry for that. Nlgeo 0 means that the element does not support geometrical nonlinearity, i.e. the formulation is based on the "small-strain" stress tensor which is computed form the small strain tensor.

The NLgeo1 is the total lagrangian formulation using the first Piola-Kirchhoff stress and the deformation gradient.  The element needs to implement computeBHmatrix function which computes displacement gradient(in contrast with computeBmatrix which gives its symmetric part), see  structural2delement.C for example of implementation of this function.

If I am right the tutorialmaterial is the vonMises small strain plasticity. If you want to use it in large strain setting it has to be extended to the large strain range using multiplicative split of deformation gradient or some hypoelasto-plastic formulation. Other possibility is to use additive split of logarithmic strain(see lsmastermat.C).

Martin

Re: Material plasticity for 2dBeam with LayeredCrossSection

I'm quiet confused about the discussion. Nlgeo 0 means the element does NOT support geometric nonlinearity? As I tested, it makes no difference if I use Nlgeo 0 or none.

Re: Material plasticity for 2dBeam with LayeredCrossSection

Yes, nlgeo 0 means that small strain formulation is used, if you want to switch to large strains you need to setup nlgeo 1.
The nlgeo 0 is the default setting so if you don't use nlgeo 0 it makes no difference exactly as you write.

Martin