mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -26,6 +26,10 @@ License
|
|||||||
#include "DelaunayMesh.H"
|
#include "DelaunayMesh.H"
|
||||||
#include "labelPair.H"
|
#include "labelPair.H"
|
||||||
#include "PrintTable.H"
|
#include "PrintTable.H"
|
||||||
|
#include "pointIOField.H"
|
||||||
|
#include "scalarIOField.H"
|
||||||
|
#include "labelIOField.H"
|
||||||
|
#include "pointConversion.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -36,14 +40,121 @@ License
|
|||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
Foam::DelaunayMesh<Triangulation>::DelaunayMesh()
|
Foam::DelaunayMesh<Triangulation>::DelaunayMesh(const Time& runTime)
|
||||||
:
|
:
|
||||||
Triangulation(),
|
Triangulation(),
|
||||||
vertexCount_(0),
|
vertexCount_(0),
|
||||||
cellCount_(0)
|
cellCount_(0),
|
||||||
|
runTime_(runTime)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Triangulation>
|
||||||
|
Foam::DelaunayMesh<Triangulation>::DelaunayMesh
|
||||||
|
(
|
||||||
|
const Time& runTime,
|
||||||
|
const word& meshName
|
||||||
|
)
|
||||||
|
:
|
||||||
|
Triangulation(),
|
||||||
|
vertexCount_(0),
|
||||||
|
cellCount_(0),
|
||||||
|
runTime_(runTime)
|
||||||
|
{
|
||||||
|
pointIOField pts
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"points",
|
||||||
|
runTime.timeName(),
|
||||||
|
meshName/polyMesh::meshSubDir,
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
labelIOField types
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"types",
|
||||||
|
runTime.timeName(),
|
||||||
|
meshName,
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
labelIOField indices
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"indices",
|
||||||
|
runTime.timeName(),
|
||||||
|
meshName,
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
labelIOField processorIndices
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"processorIndices",
|
||||||
|
runTime.timeName(),
|
||||||
|
meshName,
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (pts.headerOk())
|
||||||
|
{
|
||||||
|
forAll(pts, ptI)
|
||||||
|
{
|
||||||
|
Vertex_handle vh = this->insert(toPoint<Point>(pts[ptI]));
|
||||||
|
|
||||||
|
if (indices.headerOk())
|
||||||
|
{
|
||||||
|
vh->index() = indices[ptI];
|
||||||
|
vertexCount()++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vh->index() = getNewVertexIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (processorIndices.headerOk())
|
||||||
|
{
|
||||||
|
vh->procIndex() = processorIndices[ptI];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vh->procIndex() = Pstream::myProcNo();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (types.headerOk())
|
||||||
|
{
|
||||||
|
vh->type() =
|
||||||
|
static_cast<Foam::indexedVertexEnum::vertexType>
|
||||||
|
(
|
||||||
|
types[ptI]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vh->type() = Vb::vtUnassigned;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
|
|||||||
@ -43,6 +43,7 @@ SourceFiles
|
|||||||
#include "boundBox.H"
|
#include "boundBox.H"
|
||||||
#include "indexedVertex.H"
|
#include "indexedVertex.H"
|
||||||
#include "CGALTriangulation3Ddefs.H"
|
#include "CGALTriangulation3Ddefs.H"
|
||||||
|
#include "Time.H"
|
||||||
#include "autoPtr.H"
|
#include "autoPtr.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -82,6 +83,12 @@ public:
|
|||||||
FixedList<label, 2>::Hash<>
|
FixedList<label, 2>::Hash<>
|
||||||
> labelPairHashSet;
|
> labelPairHashSet;
|
||||||
|
|
||||||
|
typedef HashTable
|
||||||
|
<
|
||||||
|
label,
|
||||||
|
labelPair,
|
||||||
|
FixedList<label, 2>::Hash<>
|
||||||
|
> labelTolabelPairHashTable;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -95,6 +102,9 @@ private:
|
|||||||
// This allows a unique index to be assigned to each cell.
|
// This allows a unique index to be assigned to each cell.
|
||||||
mutable label cellCount_;
|
mutable label cellCount_;
|
||||||
|
|
||||||
|
//- Reference to Time
|
||||||
|
const Time& runTime_;
|
||||||
|
|
||||||
//- Spatial sort traits to use with a pair of point pointers and an int.
|
//- Spatial sort traits to use with a pair of point pointers and an int.
|
||||||
// Taken from a post on the CGAL lists: 2010-01/msg00004.html by
|
// Taken from a post on the CGAL lists: 2010-01/msg00004.html by
|
||||||
// Sebastien Loriot (Geometry Factory).
|
// Sebastien Loriot (Geometry Factory).
|
||||||
@ -159,7 +169,13 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
DelaunayMesh();
|
explicit DelaunayMesh(const Time& runTime);
|
||||||
|
|
||||||
|
DelaunayMesh
|
||||||
|
(
|
||||||
|
const Time& runTime,
|
||||||
|
const word& meshName
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -168,6 +184,14 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
|
inline const Time& time() const;
|
||||||
|
|
||||||
|
inline void timeCheck
|
||||||
|
(
|
||||||
|
const string& description,
|
||||||
|
const bool check = true
|
||||||
|
) const;
|
||||||
|
|
||||||
inline label getNewVertexIndex() const;
|
inline label getNewVertexIndex() const;
|
||||||
|
|
||||||
inline label getNewCellIndex() const;
|
inline label getNewCellIndex() const;
|
||||||
@ -177,6 +201,7 @@ public:
|
|||||||
inline void resetCellCount();
|
inline void resetCellCount();
|
||||||
|
|
||||||
inline label vertexCount() const;
|
inline label vertexCount() const;
|
||||||
|
inline label& vertexCount();
|
||||||
|
|
||||||
inline void resetVertexCount();
|
inline void resetVertexCount();
|
||||||
|
|
||||||
@ -209,12 +234,12 @@ public:
|
|||||||
|
|
||||||
//- Create an fvMesh from the triangulation.
|
//- Create an fvMesh from the triangulation.
|
||||||
// The mesh is not parallel consistent - only used for viewing
|
// The mesh is not parallel consistent - only used for viewing
|
||||||
autoPtr<fvMesh> createMesh
|
autoPtr<polyMesh> createMesh
|
||||||
(
|
(
|
||||||
const fileName& name,
|
const fileName& name,
|
||||||
const Time& runTime,
|
labelTolabelPairHashTable& vertexMap,
|
||||||
labelList& vertexMap,
|
labelList& cellMap,
|
||||||
labelList& cellMap
|
const bool writeDelaunayData = true
|
||||||
) const;
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -36,6 +36,40 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class Triangulation>
|
||||||
|
inline const Foam::Time& Foam::DelaunayMesh<Triangulation>::time() const
|
||||||
|
{
|
||||||
|
return runTime_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Triangulation>
|
||||||
|
void Foam::DelaunayMesh<Triangulation>::timeCheck
|
||||||
|
(
|
||||||
|
const string& description,
|
||||||
|
const bool check
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (check)
|
||||||
|
{
|
||||||
|
Info<< nl << "--- [ cpuTime "
|
||||||
|
<< time().elapsedCpuTime() << " s, "
|
||||||
|
<< "delta " << time().cpuTimeIncrement()<< " s";
|
||||||
|
|
||||||
|
if (description != word::null)
|
||||||
|
{
|
||||||
|
Info<< ", " << description << " ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info<< " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "] --- " << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
inline Foam::label Foam::DelaunayMesh<Triangulation>::getNewVertexIndex() const
|
inline Foam::label Foam::DelaunayMesh<Triangulation>::getNewVertexIndex() const
|
||||||
{
|
{
|
||||||
@ -90,6 +124,12 @@ Foam::label Foam::DelaunayMesh<Triangulation>::vertexCount() const
|
|||||||
return vertexCount_;
|
return vertexCount_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class Triangulation>
|
||||||
|
Foam::label& Foam::DelaunayMesh<Triangulation>::vertexCount()
|
||||||
|
{
|
||||||
|
return vertexCount_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
void Foam::DelaunayMesh<Triangulation>::resetVertexCount()
|
void Foam::DelaunayMesh<Triangulation>::resetVertexCount()
|
||||||
|
|||||||
@ -28,6 +28,7 @@ License
|
|||||||
#include "pointConversion.H"
|
#include "pointConversion.H"
|
||||||
#include "wallPolyPatch.H"
|
#include "wallPolyPatch.H"
|
||||||
#include "processorPolyPatch.H"
|
#include "processorPolyPatch.H"
|
||||||
|
#include "labelIOField.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -331,13 +332,13 @@ void Foam::DelaunayMesh<Triangulation>::printVertexInfo(Ostream& os) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
Foam::autoPtr<Foam::fvMesh>
|
Foam::autoPtr<Foam::polyMesh>
|
||||||
Foam::DelaunayMesh<Triangulation>::createMesh
|
Foam::DelaunayMesh<Triangulation>::createMesh
|
||||||
(
|
(
|
||||||
const fileName& name,
|
const fileName& name,
|
||||||
const Time& runTime,
|
labelTolabelPairHashTable& vertexMap,
|
||||||
labelList& vertexMap,
|
labelList& cellMap,
|
||||||
labelList& cellMap
|
const bool writeDelaunayData
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
pointField points(Triangulation::number_of_vertices());
|
pointField points(Triangulation::number_of_vertices());
|
||||||
@ -354,12 +355,54 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
List<DynamicList<face> > patchFaces(1, DynamicList<face>());
|
List<DynamicList<face> > patchFaces(1, DynamicList<face>());
|
||||||
List<DynamicList<label> > patchOwners(1, DynamicList<label>());
|
List<DynamicList<label> > patchOwners(1, DynamicList<label>());
|
||||||
|
|
||||||
vertexMap.setSize(vertexCount(), -1);
|
vertexMap.resize(vertexCount());
|
||||||
cellMap.setSize(Triangulation::number_of_finite_cells(), -1);
|
cellMap.setSize(Triangulation::number_of_finite_cells(), -1);
|
||||||
|
|
||||||
// Calculate pts and a map of point index to location in pts.
|
// Calculate pts and a map of point index to location in pts.
|
||||||
label vertI = 0;
|
label vertI = 0;
|
||||||
|
|
||||||
|
labelIOField indices
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"indices",
|
||||||
|
time().timeName(),
|
||||||
|
name,
|
||||||
|
time(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
Triangulation::number_of_vertices()
|
||||||
|
);
|
||||||
|
|
||||||
|
labelIOField types
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"types",
|
||||||
|
time().timeName(),
|
||||||
|
name,
|
||||||
|
time(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
Triangulation::number_of_vertices()
|
||||||
|
);
|
||||||
|
|
||||||
|
labelIOField processorIndices
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"processorIndices",
|
||||||
|
time().timeName(),
|
||||||
|
name,
|
||||||
|
time(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
Triangulation::number_of_vertices()
|
||||||
|
);
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
Finite_vertices_iterator vit = Triangulation::finite_vertices_begin();
|
Finite_vertices_iterator vit = Triangulation::finite_vertices_begin();
|
||||||
@ -369,13 +412,20 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
{
|
{
|
||||||
if (!vit->farPoint())
|
if (!vit->farPoint())
|
||||||
{
|
{
|
||||||
vertexMap[vit->index()] = vertI;
|
vertexMap(labelPair(vit->index(), vit->procIndex())) = vertI;
|
||||||
points[vertI] = topoint(vit->point());
|
points[vertI] = topoint(vit->point());
|
||||||
|
indices[vertI] = vit->index();
|
||||||
|
types[vertI] = static_cast<label>(vit->type());
|
||||||
|
processorIndices[vertI] = vit->procIndex();
|
||||||
vertI++;
|
vertI++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
points.setSize(vertI);
|
points.setSize(vertI);
|
||||||
|
indices.setSize(vertI);
|
||||||
|
types.setSize(vertI);
|
||||||
|
processorIndices.setSize(vertI);
|
||||||
|
|
||||||
|
|
||||||
// Index the cells
|
// Index the cells
|
||||||
label cellI = 0;
|
label cellI = 0;
|
||||||
@ -391,6 +441,7 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
(
|
(
|
||||||
!cit->hasFarPoint()
|
!cit->hasFarPoint()
|
||||||
&& !Triangulation::is_infinite(cit)
|
&& !Triangulation::is_infinite(cit)
|
||||||
|
&& cit->real()
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
cellMap[cit->cellIndex()] = cellI++;
|
cellMap[cit->cellIndex()] = cellI++;
|
||||||
@ -424,7 +475,12 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
|
|
||||||
label c1I = Cb::ctFar;
|
label c1I = Cb::ctFar;
|
||||||
bool c1Real = false;
|
bool c1Real = false;
|
||||||
if (!c1->hasFarPoint() && !Triangulation::is_infinite(c1))
|
if
|
||||||
|
(
|
||||||
|
!c1->hasFarPoint()
|
||||||
|
&& !Triangulation::is_infinite(c1)
|
||||||
|
&& c1->real()
|
||||||
|
)
|
||||||
{
|
{
|
||||||
c1I = cellMap[c1->cellIndex()];
|
c1I = cellMap[c1->cellIndex()];
|
||||||
c1Real = true;
|
c1Real = true;
|
||||||
@ -432,7 +488,12 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
|
|
||||||
label c2I = Cb::ctFar;
|
label c2I = Cb::ctFar;
|
||||||
bool c2Real = false;
|
bool c2Real = false;
|
||||||
if (!c2->hasFarPoint() && !Triangulation::is_infinite(c2))
|
if
|
||||||
|
(
|
||||||
|
!c2->hasFarPoint()
|
||||||
|
&& !Triangulation::is_infinite(c2)
|
||||||
|
&& c2->real()
|
||||||
|
)
|
||||||
{
|
{
|
||||||
c2I = cellMap[c2->cellIndex()];
|
c2I = cellMap[c2->cellIndex()];
|
||||||
c2Real = true;
|
c2Real = true;
|
||||||
@ -451,10 +512,17 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
{
|
{
|
||||||
verticesOnTriFace[i] = vertexMap
|
verticesOnTriFace[i] = vertexMap
|
||||||
[
|
[
|
||||||
c1->vertex
|
labelPair
|
||||||
(
|
(
|
||||||
Triangulation::vertex_triple_index(oppositeVertex, i)
|
c1->vertex
|
||||||
)->index()
|
(
|
||||||
|
Triangulation::vertex_triple_index(oppositeVertex, i)
|
||||||
|
)->index(),
|
||||||
|
c1->vertex
|
||||||
|
(
|
||||||
|
Triangulation::vertex_triple_index(oppositeVertex, i)
|
||||||
|
)->procIndex()
|
||||||
|
)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -524,15 +592,15 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
|
|
||||||
Info<< "Creating mesh" << endl;
|
Info<< "Creating mesh" << endl;
|
||||||
|
|
||||||
autoPtr<fvMesh> meshPtr
|
autoPtr<polyMesh> meshPtr
|
||||||
(
|
(
|
||||||
new fvMesh
|
new polyMesh
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
name,
|
name,
|
||||||
runTime.timeName(),
|
time().timeName(),
|
||||||
runTime,
|
time(),
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
@ -565,7 +633,14 @@ Foam::DelaunayMesh<Triangulation>::createMesh
|
|||||||
|
|
||||||
patches.setSize(nValidPatches);
|
patches.setSize(nValidPatches);
|
||||||
|
|
||||||
meshPtr().addFvPatches(patches);
|
meshPtr().addPatches(patches);
|
||||||
|
|
||||||
|
if (writeDelaunayData)
|
||||||
|
{
|
||||||
|
indices.write();
|
||||||
|
types.write();
|
||||||
|
processorIndices.write();
|
||||||
|
}
|
||||||
|
|
||||||
Info<< "Mesh created" << endl;
|
Info<< "Mesh created" << endl;
|
||||||
|
|
||||||
|
|||||||
@ -126,9 +126,24 @@ Foam::DistributedDelaunayMesh<Triangulation>::buildMap
|
|||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Triangulation>
|
template<class Triangulation>
|
||||||
Foam::DistributedDelaunayMesh<Triangulation>::DistributedDelaunayMesh()
|
Foam::DistributedDelaunayMesh<Triangulation>::DistributedDelaunayMesh
|
||||||
|
(
|
||||||
|
const Time& runTime
|
||||||
|
)
|
||||||
:
|
:
|
||||||
DelaunayMesh<Triangulation>(),
|
DelaunayMesh<Triangulation>(runTime),
|
||||||
|
allBackgroundMeshBounds_()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Triangulation>
|
||||||
|
Foam::DistributedDelaunayMesh<Triangulation>::DistributedDelaunayMesh
|
||||||
|
(
|
||||||
|
const Time& runTime,
|
||||||
|
const word& meshName
|
||||||
|
)
|
||||||
|
:
|
||||||
|
DelaunayMesh<Triangulation>(runTime, meshName),
|
||||||
allBackgroundMeshBounds_()
|
allBackgroundMeshBounds_()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
@ -135,13 +135,25 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
DistributedDelaunayMesh();
|
explicit DistributedDelaunayMesh(const Time& runTime);
|
||||||
|
|
||||||
|
DistributedDelaunayMesh
|
||||||
|
(
|
||||||
|
const Time& runTime,
|
||||||
|
const word& meshName
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
~DistributedDelaunayMesh();
|
~DistributedDelaunayMesh();
|
||||||
|
|
||||||
|
|
||||||
|
// Queries
|
||||||
|
|
||||||
|
//- Use DelaunayMesh timeCheck function
|
||||||
|
using DelaunayMesh<Triangulation>::timeCheck;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Build a mapDistribute for the supplied destination processor data
|
//- Build a mapDistribute for the supplied destination processor data
|
||||||
|
|||||||
@ -791,10 +791,11 @@ Foam::backgroundMeshDecomposition::backgroundMeshDecomposition
|
|||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
fvMesh::defaultRegion,
|
"backgroundMeshDecomposition",
|
||||||
runTime_.timeName(),
|
runTime_.timeName(),
|
||||||
runTime_,
|
runTime_,
|
||||||
IOobject::MUST_READ
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
meshCutter_
|
meshCutter_
|
||||||
|
|||||||
@ -27,7 +27,7 @@ License
|
|||||||
#include "cellSizeAndAlignmentControls.H"
|
#include "cellSizeAndAlignmentControls.H"
|
||||||
#include "pointIOField.H"
|
#include "pointIOField.H"
|
||||||
#include "scalarIOField.H"
|
#include "scalarIOField.H"
|
||||||
#include "tensorIOField.H"
|
#include "triadIOField.H"
|
||||||
#include "tetrahedron.H"
|
#include "tetrahedron.H"
|
||||||
#include "plane.H"
|
#include "plane.H"
|
||||||
#include "transform.H"
|
#include "transform.H"
|
||||||
@ -38,6 +38,8 @@ License
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(cellShapeControlMesh, 0);
|
defineTypeNameAndDebug(cellShapeControlMesh, 0);
|
||||||
|
|
||||||
|
word cellShapeControlMesh::meshSubDir = "cellShapeControlMesh";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -366,9 +368,89 @@ void Foam::cellShapeControlMesh::writeTriangulation()
|
|||||||
|
|
||||||
Foam::cellShapeControlMesh::cellShapeControlMesh(const Time& runTime)
|
Foam::cellShapeControlMesh::cellShapeControlMesh(const Time& runTime)
|
||||||
:
|
:
|
||||||
|
DistributedDelaunayMesh<CellSizeDelaunay>
|
||||||
|
(
|
||||||
|
runTime,
|
||||||
|
meshSubDir
|
||||||
|
),
|
||||||
runTime_(runTime),
|
runTime_(runTime),
|
||||||
defaultCellSize_(0.0)
|
defaultCellSize_(0.0)
|
||||||
{}
|
{
|
||||||
|
if (this->vertexCount())
|
||||||
|
{
|
||||||
|
fvMesh mesh
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
meshSubDir,
|
||||||
|
runTime.timeName(),
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mesh.nPoints() == this->vertexCount())
|
||||||
|
{
|
||||||
|
pointScalarField sizes
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"sizes",
|
||||||
|
runTime.timeName(),
|
||||||
|
meshSubDir,
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
pointMesh::New(mesh)
|
||||||
|
);
|
||||||
|
|
||||||
|
triadIOField alignments
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"alignments",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
meshSubDir,
|
||||||
|
mesh.time(),
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
sizes.size() == this->vertexCount()
|
||||||
|
&& alignments.size() == this->vertexCount()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
label count = 0;
|
||||||
|
for
|
||||||
|
(
|
||||||
|
Finite_vertices_iterator vit = finite_vertices_begin();
|
||||||
|
vit != finite_vertices_end();
|
||||||
|
++vit
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vit->targetCellSize() = sizes[count];
|
||||||
|
vit->alignment() = alignments[count];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"Foam::cellShapeControlMesh::cellShapeControlMesh"
|
||||||
|
"(const Time&)"
|
||||||
|
) << "Cell size point field is not the same size as the "
|
||||||
|
<< "mesh."
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Foam::triangulatedMesh::triangulatedMesh
|
//Foam::triangulatedMesh::triangulatedMesh
|
||||||
@ -744,9 +826,7 @@ void Foam::cellShapeControlMesh::insertBoundingPoints
|
|||||||
|
|
||||||
void Foam::cellShapeControlMesh::write() const
|
void Foam::cellShapeControlMesh::write() const
|
||||||
{
|
{
|
||||||
Info<< "Writing cell size and alignment mesh" << endl;
|
Info<< "Writing " << meshSubDir << endl;
|
||||||
|
|
||||||
const fileName name("cellSizeAndAlignmentMesh");
|
|
||||||
|
|
||||||
// Reindex the cells
|
// Reindex the cells
|
||||||
label cellCount = 0;
|
label cellCount = 0;
|
||||||
@ -763,17 +843,16 @@ void Foam::cellShapeControlMesh::write() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
labelList vertexMap;
|
DelaunayMesh<CellSizeDelaunay>::labelTolabelPairHashTable vertexMap;
|
||||||
labelList cellMap;
|
labelList cellMap;
|
||||||
|
|
||||||
autoPtr<fvMesh> meshPtr = DelaunayMesh<CellSizeDelaunay>::createMesh
|
autoPtr<polyMesh> meshPtr = DelaunayMesh<CellSizeDelaunay>::createMesh
|
||||||
(
|
(
|
||||||
name,
|
meshSubDir,
|
||||||
runTime_,
|
|
||||||
vertexMap,
|
vertexMap,
|
||||||
cellMap
|
cellMap
|
||||||
);
|
);
|
||||||
const fvMesh& mesh = meshPtr();
|
const polyMesh& mesh = meshPtr();
|
||||||
|
|
||||||
pointScalarField sizes
|
pointScalarField sizes
|
||||||
(
|
(
|
||||||
@ -781,7 +860,8 @@ void Foam::cellShapeControlMesh::write() const
|
|||||||
(
|
(
|
||||||
"sizes",
|
"sizes",
|
||||||
mesh.time().timeName(),
|
mesh.time().timeName(),
|
||||||
mesh,
|
meshSubDir,
|
||||||
|
mesh.time(),
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
@ -789,7 +869,22 @@ void Foam::cellShapeControlMesh::write() const
|
|||||||
scalar(0)
|
scalar(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
OFstream str(runTime_.path()/"alignments.obj");
|
triadIOField alignments
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"alignments",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
meshSubDir,
|
||||||
|
mesh.time(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
sizes.size()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Write alignments
|
||||||
|
// OFstream str(runTime_.path()/"alignments.obj");
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
@ -801,35 +896,41 @@ void Foam::cellShapeControlMesh::write() const
|
|||||||
if (!vit->farPoint())
|
if (!vit->farPoint())
|
||||||
{
|
{
|
||||||
// Populate sizes
|
// Populate sizes
|
||||||
sizes[vertexMap[vit->index()]] = vit->targetCellSize();
|
sizes[vertexMap[labelPair(vit->index(), vit->procIndex())]] =
|
||||||
|
vit->targetCellSize();
|
||||||
|
|
||||||
// Write alignments
|
alignments[vertexMap[labelPair(vit->index(), vit->procIndex())]] =
|
||||||
const tensor& alignment = vit->alignment();
|
vit->alignment();
|
||||||
pointFromPoint pt = topoint(vit->point());
|
|
||||||
|
|
||||||
if
|
// // Write alignments
|
||||||
(
|
// const tensor& alignment = vit->alignment();
|
||||||
alignment.x() == triad::unset[0]
|
// pointFromPoint pt = topoint(vit->point());
|
||||||
|| alignment.y() == triad::unset[0]
|
//
|
||||||
|| alignment.z() == triad::unset[0]
|
// if
|
||||||
)
|
// (
|
||||||
{
|
// alignment.x() == triad::unset[0]
|
||||||
Info<< "Bad alignment = " << vit->info();
|
// || alignment.y() == triad::unset[0]
|
||||||
|
// || alignment.z() == triad::unset[0]
|
||||||
vit->alignment() = tensor::I;
|
// )
|
||||||
|
// {
|
||||||
Info<< "New alignment = " << vit->info();
|
// Info<< "Bad alignment = " << vit->info();
|
||||||
|
//
|
||||||
continue;
|
// vit->alignment() = tensor::I;
|
||||||
}
|
//
|
||||||
|
// Info<< "New alignment = " << vit->info();
|
||||||
meshTools::writeOBJ(str, pt, alignment.x() + pt);
|
//
|
||||||
meshTools::writeOBJ(str, pt, alignment.y() + pt);
|
// continue;
|
||||||
meshTools::writeOBJ(str, pt, alignment.z() + pt);
|
// }
|
||||||
|
//
|
||||||
|
// meshTools::writeOBJ(str, pt, alignment.x() + pt);
|
||||||
|
// meshTools::writeOBJ(str, pt, alignment.y() + pt);
|
||||||
|
// meshTools::writeOBJ(str, pt, alignment.z() + pt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.write();
|
mesh.write();
|
||||||
|
sizes.write();
|
||||||
|
alignments.write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -95,6 +95,9 @@ public:
|
|||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
ClassName("cellShapeControlMesh");
|
ClassName("cellShapeControlMesh");
|
||||||
|
|
||||||
|
//- Return the mesh sub-directory name (usually "cellShapeControlMesh")
|
||||||
|
static word meshSubDir;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
|
|||||||
@ -223,6 +223,13 @@ void Foam::controlMeshRefinement::initialMeshPopulation
|
|||||||
const autoPtr<backgroundMeshDecomposition>& decomposition
|
const autoPtr<backgroundMeshDecomposition>& decomposition
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
if (shapeController_.shapeControlMesh().vertexCount() > 0)
|
||||||
|
{
|
||||||
|
// Mesh already populated.
|
||||||
|
Info<< "Cell size and alignment mesh already populated." << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
autoPtr<boundBox> overallBoundBox;
|
autoPtr<boundBox> overallBoundBox;
|
||||||
|
|
||||||
// Need to pass in the background mesh decomposition so that can test if
|
// Need to pass in the background mesh decomposition so that can test if
|
||||||
@ -268,7 +275,7 @@ void Foam::controlMeshRefinement::initialMeshPopulation
|
|||||||
|
|
||||||
controlFunction.initialVertices(pts, sizes, alignments);
|
controlFunction.initialVertices(pts, sizes, alignments);
|
||||||
|
|
||||||
Info<< " Got initial vertices list" << endl;
|
Info<< " Got initial vertices list of size " << pts.size() << endl;
|
||||||
|
|
||||||
List<Vb> vertices(pts.size());
|
List<Vb> vertices(pts.size());
|
||||||
|
|
||||||
|
|||||||
@ -981,7 +981,7 @@ Foam::conformalVoronoiMesh::conformalVoronoiMesh
|
|||||||
const dictionary& foamyHexMeshDict
|
const dictionary& foamyHexMeshDict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
DistributedDelaunayMesh<Delaunay>(),
|
DistributedDelaunayMesh<Delaunay>(runTime),
|
||||||
runTime_(runTime),
|
runTime_(runTime),
|
||||||
rndGen_(64293*Pstream::myProcNo()),
|
rndGen_(64293*Pstream::myProcNo()),
|
||||||
foamyHexMeshControls_(foamyHexMeshDict),
|
foamyHexMeshControls_(foamyHexMeshDict),
|
||||||
@ -1135,8 +1135,6 @@ void Foam::conformalVoronoiMesh::initialiseForMotion()
|
|||||||
Foam::indexedVertexEnum::vtExternalFeaturePoint
|
Foam::indexedVertexEnum::vtExternalFeaturePoint
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//writeFixedPoints("fixedPointsStart.obj");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1814,32 +1812,6 @@ void Foam::conformalVoronoiMesh::move()
|
|||||||
if (time().outputTime())
|
if (time().outputTime())
|
||||||
{
|
{
|
||||||
writeMesh(time().timeName());
|
writeMesh(time().timeName());
|
||||||
|
|
||||||
// label cellI = 0;
|
|
||||||
// for
|
|
||||||
// (
|
|
||||||
// Finite_cells_iterator cit = finite_cells_begin();
|
|
||||||
// cit != finite_cells_end();
|
|
||||||
// ++cit
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// if
|
|
||||||
// (
|
|
||||||
// !cit->hasFarPoint()
|
|
||||||
// && !is_infinite(cit)
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// cit->cellIndex() = cellI++;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// labelList vertexMap;
|
|
||||||
// labelList cellMap;
|
|
||||||
// autoPtr<fvMesh> tetMesh =
|
|
||||||
// createMesh("tetMesh", runTime_, vertexMap, cellMap);
|
|
||||||
//
|
|
||||||
// tetMesh().write();
|
|
||||||
//writeFixedPoints("fixedPointsStart_" + runTime_.timeName() + ".obj");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateSizesAndAlignments(pointsToInsert);
|
updateSizesAndAlignments(pointsToInsert);
|
||||||
|
|||||||
@ -2808,7 +2808,7 @@ void Foam::conformalVoronoiMesh::createFacesOwnerNeighbourAndPatches
|
|||||||
patchPointPairSlaves[patchI].transfer(patchPPSlaves[patchI]);
|
patchPointPairSlaves[patchI].transfer(patchPPSlaves[patchI]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (foamyHexMeshControls().objOutput())
|
if (foamyHexMeshControls().objOutput())
|
||||||
{
|
{
|
||||||
Info<< "Writing processor interfaces" << endl;
|
Info<< "Writing processor interfaces" << endl;
|
||||||
|
|
||||||
|
|||||||
@ -337,11 +337,10 @@ inline void Foam::conformalVoronoiMesh::createPointPair
|
|||||||
const Foam::point internalPt = surfPt - ppDistn;
|
const Foam::point internalPt = surfPt - ppDistn;
|
||||||
const Foam::point externalPt = surfPt + ppDistn;
|
const Foam::point externalPt = surfPt + ppDistn;
|
||||||
|
|
||||||
if
|
bool internalInside = geometryToConformTo_.inside(internalPt);
|
||||||
(
|
bool externalOutside = geometryToConformTo_.outside(externalPt);
|
||||||
geometryToConformTo_.inside(internalPt)
|
|
||||||
&& geometryToConformTo_.outside(externalPt)
|
if (internalInside && externalOutside)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
pts.append
|
pts.append
|
||||||
(
|
(
|
||||||
@ -369,11 +368,8 @@ inline void Foam::conformalVoronoiMesh::createPointPair
|
|||||||
{
|
{
|
||||||
Info<< "Warning: point pair not inside/outside" << nl
|
Info<< "Warning: point pair not inside/outside" << nl
|
||||||
<< " surfPt = " << surfPt << nl
|
<< " surfPt = " << surfPt << nl
|
||||||
<< " internal = "
|
<< " internal = " << internalPt << " " << internalInside << nl
|
||||||
<< internalPt << " " << geometryToConformTo_.inside(internalPt)
|
<< " external = " << externalPt << " " << externalOutside
|
||||||
<< nl
|
|
||||||
<< " external = "
|
|
||||||
<< externalPt << " " << geometryToConformTo_.outside(externalPt)
|
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -421,202 +421,247 @@ void Foam::conformalVoronoiMesh::writeMesh(const fileName& instance)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (foamyHexMeshControls().writeCellShapeControlMesh())
|
||||||
|
{
|
||||||
|
cellShapeControls().shapeControlMesh().write();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foamyHexMeshControls().writeBackgroundMeshDecomposition())
|
||||||
|
{
|
||||||
|
Info<< nl << "Writing " << "backgroundMeshDecomposition" << endl;
|
||||||
|
|
||||||
|
// Have to explicitly update the mesh instance.
|
||||||
|
const_cast<fvMesh&>(decomposition_().mesh()).setInstance
|
||||||
|
(
|
||||||
|
time().timeName()
|
||||||
|
);
|
||||||
|
|
||||||
|
decomposition_().mesh().write();
|
||||||
|
}
|
||||||
|
|
||||||
if (foamyHexMeshControls().writeTetDualMesh())
|
if (foamyHexMeshControls().writeTetDualMesh())
|
||||||
{
|
{
|
||||||
// Determine map from Delaunay vertex to Dual mesh
|
label cellI = 0;
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
for
|
||||||
|
(
|
||||||
// From all Delaunay vertices to cell (positive index)
|
Finite_cells_iterator cit = finite_cells_begin();
|
||||||
// or patch face (negative index)
|
cit != finite_cells_end();
|
||||||
labelList vertexToDualAddressing(number_of_vertices(), 0);
|
++cit
|
||||||
|
)
|
||||||
forAll(cellToDelaunayVertex, cellI)
|
|
||||||
{
|
{
|
||||||
label vertI = cellToDelaunayVertex[cellI];
|
if
|
||||||
|
(
|
||||||
if (vertexToDualAddressing[vertI] != 0)
|
!cit->hasFarPoint()
|
||||||
|
&& !is_infinite(cit)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
|
cit->cellIndex() = cellI++;
|
||||||
<< "Delaunay vertex " << vertI
|
|
||||||
<< " from cell " << cellI
|
|
||||||
<< " is already mapped to "
|
|
||||||
<< vertexToDualAddressing[vertI]
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
vertexToDualAddressing[vertI] = cellI+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll(patchToDelaunayVertex, patchI)
|
|
||||||
{
|
|
||||||
const labelList& patchVertices = patchToDelaunayVertex[patchI];
|
|
||||||
|
|
||||||
forAll(patchVertices, i)
|
|
||||||
{
|
|
||||||
label vertI = patchVertices[i];
|
|
||||||
|
|
||||||
if (vertexToDualAddressing[vertI] > 0)
|
|
||||||
{
|
|
||||||
FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
|
|
||||||
<< "Delaunay vertex " << vertI
|
|
||||||
<< " from patch " << patchI
|
|
||||||
<< " local index " << i
|
|
||||||
<< " is already mapped to cell "
|
|
||||||
<< vertexToDualAddressing[vertI]-1
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vertex might be used by multiple faces. Which one to
|
|
||||||
// use? For now last one wins.
|
|
||||||
label dualFaceI = dualPatchStarts[patchI]+i;
|
|
||||||
vertexToDualAddressing[vertI] = -dualFaceI-1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Info<< nl << "Writing " << "tetDualMesh" << endl;
|
||||||
|
|
||||||
// Calculate tet mesh addressing
|
DistributedDelaunayMesh<Delaunay>::labelTolabelPairHashTable vertexMap;
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
labelList cellMap;
|
||||||
|
autoPtr<polyMesh> tetMesh =
|
||||||
|
createMesh("tetDualMesh", vertexMap, cellMap);
|
||||||
|
|
||||||
pointField points;
|
tetMesh().write();
|
||||||
labelList boundaryPts(number_of_finite_cells(), -1);
|
|
||||||
// From tet point back to Delaunay vertex index
|
|
||||||
labelList pointToDelaunayVertex;
|
|
||||||
faceList faces;
|
|
||||||
labelList owner;
|
|
||||||
labelList neighbour;
|
|
||||||
wordList patchTypes;
|
|
||||||
wordList patchNames;
|
|
||||||
PtrList<dictionary> patchDicts;
|
|
||||||
pointField cellCentres;
|
|
||||||
|
|
||||||
calcTetMesh
|
// // Determine map from Delaunay vertex to Dual mesh
|
||||||
(
|
// // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
points,
|
//
|
||||||
pointToDelaunayVertex,
|
// // From all Delaunay vertices to cell (positive index)
|
||||||
faces,
|
// // or patch face (negative index)
|
||||||
owner,
|
// labelList vertexToDualAddressing(number_of_vertices(), 0);
|
||||||
neighbour,
|
//
|
||||||
patchTypes,
|
// forAll(cellToDelaunayVertex, cellI)
|
||||||
patchNames,
|
// {
|
||||||
patchDicts
|
// label vertI = cellToDelaunayVertex[cellI];
|
||||||
);
|
//
|
||||||
|
// if (vertexToDualAddressing[vertI] != 0)
|
||||||
|
// {
|
||||||
|
// FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
|
||||||
// Calculate map from tet points to dual mesh cells/patch faces
|
// << "Delaunay vertex " << vertI
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// << " from cell " << cellI
|
||||||
|
// << " is already mapped to "
|
||||||
labelIOList pointDualAddressing
|
// << vertexToDualAddressing[vertI]
|
||||||
(
|
// << exit(FatalError);
|
||||||
IOobject
|
// }
|
||||||
(
|
// vertexToDualAddressing[vertI] = cellI+1;
|
||||||
"pointDualAddressing",
|
// }
|
||||||
instance,
|
//
|
||||||
"tetDualMesh"/polyMesh::meshSubDir,
|
// forAll(patchToDelaunayVertex, patchI)
|
||||||
runTime_,
|
// {
|
||||||
IOobject::NO_READ,
|
// const labelList& patchVertices = patchToDelaunayVertex[patchI];
|
||||||
IOobject::AUTO_WRITE,
|
//
|
||||||
false
|
// forAll(patchVertices, i)
|
||||||
),
|
// {
|
||||||
UIndirectList<label>
|
// label vertI = patchVertices[i];
|
||||||
(
|
//
|
||||||
vertexToDualAddressing,
|
// if (vertexToDualAddressing[vertI] > 0)
|
||||||
pointToDelaunayVertex
|
// {
|
||||||
)()
|
// FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
|
||||||
);
|
// << "Delaunay vertex " << vertI
|
||||||
|
// << " from patch " << patchI
|
||||||
label pointI = findIndex(pointDualAddressing, -1);
|
// << " local index " << i
|
||||||
if (pointI != -1)
|
// << " is already mapped to cell "
|
||||||
{
|
// << vertexToDualAddressing[vertI]-1
|
||||||
WarningIn
|
// << exit(FatalError);
|
||||||
(
|
// }
|
||||||
"conformalVoronoiMesh::writeMesh\n"
|
//
|
||||||
"(\n"
|
// // Vertex might be used by multiple faces. Which one to
|
||||||
" const fileName& instance,\n"
|
// // use? For now last one wins.
|
||||||
" bool filterFaces\n"
|
// label dualFaceI = dualPatchStarts[patchI]+i;
|
||||||
")\n"
|
// vertexToDualAddressing[vertI] = -dualFaceI-1;
|
||||||
) << "Delaunay vertex " << pointI
|
// }
|
||||||
<< " does not have a corresponding dual cell." << endl;
|
// }
|
||||||
}
|
//
|
||||||
|
//
|
||||||
Info<< "Writing map from tetDualMesh points to Voronoi mesh to "
|
// // Calculate tet mesh addressing
|
||||||
<< pointDualAddressing.objectPath() << endl;
|
// // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
pointDualAddressing.write();
|
//
|
||||||
|
// pointField points;
|
||||||
|
// labelList boundaryPts(number_of_finite_cells(), -1);
|
||||||
|
// // From tet point back to Delaunay vertex index
|
||||||
// Write tet points corresponding to the Voronoi cell/face centre
|
// labelList pointToDelaunayVertex;
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// faceList faces;
|
||||||
{
|
// labelList owner;
|
||||||
// Read Voronoi mesh
|
// labelList neighbour;
|
||||||
fvMesh mesh
|
// wordList patchTypes;
|
||||||
(
|
// wordList patchNames;
|
||||||
IOobject
|
// PtrList<dictionary> patchDicts;
|
||||||
(
|
// pointField cellCentres;
|
||||||
Foam::polyMesh::defaultRegion,
|
//
|
||||||
instance,
|
// calcTetMesh
|
||||||
runTime_,
|
// (
|
||||||
IOobject::MUST_READ
|
// points,
|
||||||
)
|
// pointToDelaunayVertex,
|
||||||
);
|
// faces,
|
||||||
pointIOField dualPoints
|
// owner,
|
||||||
(
|
// neighbour,
|
||||||
IOobject
|
// patchTypes,
|
||||||
(
|
// patchNames,
|
||||||
"dualPoints",
|
// patchDicts
|
||||||
instance,
|
// );
|
||||||
"tetDualMesh"/polyMesh::meshSubDir,
|
//
|
||||||
runTime_,
|
//
|
||||||
IOobject::NO_READ,
|
//
|
||||||
IOobject::AUTO_WRITE,
|
// // Calculate map from tet points to dual mesh cells/patch faces
|
||||||
false
|
// // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
),
|
//
|
||||||
points
|
// labelIOList pointDualAddressing
|
||||||
);
|
// (
|
||||||
|
// IOobject
|
||||||
forAll(pointDualAddressing, pointI)
|
// (
|
||||||
{
|
// "pointDualAddressing",
|
||||||
label index = pointDualAddressing[pointI];
|
// instance,
|
||||||
|
// "tetDualMesh"/polyMesh::meshSubDir,
|
||||||
if (index > 0)
|
// runTime_,
|
||||||
{
|
// IOobject::NO_READ,
|
||||||
label cellI = index-1;
|
// IOobject::AUTO_WRITE,
|
||||||
dualPoints[pointI] = mesh.cellCentres()[cellI];
|
// false
|
||||||
}
|
// ),
|
||||||
else if (index < 0)
|
// UIndirectList<label>
|
||||||
{
|
// (
|
||||||
label faceI = -index-1;
|
// vertexToDualAddressing,
|
||||||
if (faceI >= mesh.nInternalFaces())
|
// pointToDelaunayVertex
|
||||||
{
|
// )()
|
||||||
dualPoints[pointI] = mesh.faceCentres()[faceI];
|
// );
|
||||||
}
|
//
|
||||||
}
|
// label pointI = findIndex(pointDualAddressing, -1);
|
||||||
}
|
// if (pointI != -1)
|
||||||
|
// {
|
||||||
Info<< "Writing new tetDualMesh points mapped onto Voronoi mesh to "
|
// WarningIn
|
||||||
<< dualPoints.objectPath() << endl
|
// (
|
||||||
<< "Replace the polyMesh/points with these." << endl;
|
// "conformalVoronoiMesh::writeMesh\n"
|
||||||
dualPoints.write();
|
// "(\n"
|
||||||
}
|
// " const fileName& instance,\n"
|
||||||
|
// " bool filterFaces\n"
|
||||||
|
// ")\n"
|
||||||
Info<< nl << "Writing tetDualMesh to " << instance << endl;
|
// ) << "Delaunay vertex " << pointI
|
||||||
|
// << " does not have a corresponding dual cell." << endl;
|
||||||
PackedBoolList boundaryFacesToRemove;
|
// }
|
||||||
writeMesh
|
//
|
||||||
(
|
// Info<< "Writing map from tetDualMesh points to Voronoi mesh to "
|
||||||
"tetDualMesh",
|
// << pointDualAddressing.objectPath() << endl;
|
||||||
instance,
|
// pointDualAddressing.write();
|
||||||
points,
|
//
|
||||||
boundaryPts,
|
//
|
||||||
faces,
|
//
|
||||||
owner,
|
// // Write tet points corresponding to the Voronoi cell/face centre
|
||||||
neighbour,
|
// // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
patchTypes,
|
// {
|
||||||
patchNames,
|
// // Read Voronoi mesh
|
||||||
patchDicts,
|
// fvMesh mesh
|
||||||
cellCentres,
|
// (
|
||||||
boundaryFacesToRemove
|
// IOobject
|
||||||
);
|
// (
|
||||||
|
// Foam::polyMesh::defaultRegion,
|
||||||
|
// instance,
|
||||||
|
// runTime_,
|
||||||
|
// IOobject::MUST_READ
|
||||||
|
// )
|
||||||
|
// );
|
||||||
|
// pointIOField dualPoints
|
||||||
|
// (
|
||||||
|
// IOobject
|
||||||
|
// (
|
||||||
|
// "dualPoints",
|
||||||
|
// instance,
|
||||||
|
// "tetDualMesh"/polyMesh::meshSubDir,
|
||||||
|
// runTime_,
|
||||||
|
// IOobject::NO_READ,
|
||||||
|
// IOobject::AUTO_WRITE,
|
||||||
|
// false
|
||||||
|
// ),
|
||||||
|
// points
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// forAll(pointDualAddressing, pointI)
|
||||||
|
// {
|
||||||
|
// label index = pointDualAddressing[pointI];
|
||||||
|
//
|
||||||
|
// if (index > 0)
|
||||||
|
// {
|
||||||
|
// label cellI = index-1;
|
||||||
|
// dualPoints[pointI] = mesh.cellCentres()[cellI];
|
||||||
|
// }
|
||||||
|
// else if (index < 0)
|
||||||
|
// {
|
||||||
|
// label faceI = -index-1;
|
||||||
|
// if (faceI >= mesh.nInternalFaces())
|
||||||
|
// {
|
||||||
|
// dualPoints[pointI] = mesh.faceCentres()[faceI];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Info<< "Writing tetDualMesh points mapped onto Voronoi mesh to "
|
||||||
|
// << dualPoints.objectPath() << endl
|
||||||
|
// << "Replace the polyMesh/points with these." << endl;
|
||||||
|
// dualPoints.write();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Info<< nl << "Writing tetDualMesh to " << instance << endl;
|
||||||
|
//
|
||||||
|
// PackedBoolList boundaryFacesToRemove;
|
||||||
|
// writeMesh
|
||||||
|
// (
|
||||||
|
// "tetDualMesh",
|
||||||
|
// instance,
|
||||||
|
// points,
|
||||||
|
// boundaryPts,
|
||||||
|
// faces,
|
||||||
|
// owner,
|
||||||
|
// neighbour,
|
||||||
|
// patchTypes,
|
||||||
|
// patchNames,
|
||||||
|
// patchDicts,
|
||||||
|
// cellCentres,
|
||||||
|
// boundaryFacesToRemove
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -247,6 +247,20 @@ Foam::cvControls::cvControls
|
|||||||
}
|
}
|
||||||
|
|
||||||
writeTetDualMesh_ = Switch(filteringDict.lookup("writeTetDualMesh"));
|
writeTetDualMesh_ = Switch(filteringDict.lookup("writeTetDualMesh"));
|
||||||
|
|
||||||
|
writeCellShapeControlMesh_ =
|
||||||
|
Switch(filteringDict.lookup("writeCellShapeControlMesh"));
|
||||||
|
|
||||||
|
if (Pstream::parRun())
|
||||||
|
{
|
||||||
|
writeBackgroundMeshDecomposition_ =
|
||||||
|
Switch(filteringDict.lookup("writeBackgroundMeshDecomposition"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writeBackgroundMeshDecomposition_ = Switch(false);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -202,6 +202,10 @@ class cvControls
|
|||||||
//- Write tet mesh at output time (it always writes the Voronoi)
|
//- Write tet mesh at output time (it always writes the Voronoi)
|
||||||
Switch writeTetDualMesh_;
|
Switch writeTetDualMesh_;
|
||||||
|
|
||||||
|
Switch writeCellShapeControlMesh_;
|
||||||
|
|
||||||
|
Switch writeBackgroundMeshDecomposition_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
@ -335,6 +339,12 @@ public:
|
|||||||
|
|
||||||
//- Write tetMesh at output time
|
//- Write tetMesh at output time
|
||||||
inline Switch writeTetDualMesh() const;
|
inline Switch writeTetDualMesh() const;
|
||||||
|
|
||||||
|
//- Write cellShapeControlMesh at output time
|
||||||
|
inline Switch writeCellShapeControlMesh() const;
|
||||||
|
|
||||||
|
//- Write backgroundMeshDecomposition at output time
|
||||||
|
inline Switch writeBackgroundMeshDecomposition() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -215,5 +215,15 @@ inline Foam::Switch Foam::cvControls::writeTetDualMesh() const
|
|||||||
return writeTetDualMesh_;
|
return writeTetDualMesh_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Foam::Switch Foam::cvControls::writeCellShapeControlMesh() const
|
||||||
|
{
|
||||||
|
return writeCellShapeControlMesh_;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Foam::Switch Foam::cvControls::writeBackgroundMeshDecomposition() const
|
||||||
|
{
|
||||||
|
return writeBackgroundMeshDecomposition_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -55,6 +55,9 @@ Usage
|
|||||||
\param -fields \n
|
\param -fields \n
|
||||||
Use existing geometry decomposition and convert fields only.
|
Use existing geometry decomposition and convert fields only.
|
||||||
|
|
||||||
|
\param -sets \n
|
||||||
|
Decompose cellSets, faceSets, pointSets.
|
||||||
|
|
||||||
\param -force \n
|
\param -force \n
|
||||||
Remove any existing \a processor subdirectories before decomposing the
|
Remove any existing \a processor subdirectories before decomposing the
|
||||||
geometry.
|
geometry.
|
||||||
@ -127,6 +130,11 @@ int main(int argc, char *argv[])
|
|||||||
"use existing geometry decomposition and convert fields only"
|
"use existing geometry decomposition and convert fields only"
|
||||||
);
|
);
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"sets",
|
||||||
|
"decompose cellSets, faceSets, pointSets"
|
||||||
|
);
|
||||||
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"force",
|
"force",
|
||||||
"remove existing processor*/ subdirs before decomposing the geometry"
|
"remove existing processor*/ subdirs before decomposing the geometry"
|
||||||
@ -146,6 +154,7 @@ int main(int argc, char *argv[])
|
|||||||
bool writeCellDist = args.optionFound("cellDist");
|
bool writeCellDist = args.optionFound("cellDist");
|
||||||
bool copyUniform = args.optionFound("copyUniform");
|
bool copyUniform = args.optionFound("copyUniform");
|
||||||
bool decomposeFieldsOnly = args.optionFound("fields");
|
bool decomposeFieldsOnly = args.optionFound("fields");
|
||||||
|
bool decomposeSets = args.optionFound("sets");
|
||||||
bool forceOverwrite = args.optionFound("force");
|
bool forceOverwrite = args.optionFound("force");
|
||||||
bool ifRequiredDecomposition = args.optionFound("ifRequired");
|
bool ifRequiredDecomposition = args.optionFound("ifRequired");
|
||||||
|
|
||||||
@ -312,7 +321,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
mesh.decomposeMesh();
|
mesh.decomposeMesh();
|
||||||
|
|
||||||
mesh.writeDecomposition();
|
mesh.writeDecomposition(decomposeSets);
|
||||||
|
|
||||||
if (writeCellDist)
|
if (writeCellDist)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -34,6 +34,10 @@ License
|
|||||||
#include "globalMeshData.H"
|
#include "globalMeshData.H"
|
||||||
#include "DynamicList.H"
|
#include "DynamicList.H"
|
||||||
#include "fvFieldDecomposer.H"
|
#include "fvFieldDecomposer.H"
|
||||||
|
#include "IOobjectList.H"
|
||||||
|
#include "cellSet.H"
|
||||||
|
#include "faceSet.H"
|
||||||
|
#include "pointSet.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -123,7 +127,7 @@ Foam::domainDecomposition::~domainDecomposition()
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::domainDecomposition::writeDecomposition()
|
bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets)
|
||||||
{
|
{
|
||||||
Info<< "\nConstructing processor meshes" << endl;
|
Info<< "\nConstructing processor meshes" << endl;
|
||||||
|
|
||||||
@ -160,6 +164,37 @@ bool Foam::domainDecomposition::writeDecomposition()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PtrList<const cellSet> cellSets;
|
||||||
|
PtrList<const faceSet> faceSets;
|
||||||
|
PtrList<const pointSet> pointSets;
|
||||||
|
if (decomposeSets)
|
||||||
|
{
|
||||||
|
// Read sets
|
||||||
|
IOobjectList objects(*this, facesInstance(), "polyMesh/sets");
|
||||||
|
{
|
||||||
|
IOobjectList cSets(objects.lookupClass(cellSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, cSets, iter)
|
||||||
|
{
|
||||||
|
cellSets.append(new cellSet(*iter()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
IOobjectList fSets(objects.lookupClass(faceSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, fSets, iter)
|
||||||
|
{
|
||||||
|
faceSets.append(new faceSet(*iter()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
IOobjectList pSets(objects.lookupClass(pointSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, pSets, iter)
|
||||||
|
{
|
||||||
|
pointSets.append(new pointSet(*iter()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
label maxProcCells = 0;
|
label maxProcCells = 0;
|
||||||
label totProcFaces = 0;
|
label totProcFaces = 0;
|
||||||
label maxProcPatches = 0;
|
label maxProcPatches = 0;
|
||||||
@ -732,6 +767,52 @@ bool Foam::domainDecomposition::writeDecomposition()
|
|||||||
|
|
||||||
procMesh.write();
|
procMesh.write();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (decomposeSets)
|
||||||
|
{
|
||||||
|
forAll(cellSets, i)
|
||||||
|
{
|
||||||
|
const cellSet& cs = cellSets[i];
|
||||||
|
cellSet set(procMesh, cs.name(), cs.size()/nProcs_);
|
||||||
|
forAll(curCellLabels, i)
|
||||||
|
{
|
||||||
|
if (cs.found(curCellLabels[i]))
|
||||||
|
{
|
||||||
|
set.insert(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set.write();
|
||||||
|
}
|
||||||
|
forAll(faceSets, i)
|
||||||
|
{
|
||||||
|
const faceSet& cs = faceSets[i];
|
||||||
|
faceSet set(procMesh, cs.name(), cs.size()/nProcs_);
|
||||||
|
forAll(curFaceLabels, i)
|
||||||
|
{
|
||||||
|
if (cs.found(mag(curFaceLabels[i])-1))
|
||||||
|
{
|
||||||
|
set.insert(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set.write();
|
||||||
|
}
|
||||||
|
forAll(pointSets, i)
|
||||||
|
{
|
||||||
|
const pointSet& cs = pointSets[i];
|
||||||
|
pointSet set(procMesh, cs.name(), cs.size()/nProcs_);
|
||||||
|
forAll(curPointLabels, i)
|
||||||
|
{
|
||||||
|
if (cs.found(curPointLabels[i]))
|
||||||
|
{
|
||||||
|
set.insert(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Write points if pointsInstance differing from facesInstance
|
// Write points if pointsInstance differing from facesInstance
|
||||||
if (facesInstancePointsPtr_.valid())
|
if (facesInstancePointsPtr_.valid())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -172,7 +172,7 @@ public:
|
|||||||
void decomposeMesh();
|
void decomposeMesh();
|
||||||
|
|
||||||
//- Write decomposition
|
//- Write decomposition
|
||||||
bool writeDecomposition();
|
bool writeDecomposition(const bool decomposeSets);
|
||||||
|
|
||||||
//- Cell-processor decomposition labels
|
//- Cell-processor decomposition labels
|
||||||
const labelList& cellToProc() const
|
const labelList& cellToProc() const
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
||||||
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \
|
-I$(LIB_SRC)/parallel/reconstruct/reconstruct/lnInclude \
|
||||||
-I$(LIB_SRC)/regionModels/regionModel/lnInclude
|
-I$(LIB_SRC)/regionModels/regionModel/lnInclude
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,10 @@ Description
|
|||||||
#include "pointFieldReconstructor.H"
|
#include "pointFieldReconstructor.H"
|
||||||
#include "reconstructLagrangian.H"
|
#include "reconstructLagrangian.H"
|
||||||
|
|
||||||
|
#include "cellSet.H"
|
||||||
|
#include "faceSet.H"
|
||||||
|
#include "pointSet.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool haveAllTimes
|
bool haveAllTimes
|
||||||
@ -99,6 +103,11 @@ int main(int argc, char *argv[])
|
|||||||
"skip reconstructing lagrangian positions and fields"
|
"skip reconstructing lagrangian positions and fields"
|
||||||
);
|
);
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"sets",
|
||||||
|
"reconstruct cellSets, faceSets, pointSets"
|
||||||
|
);
|
||||||
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"newTimes",
|
"newTimes",
|
||||||
"only reconstruct new times (i.e. that do not exist already)"
|
"only reconstruct new times (i.e. that do not exist already)"
|
||||||
@ -113,6 +122,9 @@ int main(int argc, char *argv[])
|
|||||||
args.optionLookup("fields")() >> selectedFields;
|
args.optionLookup("fields")() >> selectedFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool reconstructSets = args.optionFound("sets");
|
||||||
|
|
||||||
|
|
||||||
const bool noLagrangian = args.optionFound("noLagrangian");
|
const bool noLagrangian = args.optionFound("noLagrangian");
|
||||||
|
|
||||||
HashSet<word> selectedLagrangianFields;
|
HashSet<word> selectedLagrangianFields;
|
||||||
@ -668,6 +680,148 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "No lagrangian fields" << nl << endl;
|
Info<< "No lagrangian fields" << nl << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (reconstructSets)
|
||||||
|
{
|
||||||
|
// Scan to find all sets
|
||||||
|
HashTable<label> cSetNames;
|
||||||
|
HashTable<label> fSetNames;
|
||||||
|
HashTable<label> pSetNames;
|
||||||
|
|
||||||
|
forAll(procMeshes.meshes(), procI)
|
||||||
|
{
|
||||||
|
const fvMesh& procMesh = procMeshes.meshes()[procI];
|
||||||
|
|
||||||
|
IOobjectList objects
|
||||||
|
(
|
||||||
|
procMesh, procMesh.facesInstance(), "polyMesh/sets"
|
||||||
|
);
|
||||||
|
IOobjectList cSets(objects.lookupClass(cellSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, cSets, iter)
|
||||||
|
{
|
||||||
|
cSetNames.insert(iter.key(), cSetNames.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
IOobjectList fSets(objects.lookupClass(faceSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, fSets, iter)
|
||||||
|
{
|
||||||
|
fSetNames.insert(iter.key(), fSetNames.size());
|
||||||
|
}
|
||||||
|
IOobjectList pSets(objects.lookupClass(pointSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, pSets, iter)
|
||||||
|
{
|
||||||
|
pSetNames.insert(iter.key(), pSetNames.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct all sets
|
||||||
|
PtrList<cellSet> cellSets(cSetNames.size());
|
||||||
|
PtrList<faceSet> faceSets(fSetNames.size());
|
||||||
|
PtrList<pointSet> pointSets(pSetNames.size());
|
||||||
|
|
||||||
|
// Load sets
|
||||||
|
forAll(procMeshes.meshes(), procI)
|
||||||
|
{
|
||||||
|
const fvMesh& procMesh = procMeshes.meshes()[procI];
|
||||||
|
|
||||||
|
IOobjectList objects
|
||||||
|
(
|
||||||
|
procMesh, procMesh.facesInstance(), "polyMesh/sets"
|
||||||
|
);
|
||||||
|
|
||||||
|
// cellSets
|
||||||
|
const labelList& cellMap =
|
||||||
|
procMeshes.cellProcAddressing()[procI];
|
||||||
|
|
||||||
|
IOobjectList cSets(objects.lookupClass(cellSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, cSets, iter)
|
||||||
|
{
|
||||||
|
// Load cellSet
|
||||||
|
const cellSet procSet(*iter());
|
||||||
|
label setI = cSetNames[iter.key()];
|
||||||
|
if (!cellSets.set(setI))
|
||||||
|
{
|
||||||
|
cellSets.set
|
||||||
|
(
|
||||||
|
setI,
|
||||||
|
new cellSet(mesh, iter.key(), procSet.size())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
cellSet& cSet = cellSets[setI];
|
||||||
|
|
||||||
|
forAllConstIter(cellSet, procSet, iter)
|
||||||
|
{
|
||||||
|
cSet.insert(cellMap[iter.key()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// faceSets
|
||||||
|
const labelList& faceMap =
|
||||||
|
procMeshes.faceProcAddressing()[procI];
|
||||||
|
|
||||||
|
IOobjectList fSets(objects.lookupClass(faceSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, fSets, iter)
|
||||||
|
{
|
||||||
|
// Load faceSet
|
||||||
|
const faceSet procSet(*iter());
|
||||||
|
label setI = fSetNames[iter.key()];
|
||||||
|
if (!faceSets.set(setI))
|
||||||
|
{
|
||||||
|
faceSets.set
|
||||||
|
(
|
||||||
|
setI,
|
||||||
|
new faceSet(mesh, iter.key(), procSet.size())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
faceSet& fSet = faceSets[setI];
|
||||||
|
|
||||||
|
forAllConstIter(faceSet, procSet, iter)
|
||||||
|
{
|
||||||
|
fSet.insert(mag(faceMap[iter.key()])-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// pointSets
|
||||||
|
const labelList& pointMap =
|
||||||
|
procMeshes.pointProcAddressing()[procI];
|
||||||
|
|
||||||
|
IOobjectList pSets(objects.lookupClass(pointSet::typeName));
|
||||||
|
forAllConstIter(IOobjectList, pSets, iter)
|
||||||
|
{
|
||||||
|
// Load pointSet
|
||||||
|
const pointSet propSet(*iter());
|
||||||
|
label setI = pSetNames[iter.key()];
|
||||||
|
if (!pointSets.set(setI))
|
||||||
|
{
|
||||||
|
pointSets.set
|
||||||
|
(
|
||||||
|
setI,
|
||||||
|
new pointSet(mesh, iter.key(), propSet.size())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
pointSet& pSet = pointSets[setI];
|
||||||
|
|
||||||
|
forAllConstIter(pointSet, propSet, iter)
|
||||||
|
{
|
||||||
|
pSet.insert(pointMap[iter.key()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write sets
|
||||||
|
forAll(cellSets, i)
|
||||||
|
{
|
||||||
|
cellSets[i].write();
|
||||||
|
}
|
||||||
|
forAll(faceSets, i)
|
||||||
|
{
|
||||||
|
faceSets[i].write();
|
||||||
|
}
|
||||||
|
forAll(pointSets, i)
|
||||||
|
{
|
||||||
|
pointSets[i].write();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,8 @@ usage: ${0##*/}
|
|||||||
--archOption arch specify architecture option (only 32 or 64 applicable)
|
--archOption arch specify architecture option (only 32 or 64 applicable)
|
||||||
--paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120)
|
--paraviewInstall dir specify ParaView_DIR (e.g. /opt/paraviewopenfoam3120)
|
||||||
--paraviewVersion ver specify ParaView_VERSION (e.g. 3.12.0)
|
--paraviewVersion ver specify ParaView_VERSION (e.g. 3.12.0)
|
||||||
|
--scotchArchPath dir specify SCOTCH_ARCH_PATH (e.g. /opt/OpenFOAM-scotch-6.0.0/)
|
||||||
|
--scotchVersion ver specify SCOTCH_VERSION (e.g. 6.0.0)
|
||||||
|
|
||||||
* hardcode paths to installation
|
* hardcode paths to installation
|
||||||
|
|
||||||
@ -49,32 +51,6 @@ USAGE
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Function to do replacement on file. Checks if any replacement has been done.
|
|
||||||
# inlineSed <file> <sedCommand> <description>
|
|
||||||
#_inlineSed()
|
|
||||||
#{
|
|
||||||
# [ -f "$1" ] || {
|
|
||||||
# echo "Missing file: $1"
|
|
||||||
# exit 1
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# backup="temp.$$"
|
|
||||||
# cp $1 $backup
|
|
||||||
# sed -i -e "$2" $1
|
|
||||||
#
|
|
||||||
# if cmp $1 $backup > /dev/null 2>&1
|
|
||||||
# then
|
|
||||||
# echo "Failed: $3 in $1"
|
|
||||||
# rm $backup 2>/dev/null
|
|
||||||
# exit 1
|
|
||||||
# else
|
|
||||||
# echo "Okay: $3 in $1"
|
|
||||||
# rm $backup 2>/dev/null
|
|
||||||
# fi
|
|
||||||
#
|
|
||||||
# return 0
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Function to do replacement on file. Checks if any replacement has been done.
|
# Function to do replacement on file. Checks if any replacement has been done.
|
||||||
# _inlineSed <file> <regexp> <replacement> <msg>
|
# _inlineSed <file> <regexp> <replacement> <msg>
|
||||||
_inlineSed()
|
_inlineSed()
|
||||||
@ -103,7 +79,8 @@ _inlineSed()
|
|||||||
|
|
||||||
[ -f etc/bashrc ] || usage "Please run from top-level directory of installation"
|
[ -f etc/bashrc ] || usage "Please run from top-level directory of installation"
|
||||||
|
|
||||||
unset foamInstall projectName projectVersion archOption paraviewInstall
|
unset foamInstall projectName projectVersion archOption
|
||||||
|
unset paraviewInstall scotchArchPath
|
||||||
|
|
||||||
# parse options
|
# parse options
|
||||||
while [ "$#" -gt 0 ]
|
while [ "$#" -gt 0 ]
|
||||||
@ -172,7 +149,7 @@ do
|
|||||||
etc/config/paraview.sh \
|
etc/config/paraview.sh \
|
||||||
'ParaView_DIR=.*' \
|
'ParaView_DIR=.*' \
|
||||||
'ParaView_DIR='"$paraviewInstall" \
|
'ParaView_DIR='"$paraviewInstall" \
|
||||||
"Replacing ParaView_DIR setting by '$paraviewInstall'"
|
"Replacing ParaView_DIR setting by '$paraviewInstall'"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
-paraviewVersion | --paraviewVersion)
|
-paraviewVersion | --paraviewVersion)
|
||||||
@ -186,13 +163,36 @@ do
|
|||||||
"Replacing ParaView_VERSION setting by '$paraviewVersion'"
|
"Replacing ParaView_VERSION setting by '$paraviewVersion'"
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
-scotchVersion | --scotchVersion)
|
||||||
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
||||||
|
scotchVersion="$2"
|
||||||
|
_inlineSed \
|
||||||
|
etc/config/scotch.sh \
|
||||||
|
'SCOTCH_VERSION=.*' \
|
||||||
|
'SCOTCH_VERSION='"$scotchVersion" \
|
||||||
|
"Replacing SCOTCH_VERSION setting by '$scotchVersion'"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-scotchArchPath | --scotchArchPath)
|
||||||
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
||||||
|
scotchArchPath="$2"
|
||||||
|
_inlineSed \
|
||||||
|
etc/config/scotch.sh \
|
||||||
|
'SCOTCH_ARCH_PATH=.*' \
|
||||||
|
'SCOTCH_ARCH_PATH='"$scotchArchPath" \
|
||||||
|
"Replacing SCOTCH_ARCH_PATH setting by '$scotchArchPath'"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
usage "unknown option/argument: '$*'"
|
usage "unknown option/argument: '$*'"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -n "$foamInstall" -o -n "$projectName" -o -n "$projectVersion" -o -n "$archOption" -o -n "$paraviewInstall" -o -n "$paraviewVersion" ] || usage "Please specify at least one configure option"
|
[ -n "$foamInstall" -o -n "$projectName" -o -n "$projectVersion" -o -n "$archOption" \
|
||||||
|
-o -n "$paraviewInstall" -o -n "$paraviewVersion" \
|
||||||
|
-o -n "$scotchVersion" -o -n "$scotchArchPath" \
|
||||||
|
] || usage "Please specify at least one configure option"
|
||||||
|
|
||||||
#echo "Replacing WM_PROJECT setting by '$projectName'"
|
#echo "Replacing WM_PROJECT setting by '$projectName'"
|
||||||
#sed -i -e 's@WM_PROJECT=.*@WM_PROJECT='"$projectName@" etc/bashrc
|
#sed -i -e 's@WM_PROJECT=.*@WM_PROJECT='"$projectName@" etc/bashrc
|
||||||
|
|||||||
@ -107,9 +107,11 @@ motionControl
|
|||||||
|
|
||||||
polyMeshFiltering
|
polyMeshFiltering
|
||||||
{
|
{
|
||||||
filterEdges on;
|
filterEdges on;
|
||||||
filterFaces off;
|
filterFaces off;
|
||||||
writeTetDualMesh false;
|
writeTetDualMesh true;
|
||||||
|
writeCellShapeControlMesh true;
|
||||||
|
writeBackgroundMeshDecomposition true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -189,6 +189,11 @@ public:
|
|||||||
// allocated entries.
|
// allocated entries.
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
|
//- Append an element at the end of the list
|
||||||
|
inline void append(const T*);
|
||||||
|
inline void append(const autoPtr<T>&);
|
||||||
|
inline void append(const tmp<T>&);
|
||||||
|
|
||||||
//- Transfer the contents of the argument PtrList into this PtrList
|
//- Transfer the contents of the argument PtrList into this PtrList
|
||||||
// and annul the argument list.
|
// and annul the argument list.
|
||||||
void transfer(PtrList<T>&);
|
void transfer(PtrList<T>&);
|
||||||
|
|||||||
@ -79,6 +79,32 @@ inline void Foam::PtrList<T>::resize(const label newSize)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline void Foam::PtrList<T>::append(const T* ptr)
|
||||||
|
{
|
||||||
|
label sz = size();
|
||||||
|
this->setSize(sz+1);
|
||||||
|
ptrs_[sz] = ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline void Foam::PtrList<T>::append(const autoPtr<T>& aptr)
|
||||||
|
{
|
||||||
|
return append(const_cast<autoPtr<T>&>(aptr).ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline void Foam::PtrList<T>::append
|
||||||
|
(
|
||||||
|
const tmp<T>& t
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return append(const_cast<tmp<T>&>(t).ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline bool Foam::PtrList<T>::set(const label i) const
|
inline bool Foam::PtrList<T>::set(const label i) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -28,6 +28,7 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "IOobject.H"
|
#include "IOobject.H"
|
||||||
|
#include "objectRegistry.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ bool Foam::IOobject::writeHeader(Ostream& os, const word& type) const
|
|||||||
os << " note " << note() << ";\n";
|
os << " note " << note() << ";\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
os << " location " << instance()/local() << ";\n"
|
os << " location " << instance()/db().dbDir()/local() << ";\n"
|
||||||
<< " object " << name() << ";\n"
|
<< " object " << name() << ";\n"
|
||||||
<< "}" << nl;
|
<< "}" << nl;
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -252,7 +252,7 @@ public:
|
|||||||
List<scalar>& bary
|
List<scalar>& bary
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return nearest point to p on tetrahedron. Is p itself
|
//- Return nearest point to p on tetrahedron. Is p itself
|
||||||
// if inside.
|
// if inside.
|
||||||
inline pointHit nearestPoint(const point& p) const;
|
inline pointHit nearestPoint(const point& p) const;
|
||||||
|
|
||||||
|
|||||||
@ -955,6 +955,17 @@ Foam::labelList Foam::meshRefinement::markFacesOnProblemCells
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Because of isCollapsedFace one side can decide not to baffle whereas
|
||||||
|
// the other side does so sync. Baffling is prefered over not baffling.
|
||||||
|
syncTools::syncFaceList
|
||||||
|
(
|
||||||
|
mesh_,
|
||||||
|
facePatch,
|
||||||
|
maxEqOp<label>()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
Info<< "markFacesOnProblemCells : marked "
|
Info<< "markFacesOnProblemCells : marked "
|
||||||
<< returnReduce(nBaffleFaces, sumOp<label>())
|
<< returnReduce(nBaffleFaces, sumOp<label>())
|
||||||
<< " additional internal faces to be converted into baffles."
|
<< " additional internal faces to be converted into baffles."
|
||||||
|
|||||||
@ -77,7 +77,7 @@ namespace Foam
|
|||||||
> hExponentialSolidThermoPhysics;
|
> hExponentialSolidThermoPhysics;
|
||||||
|
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
polynomialSolidTransport
|
polynomialSolidTransport
|
||||||
<
|
<
|
||||||
species::thermo
|
species::thermo
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -28,26 +28,26 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport
|
Foam::constAnIsoSolidTransport<Thermo>::constAnIsoSolidTransport
|
||||||
(
|
(
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
thermo(dict),
|
Thermo(dict),
|
||||||
kappa_(dict.subDict("transport").lookup("kappa"))
|
kappa_(dict.subDict("transport").lookup("kappa"))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
void Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport::write
|
void Foam::constAnIsoSolidTransport<Thermo>::constAnIsoSolidTransport::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
thermo::write(os);
|
Thermo::write(os);
|
||||||
|
|
||||||
dictionary dict("transport");
|
dictionary dict("transport");
|
||||||
dict.add("kappa", kappa_);
|
dict.add("kappa", kappa_);
|
||||||
@ -57,14 +57,14 @@ void Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport::write
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
Foam::Ostream& Foam::operator<<
|
Foam::Ostream& Foam::operator<<
|
||||||
(
|
(
|
||||||
Ostream& os,
|
Ostream& os,
|
||||||
const constAnIsoSolidTransport<thermo>& ct
|
const constAnIsoSolidTransport<Thermo>& ct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
operator<<(os, static_cast<const thermo&>(ct));
|
operator<<(os, static_cast<const Thermo&>(ct));
|
||||||
os << tab << ct.kappa_;
|
os << tab << ct.kappa_;
|
||||||
|
|
||||||
os.check
|
os.check
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -28,13 +28,13 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport
|
Foam::exponentialSolidTransport<Thermo>::exponentialSolidTransport
|
||||||
(
|
(
|
||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
thermo(dict),
|
Thermo(dict),
|
||||||
kappa0_(0.0),
|
kappa0_(0.0),
|
||||||
n0_(0.0),
|
n0_(0.0),
|
||||||
Tref_(0.0)
|
Tref_(0.0)
|
||||||
@ -48,13 +48,13 @@ Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
void Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport::write
|
void Foam::exponentialSolidTransport<Thermo>::exponentialSolidTransport::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
thermo::write(os);
|
Thermo::write(os);
|
||||||
|
|
||||||
dictionary dict("transport");
|
dictionary dict("transport");
|
||||||
dict.add("kappa0", kappa0_);
|
dict.add("kappa0", kappa0_);
|
||||||
@ -66,13 +66,13 @@ void Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport::write
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
Foam::Ostream& Foam::operator<<
|
Foam::Ostream& Foam::operator<<
|
||||||
(
|
(
|
||||||
Ostream& os, const exponentialSolidTransport<thermo>& et
|
Ostream& os, const exponentialSolidTransport<Thermo>& et
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
operator<<(os, static_cast<const thermo&>(et));
|
operator<<(os, static_cast<const Thermo&>(et));
|
||||||
os << tab << et.kappa0_ << tab << et.n0_ << tab << et.Tref_;
|
os << tab << et.kappa0_ << tab << et.n0_ << tab << et.Tref_;
|
||||||
|
|
||||||
os.check
|
os.check
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -25,30 +25,30 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport
|
inline Foam::exponentialSolidTransport<Thermo>::exponentialSolidTransport
|
||||||
(
|
(
|
||||||
const thermo& t,
|
const Thermo& t,
|
||||||
const scalar kappa0,
|
const scalar kappa0,
|
||||||
const scalar n0,
|
const scalar n0,
|
||||||
const scalar Tref
|
const scalar Tref
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
thermo(t),
|
Thermo(t),
|
||||||
kappa0_(kappa0),
|
kappa0_(kappa0),
|
||||||
n0_(n0),
|
n0_(n0),
|
||||||
Tref_(Tref)
|
Tref_(Tref)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::exponentialSolidTransport<thermo>::exponentialSolidTransport
|
inline Foam::exponentialSolidTransport<Thermo>::exponentialSolidTransport
|
||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const exponentialSolidTransport& ct
|
const exponentialSolidTransport& ct
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
thermo(name, ct),
|
Thermo(name, ct),
|
||||||
kappa0_(ct.kappa0_),
|
kappa0_(ct.kappa0_),
|
||||||
n0_(ct.n0_),
|
n0_(ct.n0_),
|
||||||
Tref_(ct.Tref_)
|
Tref_(ct.Tref_)
|
||||||
@ -70,8 +70,8 @@ Foam::exponentialSolidTransport<Thermo>::New
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::scalar Foam::exponentialSolidTransport<thermo>::kappa
|
inline Foam::scalar Foam::exponentialSolidTransport<Thermo>::kappa
|
||||||
(
|
(
|
||||||
const scalar p, const scalar T
|
const scalar p, const scalar T
|
||||||
) const
|
) const
|
||||||
@ -80,8 +80,8 @@ inline Foam::scalar Foam::exponentialSolidTransport<thermo>::kappa
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::vector Foam::exponentialSolidTransport<thermo>::Kappa
|
inline Foam::vector Foam::exponentialSolidTransport<Thermo>::Kappa
|
||||||
(
|
(
|
||||||
const scalar p, const scalar T
|
const scalar p, const scalar T
|
||||||
) const
|
) const
|
||||||
@ -91,13 +91,13 @@ inline Foam::vector Foam::exponentialSolidTransport<thermo>::Kappa
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::scalar Foam::exponentialSolidTransport<thermo>::
|
inline Foam::scalar Foam::exponentialSolidTransport<Thermo>::
|
||||||
mu(const scalar p, const scalar T) const
|
mu(const scalar p, const scalar T) const
|
||||||
{
|
{
|
||||||
notImplemented
|
notImplemented
|
||||||
(
|
(
|
||||||
"Foam::scalar Foam::exponentialSolidTransport<thermo>mu::"
|
"Foam::scalar Foam::exponentialSolidTransport<Thermo>mu::"
|
||||||
"("
|
"("
|
||||||
" const scalar p, const scalar T"
|
" const scalar p, const scalar T"
|
||||||
") const"
|
") const"
|
||||||
@ -106,8 +106,8 @@ mu(const scalar p, const scalar T) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::scalar Foam::exponentialSolidTransport<thermo>::
|
inline Foam::scalar Foam::exponentialSolidTransport<Thermo>::
|
||||||
alphah(const scalar p, const scalar T) const
|
alphah(const scalar p, const scalar T) const
|
||||||
{
|
{
|
||||||
return kappa(p, T)/this->Cpv(p, T);
|
return kappa(p, T)/this->Cpv(p, T);
|
||||||
@ -116,33 +116,28 @@ alphah(const scalar p, const scalar T) const
|
|||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::exponentialSolidTransport<thermo>&
|
inline Foam::exponentialSolidTransport<Thermo>&
|
||||||
Foam::exponentialSolidTransport<thermo>::operator=
|
Foam::exponentialSolidTransport<Thermo>::operator=
|
||||||
(
|
(
|
||||||
const exponentialSolidTransport<thermo>& ct
|
const exponentialSolidTransport<Thermo>& ct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//thermo::operator=(ct);
|
|
||||||
|
|
||||||
kappa0_ = ct.kappa0_;
|
kappa0_ = ct.kappa0_;
|
||||||
n0_ = ct.n0_;
|
n0_ = ct.n0_;
|
||||||
Tref_ = ct.Tref_;
|
Tref_ = ct.Tref_;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline void Foam::exponentialSolidTransport<thermo>::operator+=
|
inline void Foam::exponentialSolidTransport<Thermo>::operator+=
|
||||||
(
|
(
|
||||||
const exponentialSolidTransport<thermo>& ct
|
const exponentialSolidTransport<Thermo>& ct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
scalar molr1 = this->nMoles();
|
scalar molr1 = this->nMoles();
|
||||||
|
|
||||||
//thermo::operator+=(ct);
|
|
||||||
|
|
||||||
molr1 /= this->nMoles();
|
molr1 /= this->nMoles();
|
||||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||||
|
|
||||||
@ -152,16 +147,14 @@ inline void Foam::exponentialSolidTransport<thermo>::operator+=
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline void Foam::exponentialSolidTransport<thermo>::operator-=
|
inline void Foam::exponentialSolidTransport<Thermo>::operator-=
|
||||||
(
|
(
|
||||||
const exponentialSolidTransport<thermo>& ct
|
const exponentialSolidTransport<Thermo>& ct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
scalar molr1 = this->nMoles();
|
scalar molr1 = this->nMoles();
|
||||||
|
|
||||||
//thermo::operator-=(ct);
|
|
||||||
|
|
||||||
molr1 /= this->nMoles();
|
molr1 /= this->nMoles();
|
||||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||||
|
|
||||||
@ -173,16 +166,16 @@ inline void Foam::exponentialSolidTransport<thermo>::operator-=
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class thermo>
|
template<class Thermo>
|
||||||
inline Foam::exponentialSolidTransport<thermo> Foam::operator*
|
inline Foam::exponentialSolidTransport<Thermo> Foam::operator*
|
||||||
(
|
(
|
||||||
const scalar s,
|
const scalar s,
|
||||||
const exponentialSolidTransport<thermo>& ct
|
const exponentialSolidTransport<Thermo>& ct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return exponentialSolidTransport<thermo>
|
return exponentialSolidTransport<Thermo>
|
||||||
(
|
(
|
||||||
s*static_cast<const thermo&>(ct),
|
s*static_cast<const Thermo&>(ct),
|
||||||
ct.kappa0_,
|
ct.kappa0_,
|
||||||
ct.n0_,
|
ct.n0_,
|
||||||
ct.Tref_
|
ct.Tref_
|
||||||
|
|||||||
@ -63,9 +63,6 @@ Foam::polynomialSolidTransport<Thermo, PolySize>::polynomialSolidTransport
|
|||||||
template<class Thermo, int PolySize>
|
template<class Thermo, int PolySize>
|
||||||
void Foam::polynomialSolidTransport<Thermo, PolySize>::write(Ostream& os) const
|
void Foam::polynomialSolidTransport<Thermo, PolySize>::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
os << this->name() << endl;
|
|
||||||
os << token::BEGIN_BLOCK << incrIndent << nl;
|
|
||||||
|
|
||||||
Thermo::write(os);
|
Thermo::write(os);
|
||||||
|
|
||||||
dictionary dict("transport");
|
dictionary dict("transport");
|
||||||
@ -76,8 +73,6 @@ void Foam::polynomialSolidTransport<Thermo, PolySize>::write(Ostream& os) const
|
|||||||
kappaCoeffs_
|
kappaCoeffs_
|
||||||
);
|
);
|
||||||
os << indent << dict.dictName() << dict;
|
os << indent << dict.dictName() << dict;
|
||||||
|
|
||||||
os << decrIndent << token::END_BLOCK << nl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ boundaryField
|
|||||||
}
|
}
|
||||||
outlet
|
outlet
|
||||||
{
|
{
|
||||||
type fixedFluxPressure;
|
type fixedValue;
|
||||||
value $internalField;
|
value $internalField;
|
||||||
}
|
}
|
||||||
fixedWalls
|
fixedWalls
|
||||||
|
|||||||
@ -10,8 +10,8 @@ nProc=$(getNumberOfProcessors)
|
|||||||
# copy flange surface from resources folder
|
# copy flange surface from resources folder
|
||||||
cp $FOAM_TUTORIALS/resources/geometry/blob.stl.gz constant/triSurface/
|
cp $FOAM_TUTORIALS/resources/geometry/blob.stl.gz constant/triSurface/
|
||||||
|
|
||||||
runApplication blockMesh
|
runApplication blockMesh -region backgroundMeshDecomposition
|
||||||
runApplication decomposePar
|
runApplication decomposePar -region backgroundMeshDecomposition
|
||||||
|
|
||||||
runParallel foamyHexMesh $nProc
|
runParallel foamyHexMesh $nProc
|
||||||
runParallel collapseEdges $nProc -latestTime -collapseFaces
|
runParallel collapseEdges $nProc -latestTime -collapseFaces
|
||||||
|
|||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object decomposeParDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
numberOfSubdomains 2;
|
||||||
|
|
||||||
|
method scotch;
|
||||||
|
//method ptscotch;
|
||||||
|
// method hierarchical;
|
||||||
|
|
||||||
|
simpleCoeffs
|
||||||
|
{
|
||||||
|
n ( 2 2 1 );
|
||||||
|
delta 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
hierarchicalCoeffs
|
||||||
|
{
|
||||||
|
n ( 2 1 1 );
|
||||||
|
delta 0.001;
|
||||||
|
order xyz;
|
||||||
|
}
|
||||||
|
|
||||||
|
manualCoeffs
|
||||||
|
{
|
||||||
|
dataFile "";
|
||||||
|
}
|
||||||
|
|
||||||
|
distributed no;
|
||||||
|
|
||||||
|
roots ( );
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSchemes
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSolution
|
||||||
@ -1,47 +0,0 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
||||||
| \\ / O peration | Version: dev |
|
|
||||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
location "system";
|
|
||||||
object decomposeParDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
numberOfSubdomains 2;
|
|
||||||
|
|
||||||
method scotch;
|
|
||||||
//method ptscotch;
|
|
||||||
// method hierarchical;
|
|
||||||
|
|
||||||
simpleCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 2 1 );
|
|
||||||
delta 0.001;
|
|
||||||
}
|
|
||||||
|
|
||||||
hierarchicalCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 1 1 );
|
|
||||||
delta 0.001;
|
|
||||||
order xyz;
|
|
||||||
}
|
|
||||||
|
|
||||||
manualCoeffs
|
|
||||||
{
|
|
||||||
dataFile "";
|
|
||||||
}
|
|
||||||
|
|
||||||
distributed no;
|
|
||||||
|
|
||||||
roots ( );
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
1
tutorials/mesh/foamyHexMesh/blob/system/decomposeParDict
Symbolic link
1
tutorials/mesh/foamyHexMesh/blob/system/decomposeParDict
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
backgroundMeshDecomposition/decomposeParDict
|
||||||
@ -11,12 +11,8 @@ nProc=$(getNumberOfProcessors)
|
|||||||
cp $FOAM_TUTORIALS/resources/geometry/flange.stl.gz constant/triSurface/
|
cp $FOAM_TUTORIALS/resources/geometry/flange.stl.gz constant/triSurface/
|
||||||
|
|
||||||
# Create tight-fitting background mesh
|
# Create tight-fitting background mesh
|
||||||
runApplication blockMesh
|
runApplication blockMesh -region backgroundMeshDecomposition
|
||||||
runApplication topoSet -dict system/topoSetDict-background
|
runApplication decomposePar -region backgroundMeshDecomposition
|
||||||
mv log.topoSet log.topoSet.background
|
|
||||||
runApplication subsetMesh background -patch walls -overwrite
|
|
||||||
|
|
||||||
runApplication decomposePar
|
|
||||||
|
|
||||||
runParallel foamyHexMesh $nProc
|
runParallel foamyHexMesh $nProc
|
||||||
runParallel collapseEdges $nProc -latestTime -collapseFaces
|
runParallel collapseEdges $nProc -latestTime -collapseFaces
|
||||||
|
|||||||
@ -9,20 +9,38 @@ FoamFile
|
|||||||
{
|
{
|
||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class polyBoundaryMesh;
|
class dictionary;
|
||||||
location "constant/polyMesh";
|
location "system";
|
||||||
object boundary;
|
object decomposeParDict;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
1
|
numberOfSubdomains 8;
|
||||||
(
|
|
||||||
walls
|
//method scotch;
|
||||||
{
|
method hierarchical;
|
||||||
type wall;
|
|
||||||
nFaces 126;
|
simpleCoeffs
|
||||||
startFace 207;
|
{
|
||||||
}
|
n ( 2 2 2 );
|
||||||
)
|
delta 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
hierarchicalCoeffs
|
||||||
|
{
|
||||||
|
n ( 2 2 2 );
|
||||||
|
delta 0.001;
|
||||||
|
order xyz;
|
||||||
|
}
|
||||||
|
|
||||||
|
manualCoeffs
|
||||||
|
{
|
||||||
|
dataFile "";
|
||||||
|
}
|
||||||
|
|
||||||
|
distributed no;
|
||||||
|
|
||||||
|
roots ( );
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSchemes
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSolution
|
||||||
@ -1,46 +0,0 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
||||||
| \\ / O peration | Version: dev |
|
|
||||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
location "system";
|
|
||||||
object decomposeParDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
numberOfSubdomains 8;
|
|
||||||
|
|
||||||
//method scotch;
|
|
||||||
method hierarchical;
|
|
||||||
|
|
||||||
simpleCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 2 2 );
|
|
||||||
delta 0.001;
|
|
||||||
}
|
|
||||||
|
|
||||||
hierarchicalCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 2 2 );
|
|
||||||
delta 0.001;
|
|
||||||
order xyz;
|
|
||||||
}
|
|
||||||
|
|
||||||
manualCoeffs
|
|
||||||
{
|
|
||||||
dataFile "";
|
|
||||||
}
|
|
||||||
|
|
||||||
distributed no;
|
|
||||||
|
|
||||||
roots ( );
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
1
tutorials/mesh/foamyHexMesh/flange/system/decomposeParDict
Symbolic link
1
tutorials/mesh/foamyHexMesh/flange/system/decomposeParDict
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
backgroundMeshDecomposition/decomposeParDict
|
||||||
@ -43,8 +43,8 @@ mv log.surfaceBooleanFeatures log.surfaceBooleanFeatures.stirrer_shaftRotating
|
|||||||
|
|
||||||
runApplication surfaceFeatureExtract
|
runApplication surfaceFeatureExtract
|
||||||
|
|
||||||
runApplication blockMesh
|
runApplication blockMesh -region backgroundMeshDecomposition
|
||||||
runApplication decomposePar
|
runApplication decomposePar -region backgroundMeshDecomposition
|
||||||
|
|
||||||
runParallel foamyHexMesh $nProcs
|
runParallel foamyHexMesh $nProcs
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: dev |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "system";
|
||||||
|
object decomposeParDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
numberOfSubdomains 8;
|
||||||
|
|
||||||
|
//method ptscotch;
|
||||||
|
//method hierarchical;
|
||||||
|
method scotch;
|
||||||
|
|
||||||
|
simpleCoeffs
|
||||||
|
{
|
||||||
|
n ( 2 2 1 );
|
||||||
|
delta 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
hierarchicalCoeffs
|
||||||
|
{
|
||||||
|
n ( 2 2 2 );
|
||||||
|
delta 0.001;
|
||||||
|
order xyz;
|
||||||
|
}
|
||||||
|
|
||||||
|
manualCoeffs
|
||||||
|
{
|
||||||
|
dataFile "";
|
||||||
|
}
|
||||||
|
|
||||||
|
distributed no;
|
||||||
|
|
||||||
|
roots ( );
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSchemes
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../fvSolution
|
||||||
@ -1,47 +0,0 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
||||||
| \\ / O peration | Version: dev |
|
|
||||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
location "system";
|
|
||||||
object decomposeParDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
numberOfSubdomains 8;
|
|
||||||
|
|
||||||
//method ptscotch;
|
|
||||||
//method hierarchical;
|
|
||||||
method scotch;
|
|
||||||
|
|
||||||
simpleCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 2 1 );
|
|
||||||
delta 0.001;
|
|
||||||
}
|
|
||||||
|
|
||||||
hierarchicalCoeffs
|
|
||||||
{
|
|
||||||
n ( 2 2 2 );
|
|
||||||
delta 0.001;
|
|
||||||
order xyz;
|
|
||||||
}
|
|
||||||
|
|
||||||
manualCoeffs
|
|
||||||
{
|
|
||||||
dataFile "";
|
|
||||||
}
|
|
||||||
|
|
||||||
distributed no;
|
|
||||||
|
|
||||||
roots ( );
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
1
tutorials/mesh/foamyHexMesh/mixerVessel/system/decomposeParDict
Symbolic link
1
tutorials/mesh/foamyHexMesh/mixerVessel/system/decomposeParDict
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
backgroundMeshDecomposition/decomposeParDict
|
||||||
Reference in New Issue
Block a user