- although this has been supported for many years, the tutorials continued to use "convertToMeters" entry, which is specific to blockMesh. The "scale" is more consistent with other dictionaries. ENH: - ignore "scale 0;" (treat as no scaling) for blockMeshDict, consistent with use elsewhere.
350 lines
12 KiB
C++
350 lines
12 KiB
C++
/*--------------------------------*- C++ -*----------------------------------*\
|
|
| ========= | |
|
|
| \\ / F ield | OpenFOAM Extend Project: Open Source CFD |
|
|
| \\ / O peration | Version: plus |
|
|
| \\ / A nd | Web: www.OpenFOAM.com |
|
|
| \\/ M anipulation | |
|
|
\*---------------------------------------------------------------------------*/
|
|
FoamFile
|
|
{
|
|
version 2.0;
|
|
format ascii;
|
|
class dictionary;
|
|
object blockMeshDict;
|
|
}
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
scale 1;
|
|
|
|
// Domain
|
|
axisLevel 0.0; // x-coord of axis (right boundary of domain)
|
|
bottomLevel -1.0; // y-coord of bottom of domain
|
|
topLevel 1.0; // y-coord of top of domain
|
|
farFieldWall -0.572; // x-coord of far field wall
|
|
wedgeAngle 5.0; // Wedge angle in degrees
|
|
// Size of block moving with sphere (no cell deformation), in sphere radii
|
|
// above and below centre of sphere
|
|
upperSphereBlock 5.0;
|
|
lowerSphereBlock 5.0;
|
|
sphereLayerThickness 2.0; // Total layer thickness in sphere radii
|
|
|
|
// Sphere
|
|
sphereRadius 0.028;
|
|
sphereCentreHeight 0.147; // y-coord of sphere centre
|
|
|
|
pi #calc "Foam::constant::mathematical::pi";
|
|
|
|
// Calculated positions
|
|
sphereRadiusPosition #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius"; //"-1.0* $sphereRadius";
|
|
AMIBlockPosition #calc "2.0*$sphereRadiusPosition + $sphereRadius";
|
|
// Centre plane is z=0, so use half of wedge angle to calculate pos and neg
|
|
// z-positions
|
|
halfAngleRad #calc "0.5*$wedgeAngle*$pi/180.0";
|
|
tanAlpha #calc "tan($halfAngleRad)";
|
|
// Multiply by -1 because tan give negative value
|
|
firstBlockPosDepth #calc "-1.0*$tanAlpha*$sphereRadiusPosition";
|
|
firstBlockNegDepth #calc "-1.0*$firstBlockPosDepth";
|
|
AMIBlockPosDepth #calc "-1.0*$tanAlpha*$AMIBlockPosition";
|
|
AMIBlockNegDepth #calc "-1.0*$AMIBlockPosDepth";
|
|
farFieldPosDepth #calc "-1.0*$tanAlpha*$farFieldWall";
|
|
farFieldNegDepth #calc "-1.0*$farFieldPosDepth";
|
|
|
|
bottomBlockTopHeight #calc "$sphereCentreHeight - $lowerSphereBlock*$sphereRadius";
|
|
topBlockBottomHeight #calc "$sphereCentreHeight + $upperSphereBlock*$sphereRadius";
|
|
|
|
topSphere #calc "$sphereCentreHeight + $sphereRadius";
|
|
bottomSphere #calc "$sphereCentreHeight - $sphereRadius";
|
|
topSphereLayer #calc "$sphereCentreHeight + (1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
bottomSphereLayer #calc "$sphereCentreHeight - (1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
|
|
// Layer block below sphere
|
|
innerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*$sphereRadius";
|
|
innerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*$sphereRadius";
|
|
innerBottomLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX";
|
|
innerBottomLayerZNeg #calc "-1.0*$innerBottomLayerZPos";
|
|
|
|
innerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius";
|
|
innerBottomArcY1 #calc "$sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius";
|
|
innerBottomArcZ1Pos #calc "$innerBottomArcX1*$tanAlpha";
|
|
innerBottomArcZ1Neg #calc "-1.0*$innerBottomArcZ1Pos";
|
|
|
|
outerBottomArcX1 #calc "-1.0*sin(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)";
|
|
outerBottomArcY1 #calc #{ $sphereCentreHeight - cos(22.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness) #};
|
|
outerBottomArcZ1Pos #calc "$outerBottomArcX1*$tanAlpha";
|
|
outerBottomArcZ1Neg #calc "-1.0*$outerBottomArcZ1Pos";
|
|
|
|
outerBottomLayerX #calc "-1.0*cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
outerBottomLayerY #calc "$sphereCentreHeight - cos(45.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
outerBottomLayerZPos #calc "-1.0*$tanAlpha*$outerBottomLayerX";
|
|
outerBottomLayerZNeg #calc "-1.0*$outerBottomLayerZPos";
|
|
|
|
// Layer block above sphere
|
|
innerTopLayerX #calc "cos(135.0*$pi/180.0)*$sphereRadius";
|
|
innerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*$sphereRadius";
|
|
innerTopLayerZPos #calc "-1.0*$tanAlpha*$innerBottomLayerX";
|
|
innerTopLayerZNeg #calc "-1.0*$innerBottomLayerZPos";
|
|
|
|
innerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius";
|
|
innerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius";
|
|
innerTopArcZ1Pos #calc "$innerTopArcX1*$tanAlpha";
|
|
innerTopArcZ1Neg #calc "-1.0*$innerTopArcZ1Pos";
|
|
|
|
outerTopArcX1 #calc "-1.0*sin(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)";
|
|
outerTopArcY1 #calc "$sphereCentreHeight - cos(157.5*$pi/180.0)*$sphereRadius*(1.0 + $sphereLayerThickness)";
|
|
outerTopArcZ1Pos #calc "$outerTopArcX1*$tanAlpha";
|
|
outerTopArcZ1Neg #calc "-1.0*$outerTopArcZ1Pos";
|
|
|
|
outerTopLayerX #calc "cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
outerTopLayerY #calc "$sphereCentreHeight - cos(135.0*$pi/180.0)*(1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
outerTopLayerZPos #calc "-1.0*$tanAlpha*$outerTopLayerX";
|
|
outerTopLayerZNeg #calc "-1.0*$outerTopLayerZPos";
|
|
|
|
// Layer block left of sphere
|
|
innerLeftArcX #calc "-1.0*$sphereRadius";
|
|
innerLeftArcY #calc "$sphereCentreHeight";
|
|
innerLeftArcZPos #calc "-1.0*$tanAlpha*$innerLeftArcX";
|
|
innerLeftArcZNeg #calc "-1.0*$innerLeftArcZPos";
|
|
|
|
outerLeftArcX #calc "-1.0*(1.0 + $sphereLayerThickness)*$sphereRadius";
|
|
outerLeftArcZPos #calc "-1.0*$tanAlpha*$outerLeftArcX";
|
|
outerLeftArcZNeg #calc "-1.0*$outerLeftArcZPos";
|
|
|
|
|
|
|
|
vertices
|
|
(
|
|
// Lower moving block
|
|
($axisLevel $bottomLevel 0) // 0
|
|
($axisLevel $bottomBlockTopHeight 0) // 1
|
|
($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 2
|
|
($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 3
|
|
($AMIBlockPosition $bottomBlockTopHeight $AMIBlockNegDepth) // 4
|
|
($AMIBlockPosition $bottomBlockTopHeight $AMIBlockPosDepth) // 5
|
|
|
|
// Upper moving block
|
|
($AMIBlockPosition $topBlockBottomHeight $AMIBlockPosDepth) // 6
|
|
($AMIBlockPosition $topBlockBottomHeight $AMIBlockNegDepth) // 7
|
|
($axisLevel $topBlockBottomHeight 0) // 8
|
|
($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 9
|
|
($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 10
|
|
($axisLevel $topLevel 0) // 11
|
|
|
|
// Farfield block
|
|
($farFieldWall $bottomLevel $farFieldPosDepth) // 12
|
|
($AMIBlockPosition $bottomLevel $AMIBlockPosDepth) // 13
|
|
($AMIBlockPosition $topLevel $AMIBlockPosDepth) // 14
|
|
($farFieldWall $topLevel $farFieldPosDepth) // 15
|
|
|
|
($farFieldWall $bottomLevel $farFieldNegDepth) // 16
|
|
($AMIBlockPosition $bottomLevel $AMIBlockNegDepth) // 17
|
|
($AMIBlockPosition $topLevel $AMIBlockNegDepth) // 18
|
|
($farFieldWall $topLevel $farFieldNegDepth) // 19
|
|
|
|
// Sphere block
|
|
($axisLevel $bottomSphere 0) // 20
|
|
($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZPos) // 21
|
|
($innerBottomLayerX $innerBottomLayerY $innerBottomLayerZNeg) // 22
|
|
($axisLevel $bottomSphereLayer 0) // 23
|
|
($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZPos) // 24
|
|
($outerBottomLayerX $outerBottomLayerY $outerBottomLayerZNeg) // 25
|
|
|
|
($axisLevel $topSphere 0) // 26
|
|
($axisLevel $topSphereLayer 0) // 27
|
|
($innerTopLayerX $innerTopLayerY $innerTopLayerZNeg) // 28
|
|
($outerTopLayerX $outerTopLayerY $outerTopLayerZNeg) // 29
|
|
($innerTopLayerX $innerTopLayerY $innerTopLayerZPos) // 30
|
|
($outerTopLayerX $outerTopLayerY $outerTopLayerZPos) // 31
|
|
);
|
|
|
|
edgeNumber 1; // 0.707;
|
|
|
|
layerGrading 0.5;
|
|
invLayerGrading #calc "1.0/$layerGrading";
|
|
blockGrading 0.3;
|
|
invBlockGrading #calc "1.0/$blockGrading";
|
|
|
|
blocks
|
|
(
|
|
hex (16 17 18 19 12 13 14 15) farField (25 100 1) simplegrading (1 1 1)
|
|
|
|
hex (3 0 1 4 2 0 1 5) bottomBlock (10 50 1) simplegrading ($edgeNumber 1 1)
|
|
|
|
hex (7 8 11 10 6 8 11 9) topBlock (10 35 1) simplegrading ($edgeNumber 1 1)
|
|
|
|
hex (25 23 20 22 24 23 20 21)
|
|
centralBlock (10 20 1)
|
|
edgeGrading
|
|
(
|
|
1 1 1 1
|
|
$layerGrading $layerGrading $layerGrading $layerGrading
|
|
1 1 1 1
|
|
) // bottom layer
|
|
|
|
hex (25 22 28 29 24 21 30 31)
|
|
centralBlock (20 20 1)
|
|
edgeGrading
|
|
(
|
|
$layerGrading $layerGrading $layerGrading $layerGrading
|
|
1 1 1 1
|
|
1 1 1 1
|
|
) // middle layer
|
|
|
|
hex (28 26 27 29 30 26 27 31)
|
|
centralBlock (10 20 1)
|
|
edgeGrading
|
|
(
|
|
1 1 1 1
|
|
$invLayerGrading $invLayerGrading $invLayerGrading $invLayerGrading
|
|
1 1 1 1
|
|
) // top layer
|
|
|
|
hex (4 1 23 25 5 1 23 24)
|
|
centralBlock (10 10 1)
|
|
edgeGrading
|
|
(
|
|
$edgeNumber 1 1 $edgeNumber
|
|
$blockGrading $edgeNumber $edgeNumber $blockGrading
|
|
1 $edgeNumber $edgeNumber 1
|
|
) // bottom
|
|
|
|
hex (4 25 29 7 5 24 31 6)
|
|
centralBlock (10 20 1)
|
|
edgeGrading
|
|
(
|
|
$blockGrading $blockGrading $blockGrading $blockGrading
|
|
1 1 1 1
|
|
1 1 1 1
|
|
) // middle
|
|
|
|
hex (29 27 8 7 31 27 8 6)
|
|
centralBlock (10 10 1)
|
|
edgeGrading
|
|
(
|
|
1 $edgeNumber $edgeNumber 1
|
|
$invBlockGrading $invBlockGrading $invBlockGrading $invBlockGrading
|
|
1 1 1 1
|
|
) // top
|
|
);
|
|
|
|
edges
|
|
(
|
|
// Layer block below sphere
|
|
arc 20 22 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Pos)
|
|
arc 20 21 ($innerBottomArcX1 $innerBottomArcY1 $innerBottomArcZ1Neg)
|
|
arc 23 25 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Pos)
|
|
arc 23 24 ($outerBottomArcX1 $outerBottomArcY1 $outerBottomArcZ1Neg)
|
|
|
|
// Layer block above sphere
|
|
arc 26 28 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Pos)
|
|
arc 26 30 ($innerTopArcX1 $innerTopArcY1 $innerTopArcZ1Neg)
|
|
arc 27 29 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Pos)
|
|
arc 27 31 ($outerTopArcX1 $outerTopArcY1 $outerTopArcZ1Neg)
|
|
|
|
// Layer block left of sphere
|
|
arc 22 28 ($innerLeftArcX $innerLeftArcY $innerLeftArcZNeg)
|
|
arc 21 30 ($innerLeftArcX $innerLeftArcY $innerLeftArcZPos)
|
|
arc 24 31 ($outerLeftArcX $innerLeftArcY $outerLeftArcZPos)
|
|
arc 25 29 ($outerLeftArcX $innerLeftArcY $outerLeftArcZNeg)
|
|
);
|
|
|
|
boundary
|
|
(
|
|
front
|
|
{
|
|
type wedge;
|
|
faces
|
|
(
|
|
(0 1 5 2)
|
|
(5 1 23 24)
|
|
(23 20 21 24)
|
|
(24 21 30 31)
|
|
(5 24 31 6)
|
|
(31 27 8 6)
|
|
(6 8 11 9)
|
|
(31 30 26 27)
|
|
(12 13 14 15)
|
|
);
|
|
}
|
|
back
|
|
{
|
|
type wedge;
|
|
faces
|
|
(
|
|
(0 3 4 1)
|
|
(1 4 25 23)
|
|
(4 7 29 25)
|
|
(23 25 22 20)
|
|
(25 29 28 22)
|
|
(29 7 8 27)
|
|
(28 29 27 26)
|
|
(7 10 11 8)
|
|
(16 17 18 19)
|
|
);
|
|
}
|
|
innerAMI
|
|
{
|
|
type cyclicAMI;
|
|
neighbourPatch outerAMI;
|
|
faces
|
|
(
|
|
(4 5 6 7)
|
|
(6 9 10 7)
|
|
(2 5 4 3)
|
|
);
|
|
transform noOrdering;
|
|
}
|
|
outerAMI
|
|
{
|
|
type cyclicAMI;
|
|
neighbourPatch innerAMI;
|
|
faces
|
|
(
|
|
(14 13 17 18)
|
|
);
|
|
transform noOrdering;
|
|
}
|
|
top
|
|
{
|
|
type wall;
|
|
faces
|
|
(
|
|
(15 14 18 19)
|
|
(9 11 11 10)
|
|
);
|
|
}
|
|
bottom
|
|
{
|
|
type wall;
|
|
faces
|
|
(
|
|
(12 16 17 13)
|
|
(0 2 3 0)
|
|
);
|
|
}
|
|
farFieldWall
|
|
{
|
|
type wall;
|
|
faces
|
|
(
|
|
(12 15 19 16)
|
|
);
|
|
}
|
|
sphere
|
|
{
|
|
type wall;
|
|
faces
|
|
(
|
|
(20 22 21 20)
|
|
(21 22 28 30)
|
|
(30 26 26 28)
|
|
);
|
|
}
|
|
);
|
|
|
|
mergePatchPairs
|
|
(
|
|
);
|
|
|
|
|
|
// ************************************************************************* //
|