Hello everyone,
I've been trying to build a case for simulating wave interaction with an attenuator-type wave energy converter device, and I want to set the case up as shown in Figure 1. where the 2 box bodies are allowed to freely rotate around the hinge in the middle as waves pass through, and the hinge is free to move vertically (in the future potentially considering to add mooring to the geometry and allow the hinge to move freely).
I have currently set the dynamicMeshDict as follows, where I have applied joints to move freely in Y and Z, and rotate about Y axis (I think). I've also set with the transform keyword for the centre of rotation to be at the origin initially (0 0 0).
Code:
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1806 |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
motionSolverLibs ("librigidBodyMeshMotion.so");
dynamicFvMesh dynamicOversetFvMesh;
dynamicOversetFvMeshCoeffs
{
}
motionSolver rigidBodyMotion;
// rigidBodyMotionCoeffs - not needed any more
// {
report on;
solver
{
type Newmark;
// gamma 0.1; // Velocity integration coefficient
// beta 0.1; // Position integration coefficient
}
accelerationRelaxation 0.7;
//- prescribedRotation requires some sub-iterations to converge faster
// to desired value.
// nIter 3;
bodies
{
box1
{
type rigidBody;
parent root;
patches (box1);
innerDistance 100;
outerDistance 101;
centreOfMass (-20 0 0);
// Cuboid dimensions
Lx 40;
Ly 4;
Lz 4;
// Density of the solid
rhoSolid 500;
// Cuboid mass
mass #calc "$rhoSolid*$Lx*$Ly*$Lz";
inertia (1 0 0 1 0 1);
transform (1 0 0 0 1 0 0 0 1) (0 0 0);
joint
{
type composite;
joints
(
{
type Px;
}
{
type Pz;
}
{
type Ry;
}
);
}
constraints
{
fixedAxis
{
sixDoFRigidBodyMotionConstraint plane;
normal (0 1 0); // constrained in y plane?
}
}
restraints
{
AngularDamper
{
sixDoFRigidBodyMotionRestraint sphericalAngularDamper;
coeff 5000; //angular damping coefficient in Nms/rad
}
}
} //end box1
box2
{
type rigidBody;
parent root;
patches (box2);
innerDistance 100; // With overset we want to avoid the mesh
outerDistance 101; // deformation so have large innerDistance
// Cuboid mass -- very simple setup. For more complicated shapes
// see utility surfaceInertia
// Cuboid dimensions
Lx 40;
Ly 4;
Lz 4;
// Density of the solid
rhoSolid 500;
// Cuboid mass
mass #calc "$rhoSolid*$Lx*$Ly*$Lz";
inertia (1 0 0 1 0 1);
centreOfMass (20 0 0); // relative to the centreOfMass
// of parent body
// (here root = global coord system)
// Transformation tensor and centre of rotation
transform (1 0 0 0 1 0 0 0 1) (0 0 0);
joint
{
type composite;
joints
(
{
type Px;
}
{
type Pz;
}
{
type Ry;
}
);
}
constraints
{
fixedAxis
{
sixDoFRigidBodyMotionConstraint plane;
normal (0 1 0); // constrained in y plane?
}
}
restraints
{
AngularDamper
{
sixDoFRigidBodyMotionRestraint sphericalAngularDamper;
coeff 5000; //angular damping coefficient in Nms/rad
}
}
} // end body_Aft
}
// } // end of rigidBodyMotionCoeffs
// ************************************************************************* //
However, I am not sure if this is the correct way/syntax for setting something like this up, and I am not sure if the 'joint', 'transform', 'constraints' and 'restraints' definitions were set up properly regarding the 2 bodies and the joint.
In an initial trial run, the results at around 4s show the Centre of Rotation shifting to -85 m in Z which seems unphysical (or maybe I've interpreted it wrongly?):
Code:
Rigid-body motion of the fwd
Centre of rotation: (0 0 -85.1395255871)
Orientation: (1 0 0 0 1 0 0 0 1)
Linear velocity: (0 0 -40.8709835732)
Angular velocity: (0 0 0)
Rigid-body motion of the aft
Centre of rotation: (0 0 -85.1395255871)
Orientation: (1 0 0 0 1 0 0 0 1)
Linear velocity: (0 0 -40.8709835732)
Angular velocity: (0 0 0)
inverseDistance : detected 2 mesh regions
zone:0 nCells:9576000 voxels:(85 85 85) bb:(-90.0000603573 -12.0000603573 -20.0000603573) (-34.0180396427 0.147119357345 -0.987181642655)
zone:1 nCells:5615950 voxels:(85 85 85) bb:(-40.0000076955 -4.00000769553 -4.00000769553) (-34.0998923045 7.85500095484e-06 -1.09999230447)
Overset analysis : nCells : 15191950
calculated : 14708262
interpolated : 250840 (interpolated from local:236708 mixed local/remote:14126 remote:6)
hole : 232848
I'm very new to setting up body dynamics in OpenFOAM, so I would appreciate any thoughts and input.
Thanks, everyone!