Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev

This commit is contained in:
andy
2013-01-04 11:16:27 +00:00
307 changed files with 10257 additions and 3221 deletions

View File

@ -146,5 +146,3 @@
( (
additionalControlsDict.lookup("solvePrimaryRegion") additionalControlsDict.lookup("solvePrimaryRegion")
); );
IObasicSourceList sources(mesh);

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -36,7 +36,10 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::cellSplitter, 0); namespace Foam
{
defineTypeNameAndDebug(cellSplitter, 0);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //

View File

@ -466,8 +466,8 @@ int main(int argc, char *argv[])
labelListList pointPoints; labelListList pointPoints;
autoPtr<mapDistribute> meshDistributor = buildMap(mesh, pointPoints); autoPtr<mapDistribute> meshDistributor = buildMap(mesh, pointPoints);
triadField alignments = buildAlignmentField(mesh); triadField alignments(buildAlignmentField(mesh));
pointField points = buildPointField(mesh); pointField points(buildPointField(mesh));
mesh.printInfo(Info); mesh.printInfo(Info);

View File

@ -168,7 +168,8 @@ public:
); );
//- Inserts points into the triangulation if the point is within //- Inserts points into the triangulation if the point is within
// the circumsphere of another cell // the circumsphere of another cell. Returns HashSet of failed
// point insertions
template<class PointIterator> template<class PointIterator>
labelPairHashSet rangeInsertReferredWithInfo labelPairHashSet rangeInsertReferredWithInfo
( (

View File

@ -24,7 +24,7 @@ EXE_INC = \
-IPrintTable \ -IPrintTable \
-I../vectorTools -I../vectorTools
EXE_LIBS = \ LIB_LIBS = \
-lmeshTools \ -lmeshTools \
-ledgeMesh \ -ledgeMesh \
-lfileFormats \ -lfileFormats \

View File

@ -585,7 +585,7 @@ Foam::label Foam::cellShapeControl::refineMesh
const autoPtr<backgroundMeshDecomposition>& decomposition const autoPtr<backgroundMeshDecomposition>& decomposition
) )
{ {
const pointField cellCentres = shapeControlMesh_.cellCentres(); const pointField cellCentres(shapeControlMesh_.cellCentres());
Info<< " Created cell centres" << endl; Info<< " Created cell centres" << endl;
@ -682,7 +682,7 @@ Foam::label Foam::cellShapeControl::refineMesh
) )
); );
verts.last().targetCellSize() = lastCellSize; verts.last().targetCellSize() = lastCellSize;
verts.last().alignment() = tensor::I; verts.last().alignment() = triad::unset;
} }
} }
@ -704,8 +704,8 @@ void Foam::cellShapeControl::smoothMesh()
pointPoints pointPoints
); );
triadField alignments = buildAlignmentField(shapeControlMesh_); triadField alignments(buildAlignmentField(shapeControlMesh_));
pointField points = buildPointField(shapeControlMesh_); pointField points(buildPointField(shapeControlMesh_));
// Setup the sizes and alignments on each point // Setup the sizes and alignments on each point
triadField fixedAlignments(shapeControlMesh_.vertexCount(), triad::unset); triadField fixedAlignments(shapeControlMesh_.vertexCount(), triad::unset);
@ -721,12 +721,7 @@ void Foam::cellShapeControl::smoothMesh()
{ {
const tensor& alignment = vit->alignment(); const tensor& alignment = vit->alignment();
fixedAlignments[vit->index()] = triad fixedAlignments[vit->index()] = alignment;
(
alignment.x(),
alignment.y(),
alignment.z()
);
} }
} }
@ -881,12 +876,7 @@ void Foam::cellShapeControl::smoothMesh()
{ {
if (vit->real()) if (vit->real())
{ {
vit->alignment() = tensor vit->alignment() = alignments[vit->index()];
(
alignments[vit->index()].x(),
alignments[vit->index()].y(),
alignments[vit->index()].z()
);
} }
} }
@ -911,9 +901,7 @@ void Foam::cellShapeControl::smoothMesh()
{ {
if (vit->referred()) if (vit->referred())
{ {
const triad& t = alignments[referredPoints[referredI++]]; vit->alignment() = alignments[referredPoints[referredI++]];
vit->alignment() = tensor(t.x(), t.y(), t.z());
} }
} }
} }

View File

@ -684,7 +684,7 @@ void Foam::cellShapeControlMesh::insertBoundingPoints(const boundBox& bb)
boundBox bbInflate = bb; boundBox bbInflate = bb;
bbInflate.inflate(10); bbInflate.inflate(10);
pointField pts = bbInflate.points(); pointField pts(bbInflate.points());
forAll(pts, pI) forAll(pts, pI)
{ {

View File

@ -263,8 +263,6 @@ Foam::triSurfaceScalarField Foam::automatic::load()
surfaceCellSize.write(); surfaceCellSize.write();
debug = 1;
if (debug) if (debug)
{ {
faceList faces(surface_.size()); faceList faces(surface_.size());

View File

@ -30,6 +30,7 @@ License
#include "indexedCellChecks.H" #include "indexedCellChecks.H"
#include "CGAL/Exact_predicates_exact_constructions_kernel.h" #include "CGAL/Exact_predicates_exact_constructions_kernel.h"
#include "CGAL/Gmpq.h"
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
@ -211,9 +212,8 @@ void Foam::conformalVoronoiMesh::checkDuals()
typedef CGAL::Exact_predicates_exact_constructions_kernel EK2; typedef CGAL::Exact_predicates_exact_constructions_kernel EK2;
typedef CGAL::Regular_triangulation_euclidean_traits_3<EK2> EK; typedef CGAL::Regular_triangulation_euclidean_traits_3<EK2> EK;
typedef CGAL::Cartesian_converter<typename baseK::Kernel, EK2> To_exact; typedef CGAL::Cartesian_converter<baseK::Kernel, EK2> To_exact;
typedef CGAL::Cartesian_converter<EK2, typename baseK::Kernel> typedef CGAL::Cartesian_converter<EK2, baseK::Kernel> Back_from_exact;
Back_from_exact;
// PackedBoolList bPoints(number_of_finite_cells()); // PackedBoolList bPoints(number_of_finite_cells());
@ -391,13 +391,13 @@ void Foam::conformalVoronoiMesh::checkDuals()
CGAL::Gmpq z(CGAL::to_double(masterPoint.z())); CGAL::Gmpq z(CGAL::to_double(masterPoint.z()));
std::cout<< "master = " << x << " " << y << " " << z std::cout<< "master = " << x << " " << y << " " << z
<< endl; << std::endl;
CGAL::Gmpq xs(CGAL::to_double(closestPoint.x())); CGAL::Gmpq xs(CGAL::to_double(closestPoint.x()));
CGAL::Gmpq ys(CGAL::to_double(closestPoint.y())); CGAL::Gmpq ys(CGAL::to_double(closestPoint.y()));
CGAL::Gmpq zs(CGAL::to_double(closestPoint.z())); CGAL::Gmpq zs(CGAL::to_double(closestPoint.z()));
std::cout<< "slave = " << xs << " " << ys << " " << zs std::cout<< "slave = " << xs << " " << ys << " " << zs
<< endl; << std::endl;
} }
} }
else else

View File

@ -142,7 +142,7 @@ inline int CGAL::indexedVertex<Gt, Vb>::index() const
template<class Gt, class Vb> template<class Gt, class Vb>
inline typename CGAL::indexedVertex<Gt, Vb>::vertexType& inline Foam::indexedVertexEnum::vertexType&
CGAL::indexedVertex<Gt, Vb>::type() CGAL::indexedVertex<Gt, Vb>::type()
{ {
return type_; return type_;
@ -150,7 +150,7 @@ CGAL::indexedVertex<Gt, Vb>::type()
template<class Gt, class Vb> template<class Gt, class Vb>
inline typename CGAL::indexedVertex<Gt, Vb>::vertexType inline Foam::indexedVertexEnum::vertexType
CGAL::indexedVertex<Gt, Vb>::type() const CGAL::indexedVertex<Gt, Vb>::type() const
{ {
return type_; return type_;

View File

@ -64,14 +64,22 @@ int main(int argc, char *argv[])
) )
); );
conformalVoronoiMesh::debug = true;
conformalVoronoiMesh mesh(runTime, cvMeshDict);
if (checkGeometry) if (checkGeometry)
{ {
const searchableSurfaces& allGeometry = mesh.allGeometry(); const searchableSurfaces allGeometry
(
IOobject
(
"cvSearchableSurfaces",
runTime.constant(),
"triSurface",
runTime,
IOobject::MUST_READ,
IOobject::NO_WRITE
),
cvMeshDict.subDict("geometry")
);
// Write some stats // Write some stats
allGeometry.writeStats(List<wordList>(0), Info); allGeometry.writeStats(List<wordList>(0), Info);
@ -91,6 +99,11 @@ int main(int argc, char *argv[])
} }
conformalVoronoiMesh::debug = true;
conformalVoronoiMesh mesh(runTime, cvMeshDict);
while (runTime.loop()) while (runTime.loop())
{ {
Info<< nl << "Time = " << runTime.timeName() << endl; Info<< nl << "Time = " << runTime.timeName() << endl;

View File

@ -803,7 +803,7 @@ Foam::label Foam::checkGeometry(const polyMesh& mesh, const bool allGeometry)
if (allGeometry) if (allGeometry)
{ {
cellSet cells(mesh, "underdeterminedCells", mesh.nCells()/100); cellSet cells(mesh, "underdeterminedCells", mesh.nCells()/100);
if (mesh.checkCellDeterminant(true, &cells, mesh.geometricD())) if (mesh.checkCellDeterminant(true, &cells))
{ {
noFailedChecks++; noFailedChecks++;

View File

@ -33,7 +33,10 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::mergePolyMesh, 1); namespace Foam
{
defineTypeNameAndDebug(mergePolyMesh, 1);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //

View File

@ -34,7 +34,10 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::meshDualiser, 0); namespace Foam
{
defineTypeNameAndDebug(meshDualiser, 0);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //

View File

@ -14,7 +14,7 @@ if [ -f /usr/include/readline/readline.h -a "${1%NO_READLINE}" = "$1" ]
then then
echo "Found <readline/readline.h> -- enabling readline support." echo "Found <readline/readline.h> -- enabling readline support."
export COMP_FLAGS="-DHAS_READLINE" export COMP_FLAGS="-DHAS_READLINE"
export LINK_FLAGS="-lreadline -lncurses" export LINK_FLAGS="-lreadline"
fi fi
wmake wmake

View File

@ -1,6 +1,3 @@
cellSelection/cellSelection.C
cellSelection/badQualityCellSelection.C
cellSelection/outsideCellSelection.C
subsetMesh.C subsetMesh.C
EXE = $(FOAM_APPBIN)/subsetMesh EXE = $(FOAM_APPBIN)/subsetMesh

View File

@ -1,417 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "outsideCellSelection.H"
#include "addToRunTimeSelectionTable.H"
#include "faceSet.H"
#include "polyMesh.H"
#include "motionSmoother.H"
#include "regionSplit.H"
#include "syncTools.H"
#include "zeroGradientFvPatchFields.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace cellSelections
{
defineTypeNameAndDebug(outsideCellSelection, 0);
addToRunTimeSelectionTable(cellSelection, outsideCellSelection, dictionary);
}
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField>
Foam::cellSelections::outsideCellSelection::generateField
(
const word& name,
const boolList& lst
) const
{
const fvMesh& mesh = dynamic_cast<const fvMesh&>(mesh_);
tmp<volScalarField> tfld
(
new volScalarField
(
IOobject
(
name,
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(name, dimless, 0),
zeroGradientFvPatchScalarField::typeName
)
);
scalarField& fld = tfld().internalField();
forAll(fld, celli)
{
fld[celli] = 1.0*lst[celli];
}
tfld().correctBoundaryConditions();
return tfld;
}
void Foam::cellSelections::outsideCellSelection::markRegionFaces
(
const boolList& selectedCell,
boolList& regionFace
) const
{
// Internal faces
const labelList& faceOwner = mesh_.faceOwner();
const labelList& faceNeighbour = mesh_.faceNeighbour();
forAll(faceNeighbour, faceI)
{
if
(
selectedCell[faceOwner[faceI]]
!= selectedCell[faceNeighbour[faceI]]
)
{
regionFace[faceI] = true;
}
}
// Swap neighbour selectedCell state
boolList nbrSelected;
syncTools::swapBoundaryCellList(mesh_, selectedCell, nbrSelected);
// Boundary faces
const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
forAll(pbm, patchI)
{
const polyPatch& pp = pbm[patchI];
const labelUList& faceCells = pp.faceCells();
forAll(faceCells, i)
{
label faceI = pp.start()+i;
label bFaceI = faceI-mesh_.nInternalFaces();
if
(
selectedCell[faceCells[i]]
!= selectedCell[nbrSelected[bFaceI]]
)
{
regionFace[faceI] = true;
}
}
}
}
Foam::boolList Foam::cellSelections::outsideCellSelection::findRegions
(
const bool verbose,
const regionSplit& cellRegion
) const
{
boolList keepRegion(cellRegion.nRegions(), false);
forAll(locationsInMesh_, i)
{
// Find the region containing the insidePoint
label cellI = mesh_.findCell(locationsInMesh_[i]);
label keepRegionI = -1;
label keepProcI = -1;
if (cellI != -1)
{
keepRegionI = cellRegion[cellI];
keepProcI = Pstream::myProcNo();
}
reduce(keepRegionI, maxOp<label>());
keepRegion[keepRegionI] = true;
reduce(keepProcI, maxOp<label>());
if (keepProcI == -1)
{
FatalErrorIn
(
"outsideCellSelection::findRegions"
"(const bool, const regionSplit&)"
) << "Did not find " << locationsInMesh_[i]
<< " in mesh." << " Mesh bounds are " << mesh_.bounds()
<< exit(FatalError);
}
if (verbose)
{
Info<< "Found location " << locationsInMesh_[i]
<< " in cell " << cellI << " on processor " << keepProcI
<< " in global region " << keepRegionI
<< " out of " << cellRegion.nRegions() << " regions." << endl;
}
}
return keepRegion;
}
void Foam::cellSelections::outsideCellSelection::unselectOutsideRegions
(
boolList& selectedCell
) const
{
// Determine faces on the edge of selectedCell
boolList blockedFace(mesh_.nFaces(), false);
markRegionFaces(selectedCell, blockedFace);
// Determine regions
regionSplit cellRegion(mesh_, blockedFace);
// Determine regions containing locationsInMesh_
boolList keepRegion(findRegions(true, cellRegion));
// Go back to bool per cell
forAll(cellRegion, cellI)
{
if (!keepRegion[cellRegion[cellI]])
{
selectedCell[cellI] = false;
}
}
}
void Foam::cellSelections::outsideCellSelection::shrinkRegions
(
boolList& selectedCell
) const
{
// Select points on unselected cells and boundary
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
boolList boundaryPoint(mesh_.nPoints(), false);
const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
forAll(pbm, patchI)
{
const polyPatch& pp = pbm[patchI];
if (!pp.coupled() && !isA<emptyPolyPatch>(pp))
{
forAll(pp, i)
{
const face& f = pp[i];
forAll(f, fp)
{
boundaryPoint[f[fp]] = true;
}
}
}
}
forAll(selectedCell, cellI)
{
if (!selectedCell[cellI])
{
const labelList& cPoints = mesh_.cellPoints(cellI);
forAll(cPoints, i)
{
boundaryPoint[cPoints[i]] = true;
}
}
}
syncTools::syncPointList(mesh_, boundaryPoint, orEqOp<bool>(), false);
// Select all cells using these points
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
label nChanged = 0;
forAll(boundaryPoint, pointI)
{
if (boundaryPoint[pointI])
{
const labelList& pCells = mesh_.pointCells(pointI);
forAll(pCells, i)
{
label cellI = pCells[i];
if (selectedCell[cellI])
{
selectedCell[cellI] = false;
nChanged++;
}
}
}
}
}
void Foam::cellSelections::outsideCellSelection::erode
(
boolList& selectedCell
) const
{
//Info<< "Entering shrinkRegions:" << count(selectedCell) << endl;
//generateField("selectedCell_before", selectedCell)().write();
// Now erode and see which regions get disconnected
boolList shrunkSelectedCell(selectedCell);
for (label iter = 0; iter < nErode_; iter++)
{
shrinkRegions(shrunkSelectedCell);
}
//Info<< "After shrinking:" << count(shrunkSelectedCell) << endl;
//generateField("shrunkSelectedCell", shrunkSelectedCell)().write();
// Determine faces on the edge of shrunkSelectedCell
boolList blockedFace(mesh_.nFaces(), false);
markRegionFaces(shrunkSelectedCell, blockedFace);
// Find disconnected regions
regionSplit cellRegion(mesh_, blockedFace);
// Determine regions containing insidePoints
boolList keepRegion(findRegions(true, cellRegion));
// Extract cells in regions that are not to be kept.
boolList removeCell(mesh_.nCells(), false);
forAll(cellRegion, cellI)
{
if (shrunkSelectedCell[cellI] && !keepRegion[cellRegion[cellI]])
{
removeCell[cellI] = true;
}
}
//Info<< "removeCell before:" << count(removeCell) << endl;
//generateField("removeCell_before", removeCell)().write();
// Grow removeCell
for (label iter = 0; iter < nErode_; iter++)
{
// Grow selected cell in regions that are not for keeping
boolList boundaryPoint(mesh_.nPoints(), false);
forAll(removeCell, cellI)
{
if (removeCell[cellI])
{
const labelList& cPoints = mesh_.cellPoints(cellI);
forAll(cPoints, i)
{
boundaryPoint[cPoints[i]] = true;
}
}
}
syncTools::syncPointList(mesh_, boundaryPoint, orEqOp<bool>(), false);
// Select all cells using these points
label nChanged = 0;
forAll(boundaryPoint, pointI)
{
if (boundaryPoint[pointI])
{
const labelList& pCells = mesh_.pointCells(pointI);
forAll(pCells, i)
{
label cellI = pCells[i];
if (!removeCell[cellI])
{
removeCell[cellI] = true;
nChanged++;
}
}
}
}
}
//Info<< "removeCell after:" << count(removeCell) << endl;
//generateField("removeCell_after", removeCell)().write();
// Unmark removeCell
forAll(removeCell, cellI)
{
if (removeCell[cellI])
{
selectedCell[cellI] = false;
}
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::cellSelections::outsideCellSelection::outsideCellSelection
(
const word& name,
const polyMesh& mesh,
const dictionary& dict
)
:
cellSelection(name, mesh, dict),
locationsInMesh_(dict.lookup("locationsInMesh")),
nErode_(readLabel(dict.lookup("nErodeLayers")))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::cellSelections::outsideCellSelection::~outsideCellSelection()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::cellSelections::outsideCellSelection::select
(
boolList& selectedCell
) const
{
// Unselect all disconnected regions
unselectOutsideRegions(selectedCell);
if (nErode_ > 0)
{
erode(selectedCell);
}
}
// ************************************************************************* //

View File

@ -1,145 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::cellSelections::outsideCellSelection
Description
Deselect cells not reachable from 'inside' points
SourceFiles
outsideCellSelection.C
\*---------------------------------------------------------------------------*/
#ifndef outsideCellSelection_H
#define outsideCellSelection_H
#include "cellSelection.H"
#include "pointField.H"
#include "boolList.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class regionSplit;
namespace cellSelections
{
/*---------------------------------------------------------------------------*\
Class outsideCellSelection Declaration
\*---------------------------------------------------------------------------*/
class outsideCellSelection
:
public cellSelection
{
// Private data
//- Locations to keep
const pointField locationsInMesh_;
//- Number of layers to erode
const label nErode_;
// Private Member Functions
//- For debugging: generate volScalarField with 1.0 for all true
tmp<volScalarField> generateField
(
const word& name,
const boolList& lst
) const;
//- Mark faces inbetween selected and unselected elements
void markRegionFaces
(
const boolList& selectedCell,
boolList& regionFace
) const;
//- Determine for every disconnected region in the mesh whether
// it contains a locationInMesh
boolList findRegions(const bool verbose, const regionSplit&) const;
//- Unselect regions not containing a locationInMesh
void unselectOutsideRegions(boolList& selectedCell) const;
//- Unselect one layer of cells from selectedCell
void shrinkRegions(boolList& selectedCell) const;
//- Erode a given number of layers from selectedCell. Remove any
// region that gets disconnected that way.
void erode(boolList& selectedCell) const;
public:
//- Runtime type information
TypeName("outside");
// Constructors
//- Construct from dictionary
outsideCellSelection
(
const word& name,
const polyMesh& mesh,
const dictionary& dict
);
//- Clone
autoPtr<cellSelection> clone() const
{
notImplemented("autoPtr<cellSelection> clone() const");
return autoPtr<cellSelection>(NULL);
}
//- Destructor
virtual ~outsideCellSelection();
// Member Functions
//- Apply this selector
virtual void select(boolList&) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace cellSelections
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -37,12 +37,12 @@ Description
#include "cellSet.H" #include "cellSet.H"
#include "IOobjectList.H" #include "IOobjectList.H"
#include "volFields.H" #include "volFields.H"
#include "cellSelection.H"
using namespace Foam; using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> template<class Type>
void subsetVolFields void subsetVolFields
( (
@ -152,16 +152,12 @@ int main(int argc, char *argv[])
{ {
argList::addNote argList::addNote
( (
"select a mesh subset based on a provided cellSet and/or" "select a mesh subset based on a cellSet"
" selection criteria"
);
#include "addDictOption.H"
argList::addOption
(
"cellSet",
"name",
"operates on specified cellSet name"
); );
#include "addOverwriteOption.H"
#include "addRegionOption.H"
argList::validArgs.append("cellSet");
argList::addOption argList::addOption
( (
"patch", "patch",
@ -169,73 +165,23 @@ int main(int argc, char *argv[])
"add exposed internal faces to specified patch instead of to " "add exposed internal faces to specified patch instead of to "
"'oldInternalFaces'" "'oldInternalFaces'"
); );
#include "addOverwriteOption.H"
#include "addRegionOption.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
word setName; Foam::word meshRegionName = polyMesh::defaultRegion;
const bool useCellSet = args.optionReadIfPresent("cellSet", setName); args.optionReadIfPresent("region", meshRegionName);
const bool useDict = args.optionFound("dict");
const bool overwrite = args.optionFound("overwrite");
if (!useCellSet && !useDict)
{
FatalErrorIn(args.executable())
<< "No cells to operate on selected. Please supply at least one of "
<< "'-cellSet', '-dict'"
<< exit(FatalError);
}
#include "createNamedMesh.H" #include "createNamedMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
autoPtr<cellSet> currentSet; const word setName = args[1];
if (useCellSet) const bool overwrite = args.optionFound("overwrite");
{
// Load the cellSet
Info<< "Operating on cell set " << setName << nl << endl;
currentSet.reset(new cellSet(mesh, setName));
}
PtrList<cellSelection> selectors;
if (useDict)
{
const word dictName("subsetMeshDict");
#include "setSystemMeshDictionaryIO.H"
Info<< "Reading selection criteria from " << dictName << nl << endl;
IOdictionary dict(dictIO);
const dictionary& selectionsDict = dict.subDict("selections");
label n = 0;
forAllConstIter(dictionary, selectionsDict, iter)
{
if (iter().isDict())
{
n++;
}
}
selectors.setSize(n);
n = 0;
forAllConstIter(dictionary, selectionsDict, iter)
{
if (iter().isDict())
{
selectors.set
(
n++,
cellSelection::New(iter().keyword(), mesh, iter().dict())
);
}
}
}
Info<< "Reading cell set from " << setName << endl << endl;
// Create mesh subsetting engine // Create mesh subsetting engine
fvMeshSubset subsetter(mesh); fvMeshSubset subsetter(mesh);
@ -266,54 +212,9 @@ int main(int argc, char *argv[])
} }
// Select cells to operate on cellSet currentSet(mesh, setName);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
boolList selectedCell(mesh.nCells(), false);
if (currentSet.valid())
{
const cellSet& set = currentSet();
forAllConstIter(cellSet, set, iter)
{
selectedCell[iter.key()] = true;
}
}
else
{
selectedCell = true;
}
// Manipulate selectedCell according to dictionary
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
forAll(selectors, i)
{
Info<< "Applying cellSelector " << selectors[i].name() << endl;
selectors[i].select(selectedCell);
Info<< "After applying cellSelector " << selectors[i].name()
<< " have " << cellSelection::count(selectedCell)
<< " cells" << nl << endl;
}
// Back from selectedCells to region
{
Info<< "Final selection : " << cellSelection::count(selectedCell)
<< " cells" << nl << endl;
labelList cellRegion(mesh.nCells(), -1);
forAll(selectedCell, cellI)
{
if (selectedCell[cellI])
{
cellRegion[cellI] = 0;
}
}
subsetter.setLargeCellSubset(cellRegion, 0, patchI, true);
}
subsetter.setLargeCellSubset(currentSet, patchI, true);
IOobjectList objects(mesh, runTime.timeName()); IOobjectList objects(mesh, runTime.timeName());

View File

@ -1,50 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.openfoam.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object subsetMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Load snappyHexMeshDict settings so we can use some entries below.
#include "./snappyHexMeshDict"
selections
{
badQuality
{
// Remove any cells using a 'bad quality' face. Uses the mesh checks
// used by snappyHexMesh, cvMesh.
type badQuality;
// Use the quality criteria from the snappyHexMeshDict
${:meshQualityControls}
}
outside
{
// Remove any cells not reachable from provided locations
type outside;
//- Number of cell layers to erode mesh to detect holes in the mesh
// Set to 0 if not used.
nErodeLayers 3;
//- Define mesh location for keeping.
// In this case use the one from snappyHexMeshDict. This can
// optionally be a list of locations.
locationsInMesh (${:castellatedMeshControls.locationInMesh});
}
}
// ************************************************************************* //

View File

@ -167,8 +167,10 @@ FoamFile
// source regionToCell; // source regionToCell;
// sourceInfo // sourceInfo
// { // {
// set c0; // name of cellSet giving mesh subset // set c0; // optional name of cellSet giving mesh subset
// insidePoint (1 2 3); // point inside region to select // insidePoints ((1 2 3)); // points inside region to select
// nErode 0; // optional number of layers to erode
// // selection
// } // }
// //
// // Cells underneath plane such that volume is reached. E.g. for use // // Cells underneath plane such that volume is reached. E.g. for use

View File

@ -1,16 +1,14 @@
/* Note: enable vtkPolyhedron when available */ /* Note: enable vtkPolyhedron when available */
PARAVIEW_INC = $(ParaView_DIR)/include/paraview-$(ParaView_MAJOR)
EXE_INC = \ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I../../vtkPV3Readers/lnInclude \ -I../../vtkPV3Readers/lnInclude \
-I../PV3FoamReader \ -I../PV3FoamReader \
-I$(PARAVIEW_INC) \ -I$(ParaView_INCLUDE_DIR) \
$(shell \ $(shell \
test -f $(PARAVIEW_INC)/vtkPolyhedron.h && \ test -f $(ParaView_INCLUDE_DIR)/vtkPolyhedron.h && \
echo "-DHAS_VTK_POLYHEDRON" || echo "-UHAS_VTK_POLYHEDRON" \ echo "-DHAS_VTK_POLYHEDRON" || echo "-UHAS_VTK_POLYHEDRON" \
) )

View File

@ -40,7 +40,11 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::vtkPV3Foam, 0); namespace Foam
{
defineTypeNameAndDebug(vtkPV3Foam, 0);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //

View File

@ -1,9 +1,7 @@
PARAVIEW_INC = $(ParaView_DIR)/include/paraview-$(ParaView_MAJOR)
EXE_INC = \ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/mesh/blockMesh/lnInclude \ -I$(LIB_SRC)/mesh/blockMesh/lnInclude \
-I$(PARAVIEW_INC) \ -I$(ParaView_INCLUDE_DIR) \
-I../../vtkPV3Readers/lnInclude \ -I../../vtkPV3Readers/lnInclude \
-I../PV3blockMeshReader -I../PV3blockMeshReader

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -41,7 +41,11 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::vtkPV3blockMesh, 0); namespace Foam
{
defineTypeNameAndDebug(vtkPV3blockMesh, 0);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //

View File

@ -1,7 +1,5 @@
PARAVIEW_INC = $(ParaView_DIR)/include/paraview-$(ParaView_MAJOR)
EXE_INC = \ EXE_INC = \
-I$(PARAVIEW_INC) -I$(ParaView_INCLUDE_DIR)
LIB_LIBS = \ LIB_LIBS = \
$(GLIBS) $(GLIBS)

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -39,7 +39,11 @@ Description
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::vtkPV3Readers, 0); namespace Foam
{
defineTypeNameAndDebug(vtkPV3Readers, 0);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -36,55 +36,55 @@ using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Dump collapse region to .obj file //// Dump collapse region to .obj file
static void writeRegionOBJ //static void writeRegionOBJ
( //(
const triSurface& surf, // const triSurface& surf,
const label regionI, // const label regionI,
const labelList& collapseRegion, // const labelList& collapseRegion,
const labelList& outsideVerts // const labelList& outsideVerts
) //)
{ //{
fileName dir("regions"); // fileName dir("regions");
//
mkDir(dir); // mkDir(dir);
fileName regionName(dir / "region_" + name(regionI) + ".obj"); // fileName regionName(dir / "region_" + name(regionI) + ".obj");
//
Pout<< "Dumping region " << regionI << " to file " << regionName << endl; // Pout<< "Dumping region " << regionI << " to file " << regionName << endl;
//
boolList include(surf.size(), false); // boolList include(surf.size(), false);
//
forAll(collapseRegion, faceI) // forAll(collapseRegion, faceI)
{ // {
if (collapseRegion[faceI] == regionI) // if (collapseRegion[faceI] == regionI)
{ // {
include[faceI] = true; // include[faceI] = true;
} // }
} // }
//
labelList pointMap, faceMap; // labelList pointMap, faceMap;
//
triSurface regionSurf(surf.subsetMesh(include, pointMap, faceMap)); // triSurface regionSurf(surf.subsetMesh(include, pointMap, faceMap));
//
Pout<< "Region " << regionI << " surface:" << nl; // Pout<< "Region " << regionI << " surface:" << nl;
regionSurf.writeStats(Pout); // regionSurf.writeStats(Pout);
//
regionSurf.write(regionName); // regionSurf.write(regionName);
//
//
// Dump corresponding outside vertices. // // Dump corresponding outside vertices.
fileName pointsName(dir / "regionPoints_" + name(regionI) + ".obj"); // fileName pointsName(dir / "regionPoints_" + name(regionI) + ".obj");
//
Pout<< "Dumping region " << regionI << " points to file " << pointsName // Pout<< "Dumping region " << regionI << " points to file " << pointsName
<< endl; // << endl;
//
OFstream str(pointsName); // OFstream str(pointsName);
//
forAll(outsideVerts, i) // forAll(outsideVerts, i)
{ // {
meshTools::writeOBJ(str, surf.localPoints()[outsideVerts[i]]); // meshTools::writeOBJ(str, surf.localPoints()[outsideVerts[i]]);
} // }
} //}
// Split triangle into multiple triangles because edge e being split // Split triangle into multiple triangles because edge e being split

View File

@ -11,6 +11,11 @@ cyclic
type cyclic; type cyclic;
} }
cyclicAMI
{
type cyclicAMI;
}
cyclicSlip cyclicSlip
{ {
type cyclicSlip; type cyclicSlip;

View File

@ -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
@ -39,7 +39,7 @@
# #
set foamFile=`$WM_PROJECT_DIR/bin/foamEtcFile -mode o config/paraview.csh` set foamFile=`$WM_PROJECT_DIR/bin/foamEtcFile -mode o config/paraview.csh`
if ( $status == 0 ) source $foamFile ParaView_VERSION=3.9.0 if ( $status == 0 ) source $foamFile ParaView_VERSION=3.12.0
unset foamFile unset foamFile

View File

@ -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
@ -39,7 +39,7 @@
# #
foamFile=$($WM_PROJECT_DIR/bin/foamEtcFile -mode o config/paraview.sh 2>/dev/null) foamFile=$($WM_PROJECT_DIR/bin/foamEtcFile -mode o config/paraview.sh 2>/dev/null)
[ $? -eq 0 ] && . $foamFile ParaView_VERSION=3.9.0 [ $? -eq 0 ] && . $foamFile ParaView_VERSION=3.12.0
unset foamFile unset foamFile

View File

@ -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
@ -88,6 +88,7 @@ if ( -r $ParaView_DIR || -r $paraviewInstDir ) then
setenv PATH ${ParaView_DIR}/bin:${PATH} setenv PATH ${ParaView_DIR}/bin:${PATH}
setenv LD_LIBRARY_PATH "${ParaView_DIR}/lib/paraview-${ParaView_MAJOR}:${LD_LIBRARY_PATH}" setenv LD_LIBRARY_PATH "${ParaView_DIR}/lib/paraview-${ParaView_MAJOR}:${LD_LIBRARY_PATH}"
setenv PV_PLUGIN_PATH $FOAM_LIBBIN/paraview-${ParaView_MAJOR} setenv PV_PLUGIN_PATH $FOAM_LIBBIN/paraview-${ParaView_MAJOR}
setenv ParaView_INCLUDE_DIR $ParaView_DIR/include/paraview-${ParaView_MAJOR}
# add in python libraries if required # add in python libraries if required
set paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping set paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping

View File

@ -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
@ -98,6 +98,8 @@ then
export LD_LIBRARY_PATH=$ParaView_DIR/lib/paraview-$ParaView_MAJOR:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$ParaView_DIR/lib/paraview-$ParaView_MAJOR:$LD_LIBRARY_PATH
export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-$ParaView_MAJOR export PV_PLUGIN_PATH=$FOAM_LIBBIN/paraview-$ParaView_MAJOR
export ParaView_INCLUDE_DIR=$ParaView_DIR/include/paraview-$ParaView_MAJOR
# add in python libraries if required # add in python libraries if required
paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping paraviewPython=$ParaView_DIR/Utilities/VTKPythonWrapping
if [ -r $paraviewPython ] if [ -r $paraviewPython ]

View File

@ -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
@ -125,6 +125,7 @@ unsetenv OPAL_PREFIX
unsetenv ENSIGHT9_READER unsetenv ENSIGHT9_READER
unsetenv CMAKE_HOME unsetenv CMAKE_HOME
unsetenv ParaView_DIR unsetenv ParaView_DIR
unsetenv ParaView_INCLUDE_DIR
unsetenv PV_PLUGIN_PATH unsetenv PV_PLUGIN_PATH

View File

@ -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
@ -112,6 +112,7 @@ unset OPAL_PREFIX
unset ENSIGHT9_READER unset ENSIGHT9_READER
unset CMAKE_HOME unset CMAKE_HOME
unset ParaView_DIR unset ParaView_DIR
unset ParaView_INCLUDE_DIR
unset PV_PLUGIN_PATH unset PV_PLUGIN_PATH

View File

@ -994,7 +994,7 @@ DimensionSets
acceleration acceleration [ m s^-2 ] 1.0; acceleration acceleration [ m s^-2 ] 1.0;
kinematicPressure kinematicPressure [ Pa density^-1 ] 1.0; kinematicPressure kinematicPressure [ Pa density^-1 ] 1.0;
// Scaled units. Only allowed in dymensionedType (dimensionedScalar, // Scaled units. Only allowed in dimensionedType (dimensionedScalar,
// dimensionedVector etc.) and UniformDimensionedField, not // dimensionedVector etc.) and UniformDimensionedField, not
// in DimensionedField or GeometricField // in DimensionedField or GeometricField
cm cm [ m ] 1e-2; cm cm [ m ] 1e-2;

View File

@ -76,6 +76,8 @@ wmake $makeType engine
wmake $makeType fieldSources wmake $makeType fieldSources
wmake $makeType regionCoupled
postProcessing/Allwmake $* postProcessing/Allwmake $*
# ----------------------------------------------------------------- end-of-file # ----------------------------------------------------------------- end-of-file

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -28,10 +28,10 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::KRR4, 0);
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(KRR4, 0);
addToRunTimeSelectionTable(ODESolver, KRR4, ODE); addToRunTimeSelectionTable(ODESolver, KRR4, ODE);
const scalar const scalar

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,9 +27,9 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::ODESolver, 0);
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(ODESolver, 0);
defineRunTimeSelectionTable(ODESolver, ODE); defineRunTimeSelectionTable(ODESolver, ODE);
} }

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -30,7 +30,7 @@ License
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Foam::RK, 0); defineTypeNameAndDebug(RK, 0);
addToRunTimeSelectionTable(ODESolver, RK, ODE); addToRunTimeSelectionTable(ODESolver, RK, ODE);
const scalar const scalar

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -28,10 +28,10 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::SIBS, 0);
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(SIBS, 0);
addToRunTimeSelectionTable(ODESolver, SIBS, ODE); addToRunTimeSelectionTable(ODESolver, SIBS, ODE);
const label SIBS::nSeq_[iMaxX_] = {2, 6, 10, 14, 22, 34, 50, 70}; const label SIBS::nSeq_[iMaxX_] = {2, 6, 10, 14, 22, 34, 50, 70};

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -67,7 +67,11 @@ Description
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::POSIX, 0); namespace Foam
{
defineTypeNameAndDebug(POSIX, 0);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -45,13 +45,13 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::fileMonitor, 0);
const Foam::NamedEnum<Foam::fileMonitor::fileState, 3> const Foam::NamedEnum<Foam::fileMonitor::fileState, 3>
Foam::fileMonitor::fileStateNames_; Foam::fileMonitor::fileStateNames_;
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(fileMonitor, 0);
template<> template<>
const char* Foam::NamedEnum const char* Foam::NamedEnum
< <

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,11 +31,41 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
// Signal number to catch // Signal number to catch
int Foam::sigStopAtWriteNow::signal_ int sigStopAtWriteNow::signal_
( (
debug::optimisationSwitch("stopAtWriteNowSignal", -1) debug::optimisationSwitch("stopAtWriteNowSignal", -1)
); );
// Register re-reader
class addstopAtWriteNowSignalToOpt
:
public ::Foam::simpleRegIOobject
{
public:
addstopAtWriteNowSignalToOpt(const char* name)
:
::Foam::simpleRegIOobject(Foam::debug::addOptimisationObject, name)
{}
virtual ~addstopAtWriteNowSignalToOpt()
{}
virtual void readData(Foam::Istream& is)
{
sigStopAtWriteNow::signal_ = readLabel(is);
sigStopAtWriteNow::set(true);
}
virtual void writeData(Foam::Ostream& os) const
{
os << sigStopAtWriteNow::signal_;
}
};
addstopAtWriteNowSignalToOpt addstopAtWriteNowSignalToOpt_
(
"stopAtWriteNowSignal"
);
}
static Foam::Time const* runTimePtr_ = NULL; static Foam::Time const* runTimePtr_ = NULL;
@ -80,6 +110,36 @@ Foam::sigStopAtWriteNow::sigStopAtWriteNow
const bool verbose, const bool verbose,
const Time& runTime const Time& runTime
) )
{
// Store runTime
runTimePtr_ = &runTime;
set(verbose);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::sigStopAtWriteNow::~sigStopAtWriteNow()
{
// Reset old handling
if (signal_ > 0)
{
if (sigaction(signal_, &oldAction_, NULL) < 0)
{
FatalErrorIn
(
"Foam::sigStopAtWriteNow::~sigStopAtWriteNow()"
) << "Cannot reset " << signal_ << " trapping"
<< abort(FatalError);
}
}
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::sigStopAtWriteNow::set(const bool verbose)
{ {
if (signal_ > 0) if (signal_ > 0)
{ {
@ -98,9 +158,6 @@ Foam::sigStopAtWriteNow::sigStopAtWriteNow
} }
// Store runTime
runTimePtr_ = &runTime;
struct sigaction newAction; struct sigaction newAction;
newAction.sa_handler = sigHandler; newAction.sa_handler = sigHandler;
newAction.sa_flags = SA_NODEFER; newAction.sa_flags = SA_NODEFER;
@ -125,27 +182,6 @@ Foam::sigStopAtWriteNow::sigStopAtWriteNow
} }
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::sigStopAtWriteNow::~sigStopAtWriteNow()
{
// Reset old handling
if (signal_ > 0)
{
if (sigaction(signal_, &oldAction_, NULL) < 0)
{
FatalErrorIn
(
"Foam::sigStopAtWriteNow::~sigStopAtWriteNow()"
) << "Cannot reset " << signal_ << " trapping"
<< abort(FatalError);
}
}
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::sigStopAtWriteNow::active() const bool Foam::sigStopAtWriteNow::active() const
{ {
return signal_ > 0; return signal_ > 0;

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -68,6 +68,9 @@ class sigStopAtWriteNow
public: public:
//- wip. Have setter have access to signal_
friend class addstopAtWriteNowSignalToOpt;
// Constructors // Constructors
//- Construct null //- Construct null
@ -83,6 +86,9 @@ public:
// Member functions // Member functions
//- (re)set signal catcher
static void set(const bool verbose);
//- Is active? //- Is active?
bool active() const; bool active() const;
}; };

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -31,11 +31,39 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
// Signal number to catch // Signal number to catch
int Foam::sigWriteNow::signal_ int sigWriteNow::signal_
( (
debug::optimisationSwitch("writeNowSignal", -1) debug::optimisationSwitch("writeNowSignal", -1)
); );
// Register re-reader
class addwriteNowSignalToOpt
:
public ::Foam::simpleRegIOobject
{
public:
addwriteNowSignalToOpt(const char* name)
:
::Foam::simpleRegIOobject(Foam::debug::addOptimisationObject, name)
{}
virtual ~addwriteNowSignalToOpt()
{}
virtual void readData(Foam::Istream& is)
{
sigWriteNow::signal_ = readLabel(is);
sigWriteNow::set(true);
}
virtual void writeData(Foam::Ostream& os) const
{
os << sigWriteNow::signal_;
}
};
addwriteNowSignalToOpt addwriteNowSignalToOpt_("writeNowSignal");
}
static Foam::Time* runTimePtr_ = NULL; static Foam::Time* runTimePtr_ = NULL;
@ -63,32 +91,11 @@ Foam::sigWriteNow::sigWriteNow()
Foam::sigWriteNow::sigWriteNow(const bool verbose, Time& runTime) Foam::sigWriteNow::sigWriteNow(const bool verbose, Time& runTime)
{
if (signal_ >= 0)
{ {
// Store runTime // Store runTime
runTimePtr_ = &runTime; runTimePtr_ = &runTime;
struct sigaction newAction; set(verbose);
newAction.sa_handler = sigHandler;
newAction.sa_flags = SA_NODEFER;
sigemptyset(&newAction.sa_mask);
if (sigaction(signal_, &newAction, &oldAction_) < 0)
{
FatalErrorIn
(
"Foam::sigWriteNow::sigWriteNow(const bool, const Time&)"
) << "Cannot set " << signal_ << " trapping"
<< abort(FatalError);
}
if (verbose)
{
Info<< "sigWriteNow :"
<< " Enabling writing upon signal " << signal_
<< endl;
}
}
} }
@ -113,6 +120,33 @@ Foam::sigWriteNow::~sigWriteNow()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::sigWriteNow::set(const bool verbose)
{
if (signal_ >= 0)
{
struct sigaction newAction;
newAction.sa_handler = sigHandler;
newAction.sa_flags = SA_NODEFER;
sigemptyset(&newAction.sa_mask);
if (sigaction(signal_, &newAction, &oldAction_) < 0)
{
FatalErrorIn
(
"Foam::sigWriteNow::sigWriteNow(const bool, const Time&)"
) << "Cannot set " << signal_ << " trapping"
<< abort(FatalError);
}
if (verbose)
{
Info<< "sigWriteNow :"
<< " Enabling writing upon signal " << signal_
<< endl;
}
}
}
bool Foam::sigWriteNow::active() const bool Foam::sigWriteNow::active() const
{ {
return signal_ > 0; return signal_ > 0;

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -69,6 +69,9 @@ public:
friend class sigStopAtWriteNow; friend class sigStopAtWriteNow;
//- wip. Have setter have access to signal_
friend class addwriteNowSignalToOpt;
// Constructors // Constructors
//- Construct null //- Construct null
@ -84,6 +87,9 @@ public:
// Member functions // Member functions
//- (re)set signal catcher
static void set(const bool verbose);
//- Is active? //- Is active?
bool active() const; bool active() const;

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -30,13 +30,17 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::timer, 0); namespace Foam
{
defineTypeNameAndDebug(timer, 0);
jmp_buf Foam::timer::envAlarm; jmp_buf timer::envAlarm;
struct sigaction Foam::timer::oldAction_; struct sigaction timer::oldAction_;
unsigned int timer::oldTimeOut_ = 0;
}
unsigned int Foam::timer::oldTimeOut_ = 0;
// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //

View File

@ -427,6 +427,10 @@ $(polyMesh)/polyMeshInitMesh.C
$(polyMesh)/polyMeshClear.C $(polyMesh)/polyMeshClear.C
$(polyMesh)/polyMeshUpdate.C $(polyMesh)/polyMeshUpdate.C
polyMeshCheck = $(polyMesh)/polyMeshCheck
$(polyMeshCheck)/polyMeshCheck.C
$(polyMeshCheck)/polyMeshTools.C
primitiveMesh = meshes/primitiveMesh primitiveMesh = meshes/primitiveMesh
$(primitiveMesh)/primitiveMesh.C $(primitiveMesh)/primitiveMesh.C
$(primitiveMesh)/primitiveMeshCellCells.C $(primitiveMesh)/primitiveMeshCellCells.C
@ -447,9 +451,9 @@ $(primitiveMesh)/primitiveMeshCalcCellShapes.C
primitiveMeshCheck = $(primitiveMesh)/primitiveMeshCheck primitiveMeshCheck = $(primitiveMesh)/primitiveMeshCheck
$(primitiveMeshCheck)/primitiveMeshCheck.C $(primitiveMeshCheck)/primitiveMeshCheck.C
$(primitiveMeshCheck)/primitiveMeshCheckMotion.C
$(primitiveMeshCheck)/primitiveMeshCheckPointNearness.C $(primitiveMeshCheck)/primitiveMeshCheckPointNearness.C
$(primitiveMeshCheck)/primitiveMeshCheckEdgeLength.C $(primitiveMeshCheck)/primitiveMeshCheckEdgeLength.C
$(primitiveMeshCheck)/primitiveMeshTools.C
primitivePatch = $(primitiveMesh)/primitivePatch primitivePatch = $(primitiveMesh)/primitivePatch
$(primitivePatch)/patchZones.C $(primitivePatch)/patchZones.C

View File

@ -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
@ -28,7 +28,9 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class T> template<class T>
Foam::Dictionary<T>::Dictionary() Foam::Dictionary<T>::Dictionary(const label size)
:
DictionaryBase<IDLList<T>, T>(size)
{} {}

View File

@ -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
@ -61,8 +61,8 @@ public:
// Constructors // Constructors
//- Null constructor //- Construct given initial table size
Dictionary(); Dictionary(const label size = 128);
//- Copy construct //- Copy construct
Dictionary(const Dictionary&); Dictionary(const Dictionary&);

View File

@ -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
@ -45,7 +45,9 @@ void Foam::DictionaryBase<IDLListType, T>::addEntries()
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class IDLListType, class T> template<class IDLListType, class T>
Foam::DictionaryBase<IDLListType, T>::DictionaryBase() Foam::DictionaryBase<IDLListType, T>::DictionaryBase(const label size)
:
hashedTs_(size)
{} {}

View File

@ -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
@ -90,8 +90,8 @@ public:
// Constructors // Constructors
//- Null constructor //- Construct given initial table size
DictionaryBase(); DictionaryBase(const label size = 128);
//- Copy construct //- Copy construct
DictionaryBase(const DictionaryBase&); DictionaryBase(const DictionaryBase&);

View File

@ -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
@ -28,7 +28,9 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class T> template<class T>
Foam::PtrDictionary<T>::PtrDictionary() Foam::PtrDictionary<T>::PtrDictionary(const label size)
:
DictionaryBase<DLPtrList<T>, T>(size)
{} {}

View File

@ -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
@ -61,8 +61,8 @@ public:
// Constructors // Constructors
//- Null constructor //- Construct given initial table size
PtrDictionary(); PtrDictionary(const label size = 128);
//- Copy construct //- Copy construct
PtrDictionary(const PtrDictionary&); PtrDictionary(const PtrDictionary&);

View File

@ -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
@ -28,7 +28,9 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class T> template<class T>
Foam::UPtrDictionary<T>::UPtrDictionary() Foam::UPtrDictionary<T>::UPtrDictionary(const label size)
:
DictionaryBase<DLList<T*>, T>(size)
{} {}

View File

@ -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
@ -61,8 +61,8 @@ public:
// Constructors // Constructors
//- Null constructor //- Construct given initial table size
UPtrDictionary(); UPtrDictionary(const label size = 128);
//- Copy construct //- Copy construct
UPtrDictionary(const UPtrDictionary&); UPtrDictionary(const UPtrDictionary&);

View File

@ -240,6 +240,12 @@ bool Foam::UPstream::floatTransfer
( (
debug::optimisationSwitch("floatTransfer", 0) debug::optimisationSwitch("floatTransfer", 0)
); );
registerOptSwitchWithName
(
Foam::UPstream::floatTransfer,
floatTransfer,
"floatTransfer"
);
// Number of processors at which the reduce algorithm changes from linear to // Number of processors at which the reduce algorithm changes from linear to
// tree // tree
@ -247,18 +253,55 @@ int Foam::UPstream::nProcsSimpleSum
( (
debug::optimisationSwitch("nProcsSimpleSum", 16) debug::optimisationSwitch("nProcsSimpleSum", 16)
); );
registerOptSwitchWithName
(
Foam::UPstream::nProcsSimpleSum,
nProcsSimpleSum,
"nProcsSimpleSum"
);
// Default commsType // Default commsType
Foam::UPstream::commsTypes Foam::UPstream::defaultCommsType Foam::UPstream::commsTypes Foam::UPstream::defaultCommsType
( (
commsTypeNames.read(debug::optimisationSwitches().lookup("commsType")) commsTypeNames.read(debug::optimisationSwitches().lookup("commsType"))
); );
// Register re-reader
class addcommsTypeToOpt
:
public ::Foam::simpleRegIOobject
{
public:
addcommsTypeToOpt(const char* name)
:
::Foam::simpleRegIOobject(Foam::debug::addOptimisationObject, name)
{}
virtual ~addcommsTypeToOpt()
{}
virtual void readData(Foam::Istream& is)
{
Foam::UPstream::defaultCommsType = Foam::UPstream::commsTypeNames.read
(
is
);
}
virtual void writeData(Foam::Ostream& os) const
{
os << Foam::UPstream::commsTypeNames[Foam::UPstream::defaultCommsType];
}
};
addcommsTypeToOpt addcommsTypeToOpt_("commsType");
// Number of polling cycles in processor updates // Number of polling cycles in processor updates
int Foam::UPstream::nPollProcInterfaces int Foam::UPstream::nPollProcInterfaces
( (
debug::optimisationSwitch("nPollProcInterfaces", 0) debug::optimisationSwitch("nPollProcInterfaces", 0)
); );
registerOptSwitchWithName
(
Foam::UPstream::nPollProcInterfaces,
nPollProcInterfaces,
"nPollProcInterfaces"
);
// ************************************************************************* // // ************************************************************************* //

View File

@ -32,8 +32,9 @@ namespace Foam
const char* const token::typeName = "token"; const char* const token::typeName = "token";
token token::undefinedToken; token token::undefinedToken;
defineTypeNameAndDebug(token::compound, 0); typedef token::compound tokenCompound;
defineRunTimeSelectionTable(token::compound, Istream); defineTypeNameAndDebug(tokenCompound, 0);
defineRunTimeSelectionTable(tokenCompound, Istream);
} }

View File

@ -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
@ -26,6 +26,7 @@ License
#include "Time.H" #include "Time.H"
#include "Pstream.H" #include "Pstream.H"
#include "simpleObjectRegistry.H" #include "simpleObjectRegistry.H"
#include "dimensionedConstants.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -40,52 +41,55 @@ void Foam::Time::readDict()
// Check for local switches and settings // Check for local switches and settings
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Debug switches
if (controlDict_.found("DebugSwitches")) if (controlDict_.found("DebugSwitches"))
{ {
Info<< "Overriding DebugSwitches according to " << controlDict_.name()
<< endl;
simpleObjectRegistry& objects = debug::debugObjects(); simpleObjectRegistry& objects = debug::debugObjects();
const dictionary& localSettings = controlDict_.subDict("DebugSwitches"); const dictionary& localSettings = controlDict_.subDict("DebugSwitches");
forAllConstIter(dictionary, localSettings, iter) forAllConstIter(dictionary, localSettings, iter)
{ {
const word& name = iter().keyword(); const word& name = iter().keyword();
simpleObjectRegistry::iterator fnd = objects.find(name);
if (fnd != objects.end()) simpleObjectRegistryEntry* objPtr = objects.lookupPtr(name);
if (objPtr)
{ {
Info<< controlDict_.name() << " : overriding debug switch " Info<< " " << iter() << endl;
<< name << endl;
const List<simpleRegIOobject*>& objects = *objPtr;
if (iter().isDict()) if (iter().isDict())
{
forAll(objects, i)
{ {
OStringStream os(IOstream::ASCII); OStringStream os(IOstream::ASCII);
os << iter().dict(); os << iter().dict();
IStringStream is(os.str()); IStringStream is(os.str());
fnd()->readData(is); objects[i]->readData(is);
}
} }
else else
{ {
fnd()->readData(iter().stream()); forAll(objects, i)
}
}
}
}
if (controlDict_.found("DimensionSets"))
{ {
dictionary dict(Foam::dimensionSystems()); objects[i]->readData(iter().stream());
dict.merge(controlDict_.subDict("DimensionSets"));
simpleObjectRegistry& objects = debug::dimensionSetObjects();
simpleObjectRegistry::iterator fnd = objects.find("DimensionSets");
if (fnd != objects.end())
{
Info<< controlDict_.name() << " : overriding DimensionSets" << endl;
OStringStream os(IOstream::ASCII);
os << dict;
IStringStream is(os.str());
fnd()->readData(is);
} }
} }
}
}
}
// Optimisation Switches
if (controlDict_.found("OptimisationSwitches")) if (controlDict_.found("OptimisationSwitches"))
{ {
Info<< "Overriding OptimisationSwitches according to "
<< controlDict_.name() << endl;
simpleObjectRegistry& objects = debug::optimisationObjects(); simpleObjectRegistry& objects = debug::optimisationObjects();
const dictionary& localSettings = controlDict_.subDict const dictionary& localSettings = controlDict_.subDict
( (
@ -94,27 +98,208 @@ void Foam::Time::readDict()
forAllConstIter(dictionary, localSettings, iter) forAllConstIter(dictionary, localSettings, iter)
{ {
const word& name = iter().keyword(); const word& name = iter().keyword();
simpleObjectRegistry::iterator fnd = objects.find(name);
if (fnd != objects.end()) simpleObjectRegistryEntry* objPtr = objects.lookupPtr(name);
if (objPtr)
{ {
Info<< controlDict_.name() Info<< " " << iter() << endl;
<< " : overriding optimisation switch "
<< name << endl; const List<simpleRegIOobject*>& objects = *objPtr;
if (iter().isDict()) if (iter().isDict())
{
forAll(objects, i)
{ {
OStringStream os(IOstream::ASCII); OStringStream os(IOstream::ASCII);
os << iter().dict(); os << iter().dict();
IStringStream is(os.str()); IStringStream is(os.str());
fnd()->readData(is); objects[i]->readData(is);
}
} }
else else
{ {
fnd()->readData(iter().stream()); forAll(objects, i)
{
objects[i]->readData(iter().stream());
} }
} }
} }
} }
}
// DimensionedConstants. Handled as a special case since both e.g.
// the 'unitSet' might be changed and the individual values
if (controlDict_.found("DimensionedConstants"))
{
Info<< "Overriding DimensionedConstants according to "
<< controlDict_.name() << endl;
// Change in-memory
dimensionedConstants().merge
(
controlDict_.subDict("DimensionedConstants")
);
simpleObjectRegistry& objects = debug::dimensionedConstantObjects();
IStringStream dummyIs("");
forAllConstIter(simpleObjectRegistry, objects, iter)
{
const List<simpleRegIOobject*>& objects = *iter;
forAll(objects, i)
{
objects[i]->readData(dummyIs);
Info<< " ";
objects[i]->writeData(Info);
Info<< endl;
}
}
}
//{
// // fundamentalConstants.C
// Info<< "constant::universal::hr:"
// << Foam::constant::universal::hr
// << endl;
// Info<< "constant::universal::c:"
// << Foam::constant::universal::c
// << endl;
// Info<< "constant::universal::G:"
// << Foam::constant::universal::G
// << endl;
// Info<< "constant::universal::h:"
// << Foam::constant::universal::h
// << endl;
// Info<< "constant::electromagnetic::e:"
// << Foam::constant::electromagnetic::e
// << endl;
// Info<< "constant::atomic::me:"
// << Foam::constant::atomic::me
// << endl;
// Info<< "constant::atomic::mp:"
// << Foam::constant::atomic::mp
// << endl;
// Info<< "constant::physicoChemical::mu:"
// << Foam::constant::physicoChemical::mu
// << endl;
// Info<< "constant::physicoChemical::NA:"
// << Foam::constant::physicoChemical::NA
// << endl;
// Info<< "constant::physicoChemical::k:"
// << Foam::constant::physicoChemical::k
// << endl;
// Info<< "constant::standard::Pstd:"
// << Foam::constant::standard::Pstd
// << endl;
// Info<< "constant::standard::Tstd:"
// << Foam::constant::standard::Tstd
// << endl;
//
// // universalConstants.C
// Info<< "constant::universal::hr:"
// << Foam::constant::universal::hr
// << endl;
//
// // electromagneticConstants.C
// Info<< "constant::electromagnetic::mu0:"
// << Foam::constant::electromagnetic::mu0
// << endl;
// Info<< "constant::electromagnetic::epsilon0:"
// << Foam::constant::electromagnetic::epsilon0
// << endl;
// Info<< "constant::electromagnetic::Z0:"
// << Foam::constant::electromagnetic::Z0
// << endl;
// Info<< "constant::electromagnetic::kappa:"
// << Foam::constant::electromagnetic::kappa
// << endl;
// Info<< "constant::electromagnetic::G0:"
// << Foam::constant::electromagnetic::G0
// << endl;
// Info<< "constant::electromagnetic::KJ:"
// << Foam::constant::electromagnetic::KJ
// << endl;
// Info<< "constant::electromagnetic::RK:"
// << Foam::constant::electromagnetic::RK
// << endl;
//
//
// // atomicConstants.C
// Info<< "constant::atomic::alpha:"
// << Foam::constant::atomic::alpha
// << endl;
// Info<< "constant::atomic::Rinf:"
// << Foam::constant::atomic::Rinf
// << endl;
// Info<< "constant::atomic::a0:"
// << Foam::constant::atomic::a0
// << endl;
// Info<< "constant::physiatomic::re:"
// << Foam::constant::atomic::re
// << endl;
// Info<< "constant::atomic::Eh:"
// << Foam::constant::atomic::Eh
// << endl;
//
//
// // physicoChemicalConstants.C
// Info<< "constant::physicoChemical::R:"
// << Foam::constant::physicoChemical::R
// << endl;
// Info<< "constant::physicoChemical::F:"
// << Foam::constant::physicoChemical::F
// << endl;
// Info<< "constant::physicoChemical::sigma:"
// << Foam::constant::physicoChemical::sigma
// << endl;
// Info<< "constant::physicoChemical::b:"
// << Foam::constant::physicoChemical::b
// << endl;
// Info<< "constant::physicoChemical::c1:"
// << Foam::constant::physicoChemical::c1
// << endl;
// Info<< "constant::physicoChemical::c2:"
// << Foam::constant::physicoChemical::c2
// << endl;
//}
// Dimension sets
if (controlDict_.found("DimensionSets"))
{
Info<< "Overriding DimensionSets according to "
<< controlDict_.name() << endl;
dictionary dict(Foam::dimensionSystems());
dict.merge(controlDict_.subDict("DimensionSets"));
simpleObjectRegistry& objects = debug::dimensionSetObjects();
simpleObjectRegistryEntry* objPtr = objects.lookupPtr("DimensionSets");
if (objPtr)
{
Info<< controlDict_.subDict("DimensionSets") << endl;
const List<simpleRegIOobject*>& objects = *objPtr;
forAll(objects, i)
{
OStringStream os(IOstream::ASCII);
os << dict;
IStringStream is(os.str());
objects[i]->readData(is);
}
}
}

View File

@ -37,6 +37,13 @@ namespace Foam
( (
debug::optimisationSwitch("fileModificationSkew", 30) debug::optimisationSwitch("fileModificationSkew", 30)
); );
registerOptSwitchWithName
(
Foam::regIOobject::fileModificationSkew,
fileModificationSkew,
"fileModificationSkew"
);
template<> template<>
const char* NamedEnum const char* NamedEnum
@ -67,6 +74,35 @@ Foam::regIOobject::fileCheckTypes Foam::regIOobject::fileModificationChecking
) )
) )
); );
// Register re-reader
class addfileModificationCheckingToOpt
:
public ::Foam::simpleRegIOobject
{
public:
addfileModificationCheckingToOpt(const char* name)
:
::Foam::simpleRegIOobject(Foam::debug::addOptimisationObject, name)
{}
virtual ~addfileModificationCheckingToOpt()
{}
virtual void readData(Foam::Istream& is)
{
Foam::regIOobject::fileModificationChecking =
Foam::regIOobject::fileCheckTypesNames.read(is);
}
virtual void writeData(Foam::Ostream& os) const
{
os << Foam::regIOobject::fileCheckTypesNames
[
Foam::regIOobject::fileModificationChecking
];
}
};
addfileModificationCheckingToOpt addfileModificationCheckingToOpt_
(
"fileModificationChecking"
);
bool Foam::regIOobject::masterOnlyReading = false; bool Foam::regIOobject::masterOnlyReading = false;

View File

@ -31,6 +31,7 @@ Description
#include "word.H" #include "word.H"
#include "debug.H" #include "debug.H"
#include "debugName.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -133,84 +134,6 @@ public: \
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// definitions (debug information only)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//- Define the debug information, lookup as \a Name
#define registerDebugSwitchWithName(Type,Tag,Name)\
class add##Tag##ToDebug\
:\
public ::Foam::simpleRegIOobject\
{\
public:\
add##Tag##ToDebug(const char* name)\
:\
::Foam::simpleRegIOobject(Foam::debug::addDebugObject, name)\
{}\
virtual ~add##Tag##ToDebug()\
{}\
virtual void readData(Foam::Istream& is)\
{\
Type::debug = readLabel(is);\
}\
virtual void writeData(Foam::Ostream& os) const\
{\
os << Type::debug;\
}\
};\
add##Tag##ToDebug add##Tag##ToDebug_(Name)
//- Define the debug information, lookup as \a Name
#define defineDebugSwitchWithName(Type, Name, DebugSwitch) \
int Type::debug(::Foam::debug::debugSwitch(Name, DebugSwitch))
//- Define the debug information
#define defineDebugSwitch(Type, DebugSwitch) \
defineDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch)
#ifdef __INTEL_COMPILER
//- Define the debug information for templates, lookup as \a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
//- Define the debug information for templates sub-classes, lookup as \a Name
# define defineTemplate2DebugSwitchWithName(Type, Name, DebugSwitch) \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
#else
//- Define the debug information for templates, lookup as \a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
template<> \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
//- Define the debug information for templates sub-classes, lookup as \a Name
# define defineTemplate2DebugSwitchWithName(Type, Name, DebugSwitch) \
template<> \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
#endif
//- Define the debug information for templates
// Useful with typedefs
#define defineTemplateDebugSwitch(Type, DebugSwitch) \
defineTemplateDebugSwitchWithName(Type, #Type, DebugSwitch)
//- Define the debug information directly for templates
#define defineNamedTemplateDebugSwitch(Type, DebugSwitch) \
defineTemplateDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch)
// for templated sub-classes
//- Define the debug information for templates
// Useful with typedefs
#define defineTemplate2DebugSwitch(Type, DebugSwitch) \
defineTemplate2DebugSwitchWithName(Type, #Type, DebugSwitch)
//- Define the debug information directly for templates
#define defineNamedTemplate2DebugSwitch(Type, DebugSwitch) \
defineTemplate2DebugSwitchWithName(Type, Type::typeName_(), DebugSwitch)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// definitions (with debug information) // definitions (with debug information)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -0,0 +1,172 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Macro definitions for debug symbols etc.
\*---------------------------------------------------------------------------*/
#ifndef debugName_H
#define debugName_H
#include "simpleRegIOobject.H"
#include "word.H"
#include "debug.H"
#include "label.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// definitions (debug information only)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//- Define the debug information, lookup as \a Name
#define registerDebugSwitchWithName(Type,Tag,Name) \
class add##Tag##ToDebug \
: \
public ::Foam::simpleRegIOobject \
{ \
public: \
add##Tag##ToDebug(const char* name) \
: \
::Foam::simpleRegIOobject(Foam::debug::addDebugObject, name) \
{} \
virtual ~add##Tag##ToDebug() \
{} \
virtual void readData(Foam::Istream& is) \
{ \
Type::debug = readLabel(is); \
} \
virtual void writeData(Foam::Ostream& os) const \
{ \
os << Type::debug; \
} \
}; \
add##Tag##ToDebug add##Tag##ToDebug_(Name)
//- Register info switch (if int), lookup as \a Name
#define registerInfoSwitchWithName(Switch,Tag,Name) \
class add##Tag##ToInfo \
: \
public ::Foam::simpleRegIOobject \
{ \
public: \
add##Tag##ToInfo(const char* name) \
: \
::Foam::simpleRegIOobject(Foam::debug::addInfoObject, name) \
{} \
virtual ~add##Tag##ToInfo() \
{} \
virtual void readData(Foam::Istream& is) \
{ \
Switch = readLabel(is); \
} \
virtual void writeData(Foam::Ostream& os) const \
{ \
os << Switch; \
} \
}; \
add##Tag##ToInfo add##Tag##ToInfo_(Name)
//- Register optimisation switch (if int), lookup as \a Name
#define registerOptSwitchWithName(Switch,Tag,Name) \
class add##Tag##ToOpt \
: \
public ::Foam::simpleRegIOobject \
{ \
public: \
add##Tag##ToOpt(const char* name) \
: \
::Foam::simpleRegIOobject(Foam::debug::addOptimisationObject,name)\
{} \
virtual ~add##Tag##ToOpt() \
{} \
virtual void readData(Foam::Istream& is) \
{ \
Switch = readLabel(is); \
} \
virtual void writeData(Foam::Ostream& os) const \
{ \
os << Switch; \
} \
}; \
add##Tag##ToOpt add##Tag##ToOpt_(Name)
//- Define the debug information, lookup as \a Name
#define defineDebugSwitchWithName(Type, Name, DebugSwitch) \
int Type::debug(::Foam::debug::debugSwitch(Name, DebugSwitch))
//- Define the debug information
#define defineDebugSwitch(Type, DebugSwitch) \
defineDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch); \
registerDebugSwitchWithName(Type, Type, Type::typeName_())
#ifdef __INTEL_COMPILER
//- Define the debug information for templates, lookup as \a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
//- Define the debug information for templates sub-classes, lookup as \a Name
# define defineTemplate2DebugSwitchWithName(Type, Name, DebugSwitch) \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
#else
//- Define the debug information for templates, lookup as \a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
template<> \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
//- Define the debug information for templates sub-classes, lookup as \a Name
# define defineTemplate2DebugSwitchWithName(Type, Name, DebugSwitch) \
template<> \
defineDebugSwitchWithName(Type, Name, DebugSwitch)
#endif
//- Define the debug information for templates
// Useful with typedefs
#define defineTemplateDebugSwitch(Type, DebugSwitch) \
defineTemplateDebugSwitchWithName(Type, #Type, DebugSwitch)
//- Define the debug information directly for templates
#define defineNamedTemplateDebugSwitch(Type, DebugSwitch) \
defineTemplateDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch)
// for templated sub-classes
//- Define the debug information for templates
// Useful with typedefs
#define defineTemplate2DebugSwitch(Type, DebugSwitch) \
defineTemplate2DebugSwitchWithName(Type, #Type, DebugSwitch)
//- Define the debug information directly for templates
#define defineNamedTemplate2DebugSwitch(Type, DebugSwitch) \
defineTemplate2DebugSwitchWithName(Type, Type::typeName_(), DebugSwitch)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -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
@ -194,6 +194,10 @@ private:
}; };
//- Reset exponents to nearest integer if close to it. Used to
// handle reading with insufficient precision.
void round(const scalar tol);
dimensionedScalar parse dimensionedScalar parse
( (
const label lastPrior, const label lastPrior,

View File

@ -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
@ -26,6 +26,7 @@ License
#include "dimensionSet.H" #include "dimensionSet.H"
#include "IOstreams.H" #include "IOstreams.H"
#include "dimensionedScalar.H" #include "dimensionedScalar.H"
#include <limits>
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
@ -142,7 +143,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
word subWord = w(start, i-start); word subWord = w(start, i-start);
if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT) if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT)
{ {
push(token(readLabel(IStringStream(subWord)()))); push(token(readScalar(IStringStream(subWord)())));
} }
else else
{ {
@ -153,7 +154,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
{ {
if (isdigit(w[i])) if (isdigit(w[i]))
{ {
push(token(readLabel(IStringStream(w[i])()))); push(token(readScalar(IStringStream(w[i])())));
} }
else else
{ {
@ -168,7 +169,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
word subWord = w(start, w.size()-start); word subWord = w(start, w.size()-start);
if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT) if (isdigit(subWord[0]) || subWord[0] == token::SUBTRACT)
{ {
push(token(readLabel(IStringStream(subWord)()))); push(token(readScalar(IStringStream(subWord)())));
} }
else else
{ {
@ -213,6 +214,29 @@ void Foam::dimensionSet::tokeniser::putBack(const token& t)
} }
void Foam::dimensionSet::round(const scalar tol)
{
for (int i=0; i < dimensionSet::nDimensions; ++i)
{
scalar integralPart;
scalar fractionalPart = std::modf(exponents_[i], &integralPart);
if (mag(fractionalPart-1.0) <= tol)
{
exponents_[i] = 1.0+integralPart;
}
else if (mag(fractionalPart+1.0) <= tol)
{
exponents_[i] = -1.0+integralPart;
}
else if (mag(fractionalPart) <= tol)
{
exponents_[i] = integralPart;
}
}
}
Foam::dimensionedScalar Foam::dimensionSet::parse Foam::dimensionedScalar Foam::dimensionSet::parse
( (
const label lastPrior, const label lastPrior,
@ -327,6 +351,8 @@ Foam::dimensionedScalar Foam::dimensionSet::parse
dimensionedScalar exp(parse(nextPrior, tis, readSet)); dimensionedScalar exp(parse(nextPrior, tis, readSet));
ds.dimensions().reset(pow(ds.dimensions(), exp.value())); ds.dimensions().reset(pow(ds.dimensions(), exp.value()));
// Round to nearest integer if close to it
ds.dimensions().round(10*smallExponent);
ds.value() = Foam::pow(ds.value(), exp.value()); ds.value() = Foam::pow(ds.value(), exp.value());
} }
else else
@ -535,6 +561,8 @@ Foam::Istream& Foam::dimensionSet::read
s.read(readSet[symbol], readSet); s.read(readSet[symbol], readSet);
symbolSet.reset(pow(s.dimensions(), exponent)); symbolSet.reset(pow(s.dimensions(), exponent));
// Round to nearest integer if close to it
symbolSet.round(10*smallExponent);
multiplier *= Foam::pow(s.value(), exponent); multiplier *= Foam::pow(s.value(), exponent);
} }
else else
@ -634,6 +662,13 @@ Foam::Ostream& Foam::dimensionSet::write
writeUnits.coefficients(exponents); writeUnits.coefficients(exponents);
bool hasPrinted = false; bool hasPrinted = false;
// Set precision to lots
std::streamsize oldPrecision = os.precision
(
std::numeric_limits<scalar>::digits10
);
forAll(exponents, i) forAll(exponents, i)
{ {
if (mag(exponents[i]) > smallExponent) if (mag(exponents[i]) > smallExponent)
@ -658,6 +693,9 @@ Foam::Ostream& Foam::dimensionSet::write
} }
} }
} }
// Reset precision
os.precision(oldPrecision);
} }
else else
{ {

View File

@ -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
@ -35,21 +35,16 @@ namespace Foam
/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */
//- Since dimensionSystems() can be reread we actually store a copy of
// the controlDict subDict (v.s. a reference to the subDict for e.g.
// dimensionedConstants)
dictionary* dimensionSystemsPtr_(NULL); dictionary* dimensionSystemsPtr_(NULL);
HashTable<dimensionedScalar>* unitSetPtr_(NULL);
dimensionSets* writeUnitSetPtr_(NULL);
dictionary& dimensionSystems() //- Helper class to
{ // - register re-reader
return debug::switchSet // - deallocate demand-driven data
(
"DimensionSets",
dimensionSystemsPtr_
);
}
autoPtr<HashTable<dimensionedScalar> > unitSetPtr_;
autoPtr<dimensionSets> writeUnitSetPtr_;
class addDimensionSetsToDebug class addDimensionSetsToDebug
: :
public ::Foam::simpleRegIOobject public ::Foam::simpleRegIOobject
@ -60,12 +55,17 @@ public:
::Foam::simpleRegIOobject(Foam::debug::addDimensionSetObject, name) ::Foam::simpleRegIOobject(Foam::debug::addDimensionSetObject, name)
{} {}
virtual ~addDimensionSetsToDebug() virtual ~addDimensionSetsToDebug()
{} {
deleteDemandDrivenData(dimensionSystemsPtr_);
deleteDemandDrivenData(unitSetPtr_);
deleteDemandDrivenData(writeUnitSetPtr_);
}
virtual void readData(Foam::Istream& is) virtual void readData(Foam::Istream& is)
{ {
deleteDemandDrivenData(dimensionSystemsPtr_); deleteDemandDrivenData(dimensionSystemsPtr_);
unitSetPtr_.clear(); deleteDemandDrivenData(unitSetPtr_);
writeUnitSetPtr_.clear(); deleteDemandDrivenData(writeUnitSetPtr_);
dimensionSystemsPtr_ = new dictionary(is); dimensionSystemsPtr_ = new dictionary(is);
} }
virtual void writeData(Foam::Ostream& os) const virtual void writeData(Foam::Ostream& os) const
@ -76,10 +76,27 @@ public:
addDimensionSetsToDebug addDimensionSetsToDebug_("DimensionSets"); addDimensionSetsToDebug addDimensionSetsToDebug_("DimensionSets");
dictionary& dimensionSystems()
{
if (!dimensionSystemsPtr_)
{
dictionary* cachedPtr = NULL;
dimensionSystemsPtr_ = new dictionary
(
debug::switchSet
(
"DimensionSets",
cachedPtr
)
);
}
return *dimensionSystemsPtr_;
}
const HashTable<dimensionedScalar>& unitSet() const HashTable<dimensionedScalar>& unitSet()
{ {
if (!unitSetPtr_.valid()) if (!unitSetPtr_)
{ {
const dictionary& dict = dimensionSystems(); const dictionary& dict = dimensionSystems();
@ -101,10 +118,7 @@ const HashTable<dimensionedScalar>& unitSet()
const dictionary& unitDict = dict.subDict(unitSetCoeffs); const dictionary& unitDict = dict.subDict(unitSetCoeffs);
unitSetPtr_.reset unitSetPtr_ = new HashTable<dimensionedScalar>(unitDict.size());
(
new HashTable<dimensionedScalar>(unitDict.size())
);
forAllConstIter(dictionary, unitDict, iter) forAllConstIter(dictionary, unitDict, iter)
{ {
@ -132,14 +146,7 @@ const HashTable<dimensionedScalar>& unitSet()
) )
); );
writeUnitSetPtr_.reset writeUnitSetPtr_ = new dimensionSets(*unitSetPtr_, writeUnitNames);
(
new dimensionSets
(
unitSetPtr_(),
writeUnitNames
)
);
if (writeUnitNames.size() != 0 && writeUnitNames.size() != 7) if (writeUnitNames.size() != 0 && writeUnitNames.size() != 7)
{ {
@ -149,17 +156,17 @@ const HashTable<dimensionedScalar>& unitSet()
<< exit(FatalIOError); << exit(FatalIOError);
} }
} }
return unitSetPtr_(); return *unitSetPtr_;
} }
const dimensionSets& writeUnitSet() const dimensionSets& writeUnitSet()
{ {
if (!writeUnitSetPtr_.valid()) if (!writeUnitSetPtr_)
{ {
(void)unitSet(); (void)unitSet();
} }
return writeUnitSetPtr_(); return *writeUnitSetPtr_;
} }

View File

@ -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
@ -32,100 +32,107 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const char* const Foam::constant::atomic::group = "atomic"; namespace Foam
{
namespace constant
{
const char* const atomic::group = "atomic";
const Foam::dimensionedScalar Foam::constant::atomic::alpha defineDimensionedConstantWithDefault
( (
dimensionedConstant atomic::group,
( atomic::alpha,
group,
"alpha",
dimensionedScalar dimensionedScalar
( (
"alpha", "alpha",
sqr(constant::electromagnetic::e) sqr(electromagnetic::e)
/( /(
dimensionedScalar("C", dimless, 2.0) dimensionedScalar("C", dimless, 2.0)
*constant::electromagnetic::epsilon0 *electromagnetic::epsilon0
*constant::universal::h *universal::h
*constant::universal::c *universal::c
)
)
) )
),
constantatomicalpha,
"alpha"
); );
const Foam::dimensionedScalar Foam::constant::atomic::Rinf defineDimensionedConstantWithDefault
( (
dimensionedConstant atomic::group,
( atomic::Rinf,
group,
"Rinf",
dimensionedScalar dimensionedScalar
( (
"Rinf", "Rinf",
sqr(alpha)*me*constant::universal::c sqr(atomic::alpha)
/(dimensionedScalar("C", dimless, 2.0)*constant::universal::h) *atomic::me
) *universal::c
) /(Foam::dimensionedScalar("C", Foam::dimless, 2.0)*universal::h)
),
constantatomicRinf,
"Rinf"
); );
const Foam::dimensionedScalar Foam::constant::atomic::a0 defineDimensionedConstantWithDefault
( (
dimensionedConstant atomic::group,
( atomic::a0,
group,
"a0",
dimensionedScalar dimensionedScalar
( (
"a0", "a0",
alpha atomic::alpha
/( /(
dimensionedScalar("C", dimless, 4.0*constant::mathematical::pi) Foam::dimensionedScalar("C", Foam::dimless, 4.0*mathematical::pi)
*Rinf *atomic::Rinf
)
)
) )
),
constantatomica0,
"a0"
); );
const Foam::dimensionedScalar Foam::constant::atomic::re defineDimensionedConstantWithDefault
( (
dimensionedConstant atomic::group,
( atomic::re,
group,
"re",
dimensionedScalar dimensionedScalar
( (
"re", "re",
sqr(constant::electromagnetic::e) Foam::sqr(electromagnetic::e)
/( /(
dimensionedScalar("C", dimless, 4.0*constant::mathematical::pi) Foam::dimensionedScalar("C", Foam::dimless, 4.0*mathematical::pi)
*constant::electromagnetic::epsilon0 *electromagnetic::epsilon0
*me *atomic::me
*sqr(constant::universal::c) *Foam::sqr(universal::c)
)
)
) )
),
constantatomicre,
"re"
); );
const Foam::dimensionedScalar Foam::constant::atomic::Eh defineDimensionedConstantWithDefault
( (
dimensionedConstant atomic::group,
( atomic::Eh,
group,
"Eh",
dimensionedScalar dimensionedScalar
( (
"Eh", "Eh",
dimensionedScalar("C", dimless, 2.0) Foam::dimensionedScalar("C", Foam::dimless, 2.0)
*Rinf*constant::universal::h*constant::universal::c *atomic::Rinf*universal::h*universal::c
) ),
) constantatomicEh,
"Eh"
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace constant
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -28,7 +28,7 @@ License
// Constants supplied in the main controlDict // Constants supplied in the main controlDict
#include "fundamentalConstants.C" #include "fundamentalConstants.C"
// Derived constants // Derived constants. Note:order is important
#include "universalConstants.C" #include "universalConstants.C"
#include "electromagneticConstants.C" #include "electromagneticConstants.C"
#include "atomicConstants.C" #include "atomicConstants.C"

View File

@ -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
@ -92,6 +92,104 @@ T dimensionedConstant
} }
//- Defined dimensioned constant , lookup as \a Name
#define defineDimensionedConstant(Group,Switch,Tag,Name) \
const Foam::dimensionedScalar Switch; \
class add##Tag##ToDimensionedConstant \
: \
public Foam::simpleRegIOobject \
{ \
public: \
add##Tag##ToDimensionedConstant(const char* name) \
: \
Foam::simpleRegIOobject \
(Foam::debug::addDimensionedConstantObject,name) \
{ \
Foam::dimensionedScalar ds \
( \
Foam::dimensionedConstant \
( \
Group, \
Name \
) \
); \
Foam::dimensionedScalar& s = const_cast<Foam::dimensionedScalar&> \
( \
Switch \
); \
s.dimensions().reset(ds.dimensions()); \
s = ds; \
} \
virtual ~add##Tag##ToDimensionedConstant() \
{} \
virtual void readData(Foam::Istream& is) \
{ \
const_cast<Foam::dimensionedScalar&>(Switch) = \
Foam::dimensionedConstant \
( \
Group, \
Name \
); \
} \
virtual void writeData(Foam::Ostream& os) const \
{ \
os << Switch; \
} \
}; \
add##Tag##ToDimensionedConstant add##Tag##ToDimensionedConstant_(Name)
//- Defined dimensioned constant with default , lookup as \a Name
#define defineDimensionedConstantWithDefault\
(Group,Switch,DefaultExpr,Tag,Name) \
const Foam::dimensionedScalar Switch; \
class add##Tag##ToDimensionedConstantWithDefault \
: \
public Foam::simpleRegIOobject \
{ \
public: \
add##Tag##ToDimensionedConstantWithDefault(const char* name) \
: \
Foam::simpleRegIOobject \
(Foam::debug::addDimensionedConstantObject,name) \
{ \
Foam::dimensionedScalar ds \
( \
Foam::dimensionedConstant \
( \
Group, \
Name, \
Foam::dimensionedScalar(Name,DefaultExpr) \
) \
); \
Foam::dimensionedScalar& s = const_cast<Foam::dimensionedScalar&> \
( \
Switch \
); \
s.dimensions().reset(ds.dimensions()); \
s = ds; \
} \
virtual ~add##Tag##ToDimensionedConstantWithDefault() \
{} \
virtual void readData(Foam::Istream& is) \
{ \
const_cast<Foam::dimensionedScalar&>(Switch) = \
Foam::dimensionedConstant \
( \
Group, \
Name, \
Foam::dimensionedScalar(Name,DefaultExpr) \
); \
} \
virtual void writeData(Foam::Ostream& os) const \
{ \
os << Switch; \
} \
}; \
add##Tag##ToDimensionedConstantWithDefault \
add##Tag##ToDimensionedConstantWithDefault_(Name)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam

View File

@ -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
@ -32,135 +32,145 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const char* const Foam::constant::electromagnetic::group = "electromagnetic"; namespace Foam
{
namespace constant
{
const char* const electromagnetic::group = "electromagnetic";
const Foam::dimensionedScalar Foam::constant::electromagnetic::mu0 defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::mu0,
group,
"mu0",
dimensionedScalar dimensionedScalar
( (
"mu0", "mu0",
dimensionSet(1, 1, -2, 0, 0, -2, 0), dimensionSet(1, 1, -2, 0, 0, -2, 0),
4.0*constant::mathematical::pi*1e-07 4.0*mathematical::pi*1e-07
) ),
) constantelectromagneticmu0,
"mu0"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::epsilon0 defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::epsilon0,
group,
"epsilon0",
dimensionedScalar dimensionedScalar
( (
"epsilon0", "epsilon0",
dimensionedScalar("C", dimless, 1.0) dimensionedScalar("C", dimless, 1.0)
/(mu0*sqr(constant::universal::c)) /(electromagnetic::mu0*sqr(universal::c))
) ),
) constantelectromagneticepsilon0,
"epsilon0"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::Z0 defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::Z0,
group,
"Z0",
dimensionedScalar dimensionedScalar
( (
"Z0", "Z0",
mu0*constant::universal::c electromagnetic::mu0*universal::c
) ),
) constantelectromagneticZ0,
"Z0"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::kappa defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::kappa,
group,
"kappa",
dimensionedScalar dimensionedScalar
( (
"kappa", "kappa",
dimensionedScalar dimensionedScalar
( (
"C", "C",
dimless, Foam::dimless,
1.0/(4.0*constant::mathematical::pi) 1.0/(4.0*mathematical::pi)
)
/epsilon0
)
) )
/electromagnetic::epsilon0
),
constantelectromagnetickappa,
"kappa"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::G0 defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::G0,
group,
"G0",
dimensionedScalar dimensionedScalar
( (
"G0", "G0",
dimensionedScalar("C", dimless, 2)*sqr(e)/constant::universal::h dimensionedScalar("C", dimless, 2)
) *sqr(electromagnetic::e)
) /universal::h
),
constantelectromagneticG0,
"G0"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::KJ defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::KJ,
group,
"KJ",
dimensionedScalar dimensionedScalar
( (
"KJ", "KJ",
dimensionedScalar("C", dimless, 2)*e/constant::universal::h dimensionedScalar("C", dimless, 2)
) *electromagnetic::e
) /universal::h
),
constantelectromagneticKJ,
"KJ"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::phi0 defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::phi0,
group,
"phi0",
dimensionedScalar dimensionedScalar
( (
"phi0", "phi0",
constant::universal::h/(dimensionedScalar("C", dimless, 2)*e) universal::h
) /(dimensionedScalar("C", dimless, 2)*electromagnetic::e)
) ),
constantelectromagneticphi0,
"phi0"
); );
const Foam::dimensionedScalar Foam::constant::electromagnetic::RK defineDimensionedConstantWithDefault
( (
dimensionedConstant electromagnetic::group,
( electromagnetic::RK,
group,
"RK",
dimensionedScalar dimensionedScalar
( (
"RK", "RK",
constant::universal::h/sqr(e) universal::h/Foam::sqr(electromagnetic::e)
) ),
) constantelectromagneticRK,
"RK"
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace constant
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -39,89 +39,127 @@ Description
// Universal constants // Universal constants
const Foam::dimensionedScalar Foam::constant::universal::c namespace Foam
{
namespace constant
{
defineDimensionedConstant
( (
dimensionedConstant(universal::group, "c") universal::group,
universal::c,
constantuniversalc,
"c"
); );
const Foam::dimensionedScalar Foam::constant::universal::G defineDimensionedConstant
( (
dimensionedConstant(universal::group, "G") universal::group,
universal::G,
constantuniversalG,
"G"
); );
const Foam::dimensionedScalar Foam::constant::universal::h defineDimensionedConstant
( (
dimensionedConstant(universal::group, "h") universal::group,
universal::h,
constantuniversalh,
"h"
); );
// Electromagnetic // Electromagnetic
const Foam::dimensionedScalar Foam::constant::electromagnetic::e defineDimensionedConstant
( (
dimensionedConstant(electromagnetic::group, "e") electromagnetic::group,
electromagnetic::e,
constantelectromagnetice,
"e"
); );
// Atomic // Atomic
const Foam::dimensionedScalar Foam::constant::atomic::me defineDimensionedConstant
( (
dimensionedConstant(atomic::group, "me") atomic::group,
atomic::me,
constantatomicme,
"me"
); );
const Foam::dimensionedScalar Foam::constant::atomic::mp defineDimensionedConstant
( (
dimensionedConstant(atomic::group, "mp") atomic::group,
atomic::mp,
constantatomicmp,
"mp"
); );
// Physico-chemical // Physico-chemical
const Foam::dimensionedScalar Foam::constant::physicoChemical::mu defineDimensionedConstant
(
dimensionedConstant(physicoChemical::group, "mu")
);
const Foam::dimensionedScalar Foam::constant::physicoChemical::NA
(
// dimensionedConstant(physicoChemical::group, "NA")
dimensionedConstant
( (
physicoChemical::group, physicoChemical::group,
"NA", physicoChemical::mu,
dimensionedScalar constantphysicoChemicalmu,
( "mu"
"NA",
dimless/dimMoles,
6.0221417930e+23
)
)
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::k defineDimensionedConstantWithDefault
( (
dimensionedConstant(physicoChemical::group, "k") physicoChemical::group,
physicoChemical::NA,
Foam::dimensionedScalar
(
"NA",
Foam::dimless/Foam::dimMoles,
6.0221417930e+23
),
constantphysicoChemicalNA,
"NA"
);
defineDimensionedConstant
(
physicoChemical::group,
physicoChemical::k,
constantphysicoChemicalk,
"k"
); );
// Standard // Standard
const Foam::dimensionedScalar Foam::constant::standard::Pstd defineDimensionedConstant
( (
dimensionedConstant("standard", "Pstd") "standard",
standard::Pstd,
constantstandardPstd,
"Pstd"
); );
const Foam::dimensionedScalar Foam::constant::standard::Tstd defineDimensionedConstant
( (
dimensionedConstant("standard", "Tstd") "standard",
standard::Tstd,
constantstandardTstd,
"Tstd"
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace constant
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -32,105 +32,109 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const char* const Foam::constant::physicoChemical::group = "physicoChemical"; namespace Foam
{
namespace constant
{
const char* const physicoChemical::group = "physicoChemical";
const Foam::dimensionedScalar Foam::constant::physicoChemical::R defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::R,
group,
"R",
dimensionedScalar dimensionedScalar
( (
"R", "R",
NA*k physicoChemical::NA*physicoChemical::k
) ),
) constantphysicoChemicalR,
"R"
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::F defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::F,
group,
"F",
dimensionedScalar dimensionedScalar
( (
"F", "F",
NA*constant::electromagnetic::e physicoChemical::NA*electromagnetic::e
) ),
) constantphysicoChemicalF,
"F"
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::sigma defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::sigma,
group,
"sigma",
dimensionedScalar dimensionedScalar
( (
"sigma", "sigma",
dimensionedScalar Foam::dimensionedScalar
( (
"C", "C",
dimless, Foam::dimless,
sqr(constant::mathematical::pi)/60.0 Foam::sqr(mathematical::pi)/60.0
)
*pow4(k)/(pow3(constant::universal::hr)*sqr(constant::universal::c))
)
) )
*Foam::pow4(physicoChemical::k)
/(pow3(universal::hr)*sqr(universal::c))
),
constantphysicoChemicalsigma,
"sigma"
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::b defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::b,
group,
"b",
dimensionedScalar dimensionedScalar
( (
"b", "b",
(constant::universal::h*constant::universal::c/k) (universal::h*universal::c/physicoChemical::k)
/dimensionedScalar("C", dimless, 4.965114231) /Foam::dimensionedScalar("C", Foam::dimless, 4.965114231)
) ),
) constantphysicoChemicalb,
"b"
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::c1 defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::c1,
group,
"c1",
dimensionedScalar dimensionedScalar
( (
"c1", "c1",
dimensionedScalar("C", dimless, constant::mathematical::twoPi) Foam::dimensionedScalar("C", Foam::dimless, mathematical::twoPi)
*constant::universal::h*sqr(constant::universal::c) *universal::h*Foam::sqr(universal::c)
) ),
) constantphysicoChemicalc1,
"c1"
); );
const Foam::dimensionedScalar Foam::constant::physicoChemical::c2 defineDimensionedConstantWithDefault
( (
dimensionedConstant physicoChemical::group,
( physicoChemical::c2,
group,
"c2",
dimensionedScalar dimensionedScalar
( (
"c2", "c2",
constant::universal::h*constant::universal::c/k universal::h*universal::c/physicoChemical::k
) ),
) constantphysicoChemicalc2,
"c2"
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace constant
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -30,22 +30,32 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
const char* const Foam::constant::universal::group = "universal"; namespace Foam
{
namespace constant
{
const char* const universal::group = "universal";
const Foam::dimensionedScalar Foam::constant::universal::hr defineDimensionedConstantWithDefault
( (
dimensionedConstant "universal",
( universal::hr,
group,
"hr",
dimensionedScalar dimensionedScalar
( (
"hr", "hr",
h/(dimensionedScalar("C", dimless, constant::mathematical::twoPi)) universal::h
) /(dimensionedScalar("C", dimless, mathematical::twoPi))
) ),
constantuniversalhr,
"hr"
); );
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace constant
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -47,6 +47,14 @@ dictionary* debugSwitchesPtr_(NULL);
dictionary* infoSwitchesPtr_(NULL); dictionary* infoSwitchesPtr_(NULL);
dictionary* optimisationSwitchesPtr_(NULL); dictionary* optimisationSwitchesPtr_(NULL);
// Debug switch read and write callback tables.
simpleObjectRegistry* debugObjectsPtr_(NULL);
simpleObjectRegistry* infoObjectsPtr_(NULL);
simpleObjectRegistry* optimisationObjectsPtr_(NULL);
simpleObjectRegistry* dimensionSetObjectsPtr_(NULL);
simpleObjectRegistry* dimensionedConstantObjectsPtr_(NULL);
// to ensure controlDictPtr_ is deleted at the end of the run // to ensure controlDictPtr_ is deleted at the end of the run
class deleteControlDictPtr class deleteControlDictPtr
{ {
@ -57,35 +65,20 @@ public:
~deleteControlDictPtr() ~deleteControlDictPtr()
{ {
deleteDemandDrivenData(debugObjectsPtr_);
deleteDemandDrivenData(infoObjectsPtr_);
deleteDemandDrivenData(optimisationObjectsPtr_);
deleteDemandDrivenData(dimensionSetObjectsPtr_);
deleteDemandDrivenData(dimensionedConstantObjectsPtr_);
debugSwitchesPtr_ = NULL;
infoSwitchesPtr_ = NULL;
optimisationSwitchesPtr_ = NULL;
deleteDemandDrivenData(controlDictPtr_); deleteDemandDrivenData(controlDictPtr_);
} }
}; };
deleteControlDictPtr deleteControlDictPtr_; deleteControlDictPtr deleteControlDictPtr_;
// Debug switch read and write callback tables.
simpleObjectRegistry* debugObjectsPtr_(NULL);
simpleObjectRegistry* infoObjectsPtr_(NULL);
simpleObjectRegistry* optimisationObjectsPtr_(NULL);
simpleObjectRegistry* dimensionSetObjectsPtr_(NULL);
class deleteDebugSwitchPtr
{
public:
deleteDebugSwitchPtr()
{}
~deleteDebugSwitchPtr()
{
deleteDemandDrivenData(debugObjectsPtr_);
deleteDemandDrivenData(infoObjectsPtr_);
deleteDemandDrivenData(optimisationObjectsPtr_);
deleteDemandDrivenData(dimensionSetObjectsPtr_);
}
};
deleteDebugSwitchPtr deleteDebugSwitchPtr_;
//! \endcond //! \endcond
@ -190,13 +183,43 @@ int Foam::debug::optimisationSwitch(const char* name, const int defaultValue)
void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj) void Foam::debug::addDebugObject(const char* name, simpleRegIOobject* obj)
{ {
debugObjects().insert(name, obj); simpleObjectRegistryEntry* ptr = debugObjects().lookupPtr(name);
if (ptr)
{
ptr->append(obj);
}
else
{
debugObjects().append
(
name,
new simpleObjectRegistryEntry
(
List<simpleRegIOobject*>(1, obj)
)
);
}
} }
void Foam::debug::addInfoObject(const char* name, simpleRegIOobject* obj) void Foam::debug::addInfoObject(const char* name, simpleRegIOobject* obj)
{ {
infoObjects().insert(name, obj); simpleObjectRegistryEntry* ptr = infoObjects().lookupPtr(name);
if (ptr)
{
ptr->append(obj);
}
else
{
infoObjects().append
(
name,
new simpleObjectRegistryEntry
(
List<simpleRegIOobject*>(1, obj)
)
);
}
} }
@ -206,7 +229,22 @@ void Foam::debug::addOptimisationObject
simpleRegIOobject* obj simpleRegIOobject* obj
) )
{ {
optimisationObjects().insert(name, obj); simpleObjectRegistryEntry* ptr = optimisationObjects().lookupPtr(name);
if (ptr)
{
ptr->append(obj);
}
else
{
optimisationObjects().append
(
name,
new simpleObjectRegistryEntry
(
List<simpleRegIOobject*>(1, obj)
)
);
}
} }
@ -216,7 +254,50 @@ void Foam::debug::addDimensionSetObject
simpleRegIOobject* obj simpleRegIOobject* obj
) )
{ {
dimensionSetObjects().insert(name, obj); simpleObjectRegistryEntry* ptr = dimensionSetObjects().lookupPtr(name);
if (ptr)
{
ptr->append(obj);
}
else
{
dimensionSetObjects().append
(
name,
new simpleObjectRegistryEntry
(
List<simpleRegIOobject*>(1, obj)
)
);
}
}
void Foam::debug::addDimensionedConstantObject
(
const char* name,
simpleRegIOobject* obj
)
{
simpleObjectRegistryEntry* ptr = dimensionedConstantObjects().lookupPtr
(
name
);
if (ptr)
{
ptr->append(obj);
}
else
{
dimensionedConstantObjects().append
(
name,
new simpleObjectRegistryEntry
(
List<simpleRegIOobject*>(1, obj)
)
);
}
} }
@ -235,7 +316,7 @@ Foam::simpleObjectRegistry& Foam::debug::infoObjects()
{ {
if (!infoObjectsPtr_) if (!infoObjectsPtr_)
{ {
infoObjectsPtr_ = new simpleObjectRegistry(1000); infoObjectsPtr_ = new simpleObjectRegistry(100);
} }
return *infoObjectsPtr_; return *infoObjectsPtr_;
@ -246,7 +327,7 @@ Foam::simpleObjectRegistry& Foam::debug::optimisationObjects()
{ {
if (!optimisationObjectsPtr_) if (!optimisationObjectsPtr_)
{ {
optimisationObjectsPtr_ = new simpleObjectRegistry(1000); optimisationObjectsPtr_ = new simpleObjectRegistry(100);
} }
return *optimisationObjectsPtr_; return *optimisationObjectsPtr_;
@ -257,13 +338,24 @@ Foam::simpleObjectRegistry& Foam::debug::dimensionSetObjects()
{ {
if (!dimensionSetObjectsPtr_) if (!dimensionSetObjectsPtr_)
{ {
dimensionSetObjectsPtr_ = new simpleObjectRegistry(1000); dimensionSetObjectsPtr_ = new simpleObjectRegistry(100);
} }
return *dimensionSetObjectsPtr_; return *dimensionSetObjectsPtr_;
} }
Foam::simpleObjectRegistry& Foam::debug::dimensionedConstantObjects()
{
if (!dimensionedConstantObjectsPtr_)
{
dimensionedConstantObjectsPtr_ = new simpleObjectRegistry(100);
}
return *dimensionedConstantObjectsPtr_;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -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
@ -93,6 +93,9 @@ namespace debug
//- Register DimensionSets read/write object //- Register DimensionSets read/write object
void addDimensionSetObject(const char* name, simpleRegIOobject* obj); void addDimensionSetObject(const char* name, simpleRegIOobject* obj);
//- Register DimensionedConstant read/write object
void addDimensionedConstantObject(const char* name, simpleRegIOobject*);
//- Get access to registered debug switch objects //- Get access to registered debug switch objects
simpleObjectRegistry& debugObjects(); simpleObjectRegistry& debugObjects();
@ -106,6 +109,8 @@ namespace debug
//- Get access to registered dimensionSets switch objects //- Get access to registered dimensionSets switch objects
simpleObjectRegistry& dimensionSetObjects(); simpleObjectRegistry& dimensionSetObjects();
//- Get access to registered dimensionedConstant switch objects
simpleObjectRegistry& dimensionedConstantObjects();
} // End namespace debug } // End namespace debug

View File

@ -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) 2012 OpenFOAM Foundation \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -25,7 +25,7 @@ Class
Foam::simpleObjectRegistry Foam::simpleObjectRegistry
Description Description
Object registry for simpleRegIOobject Object registry for simpleRegIOobject. Maintains ordering.
SourceFiles SourceFiles
@ -34,7 +34,8 @@ SourceFiles
#ifndef simpleObjectRegistry_H #ifndef simpleObjectRegistry_H
#define simpleObjectRegistry_H #define simpleObjectRegistry_H
#include "HashTable.H" //#include "UPtrDictionary.H"
#include "Dictionary.H"
#include "simpleRegIOobject.H" #include "simpleRegIOobject.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -42,22 +43,40 @@ SourceFiles
namespace Foam namespace Foam
{ {
/*---------------------------------------------------------------------------*\
Class simpleObjectRegistryEntry Declaration
\*---------------------------------------------------------------------------*/
class simpleObjectRegistryEntry
:
public Dictionary<simpleObjectRegistryEntry>::link,
public List<simpleRegIOobject*>
{
public:
simpleObjectRegistryEntry(const List<simpleRegIOobject*>& data)
:
List<simpleRegIOobject*>(data)
{}
};
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class simpleObjectRegistry Declaration Class simpleObjectRegistry Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class simpleObjectRegistry class simpleObjectRegistry
: :
public HashTable<simpleRegIOobject*> public Dictionary<simpleObjectRegistryEntry>
{ {
public: public:
// Constructors // Constructors
//- Construct from initial estimate //- Construct given initial table size
simpleObjectRegistry(const label nIoObjects = 128) simpleObjectRegistry(const label nIoObjects = 128)
: :
HashTable<simpleRegIOobject*>(nIoObjects) Dictionary<simpleObjectRegistryEntry>(nIoObjects)
{} {}
}; };

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -33,8 +33,9 @@ License
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(graph::writer, 0); typedef graph::writer graphWriter;
defineRunTimeSelectionTable(graph::writer, word); defineTypeNameAndDebug(graphWriter, 0);
defineRunTimeSelectionTable(graphWriter, word);
} }

View File

@ -27,6 +27,13 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type>
inline Foam::DiagonalMatrix<Type>::DiagonalMatrix()
:
List<Type>()
{}
template<class Type> template<class Type>
template<class Form> template<class Form>
Foam::DiagonalMatrix<Type>::DiagonalMatrix(const Matrix<Form, Type>& a) Foam::DiagonalMatrix<Type>::DiagonalMatrix(const Matrix<Form, Type>& a)

View File

@ -60,6 +60,9 @@ public:
// Constructors // Constructors
//- Null constructor.
DiagonalMatrix<Type>();
//- Construct from diagonal component of a Matrix //- Construct from diagonal component of a Matrix
template<class Form> template<class Form>
DiagonalMatrix<Type>(const Matrix<Form, Type>&); DiagonalMatrix<Type>(const Matrix<Form, Type>&);

View File

@ -421,6 +421,40 @@ Form Foam::operator*(const scalar s, const Matrix<Form, Type>& a)
} }
template<class Form, class Type>
Form Foam::operator*(const Matrix<Form, Type>& a, const Matrix<Form, Type>& b)
{
if (a.m() != b.n())
{
FatalErrorIn
(
"Matrix<Form, Type>::operator*"
"(const Matrix<Form, Type>&, const Matrix<Form, Type>&)"
) << "attempted to multiply incompatible matrices:" << nl
<< "Matrix A : " << a.n() << " rows, " << a.m() << " columns" << nl
<< "Matrix B : " << b.n() << " rows, " << b.m() << " columns" << nl
<< "In order to multiply matrices, columns of A must equal "
<< "rows of B"
<< abort(FatalError);
}
Form ab(a.n(), b.m(), scalar(0));
for (register label i = 0; i < ab.n(); i++)
{
for (register label j = 0; j < ab.m(); j++)
{
for (register label l = 0; l < b.n(); l++)
{
ab[i][j] += a[i][l]*b[l][j];
}
}
}
return ab;
}
// * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * // // * * * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * //
#include "MatrixIO.C" #include "MatrixIO.C"

View File

@ -215,6 +215,12 @@ template<class Form, class Type> Form operator*
const Matrix<Form, Type>& const Matrix<Form, Type>&
); );
template<class Form, class Type> Form operator*
(
const Matrix<Form, Type>&,
const Matrix<Form, Type>&
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -258,7 +258,8 @@ void Foam::GAMGAgglomeration::agglomerateLduAddressing
( (
Pstream::nonBlocking, Pstream::nonBlocking,
restrictMap restrictMap
) ),
fineLevelIndex
).ptr() ).ptr()
); );

View File

@ -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-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -65,7 +65,11 @@ Foam::GAMGSolver::GAMGSolver
// which may be overridden by those in controlDict // which may be overridden by those in controlDict
cacheAgglomeration_(false), cacheAgglomeration_(false),
nPreSweeps_(0), nPreSweeps_(0),
preSweepsLevelMultiplier_(1),
maxPreSweeps_(4),
nPostSweeps_(2), nPostSweeps_(2),
postSweepsLevelMultiplier_(1),
maxPostSweeps_(4),
nFinestSweeps_(2), nFinestSweeps_(2),
scaleCorrection_(matrix.symmetric()), scaleCorrection_(matrix.symmetric()),
directSolveCoarsest_(false), directSolveCoarsest_(false),
@ -156,7 +160,19 @@ void Foam::GAMGSolver::readControls()
// we could also consider supplying defaults here too // we could also consider supplying defaults here too
controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_); controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_);
controlDict_.readIfPresent("nPreSweeps", nPreSweeps_); controlDict_.readIfPresent("nPreSweeps", nPreSweeps_);
controlDict_.readIfPresent
(
"preSweepsLevelMultiplier",
preSweepsLevelMultiplier_
);
controlDict_.readIfPresent("maxPreSweeps", maxPreSweeps_);
controlDict_.readIfPresent("nPostSweeps", nPostSweeps_); controlDict_.readIfPresent("nPostSweeps", nPostSweeps_);
controlDict_.readIfPresent
(
"postSweepsLevelMultiplier",
postSweepsLevelMultiplier_
);
controlDict_.readIfPresent("maxPostSweeps", maxPostSweeps_);
controlDict_.readIfPresent("nFinestSweeps", nFinestSweeps_); controlDict_.readIfPresent("nFinestSweeps", nFinestSweeps_);
controlDict_.readIfPresent("scaleCorrection", scaleCorrection_); controlDict_.readIfPresent("scaleCorrection", scaleCorrection_);
controlDict_.readIfPresent("directSolveCoarsest", directSolveCoarsest_); controlDict_.readIfPresent("directSolveCoarsest", directSolveCoarsest_);

View File

@ -79,9 +79,21 @@ class GAMGSolver
//- Number of pre-smoothing sweeps //- Number of pre-smoothing sweeps
label nPreSweeps_; label nPreSweeps_;
//- Lever multiplier for the number of pre-smoothing sweeps
label preSweepsLevelMultiplier_;
//- Maximum number of pre-smoothing sweeps
label maxPreSweeps_;
//- Number of post-smoothing sweeps //- Number of post-smoothing sweeps
label nPostSweeps_; label nPostSweeps_;
//- Lever multiplier for the number of post-smoothing sweeps
label postSweepsLevelMultiplier_;
//- Maximum number of post-smoothing sweeps
label maxPostSweeps_;
//- Number of smoothing sweeps on finest mesh //- Number of smoothing sweeps on finest mesh
label nFinestSweeps_; label nFinestSweeps_;

View File

@ -156,7 +156,11 @@ void Foam::GAMGSolver::Vcycle
coarseCorrFields[leveli], coarseCorrFields[leveli],
coarseSources[leveli], coarseSources[leveli],
cmpt, cmpt,
nPreSweeps_ + leveli min
(
nPreSweeps_ + preSweepsLevelMultiplier_*leveli,
maxPreSweeps_
)
); );
scalarField::subField ACf scalarField::subField ACf
@ -297,7 +301,11 @@ void Foam::GAMGSolver::Vcycle
coarseCorrFields[leveli], coarseCorrFields[leveli],
coarseSources[leveli], coarseSources[leveli],
cmpt, cmpt,
nPostSweeps_ + leveli min
(
nPostSweeps_ + postSweepsLevelMultiplier_*leveli,
maxPostSweeps_
)
); );
} }

View File

@ -38,6 +38,7 @@ SourceFiles
#include "autoPtr.H" #include "autoPtr.H"
#include "lduInterfacePtrsList.H" #include "lduInterfacePtrsList.H"
#include "GAMGAgglomeration.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -99,14 +100,16 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
), ),
( (
index, index,
coarseInterfaces, coarseInterfaces,
fineInterface, fineInterface,
localRestrictAddressing, localRestrictAddressing,
neighbourRestrictAddressing neighbourRestrictAddressing,
fineLevelIndex
) )
); );
@ -121,7 +124,8 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
); );
@ -135,7 +139,8 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface&, const lduInterface&,
const labelField&, const labelField&,
const labelField& const labelField&,
const label fineLevelIndex = -1
) )
: :
index_(index), index_(index),

View File

@ -24,6 +24,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "GAMGInterface.H" #include "GAMGInterface.H"
#include "GAMGAgglomeration.H"
#include "lduMatrix.H" #include "lduMatrix.H"
@ -35,7 +36,8 @@ Foam::autoPtr<Foam::GAMGInterface> Foam::GAMGInterface::New
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
) )
{ {
const word coupleType(fineInterface.type()); const word coupleType(fineInterface.type());
@ -65,7 +67,8 @@ Foam::autoPtr<Foam::GAMGInterface> Foam::GAMGInterface::New
coarseInterfaces, coarseInterfaces,
fineInterface, fineInterface,
localRestrictAddressing, localRestrictAddressing,
neighbourRestrictAddressing neighbourRestrictAddressing,
fineLevelIndex
) )
); );
} }

View File

@ -50,7 +50,8 @@ Foam::cyclicGAMGInterface::cyclicGAMGInterface
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
) )
: :
GAMGInterface GAMGInterface

View File

@ -84,7 +84,8 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& restrictAddressing, const labelField& restrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
); );

View File

@ -49,7 +49,8 @@ Foam::processorCyclicGAMGInterface::processorCyclicGAMGInterface
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
) )
: :
processorGAMGInterface processorGAMGInterface
@ -58,7 +59,8 @@ Foam::processorCyclicGAMGInterface::processorCyclicGAMGInterface
coarseInterfaces, coarseInterfaces,
fineInterface, fineInterface,
localRestrictAddressing, localRestrictAddressing,
neighbourRestrictAddressing neighbourRestrictAddressing,
fineLevelIndex
) )
{} {}

View File

@ -75,7 +75,8 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& restrictAddressing, const labelField& restrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
); );

View File

@ -50,7 +50,8 @@ Foam::processorGAMGInterface::processorGAMGInterface
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& localRestrictAddressing, const labelField& localRestrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
) )
: :
GAMGInterface GAMGInterface

View File

@ -84,7 +84,8 @@ public:
const lduInterfacePtrsList& coarseInterfaces, const lduInterfacePtrsList& coarseInterfaces,
const lduInterface& fineInterface, const lduInterface& fineInterface,
const labelField& restrictAddressing, const labelField& restrictAddressing,
const labelField& neighbourRestrictAddressing const labelField& neighbourRestrictAddressing,
const label fineLevelIndex
); );

View File

@ -255,7 +255,7 @@ Foam::SVD::SVD(const scalarRectangularMatrix& A, const scalar minCondition)
{ {
scalar c = 0.0; scalar c = 0.0;
s = 1.0; s = 1.0;
for (label i = l-1; i < k+1; i++) for (label i = l; i < k+1; i++)
{ {
scalar f = s*rv1[i]; scalar f = s*rv1[i];
rv1[i] = c*rv1[i]; rv1[i] = c*rv1[i];

View File

@ -136,41 +136,6 @@ void Foam::LUDecompose
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
void Foam::multiply
(
scalarRectangularMatrix& ans, // value changed in return
const scalarRectangularMatrix& A,
const scalarRectangularMatrix& B
)
{
if (A.m() != B.n())
{
FatalErrorIn
(
"multiply("
"scalarRectangularMatrix& answer "
"const scalarRectangularMatrix& A, "
"const scalarRectangularMatrix& B)"
) << "A and B must have identical inner dimensions but A.m = "
<< A.m() << " and B.n = " << B.n()
<< abort(FatalError);
}
ans = scalarRectangularMatrix(A.n(), B.m(), scalar(0));
for (register label i = 0; i < A.n(); i++)
{
for (register label j = 0; j < B.m(); j++)
{
for (register label l = 0; l < B.n(); l++)
{
ans[i][j] += A[i][l]*B[l][j];
}
}
}
}
void Foam::multiply void Foam::multiply
( (
scalarRectangularMatrix& ans, // value changed in return scalarRectangularMatrix& ans, // value changed in return

View File

@ -88,11 +88,12 @@ void LUBacksubstitute
template<class Type> template<class Type>
void LUsolve(scalarSquareMatrix& matrix, Field<Type>& source); void LUsolve(scalarSquareMatrix& matrix, Field<Type>& source);
template<class Form, class Type>
void multiply void multiply
( (
scalarRectangularMatrix& answer, // value changed in return Matrix<Form, Type>& answer, // value changed in return
const scalarRectangularMatrix& A, const Matrix<Form, Type>& A,
const scalarRectangularMatrix& B const Matrix<Form, Type>& B
); );
void multiply void multiply

View File

@ -176,4 +176,40 @@ void Foam::LUsolve
} }
template<class Form, class Type>
void Foam::multiply
(
Matrix<Form, Type>& ans, // value changed in return
const Matrix<Form, Type>& A,
const Matrix<Form, Type>& B
)
{
if (A.m() != B.n())
{
FatalErrorIn
(
"multiply("
"Matrix<Form, Type>& answer "
"const Matrix<Form, Type>& A, "
"const Matrix<Form, Type>& B)"
) << "A and B must have identical inner dimensions but A.m = "
<< A.m() << " and B.n = " << B.n()
<< abort(FatalError);
}
ans = Matrix<Form, Type>(A.n(), B.m(), scalar(0));
for (register label i = 0; i < A.n(); i++)
{
for (register label j = 0; j < B.m(); j++)
{
for (register label l = 0; l < B.n(); l++)
{
ans[i][j] += A[i][l]*B[l][j];
}
}
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -47,12 +47,6 @@ License
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(polyMesh, 0); defineTypeNameAndDebug(polyMesh, 0);
registerDebugSwitchWithName
(
polyMesh,
polyMesh,
polyMesh::typeName_()
);
word polyMesh::defaultRegion = "region0"; word polyMesh::defaultRegion = "region0";
word polyMesh::meshSubDir = "polyMesh"; word polyMesh::meshSubDir = "polyMesh";
@ -1129,7 +1123,7 @@ Foam::tmp<Foam::scalarField> Foam::polyMesh::movePoints
if (debug) if (debug)
{ {
// Check mesh motion // Check mesh motion
if (primitiveMesh::checkMeshMotion(points_, true)) if (checkMeshMotion(points_, true))
{ {
Info<< "tmp<scalarField> polyMesh::movePoints" Info<< "tmp<scalarField> polyMesh::movePoints"
<< "(const pointField&) : " << "(const pointField&) : "

View File

@ -34,6 +34,7 @@ SourceFiles
polyMeshFromShapeMesh.C polyMeshFromShapeMesh.C
polyMeshIO.C polyMeshIO.C
polyMeshUpdate.C polyMeshUpdate.C
polyMeshCheck.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -224,7 +225,45 @@ private:
cellList& cells cellList& cells
); );
// Geometry checks
//- Check non-orthogonality
bool checkFaceOrthogonality
(
const vectorField& fAreas,
const vectorField& cellCtrs,
const bool report,
const bool detailedReport,
labelHashSet* setPtr
) const;
//- Check face skewness
bool checkFaceSkewness
(
const pointField& points,
const vectorField& fCtrs,
const vectorField& fAreas,
const vectorField& cellCtrs,
const bool report,
const bool detailedReport,
labelHashSet* setPtr
) const;
bool checkEdgeAlignment
(
const pointField& p,
const bool report,
const Vector<label>& directions,
labelHashSet* setPtr
) const;
bool checkCellDeterminant
(
const vectorField& faceAreas,
const bool report,
labelHashSet* setPtr,
const Vector<label>& meshD
) const;
public: public:
@ -535,6 +574,48 @@ public:
void removeFiles() const; void removeFiles() const;
// Geometric checks. Selectively override primitiveMesh functionality.
//- Check boundary for closedness
virtual bool checkClosedBoundary(const bool report = false) const;
//- Check non-orthogonality
virtual bool checkFaceOrthogonality
(
const bool report = false,
labelHashSet* setPtr = NULL
) const;
//- Check face skewness
virtual bool checkFaceSkewness
(
const bool report = false,
labelHashSet* setPtr = NULL
) const;
//- Check edge alignment for 1D/2D cases
virtual bool checkEdgeAlignment
(
const bool report,
const Vector<label>& directions,
labelHashSet* setPtr
) const;
virtual bool checkCellDeterminant
(
const bool report,
labelHashSet* setPtr
) const;
//- Check mesh motion for correctness given motion points
virtual bool checkMeshMotion
(
const pointField& newPoints,
const bool report = false,
const bool detailedReport = false
) const;
// Helper functions // Helper functions
//- Find the cell, tetFaceI and tetPtI for the given position //- Find the cell, tetFaceI and tetPtI for the given position

View File

@ -0,0 +1,679 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "polyMesh.H"
#include "polyMeshTools.H"
#include "unitConversion.H"
#include "syncTools.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::polyMesh::checkFaceOrthogonality
(
const vectorField& fAreas,
const vectorField& cellCtrs,
const bool report,
const bool detailedReport,
labelHashSet* setPtr
) const
{
if (debug)
{
Info<< "bool polyMesh::checkFaceOrthogonality("
<< "const bool, labelHashSet*) const: "
<< "checking mesh non-orthogonality" << endl;
}
const labelList& own = faceOwner();
const labelList& nei = faceNeighbour();
// Calculate orthogonality for all internal and coupled boundary faces
// (1 for uncoupled boundary faces)
tmp<scalarField> tortho = polyMeshTools::faceOrthogonality
(
*this,
fAreas,
cellCtrs
);
const scalarField& ortho = tortho();
// Severe nonorthogonality threshold
const scalar severeNonorthogonalityThreshold =
::cos(degToRad(primitiveMesh::nonOrthThreshold_));
scalar minDDotS = GREAT;
scalar sumDDotS = 0.0;
label nSummed = 0;
label severeNonOrth = 0;
label errorNonOrth = 0;
// Statistics only for internal and masters of coupled faces
PackedBoolList isMasterFace(syncTools::getInternalOrMasterFaces(*this));
forAll(ortho, faceI)
{
if (ortho[faceI] < severeNonorthogonalityThreshold)
{
if (ortho[faceI] > SMALL)
{
if (setPtr)
{
setPtr->insert(faceI);
}
severeNonOrth++;
}
else
{
// Error : non-ortho too large
if (setPtr)
{
setPtr->insert(faceI);
}
if (detailedReport && errorNonOrth == 0)
{
// Non-orthogonality greater than 90 deg
WarningIn
(
"polyMesh::checkFaceOrthogonality"
"(const pointField&, const bool) const"
) << "Severe non-orthogonality for face "
<< faceI
<< " between cells " << own[faceI]
<< " and " << nei[faceI]
<< ": Angle = " << radToDeg(::acos(ortho[faceI]))
<< " deg." << endl;
}
errorNonOrth++;
}
}
if (isMasterFace[faceI])
{
minDDotS = min(minDDotS, ortho[faceI]);
sumDDotS += ortho[faceI];
nSummed++;
}
}
reduce(minDDotS, minOp<scalar>());
reduce(sumDDotS, sumOp<scalar>());
reduce(nSummed, sumOp<label>());
reduce(severeNonOrth, sumOp<label>());
reduce(errorNonOrth, sumOp<label>());
if (debug || report)
{
if (nSummed > 0)
{
if (debug || report)
{
Info<< " Mesh non-orthogonality Max: "
<< radToDeg(::acos(minDDotS))
<< " average: " << radToDeg(::acos(sumDDotS/nSummed))
<< endl;
}
}
if (severeNonOrth > 0)
{
Info<< " *Number of severely non-orthogonal faces: "
<< severeNonOrth << "." << endl;
}
}
if (errorNonOrth > 0)
{
if (debug || report)
{
Info<< " ***Number of non-orthogonality errors: "
<< errorNonOrth << "." << endl;
}
return true;
}
else
{
if (debug || report)
{
Info<< " Non-orthogonality check OK." << endl;
}
return false;
}
}
bool Foam::polyMesh::checkFaceSkewness
(
const pointField& points,
const vectorField& fCtrs,
const vectorField& fAreas,
const vectorField& cellCtrs,
const bool report,
const bool detailedReport,
labelHashSet* setPtr
) const
{
if (debug)
{
Info<< "bool polyMesh::checkFaceSkewnesss("
<< "const bool, labelHashSet*) const: "
<< "checking face skewness" << endl;
}
const labelList& own = faceOwner();
const labelList& nei = faceNeighbour();
// Warn if the skew correction vector is more than skewWarning times
// larger than the face area vector
tmp<scalarField> tskew = polyMeshTools::faceSkewness
(
*this,
points,
fCtrs,
fAreas,
cellCtrs
);
const scalarField& skew = tskew();
scalar maxSkew = max(skew);
label nWarnSkew = 0;
// Statistics only for all faces except slave coupled faces
PackedBoolList isMasterFace(syncTools::getMasterFaces(*this));
forAll(skew, faceI)
{
// Check if the skewness vector is greater than the PN vector.
// This does not cause trouble but is a good indication of a poor mesh.
if (skew[faceI] > skewThreshold_)
{
if (setPtr)
{
setPtr->insert(faceI);
}
if (detailedReport && nWarnSkew == 0)
{
// Non-orthogonality greater than 90 deg
if (isInternalFace(faceI))
{
WarningIn
(
"polyMesh::checkFaceSkewnesss"
"(const pointField&, const bool) const"
) << "Severe skewness " << skew[faceI]
<< " for face " << faceI
<< " between cells " << own[faceI]
<< " and " << nei[faceI];
}
else
{
WarningIn
(
"polyMesh::checkFaceSkewnesss"
"(const pointField&, const bool) const"
) << "Severe skewness " << skew[faceI]
<< " for boundary face " << faceI
<< " on cell " << own[faceI];
}
}
if (isMasterFace[faceI])
{
nWarnSkew++;
}
}
}
reduce(maxSkew, maxOp<scalar>());
reduce(nWarnSkew, sumOp<label>());
if (nWarnSkew > 0)
{
if (debug || report)
{
Info<< " ***Max skewness = " << maxSkew
<< ", " << nWarnSkew << " highly skew faces detected"
" which may impair the quality of the results"
<< endl;
}
return true;
}
else
{
if (debug || report)
{
Info<< " Max skewness = " << maxSkew << " OK." << endl;
}
return false;
}
}
// Check 1D/2Dness of edges. Gets passed the non-empty directions and
// checks all edges in the mesh whether they:
// - have no component in a non-empty direction or
// - are only in a singe non-empty direction.
// Empty direction info is passed in as a vector of labels (synchronised)
// which are 1 if the direction is non-empty, 0 if it is.
bool Foam::polyMesh::checkEdgeAlignment
(
const pointField& p,
const bool report,
const Vector<label>& directions,
labelHashSet* setPtr
) const
{
if (debug)
{
Info<< "bool polyMesh::checkEdgeAlignment("
<< "const bool, const Vector<label>&, labelHashSet*) const: "
<< "checking edge alignment" << endl;
}
label nDirs = 0;
for (direction cmpt=0; cmpt<vector::nComponents; cmpt++)
{
if (directions[cmpt] == 1)
{
nDirs++;
}
else if (directions[cmpt] != 0)
{
FatalErrorIn
(
"polyMesh::checkEdgeAlignment"
"(const bool, const Vector<label>&, labelHashSet*)"
) << "directions should contain 0 or 1 but is now " << directions
<< exit(FatalError);
}
}
if (nDirs == vector::nComponents)
{
return false;
}
const faceList& fcs = faces();
EdgeMap<label> edgesInError;
forAll(fcs, faceI)
{
const face& f = fcs[faceI];
forAll(f, fp)
{
label p0 = f[fp];
label p1 = f.nextLabel(fp);
if (p0 < p1)
{
vector d(p[p1]-p[p0]);
scalar magD = mag(d);
if (magD > ROOTVSMALL)
{
d /= magD;
// Check how many empty directions are used by the edge.
label nEmptyDirs = 0;
label nNonEmptyDirs = 0;
for (direction cmpt=0; cmpt<vector::nComponents; cmpt++)
{
if (mag(d[cmpt]) > 1e-6)
{
if (directions[cmpt] == 0)
{
nEmptyDirs++;
}
else
{
nNonEmptyDirs++;
}
}
}
if (nEmptyDirs == 0)
{
// Purely in ok directions.
}
else if (nEmptyDirs == 1)
{
// Ok if purely in empty directions.
if (nNonEmptyDirs > 0)
{
edgesInError.insert(edge(p0, p1), faceI);
}
}
else if (nEmptyDirs > 1)
{
// Always an error
edgesInError.insert(edge(p0, p1), faceI);
}
}
}
}
}
label nErrorEdges = returnReduce(edgesInError.size(), sumOp<label>());
if (nErrorEdges > 0)
{
if (debug || report)
{
Info<< " ***Number of edges not aligned with or perpendicular to "
<< "non-empty directions: " << nErrorEdges << endl;
}
if (setPtr)
{
setPtr->resize(2*edgesInError.size());
forAllConstIter(EdgeMap<label>, edgesInError, iter)
{
setPtr->insert(iter.key()[0]);
setPtr->insert(iter.key()[1]);
}
}
return true;
}
else
{
if (debug || report)
{
Info<< " All edges aligned with or perpendicular to "
<< "non-empty directions." << endl;
}
return false;
}
}
bool Foam::polyMesh::checkCellDeterminant
(
const vectorField& faceAreas,
const bool report,
labelHashSet* setPtr,
const Vector<label>& meshD
) const
{
if (debug)
{
Info<< "bool polyMesh::checkCellDeterminant(const bool"
<< ", labelHashSet*) const: "
<< "checking for under-determined cells" << endl;
}
// Determine number of dimensions and (for 2D) missing dimension
label nDims = 0;
label twoD = -1;
for (direction dir = 0; dir < vector::nComponents; dir++)
{
if (meshD[dir] == 1)
{
nDims++;
}
else
{
twoD = dir;
}
}
tmp<scalarField> tcellDeterminant = primitiveMeshTools::cellDeterminant
(
*this,
meshD,
faceAreas,
syncTools::getInternalOrCoupledFaces(*this)
);
scalarField& cellDeterminant = tcellDeterminant();
label nErrorCells = 0;
scalar minDet = min(cellDeterminant);
scalar sumDet = sum(cellDeterminant);
forAll (cellDeterminant, cellI)
{
if (cellDeterminant[cellI] < 1e-3)
{
if (setPtr)
{
setPtr->insert(cellI);
}
nErrorCells++;
}
}
reduce(nErrorCells, sumOp<label>());
reduce(minDet, minOp<scalar>());
reduce(sumDet, sumOp<scalar>());
label nSummed = returnReduce(cellDeterminant.size(), sumOp<label>());
if (debug || report)
{
if (nSummed > 0)
{
Info<< " Cell determinant (wellposedness) : minimum: " << minDet
<< " average: " << sumDet/nSummed
<< endl;
}
}
if (nErrorCells > 0)
{
if (debug || report)
{
Info<< " ***Cells with small determinant found, number of cells: "
<< nErrorCells << endl;
}
return true;
}
else
{
if (debug || report)
{
Info<< " Cell determinant check OK." << endl;
}
return false;
}
return false;
}
bool Foam::polyMesh::checkClosedBoundary(const bool report) const
{
return primitiveMesh::checkClosedBoundary
(
faceAreas(),
report,
syncTools::getInternalOrCoupledFaces(*this)
);
}
bool Foam::polyMesh::checkFaceOrthogonality
(
const bool report,
labelHashSet* setPtr
) const
{
return checkFaceOrthogonality
(
faceAreas(),
cellCentres(),
report,
false, // detailedReport
setPtr
);
}
bool Foam::polyMesh::checkFaceSkewness
(
const bool report,
labelHashSet* setPtr
) const
{
return checkFaceSkewness
(
points(),
faceCentres(),
faceAreas(),
cellCentres(),
report,
false, // detailedReport
setPtr
);
}
bool Foam::polyMesh::checkEdgeAlignment
(
const bool report,
const Vector<label>& directions,
labelHashSet* setPtr
) const
{
return checkEdgeAlignment
(
points(),
report,
directions,
setPtr
);
}
bool Foam::polyMesh::checkCellDeterminant
(
const bool report,
labelHashSet* setPtr
) const
{
return checkCellDeterminant
(
faceAreas(),
report,
setPtr,
geometricD()
);
}
bool Foam::polyMesh::checkMeshMotion
(
const pointField& newPoints,
const bool report,
const bool detailedReport
) const
{
if (debug || report)
{
Pout<< "bool polyMesh::checkMeshMotion("
<< "const pointField&, const bool, const bool) const: "
<< "checking mesh motion" << endl;
}
vectorField fCtrs(nFaces());
vectorField fAreas(nFaces());
makeFaceCentresAndAreas(newPoints, fCtrs, fAreas);
// Check cell volumes and calculate new cell centres
vectorField cellCtrs(nCells());
scalarField cellVols(nCells());
makeCellCentresAndVols(fCtrs, fAreas, cellCtrs, cellVols);
// Check cell volumes
bool error = checkCellVolumes
(
cellVols, // vols
report, // report
detailedReport, // detailedReport
NULL // setPtr
);
// Check face areas
bool areaError = checkFaceAreas
(
faceAreas(),
report, // report
detailedReport, // detailedReport,
NULL // setPtr
);
error = error || areaError;
// Check pyramid volumes
bool pyrVolError = checkFacePyramids
(
newPoints,
cellCtrs,
report, // report,
detailedReport, // detailedReport,
-SMALL, // minPyrVol
NULL // setPtr
);
error = error || pyrVolError;
// Check face non-orthogonality
bool nonOrthoError = checkFaceOrthogonality
(
fAreas,
cellCtrs,
report, // report
detailedReport, // detailedReport
NULL // setPtr
);
error = error || nonOrthoError;
if (!error && (debug || report))
{
Pout<< "Mesh motion check OK." << endl;
}
return error;
}
// ************************************************************************* //

Some files were not shown because too many files have changed in this diff Show More