mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-blockMesh-edges' into 'develop'
Feature block mesh edges See merge request Development/openfoam!383
This commit is contained in:
@ -1,87 +1 @@
|
|||||||
// Set any cellZones
|
#warning File removed - left for old dependency check only
|
||||||
// Note cell labelling unaffected by previous mergePatchPairs
|
|
||||||
|
|
||||||
{
|
|
||||||
const label nZones = blocks.numZonedBlocks();
|
|
||||||
if (nZones)
|
|
||||||
{
|
|
||||||
Info<< nl << "Adding cell zones" << endl;
|
|
||||||
|
|
||||||
// Map from zoneName to cellZone index
|
|
||||||
HashTable<label> zoneMap(nZones);
|
|
||||||
|
|
||||||
// Cells per zone.
|
|
||||||
List<DynamicList<label>> zoneCells(nZones);
|
|
||||||
|
|
||||||
// Running cell counter
|
|
||||||
label celli = 0;
|
|
||||||
|
|
||||||
// Largest zone so far
|
|
||||||
label freeZoneI = 0;
|
|
||||||
|
|
||||||
for (const block& b : blocks)
|
|
||||||
{
|
|
||||||
const word& zoneName = b.zoneName();
|
|
||||||
const label nCellsInBlock = b.cells().size();
|
|
||||||
|
|
||||||
if (zoneName.size())
|
|
||||||
{
|
|
||||||
const auto iter = zoneMap.cfind(zoneName);
|
|
||||||
|
|
||||||
label zonei;
|
|
||||||
|
|
||||||
if (iter.found())
|
|
||||||
{
|
|
||||||
zonei = *iter;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
zonei = freeZoneI++;
|
|
||||||
|
|
||||||
Info<< " " << zonei << '\t' << zoneName << endl;
|
|
||||||
|
|
||||||
zoneMap.insert(zoneName, zonei);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Fill with cell ids
|
|
||||||
|
|
||||||
zoneCells[zonei].reserve
|
|
||||||
(
|
|
||||||
zoneCells[zonei].size() + nCellsInBlock
|
|
||||||
);
|
|
||||||
|
|
||||||
const label endOfFill = celli + nCellsInBlock;
|
|
||||||
|
|
||||||
for (; celli < endOfFill; ++celli)
|
|
||||||
{
|
|
||||||
zoneCells[zonei].append(celli);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
celli += nCellsInBlock;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<cellZone*> cz(zoneMap.size());
|
|
||||||
forAllConstIters(zoneMap, iter)
|
|
||||||
{
|
|
||||||
const word& zoneName = iter.key();
|
|
||||||
const label zonei = iter.val();
|
|
||||||
|
|
||||||
cz[zonei] = new cellZone
|
|
||||||
(
|
|
||||||
zoneName,
|
|
||||||
zoneCells[zonei].shrink(),
|
|
||||||
zonei,
|
|
||||||
mesh.cellZones()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
mesh.pointZones().resize(0);
|
|
||||||
mesh.faceZones().resize(0);
|
|
||||||
mesh.cellZones().resize(0);
|
|
||||||
mesh.addZones(List<pointZone*>(), List<faceZone*>(), cz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -77,7 +77,6 @@ Usage
|
|||||||
#include "foamVtkInternalMeshWriter.H"
|
#include "foamVtkInternalMeshWriter.H"
|
||||||
#include "attachPolyTopoChanger.H"
|
#include "attachPolyTopoChanger.H"
|
||||||
#include "polyTopoChange.H"
|
#include "polyTopoChange.H"
|
||||||
#include "emptyPolyPatch.H"
|
|
||||||
#include "cyclicPolyPatch.H"
|
#include "cyclicPolyPatch.H"
|
||||||
#include "cellSet.H"
|
#include "cellSet.H"
|
||||||
|
|
||||||
@ -85,7 +84,7 @@ Usage
|
|||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
|
|
||||||
#include "Pair.H"
|
#include "wordPair.H"
|
||||||
#include "slidingInterface.H"
|
#include "slidingInterface.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -122,7 +121,8 @@ int main(int argc, char *argv[])
|
|||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"write-obj",
|
"write-obj",
|
||||||
"Write block edges and centres as obj files and exit"
|
"Write block edges and centres as obj files and exit",
|
||||||
|
true // (old) mark as advanced option. -write-vtk is preferred
|
||||||
);
|
);
|
||||||
argList::addOptionCompat("write-obj", {"blockTopology", 1912});
|
argList::addOptionCompat("write-obj", {"blockTopology", 1912});
|
||||||
|
|
||||||
@ -135,9 +135,9 @@ int main(int argc, char *argv[])
|
|||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"merge-points",
|
"merge-points",
|
||||||
"Geometric (point) merging instead of topological merging "
|
"Geometric point merging instead of topological merging"
|
||||||
"(slower, fails with high-aspect cells. default for 1912 and earlier)",
|
" [default for 1912 and earlier]."
|
||||||
true // mark as an advanced option
|
// NOTE: " Slower, fails with high-aspect cells."
|
||||||
);
|
);
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
@ -164,6 +164,9 @@ int main(int argc, char *argv[])
|
|||||||
// Remove old files, unless disabled
|
// Remove old files, unless disabled
|
||||||
const bool removeOldFiles = !args.found("noClean");
|
const bool removeOldFiles = !args.found("noClean");
|
||||||
|
|
||||||
|
// Write cellSets
|
||||||
|
const bool writeCellSets = args.found("sets");
|
||||||
|
|
||||||
// Default merge (topology), unless otherwise specified
|
// Default merge (topology), unless otherwise specified
|
||||||
blockMesh::mergeStrategy strategy(blockMesh::DEFAULT_MERGE);
|
blockMesh::mergeStrategy strategy(blockMesh::DEFAULT_MERGE);
|
||||||
|
|
||||||
@ -329,56 +332,22 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Info<< nl << "Creating polyMesh from blockMesh" << endl;
|
// Ensure we get information messages, even if turned off in dictionary
|
||||||
|
blocks.verbose(true);
|
||||||
|
|
||||||
polyMesh mesh
|
autoPtr<polyMesh> meshPtr =
|
||||||
(
|
blocks.mesh
|
||||||
IOobject
|
|
||||||
(
|
(
|
||||||
regionName,
|
IOobject(regionName, meshInstance, runTime)
|
||||||
meshInstance,
|
);
|
||||||
runTime
|
|
||||||
),
|
|
||||||
pointField(blocks.points()), // Copy, could we re-use space?
|
|
||||||
blocks.cells(),
|
|
||||||
blocks.patches(),
|
|
||||||
blocks.patchNames(),
|
|
||||||
blocks.patchDicts(),
|
|
||||||
"defaultFaces", // Default patch name
|
|
||||||
emptyPolyPatch::typeName // Default patch type
|
|
||||||
);
|
|
||||||
|
|
||||||
|
polyMesh& mesh = *meshPtr;
|
||||||
|
|
||||||
// Handle merging of patch pairs. Dictionary entry "mergePatchPairs"
|
// Merge patch pairs (dictionary entry "mergePatchPairs")
|
||||||
#include "mergePatchPairs.H"
|
#include "mergePatchPairs.H"
|
||||||
|
|
||||||
// Set any cellZones
|
// Handle cyclic patches
|
||||||
#include "addCellZones.H"
|
#include "handleCyclicPatches.H"
|
||||||
|
|
||||||
|
|
||||||
// Detect any cyclic patches and force re-ordering of the faces
|
|
||||||
{
|
|
||||||
bool hasCyclic = false;
|
|
||||||
for (const polyPatch& pp : mesh.boundaryMesh())
|
|
||||||
{
|
|
||||||
if (isA<cyclicPolyPatch>(pp))
|
|
||||||
{
|
|
||||||
hasCyclic = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasCyclic)
|
|
||||||
{
|
|
||||||
Info<< nl << "Detected cyclic patches; ordering boundary faces"
|
|
||||||
<< endl;
|
|
||||||
const word oldInstance = mesh.instance();
|
|
||||||
polyTopoChange meshMod(mesh);
|
|
||||||
meshMod.changeMesh(mesh, false);
|
|
||||||
mesh.setInstance(oldInstance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Set the precision of the points data to 10
|
// Set the precision of the points data to 10
|
||||||
IOstream::defaultPrecision(max(10u, IOstream::defaultPrecision()));
|
IOstream::defaultPrecision(max(10u, IOstream::defaultPrecision()));
|
||||||
@ -386,7 +355,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< nl << "Writing polyMesh with "
|
Info<< nl << "Writing polyMesh with "
|
||||||
<< mesh.cellZones().size() << " cellZones";
|
<< mesh.cellZones().size() << " cellZones";
|
||||||
|
|
||||||
if (args.found("sets") && !mesh.cellZones().empty())
|
if (writeCellSets && !mesh.cellZones().empty())
|
||||||
{
|
{
|
||||||
Info<< " (written as cellSets too)";
|
Info<< " (written as cellSets too)";
|
||||||
}
|
}
|
||||||
@ -400,7 +369,7 @@ int main(int argc, char *argv[])
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.found("sets"))
|
if (writeCellSets)
|
||||||
{
|
{
|
||||||
for (const cellZone& cz : mesh.cellZones())
|
for (const cellZone& cz : mesh.cellZones())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,22 @@
|
|||||||
|
// Detect any cyclic patches and force re-ordering of the faces
|
||||||
|
{
|
||||||
|
bool hasCyclic = false;
|
||||||
|
for (const polyPatch& pp : mesh.boundaryMesh())
|
||||||
|
{
|
||||||
|
if (isA<cyclicPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
hasCyclic = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasCyclic)
|
||||||
|
{
|
||||||
|
Info<< nl << "Detected cyclic patches; ordering boundary faces" << endl;
|
||||||
|
|
||||||
|
const word oldInstance = mesh.instance();
|
||||||
|
polyTopoChange meshMod(mesh);
|
||||||
|
meshMod.changeMesh(mesh, false);
|
||||||
|
mesh.setInstance(oldInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
// Handle merging of patch pairs
|
// Handle merging of patch pairs
|
||||||
{
|
{
|
||||||
List<Pair<word>> mergePatchPairs;
|
wordPairList mergePatchPairs;
|
||||||
|
|
||||||
// Read in a list of dictionaries for the merge patch pairs
|
// Read in a list of dictionaries for the merge patch pairs
|
||||||
if
|
if
|
||||||
@ -14,19 +14,19 @@
|
|||||||
// Create and add point and face zones and mesh modifiers
|
// Create and add point and face zones and mesh modifiers
|
||||||
List<pointZone*> pz(mergePatchPairs.size());
|
List<pointZone*> pz(mergePatchPairs.size());
|
||||||
List<faceZone*> fz(3*mergePatchPairs.size());
|
List<faceZone*> fz(3*mergePatchPairs.size());
|
||||||
List<cellZone*> cz(0);
|
List<cellZone*> cz;
|
||||||
|
|
||||||
forAll(mergePatchPairs, pairI)
|
forAll(mergePatchPairs, pairi)
|
||||||
{
|
{
|
||||||
const word mergeName
|
const word mergeName
|
||||||
(
|
(
|
||||||
mergePatchPairs[pairI].first()
|
mergePatchPairs[pairi].first()
|
||||||
+ mergePatchPairs[pairI].second()
|
+ mergePatchPairs[pairi].second()
|
||||||
+ name(pairI)
|
+ name(pairi)
|
||||||
);
|
);
|
||||||
|
|
||||||
// An empty zone for cut points
|
// An empty zone for cut points
|
||||||
pz[pairI] = new pointZone
|
pz[pairi] = new pointZone
|
||||||
(
|
(
|
||||||
mergeName + "CutPointZone",
|
mergeName + "CutPointZone",
|
||||||
0,
|
0,
|
||||||
@ -34,11 +34,11 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Master patch
|
// Master patch
|
||||||
const word masterPatchName(mergePatchPairs[pairI].first());
|
const word masterPatchName(mergePatchPairs[pairi].first());
|
||||||
const polyPatch& masterPatch =
|
const polyPatch& masterPatch =
|
||||||
mesh.boundaryMesh()[masterPatchName];
|
mesh.boundaryMesh()[masterPatchName];
|
||||||
|
|
||||||
fz[3*pairI] = new faceZone
|
fz[3*pairi] = new faceZone
|
||||||
(
|
(
|
||||||
mergeName + "MasterZone",
|
mergeName + "MasterZone",
|
||||||
identity(masterPatch.size(), masterPatch.start()),
|
identity(masterPatch.size(), masterPatch.start()),
|
||||||
@ -48,11 +48,11 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Slave patch
|
// Slave patch
|
||||||
const word slavePatchName(mergePatchPairs[pairI].second());
|
const word slavePatchName(mergePatchPairs[pairi].second());
|
||||||
const polyPatch& slavePatch =
|
const polyPatch& slavePatch =
|
||||||
mesh.boundaryMesh()[slavePatchName];
|
mesh.boundaryMesh()[slavePatchName];
|
||||||
|
|
||||||
fz[3*pairI + 1] = new faceZone
|
fz[3*pairi + 1] = new faceZone
|
||||||
(
|
(
|
||||||
mergeName + "SlaveZone",
|
mergeName + "SlaveZone",
|
||||||
identity(slavePatch.size(), slavePatch.start()),
|
identity(slavePatch.size(), slavePatch.start()),
|
||||||
@ -62,7 +62,7 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
// An empty zone for cut faces
|
// An empty zone for cut faces
|
||||||
fz[3*pairI + 2] = new faceZone
|
fz[3*pairi + 2] = new faceZone
|
||||||
(
|
(
|
||||||
mergeName + "CutFaceZone",
|
mergeName + "CutFaceZone",
|
||||||
2,
|
2,
|
||||||
@ -78,30 +78,30 @@
|
|||||||
attachPolyTopoChanger polyMeshAttacher(mesh);
|
attachPolyTopoChanger polyMeshAttacher(mesh);
|
||||||
polyMeshAttacher.setSize(mergePatchPairs.size());
|
polyMeshAttacher.setSize(mergePatchPairs.size());
|
||||||
|
|
||||||
forAll(mergePatchPairs, pairI)
|
forAll(mergePatchPairs, pairi)
|
||||||
{
|
{
|
||||||
const word mergeName
|
const word mergeName
|
||||||
(
|
(
|
||||||
mergePatchPairs[pairI].first()
|
mergePatchPairs[pairi].first()
|
||||||
+ mergePatchPairs[pairI].second()
|
+ mergePatchPairs[pairi].second()
|
||||||
+ name(pairI)
|
+ name(pairi)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Add the sliding interface mesh modifier
|
// Add the sliding interface mesh modifier
|
||||||
polyMeshAttacher.set
|
polyMeshAttacher.set
|
||||||
(
|
(
|
||||||
pairI,
|
pairi,
|
||||||
new slidingInterface
|
new slidingInterface
|
||||||
(
|
(
|
||||||
"couple" + name(pairI),
|
"couple" + name(pairi),
|
||||||
pairI,
|
pairi,
|
||||||
polyMeshAttacher,
|
polyMeshAttacher,
|
||||||
mergeName + "MasterZone",
|
mergeName + "MasterZone",
|
||||||
mergeName + "SlaveZone",
|
mergeName + "SlaveZone",
|
||||||
mergeName + "CutPointZone",
|
mergeName + "CutPointZone",
|
||||||
mergeName + "CutFaceZone",
|
mergeName + "CutFaceZone",
|
||||||
mergePatchPairs[pairI].first(),
|
mergePatchPairs[pairi].first(),
|
||||||
mergePatchPairs[pairI].second(),
|
mergePatchPairs[pairi].second(),
|
||||||
slidingInterface::INTEGRAL, // always integral
|
slidingInterface::INTEGRAL, // always integral
|
||||||
false,
|
false,
|
||||||
intersection::VISIBLE
|
intersection::VISIBLE
|
||||||
|
|||||||
@ -134,7 +134,7 @@ Foam::point Foam::BSpline::position
|
|||||||
Foam::scalar Foam::BSpline::length() const
|
Foam::scalar Foam::BSpline::length() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return 1.0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -77,21 +78,12 @@ class BSpline
|
|||||||
:
|
:
|
||||||
public polyLine
|
public polyLine
|
||||||
{
|
{
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- No copy construct
|
|
||||||
BSpline(const BSpline&) = delete;
|
|
||||||
|
|
||||||
//- No copy assignment
|
|
||||||
void operator=(const BSpline&) = delete;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
BSpline
|
explicit BSpline
|
||||||
(
|
(
|
||||||
const pointField& knots,
|
const pointField& knots,
|
||||||
const bool notImplementedClosed = false
|
const bool notImplementedClosed = false
|
||||||
@ -100,15 +92,16 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the global curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
point position(const scalar lambda) const;
|
point position(const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the point position corresponding to the local parameter
|
//- The point position corresponding to the local lambda (0-1)
|
||||||
// 0 <= lambda <= 1 on the given segment
|
//- on the given segment
|
||||||
point position(const label segment, const scalar lambda) const;
|
point position(const label segment, const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
|
// \note NotImplemented
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2014-2016 OpenFOAM Foundation
|
Copyright (C) 2014-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -27,9 +27,9 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "BSplineEdge.H"
|
#include "BSplineEdge.H"
|
||||||
|
#include "polyLine.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
@ -59,7 +59,10 @@ Foam::blockEdges::BSplineEdge::BSplineEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(points, start, end),
|
blockEdge(points, start, end),
|
||||||
BSpline(appendEndPoints(points, start, end, internalPoints))
|
BSpline
|
||||||
|
(
|
||||||
|
polyLine::concat(points[start_], internalPoints, points[end_])
|
||||||
|
)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -73,13 +76,16 @@ Foam::blockEdges::BSplineEdge::BSplineEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(dict, index, points, is),
|
blockEdge(dict, index, points, is),
|
||||||
BSpline(appendEndPoints(points, start_, end_, pointField(is)))
|
BSpline
|
||||||
|
(
|
||||||
|
polyLine::concat(points[start_], pointField(is), points[end_])
|
||||||
|
)
|
||||||
{
|
{
|
||||||
token t(is);
|
token tok(is);
|
||||||
is.putBack(t);
|
is.putBack(tok);
|
||||||
|
|
||||||
// discard unused start/end tangents
|
// Discard unused start/end tangents
|
||||||
if (t == token::BEGIN_LIST)
|
if (tok == token::BEGIN_LIST)
|
||||||
{
|
{
|
||||||
vector tangent0Ignored(is);
|
vector tangent0Ignored(is);
|
||||||
vector tangent1Ignored(is);
|
vector tangent1Ignored(is);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2014-2016 OpenFOAM Foundation
|
Copyright (C) 2014-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -77,20 +77,20 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
BSplineEdge
|
BSplineEdge
|
||||||
(
|
(
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end,
|
const label end, //!< End point in referenced point field
|
||||||
const pointField& internalPoints
|
const pointField& internalPoints
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream, setting pointsList
|
//- Construct from Istream and point field.
|
||||||
BSplineEdge
|
BSplineEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream&
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -100,11 +100,12 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual point position(const scalar) const;
|
virtual point position(const scalar) const;
|
||||||
|
|
||||||
//- Return the length of the spline curve (not implemented)
|
//- The length of the spline curve
|
||||||
|
// \note NotImplemented
|
||||||
virtual scalar length() const;
|
virtual scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -43,10 +44,15 @@ namespace blockEdges
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::coordSystem::cylindrical Foam::blockEdges::arcEdge::calcAngle()
|
void Foam::blockEdges::arcEdge::calcFromMidPoint
|
||||||
|
(
|
||||||
|
const point& p1,
|
||||||
|
const point& p3,
|
||||||
|
const point& p2
|
||||||
|
)
|
||||||
{
|
{
|
||||||
const vector a = p2_ - p1_;
|
const vector a = p2 - p1;
|
||||||
const vector b = p3_ - p1_;
|
const vector b = p3 - p1;
|
||||||
|
|
||||||
// Find centre of arcEdge
|
// Find centre of arcEdge
|
||||||
const scalar asqr = a & a;
|
const scalar asqr = a & a;
|
||||||
@ -55,7 +61,7 @@ Foam::coordSystem::cylindrical Foam::blockEdges::arcEdge::calcAngle()
|
|||||||
|
|
||||||
const scalar denom = asqr*bsqr - adotb*adotb;
|
const scalar denom = asqr*bsqr - adotb*adotb;
|
||||||
|
|
||||||
if (mag(denom) < VSMALL)
|
if (mag(denom) < ROOTVSMALL)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< denom
|
<< denom
|
||||||
@ -64,44 +70,120 @@ Foam::coordSystem::cylindrical Foam::blockEdges::arcEdge::calcAngle()
|
|||||||
|
|
||||||
const scalar fact = 0.5*(bsqr - adotb)/denom;
|
const scalar fact = 0.5*(bsqr - adotb)/denom;
|
||||||
|
|
||||||
point centre = 0.5*a + fact*((a ^ b) ^ a);
|
const point centre = p1 + 0.5*a + fact*((a ^ b) ^ a);
|
||||||
|
|
||||||
centre += p1_;
|
// Position vectors from centre
|
||||||
|
const vector r1(p1 - centre);
|
||||||
|
const vector r2(p2 - centre);
|
||||||
|
const vector r3(p3 - centre);
|
||||||
|
|
||||||
// Find position vectors w.r.t. the arcEdge centre
|
const scalar mag1(mag(r1));
|
||||||
const vector r1(p1_ - centre);
|
const scalar mag3(mag(r3));
|
||||||
const vector r2(p2_ - centre);
|
|
||||||
const vector r3(p3_ - centre);
|
|
||||||
|
|
||||||
// Find angle (in degrees)
|
vector arcAxis(r1 ^ r3);
|
||||||
angle_ = radToDeg(acos((r3 & r1)/(mag(r3) * mag(r1))));
|
|
||||||
|
// The radius from r1 and from r3 will be identical
|
||||||
|
radius_ = mag(r3);
|
||||||
|
|
||||||
|
|
||||||
|
// Determine the angle
|
||||||
|
angle_ = acos((r1 & r3)/(mag1*mag3));
|
||||||
|
|
||||||
// Check if the vectors define an exterior or an interior arcEdge
|
// Check if the vectors define an exterior or an interior arcEdge
|
||||||
if (((r1 ^ r2) & (r1 ^ r3)) < 0.0)
|
if (((r1 ^ r2) & (r1 ^ r3)) < 0.0)
|
||||||
{
|
{
|
||||||
angle_ = 360.0 - angle_;
|
angle_ = constant::mathematical::twoPi - angle_;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector arcAxis;
|
if (angle_ <= constant::mathematical::pi)
|
||||||
|
|
||||||
if (angle_ <= 180.0)
|
|
||||||
{
|
{
|
||||||
arcAxis = r1 ^ r3;
|
if (mag(arcAxis)/(mag1*mag3) < 0.001)
|
||||||
|
|
||||||
if (mag(arcAxis)/(mag(r1)*mag(r3)) < 0.001)
|
|
||||||
{
|
{
|
||||||
arcAxis = r1 ^ r2;
|
arcAxis = r1 ^ r2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
arcAxis = r3 ^ r1;
|
arcAxis = -arcAxis;
|
||||||
}
|
}
|
||||||
|
|
||||||
radius_ = mag(r3);
|
// Corresponding local cylindrical coordinate system
|
||||||
|
cs_ = coordSystem::cylindrical(centre, arcAxis, r1);
|
||||||
|
}
|
||||||
|
|
||||||
// The corresponding local cylindrical coordinate system (radians)
|
|
||||||
return coordSystem::cylindrical("arc", centre, arcAxis, r1);
|
void Foam::blockEdges::arcEdge::calcFromCentre
|
||||||
|
(
|
||||||
|
const point& p1,
|
||||||
|
const point& p3,
|
||||||
|
const point& centre,
|
||||||
|
bool adjustCentre,
|
||||||
|
scalar rMultiplier
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Position vectors from centre
|
||||||
|
const vector r1(p1 - centre);
|
||||||
|
const vector r3(p3 - centre);
|
||||||
|
|
||||||
|
const scalar mag1(mag(r1));
|
||||||
|
const scalar mag3(mag(r3));
|
||||||
|
|
||||||
|
const vector chord(p3 - p1);
|
||||||
|
|
||||||
|
const vector arcAxis(r1 ^ r3);
|
||||||
|
|
||||||
|
// The average radius
|
||||||
|
radius_ = 0.5*(mag1 + mag3);
|
||||||
|
|
||||||
|
// The included angle
|
||||||
|
angle_ = acos((r1 & r3)/(mag1*mag3));
|
||||||
|
|
||||||
|
// TODO? check for 180 degrees (co-linear points)?
|
||||||
|
|
||||||
|
bool needsAdjust = false;
|
||||||
|
|
||||||
|
if (adjustCentre)
|
||||||
|
{
|
||||||
|
needsAdjust = !equal(mag1, mag3);
|
||||||
|
|
||||||
|
if (!equal(rMultiplier, 1))
|
||||||
|
{
|
||||||
|
// The min radius is constrained by the chord,
|
||||||
|
// otherwise bad things will happen.
|
||||||
|
|
||||||
|
needsAdjust = true;
|
||||||
|
radius_ *= rMultiplier;
|
||||||
|
radius_ = max(radius_, (1.001*0.5*mag(chord)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needsAdjust)
|
||||||
|
{
|
||||||
|
// The centre is not equidistant to p1 and p3.
|
||||||
|
// Use the chord and the arcAxis to determine the vector to
|
||||||
|
// the midpoint of the chord and adjust the centre along this
|
||||||
|
// line.
|
||||||
|
|
||||||
|
const point newCentre =
|
||||||
|
(
|
||||||
|
(0.5 * (p3 + p1)) // mid-chord point
|
||||||
|
+ sqrt(sqr(radius_) - 0.25 * magSqr(chord))
|
||||||
|
* normalised(arcAxis ^ chord) // mid-chord -> centre
|
||||||
|
);
|
||||||
|
|
||||||
|
//// Info<< nl << "Adjust centre. r1=" << mag1 << " r3=" << mag3
|
||||||
|
//// << " radius=" << radius_ << nl
|
||||||
|
//// << "angle=" << radToDeg(angle_) << ' '
|
||||||
|
//// << coordSystem::cylindrical(centre, arcAxis, r1) << nl;
|
||||||
|
|
||||||
|
// Recalculate - do attempt to readjust
|
||||||
|
calcFromCentre(p1, p3, newCentre, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Corresponding local cylindrical coordinate system
|
||||||
|
cs_ = coordSystem::cylindrical(centre, arcAxis, r1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -110,17 +192,35 @@ Foam::coordSystem::cylindrical Foam::blockEdges::arcEdge::calcAngle()
|
|||||||
Foam::blockEdges::arcEdge::arcEdge
|
Foam::blockEdges::arcEdge::arcEdge
|
||||||
(
|
(
|
||||||
const pointField& points,
|
const pointField& points,
|
||||||
|
const point& origin,
|
||||||
const label start,
|
const label start,
|
||||||
const label end,
|
const label end
|
||||||
const point& pMid
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(points, start, end),
|
blockEdge(points, start, end),
|
||||||
p1_(points_[start_]),
|
radius_(0),
|
||||||
p2_(pMid),
|
angle_(0),
|
||||||
p3_(points_[end_]),
|
cs_()
|
||||||
cs_(calcAngle())
|
{
|
||||||
{}
|
calcFromCentre(points[start_], points[end_], origin);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::blockEdges::arcEdge::arcEdge
|
||||||
|
(
|
||||||
|
const pointField& points,
|
||||||
|
const label start,
|
||||||
|
const label end,
|
||||||
|
const point& midPoint
|
||||||
|
)
|
||||||
|
:
|
||||||
|
blockEdge(points, start, end),
|
||||||
|
radius_(0),
|
||||||
|
angle_(0),
|
||||||
|
cs_()
|
||||||
|
{
|
||||||
|
calcFromMidPoint(points[start_], points[end_], midPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::blockEdges::arcEdge::arcEdge
|
Foam::blockEdges::arcEdge::arcEdge
|
||||||
@ -133,41 +233,82 @@ Foam::blockEdges::arcEdge::arcEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(dict, index, points, is),
|
blockEdge(dict, index, points, is),
|
||||||
p1_(points_[start_]),
|
radius_(0),
|
||||||
p2_(is),
|
angle_(0),
|
||||||
p3_(points_[end_]),
|
cs_()
|
||||||
cs_(calcAngle())
|
{
|
||||||
{}
|
point p;
|
||||||
|
|
||||||
|
token tok(is);
|
||||||
|
if (tok.isWord())
|
||||||
|
{
|
||||||
|
// Can be
|
||||||
|
// - origin (0 0 0)
|
||||||
|
// - origin 1.2 (0 0 0)
|
||||||
|
|
||||||
|
scalar rMultiplier = 1;
|
||||||
|
|
||||||
|
is >> tok;
|
||||||
|
if (tok.isNumber())
|
||||||
|
{
|
||||||
|
rMultiplier = tok.number();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
is.putBack(tok);
|
||||||
|
}
|
||||||
|
|
||||||
|
is >> p; // The origin (centre)
|
||||||
|
|
||||||
|
calcFromCentre(points_[start_], points_[end_], p, true, rMultiplier);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
is.putBack(tok);
|
||||||
|
|
||||||
|
is >> p; // A mid-point
|
||||||
|
|
||||||
|
calcFromMidPoint(points_[start_], points_[end_], p);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug information
|
||||||
|
#if 0
|
||||||
|
Info<< "arc " << start_ << ' ' << end_
|
||||||
|
<< ' ' << position(0.5) << ' ' << cs_
|
||||||
|
// << " radius=" << radius_ << " angle=" << radToDeg(angle_)
|
||||||
|
<< nl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::point Foam::blockEdges::arcEdge::position(const scalar lambda) const
|
Foam::point Foam::blockEdges::arcEdge::position(const scalar lambda) const
|
||||||
{
|
{
|
||||||
|
#ifdef FULLDEBUG
|
||||||
if (lambda < -SMALL || lambda > 1 + SMALL)
|
if (lambda < -SMALL || lambda > 1 + SMALL)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
WarningInFunction
|
||||||
<< "Parameter out of range, lambda = " << lambda
|
<< "Parameter out of range, lambda = " << lambda << nl;
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (lambda < SMALL)
|
if (lambda < SMALL)
|
||||||
{
|
{
|
||||||
return p1_;
|
return points_[start_];
|
||||||
}
|
}
|
||||||
else if (lambda > 1 - SMALL)
|
else if (lambda >= 1 - SMALL)
|
||||||
{
|
{
|
||||||
return p3_;
|
return points_[end_];
|
||||||
}
|
}
|
||||||
|
|
||||||
// The angle is degrees, the coordinate system in radians
|
return cs_.globalPosition(vector(radius_, (lambda*angle_), 0));
|
||||||
return cs_.globalPosition(vector(radius_, degToRad(lambda*angle_), 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::scalar Foam::blockEdges::arcEdge::length() const
|
Foam::scalar Foam::blockEdges::arcEdge::length() const noexcept
|
||||||
{
|
{
|
||||||
return degToRad(radius_*angle_);
|
return (radius_*angle_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2017 OpenCFD Ltd.
|
Copyright (C) 2017-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -28,7 +28,32 @@ Class
|
|||||||
Foam::blockEdges::arcEdge
|
Foam::blockEdges::arcEdge
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Defines the arcEdge of a circle in terms of 3 points on its circumference
|
A blockEdge defined as an arc of a circle.
|
||||||
|
|
||||||
|
The arc is normally defined by its endpoints and a point on
|
||||||
|
its circumference, typically a midpoint. For example,
|
||||||
|
\verbatim
|
||||||
|
points ((1 0 0) (0 1 0));
|
||||||
|
|
||||||
|
arc 0 1 (0.707107 0.707107 0);
|
||||||
|
\endverbatim
|
||||||
|
The arc can enclose an angle greater than 0 and less than 360 degrees.
|
||||||
|
|
||||||
|
The arc will frequently enclose an angle less than 180 degrees.
|
||||||
|
For the case, it is possible to define the arc by its endpoints and its
|
||||||
|
centre (origin) point. For example,
|
||||||
|
\verbatim
|
||||||
|
arc 0 1 origin (0 0 0);
|
||||||
|
\endverbatim
|
||||||
|
When defined in the way, any discrepancy in the arc radius for the
|
||||||
|
endpoints is resolved by adjusting the origin to ensure that the average
|
||||||
|
radius is satisfied.
|
||||||
|
|
||||||
|
It is also possible to define a \em flatness factor as a multiplier of
|
||||||
|
the calculated radius. For example,
|
||||||
|
\verbatim
|
||||||
|
arc 0 1 origin 1.1 (0 0 0);
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
arcEdge.C
|
arcEdge.C
|
||||||
@ -56,26 +81,41 @@ class arcEdge
|
|||||||
:
|
:
|
||||||
public blockEdge
|
public blockEdge
|
||||||
{
|
{
|
||||||
// Private data
|
// Private Data
|
||||||
|
|
||||||
// Begin, mid, end points
|
|
||||||
point p1_, p2_, p3_;
|
|
||||||
|
|
||||||
//- The arc angle (in degrees)
|
|
||||||
scalar angle_;
|
|
||||||
|
|
||||||
//- The arc radius
|
//- The arc radius
|
||||||
scalar radius_;
|
scalar radius_;
|
||||||
|
|
||||||
|
//- The arc angle (radians)
|
||||||
|
scalar angle_;
|
||||||
|
|
||||||
//- The local cylindrical coordinate system
|
//- The local cylindrical coordinate system
|
||||||
coordSystem::cylindrical cs_;
|
coordSystem::cylindrical cs_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Calculate the angle, radius and axis
|
//- Calculate angle, radius, cylindrical coordinate system
|
||||||
// \return the cylindrical coordinate system
|
//- from end points and the given point on the circumference
|
||||||
coordSystem::cylindrical calcAngle();
|
void calcFromMidPoint
|
||||||
|
(
|
||||||
|
const point& p1, //!< Start point
|
||||||
|
const point& p3, //!< End point
|
||||||
|
const point& p2 //!< Point on circumference
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Calculate angle, radius, cylindrical coordinate system
|
||||||
|
//- from end points and the given origin.
|
||||||
|
// Optionally adjust centre to accommodate deviations in the
|
||||||
|
// effective radius to the end-points
|
||||||
|
void calcFromCentre
|
||||||
|
(
|
||||||
|
const point& p1, //!< Start point
|
||||||
|
const point& p3, //!< End point
|
||||||
|
const point& centre, //!< Centre
|
||||||
|
bool adjustCentre = false, //!< Adjust centre
|
||||||
|
scalar rMultiplier = 1 //!< Adjust radius by this factor
|
||||||
|
);
|
||||||
|
|
||||||
//- No copy construct
|
//- No copy construct
|
||||||
arcEdge(const arcEdge&) = delete;
|
arcEdge(const arcEdge&) = delete;
|
||||||
@ -92,23 +132,34 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components, given the origin of the circle
|
||||||
arcEdge
|
arcEdge
|
||||||
(
|
(
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const point& origin, //!< The origin of the circle
|
||||||
const label end,
|
const label start, //!< Start point in referenced point field
|
||||||
const point& pMid
|
const label end //!< End point in referenced point field
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream setting pointsList
|
//- Construct from components, using a point on the circumference
|
||||||
|
arcEdge
|
||||||
|
(
|
||||||
|
const pointField& points, //!< Referenced point field
|
||||||
|
const label start, //!< Start point in referenced point field
|
||||||
|
const label end, //!< End point in referenced point field
|
||||||
|
const point& midPoint //!< A point on the circumference
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from Istream and point field.
|
||||||
|
// The Istream can specify either a point on the circumference,
|
||||||
|
// or with a tag to specify the origin.
|
||||||
arcEdge
|
arcEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry, // unsed
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream&
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -122,7 +173,7 @@ public:
|
|||||||
point position(const scalar lambda) const;
|
point position(const scalar lambda) const;
|
||||||
|
|
||||||
//- The length of the curve
|
//- The length of the curve
|
||||||
scalar length() const;
|
scalar length() const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,7 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "bezier.H"
|
#include "bezier.H"
|
||||||
|
#include "polyLine.H"
|
||||||
#include "SubList.H"
|
#include "SubList.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
@ -66,7 +67,10 @@ Foam::blockEdges::bezier::bezier
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(dict, index, points, is),
|
blockEdge(dict, index, points, is),
|
||||||
control_(appendEndPoints(points, start_, end_, pointField(is)))
|
control_
|
||||||
|
(
|
||||||
|
polyLine::concat(points[start_], pointField(is), points[end_])
|
||||||
|
)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -94,7 +98,7 @@ Foam::point Foam::blockEdges::bezier::position(const scalar lambda) const
|
|||||||
Foam::scalar Foam::blockEdges::bezier::length() const
|
Foam::scalar Foam::blockEdges::bezier::length() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return 1.0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -63,7 +63,7 @@ class bezier
|
|||||||
:
|
:
|
||||||
public blockEdge
|
public blockEdge
|
||||||
{
|
{
|
||||||
private:
|
// Private Data
|
||||||
|
|
||||||
//- Control points
|
//- Control points
|
||||||
pointField control_;
|
pointField control_;
|
||||||
@ -89,20 +89,20 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
bezier
|
bezier
|
||||||
(
|
(
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end,
|
const label end, //!< End point in referenced point field
|
||||||
const pointField& control
|
const pointField& control //!< The control points
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream
|
//- Construct from Istream and point field.
|
||||||
bezier
|
bezier
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream&
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -117,6 +117,7 @@ public:
|
|||||||
point position(const scalar lambda) const;
|
point position(const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- Return the length of the curve
|
||||||
|
// \not NotImplemented
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -28,6 +28,7 @@ License
|
|||||||
|
|
||||||
#include "blockEdge.H"
|
#include "blockEdge.H"
|
||||||
#include "blockVertex.H"
|
#include "blockVertex.H"
|
||||||
|
#include "polyLine.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -104,32 +105,22 @@ Foam::autoPtr<Foam::blockEdge> Foam::blockEdge::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::pointField Foam::blockEdge::appendEndPoints
|
Foam::pointField Foam::blockEdge::appendEndPoints
|
||||||
(
|
(
|
||||||
const pointField& points,
|
const pointField& pts,
|
||||||
const label start,
|
const label start,
|
||||||
const label end,
|
const label end,
|
||||||
const pointField& otherKnots
|
const pointField& intermediate
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
pointField allKnots(otherKnots.size() + 2);
|
return pointField(polyLine::concat(pts[start], intermediate, pts[end]));
|
||||||
|
|
||||||
// Start/end knots
|
|
||||||
allKnots[0] = points[start];
|
|
||||||
allKnots[otherKnots.size() + 1] = points[end];
|
|
||||||
|
|
||||||
// Intermediate knots
|
|
||||||
forAll(otherKnots, knotI)
|
|
||||||
{
|
|
||||||
allKnots[knotI+1] = otherKnots[knotI];
|
|
||||||
}
|
|
||||||
|
|
||||||
return allKnots;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::tmp<Foam::pointField>
|
Foam::tmp<Foam::pointField>
|
||||||
Foam::blockEdge::position(const scalarList& lambdas) const
|
Foam::blockEdge::position(const scalarList& lambdas) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -24,6 +24,12 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Namespace
|
||||||
|
Foam::blockEdges
|
||||||
|
|
||||||
|
Description
|
||||||
|
A namespace for various blockEdge types.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::blockEdge
|
Foam::blockEdge
|
||||||
|
|
||||||
@ -46,13 +52,10 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
// Forward Declarations
|
||||||
|
|
||||||
class blockEdge;
|
class blockEdge;
|
||||||
|
|
||||||
Ostream& operator<<(Ostream&, const blockEdge&);
|
Ostream& operator<<(Ostream&, const blockEdge&);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class blockEdge Declaration
|
Class blockEdge Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -61,24 +64,29 @@ class blockEdge
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Protected data
|
// Protected Data
|
||||||
|
|
||||||
|
//- The referenced point field
|
||||||
const pointField& points_;
|
const pointField& points_;
|
||||||
|
|
||||||
|
//- Index of the start point
|
||||||
const label start_;
|
const label start_;
|
||||||
|
|
||||||
|
//- Index of the end point
|
||||||
const label end_;
|
const label end_;
|
||||||
|
|
||||||
|
|
||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Return a complete point field by appending the start/end points
|
//- Return a complete point field by appending the start/end points
|
||||||
// to the given list
|
//- to the given list
|
||||||
|
// \deprecated(2020-10) use polyLine::concat
|
||||||
static pointField appendEndPoints
|
static pointField appendEndPoints
|
||||||
(
|
(
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end,
|
const label end, //!< End point in referenced point field
|
||||||
const pointField& otherKnots
|
const pointField& intermediate //!< Intermediate points (knots)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -110,18 +118,18 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
blockEdge
|
blockEdge
|
||||||
(
|
(
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end
|
const label end //!< End point in referenced point field
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream setting pointsList
|
//- Construct from Istream and point field.
|
||||||
blockEdge
|
blockEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream&
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Clone function
|
//- Clone function
|
||||||
@ -133,8 +141,8 @@ public:
|
|||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points,
|
||||||
Istream&
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Class used for the read-construction of
|
//- Class used for the read-construction of
|
||||||
@ -174,10 +182,10 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return label of start point
|
//- Index of start point
|
||||||
inline label start() const;
|
inline label start() const;
|
||||||
|
|
||||||
//- Return label of end point
|
//- Index of end point
|
||||||
inline label end() const;
|
inline label end() const;
|
||||||
|
|
||||||
//- Compare the given start and end points with this curve
|
//- Compare the given start and end points with this curve
|
||||||
@ -201,22 +209,22 @@ public:
|
|||||||
// - -1: same edge, but different orientation
|
// - -1: same edge, but different orientation
|
||||||
inline int compare(const label start, const label end) const;
|
inline int compare(const label start, const label end) const;
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual point position(const scalar) const = 0;
|
virtual point position(const scalar) const = 0;
|
||||||
|
|
||||||
//- Return the point positions corresponding to the curve parameters
|
//- The point positions corresponding to the curve parameters
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual tmp<pointField> position(const scalarList&) const;
|
virtual tmp<pointField> position(const scalarList&) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
virtual scalar length() const = 0;
|
virtual scalar length() const = 0;
|
||||||
|
|
||||||
//- Write edge with variable backsubstitution
|
//- Write edge with variable backsubstitution
|
||||||
void write(Ostream&, const dictionary&) const;
|
void write(Ostream&, const dictionary&) const;
|
||||||
|
|
||||||
|
|
||||||
// Ostream operator
|
// Ostream Operator
|
||||||
|
|
||||||
friend Ostream& operator<<(Ostream&, const blockEdge&);
|
friend Ostream& operator<<(Ostream&, const blockEdge&);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -49,10 +49,8 @@ inline int Foam::blockEdge::compare(const label start, const label end) const
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -46,6 +47,7 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward Declarations
|
||||||
class blockEdge;
|
class blockEdge;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
@ -54,7 +56,7 @@ class blockEdge;
|
|||||||
|
|
||||||
class lineDivide
|
class lineDivide
|
||||||
{
|
{
|
||||||
// Private data
|
// Private Data
|
||||||
|
|
||||||
pointField points_;
|
pointField points_;
|
||||||
|
|
||||||
@ -67,18 +69,18 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
lineDivide
|
lineDivide
|
||||||
(
|
(
|
||||||
const blockEdge&,
|
const blockEdge& cedge,
|
||||||
const label ndiv,
|
const label nDiv,
|
||||||
const gradingDescriptors& gd = gradingDescriptors()
|
const gradingDescriptors& gd = gradingDescriptors()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the points
|
//- The points
|
||||||
const pointField& points() const;
|
const pointField& points() const;
|
||||||
|
|
||||||
//- Return the list of lambda values
|
//- The list of lambda values
|
||||||
const scalarList& lambdaDivisions() const;
|
const scalarList& lambdaDivisions() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -71,11 +71,21 @@ Foam::blockEdges::lineEdge::lineEdge
|
|||||||
|
|
||||||
Foam::point Foam::blockEdges::lineEdge::position(const scalar lambda) const
|
Foam::point Foam::blockEdges::lineEdge::position(const scalar lambda) const
|
||||||
{
|
{
|
||||||
if (lambda < -SMALL || lambda > 1+SMALL)
|
#ifdef FULLDEBUG
|
||||||
|
if (lambda < -SMALL || lambda > 1 + SMALL)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
WarningInFunction
|
||||||
<< "Parameter out of range, lambda = " << lambda
|
<< "Parameter out of range, lambda = " << lambda << nl;
|
||||||
<< abort(FatalError);
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (lambda < SMALL)
|
||||||
|
{
|
||||||
|
return points_[start_];
|
||||||
|
}
|
||||||
|
else if (lambda >= 1 - SMALL)
|
||||||
|
{
|
||||||
|
return points_[end_];
|
||||||
}
|
}
|
||||||
|
|
||||||
return points_[start_] + lambda * (points_[end_] - points_[start_]);
|
return points_[start_] + lambda * (points_[end_] - points_[start_]);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -51,12 +51,10 @@ namespace blockEdges
|
|||||||
Class lineEdge Declaration
|
Class lineEdge Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
class lineEdge
|
class lineEdge
|
||||||
:
|
:
|
||||||
public blockEdge
|
public blockEdge
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
@ -66,15 +64,20 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
lineEdge(const pointField&, const label start, const label end);
|
lineEdge
|
||||||
|
(
|
||||||
|
const pointField& points, //!< Referenced point field
|
||||||
|
const label start, //!< Start point in referenced point field
|
||||||
|
const label end //!< End point in referenced point field
|
||||||
|
);
|
||||||
|
|
||||||
//- Construct from Istream with a pointField
|
//- Construct from Istream and point field.
|
||||||
lineEdge
|
lineEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -85,11 +88,11 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
point position(const scalar) const;
|
point position(const scalar) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -26,16 +27,41 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "polyLine.H"
|
#include "polyLine.H"
|
||||||
|
#include "SubList.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tmp<Foam::pointField> Foam::polyLine::concat
|
||||||
|
(
|
||||||
|
const point& p0,
|
||||||
|
const pointField& intermediate,
|
||||||
|
const point& p1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
auto tresult = tmp<pointField>::New(intermediate.size() + 2);
|
||||||
|
auto& result = tresult.ref();
|
||||||
|
|
||||||
|
// Intermediate points (knots)
|
||||||
|
SubList<point>(result, intermediate.size(), 1) = intermediate;
|
||||||
|
|
||||||
|
// Start/end points (knots)
|
||||||
|
result.first() = p0;
|
||||||
|
result.last() = p1;
|
||||||
|
|
||||||
|
return tresult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::polyLine::calcParam()
|
void Foam::polyLine::calcParam()
|
||||||
{
|
{
|
||||||
param_.setSize(points_.size());
|
lineLength_ = 0;
|
||||||
|
param_.resize(points_.size());
|
||||||
|
|
||||||
if (param_.size())
|
if (param_.size())
|
||||||
{
|
{
|
||||||
param_[0] = 0.0;
|
param_[0] = 0;
|
||||||
|
|
||||||
for (label i=1; i < param_.size(); i++)
|
for (label i=1; i < param_.size(); i++)
|
||||||
{
|
{
|
||||||
@ -48,23 +74,34 @@ void Foam::polyLine::calcParam()
|
|||||||
{
|
{
|
||||||
param_[i] /= lineLength_;
|
param_[i] /= lineLength_;
|
||||||
}
|
}
|
||||||
param_.last() = 1.0;
|
param_.last() = 1;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lineLength_ = 0.0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::polyLine::polyLine(const pointField& ps, const bool)
|
Foam::polyLine::polyLine(const pointField& ps, const bool)
|
||||||
:
|
:
|
||||||
points_(ps),
|
points_(ps),
|
||||||
lineLength_(0.0),
|
lineLength_(0),
|
||||||
param_(0)
|
param_()
|
||||||
|
{
|
||||||
|
calcParam();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::polyLine::polyLine
|
||||||
|
(
|
||||||
|
const point& start,
|
||||||
|
const pointField& intermediate,
|
||||||
|
const point& end,
|
||||||
|
const bool
|
||||||
|
)
|
||||||
|
:
|
||||||
|
points_(polyLine::concat(start, intermediate, end)),
|
||||||
|
lineLength_(0),
|
||||||
|
param_()
|
||||||
{
|
{
|
||||||
calcParam();
|
calcParam();
|
||||||
}
|
}
|
||||||
@ -101,19 +138,20 @@ Foam::label Foam::polyLine::localParameter(scalar& lambda) const
|
|||||||
// Search table of cumulative distances to find which line-segment
|
// Search table of cumulative distances to find which line-segment
|
||||||
// we are on.
|
// we are on.
|
||||||
// Check the upper bound.
|
// Check the upper bound.
|
||||||
|
// Too small to bother with a binary search...
|
||||||
|
|
||||||
label segmentI = 1;
|
label segment = 1;
|
||||||
while (param_[segmentI] < lambda)
|
while (param_[segment] < lambda)
|
||||||
{
|
{
|
||||||
segmentI++;
|
++segment;
|
||||||
}
|
}
|
||||||
segmentI--; // We want the corresponding lower bound
|
--segment; // We want the corresponding lower bound
|
||||||
|
|
||||||
// The local parameter [0-1] on this line segment
|
// The local parameter [0-1] on this line segment
|
||||||
lambda =
|
lambda =
|
||||||
(lambda - param_[segmentI])/(param_[segmentI+1] - param_[segmentI]);
|
(lambda - param_[segment])/(param_[segment+1] - param_[segment]);
|
||||||
|
|
||||||
return segmentI;
|
return segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -151,8 +189,8 @@ Foam::point Foam::polyLine::position
|
|||||||
return points_.last();
|
return points_.last();
|
||||||
}
|
}
|
||||||
|
|
||||||
const point& p0 = points()[segment];
|
const point& p0 = points_[segment];
|
||||||
const point& p1 = points()[segment+1];
|
const point& p1 = points_[segment+1];
|
||||||
|
|
||||||
// Special cases - no calculation needed
|
// Special cases - no calculation needed
|
||||||
if (mu <= 0.0)
|
if (mu <= 0.0)
|
||||||
@ -163,11 +201,9 @@ Foam::point Foam::polyLine::position
|
|||||||
{
|
{
|
||||||
return p1;
|
return p1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
// Linear interpolation
|
||||||
// Linear interpolation
|
return points_[segment] + mu*(p1 - p0);
|
||||||
return points_[segment] + mu*(p1 - p0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -52,26 +53,16 @@ namespace Foam
|
|||||||
Class polyLine Declaration
|
Class polyLine Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
class polyLine
|
class polyLine
|
||||||
{
|
{
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- No copy construct
|
|
||||||
polyLine(const polyLine&) = delete;
|
|
||||||
|
|
||||||
//- No copy assignment
|
|
||||||
void operator=(const polyLine&) = delete;
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Protected data
|
// Protected Data
|
||||||
|
|
||||||
//- The control points or ends of each segments
|
//- The control points or ends of each segments
|
||||||
pointField points_;
|
pointField points_;
|
||||||
|
|
||||||
//- The real line length
|
//- The real (total) line length
|
||||||
scalar lineLength_;
|
scalar lineLength_;
|
||||||
|
|
||||||
//- The rational (0-1) cumulative parameter value for each point
|
//- The rational (0-1) cumulative parameter value for each point
|
||||||
@ -81,11 +72,11 @@ protected:
|
|||||||
// Protected Member Functions
|
// Protected Member Functions
|
||||||
|
|
||||||
//- Precalculate the rational cumulative parameter value
|
//- Precalculate the rational cumulative parameter value
|
||||||
// and the line-length
|
//- and the line-length
|
||||||
void calcParam();
|
void calcParam();
|
||||||
|
|
||||||
//- Return the line segment and the local parameter [0..1]
|
//- Return the line segment and the local parameter [0..1]
|
||||||
// corresponding to the global lambda [0..1]
|
//- corresponding to the global lambda [0..1]
|
||||||
label localParameter(scalar& lambda) const;
|
label localParameter(scalar& lambda) const;
|
||||||
|
|
||||||
|
|
||||||
@ -94,30 +85,50 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
|
explicit polyLine
|
||||||
|
(
|
||||||
|
const pointField& points, //!< The poly-line points
|
||||||
|
const bool notImplementedClosed = false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from begin, intermediate, end points
|
||||||
polyLine
|
polyLine
|
||||||
(
|
(
|
||||||
const pointField&,
|
const point& start, //!< The start point
|
||||||
|
const pointField& intermediate, //!< The intermediate points
|
||||||
|
const point& end, //!< The end point
|
||||||
const bool notImplementedClosed = false
|
const bool notImplementedClosed = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Static Member Functions
|
||||||
|
|
||||||
|
//- Concatenate begin, intermediate and end points
|
||||||
|
static tmp<pointField> concat
|
||||||
|
(
|
||||||
|
const point& start, //!< The start point
|
||||||
|
const pointField& intermediate, //!< The intermediate points
|
||||||
|
const point& end //!< The end point
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return const-access to the control-points
|
//- Return const-access to the control-points
|
||||||
const pointField& points() const;
|
const pointField& points() const;
|
||||||
|
|
||||||
//- Return the number of line segments
|
//- The number of line segments
|
||||||
label nSegments() const;
|
label nSegments() const;
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
point position(const scalar) const;
|
point position(const scalar) const;
|
||||||
|
|
||||||
//- Return the point position corresponding to the local parameter
|
//- The point position corresponding to the local parameter
|
||||||
// 0 <= lambda <= 1 on the given segment
|
// 0 <= lambda <= 1 on the given segment
|
||||||
point position(const label segment, const scalar) const;
|
point position(const label segment, const scalar) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -48,11 +48,11 @@ Foam::blockEdges::polyLineEdge::polyLineEdge
|
|||||||
const pointField& ps,
|
const pointField& ps,
|
||||||
const label start,
|
const label start,
|
||||||
const label end,
|
const label end,
|
||||||
const pointField& otherPoints
|
const pointField& intermediate
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(ps, start, end),
|
blockEdge(ps, start, end),
|
||||||
polyLine(appendEndPoints(ps, start_, end_, otherPoints))
|
polyLine(ps[start_], intermediate, ps[end_])
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ Foam::blockEdges::polyLineEdge::polyLineEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(dict, index, ps, is),
|
blockEdge(dict, index, ps, is),
|
||||||
polyLine(appendEndPoints(ps, start_, end_, pointField(is)))
|
polyLine(ps[start_], pointField(is), ps[end_])
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -77,19 +77,19 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
polyLineEdge
|
polyLineEdge
|
||||||
(
|
(
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end,
|
const label end, //!< End point in referenced point field
|
||||||
const pointField& otherPoints
|
const pointField& intermediate //!< The intermediate points
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream
|
//- Construct from Istream and point field.
|
||||||
polyLineEdge
|
polyLineEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -100,11 +100,11 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
point position(const scalar lambda) const;
|
point position(const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@ Foam::projectCurveEdge::projectCurveEdge
|
|||||||
geometry_(geometry)
|
geometry_(geometry)
|
||||||
{
|
{
|
||||||
wordList names(is);
|
wordList names(is);
|
||||||
surfaces_.setSize(names.size());
|
surfaces_.resize(names.size());
|
||||||
forAll(names, i)
|
forAll(names, i)
|
||||||
{
|
{
|
||||||
surfaces_[i] = geometry_.findSurfaceID(names[i]);
|
surfaces_[i] = geometry_.findSurfaceID(names[i]);
|
||||||
@ -83,6 +83,14 @@ Foam::projectCurveEdge::projectCurveEdge
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::point
|
||||||
|
Foam::projectCurveEdge::position(const scalar) const
|
||||||
|
{
|
||||||
|
NotImplemented;
|
||||||
|
return point::max;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::pointField>
|
Foam::tmp<Foam::pointField>
|
||||||
Foam::projectCurveEdge::position(const scalarList& lambdas) const
|
Foam::projectCurveEdge::position(const scalarList& lambdas) const
|
||||||
{
|
{
|
||||||
@ -101,8 +109,8 @@ Foam::projectCurveEdge::position(const scalarList& lambdas) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<pointField> tpoints(new pointField(lambdas.size()));
|
auto tpoints = tmp<pointField>::New(lambdas.size());
|
||||||
pointField& points = tpoints.ref();
|
auto& points = tpoints.ref();
|
||||||
|
|
||||||
const point& startPt = points_[start_];
|
const point& startPt = points_[start_];
|
||||||
const point& endPt = points_[end_];
|
const point& endPt = points_[end_];
|
||||||
@ -149,10 +157,11 @@ Foam::projectCurveEdge::position(const scalarList& lambdas) const
|
|||||||
|
|
||||||
|
|
||||||
// Upper limit for number of iterations
|
// Upper limit for number of iterations
|
||||||
const label maxIter = 10;
|
constexpr label maxIter = 10;
|
||||||
|
|
||||||
// Residual tolerance
|
// Residual tolerance
|
||||||
const scalar relTol = 0.1;
|
constexpr scalar relTol = 0.1;
|
||||||
const scalar absTol = 1e-4;
|
constexpr scalar absTol = 1e-4;
|
||||||
|
|
||||||
scalar initialResidual = 0.0;
|
scalar initialResidual = 0.0;
|
||||||
|
|
||||||
@ -258,4 +267,11 @@ Foam::projectCurveEdge::position(const scalarList& lambdas) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::projectCurveEdge::length() const
|
||||||
|
{
|
||||||
|
NotImplemented;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016 OpenFOAM Foundation
|
Copyright (C) 2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -46,6 +46,7 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward Declarations
|
||||||
class pointConstraint;
|
class pointConstraint;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
@ -81,13 +82,13 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from Istream setting pointsList
|
//- Construct from Istream and point field.
|
||||||
projectCurveEdge
|
projectCurveEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -98,24 +99,18 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point positions corresponding to the curve parameters
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual point position(const scalar) const
|
// \note NotImplemented
|
||||||
{
|
virtual point position(const scalar) const;
|
||||||
NotImplemented;
|
|
||||||
return point::max;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Return the point positions corresponding to the curve parameters
|
//- The point positions corresponding to the curve parameters
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual tmp<pointField> position(const scalarList&) const;
|
virtual tmp<pointField> position(const scalarList&) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
virtual scalar length() const
|
// \note NotImplemented
|
||||||
{
|
virtual scalar length() const;
|
||||||
NotImplemented;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -26,13 +26,12 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "searchableSurfacesQueries.H"
|
|
||||||
#include "projectEdge.H"
|
#include "projectEdge.H"
|
||||||
#include "unitConversion.H"
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
|
||||||
#include "pointConstraint.H"
|
#include "pointConstraint.H"
|
||||||
|
#include "searchableSurfacesQueries.H"
|
||||||
#include "OBJstream.H"
|
#include "OBJstream.H"
|
||||||
#include "linearInterpolationWeights.H"
|
#include "linearInterpolationWeights.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -146,8 +145,8 @@ Foam::projectEdge::position(const scalarList& lambdas) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
tmp<pointField> tpoints(new pointField(lambdas.size()));
|
auto tpoints = tmp<pointField>::New(lambdas.size());
|
||||||
pointField& points = tpoints.ref();
|
auto& points = tpoints.ref();
|
||||||
|
|
||||||
const point& startPt = points_[start_];
|
const point& startPt = points_[start_];
|
||||||
const point& endPt = points_[end_];
|
const point& endPt = points_[end_];
|
||||||
@ -161,10 +160,11 @@ Foam::projectEdge::position(const scalarList& lambdas) const
|
|||||||
|
|
||||||
|
|
||||||
// Upper limit for number of iterations
|
// Upper limit for number of iterations
|
||||||
const label maxIter = 10;
|
constexpr label maxIter = 10;
|
||||||
|
|
||||||
// Residual tolerance
|
// Residual tolerance
|
||||||
const scalar relTol = 0.1;
|
constexpr scalar relTol = 0.1;
|
||||||
const scalar absTol = 1e-4;
|
constexpr scalar absTol = 1e-4;
|
||||||
|
|
||||||
scalar initialResidual = 0.0;
|
scalar initialResidual = 0.0;
|
||||||
|
|
||||||
@ -270,4 +270,11 @@ Foam::projectEdge::position(const scalarList& lambdas) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::projectEdge::length() const
|
||||||
|
{
|
||||||
|
NotImplemented;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016 OpenFOAM Foundation
|
Copyright (C) 2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -46,6 +46,7 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward Declarations
|
||||||
class pointConstraint;
|
class pointConstraint;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
@ -84,13 +85,13 @@ public:
|
|||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from Istream setting pointsList
|
//- Construct from Istream and point field.
|
||||||
projectEdge
|
projectEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField& points,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream& is
|
Istream& is
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -101,20 +102,17 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point positions corresponding to the curve parameters
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual point position(const scalar) const;
|
virtual point position(const scalar) const;
|
||||||
|
|
||||||
//- Return the point positions corresponding to the curve parameters
|
//- The point positions corresponding to the curve parameters
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual tmp<pointField> position(const scalarList&) const;
|
virtual tmp<pointField> position(const scalarList&) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the edge
|
||||||
virtual scalar length() const
|
// \note NotImplemented
|
||||||
{
|
virtual scalar length() const;
|
||||||
NotImplemented;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -134,7 +134,7 @@ Foam::point Foam::CatmullRomSpline::position
|
|||||||
Foam::scalar Foam::CatmullRomSpline::length() const
|
Foam::scalar Foam::CatmullRomSpline::length() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return 1.0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -79,21 +80,12 @@ class CatmullRomSpline
|
|||||||
:
|
:
|
||||||
public polyLine
|
public polyLine
|
||||||
{
|
{
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- No copy construct
|
|
||||||
CatmullRomSpline(const CatmullRomSpline&) = delete;
|
|
||||||
|
|
||||||
//- No copy assignment
|
|
||||||
void operator=(const CatmullRomSpline&) = delete;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
CatmullRomSpline
|
explicit CatmullRomSpline
|
||||||
(
|
(
|
||||||
const pointField& knots,
|
const pointField& knots,
|
||||||
const bool notImplementedClosed = false
|
const bool notImplementedClosed = false
|
||||||
@ -102,15 +94,16 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
point position(const scalar lambda) const;
|
point position(const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the point position corresponding to the local parameter
|
//- The point position corresponding to the local parameter
|
||||||
// 0 <= lambda <= 1 on the given segment
|
// 0 <= lambda <= 1 on the given segment
|
||||||
point position(const label segment, const scalar lambda) const;
|
point position(const label segment, const scalar lambda) const;
|
||||||
|
|
||||||
//- Return the length of the curve
|
//- The length of the curve
|
||||||
|
// \note NotImplemented
|
||||||
scalar length() const;
|
scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -27,9 +27,9 @@ License
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "splineEdge.H"
|
#include "splineEdge.H"
|
||||||
|
#include "polyLine.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
@ -59,7 +59,10 @@ Foam::blockEdges::splineEdge::splineEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(points, start, end),
|
blockEdge(points, start, end),
|
||||||
CatmullRomSpline(appendEndPoints(points, start, end, internalPoints))
|
CatmullRomSpline
|
||||||
|
(
|
||||||
|
polyLine::concat(points[start_], internalPoints, points[end_])
|
||||||
|
)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -73,13 +76,16 @@ Foam::blockEdges::splineEdge::splineEdge
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
blockEdge(dict, index, points, is),
|
blockEdge(dict, index, points, is),
|
||||||
CatmullRomSpline(appendEndPoints(points, start_, end_, pointField(is)))
|
CatmullRomSpline
|
||||||
|
(
|
||||||
|
polyLine::concat(points[start_], pointField(is), points[end_])
|
||||||
|
)
|
||||||
{
|
{
|
||||||
token t(is);
|
token tok(is);
|
||||||
is.putBack(t);
|
is.putBack(tok);
|
||||||
|
|
||||||
// discard unused start/end tangents
|
// Discard unused start/end tangents
|
||||||
if (t == token::BEGIN_LIST)
|
if (tok == token::BEGIN_LIST)
|
||||||
{
|
{
|
||||||
vector tangent0Ignored(is);
|
vector tangent0Ignored(is);
|
||||||
vector tangent1Ignored(is);
|
vector tangent1Ignored(is);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -30,6 +30,10 @@ Class
|
|||||||
Description
|
Description
|
||||||
A blockEdge interface for Catmull-Rom splines.
|
A blockEdge interface for Catmull-Rom splines.
|
||||||
|
|
||||||
|
See also
|
||||||
|
BSpline
|
||||||
|
CatmullRomSpline
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
splineEdge.C
|
splineEdge.C
|
||||||
|
|
||||||
@ -77,19 +81,19 @@ public:
|
|||||||
//- Construct from components
|
//- Construct from components
|
||||||
splineEdge
|
splineEdge
|
||||||
(
|
(
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
const label start,
|
const label start, //!< Start point in referenced point field
|
||||||
const label end,
|
const label end, //!< End point in referenced point field
|
||||||
const pointField& internalPoints
|
const pointField& internalPoints
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from Istream, setting pointsList
|
//- Construct from Istream and point field.
|
||||||
splineEdge
|
splineEdge
|
||||||
(
|
(
|
||||||
const dictionary& dict,
|
const dictionary& dict,
|
||||||
const label index,
|
const label index,
|
||||||
const searchableSurfaces& geometry,
|
const searchableSurfaces& geometry,
|
||||||
const pointField&,
|
const pointField& points, //!< Referenced point field
|
||||||
Istream&
|
Istream&
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -100,11 +104,12 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return the point position corresponding to the curve parameter
|
//- The point position corresponding to the curve parameter
|
||||||
// 0 <= lambda <= 1
|
// 0 <= lambda <= 1
|
||||||
virtual point position(const scalar) const;
|
virtual point position(const scalar) const;
|
||||||
|
|
||||||
//- Return the length of the spline curve (not implemented)
|
//- The length of the spline curve
|
||||||
|
// \note NotImplemented
|
||||||
virtual scalar length() const;
|
virtual scalar length() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -109,15 +109,23 @@ Foam::blockMesh::blockMesh
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::blockMesh::valid() const
|
bool Foam::blockMesh::valid() const noexcept
|
||||||
{
|
{
|
||||||
return bool(topologyPtr_);
|
return bool(topologyPtr_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::blockMesh::verbose(const bool on)
|
bool Foam::blockMesh::verbose() const noexcept
|
||||||
{
|
{
|
||||||
|
return verboseOutput;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::blockMesh::verbose(const bool on) noexcept
|
||||||
|
{
|
||||||
|
bool old(verboseOutput);
|
||||||
verboseOutput = on;
|
verboseOutput = on;
|
||||||
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -226,10 +226,10 @@ public:
|
|||||||
|
|
||||||
//- Construct from IOdictionary for given region
|
//- Construct from IOdictionary for given region
|
||||||
// Default is topological merging.
|
// Default is topological merging.
|
||||||
blockMesh
|
explicit blockMesh
|
||||||
(
|
(
|
||||||
const IOdictionary& dict,
|
const IOdictionary& dict,
|
||||||
const word& regionName,
|
const word& regionName = polyMesh::defaultRegion,
|
||||||
mergeStrategy strategy = mergeStrategy::DEFAULT_MERGE
|
mergeStrategy strategy = mergeStrategy::DEFAULT_MERGE
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -255,10 +255,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- True if the blockMesh topology exists
|
//- True if the blockMesh topology exists
|
||||||
bool valid() const;
|
bool valid() const noexcept;
|
||||||
|
|
||||||
//- Reference to point field defining the blockMesh
|
//- Reference to point field defining the blockMesh.
|
||||||
// these points have not been scaled by scaleFactor
|
// These points are \b not scaled by scaleFactor
|
||||||
const pointField& vertices() const;
|
const pointField& vertices() const;
|
||||||
|
|
||||||
//- Return the blockMesh topology as a polyMesh
|
//- Return the blockMesh topology as a polyMesh
|
||||||
@ -279,8 +279,8 @@ public:
|
|||||||
//- The scaling factor used to convert to metres
|
//- The scaling factor used to convert to metres
|
||||||
scalar scaleFactor() const;
|
scalar scaleFactor() const;
|
||||||
|
|
||||||
//- The points for the entire mesh
|
//- The points for the entire mesh.
|
||||||
// these points have been scaled by scaleFactor
|
// These points \b are scaled by scaleFactor
|
||||||
const pointField& points() const;
|
const pointField& points() const;
|
||||||
|
|
||||||
//- Return cell shapes list
|
//- Return cell shapes list
|
||||||
@ -299,16 +299,26 @@ public:
|
|||||||
label numZonedBlocks() const;
|
label numZonedBlocks() const;
|
||||||
|
|
||||||
|
|
||||||
// Edit
|
// Verbosity
|
||||||
|
|
||||||
//- Enable/disable verbose information about the progress
|
//- Verbose information?
|
||||||
void verbose(const bool on=true);
|
bool verbose() const noexcept;
|
||||||
|
|
||||||
|
//- Enable/disable verbose information about the progress
|
||||||
|
// \return old value
|
||||||
|
bool verbose(const bool on) noexcept;
|
||||||
|
|
||||||
|
|
||||||
// Write
|
// Mesh Generation
|
||||||
|
|
||||||
//- Writes edges of blockMesh in OBJ format.
|
//- Create polyMesh, with cell zones
|
||||||
void writeTopology(Ostream&) const;
|
autoPtr<polyMesh> mesh(const IOobject& io) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Write
|
||||||
|
|
||||||
|
//- Writes edges of blockMesh in OBJ format.
|
||||||
|
void writeTopology(Ostream& os) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2019 OpenCFD Ltd.
|
Copyright (C) 2019-2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -28,6 +28,7 @@ License
|
|||||||
|
|
||||||
#include "blockMesh.H"
|
#include "blockMesh.H"
|
||||||
#include "cellModel.H"
|
#include "cellModel.H"
|
||||||
|
#include "emptyPolyPatch.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -270,4 +271,129 @@ void Foam::blockMesh::createPatches() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::autoPtr<Foam::polyMesh>
|
||||||
|
Foam::blockMesh::mesh(const IOobject& io) const
|
||||||
|
{
|
||||||
|
const blockMesh& blkMesh = *this;
|
||||||
|
|
||||||
|
if (verboseOutput)
|
||||||
|
{
|
||||||
|
Info<< nl << "Creating polyMesh from blockMesh" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto meshPtr = autoPtr<polyMesh>::New
|
||||||
|
(
|
||||||
|
io,
|
||||||
|
pointField(blkMesh.points()), // Copy, could we re-use space?
|
||||||
|
blkMesh.cells(),
|
||||||
|
blkMesh.patches(),
|
||||||
|
blkMesh.patchNames(),
|
||||||
|
blkMesh.patchDicts(),
|
||||||
|
"defaultFaces", // Default patch name
|
||||||
|
emptyPolyPatch::typeName // Default patch type
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Set any cellZones
|
||||||
|
const label nZones = blkMesh.numZonedBlocks();
|
||||||
|
|
||||||
|
if (nZones)
|
||||||
|
{
|
||||||
|
polyMesh& pmesh = *meshPtr;
|
||||||
|
|
||||||
|
if (verboseOutput)
|
||||||
|
{
|
||||||
|
Info<< "Adding cell zones" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map from zoneName to cellZone index
|
||||||
|
HashTable<label> zoneMap(2*nZones);
|
||||||
|
|
||||||
|
// Cells per zone
|
||||||
|
List<DynamicList<label>> zoneCells(nZones);
|
||||||
|
|
||||||
|
// Running cell counter
|
||||||
|
label celli = 0;
|
||||||
|
|
||||||
|
// Largest zone so far
|
||||||
|
label freeZonei = 0;
|
||||||
|
|
||||||
|
for (const block& b : blkMesh)
|
||||||
|
{
|
||||||
|
const word& zoneName = b.zoneName();
|
||||||
|
const label nCellsInBlock = b.cells().size();
|
||||||
|
|
||||||
|
if (zoneName.size())
|
||||||
|
{
|
||||||
|
const auto iter = zoneMap.cfind(zoneName);
|
||||||
|
|
||||||
|
label zonei = freeZonei;
|
||||||
|
|
||||||
|
if (iter.found())
|
||||||
|
{
|
||||||
|
zonei = *iter;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zoneMap.insert(zoneName, zonei);
|
||||||
|
++freeZonei;
|
||||||
|
|
||||||
|
if (verboseOutput)
|
||||||
|
{
|
||||||
|
Info<< " " << zonei << '\t' << zoneName << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fill with cell ids
|
||||||
|
|
||||||
|
zoneCells[zonei].reserve
|
||||||
|
(
|
||||||
|
zoneCells[zonei].size() + nCellsInBlock
|
||||||
|
);
|
||||||
|
|
||||||
|
const label endOfFill = celli + nCellsInBlock;
|
||||||
|
|
||||||
|
for (; celli < endOfFill; ++celli)
|
||||||
|
{
|
||||||
|
zoneCells[zonei].append(celli);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
celli += nCellsInBlock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<cellZone*> cz(zoneMap.size());
|
||||||
|
forAllConstIters(zoneMap, iter)
|
||||||
|
{
|
||||||
|
const word& zoneName = iter.key();
|
||||||
|
const label zonei = iter.val();
|
||||||
|
|
||||||
|
cz[zonei] = new cellZone
|
||||||
|
(
|
||||||
|
zoneName,
|
||||||
|
zoneCells[zonei].shrink(),
|
||||||
|
zonei,
|
||||||
|
pmesh.cellZones()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pmesh.pointZones().resize(0);
|
||||||
|
pmesh.faceZones().resize(0);
|
||||||
|
pmesh.cellZones().resize(0);
|
||||||
|
pmesh.addZones(List<pointZone*>(), List<faceZone*>(), cz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Merge patch pairs, cyclic must be done elsewhere
|
||||||
|
// - requires libdynamicMesh
|
||||||
|
|
||||||
|
return meshPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -16,6 +16,10 @@ FoamFile
|
|||||||
|
|
||||||
scale 1;
|
scale 1;
|
||||||
|
|
||||||
|
// Front/back locations
|
||||||
|
zmin -0.5;
|
||||||
|
zmax 0.5;
|
||||||
|
|
||||||
vertices #codeStream
|
vertices #codeStream
|
||||||
{
|
{
|
||||||
codeInclude
|
codeInclude
|
||||||
@ -25,34 +29,39 @@ vertices #codeStream
|
|||||||
|
|
||||||
code
|
code
|
||||||
#{
|
#{
|
||||||
pointField points(19);
|
// sin(45), cos(45)
|
||||||
points[0] = point(0.5, 0, -0.5);
|
const scalar sqrt05 = sqrt(0.5);
|
||||||
points[1] = point(1, 0, -0.5);
|
|
||||||
points[2] = point(2, 0, -0.5);
|
|
||||||
points[3] = point(2, 0.707107, -0.5);
|
|
||||||
points[4] = point(0.707107, 0.707107, -0.5);
|
|
||||||
points[5] = point(0.353553, 0.353553, -0.5);
|
|
||||||
points[6] = point(2, 2, -0.5);
|
|
||||||
points[7] = point(0.707107, 2, -0.5);
|
|
||||||
points[8] = point(0, 2, -0.5);
|
|
||||||
points[9] = point(0, 1, -0.5);
|
|
||||||
points[10] = point(0, 0.5, -0.5);
|
|
||||||
points[11] = point(-0.5, 0, -0.5);
|
|
||||||
points[12] = point(-1, 0, -0.5);
|
|
||||||
points[13] = point(-2, 0, -0.5);
|
|
||||||
points[14] = point(-2, 0.707107, -0.5);
|
|
||||||
points[15] = point(-0.707107, 0.707107, -0.5);
|
|
||||||
points[16] = point(-0.353553, 0.353553, -0.5);
|
|
||||||
points[17] = point(-2, 2, -0.5);
|
|
||||||
points[18] = point(-0.707107, 2, -0.5);
|
|
||||||
|
|
||||||
// Duplicate z points
|
pointField points
|
||||||
label sz = points.size();
|
({
|
||||||
points.setSize(2*sz);
|
/* 0*/ {0.5, 0, $zmin},
|
||||||
for (label i = 0; i < sz; i++)
|
/* 1*/ {1, 0, $zmin},
|
||||||
|
/* 2*/ {2, 0, $zmin},
|
||||||
|
/* 3*/ {2, sqrt05, $zmin},
|
||||||
|
/* 4*/ {sqrt05, sqrt05, $zmin},
|
||||||
|
/* 5*/ {sqrt05/2, sqrt05/2, $zmin},
|
||||||
|
/* 6*/ {2, 2, $zmin},
|
||||||
|
/* 7*/ {sqrt05, 2, $zmin},
|
||||||
|
/* 8*/ {0, 2, $zmin},
|
||||||
|
/* 9*/ {0, 1, $zmin},
|
||||||
|
/*10*/ {0, 0.5, $zmin},
|
||||||
|
/*11*/ {-0.5, 0, $zmin},
|
||||||
|
/*12*/ {-1, 0, $zmin},
|
||||||
|
/*13*/ {-2, 0, $zmin},
|
||||||
|
/*14*/ {-2, sqrt05, $zmin},
|
||||||
|
/*15*/ {-sqrt05, sqrt05, $zmin},
|
||||||
|
/*16*/ {-sqrt05/2, sqrt05/2, $zmin},
|
||||||
|
/*17*/ {-2, 2, $zmin},
|
||||||
|
/*18*/ {-sqrt05, 2, $zmin}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Duplicate z points for zmax
|
||||||
|
const label sz = points.size();
|
||||||
|
points.resize(2*sz);
|
||||||
|
for (label i = 0; i < sz; ++i)
|
||||||
{
|
{
|
||||||
const point& pt = points[i];
|
const point& pt = points[i];
|
||||||
points[i+sz] = point(pt.x(), pt.y(), -pt.z());
|
points[i + sz] = point(pt.x(), pt.y(), $zmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
os << points;
|
os << points;
|
||||||
@ -76,22 +85,24 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 (0.469846 0.17101 -0.5)
|
// Inner cylinder
|
||||||
arc 5 10 (0.17101 0.469846 -0.5)
|
arc 0 5 origin (0 0 $zmin)
|
||||||
arc 1 4 (0.939693 0.34202 -0.5)
|
arc 5 10 origin (0 0 $zmin)
|
||||||
arc 4 9 (0.34202 0.939693 -0.5)
|
arc 1 4 origin (0 0 $zmin)
|
||||||
arc 19 24 (0.469846 0.17101 0.5)
|
arc 4 9 origin (0 0 $zmin)
|
||||||
arc 24 29 (0.17101 0.469846 0.5)
|
arc 19 24 origin (0 0 $zmax)
|
||||||
arc 20 23 (0.939693 0.34202 0.5)
|
arc 24 29 origin (0 0 $zmax)
|
||||||
arc 23 28 (0.34202 0.939693 0.5)
|
arc 20 23 origin (0 0 $zmax)
|
||||||
arc 11 16 (-0.469846 0.17101 -0.5)
|
arc 23 28 origin (0 0 $zmax)
|
||||||
arc 16 10 (-0.17101 0.469846 -0.5)
|
// Intermediate cylinder
|
||||||
arc 12 15 (-0.939693 0.34202 -0.5)
|
arc 11 16 origin (0 0 $zmin)
|
||||||
arc 15 9 (-0.34202 0.939693 -0.5)
|
arc 16 10 origin (0 0 $zmin)
|
||||||
arc 30 35 (-0.469846 0.17101 0.5)
|
arc 12 15 origin (0 0 $zmin)
|
||||||
arc 35 29 (-0.17101 0.469846 0.5)
|
arc 15 9 origin (0 0 $zmin)
|
||||||
arc 31 34 (-0.939693 0.34202 0.5)
|
arc 30 35 origin (0 0 $zmax)
|
||||||
arc 34 28 (-0.34202 0.939693 0.5)
|
arc 35 29 origin (0 0 $zmax)
|
||||||
|
arc 31 34 origin (0 0 $zmax)
|
||||||
|
arc 34 28 origin (0 0 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -73,21 +73,22 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 8 9 (-3.46410161513775 2 0)
|
arc 8 9 origin (0 0 0)
|
||||||
arc 9 10 (-4 0 0)
|
arc 9 10 origin (0 0 0)
|
||||||
arc 10 11 (-3.46410161513775 2 0)
|
arc 10 11 origin (0 0 0)
|
||||||
arc 11 13 ( 0 4 0)
|
arc 11 13 origin (0 0 0)
|
||||||
arc 13 12 ( 4 0 0)
|
arc 13 12 origin (0 0 0)
|
||||||
arc 12 8 ( 0 -4 0)
|
arc 12 8 origin (0 0 0)
|
||||||
|
|
||||||
arc 26 27 (-3.46410161513775 2 1)
|
arc 26 27 origin (0 0 1)
|
||||||
arc 27 28 (-4 0 1)
|
arc 27 28 origin (0 0 1)
|
||||||
arc 28 29 (-3.46410161513775 2 1)
|
arc 28 29 origin (0 0 1)
|
||||||
arc 29 31 ( 0 4 1)
|
arc 29 31 origin (0 0 1)
|
||||||
arc 31 30 ( 4 0 1)
|
arc 31 30 origin (0 0 1)
|
||||||
arc 30 26 ( 0 -4 1)
|
arc 30 26 origin (0 0 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
defaultPatch
|
defaultPatch
|
||||||
{
|
{
|
||||||
name frontAndBack;
|
name frontAndBack;
|
||||||
|
|||||||
@ -153,15 +153,15 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 4 5 (0 0 -R_burner)
|
arc 4 5 origin (0 0 0)
|
||||||
arc 5 6 (R_burner 0 0)
|
arc 5 6 origin (0 0 0)
|
||||||
arc 6 7 (0 0 R_burner)
|
arc 6 7 origin (0 0 0)
|
||||||
arc 7 4 (-R_burner 0 0)
|
arc 7 4 origin (0 0 0)
|
||||||
|
|
||||||
arc 24 25 (0 H_box -R_burner)
|
arc 24 25 origin (0 H_box 0)
|
||||||
arc 25 26 (R_burner H_box 0)
|
arc 25 26 origin (0 H_box 0)
|
||||||
arc 26 27 (0 H_box R_burner)
|
arc 26 27 origin (0 H_box 0)
|
||||||
arc 27 24 (-R_burner H_box 0)
|
arc 27 24 origin (0 H_box 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,36 +16,39 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.001;
|
scale 0.001;
|
||||||
|
|
||||||
|
zmin -25;
|
||||||
|
zmax 25;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// front-plane: z = +25mm
|
// front-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 25) // pt 0
|
( -50 25 $zmax) // pt 0
|
||||||
( 0 25 25) // pt 1
|
( 0 25 $zmax) // pt 1
|
||||||
( -50 75 25) // pt 2
|
( -50 75 $zmax) // pt 2
|
||||||
( 0 75 25) // pt 3
|
( 0 75 $zmax) // pt 3
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 25) // pt 4
|
( -500 -75 $zmax) // pt 4
|
||||||
( 0 -75 25) // pt 5
|
( 0 -75 $zmax) // pt 5
|
||||||
( -500 -25 25) // pt 6
|
( -500 -25 $zmax) // pt 6
|
||||||
( 0 -25 25) // pt 7
|
( 0 -25 $zmax) // pt 7
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 25) // pt 8
|
( 25 0 $zmax) // pt 8
|
||||||
( 75 0 25) // pt 9
|
( 75 0 $zmax) // pt 9
|
||||||
// back-plane: z = -25mm
|
// back-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 -25) // pt 0 + 10
|
( -50 25 $zmin) // pt 0 + 10
|
||||||
( 0 25 -25) // pt 1 + 10
|
( 0 25 $zmin) // pt 1 + 10
|
||||||
( -50 75 -25) // pt 2 + 10
|
( -50 75 $zmin) // pt 2 + 10
|
||||||
( 0 75 -25) // pt 3 + 10
|
( 0 75 $zmin) // pt 3 + 10
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 -25) // pt 4 + 10
|
( -500 -75 $zmin) // pt 4 + 10
|
||||||
( 0 -75 -25) // pt 5 + 10
|
( 0 -75 $zmin) // pt 5 + 10
|
||||||
( -500 -25 -25) // pt 7 + 10
|
( -500 -25 $zmin) // pt 7 + 10
|
||||||
( 0 -25 -25) // pt 8 + 10
|
( 0 -25 $zmin) // pt 8 + 10
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 -25) // pt 8 + 10
|
( 25 0 $zmin) // pt 8 + 10
|
||||||
( 75 0 -25) // pt 9 + 10
|
( 75 0 $zmin) // pt 9 + 10
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -59,16 +62,16 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// block 2
|
// block 2
|
||||||
arc 1 8 ( 17.678 17.678 25)
|
arc 1 8 origin (0 0 $zmax)
|
||||||
arc 11 18 ( 17.678 17.678 -25)
|
arc 3 9 origin (0 0 $zmax)
|
||||||
arc 3 9 ( 53.033 53.033 25)
|
arc 11 18 origin (0 0 $zmin)
|
||||||
arc 13 19 ( 53.033 53.033 -25)
|
arc 13 19 origin (0 0 $zmin)
|
||||||
// block 3
|
// block 3
|
||||||
arc 7 8 ( 17.678 -17.678 25)
|
arc 7 8 origin (0 0 $zmax)
|
||||||
arc 17 18 ( 17.678 -17.678 -25)
|
arc 5 9 origin (0 0 $zmax)
|
||||||
arc 5 9 ( 53.033 -53.033 25)
|
arc 17 18 origin (0 0 $zmin)
|
||||||
arc 15 19 ( 53.033 -53.033 -25)
|
arc 15 19 origin (0 0 $zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,36 +16,39 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.001;
|
scale 0.001;
|
||||||
|
|
||||||
|
zmin -25;
|
||||||
|
zmax 25;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// front-plane: z = +25mm
|
// front-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 25) // pt 0
|
( -50 25 $zmax) // pt 0
|
||||||
( 0 25 25) // pt 1
|
( 0 25 $zmax) // pt 1
|
||||||
( -50 75 25) // pt 2
|
( -50 75 $zmax) // pt 2
|
||||||
( 0 75 25) // pt 3
|
( 0 75 $zmax) // pt 3
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 25) // pt 4
|
( -500 -75 $zmax) // pt 4
|
||||||
( 0 -75 25) // pt 5
|
( 0 -75 $zmax) // pt 5
|
||||||
( -500 -25 25) // pt 6
|
( -500 -25 $zmax) // pt 6
|
||||||
( 0 -25 25) // pt 7
|
( 0 -25 $zmax) // pt 7
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 25) // pt 8
|
( 25 0 $zmax) // pt 8
|
||||||
( 75 0 25) // pt 9
|
( 75 0 $zmax) // pt 9
|
||||||
// back-plane: z = -25mm
|
// back-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 -25) // pt 0 + 10
|
( -50 25 $zmin) // pt 0 + 10
|
||||||
( 0 25 -25) // pt 1 + 10
|
( 0 25 $zmin) // pt 1 + 10
|
||||||
( -50 75 -25) // pt 2 + 10
|
( -50 75 $zmin) // pt 2 + 10
|
||||||
( 0 75 -25) // pt 3 + 10
|
( 0 75 $zmin) // pt 3 + 10
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 -25) // pt 4 + 10
|
( -500 -75 $zmin) // pt 4 + 10
|
||||||
( 0 -75 -25) // pt 5 + 10
|
( 0 -75 $zmin) // pt 5 + 10
|
||||||
( -500 -25 -25) // pt 7 + 10
|
( -500 -25 $zmin) // pt 7 + 10
|
||||||
( 0 -25 -25) // pt 8 + 10
|
( 0 -25 $zmin) // pt 8 + 10
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 -25) // pt 8 + 10
|
( 25 0 $zmin) // pt 8 + 10
|
||||||
( 75 0 -25) // pt 9 + 10
|
( 75 0 $zmin) // pt 9 + 10
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -60,15 +63,15 @@ blocks
|
|||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// block 2
|
// block 2
|
||||||
arc 1 8 (17.678 17.678 25)
|
arc 1 8 origin (0 0 $zmax)
|
||||||
arc 11 18 (17.678 17.678 -25)
|
arc 3 9 origin (0 0 $zmax)
|
||||||
arc 3 9 (53.033 53.033 25)
|
arc 11 18 origin (0 0 $zmin)
|
||||||
arc 13 19 (53.033 53.033 -25)
|
arc 13 19 origin (0 0 $zmin)
|
||||||
// block 3
|
// block 3
|
||||||
arc 7 8 (17.678 -17.678 25)
|
arc 7 8 origin (0 0 $zmax)
|
||||||
arc 17 18 (17.678 -17.678 -25)
|
arc 5 9 origin (0 0 $zmax)
|
||||||
arc 5 9 (53.033 -53.033 25)
|
arc 17 18 origin (0 0 $zmin)
|
||||||
arc 15 19 (53.033 -53.033 -25)
|
arc 15 19 origin (0 0 $zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,36 +16,39 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.001;
|
scale 0.001;
|
||||||
|
|
||||||
|
zmin -25;
|
||||||
|
zmax 25;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// front-plane: z = +25mm
|
// front-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 25) // pt 0
|
( -50 25 $zmax) // pt 0
|
||||||
( 0 25 25) // pt 1
|
( 0 25 $zmax) // pt 1
|
||||||
( -50 75 25) // pt 2
|
( -50 75 $zmax) // pt 2
|
||||||
( 0 75 25) // pt 3
|
( 0 75 $zmax) // pt 3
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 25) // pt 4
|
( -500 -75 $zmax) // pt 4
|
||||||
( 0 -75 25) // pt 5
|
( 0 -75 $zmax) // pt 5
|
||||||
( -500 -25 25) // pt 6
|
( -500 -25 $zmax) // pt 6
|
||||||
( 0 -25 25) // pt 7
|
( 0 -25 $zmax) // pt 7
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 25) // pt 8
|
( 25 0 $zmax) // pt 8
|
||||||
( 75 0 25) // pt 9
|
( 75 0 $zmax) // pt 9
|
||||||
// back-plane: z = -25mm
|
// back-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 -25) // pt 0 + 10
|
( -50 25 $zmin) // pt 0 + 10
|
||||||
( 0 25 -25) // pt 1 + 10
|
( 0 25 $zmin) // pt 1 + 10
|
||||||
( -50 75 -25) // pt 2 + 10
|
( -50 75 $zmin) // pt 2 + 10
|
||||||
( 0 75 -25) // pt 3 + 10
|
( 0 75 $zmin) // pt 3 + 10
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 -25) // pt 4 + 10
|
( -500 -75 $zmin) // pt 4 + 10
|
||||||
( 0 -75 -25) // pt 5 + 10
|
( 0 -75 $zmin) // pt 5 + 10
|
||||||
( -500 -25 -25) // pt 7 + 10
|
( -500 -25 $zmin) // pt 7 + 10
|
||||||
( 0 -25 -25) // pt 8 + 10
|
( 0 -25 $zmin) // pt 8 + 10
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 -25) // pt 8 + 10
|
( 25 0 $zmin) // pt 8 + 10
|
||||||
( 75 0 -25) // pt 9 + 10
|
( 75 0 $zmin) // pt 9 + 10
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -60,15 +63,15 @@ blocks
|
|||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// block 2
|
// block 2
|
||||||
arc 1 8 (17.678 17.678 25)
|
arc 1 8 origin (0 0 $zmax)
|
||||||
arc 11 18 (17.678 17.678 -25)
|
arc 3 9 origin (0 0 $zmax)
|
||||||
arc 3 9 (53.033 53.033 25)
|
arc 11 18 origin (0 0 $zmin)
|
||||||
arc 13 19 (53.033 53.033 -25)
|
arc 13 19 origin (0 0 $zmin)
|
||||||
// block 3
|
// block 3
|
||||||
arc 7 8 (17.678 -17.678 25)
|
arc 7 8 origin (0 0 $zmax)
|
||||||
arc 17 18 (17.678 -17.678 -25)
|
arc 5 9 origin (0 0 $zmax)
|
||||||
arc 5 9 (53.033 -53.033 25)
|
arc 17 18 origin (0 0 $zmin)
|
||||||
arc 15 19 (53.033 -53.033 -25)
|
arc 15 19 origin (0 0 $zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,36 +16,39 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.001;
|
scale 0.001;
|
||||||
|
|
||||||
|
zmin -25;
|
||||||
|
zmax 25;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// front-plane: z = +25mm
|
// front-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 25) // pt 0
|
( -50 25 $zmax) // pt 0
|
||||||
( 0 25 25) // pt 1
|
( 0 25 $zmax) // pt 1
|
||||||
( -50 75 25) // pt 2
|
( -50 75 $zmax) // pt 2
|
||||||
( 0 75 25) // pt 3
|
( 0 75 $zmax) // pt 3
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 25) // pt 4
|
( -500 -75 $zmax) // pt 4
|
||||||
( 0 -75 25) // pt 5
|
( 0 -75 $zmax) // pt 5
|
||||||
( -500 -25 25) // pt 6
|
( -500 -25 $zmax) // pt 6
|
||||||
( 0 -25 25) // pt 7
|
( 0 -25 $zmax) // pt 7
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 25) // pt 8
|
( 25 0 $zmax) // pt 8
|
||||||
( 75 0 25) // pt 9
|
( 75 0 $zmax) // pt 9
|
||||||
// back-plane: z = -25mm
|
// back-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 -25) // pt 0 + 10
|
( -50 25 $zmin) // pt 0 + 10
|
||||||
( 0 25 -25) // pt 1 + 10
|
( 0 25 $zmin) // pt 1 + 10
|
||||||
( -50 75 -25) // pt 2 + 10
|
( -50 75 $zmin) // pt 2 + 10
|
||||||
( 0 75 -25) // pt 3 + 10
|
( 0 75 $zmin) // pt 3 + 10
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 -25) // pt 4 + 10
|
( -500 -75 $zmin) // pt 4 + 10
|
||||||
( 0 -75 -25) // pt 5 + 10
|
( 0 -75 $zmin) // pt 5 + 10
|
||||||
( -500 -25 -25) // pt 7 + 10
|
( -500 -25 $zmin) // pt 7 + 10
|
||||||
( 0 -25 -25) // pt 8 + 10
|
( 0 -25 $zmin) // pt 8 + 10
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 -25) // pt 8 + 10
|
( 25 0 $zmin) // pt 8 + 10
|
||||||
( 75 0 -25) // pt 9 + 10
|
( 75 0 $zmin) // pt 9 + 10
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -60,15 +63,15 @@ blocks
|
|||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// block 2
|
// block 2
|
||||||
arc 1 8 (17.678 17.678 25)
|
arc 1 8 origin (0 0 $zmax)
|
||||||
arc 11 18 (17.678 17.678 -25)
|
arc 3 9 origin (0 0 $zmax)
|
||||||
arc 3 9 (53.033 53.033 25)
|
arc 11 18 origin (0 0 $zmin)
|
||||||
arc 13 19 (53.033 53.033 -25)
|
arc 13 19 origin (0 0 $zmin)
|
||||||
// block 3
|
// block 3
|
||||||
arc 7 8 (17.678 -17.678 25)
|
arc 7 8 origin (0 0 $zmax)
|
||||||
arc 17 18 (17.678 -17.678 -25)
|
arc 5 9 origin (0 0 $zmax)
|
||||||
arc 5 9 (53.033 -53.033 25)
|
arc 17 18 origin (0 0 $zmin)
|
||||||
arc 15 19 (53.033 -53.033 -25)
|
arc 15 19 origin (0 0 $zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -53,14 +53,14 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 (0.00092387 0.00038268 0)
|
arc 0 5 origin (0 0 0)
|
||||||
arc 5 10 (0.00038268 0.00092387 0)
|
arc 5 10 origin (0 0 0)
|
||||||
arc 1 4 (0.0351074 0.0145419 0)
|
arc 1 4 origin (0 0 0)
|
||||||
arc 4 9 (0.0145419 0.0351074 0)
|
arc 4 9 origin (0 0 0)
|
||||||
arc 11 16 (0.00092387 0.00038268 0.5)
|
arc 11 16 origin (0 0 0.5)
|
||||||
arc 16 21 (0.00038268 0.00092387 0.5)
|
arc 16 21 origin (0 0 0.5)
|
||||||
arc 12 15 (0.0351074 0.0145419 0.5)
|
arc 12 15 origin (0 0 0.5)
|
||||||
arc 15 20 (0.0145419 0.0351074 0.5)
|
arc 15 20 origin (0 0 0.5)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -14,49 +14,54 @@ FoamFile
|
|||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Almost identical to basic/potentialFoam/cylinder
|
||||||
|
|
||||||
scale 0.016;
|
scale 0.016;
|
||||||
|
|
||||||
|
// Front/back locations
|
||||||
|
zmin 0;
|
||||||
|
zmax 0.5;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
(0.5 0 0)
|
(0.5 0 $zmin)
|
||||||
(1 0 0)
|
(1 0 $zmin)
|
||||||
(2 0 0)
|
(2 0 $zmin)
|
||||||
(2 0.707107 0)
|
(2 0.707107 $zmin)
|
||||||
(0.707107 0.707107 0)
|
(0.707107 0.707107 $zmin)
|
||||||
(0.353553 0.353553 0)
|
(0.353553 0.353553 $zmin)
|
||||||
(2 2 0)
|
(2 2 $zmin)
|
||||||
(0.707107 2 0)
|
(0.707107 2 $zmin)
|
||||||
(0 2 0)
|
(0 2 $zmin)
|
||||||
(0 1 0)
|
(0 1 $zmin)
|
||||||
(0 0.5 0)
|
(0 0.5 $zmin)
|
||||||
(-0.5 0 0)
|
(-0.5 0 $zmin)
|
||||||
(-1 0 0)
|
(-1 0 $zmin)
|
||||||
(-2 0 0)
|
(-2 0 $zmin)
|
||||||
(-2 0.707107 0)
|
(-2 0.707107 $zmin)
|
||||||
(-0.707107 0.707107 0)
|
(-0.707107 0.707107 $zmin)
|
||||||
(-0.353553 0.353553 0)
|
(-0.353553 0.353553 $zmin)
|
||||||
(-2 2 0)
|
(-2 2 $zmin)
|
||||||
(-0.707107 2 0)
|
(-0.707107 2 $zmin)
|
||||||
|
(0.5 0 $zmax)
|
||||||
(0.5 0 0.5)
|
(1 0 $zmax)
|
||||||
(1 0 0.5)
|
(2 0 $zmax)
|
||||||
(2 0 0.5)
|
(2 0.707107 $zmax)
|
||||||
(2 0.707107 0.5)
|
(0.707107 0.707107 $zmax)
|
||||||
(0.707107 0.707107 0.5)
|
(0.353553 0.353553 $zmax)
|
||||||
(0.353553 0.353553 0.5)
|
(2 2 $zmax)
|
||||||
(2 2 0.5)
|
(0.707107 2 $zmax)
|
||||||
(0.707107 2 0.5)
|
(0 2 $zmax)
|
||||||
(0 2 0.5)
|
(0 1 $zmax)
|
||||||
(0 1 0.5)
|
(0 0.5 $zmax)
|
||||||
(0 0.5 0.5)
|
(-0.5 0 $zmax)
|
||||||
(-0.5 0 0.5)
|
(-1 0 $zmax)
|
||||||
(-1 0 0.5)
|
(-2 0 $zmax)
|
||||||
(-2 0 0.5)
|
(-2 0.707107 $zmax)
|
||||||
(-2 0.707107 0.5)
|
(-0.707107 0.707107 $zmax)
|
||||||
(-0.707107 0.707107 0.5)
|
(-0.353553 0.353553 $zmax)
|
||||||
(-0.353553 0.353553 0.5)
|
(-2 2 $zmax)
|
||||||
(-2 2 0.5)
|
(-0.707107 2 $zmax)
|
||||||
(-0.707107 2 0.5)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -75,22 +80,24 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 (0.469846 0.17101 0)
|
// Inner cylinder
|
||||||
arc 5 10 (0.17101 0.469846 0)
|
arc 0 5 origin (0 0 $zmin)
|
||||||
arc 1 4 (0.939693 0.34202 0)
|
arc 5 10 origin (0 0 $zmin)
|
||||||
arc 4 9 (0.34202 0.939693 0)
|
arc 1 4 origin (0 0 $zmin)
|
||||||
arc 19 24 (0.469846 0.17101 0.5)
|
arc 4 9 origin (0 0 $zmin)
|
||||||
arc 24 29 (0.17101 0.469846 0.5)
|
arc 19 24 origin (0 0 $zmax)
|
||||||
arc 20 23 (0.939693 0.34202 0.5)
|
arc 24 29 origin (0 0 $zmax)
|
||||||
arc 23 28 (0.34202 0.939693 0.5)
|
arc 20 23 origin (0 0 $zmax)
|
||||||
arc 11 16 (-0.469846 0.17101 0)
|
arc 23 28 origin (0 0 $zmax)
|
||||||
arc 16 10 (-0.17101 0.469846 0)
|
// Intermediate cylinder
|
||||||
arc 12 15 (-0.939693 0.34202 0)
|
arc 11 16 origin (0 0 $zmin)
|
||||||
arc 15 9 (-0.34202 0.939693 0)
|
arc 16 10 origin (0 0 $zmin)
|
||||||
arc 30 35 (-0.469846 0.17101 0.5)
|
arc 12 15 origin (0 0 $zmin)
|
||||||
arc 35 29 (-0.17101 0.469846 0.5)
|
arc 15 9 origin (0 0 $zmin)
|
||||||
arc 31 34 (-0.939693 0.34202 0.5)
|
arc 30 35 origin (0 0 $zmax)
|
||||||
arc 34 28 (-0.34202 0.939693 0.5)
|
arc 35 29 origin (0 0 $zmax)
|
||||||
|
arc 31 34 origin (0 0 $zmax)
|
||||||
|
arc 34 28 origin (0 0 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
patches
|
patches
|
||||||
|
|||||||
@ -17,57 +17,60 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.1;
|
scale 0.1;
|
||||||
|
|
||||||
|
zmin 0;
|
||||||
|
zmax 2;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
( 0.500 0.000 0.000)
|
(0.500 0.000 $zmin)
|
||||||
( 0.369 0.338 0.000)
|
(0.369 0.338 $zmin)
|
||||||
( 0.338 0.369 0.000)
|
(0.338 0.369 $zmin)
|
||||||
( 0.000 0.500 0.000)
|
(0.000 0.500 $zmin)
|
||||||
( 0.737 0.676 0.000)
|
(0.737 0.676 $zmin)
|
||||||
( 0.074 0.068 0.000)
|
(0.074 0.068 $zmin)
|
||||||
( 0.676 0.737 0.000)
|
(0.676 0.737 $zmin)
|
||||||
( 0.068 0.074 0.000)
|
(0.068 0.074 $zmin)
|
||||||
( 0.000 1.000 0.000)
|
(0.000 1.000 $zmin)
|
||||||
( 1.000 0.000 0.000)
|
(1.000 0.000 $zmin)
|
||||||
( 0.100 0.000 0.000)
|
(0.100 0.000 $zmin)
|
||||||
( 0.000 0.100 0.000)
|
(0.000 0.100 $zmin)
|
||||||
( 0.500 0.000 2.000)
|
(0.500 0.000 $zmax)
|
||||||
( 0.369 0.338 2.000)
|
(0.369 0.338 $zmax)
|
||||||
( 0.338 0.369 2.000)
|
(0.338 0.369 $zmax)
|
||||||
( 0.000 0.500 2.000)
|
(0.000 0.500 $zmax)
|
||||||
( 0.737 0.676 2.000)
|
(0.737 0.676 $zmax)
|
||||||
( 0.074 0.068 2.000)
|
(0.074 0.068 $zmax)
|
||||||
( 0.676 0.737 2.000)
|
(0.676 0.737 $zmax)
|
||||||
( 0.068 0.074 2.000)
|
(0.068 0.074 $zmax)
|
||||||
( 0.000 1.000 2.000)
|
(0.000 1.000 $zmax)
|
||||||
( 1.000 0.000 2.000)
|
(1.000 0.000 $zmax)
|
||||||
( 0.100 0.000 2.000)
|
(0.100 0.000 $zmax)
|
||||||
( 0.000 0.100 2.000)
|
(0.000 0.100 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
hex (1 0 9 4 13 12 21 16) (10 20 40) simpleGrading (1 1 1)
|
hex (1 0 9 4 13 12 21 16) (10 20 40) simpleGrading (1 1 1)
|
||||||
hex (2 1 4 6 14 13 16 18) (2 20 40) simpleGrading (1 1 1)
|
hex (2 1 4 6 14 13 16 18) (2 20 40) simpleGrading (1 1 1)
|
||||||
hex (3 2 6 8 15 14 18 20) (10 20 40) simpleGrading (1 1 1)
|
hex (3 2 6 8 15 14 18 20) (10 20 40) simpleGrading (1 1 1)
|
||||||
hex (5 10 0 1 17 22 12 13) (10 20 40) simpleGrading (1 1 1)
|
hex (5 10 0 1 17 22 12 13) (10 20 40) simpleGrading (1 1 1)
|
||||||
hex (11 7 2 3 23 19 14 15) (10 20 40) simpleGrading (1 1 1)
|
hex (11 7 2 3 23 19 14 15) (10 20 40) simpleGrading (1 1 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 1 ( 0.470 0.171 0.000 )
|
arc 0 1 origin (0 0 $zmin)
|
||||||
arc 12 13 ( 0.470 0.171 2.000 )
|
arc 12 13 origin (0 0 $zmax)
|
||||||
arc 2 3 ( 0.171 0.470 0.000 )
|
arc 2 3 origin (0 0 $zmin)
|
||||||
arc 14 15 ( 0.171 0.470 2.000 )
|
arc 14 15 origin (0 0 $zmax)
|
||||||
arc 9 4 ( 0.940 0.342 0.000 )
|
arc 9 4 origin (0 0 $zmin)
|
||||||
arc 21 16 ( 0.940 0.342 2.000 )
|
arc 21 16 origin (0 0 $zmax)
|
||||||
arc 5 10 ( 0.094 0.034 0.000 )
|
arc 5 10 origin (0 0 $zmin)
|
||||||
arc 17 22 ( 0.094 0.034 2.000 )
|
arc 17 22 origin (0 0 $zmax)
|
||||||
arc 6 8 ( 0.342 0.940 0.000 )
|
arc 6 8 origin (0 0 $zmin)
|
||||||
arc 18 20 ( 0.342 0.940 2.000 )
|
arc 18 20 origin (0 0 $zmax)
|
||||||
arc 11 7 ( 0.034 0.094 0.000 )
|
arc 11 7 origin (0 0 $zmin)
|
||||||
arc 23 19 ( 0.034 0.094 2.000 )
|
arc 23 19 origin (0 0 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,72 +16,75 @@ FoamFile
|
|||||||
|
|
||||||
scale 1;
|
scale 1;
|
||||||
|
|
||||||
|
zmin -1;
|
||||||
|
zmax 1;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
(1 0 -1)
|
(1 0 $zmin)
|
||||||
(1.4 0 -1)
|
(1.4 0 $zmin)
|
||||||
(5 0 -1)
|
(5 0 $zmin)
|
||||||
(5 0.989949 -1)
|
(5 0.989949 $zmin)
|
||||||
(0.989949 0.989949 -1)
|
(0.989949 0.989949 $zmin)
|
||||||
(0.707107 0.707107 -1)
|
(0.707107 0.707107 $zmin)
|
||||||
(5 2.5 -1)
|
(5 2.5 $zmin)
|
||||||
(0.989949 2.5 -1)
|
(0.989949 2.5 $zmin)
|
||||||
(0 2.5 -1)
|
(0 2.5 $zmin)
|
||||||
(0 1.4 -1)
|
(0 1.4 $zmin)
|
||||||
(0 1 -1)
|
(0 1 $zmin)
|
||||||
(-1 0 -1)
|
(-1 0 $zmin)
|
||||||
(-1.4 0 -1)
|
(-1.4 0 $zmin)
|
||||||
(-5 0 -1)
|
(-5 0 $zmin)
|
||||||
(-5 0.989949 -1)
|
(-5 0.989949 $zmin)
|
||||||
(-0.989949 0.989949 -1)
|
(-0.989949 0.989949 $zmin)
|
||||||
(-0.707107 0.707107 -1)
|
(-0.707107 0.707107 $zmin)
|
||||||
(-5 2.5 -1)
|
(-5 2.5 $zmin)
|
||||||
(-0.989949 2.5 -1)
|
(-0.989949 2.5 $zmin)
|
||||||
(5 -0.989949 -1)
|
(5 -0.989949 $zmin)
|
||||||
(0.989949 -0.989949 -1)
|
(0.989949 -0.989949 $zmin)
|
||||||
(0.707107 -0.707107 -1)
|
(0.707107 -0.707107 $zmin)
|
||||||
(5 -1.5 -1)
|
(5 -1.5 $zmin)
|
||||||
(0.989949 -1.5 -1)
|
(0.989949 -1.5 $zmin)
|
||||||
(0 -1.5 -1)
|
(0 -1.5 $zmin)
|
||||||
(0 -1.4 -1)
|
(0 -1.4 $zmin)
|
||||||
(0 -1 -1)
|
(0 -1 $zmin)
|
||||||
(-5 -0.989949 -1)
|
(-5 -0.989949 $zmin)
|
||||||
(-0.989949 -0.989949 -1)
|
(-0.989949 -0.989949 $zmin)
|
||||||
(-0.707107 -0.707107 -1)
|
(-0.707107 -0.707107 $zmin)
|
||||||
(-5 -1.5 -1)
|
(-5 -1.5 $zmin)
|
||||||
(-0.989949 -1.5 -1)
|
(-0.989949 -1.5 $zmin)
|
||||||
(1 0 1)
|
(1 0 $zmax)
|
||||||
(1.4 0 1)
|
(1.4 0 $zmax)
|
||||||
(5 0 1)
|
(5 0 $zmax)
|
||||||
(5 0.989949 1)
|
(5 0.989949 $zmax)
|
||||||
(0.989949 0.989949 1)
|
(0.989949 0.989949 $zmax)
|
||||||
(0.707107 0.707107 1)
|
(0.707107 0.707107 $zmax)
|
||||||
(5 2.5 1)
|
(5 2.5 $zmax)
|
||||||
(0.989949 2.5 1)
|
(0.989949 2.5 $zmax)
|
||||||
(0 2.5 1)
|
(0 2.5 $zmax)
|
||||||
(0 1.4 1)
|
(0 1.4 $zmax)
|
||||||
(0 1 1)
|
(0 1 $zmax)
|
||||||
(-1 0 1)
|
(-1 0 $zmax)
|
||||||
(-1.4 0 1)
|
(-1.4 0 $zmax)
|
||||||
(-5 0 1)
|
(-5 0 $zmax)
|
||||||
(-5 0.989949 1)
|
(-5 0.989949 $zmax)
|
||||||
(-0.989949 0.989949 1)
|
(-0.989949 0.989949 $zmax)
|
||||||
(-0.707107 0.707107 1)
|
(-0.707107 0.707107 $zmax)
|
||||||
(-5 2.5 1)
|
(-5 2.5 $zmax)
|
||||||
(-0.989949 2.5 1)
|
(-0.989949 2.5 $zmax)
|
||||||
(5 -0.989949 1)
|
(5 -0.989949 $zmax)
|
||||||
(0.989949 -0.989949 1)
|
(0.989949 -0.989949 $zmax)
|
||||||
(0.707107 -0.707107 1)
|
(0.707107 -0.707107 $zmax)
|
||||||
(5 -1.5 1)
|
(5 -1.5 $zmax)
|
||||||
(0.989949 -1.5 1)
|
(0.989949 -1.5 $zmax)
|
||||||
(0 -1.5 1)
|
(0 -1.5 $zmax)
|
||||||
(0 -1.4 1)
|
(0 -1.4 $zmax)
|
||||||
(0 -1 1)
|
(0 -1 $zmax)
|
||||||
(-5 -0.989949 1)
|
(-5 -0.989949 $zmax)
|
||||||
(-0.989949 -0.989949 1)
|
(-0.989949 -0.989949 $zmax)
|
||||||
(-0.707107 -0.707107 1)
|
(-0.707107 -0.707107 $zmax)
|
||||||
(-5 -1.5 1)
|
(-5 -1.5 $zmax)
|
||||||
(-0.989949 -1.5 1)
|
(-0.989949 -1.5 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -110,38 +113,38 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 5 0 (0.92388 0.382683 -1)
|
arc 5 0 origin (0 0 $zmin)
|
||||||
arc 5 10 (0.382683 0.923879 -1)
|
arc 5 10 origin (0 0 $zmin)
|
||||||
arc 1 4 (1.29343 0.535757 -1)
|
arc 1 4 origin (0 0 $zmin)
|
||||||
arc 4 9 (0.535757 1.29343 -1)
|
arc 4 9 origin (0 0 $zmin)
|
||||||
arc 32 37 (0.92388 0.382683 1)
|
arc 32 37 origin (0 0 $zmax)
|
||||||
arc 37 42 (0.382683 0.923879 1)
|
arc 37 42 origin (0 0 $zmax)
|
||||||
arc 33 36 (1.29343 0.535757 1)
|
arc 33 36 origin (0 0 $zmax)
|
||||||
arc 36 41 (0.535757 1.29343 1)
|
arc 36 41 origin (0 0 $zmax)
|
||||||
arc 11 16 (-0.923879 0.382683 -1)
|
arc 11 16 origin (0 0 $zmin)
|
||||||
arc 16 10 (-0.382683 0.923879 -1)
|
arc 16 10 origin (0 0 $zmin)
|
||||||
arc 12 15 (-1.29343 0.535757 -1)
|
arc 12 15 origin (0 0 $zmin)
|
||||||
arc 15 9 (-0.535757 1.29343 -1)
|
arc 15 9 origin (0 0 $zmin)
|
||||||
arc 43 48 (-0.923879 0.382683 1)
|
arc 43 48 origin (0 0 $zmax)
|
||||||
arc 48 42 (-0.382683 0.923879 1)
|
arc 48 42 origin (0 0 $zmax)
|
||||||
arc 44 47 (-1.29343 0.535757 1)
|
arc 44 47 origin (0 0 $zmax)
|
||||||
arc 47 41 (-0.535757 1.29343 1)
|
arc 47 41 origin (0 0 $zmax)
|
||||||
arc 0 21 (0.923879 -0.382683 -1)
|
arc 0 21 origin (0 0 $zmin)
|
||||||
arc 21 26 (0.382683 -0.923879 -1)
|
arc 21 26 origin (0 0 $zmin)
|
||||||
arc 1 20 (1.29343 -0.535757 -1)
|
arc 1 20 origin (0 0 $zmin)
|
||||||
arc 20 25 (0.535757 -1.29343 -1)
|
arc 20 25 origin (0 0 $zmin)
|
||||||
arc 32 53 (0.923879 -0.382683 1)
|
arc 32 53 origin (0 0 $zmax)
|
||||||
arc 53 58 (0.382683 -0.923879 1)
|
arc 53 58 origin (0 0 $zmax)
|
||||||
arc 33 52 (1.29343 -0.535757 1)
|
arc 33 52 origin (0 0 $zmax)
|
||||||
arc 52 57 (0.535757 -1.29343 1)
|
arc 52 57 origin (0 0 $zmax)
|
||||||
arc 11 29 (-0.923879 -0.382683 -1)
|
arc 11 29 origin (0 0 $zmin)
|
||||||
arc 29 26 (-0.382683 -0.923879 -1)
|
arc 29 26 origin (0 0 $zmin)
|
||||||
arc 12 28 (-1.29343 -0.535757 -1)
|
arc 12 28 origin (0 0 $zmin)
|
||||||
arc 28 25 (-0.535757 -1.29343 -1)
|
arc 28 25 origin (0 0 $zmin)
|
||||||
arc 43 61 (-0.923879 -0.382683 1)
|
arc 43 61 origin (0 0 $zmax)
|
||||||
arc 61 58 (-0.382683 -0.923879 1)
|
arc 61 58 origin (0 0 $zmax)
|
||||||
arc 44 60 (-1.29343 -0.535757 1)
|
arc 44 60 origin (0 0 $zmax)
|
||||||
arc 60 57 (-0.535757 -1.29343 1)
|
arc 60 57 origin (0 0 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -23,18 +23,6 @@ x3 #eval{ 10.0*$R };
|
|||||||
xOutlet #eval{ 18.6667*$R };
|
xOutlet #eval{ 18.6667*$R };
|
||||||
xInlet #eval{ -10.125*$R };
|
xInlet #eval{ -10.125*$R };
|
||||||
|
|
||||||
RsinPi8 #eval{ $R*sin(0.125*pi()) };
|
|
||||||
RsinPi8n #eval{ -$RsinPi8 };
|
|
||||||
RcosPi8 #eval{ $R*cos(0.125*pi()) };
|
|
||||||
RcosPi8n #eval{ -$RcosPi8 };
|
|
||||||
RsinPi4 #eval{ $R*sin(0.25*pi()) };
|
|
||||||
|
|
||||||
x2sinPi8 #eval{ $x2*sin(0.125*pi()) };
|
|
||||||
x2sinPi8n #eval{ -$x2sinPi8 };
|
|
||||||
x2cosPi8 #eval{ $x2*cos(0.125*pi()) };
|
|
||||||
x2cosPi8n #eval{ -$x2cosPi8 };
|
|
||||||
x2sinPi4 #eval{ $x2*sin(0.25*pi()) };
|
|
||||||
|
|
||||||
z0 -0.0075;
|
z0 -0.0075;
|
||||||
z1 0.0075;
|
z1 0.0075;
|
||||||
nz 1;
|
nz 1;
|
||||||
@ -49,15 +37,18 @@ vertices #codeStream
|
|||||||
|
|
||||||
code
|
code
|
||||||
#{
|
#{
|
||||||
|
// sin(45), cos(45)
|
||||||
|
const scalar sqrt05 = sqrt(0.5);
|
||||||
|
|
||||||
pointField points(19);
|
pointField points(19);
|
||||||
points[0] = point($R, 0, $z0);
|
points[0] = point($R, 0, $z0);
|
||||||
points[1] = point($x2, 0, $z0);
|
points[1] = point($x2, 0, $z0);
|
||||||
points[2] = point($x3, 0, $z0);
|
points[2] = point($x3, 0, $z0);
|
||||||
points[3] = point($x3, $x2sinPi4, $z0);
|
points[3] = point($x3, $x2*sqrt05, $z0);
|
||||||
points[4] = point($x2sinPi4, $x2sinPi4, $z0);
|
points[4] = point($x2*sqrt05, $x2*sqrt05, $z0);
|
||||||
points[5] = point($RsinPi4, $RsinPi4, $z0);
|
points[5] = point($R*sqrt05, $R*sqrt05, $z0);
|
||||||
points[6] = point($x3, $x3, $z0);
|
points[6] = point($x3, $x3, $z0);
|
||||||
points[7] = point($x2sinPi4, $x3, $z0);
|
points[7] = point($x2*sqrt05, $x3, $z0);
|
||||||
|
|
||||||
// Mirror +x points to -x side
|
// Mirror +x points to -x side
|
||||||
points[11] = point(-points[0].x(), points[0].y(), points[0].z());
|
points[11] = point(-points[0].x(), points[0].y(), points[0].z());
|
||||||
@ -76,7 +67,7 @@ vertices #codeStream
|
|||||||
|
|
||||||
// Mirror -z points to +z side
|
// Mirror -z points to +z side
|
||||||
label sz = points.size();
|
label sz = points.size();
|
||||||
points.setSize(2*sz);
|
points.resize(2*sz);
|
||||||
for (label i = 0; i < sz; ++i)
|
for (label i = 0; i < sz; ++i)
|
||||||
{
|
{
|
||||||
const point& pt = points[i];
|
const point& pt = points[i];
|
||||||
@ -86,7 +77,7 @@ vertices #codeStream
|
|||||||
// Add an inner cylinder
|
// Add an inner cylinder
|
||||||
sz = points.size();
|
sz = points.size();
|
||||||
label nAdd = 6;
|
label nAdd = 6;
|
||||||
points.setSize(sz + nAdd);
|
points.resize(sz + nAdd);
|
||||||
|
|
||||||
// Points within the inner cylinder
|
// Points within the inner cylinder
|
||||||
points[sz] = point(0, 0, $z0);
|
points[sz] = point(0, 0, $z0);
|
||||||
@ -102,7 +93,7 @@ vertices #codeStream
|
|||||||
|
|
||||||
// Mirror -z points to +z side
|
// Mirror -z points to +z side
|
||||||
sz = points.size();
|
sz = points.size();
|
||||||
points.setSize(sz + nAdd);
|
points.resize(sz + nAdd);
|
||||||
for (label i = 0; i < nAdd; ++i)
|
for (label i = 0; i < nAdd; ++i)
|
||||||
{
|
{
|
||||||
const point& pt = points[i+sz-nAdd];
|
const point& pt = points[i+sz-nAdd];
|
||||||
@ -112,21 +103,21 @@ vertices #codeStream
|
|||||||
// Add downstream and upstream blocks
|
// Add downstream and upstream blocks
|
||||||
sz = points.size();
|
sz = points.size();
|
||||||
nAdd = 6;
|
nAdd = 6;
|
||||||
points.setSize(sz + nAdd);
|
points.resize(sz + nAdd);
|
||||||
|
|
||||||
// Points on outlet
|
// Points on outlet
|
||||||
points[sz] = point($xOutlet, 0, $z0);
|
points[sz] = point($xOutlet, 0, $z0);
|
||||||
points[sz + 1] = point($xOutlet, $x3, $z0);
|
points[sz + 1] = point($xOutlet, $x3, $z0);
|
||||||
points[sz + 4] = point($xOutlet, $x2sinPi4, $z0);
|
points[sz + 4] = point($xOutlet, $x2*sqrt05, $z0);
|
||||||
|
|
||||||
// Points on inlet
|
// Points on inlet
|
||||||
points[sz + 2] = point($xInlet, 0, $z0);
|
points[sz + 2] = point($xInlet, 0, $z0);
|
||||||
points[sz + 3] = point($xInlet, $x3, $z0);
|
points[sz + 3] = point($xInlet, $x3, $z0);
|
||||||
points[sz + 5] = point($xInlet, $x2sinPi4, $z0);
|
points[sz + 5] = point($xInlet, $x2*sqrt05, $z0);
|
||||||
|
|
||||||
// Mirror -z points to +z side
|
// Mirror -z points to +z side
|
||||||
sz = points.size();
|
sz = points.size();
|
||||||
points.setSize(sz + nAdd);
|
points.resize(sz + nAdd);
|
||||||
for (label i = 0; i < nAdd; ++i)
|
for (label i = 0; i < nAdd; ++i)
|
||||||
{
|
{
|
||||||
const point& pt = points[i + sz - nAdd];
|
const point& pt = points[i + sz - nAdd];
|
||||||
@ -158,22 +149,22 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 ($RcosPi8 $RsinPi8 $z0)
|
arc 0 5 origin (0 0 $z0)
|
||||||
arc 5 10 ($RsinPi8 $RcosPi8 $z0)
|
arc 5 10 origin (0 0 $z0)
|
||||||
arc 1 4 ($x2cosPi8 $x2sinPi8 $z0)
|
arc 1 4 origin (0 0 $z0)
|
||||||
arc 4 9 ($x2sinPi8 $x2cosPi8 $z0)
|
arc 4 9 origin (0 0 $z0)
|
||||||
arc 19 24 ($RcosPi8 $RsinPi8 $z1)
|
arc 19 24 origin (0 0 $z1)
|
||||||
arc 24 29 ($RsinPi8 $RcosPi8 $z1)
|
arc 24 29 origin (0 0 $z1)
|
||||||
arc 20 23 ($x2cosPi8 $x2sinPi8 $z1)
|
arc 20 23 origin (0 0 $z1)
|
||||||
arc 23 28 ($x2sinPi8 $x2cosPi8 $z1)
|
arc 23 28 origin (0 0 $z1)
|
||||||
arc 11 16 ($RcosPi8n $RsinPi8 $z0)
|
arc 11 16 origin (0 0 $z0)
|
||||||
arc 16 10 ($RsinPi8n $RcosPi8 $z0)
|
arc 16 10 origin (0 0 $z0)
|
||||||
arc 12 15 ($x2cosPi8n $x2sinPi8 $z0)
|
arc 12 15 origin (0 0 $z0)
|
||||||
arc 15 9 ($x2sinPi8n $x2cosPi8 $z0)
|
arc 15 9 origin (0 0 $z0)
|
||||||
arc 30 35 ($RcosPi8n $RsinPi8 $z1)
|
arc 30 35 origin (0 0 $z1)
|
||||||
arc 35 29 ($RsinPi8n $RcosPi8 $z1)
|
arc 35 29 origin (0 0 $z1)
|
||||||
arc 31 34 ($x2cosPi8n $x2sinPi8 $z1)
|
arc 31 34 origin (0 0 $z1)
|
||||||
arc 34 28 ($x2sinPi8n $x2cosPi8 $z1)
|
arc 34 28 origin (0 0 $z1)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -74,14 +74,14 @@ edges #codeStream
|
|||||||
|
|
||||||
code
|
code
|
||||||
#{
|
#{
|
||||||
const scalar xMin = 0.3;
|
constexpr scalar xMin = 0.3;
|
||||||
const scalar xMax = 1.2;
|
constexpr scalar xMax = 1.2;
|
||||||
const label nPoints = 100;
|
constexpr label nPoints = 100;
|
||||||
const scalar dx = (xMax - xMin)/scalar(nPoints - 1);
|
constexpr scalar dx = (xMax - xMin)/scalar(nPoints - 1);
|
||||||
|
constexpr scalar pi = constant::mathematical::pi;
|
||||||
|
|
||||||
os << "(" << nl << "spline 2 3" << nl;
|
os << "(" << nl << "spline 2 3" << nl;
|
||||||
pointField profile(nPoints);
|
pointField profile(nPoints);
|
||||||
const scalar pi = constant::mathematical::pi;
|
|
||||||
|
|
||||||
for (label i = 0; i < nPoints; ++i)
|
for (label i = 0; i < nPoints; ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -25,34 +25,33 @@ halfAngle 45.0;
|
|||||||
radius 0.5;
|
radius 0.5;
|
||||||
|
|
||||||
y #eval{ $radius*sin(degToRad($halfAngle)) };
|
y #eval{ $radius*sin(degToRad($halfAngle)) };
|
||||||
minY #eval{ -1*$y };
|
|
||||||
z #eval{ $radius*cos(degToRad($halfAngle)) };
|
z #eval{ $radius*cos(degToRad($halfAngle)) };
|
||||||
|
minY #eval{ -1*$y };
|
||||||
minZ #eval{ -1*$z };
|
minZ #eval{ -1*$z };
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
(0.0 0.0 0) //0
|
(0 0 0) //0
|
||||||
(10 0.0 0)
|
(10 0 0) //1
|
||||||
(10 0.0 0) //2
|
(10 0 0) //2
|
||||||
(0.0 0.0 0)
|
(0 0 0) //3
|
||||||
|
|
||||||
(0.0 $minY $z) //4
|
(0 $minY $z) //4
|
||||||
(10 $minY $z)
|
(10 $minY $z) //5
|
||||||
(10 $y $z) //6
|
(10 $y $z) //6
|
||||||
(0.0 $y $z)
|
(0 $y $z) //7
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
// inlet block
|
hex (0 1 2 3 4 5 6 7) (50 5 5) simpleGrading (1 1 1)
|
||||||
hex (0 1 2 3 4 5 6 7) (50 5 5) simpleGrading (1 1 1)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 4 7 (0 0 $radius)
|
arc 4 7 origin (0 0 0)
|
||||||
arc 5 6 (10 0 $radius)
|
arc 5 6 origin (10 0 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -16,36 +16,39 @@ FoamFile
|
|||||||
|
|
||||||
scale 0.001;
|
scale 0.001;
|
||||||
|
|
||||||
|
zmin -25;
|
||||||
|
zmax 25;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// front-plane: z = +25mm
|
// front-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 25) // pt 0
|
( -50 25 $zmax) // pt 0
|
||||||
( 0 25 25) // pt 1
|
( 0 25 $zmax) // pt 1
|
||||||
( -50 75 25) // pt 2
|
( -50 75 $zmax) // pt 2
|
||||||
( 0 75 25) // pt 3
|
( 0 75 $zmax) // pt 3
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 25) // pt 4
|
( -500 -75 $zmax) // pt 4
|
||||||
( 0 -75 25) // pt 5
|
( 0 -75 $zmax) // pt 5
|
||||||
( -500 -25 25) // pt 6
|
( -500 -25 $zmax) // pt 6
|
||||||
( 0 -25 25) // pt 7
|
( 0 -25 $zmax) // pt 7
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 25) // pt 8
|
( 25 0 $zmax) // pt 8
|
||||||
( 75 0 25) // pt 9
|
( 75 0 $zmax) // pt 9
|
||||||
// back-plane: z = -25mm
|
// back-plane:
|
||||||
// inlet region
|
// inlet region
|
||||||
( -50 25 -25) // pt 0 + 10
|
( -50 25 $zmin) // pt 0 + 10
|
||||||
( 0 25 -25) // pt 1 + 10
|
( 0 25 $zmin) // pt 1 + 10
|
||||||
( -50 75 -25) // pt 2 + 10
|
( -50 75 $zmin) // pt 2 + 10
|
||||||
( 0 75 -25) // pt 3 + 10
|
( 0 75 $zmin) // pt 3 + 10
|
||||||
// outlet region
|
// outlet region
|
||||||
( -500 -75 -25) // pt 4 + 10
|
( -500 -75 $zmin) // pt 4 + 10
|
||||||
( 0 -75 -25) // pt 5 + 10
|
( 0 -75 $zmin) // pt 5 + 10
|
||||||
( -500 -25 -25) // pt 7 + 10
|
( -500 -25 $zmin) // pt 7 + 10
|
||||||
( 0 -25 -25) // pt 8 + 10
|
( 0 -25 $zmin) // pt 8 + 10
|
||||||
// bend mid-points
|
// bend mid-points
|
||||||
( 25 0 -25) // pt 8 + 10
|
( 25 0 $zmin) // pt 8 + 10
|
||||||
( 75 0 -25) // pt 9 + 10
|
( 75 0 $zmin) // pt 9 + 10
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -60,15 +63,15 @@ blocks
|
|||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// block 2
|
// block 2
|
||||||
arc 1 8 (17.678 17.678 25)
|
arc 1 8 origin (0 0 $zmax)
|
||||||
arc 11 18 (17.678 17.678 -25)
|
arc 3 9 origin (0 0 $zmax)
|
||||||
arc 3 9 (53.033 53.033 25)
|
arc 11 18 origin (0 0 $zmin)
|
||||||
arc 13 19 (53.033 53.033 -25)
|
arc 13 19 origin (0 0 $zmin)
|
||||||
// block 3
|
// block 3
|
||||||
arc 7 8 (17.678 -17.678 25)
|
arc 7 8 origin (0 0 $zmax)
|
||||||
arc 17 18 (17.678 -17.678 -25)
|
arc 5 9 origin (0 0 $zmax)
|
||||||
arc 5 9 (53.033 -53.033 25)
|
arc 17 18 origin (0 0 $zmin)
|
||||||
arc 15 19 (53.033 -53.033 -25)
|
arc 15 19 origin (0 0 $zmin)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
@ -14,48 +14,54 @@ FoamFile
|
|||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
// Almost identical to basic/potentialFoam/cylinder
|
||||||
|
|
||||||
scale 1;
|
scale 1;
|
||||||
|
|
||||||
|
// Front/back locations
|
||||||
|
zmin -0.5;
|
||||||
|
zmax 0.5;
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
(0.5 0 -0.5)
|
(0.5 0 $zmin)
|
||||||
(1 0 -0.5)
|
(1 0 $zmin)
|
||||||
(2 0 -0.5)
|
(2 0 $zmin)
|
||||||
(2 0.707107 -0.5)
|
(2 0.707107 $zmin)
|
||||||
(0.707107 0.707107 -0.5)
|
(0.707107 0.707107 $zmin)
|
||||||
(0.353553 0.353553 -0.5)
|
(0.353553 0.353553 $zmin)
|
||||||
(2 2 -0.5)
|
(2 2 $zmin)
|
||||||
(0.707107 2 -0.5)
|
(0.707107 2 $zmin)
|
||||||
(0 2 -0.5)
|
(0 2 $zmin)
|
||||||
(0 1 -0.5)
|
(0 1 $zmin)
|
||||||
(0 0.5 -0.5)
|
(0 0.5 $zmin)
|
||||||
(-0.5 0 -0.5)
|
(-0.5 0 $zmin)
|
||||||
(-1 0 -0.5)
|
(-1 0 $zmin)
|
||||||
(-2 0 -0.5)
|
(-2 0 $zmin)
|
||||||
(-2 0.707107 -0.5)
|
(-2 0.707107 $zmin)
|
||||||
(-0.707107 0.707107 -0.5)
|
(-0.707107 0.707107 $zmin)
|
||||||
(-0.353553 0.353553 -0.5)
|
(-0.353553 0.353553 $zmin)
|
||||||
(-2 2 -0.5)
|
(-2 2 $zmin)
|
||||||
(-0.707107 2 -0.5)
|
(-0.707107 2 $zmin)
|
||||||
(0.5 0 0.5)
|
(0.5 0 $zmax)
|
||||||
(1 0 0.5)
|
(1 0 $zmax)
|
||||||
(2 0 0.5)
|
(2 0 $zmax)
|
||||||
(2 0.707107 0.5)
|
(2 0.707107 $zmax)
|
||||||
(0.707107 0.707107 0.5)
|
(0.707107 0.707107 $zmax)
|
||||||
(0.353553 0.353553 0.5)
|
(0.353553 0.353553 $zmax)
|
||||||
(2 2 0.5)
|
(2 2 $zmax)
|
||||||
(0.707107 2 0.5)
|
(0.707107 2 $zmax)
|
||||||
(0 2 0.5)
|
(0 2 $zmax)
|
||||||
(0 1 0.5)
|
(0 1 $zmax)
|
||||||
(0 0.5 0.5)
|
(0 0.5 $zmax)
|
||||||
(-0.5 0 0.5)
|
(-0.5 0 $zmax)
|
||||||
(-1 0 0.5)
|
(-1 0 $zmax)
|
||||||
(-2 0 0.5)
|
(-2 0 $zmax)
|
||||||
(-2 0.707107 0.5)
|
(-2 0.707107 $zmax)
|
||||||
(-0.707107 0.707107 0.5)
|
(-0.707107 0.707107 $zmax)
|
||||||
(-0.353553 0.353553 0.5)
|
(-0.353553 0.353553 $zmax)
|
||||||
(-2 2 0.5)
|
(-2 2 $zmax)
|
||||||
(-0.707107 2 0.5)
|
(-0.707107 2 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
@ -74,22 +80,24 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 (0.469846 0.17101 -0.5)
|
// Inner cylinder
|
||||||
arc 5 10 (0.17101 0.469846 -0.5)
|
arc 0 5 origin (0 0 $zmin)
|
||||||
arc 1 4 (0.939693 0.34202 -0.5)
|
arc 5 10 origin (0 0 $zmin)
|
||||||
arc 4 9 (0.34202 0.939693 -0.5)
|
arc 1 4 origin (0 0 $zmin)
|
||||||
arc 19 24 (0.469846 0.17101 0.5)
|
arc 4 9 origin (0 0 $zmin)
|
||||||
arc 24 29 (0.17101 0.469846 0.5)
|
arc 19 24 origin (0 0 $zmax)
|
||||||
arc 20 23 (0.939693 0.34202 0.5)
|
arc 24 29 origin (0 0 $zmax)
|
||||||
arc 23 28 (0.34202 0.939693 0.5)
|
arc 20 23 origin (0 0 $zmax)
|
||||||
arc 11 16 (-0.469846 0.17101 -0.5)
|
arc 23 28 origin (0 0 $zmax)
|
||||||
arc 16 10 (-0.17101 0.469846 -0.5)
|
// Intermediate cylinder
|
||||||
arc 12 15 (-0.939693 0.34202 -0.5)
|
arc 11 16 origin (0 0 $zmin)
|
||||||
arc 15 9 (-0.34202 0.939693 -0.5)
|
arc 16 10 origin (0 0 $zmin)
|
||||||
arc 30 35 (-0.469846 0.17101 0.5)
|
arc 12 15 origin (0 0 $zmin)
|
||||||
arc 35 29 (-0.17101 0.469846 0.5)
|
arc 15 9 origin (0 0 $zmin)
|
||||||
arc 31 34 (-0.939693 0.34202 0.5)
|
arc 30 35 origin (0 0 $zmax)
|
||||||
arc 34 28 (-0.34202 0.939693 0.5)
|
arc 35 29 origin (0 0 $zmax)
|
||||||
|
arc 31 34 origin (0 0 $zmax)
|
||||||
|
arc 34 28 origin (0 0 $zmax)
|
||||||
);
|
);
|
||||||
|
|
||||||
defaultPatch
|
defaultPatch
|
||||||
|
|||||||
@ -16,65 +16,71 @@ FoamFile
|
|||||||
|
|
||||||
scale 1;
|
scale 1;
|
||||||
|
|
||||||
|
// Geometric parameters
|
||||||
|
outerRadius 1;
|
||||||
|
|
||||||
|
// Divisions in x/y/z directions. Can be unequal.
|
||||||
|
nx 10;
|
||||||
|
ny $nx;
|
||||||
|
nz $nx;
|
||||||
|
|
||||||
geometry
|
geometry
|
||||||
{
|
{
|
||||||
sphere
|
sphere
|
||||||
{
|
{
|
||||||
type sphere;
|
type sphere;
|
||||||
origin (0 0 0);
|
origin (0 0 0);
|
||||||
radius 1;
|
radius $outerRadius;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
v 0.5773502;
|
// Box sizes
|
||||||
mv -0.5773502;
|
vo #eval{ sqrt($outerRadius/3) };
|
||||||
|
mvo #eval{ -$vo };
|
||||||
a 0.7071067;
|
|
||||||
ma -0.7071067;
|
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
($mv $mv $mv)
|
($mvo $mvo $mvo)
|
||||||
( $v $mv $mv)
|
( $vo $mvo $mvo)
|
||||||
( $v $v $mv)
|
( $vo $vo $mvo)
|
||||||
($mv $v $mv)
|
($mvo $vo $mvo)
|
||||||
($mv $mv $v)
|
($mvo $mvo $vo)
|
||||||
( $v $mv $v)
|
( $vo $mvo $vo)
|
||||||
( $v $v $v)
|
( $vo $vo $vo)
|
||||||
($mv $v $v)
|
($mvo $vo $vo)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
hex (0 1 2 3 4 5 6 7) (10 10 10) simpleGrading (1 1 1)
|
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) grading (1 1 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 1 (0 $ma $ma)
|
arc 0 1 origin (0 0 0)
|
||||||
arc 2 3 (0 $a $ma)
|
arc 2 3 origin (0 0 0)
|
||||||
arc 6 7 (0 $a $a)
|
arc 6 7 origin (0 0 0)
|
||||||
arc 4 5 (0 $ma $a)
|
arc 4 5 origin (0 0 0)
|
||||||
|
|
||||||
arc 0 3 ($ma 0 $ma)
|
arc 0 3 origin (0 0 0)
|
||||||
arc 1 2 ($a 0 $ma)
|
arc 1 2 origin (0 0 0)
|
||||||
arc 5 6 ($a 0 $a)
|
arc 5 6 origin (0 0 0)
|
||||||
arc 4 7 ($ma 0 $a)
|
arc 4 7 origin (0 0 0)
|
||||||
|
|
||||||
arc 0 4 ($ma $ma 0)
|
arc 0 4 origin (0 0 0)
|
||||||
arc 1 5 ($a $ma 0)
|
arc 1 5 origin (0 0 0)
|
||||||
arc 2 6 ($a $a 0)
|
arc 2 6 origin (0 0 0)
|
||||||
arc 3 7 ($ma $a 0)
|
arc 3 7 origin (0 0 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
project (0 4 7 3) sphere
|
project (0 4 7 3) sphere // x-min
|
||||||
project (2 6 5 1) sphere
|
project (1 2 6 5) sphere // x-max
|
||||||
project (1 5 4 0) sphere
|
project (0 1 5 4) sphere // y-min
|
||||||
project (3 7 6 2) sphere
|
project (3 7 6 2) sphere // y-max
|
||||||
project (0 3 2 1) sphere
|
project (0 3 2 1) sphere // z-min
|
||||||
project (4 5 6 7) sphere
|
project (4 5 6 7) sphere // z-max
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
@ -84,12 +90,12 @@ boundary
|
|||||||
type wall;
|
type wall;
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
(0 4 7 3)
|
(0 4 7 3) // x-min
|
||||||
(2 6 5 1)
|
(1 2 6 5) // x-max
|
||||||
(1 5 4 0)
|
(0 1 5 4) // y-min
|
||||||
(3 7 6 2)
|
(3 7 6 2) // y-max
|
||||||
(0 3 2 1)
|
(0 3 2 1) // z-min
|
||||||
(4 5 6 7)
|
(4 5 6 7) // z-max
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@ -17,103 +17,115 @@ FoamFile
|
|||||||
scale 1;
|
scale 1;
|
||||||
verbose no;
|
verbose no;
|
||||||
|
|
||||||
|
// Geometric parameters
|
||||||
|
outerRadius 1;
|
||||||
|
innerRatio 0.7;
|
||||||
|
|
||||||
|
// Divisions in x/y/z and radial directions. Can be unequal.
|
||||||
|
nx 10;
|
||||||
|
ny $nx;
|
||||||
|
nz $nx;
|
||||||
|
nr 6;
|
||||||
|
|
||||||
geometry
|
geometry
|
||||||
{
|
{
|
||||||
sphere
|
sphere
|
||||||
{
|
{
|
||||||
type sphere;
|
type sphere;
|
||||||
origin (0 0 0);
|
origin (0 0 0);
|
||||||
radius 1;
|
radius $outerRadius;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Outer box sizes
|
||||||
|
vo #eval{ sqrt($outerRadius/3) };
|
||||||
|
mvo #eval{ -$vo };
|
||||||
|
|
||||||
n 10;
|
// Inner box sizes - % of overall dimension
|
||||||
|
vi #eval{ $innerRatio*$vo };
|
||||||
v 0.5773502;
|
mvi #eval{ $innerRatio*$mvo };
|
||||||
mv -0.5773502;
|
|
||||||
vh 0.2886751;
|
|
||||||
mvh -0.2886751;
|
|
||||||
|
|
||||||
a 0.7071067;
|
|
||||||
ma -0.7071067;
|
|
||||||
ah 0.3464101;
|
|
||||||
mah -0.3464101;
|
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
($mvh $mvh $mvh)
|
// Inner block
|
||||||
( $vh $mvh $mvh)
|
($mvi $mvi $mvi)
|
||||||
( $vh $vh $mvh)
|
( $vi $mvi $mvi)
|
||||||
($mvh $vh $mvh)
|
( $vi $vi $mvi)
|
||||||
($mvh $mvh $vh)
|
($mvi $vi $mvi)
|
||||||
( $vh $mvh $vh)
|
($mvi $mvi $vi)
|
||||||
( $vh $vh $vh)
|
( $vi $mvi $vi)
|
||||||
($mvh $vh $vh)
|
( $vi $vi $vi)
|
||||||
|
($mvi $vi $vi)
|
||||||
|
|
||||||
($mv $mv $mv)
|
// Outer blocks
|
||||||
( $v $mv $mv)
|
($mvo $mvo $mvo)
|
||||||
( $v $v $mv)
|
( $vo $mvo $mvo)
|
||||||
($mv $v $mv)
|
( $vo $vo $mvo)
|
||||||
($mv $mv $v)
|
($mvo $vo $mvo)
|
||||||
( $v $mv $v)
|
($mvo $mvo $vo)
|
||||||
( $v $v $v)
|
( $vo $mvo $vo)
|
||||||
($mv $v $v)
|
( $vo $vo $vo)
|
||||||
|
($mvo $vo $vo)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
hex ( 0 1 2 3 4 5 6 7) ($n $n $n) simpleGrading (1 1 1)
|
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) grading (1 1 1) // Inner block
|
||||||
hex ( 9 8 12 13 1 0 4 5) ($n $n $n) simpleGrading (1 1 1)
|
|
||||||
hex (10 9 13 14 2 1 5 6) ($n $n $n) simpleGrading (1 1 1)
|
// Outer blocks
|
||||||
hex (11 10 14 15 3 2 6 7) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 8 0 3 11 12 4 7 15) ($nr $ny $nz) grading (1 1 1) // x-min
|
||||||
hex ( 8 11 15 12 0 3 7 4) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 1 9 10 2 5 13 14 6) ($nr $ny $nz) grading (1 1 1) // x-max
|
||||||
hex ( 8 9 10 11 0 1 2 3) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 8 9 1 0 12 13 5 4) ($nx $nr $nz) grading (1 1 1) // y-min
|
||||||
hex (13 12 15 14 5 4 7 6) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 3 2 10 11 7 6 14 15) ($nx $nr $nz) grading (1 1 1) // y-max
|
||||||
|
hex ( 8 9 10 11 0 1 2 3) ($nx $ny $nr) grading (1 1 1) // z-min
|
||||||
|
hex ( 4 5 6 7 12 13 14 15) ($nx $ny $nr) grading (1 1 1) // z-max
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 8 9 (0 $ma $ma)
|
// Outer blocks
|
||||||
arc 10 11 (0 $a $ma)
|
arc 8 9 origin (0 0 0)
|
||||||
arc 14 15 (0 $a $a)
|
arc 10 11 origin (0 0 0)
|
||||||
arc 12 13 (0 $ma $a)
|
arc 14 15 origin (0 0 0)
|
||||||
|
arc 12 13 origin (0 0 0)
|
||||||
|
|
||||||
arc 8 11 ($ma 0 $ma)
|
arc 8 11 origin (0 0 0)
|
||||||
arc 9 10 ($a 0 $ma)
|
arc 9 10 origin (0 0 0)
|
||||||
arc 13 14 ($a 0 $a)
|
arc 13 14 origin (0 0 0)
|
||||||
arc 12 15 ($ma 0 $a)
|
arc 12 15 origin (0 0 0)
|
||||||
|
|
||||||
arc 8 12 ($ma $ma 0)
|
arc 8 12 origin (0 0 0)
|
||||||
arc 9 13 ($a $ma 0)
|
arc 9 13 origin (0 0 0)
|
||||||
arc 10 14 ($a $a 0)
|
arc 10 14 origin (0 0 0)
|
||||||
arc 11 15 ($ma $a 0)
|
arc 11 15 origin (0 0 0)
|
||||||
|
|
||||||
|
// Inner block - flattened by factor 1.1
|
||||||
|
arc 0 1 origin 1.1 (0 0 0)
|
||||||
|
arc 2 3 origin 1.1 (0 0 0)
|
||||||
|
arc 6 7 origin 1.1 (0 0 0)
|
||||||
|
arc 4 5 origin 1.1 (0 0 0)
|
||||||
|
|
||||||
arc 0 1 (0 $mah $mah)
|
arc 0 3 origin 1.1 (0 0 0)
|
||||||
arc 2 3 (0 $ah $mah)
|
arc 1 2 origin 1.1 (0 0 0)
|
||||||
arc 6 7 (0 $ah $ah)
|
arc 5 6 origin 1.1 (0 0 0)
|
||||||
arc 4 5 (0 $mah $ah)
|
arc 4 7 origin 1.1 (0 0 0)
|
||||||
|
|
||||||
arc 0 3 ($mah 0 $mah)
|
arc 0 4 origin 1.1 (0 0 0)
|
||||||
arc 1 2 ($ah 0 $mah)
|
arc 1 5 origin 1.1 (0 0 0)
|
||||||
arc 5 6 ($ah 0 $ah)
|
arc 2 6 origin 1.1 (0 0 0)
|
||||||
arc 4 7 ($mah 0 $ah)
|
arc 3 7 origin 1.1 (0 0 0)
|
||||||
|
|
||||||
arc 0 4 ($mah $mah 0)
|
|
||||||
arc 1 5 ($ah $mah 0)
|
|
||||||
arc 2 6 ($ah $ah 0)
|
|
||||||
arc 3 7 ($mah $ah 0)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
project ( 8 12 15 11) sphere
|
// Outer blocks
|
||||||
project (10 14 13 9) sphere
|
project ( 8 12 15 11) sphere // x-min
|
||||||
project ( 9 13 12 8) sphere
|
project ( 9 10 14 13) sphere // x-max
|
||||||
project (11 15 14 10) sphere
|
project ( 8 9 13 12) sphere // y-min
|
||||||
project ( 8 11 10 9) sphere
|
project (11 15 14 10) sphere // y-max
|
||||||
project (12 13 14 15) sphere
|
project ( 8 11 10 9) sphere // z-min
|
||||||
|
project (12 13 14 15) sphere // z-max
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
@ -123,12 +135,12 @@ boundary
|
|||||||
type wall;
|
type wall;
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
( 8 12 15 11)
|
( 8 12 15 11) // x-min
|
||||||
(10 14 13 9)
|
( 9 10 14 13) // x-max
|
||||||
( 9 13 12 8)
|
( 8 9 13 12) // y-min
|
||||||
(11 15 14 10)
|
(11 15 14 10) // y-max
|
||||||
( 8 11 10 9)
|
( 8 11 10 9) // z-min
|
||||||
(12 13 14 15)
|
(12 13 14 15) // z-max
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@ -17,68 +17,81 @@ FoamFile
|
|||||||
scale 1;
|
scale 1;
|
||||||
verbose no;
|
verbose no;
|
||||||
|
|
||||||
|
// Geometric parameters
|
||||||
|
outerRadius 1;
|
||||||
|
innerRatio 0.5;
|
||||||
|
|
||||||
|
// Divisions in x/y/z and radial directions. Can be unequal.
|
||||||
|
nx 10;
|
||||||
|
ny $nx;
|
||||||
|
nz $nx;
|
||||||
|
nr 6;
|
||||||
|
|
||||||
geometry
|
geometry
|
||||||
{
|
{
|
||||||
sphere
|
sphere
|
||||||
{
|
{
|
||||||
type sphere;
|
type sphere;
|
||||||
origin (0 0 0);
|
origin (0 0 0);
|
||||||
radius 1;
|
radius $outerRadius;
|
||||||
}
|
}
|
||||||
|
|
||||||
innerSphere
|
innerSphere
|
||||||
{
|
{
|
||||||
type sphere;
|
type sphere;
|
||||||
origin (0 0 0);
|
origin (0 0 0);
|
||||||
radius 0.5;
|
radius #eval{ $innerRatio * $outerRadius };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
n 10;
|
|
||||||
|
|
||||||
// Rough approximation of corner points
|
// Outer box sizes (approximate)
|
||||||
v 0.5773502;
|
vo #eval{ sqrt($outerRadius/3) };
|
||||||
mv -0.5773502;
|
mvo #eval{ -$vo };
|
||||||
vh 0.2886751;
|
|
||||||
mvh -0.2886751;
|
// Inner box sizes - % of overall dimension
|
||||||
|
vi #eval{ $innerRatio*$vo };
|
||||||
|
mvi #eval{ $innerRatio*$mvo };
|
||||||
|
|
||||||
vertices
|
vertices
|
||||||
(
|
(
|
||||||
// Inner block points
|
// Inner block points
|
||||||
project ($mvh $mvh $mvh) (innerSphere)
|
project ($mvi $mvi $mvi) (innerSphere)
|
||||||
project ( $vh $mvh $mvh) (innerSphere)
|
project ( $vi $mvi $mvi) (innerSphere)
|
||||||
project ( $vh $vh $mvh) (innerSphere)
|
project ( $vi $vi $mvi) (innerSphere)
|
||||||
project ($mvh $vh $mvh) (innerSphere)
|
project ($mvi $vi $mvi) (innerSphere)
|
||||||
project ($mvh $mvh $vh) (innerSphere)
|
project ($mvi $mvi $vi) (innerSphere)
|
||||||
project ( $vh $mvh $vh) (innerSphere)
|
project ( $vi $mvi $vi) (innerSphere)
|
||||||
project ( $vh $vh $vh) (innerSphere)
|
project ( $vi $vi $vi) (innerSphere)
|
||||||
project ($mvh $vh $vh) (innerSphere)
|
project ($mvi $vi $vi) (innerSphere)
|
||||||
|
|
||||||
// Outer block points
|
// Outer block points
|
||||||
project ($mv $mv $mv) (sphere)
|
project ($mvo $mvo $mvo) (sphere)
|
||||||
project ( $v $mv $mv) (sphere)
|
project ( $vo $mvo $mvo) (sphere)
|
||||||
project ( $v $v $mv) (sphere)
|
project ( $vo $vo $mvo) (sphere)
|
||||||
project ($mv $v $mv) (sphere)
|
project ($mvo $vo $mvo) (sphere)
|
||||||
project ($mv $mv $v) (sphere)
|
project ($mvo $mvo $vo) (sphere)
|
||||||
project ( $v $mv $v) (sphere)
|
project ( $vo $mvo $vo) (sphere)
|
||||||
project ( $v $v $v) (sphere)
|
project ( $vo $vo $vo) (sphere)
|
||||||
project ($mv $v $v) (sphere)
|
project ($mvo $vo $vo) (sphere)
|
||||||
);
|
);
|
||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
hex ( 0 1 2 3 4 5 6 7) ($n $n $n) simpleGrading (1 1 1)
|
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) grading (1 1 1) // Inner block
|
||||||
hex ( 9 8 12 13 1 0 4 5) ($n $n $n) simpleGrading (1 1 1)
|
|
||||||
hex (10 9 13 14 2 1 5 6) ($n $n $n) simpleGrading (1 1 1)
|
// Outer blocks
|
||||||
hex (11 10 14 15 3 2 6 7) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 8 0 3 11 12 4 7 15) ($nr $ny $nz) grading (1 1 1) // x-min
|
||||||
hex ( 8 11 15 12 0 3 7 4) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 1 9 10 2 5 13 14 6) ($nr $ny $nz) grading (1 1 1) // x-max
|
||||||
hex ( 8 9 10 11 0 1 2 3) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 8 9 1 0 12 13 5 4) ($nx $nr $nz) grading (1 1 1) // y-min
|
||||||
hex (13 12 15 14 5 4 7 6) ($n $n $n) simpleGrading (1 1 1)
|
hex ( 3 2 10 11 7 6 14 15) ($nx $nr $nz) grading (1 1 1) // y-max
|
||||||
|
hex ( 8 9 10 11 0 1 2 3) ($nx $ny $nr) grading (1 1 1) // z-min
|
||||||
|
hex ( 4 5 6 7 12 13 14 15) ($nx $ny $nr) grading (1 1 1) // z-max
|
||||||
);
|
);
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
// Outer edges
|
// Outer blocks
|
||||||
project 8 9 (sphere)
|
project 8 9 (sphere)
|
||||||
project 10 11 (sphere)
|
project 10 11 (sphere)
|
||||||
project 14 15 (sphere)
|
project 14 15 (sphere)
|
||||||
@ -94,32 +107,32 @@ edges
|
|||||||
project 10 14 (sphere)
|
project 10 14 (sphere)
|
||||||
project 11 15 (sphere)
|
project 11 15 (sphere)
|
||||||
|
|
||||||
|
// Inner block
|
||||||
|
project 0 1 (innerSphere)
|
||||||
|
project 2 3 (innerSphere)
|
||||||
|
project 6 7 (innerSphere)
|
||||||
|
project 4 5 (innerSphere)
|
||||||
|
|
||||||
// Inner edges
|
project 0 3 (innerSphere)
|
||||||
project 0 1 (innerSphere)
|
project 1 2 (innerSphere)
|
||||||
project 2 3 (innerSphere)
|
project 5 6 (innerSphere)
|
||||||
project 6 7 (innerSphere)
|
project 4 7 (innerSphere)
|
||||||
project 4 5 (innerSphere)
|
|
||||||
|
|
||||||
project 0 3 (innerSphere)
|
project 0 4 (innerSphere)
|
||||||
project 1 2 (innerSphere)
|
project 1 5 (innerSphere)
|
||||||
project 5 6 (innerSphere)
|
project 2 6 (innerSphere)
|
||||||
project 4 7 (innerSphere)
|
project 3 7 (innerSphere)
|
||||||
|
|
||||||
project 0 4 (innerSphere)
|
|
||||||
project 1 5 (innerSphere)
|
|
||||||
project 2 6 (innerSphere)
|
|
||||||
project 3 7 (innerSphere)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
project ( 8 12 15 11) sphere
|
// Outer blocks
|
||||||
project (10 14 13 9) sphere
|
project ( 8 12 15 11) sphere // x-min
|
||||||
project ( 9 13 12 8) sphere
|
project ( 9 10 14 13) sphere // x-max
|
||||||
project (11 15 14 10) sphere
|
project ( 8 9 13 12) sphere // y-min
|
||||||
project ( 8 11 10 9) sphere
|
project (11 15 14 10) sphere // y-max
|
||||||
project (12 13 14 15) sphere
|
project ( 8 11 10 9) sphere // z-min
|
||||||
|
project (12 13 14 15) sphere // z-max
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
@ -129,12 +142,12 @@ boundary
|
|||||||
type wall;
|
type wall;
|
||||||
faces
|
faces
|
||||||
(
|
(
|
||||||
( 8 12 15 11)
|
( 8 12 15 11) // x-min
|
||||||
(10 14 13 9)
|
( 9 10 14 13) // x-max
|
||||||
( 9 13 12 8)
|
( 8 9 13 12) // y-min
|
||||||
(11 15 14 10)
|
(11 15 14 10) // y-max
|
||||||
( 8 11 10 9)
|
( 8 11 10 9) // z-min
|
||||||
(12 13 14 15)
|
(12 13 14 15) // z-max
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,9 +1,15 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2006 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class dictionary;
|
class dictionary;
|
||||||
location "system";
|
|
||||||
object blockMeshDict;
|
object blockMeshDict;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -25,13 +31,10 @@ scale 1;
|
|||||||
D
|
D
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Ax 0.438912; Ay 0.000000;
|
Ax 0.438912; Ay 0;
|
||||||
Bx 18.28800; By 0.000000;
|
Bx 18.28800; By 0;
|
||||||
Cx 0.310358; Cy -0.310358;
|
Cx 0.310358; Cy #eval{-$Cx};
|
||||||
Dx 12.931569; Dy -12.931569;
|
Dx 12.931569; Dy #eval{-$Dx};
|
||||||
|
|
||||||
Hx 0.405502; Hy -0.167964;
|
|
||||||
Gx 16.895909; Gy -6.998515;
|
|
||||||
|
|
||||||
Z_DB_low -0.88706;
|
Z_DB_low -0.88706;
|
||||||
Z_AC_low -1.07;
|
Z_AC_low -1.07;
|
||||||
@ -51,16 +54,15 @@ vertices
|
|||||||
|
|
||||||
blocks
|
blocks
|
||||||
(
|
(
|
||||||
hex (0 1 2 3 4 5 6 7) (47 10 4) simpleGrading (41.6669 1 1)
|
hex (0 1 2 3 4 5 6 7) (47 10 4) simpleGrading (41.6669 1 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 3 ($Hx $Hy $Z_AC_low)
|
arc 0 3 origin (0 0 $Z_AC_low)
|
||||||
arc 4 7 ($Hx $Hy $Z_high)
|
arc 4 7 origin (0 0 $Z_high)
|
||||||
|
arc 1 2 origin (0 0 $Z_DB_low)
|
||||||
arc 1 2 ($Gx $Gy $Z_DB_low)
|
arc 5 6 origin (0 0 $Z_high)
|
||||||
arc 5 6 ($Gx $Gy $Z_high)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
patches
|
patches
|
||||||
|
|||||||
@ -53,14 +53,14 @@ blocks
|
|||||||
|
|
||||||
edges
|
edges
|
||||||
(
|
(
|
||||||
arc 0 5 (0.469846 0.17101 0)
|
arc 0 5 origin (0 0 0)
|
||||||
arc 5 10 (0.17101 0.469846 0)
|
arc 5 10 origin (0 0 0)
|
||||||
arc 1 4 (0.939693 0.34202 0)
|
arc 1 4 origin (0 0 0)
|
||||||
arc 4 9 (0.34202 0.939693 0)
|
arc 4 9 origin (0 0 0)
|
||||||
arc 11 16 (0.469846 0.17101 0.5)
|
arc 11 16 origin (0 0 0.5)
|
||||||
arc 16 21 (0.17101 0.469846 0.5)
|
arc 16 21 origin (0 0 0.5)
|
||||||
arc 12 15 (0.939693 0.34202 0.5)
|
arc 12 15 origin (0 0 0.5)
|
||||||
arc 15 20 (0.34202 0.939693 0.5)
|
arc 15 20 origin (0 0 0.5)
|
||||||
);
|
);
|
||||||
|
|
||||||
boundary
|
boundary
|
||||||
|
|||||||
Reference in New Issue
Block a user