1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v1912 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object dynamicMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dynamicFvMesh dynamicMotionSolverFvMesh;
motionSolver coded;
name myMotion;
codeInclude
#{
#include "transformField.H"
#};
localCode
#{
// Generate new set of points
tmp<pointField> twistColumn
(
const scalar& maxRotAngle,
const pointField& points
)
{
tmp<pointField> tnewPoints(new pointField(points));
pointField& newPoints = tnewPoints.ref();
const boundBox bb(points, true);
const scalar zMin = bb.min()[vector::Z];
const scalar zSpan = bb.span()[vector::Z];
forAll(points, pointI)
{
const scalar x = points[pointI].component(0);
const scalar y = points[pointI].component(1);
const scalar z = points[pointI].component(2);
// Scale the angle by height
const scalar localAngle = maxRotAngle*(z-zMin)/zSpan;
const scalar xr = x*cos(localAngle)-y*sin(localAngle);
const scalar yr = x*sin(localAngle)+y*cos(localAngle);
newPoints[pointI] = vector(xr, yr, z);
}
return tnewPoints;
}
#};
code
#{
const Time& tm = mesh().time();
const pointField& p0 = points0();
// Max twist pi at t=10
const scalar maxRotAngle =
constant::mathematical::pi*Foam::sin(degToRad(90.0/10.0*tm.value()));
return twistColumn(maxRotAngle, p0);
#};
// ************************************************************************* //
|