Hi all,
I'm relatively new using Project Chrono and I'm struggling trying to
connect a rigid link to a flexible beam element (fea). I have reduced the
problem to an easy example to reproduce this.
I'm using a simple cantilever beam. I am able to clamp the lowest node. But
when I try to include a rigid link to connect a lumped mass at the free end
of the beam, I run into problems with the dynamic solver: HHT: Reached
minimum allowable step size. For reference, the static solver runs without
issues. I guess I'm not using the proper element to connect to a fea
element (?)
Attached you can find the schematic representation of the system and the
model in pyChrono.
Any hint on how to do this would be great. Thanks for the support!
--
You received this message because you are subscribed to the Google Groups
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/projectchrono/1b8734e8-cb84-42bb-a63e-6b26cf29fb09n%40googlegroups.com.
# Test cantilever beam with rigid link and lumped mass.
import pychrono as chrono
import pychrono.fea as fea
import pychrono.pardisomkl as mkl
system = chrono.ChSystemSMC()
# Material properties
E = 210E9 # Young Modulus [N/m^2]
rho = 7860 # Density [kg/m^3]
nu = 0.3 # Poisson ratio [-]
G = E/(2*(1+nu)) # Shear Modulus [N/m^2]
# Create one beam:
mesh = fea.ChMesh()
builder = fea.ChBuilderBeamEuler()
beam_section = fea.ChBeamSectionEulerAdvanced()
beam_section.SetAsCircularSection(0.5)
beam_section.SetYoungModulus(E)
beam_section.SetShearModulus(G)
beam_section.SetDensity(rho)
beam_section.SetRayleighDampingBeta(0.002) # Stiffness proportional damping
builder.BuildBeam(mesh,
beam_section, # Beam section properties
5, # Elements per section
chrono.ChVector3d(0, 0, 0), # Start point
chrono.ChVector3d(0, 0, 10), # End point
chrono.ChVector3d(1, 0, 0)) # the 'X' direction of the section for the beam
end_node = builder.GetLastBeamNodes().back()
start_node = builder.GetLastBeamNodes().front()
# Clamp condition:
start_node.SetFixed(True)
# Create a lumped mass and inertia:
#############################################################################################
# This is the part that crashes my dynamic analysis. Static analysis works.
# Lumped mass and inertia:
lumped_mass = chrono.ChBody()
lumped_mass.SetMass(50) # Mass [kg]
lumped_mass.SetInertiaXX(chrono.ChVector3d(100,100,100)) # Moments of inertia [kgm^2]
lumped_mass.SetPos(chrono.ChVector3d(-5,0,10)) # Position
system.Add(lumped_mass)
# Rigid link:
rigid_link = chrono.ChLinkMateFix()
rigid_link.Initialize(lumped_mass, end_node)
system.Add(rigid_link)
#############################################################################################
system.Add(mesh)
# Defining the gavity acceleration:
system.SetGravitationalAcceleration(chrono.ChVector3d(0, 0, -9.80665))
# Solver:
dt = 0.01 # Time step [s]
t_end = 50 # Simulation length [s]
n_steps = int((t_end/dt)+1) # Number of steps
solver = mkl.ChSolverPardisoMKL()
system.SetSolver(solver)
system.SetTimestepperType(chrono.ChTimestepper.Type_HHT)
step = 0
while step < n_steps:
system.DoStepDynamics(dt)
step += 1 # Moving to the next time step