KratosMultiphysics / Kratos

Kratos Multiphysics (A.K.A Kratos) is a framework for building parallel multi-disciplinary simulation software. Modularity, extensibility and HPC are the main objectives. Kratos has BSD license and is written in C++ with extensive Python interface.
https://kratosmultiphysics.github.io/Kratos/
Other
1.02k stars 244 forks source link

Structural elements with incremental formulation #6321

Closed Vahid-Galavi closed 3 years ago

Vahid-Galavi commented 4 years ago

Hi,

I am currently busy with developement of an application for geomechanical applications where I am using some elements from StructuralMechanicsApplicaitons.

In our application, we usually perform the calculations in a sequence of analysis stages, for example initialisation of stresses, activation of structural elements (beams, cables,...), excvation, loading, ...

In the beginning of some calculation stages, we might need to reset displacements while keeping stresses (interal forces) in the elements, as we would like to use this stage as a starting point for furthur calculations.

With the current implementation of structural elements (beams, cables,..) this is not possible, since the internal force is always calculated using the total deformation and resetting the total displacements resets the stresses in the structural elements.

Can we modify the formulation of structural elements? Or add new ones which is not dependent on the total displacement by storing stresses in the element?

philbucher commented 4 years ago

we actually discussed this recently in the @KratosMultiphysics/technical-committee

Since this is an important discussion I add also @KratosMultiphysics/structural-mechanics

loumalouomega commented 4 years ago

Hi,

I am currently busy with developement of an application for geomechanical applications where I am using some elements from StructuralMechanicsApplicaitons.

In our application, we usually perform the calculations in a sequence of analysis stages, for example initialisation of stresses, activation of structural elements (beams, cables,...), excvation, loading, ...

In the beginning of some calculation stages, we might need to reset displacements while keeping stresses (interal forces) in the elements, as we would like to use this stage as a starting point for furthur calculations.

With the current implementation of structural elements (beams, cables,..) this is not possible, since the internal force is always calculated using the total deformation and resetting the total displacements resets the stresses in the structural elements.

Can we modify the formulation of structural elements? Or add new ones which is not dependent on the total displacement by storing stresses in the element?

We have two possible approaches. Modify the elements or create more advancedCL. This must be discussed

KlausBSautter commented 4 years ago

we have a similar problem when we do form-finding. We already started adjusting the membrane element.

After the finalization of the analysis stage (formfinding in this case) we set X0=X, disp=0, calculate the current stress state and save it as elemental data in MEMBRANE_PRESTRESS. The element uses the following code within the stress calculation:

if (Has(MEMBRANE_PRESTRESS)){
    Matrix stress_input = GetValue(MEMBRANE_PRESTRESS);
    rStress += column(stress_input,rIntegrationPointNumber);
} else {
    AddPreStressPk2(rStress,rTransformedBaseVectors);
}}

this enables us to start from the last stage.

KlausBSautter commented 4 years ago

I would suggest to create a new variable like ELEMENTAL_PRE_STRESS and write a utility which adds this stress to the element stress if the element has this variable.

loumalouomega commented 4 years ago

I would suggest to create a new variable like ELEMENTAL_PRE_STRESS and write a utility which adds this stress to the element stress if the element has this variable.

I started some time ago the core/imp-def brach which defines a generic interface for imposed deformation and stresses (it is applied via CL, but the prototype of the branch is not functional yet)

philbucher commented 4 years ago

why thorugh CL @loumalouomega ? I mean there are much more CL than elements

loumalouomega commented 4 years ago

why thorugh CL @loumalouomega ? I mean there are much more CL than elements

This implementation is not a new CL, is a class that is stored in the properties and can be called in the element or the CL, but the ideal would be to call it in the CL (IMO)

RiccardoRossi commented 4 years ago

I agree with Klaus that we need to formalize one way of adding a prestress (and document it in the wiki)

On Thu, Jan 30, 2020 at 2:35 PM Vicente Mataix Ferrándiz < notifications@github.com> wrote:

why thorugh CL @loumalouomega https://github.com/loumalouomega ? I mean there are much more CL than elements

This implementation is not a new CL, is a class that is stored in the properties and can be called in the element or the CL, but the ideal would be to call it in the CL (IMO)

— You are receiving this because you are on a team that was mentioned. Reply to this email directly, view it on GitHub https://github.com/KratosMultiphysics/Kratos/issues/6321?email_source=notifications&email_token=AB5PWEMTPXVTXMUNPTDUZTLRALJT7A5CNFSM4KNVDIHKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKK77TY#issuecomment-580255695, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB5PWENUYW42TCGW6Y7F5BTRALJT7ANCNFSM4KNVDIHA .

--

Riccardo Rossi

PhD, Civil Engineer

member of the Kratos Team: www.cimne.com/kratos

Associate Professor at Universitat Politècnica de Catalunya, BarcelonaTech (UPC)

Full Research Professor at International Center for Numerical Methods in Engineering (CIMNE)

C/ Gran Capità, s/n, Campus Nord UPC, Building C1, First Floor

08034 – Barcelona – Spain – www.cimne.com -

T.(+34) 93 401 56 96 skype: rougered4

http://www.cimne.com/

https://www.facebook.com/cimne http://blog.cimne.com/ http://vimeo.com/cimne http://www.youtube.com/user/CIMNEvideos http://www.linkedin.com/company/cimne https://twitter.com/cimne

Les dades personals contingudes en aquest missatge són tractades amb la finalitat de mantenir el contacte professional entre CIMNE i voste. Podra exercir els drets d'accés, rectificació, cancel·lació i oposició, dirigint-se a cimne@cimne.upc.edu. La utilització de la seva adreça de correu electronic per part de CIMNE queda subjecte a les disposicions de la Llei 34/2002, de Serveis de la Societat de la Informació i el Comerç Electronic.

Imprimiu aquest missatge, només si és estrictament necessari. http://www.cimne.com/

Vahid-Galavi commented 4 years ago

Thanks for the suggestions.

RiccardoRossi commented 4 years ago

I second (@loumalouomega ) think this should go through the CL.

the reasons for which i think this are: 1 - element always provides a measure of deformation to the CL and retrieves a stress. It is not correctly to simply add the prestress to the output of the CL (think to the case of a plastic CL, the prestress+stress(strain) might exceed the yield!) 2 - what is the measure of the stress? (think in the context of large deformaitons) 3 - i think that the name shall be generic, like PRESTRESS or PRESTRAIN 4 - if we wait for #5624 to be approved (which should be soon) than we could store it in the geometry and retrieve it from the CL (so that the interface is similar to the one proposed by Klaus)

pooyan-dadvand commented 4 years ago

@Vahid-Galavi I remember that you mentioned that you should do this at element level and not in your CL. Does the approach of having PRE_STRESS or PRE_STRAIN and passing them to CL works for you?

Vahid-Galavi commented 4 years ago

Sorry for delay in responding to this issue. I have already solved this for beam, truss and cable elements. I did it in this way:

  1. I store the internal stresses in the element as data members.
  2. I defined a global variable, called RESET_DISPLACEMENTS. This is set in python in the initialisation to tell the elements that we have set displacemnets to zero in this calculation stage.
  3. In InitializeSolutionStep of the element, I check if RESET_DISPLACEMENTS is true or false. Here, I set the start of recoding internal stress. The best place to do this check, is Initialize(). However, we don't pass ProcessInfo to Initialize() function. Therefore, I defined a boolean member in the element to detect Initialize() and use InitializeSolutionStep(ProcessInfo& rCurrentProcessInfo) as an initialisation function.
  4. I add the recorded internal stress with the internal stress calculation based on displacemnet.

I tested and this approach works fine. I haven't changed the existing elements and made a copy of them and then I modified.

If you like this approach, I can add the elemnets to StructuralMechanicsApplication.

KlausBSautter commented 4 years ago

If this is done in the CL we will also have to do the projection of the prestress vector onto the surface in the CL. Is this desired? It seems strange to me

Vahid-Galavi commented 4 years ago

In my opinion, this should be done in the element level and not CL level.

loumalouomega commented 4 years ago

In my opinion, this should be done in the element level and not CL level.

IMO should be at CL level, is more generic and modular. But must be done correctly

Vahid-Galavi commented 4 years ago

Then, as I already mentioned in the title of this issue, the formulation of the element must be modified and instead of the total displacement, it should use incremental displacement. Then, we don't need to check if displacements are reset or not. It will always work. But the minimal modification was what I did.

loumalouomega commented 4 years ago

I don't think so, the CL can manage that information. In any case let's see what the others suggest

RiccardoRossi commented 4 years ago

@Vahid-Galavi you can reset the displacements and still apply a prestress (or even better a prestrain). However not using the CL implies going through the points i mentioned a few posts ago

RiccardoRossi commented 4 years ago

If this is done in the CL we will also have to do the projection of the prestress vector onto the surface in the CL. Is this desired? It seems strange to me

@KlausBSautter think at the following scenario: you have a plastic CL, with a yield stress of say 100MPa. Someone gives you a prestress of 200MPa. What will be the stress which causes the deformation of the element? who should be in charge of deciding that when using that plastic CL that level of stress is not possible? (note that the element is not aware of which CL is being used)

KlausBSautter commented 4 years ago

yes, in case of the current wrinkling CL #6391 I am doing it as follows:

in element:

in CL:

in element:

loumalouomega commented 4 years ago

yes, in case of the current wrinkling CL #6391 I am doing it as follows:

in element:

* calculate pre_stress (projection etc.)

* setstressvector(pre_stress)

in CL:

* if (is_setstressvector): take stressvector and consider it as initial stress

* depending on the total stress (inlcuding prestress from the element) do the CL operations and return the material response

in element:

* add pre_stress again to material response

I think we can simplify this in order that the element doesn't need to know anything

RiccardoRossi commented 4 years ago

Dear All,

i think we need to have a meeting to decide about this

@Vahid-Galavi @KlausBSautter @AlejandroCornejo @loumalouomega what about making this on thurday 20/02/2020 early afternoon (Barcelona time)?

RiccardoRossi commented 4 years ago

@marandra @thelfer @tteschemacher just mentioning you in case you are interested in joining

KlausBSautter commented 4 years ago

@RiccardoRossi I cant do this week.

Vahid-Galavi commented 4 years ago

@RiccardoRossi I cannot make it on this Thursday.

RiccardoRossi commented 4 years ago

then, can u guys propose a date? (thursdays mornings are no-go for me)

KlausBSautter commented 4 years ago

I could do next week mo/we morning

Vahid-Galavi commented 4 years ago

Next week, Monday morning is fine with me.

loumalouomega commented 4 years ago

For me must be very early or very late, otherwise complicated

Vahid-Galavi commented 3 years ago

I close this issue