CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   2DOF Planning hull resistance study with overset (https://www.cfd-online.com/Forums/openfoam-solving/224935-2dof-planning-hull-resistance-study-overset.html)

CFD_fan March 9, 2020 04:37

2DOF Planning hull resistance study with overset
 
5 Attachment(s)
Hi all,

I'm simulating a planning hull (model length ~ 2.4 m, weight 44 kg (half hull)) with heave and pitch DOFs using overset and interdymfoam (OpenFOAM V1906). The flow speed at inlet is 12 m/s. The simulation time is set to around in total 10s. The setup of the boundary conditions and numerical setups were referred to the 'DTCHull' tutorial and the 'sphereSplashSend' tutorial on Wiki, respectively.

The mesh can be seen in the attachment. A very coarse mesh (152205 cells for background, and 55972 cells for overset, all generated using snappyhexmesh) due to the simulation runs on a 6 cores i7 laptop. The boundary layers are NOT added, which is definitely wrong so far. I tried to generate 3 boundary layers and ran the simulation. It was too slow on laptop, especially for the mesh update (~ 40s per time step), so that it was abandoned. However, in the current simulation, the k-omega-SST turbulence model is still used.

I'm expecting the hull will eventually stabilize itself with a constant pitch angle and sinkage with respect to the water. However, simulation results show that the hull keeps pitching and heaving periodically, so as the vertical and drag forces. The forces can be seen in the attachment.

My questions are:

1. Are the boundary conditions and numerical setups correct? If not, what other boundary conditions should be used instead?

2. Do the lack of boundary layers and the low mesh resolution cause the hull's periodical pitch and heave motion? How many added boundary layers are recommended when wall function is used?

3. Can force ramp function be used in Openfoam V1906? Maybe the simulation can be improved by scaling down the very large initial forces?

4. What would be the values for accelerationRelaxation and accelerationDamping? Currently both are set to 1.

Thank you guys!



Boundary conditions:

U:

Umean 12;
mUmean -12;
dimensions [0 1 -1 0 0 0 0];
internalField uniform ($mUmean 0 0);

boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"
overset
{
type overset;
}
hull
{
type movingWallVelocity;
value uniform (0 0 0);
}
inlet
{
type fixedValue;
value $internalField;
}
outlet
{
type zeroGradient;
}
atmosphere
{
type pressureInletOutletVelocity;
value uniform (0 0 0);
}

bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}
midPlaneSM
{
type symmetryPlane;
}
}

p_rgh:

dimensions [1 -1 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"
overset
{
type overset;
}
hull
{
type fixedFluxPressure;
value $internalField;
}
inlet
{
type fixedFluxPressure;
value $internalField;
}
outlet
{
type zeroGradient;
}
atmosphere
{
type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rho;
psi none;
gamma 1;
value uniform 0;
}
bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}
midPlaneSM
{
type symmetryPlane;
}
}

alpha_water:

dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"

overset
{
type overset;
}
hull
{
type zeroGradient;
}
inlet
{
type fixedValue;
value $internalField;
}
outlet
{
type variableHeightFlowRate;
lowerBound 0;
upperBound 1;
value $internalField;
}
atmosphere
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}
midPlaneSM
{
type symmetryPlane;
}

}

pointDisplacement:

dimensions [0 1 0 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
overset
{
patchType overset;
type zeroGradient;
}
hull
{
type calculated;
value uniform (0 0 0);
}
".*"
{
type fixedValue;
value uniform (0 0 0);
}
}

k:

dimensions [0 2 -2 0 0 0 0];
internalField uniform 0.0081;
boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"
overset
{
type overset;
}
hull
{
type kqRWallFunction;
value $internalField;
}
inlet
{
type fixedValue;
value $internalField;
}
outlet
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}

midPlaneSM
{
type symmetryPlane;
}
}

nut:

dimensions [0 2 -1 0 0 0 0];
internalField uniform 5e-07;
boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"
overset
{
type overset;
}
hull
{
type nutkWallFunction;
value $internalField;
}
inlet
{
type fixedValue;
value $internalField;
}
outlet
{
type zeroGradient;
}
atmosphere
{
type zeroGradient;
}
bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}
midPlaneSM
{
type symmetryPlane;
}
}

omega:

dimensions [0 0 -1 0 0 0 0];
internalField uniform 1.8672;
boundaryField
{
#includeEtc "caseDicts/setConstraintTypes"

overset
{
type overset;
}
hull
{
type omegaWallFunction;
value $internalField;
}
inlet
{
type fixedValue;
value $internalField;
}
outlet
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
bottom
{
type symmetryPlane;
}
side
{
type symmetryPlane;
}
midPlane
{
type symmetryPlane;
}
midPlaneSM
{
type symmetryPlane;
}
}

The dynamicMeshDict, fvSchemes and fvSolution are:

dynamicMeshDict:

motionSolverLibs ( "libsixDoFRigidBodyMotion.so" );
dynamicFvMesh dynamicOversetFvMesh;
dynamicOversetFvMeshCoeffs
{
}
solver sixDoFRigidBodyMotion;
sixDoFRigidBodyMotionCoeffs
{
patches (hull);
innerDistance 200;
outerDistance 201;

velocity ( 0 0 0 );
accelerationRelaxation 1;
accelerationDamping 1;

mass 44;
centreOfMass (0.8791 0 0.0522);
momentOfInertia (7.5 40 40);

report on;
reportToFile on;

solver
{
type Newmark;
}
constraints
{
zAxis
{
sixDoFRigidBodyMotionConstraint line;
direction (0 0 1);
}

yPlane
{
sixDoFRigidBodyMotionConstraint axis;
axis (0 1 0);
}

}

fvSchemes:

ddtSchemes
{
default Euler;
}
gradSchemes
{
default cellMDLimited Gauss linear 0;
grad(U) cellMDLimited Gauss linear 0.333;
}
divSchemes
{
div(rhoPhi,U) Gauss linearUpwind grad(U);
div(U) Gauss linear;
div(phi,alpha) Gauss vanLeer;
div(phirb,alpha) Gauss linear;
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
div(phi,k) Gauss upwind;
div(phi,omega) Gauss upwind;
}
laplacianSchemes
{
default Gauss linear limited 1.0;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default limited 1.0;
}
oversetInterpolation
{
method inverseDistance;
}
oversetInterpolationSuppressed
{
grad(p_rgh);
surfaceIntegrate(phiHbyA);
}
fluxRequired
{
default no;
p_rgh;
pcorr;
alpha.water;
}
wallDist
{
method meshWave;
}

fvSolution:

solvers
{
"alpha.water.*"
{
nAlphaCorr 3;
nAlphaSubCycles 2;
cAlpha 1;
icAlpha 0;
MULESCorr yes;
nLimiterIter 5;
alphaApplyPrevCorr no;
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-8;
relTol 0;
}
cellDisplacement
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
}
p_rgh
{
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-5;
relTol 0.01;
}
p_rghFinal
{
solver PBiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0;
}
pcorr
{
$pFinal;
solver PCG;
preconditioner DIC;
tolerance 1e-7;
relTol 0.01;
}
pcorrFinal
{
$pcorr;
tolerance 1e-7;
relTol 0;
}
"(U|k|omega)"
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-6;
relTol 0.01;
}
"(U|k|omega)Final"
{
$U;
tolerance 1e-6;
relTol 0;
}
}
PIMPLE
{
momentumPredictor true;
correctPhi false;
nOuterCorrectors 10;
nCorrectors 3;
nNonOrthogonalCorrectors 2;
massFluxInterpolation false;
ddtCorr true;
turbOnFinalIterOnly false;
moveMeshOuterCorrectors false;
checkMeshCourantNo true;

residualControl
{
p_rgh
{
tolerance 1e-5;
relTol 0;
}
}
}
relaxationFactors
{
fields
{
p 1;
}
equations
{
"(U|k|omega)" 1;
".*Final" 1.0;
}
}

Kil September 30, 2020 15:02

Hi, Jim!


Have your got any answers on your questions? It's very interesting to know for me...




With best regards,
Serge

gigliagarf February 2, 2021 07:29

Example Files
 
Hi would you happen to be able to post the files associated with this? I've been trying to get overset meshing to work with ship hulls for a few months with no success. I think a working example would help me a ton if you can share.

massimiliano.tarrini February 9, 2021 08:13

Hi CFD FAN could you please help me in solving planning hull with this technique?
please send me an email to info@numitalia.com
regards
max

ttsasan February 13, 2021 02:08

Hi CFD Fan.

When you're solving a planing problem you should be very careful about the longitudinal center of gravity. What I see over here is much more similar to porpoising problem, which is quite often in planing motion. Are you reproducing steady performance of a specific design?

ulgenk February 15, 2021 10:14

Hello,

I have been working on a similar case. Since you have been using the PIMPLE algorithm, you can add residual controls with good under-relaxation factors and a high Courant number. This will accelerate your solution, and you will avoid an oscillatory force graph. And be sure the mesh has a good quality. And avoid overestimating the turbulence kinetic energy by using a new feature of OpenFOAM.

vava10 March 6, 2021 14:29

half geometry
 
Hey,

I am simulating a ship. Due to symmetry I am only working with half of the geometry. for Dynamic mesh I have following doubts

1. centre of mass - the centre of half or full geometry
2. moment of inertia -moment of inertia of half geometry or (moment of inertia of full geometry)/2


Thanks in advance
vava10

9034 July 13, 2021 05:03

Hii...vava10

you can refer the DTCHullMoving and can identify the center of mass and MOI are as follows:

1. Center of mass of full geometry
2. Moment of inertia of full geometry


All times are GMT -4. The time now is 19:09.