- can specify rotations that are not "axes" in a compact form: transform { origin (0 0 0); rotation none; } transform { origin (0 0 0); rotation axisAngle; axis (0 0 1); angle 45; } An expanded dictionary form also remains possible: transform { origin (0 0 0); rotation { type axisAngle; axis (0 0 1); angle 45; } } STYLE: verbose deprecation for "coordinateRotation" keyword - the "coordinateRotation" keyword was replaced by the "rotation" keyword (OpenFOAM-v1812 and later) but was handled silently. Now elevated to non-silent. STYLE: alias lookups "axesRotation", "EulerRotation", "STARCDRotation" - these warn and report the equivalent short form, which aids in upgrading. Previously had silent lookups.
127 lines
3.2 KiB
C++
127 lines
3.2 KiB
C++
/*--------------------------------*- C++ -*----------------------------------*\
|
|
| ========= | |
|
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
| \\ / O peration | Version: v2206 |
|
|
| \\ / A nd | Website: www.openfoam.com |
|
|
| \\/ M anipulation | |
|
|
\*---------------------------------------------------------------------------*/
|
|
FoamFile
|
|
{
|
|
version 2.0;
|
|
format ascii;
|
|
class dictionary;
|
|
object blockMeshDict;
|
|
}
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
// block definition for a porosity with an angled inlet/outlet
|
|
// the porosity is not aligned with the main axes
|
|
|
|
scale 0.001;
|
|
|
|
transform
|
|
{
|
|
origin (0 0 0);
|
|
rotation axisAngle;
|
|
axis (0 0 1);
|
|
angle 45;
|
|
}
|
|
|
|
// Geometric parameters
|
|
lenInlet 150;
|
|
lenPoro 100;
|
|
lenOutlet 100;
|
|
h2 25; // Channel half-height (in y)
|
|
w2 25; // Channel half-height (in z)
|
|
bendAngle 135; // Bend: inclusive angle [approx 120..240 deg]
|
|
|
|
// Divisions
|
|
cellWidth 5;
|
|
nInlet #eval #{ round($lenInlet / $cellWidth) #};
|
|
nPoro #eval #{ round($lenPoro / $cellWidth) #};
|
|
nOutlet #eval #{ round($lenOutlet / $cellWidth) #};
|
|
nHeight #eval #{ round(4 * $h2 / $cellWidth) #}; // finer in cross direction
|
|
nWidth #eval #{ round(4 * $w2 / $cellWidth) #}; // finer in cross direction
|
|
|
|
|
|
// Calculations:
|
|
cosBend #eval #{ cos(degToRad($bendAngle)) #};
|
|
sinBend #eval #{ sin(degToRad($bendAngle)) #};
|
|
|
|
// Ensure inlet walls remain parallel
|
|
shrink #eval #{ sin(mag(degToRad($bendAngle - 90))) #};
|
|
|
|
x0 #eval #{ ($lenInlet)*$cosBend - ($h2 * $shrink) * $sinBend #};
|
|
x1 #eval #{ ($lenInlet)*$cosBend - (-$h2 * $shrink) * $sinBend #};
|
|
y0 #eval #{ ($lenInlet)*$sinBend + ($h2 * $shrink) * $cosBend #};
|
|
y1 #eval #{ ($lenInlet)*$sinBend + (-$h2 * $shrink) * $cosBend #};
|
|
|
|
xOutlet #eval #{ $lenPoro + $lenOutlet #};
|
|
|
|
vertices
|
|
(
|
|
// inlet region
|
|
( $x0 $y0 -$w2 )
|
|
( 0 -$h2 -$w2 )
|
|
( 0 $h2 -$w2 )
|
|
( $x1 $y1 -$w2 )
|
|
|
|
( $x0 $y0 $w2 )
|
|
( 0 -$h2 $w2 )
|
|
( 0 $h2 $w2 )
|
|
( $x1 $y1 $w2 )
|
|
|
|
// End of porosity
|
|
( $lenPoro -$h2 -$w2 )
|
|
( $lenPoro $h2 -$w2 )
|
|
( $lenPoro -$h2 $w2 )
|
|
( $lenPoro $h2 $w2 )
|
|
|
|
// End of outlet
|
|
( $xOutlet -$h2 -$w2 )
|
|
( $xOutlet $h2 -$w2 )
|
|
( $xOutlet -$h2 $w2 )
|
|
( $xOutlet $h2 $w2 )
|
|
);
|
|
|
|
blocks
|
|
(
|
|
hex (0 1 2 3 4 5 6 7) inlet
|
|
($nInlet $nHeight $nWidth) grading (1 1 1)
|
|
|
|
hex (1 8 9 2 5 10 11 6) porosity
|
|
($nPoro $nHeight $nWidth) grading (1 1 1)
|
|
|
|
hex (8 12 13 9 10 14 15 11) outlet
|
|
($nPoro $nHeight $nWidth) grading (1 1 1)
|
|
);
|
|
|
|
boundary
|
|
(
|
|
inlet
|
|
{
|
|
type patch;
|
|
faces ( (0 0) );
|
|
}
|
|
|
|
outlet
|
|
{
|
|
type patch;
|
|
faces ( (2 1) );
|
|
}
|
|
|
|
porosityWall
|
|
{
|
|
type wall;
|
|
faces ( (1 2) (1 3) (1 4) (1 5) );
|
|
}
|
|
);
|
|
|
|
// The defaultFaces == outside "walls"
|
|
defaultPatch
|
|
{
|
|
type wall;
|
|
name walls;
|
|
}
|
|
|
|
// ************************************************************************* //
|