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.04k stars 246 forks source link

[StructuralMechanicsApplication] Hinge between beam elements? #12185

Open aronnoordam opened 8 months ago

aronnoordam commented 8 months ago

Is it possible to add a hinge with a custom (small) rotational stiffness between beam elements? If so, how can I do that?

Below an illustration of what I want.

image

loumalouomega commented 8 months ago

Rotaton dofs were added here: https://github.com/KratosMultiphysics/Kratos/pull/5627 never merged

aronnoordam commented 8 months ago

Rotaton dofs were added here: #5627 never merged

doesnt this add extra stiffness on top of the already existing stiffness from the beam? What I want is to set a rotational stiffness which is lower than the rotational stiffness following the beam elements

loumalouomega commented 8 months ago

Rotaton dofs were added here: #5627 never merged

doesnt this add extra stiffness on top of the already existing stiffness from the beam? What I want is to set a rotational stiffness which is lower than the rotational stiffness following the beam elements

Yes, in that case the rotation will be added. If you want to consider a hinge with rotation stiffness I think we could create a rotation free hinge only @KratosMultiphysics/structural-mechanics

aronnoordam commented 8 months ago

that sounds nice

clazaro commented 8 months ago

Another way to achieve this should be with a Multi-point constraint with just the required rotational stiffness.

philbucher commented 8 months ago

there is also a variable in the beam to remove the dof with static condensation

aronnoordam commented 8 months ago

Thanks for the suggestions! I guess with a combination of static condensation and the multi point constraint I can simulate a hinge. However maybe I can also add a rigid correction matrix to the existing consistent beam elements as shown in [simões 1996] https://www.sciencedirect.com/science/article/abs/pii/0045794995004270,

this makes sure, the complete stiffness matrix of the beam stays correct when adding rigidity to the end of a beam element. Below an example for a 2 noded beam written in python. If you agree, I can start this implementation

`
l = self.length_element EI = self.material.youngs_modulus * self.section.sec_moment_of_inertia s1 = self.spring_stiffness1
s2 = self.spring_stiffness2

    # set fixity factor
    alpha1 = 1 / (1 + 3 * EI / (s1 * l)) if s1 > 0 else 0
    alpha2 = 1 / (1 + 3 * EI / (s2 * l)) if s2 > 0 else 0

    rigid_mat = np.zeros((6, 6))
    rigid_mat[[0, 3], [0, 3]] = 1
    rigid_mat[[3, 0], [0, 3]] = 1
    rigid_mat[[1, 4, 1, 4], [1, 4, 4, 1]] = (alpha1 + alpha2 + alpha1 * alpha2)/(4-alpha1*alpha2)
    rigid_mat[[1, 2, 2, 4], [2, 1, 4, 2]] = (2 * alpha1 + alpha1 * alpha2)/(4-alpha1*alpha2)
    rigid_mat[[1, 5, 4, 5], [5, 1, 5, 4]] = (2 * alpha2 + alpha1 * alpha2) / (4 - alpha1 * alpha2)
    rigid_mat[2, 2] = 3 * alpha1 / (4 - alpha1*alpha2)
    rigid_mat[5, 5] = 3 * alpha2 / (4 - alpha1 * alpha2)
    rigid_mat[[2, 5], [5, 2]] = 3*alpha1*alpha2/(4-alpha1*alpha2)

    existing_stiffness_matrix = existing_stiffness_matrix * rigid_mat

`