Add options for modifying the global controlDict values/switches from the command-line

The following command-line options are available:
 -DebugSwitches        key=value
 -DimensionedConstants key=value
 -InfoSwitches         key=value
 -OptimisationSwitches key=value
 -Tolerances           key=value

In order to modify more than one key/value pair for a given category, you will
need to specify a given option more than once.

If an invalid/unknown key is specified, a complete list of valid keys for the
application will be written at the console.

Martin Beaudoin 05/2014
This commit is contained in:
Martin Beaudoin 2014-05-28 01:11:17 -04:00
parent 7832d77bf2
commit 6f1102cb5d
129 changed files with 1779 additions and 412 deletions

View file

@ -943,7 +943,7 @@ Tolerances
slidingEdgeEndCutoffTol 0.0001; slidingEdgeEndCutoffTol 0.0001;
slidingEdgeCoPlanarTol 0.8; slidingEdgeCoPlanarTol 0.8;
// GGIAreaErrorTol 1e-8; GGIAreaErrorTol 1e-8;
} }
DimensionedConstants DimensionedConstants

View file

@ -320,7 +320,7 @@ bool Pstream::init(int& argc, char**& argv)
Info<< "GAMMA Pstream initialized with:" << nl Info<< "GAMMA Pstream initialized with:" << nl
<< " floatTransfer : " << floatTransfer << nl << " floatTransfer : " << floatTransfer << nl
<< " nProcsSimpleSum : " << nProcsSimpleSum << nl << " nProcsSimpleSum : " << nProcsSimpleSum() << nl
<< " scheduledTransfer : " << Pstream::scheduledTransfer << nl << " scheduledTransfer : " << Pstream::scheduledTransfer << nl
<< Foam::endl; << Foam::endl;

View file

@ -154,7 +154,7 @@ void Foam::reduce(scalar& Value, const sumOp<scalar>& bop)
return; return;
} }
if (Pstream::nProcs() <= Pstream::nProcsSimpleSum) if (Pstream::nProcs() <= Pstream::nProcsSimpleSum())
{ {
if (Pstream::master()) if (Pstream::master())
{ {

View file

@ -38,7 +38,7 @@ defineNamedTemplateTypeNameAndDebug(fvPatchTypeField, 0); \
template<> \ template<> \
int fvPatchTypeField::disallowGenericFvPatchField \ int fvPatchTypeField::disallowGenericFvPatchField \
( \ ( \
debug::debugSwitch("disallowGenericFvPatchField", 0) \ debug::debugSwitchFromDict("disallowGenericFvPatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(fvPatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(fvPatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(fvPatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(fvPatchTypeField, patchMapper); \

View file

@ -38,7 +38,7 @@ defineNamedTemplateTypeNameAndDebug(fvsPatchTypeField, 0); \
template<> \ template<> \
int fvsPatchTypeField::disallowDefaultFvsPatchField \ int fvsPatchTypeField::disallowDefaultFvsPatchField \
( \ ( \
debug::debugSwitch("disallowDefaultFvsPatchField", 0) \ debug::debugSwitchFromDict("disallowDefaultFvsPatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patchMapper); \

View file

@ -393,7 +393,7 @@ void Foam::autoRefineDriver::removeInsideCells
{ {
Pout<< "Writing subsetted mesh to time " Pout<< "Writing subsetted mesh to time "
<< meshRefiner_.timeName() << '.' << endl; << meshRefiner_.timeName() << '.' << endl;
meshRefiner_.write(debug, mesh.time().path()/meshRefiner_.timeName()); meshRefiner_.write(debug(), mesh.time().path()/meshRefiner_.timeName());
Pout<< "Dumped mesh in = " Pout<< "Dumped mesh in = "
<< mesh.time().cpuTimeIncrement() << " s\n" << nl << endl; << mesh.time().cpuTimeIncrement() << " s\n" << nl << endl;
} }
@ -645,7 +645,7 @@ void Foam::autoRefineDriver::zonify
<< meshRefiner_.timeName() << '.' << endl; << meshRefiner_.timeName() << '.' << endl;
meshRefiner_.write meshRefiner_.write
( (
debug, debug(),
mesh.time().path()/meshRefiner_.timeName() mesh.time().path()/meshRefiner_.timeName()
); );
} }
@ -735,7 +735,7 @@ void Foam::autoRefineDriver::splitAndMergeBaffles
{ {
Pout<< "Writing handleProblemCells mesh to time " Pout<< "Writing handleProblemCells mesh to time "
<< meshRefiner_.timeName() << '.' << endl; << meshRefiner_.timeName() << '.' << endl;
meshRefiner_.write(debug, mesh.time().path()/meshRefiner_.timeName()); meshRefiner_.write(debug(), mesh.time().path()/meshRefiner_.timeName());
} }
} }

View file

@ -229,7 +229,7 @@ void Foam::meshRefinement::getBafflePatches
{ {
autoPtr<OFstream> str; autoPtr<OFstream> str;
label vertI = 0; label vertI = 0;
if (debug&OBJINTERSECTIONS) if (debug & OBJINTERSECTIONS)
{ {
str.reset str.reset
( (
@ -1499,13 +1499,13 @@ void Foam::meshRefinement::baffleAndSplitMesh
Info<< "Created baffles in = " Info<< "Created baffles in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
printMeshInfo(debug, "After introducing baffles"); printMeshInfo(debug(), "After introducing baffles");
if (debug) if (debug)
{ {
Pout<< "Writing baffled mesh to time " << timeName() Pout<< "Writing baffled mesh to time " << timeName()
<< endl; << endl;
write(debug, runTime.path()/"baffles"); write(debug(), runTime.path()/"baffles");
Pout<< "Dumped debug data in = " Pout<< "Dumped debug data in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
} }
@ -1581,13 +1581,13 @@ void Foam::meshRefinement::baffleAndSplitMesh
Info<< "Created baffles in = " Info<< "Created baffles in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
printMeshInfo(debug, "After introducing baffles"); printMeshInfo(debug(), "After introducing baffles");
if (debug) if (debug)
{ {
Pout<< "Writing extra baffled mesh to time " Pout<< "Writing extra baffled mesh to time "
<< timeName() << endl; << timeName() << endl;
write(debug, runTime.path()/"extraBaffles"); write(debug(), runTime.path()/"extraBaffles");
Pout<< "Dumped debug data in = " Pout<< "Dumped debug data in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
} }
@ -1617,13 +1617,13 @@ void Foam::meshRefinement::baffleAndSplitMesh
Info<< "Split mesh in = " Info<< "Split mesh in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
printMeshInfo(debug, "After subsetting"); printMeshInfo(debug(), "After subsetting");
if (debug) if (debug)
{ {
Pout<< "Writing subsetted mesh to time " << timeName() Pout<< "Writing subsetted mesh to time " << timeName()
<< endl; << endl;
write(debug, runTime.path()/timeName()); write(debug(), runTime.path()/timeName());
Pout<< "Dumped debug data in = " Pout<< "Dumped debug data in = "
<< runTime.cpuTimeIncrement() << " s\n" << nl << endl; << runTime.cpuTimeIncrement() << " s\n" << nl << endl;
} }

View file

@ -1269,7 +1269,7 @@ Foam::meshRefinement::refineAndBalance
<< " mesh to time " << timeName() << endl; << " mesh to time " << timeName() << endl;
write write
( (
debug, debug(),
mesh_.time().path() mesh_.time().path()
/timeName() /timeName()
); );
@ -1282,7 +1282,7 @@ Foam::meshRefinement::refineAndBalance
Info<< "Refined mesh in = " Info<< "Refined mesh in = "
<< mesh_.time().cpuTimeIncrement() << " s" << endl; << mesh_.time().cpuTimeIncrement() << " s" << endl;
printMeshInfo(debug, "After refinement " + msg); printMeshInfo(debug(), "After refinement " + msg);
// Load balancing // Load balancing
@ -1324,7 +1324,7 @@ Foam::meshRefinement::refineAndBalance
Info<< "Balanced mesh in = " Info<< "Balanced mesh in = "
<< mesh_.time().cpuTimeIncrement() << " s" << endl; << mesh_.time().cpuTimeIncrement() << " s" << endl;
printMeshInfo(debug, "After balancing " + msg); printMeshInfo(debug(), "After balancing " + msg);
if (debug) if (debug)
@ -1333,7 +1333,7 @@ Foam::meshRefinement::refineAndBalance
<< " mesh to time " << timeName() << endl; << " mesh to time " << timeName() << endl;
write write
( (
debug, debug(),
mesh_.time().path()/timeName() mesh_.time().path()/timeName()
); );
Pout<< "Dumped debug data in = " Pout<< "Dumped debug data in = "
@ -1447,7 +1447,7 @@ Foam::meshRefinement::balanceAndRefine
// Info<< endl; // Info<< endl;
//} //}
printMeshInfo(debug, "After balancing " + msg); printMeshInfo(debug(), "After balancing " + msg);
if (debug) if (debug)
{ {
@ -1455,7 +1455,7 @@ Foam::meshRefinement::balanceAndRefine
<< " mesh to time " << timeName() << endl; << " mesh to time " << timeName() << endl;
write write
( (
debug, debug(),
mesh_.time().path()/timeName() mesh_.time().path()/timeName()
); );
Pout<< "Dumped debug data in = " Pout<< "Dumped debug data in = "
@ -1478,7 +1478,7 @@ Foam::meshRefinement::balanceAndRefine
<< " mesh to time " << timeName() << endl; << " mesh to time " << timeName() << endl;
write write
( (
debug, debug(),
mesh_.time().path() mesh_.time().path()
/timeName() /timeName()
); );
@ -1504,7 +1504,7 @@ Foam::meshRefinement::balanceAndRefine
// Info<< endl; // Info<< endl;
//} //}
printMeshInfo(debug, "After refinement " + msg); printMeshInfo(debug(), "After refinement " + msg);
return distMap; return distMap;
} }

View file

@ -56,6 +56,7 @@ Author
#include "processorPolyPatch.H" #include "processorPolyPatch.H"
#include "decompositionMethod.H" #include "decompositionMethod.H"
#include "mapDistributePolyMesh.H" #include "mapDistributePolyMesh.H"
#include "controlSwitches.H"
namespace Foam namespace Foam
{ {
@ -4894,7 +4895,11 @@ bool dynamicTopoFvMesh::checkCoupledBoundaries(bool report) const
bool sizeError = false, misMatchError = false; bool sizeError = false, misMatchError = false;
// Check if a geometric tolerance has been specified. // Check if a geometric tolerance has been specified.
scalar gTol = debug::tolerances("processorMatchTol", 1e-4); const Foam::debug::tolerancesSwitch gTol
(
"processorMatchTol",
1e-4
);
// Maintain a list of master / neighbour anchors // Maintain a list of master / neighbour anchors
List<vectorField> mAnchors(boundary.size()); List<vectorField> mAnchors(boundary.size());
@ -5053,7 +5058,7 @@ bool dynamicTopoFvMesh::checkCoupledBoundaries(bool report) const
scalar rMagSf = mag(half1Areas[faceI]); scalar rMagSf = mag(half1Areas[faceI]);
scalar avSf = 0.5 * (fMagSf + rMagSf); scalar avSf = 0.5 * (fMagSf + rMagSf);
if (mag(fMagSf - rMagSf)/avSf > gTol) if (mag(fMagSf - rMagSf)/avSf > gTol())
{ {
misMatchError = true; misMatchError = true;
@ -5071,7 +5076,7 @@ bool dynamicTopoFvMesh::checkCoupledBoundaries(bool report) const
Foam::max Foam::max
( (
pTol, pTol,
gTol * mag(lP[lF[faceI][0]] - lC[faceI]) gTol() * mag(lP[lF[faceI][0]] - lC[faceI])
) )
); );
} }
@ -5217,7 +5222,7 @@ bool dynamicTopoFvMesh::checkCoupledBoundaries(bool report) const
scalar nbrMagSf = mag(fAreas[pI][faceI]); scalar nbrMagSf = mag(fAreas[pI][faceI]);
scalar avSf = 0.5 * (magSf + nbrMagSf); scalar avSf = 0.5 * (magSf + nbrMagSf);
if (mag(magSf - nbrMagSf)/avSf > gTol) if (mag(magSf - nbrMagSf)/avSf > gTol())
{ {
misMatchError = true; misMatchError = true;
@ -5236,7 +5241,7 @@ bool dynamicTopoFvMesh::checkCoupledBoundaries(bool report) const
Foam::max Foam::max
( (
pTol, pTol,
gTol * gTol() *
mag mag
( (
myPoints[myFaces[faceI][0]] myPoints[myFaces[faceI][0]]
@ -6116,10 +6121,14 @@ void dynamicTopoFvMesh::buildLocalCoupledMaps()
// Check if a geometric tolerance has been specified. // Check if a geometric tolerance has been specified.
const boundBox& box = polyMesh::bounds(); const boundBox& box = polyMesh::bounds();
scalar relTol = debug::tolerances("patchFaceMatchTol", 1e-4); const Foam::debug::tolerancesSwitch relTol
(
"patchFaceMatchTol",
1e-4
);
// Compute tolerance // Compute tolerance
scalar tol = relTol * box.mag(); scalar tol = relTol() * box.mag();
const polyBoundaryMesh& boundary = boundaryMesh(); const polyBoundaryMesh& boundary = boundaryMesh();
@ -6181,7 +6190,7 @@ void dynamicTopoFvMesh::buildLocalCoupledMaps()
FatalErrorIn("void dynamicTopoFvMesh::buildLocalCoupledMaps()") FatalErrorIn("void dynamicTopoFvMesh::buildLocalCoupledMaps()")
<< " Failed to match all points" << " Failed to match all points"
<< " within a tolerance of: " << tol << nl << " within a tolerance of: " << tol << nl
<< " relTol: " << relTol << nl << " relTol: " << relTol() << nl
<< abort(FatalError); << abort(FatalError);
} }
@ -6843,10 +6852,14 @@ void dynamicTopoFvMesh::buildProcessorCoupledMaps()
const Map<label>& pMap = cMap.entityMap(coupleMap::POINT); const Map<label>& pMap = cMap.entityMap(coupleMap::POINT);
// Fetch relative tolerance // Fetch relative tolerance
scalar relTol = debug::tolerances("processorMatchTol", 1e-4); const Foam::debug::tolerancesSwitch relTol
(
"processorMatchTol",
1e-4
);
// Compute tolerance // Compute tolerance
scalar tol = relTol * box.mag(); scalar tol = relTol() * box.mag();
forAllConstIter(Map<label>, pMap, pIter) forAllConstIter(Map<label>, pMap, pIter)
{ {
@ -8028,7 +8041,11 @@ bool dynamicTopoFvMesh::syncCoupledBoundaryOrdering
bool anyChange = false, failedPatchMatch = false; bool anyChange = false, failedPatchMatch = false;
// Fetch tolerance // Fetch tolerance
scalar matchTol = Foam::debug::tolerances("patchFaceMatchTol", 1e-4); const Foam::debug::tolerancesSwitch matchTol
(
"patchFaceMatchTol",
1e-4
);
// Calculate centres and tolerances for any slave patches // Calculate centres and tolerances for any slave patches
List<scalarField> slaveTols(nPatches_); List<scalarField> slaveTols(nPatches_);
@ -8090,7 +8107,7 @@ bool dynamicTopoFvMesh::syncCoupledBoundaryOrdering
maxLen = max(maxLen, mag(points_[sFace[fpI]] - sfc)); maxLen = max(maxLen, mag(points_[sFace[fpI]] - sfc));
} }
slaveTols[slavePatch][fI] = matchTol*maxLen; slaveTols[slavePatch][fI] = matchTol()*maxLen;
} }
// For cyclics, additionally test for halves, // For cyclics, additionally test for halves,
@ -8442,7 +8459,7 @@ bool dynamicTopoFvMesh::syncCoupledBoundaryOrdering
maxLen = max(maxLen, mag(points_[checkFace[fpI]] - fc)); maxLen = max(maxLen, mag(points_[checkFace[fpI]] - fc));
} }
slaveTols[pI][fI] = matchTol*maxLen; slaveTols[pI][fI] = matchTol()*maxLen;
} }
// Write out my centres to disk // Write out my centres to disk

View file

@ -47,12 +47,13 @@ Author
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const Foam::scalar Foam::slidingInterface::edgeCoPlanarTol_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::edgeCoPlanarTol_
( (
debug::tolerances("slidingEdgeCoPlanarTol", 0.8) "slidingEdgeCoPlanarTol",
0.8
); );
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Index of debug signs: // Index of debug signs:
@ -636,8 +637,8 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const
if if
( (
cutOnMaster > edgeEndCutoffTol_ cutOnMaster > edgeEndCutoffTol_()
&& cutOnMaster < 1.0 - edgeEndCutoffTol_ && cutOnMaster < 1.0 - edgeEndCutoffTol_()
) )
{ {
// Master is cut, check the slave // Master is cut, check the slave
@ -663,7 +664,7 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const
// Calculate merge tolerance from the // Calculate merge tolerance from the
// target edge length // target edge length
scalar mergeTol = scalar mergeTol =
edgeCoPlanarTol_*mag(b - a); edgeCoPlanarTol_()*mag(b - a);
// Pout<< "cutOnMaster: " << cutOnMaster // Pout<< "cutOnMaster: " << cutOnMaster
// << " masterCutPoint: " << masterCutPoint // << " masterCutPoint: " << masterCutPoint
// << " slaveCutPoint: " << slaveCut.hitPoint() // << " slaveCutPoint: " << slaveCut.hitPoint()
@ -676,8 +677,8 @@ void Foam::slidingInterface::coupleInterface(polyTopoChange& ref) const
// << endl; // << endl;
if if
( (
cutOnSlave > edgeEndCutoffTol_ cutOnSlave > edgeEndCutoffTol_()
&& cutOnSlave < 1.0 - edgeEndCutoffTol_ && cutOnSlave < 1.0 - edgeEndCutoffTol_()
&& slaveCut.distance() < mergeTol && slaveCut.distance() < mergeTol
) )
{ {

View file

@ -631,8 +631,8 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const
if if
( (
cutOnMaster > edgeEndCutoffTol_ cutOnMaster > edgeEndCutoffTol_()
&& cutOnMaster < 1.0 - edgeEndCutoffTol_ && cutOnMaster < 1.0 - edgeEndCutoffTol_()
) )
{ {
// Master is cut, check the slave // Master is cut, check the slave
@ -658,12 +658,12 @@ void Foam::slidingInterface::modifyMotionPoints(pointField& motionPoints) const
// Calculate merge tolerance from the // Calculate merge tolerance from the
// target edge length // target edge length
scalar mergeTol = scalar mergeTol =
edgeCoPlanarTol_*mag(b - a); edgeCoPlanarTol_()*mag(b - a);
if if
( (
cutOnSlave > edgeEndCutoffTol_ cutOnSlave > edgeEndCutoffTol_()
&& cutOnSlave < 1.0 - edgeEndCutoffTol_ && cutOnSlave < 1.0 - edgeEndCutoffTol_()
&& slaveCut.distance() < mergeTol && slaveCut.distance() < mergeTol
) )
{ {

View file

@ -63,6 +63,7 @@ SourceFiles
#include "ZoneIDs.H" #include "ZoneIDs.H"
#include "intersection.H" #include "intersection.H"
#include "Pair.H" #include "Pair.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -261,28 +262,28 @@ private:
// Static data members // Static data members
//- Point merge tolerance //- Point merge tolerance
static const scalar pointMergeTol_; static const Foam::debug::tolerancesSwitch pointMergeTol_;
//- Edge merge tolerance //- Edge merge tolerance
static const scalar edgeMergeTol_; static const Foam::debug::tolerancesSwitch edgeMergeTol_;
//- Estimated number of faces an edge goes through //- Estimated number of faces an edge goes through
static const label nFacesPerSlaveEdge_; static const Foam::label nFacesPerSlaveEdge_;
//- Edge-face interaction escape limit //- Edge-face interaction escape limit
static const label edgeFaceEscapeLimit_; static const Foam::label edgeFaceEscapeLimit_;
//- Integral match point adjustment tolerance //- Integral match point adjustment tolerance
static const scalar integralAdjTol_; static const Foam::debug::tolerancesSwitch integralAdjTol_;
//- Edge intersection master catch fraction //- Edge intersection master catch fraction
static const scalar edgeMasterCatchFraction_; static const Foam::debug::tolerancesSwitch edgeMasterCatchFraction_;
//- Edge intersection co-planar tolerance //- Edge intersection co-planar tolerance
static const scalar edgeCoPlanarTol_; static const Foam::debug::tolerancesSwitch edgeCoPlanarTol_;
//- Edge end cut-off tolerance //- Edge end cut-off tolerance
static const scalar edgeEndCutoffTol_; static const Foam::debug::tolerancesSwitch edgeEndCutoffTol_;
public: public:

View file

@ -44,31 +44,42 @@ Author
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const Foam::scalar Foam::slidingInterface::pointMergeTol_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::pointMergeTol_
( (
debug::tolerances("slidingPointMergeTol", 0.2) "slidingPointMergeTol",
0.2
); );
const Foam::scalar Foam::slidingInterface::edgeMergeTol_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::edgeMergeTol_
( (
debug::tolerances("slidingEdgeMergeTol", 0.05) "slidingEdgeMergeTol",
0.05
); );
const Foam::scalar Foam::slidingInterface::integralAdjTol_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::integralAdjTol_
( (
debug::tolerances("slidingIntegralAdjTol", 0.15) "slidingIntegralAdjTol",
0.15
); );
const Foam::scalar Foam::slidingInterface::edgeMasterCatchFraction_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::edgeMasterCatchFraction_
( (
debug::tolerances("slidingEdgeMasterCatchFraction", 0.4) "slidingEdgeMasterCatchFraction",
0.4
); );
const Foam::scalar Foam::slidingInterface::edgeEndCutoffTol_ const Foam::debug::tolerancesSwitch
Foam::slidingInterface::edgeEndCutoffTol_
( (
debug::tolerances("slidingEdgeEndCutoffTol", 0.0001) "slidingEdgeEndCutoffTol",
0.0001
); );
const Foam::label Foam::slidingInterface::nFacesPerSlaveEdge_ = 5; const Foam::label Foam::slidingInterface::nFacesPerSlaveEdge_ = 5;
// Increased limit for extreme 20-1 cutting. HJ, 19/Dec/2008 // Increased limit for extreme 20-1 cutting. HJ, 19/Dec/2008
@ -105,7 +116,13 @@ bool Foam::slidingInterface::projectPoints() const
<< name() << " : " << name() << " : "
<< "Projecting slave points onto master surface using "; << "Projecting slave points onto master surface using ";
if (debug::optimisationSwitch("nSquaredProjection", 0) > 0) const Foam::debug::optimisationSwitch nSquaredProjection
(
"nSquaredProjection",
0
);
if (nSquaredProjection() > 0)
{ {
Pout<< "N-squared point projection" << endl; Pout<< "N-squared point projection" << endl;
} }
@ -358,7 +375,7 @@ bool Foam::slidingInterface::projectPoints() const
// Calculate the tolerance // Calculate the tolerance
const scalar mergeTol = const scalar mergeTol =
integralAdjTol_*minSlavePointLength[pointI]; integralAdjTol_()*minSlavePointLength[pointI];
// Adjust the hit // Adjust the hit
if (mag(nearPoint - missPoint) < mergeTol) if (mag(nearPoint - missPoint) < mergeTol)
@ -576,7 +593,7 @@ bool Foam::slidingInterface::projectPoints() const
// Calculate the tolerance // Calculate the tolerance
const scalar mergeTol = const scalar mergeTol =
pointMergeTol_* pointMergeTol_()*
min min
( (
minSlavePointLength[pointI], minSlavePointLength[pointI],
@ -678,7 +695,7 @@ bool Foam::slidingInterface::projectPoints() const
minMasterFaceLength[slavePointFaceHits[pointI].hitObject()] minMasterFaceLength[slavePointFaceHits[pointI].hitObject()]
); );
const scalar mergeTol = pointMergeTol_*mergeLength; const scalar mergeTol = pointMergeTol_()*mergeLength;
scalar minDistance = GREAT; scalar minDistance = GREAT;
@ -739,7 +756,7 @@ bool Foam::slidingInterface::projectPoints() const
// Calculate the tolerance // Calculate the tolerance
const scalar mergeTol = const scalar mergeTol =
pointMergeTol_* pointMergeTol_()*
min min
( (
minSlavePointLength[pointI], minSlavePointLength[pointI],
@ -1051,7 +1068,7 @@ bool Foam::slidingInterface::projectPoints() const
// Calculated as a combination of travel distance in projection and // Calculated as a combination of travel distance in projection and
// edge length // edge length
scalar slaveCatchDist = scalar slaveCatchDist =
edgeMasterCatchFraction_*edgeMag edgeMasterCatchFraction_()*edgeMag
+ 0.5* + 0.5*
( (
mag mag
@ -1144,9 +1161,9 @@ bool Foam::slidingInterface::projectPoints() const
// Not a point hit, check for edge // Not a point hit, check for edge
if if
( (
cutOnSlave > edgeEndCutoffTol_ cutOnSlave > edgeEndCutoffTol_()
&& cutOnSlave < 1.0 - edgeEndCutoffTol_ // check edge cut && cutOnSlave < 1.0 - edgeEndCutoffTol_() // check edge cut
&& distInEdgePlane < edgeMergeTol_*edgeMag // merge plane && distInEdgePlane < edgeMergeTol_()*edgeMag // merge plane
&& edgeLineHit.distance() && edgeLineHit.distance()
< min < min
( (

View file

@ -36,7 +36,7 @@ const Foam::label Foam::polyTopoChange::cellFraction = 10;
int Foam::polyTopoChange::debug int Foam::polyTopoChange::debug
( (
Foam::debug::debugSwitch("polyTopoChange", 0) Foam::debug::debugSwitchFromDict("polyTopoChange", 0)
); );

View file

@ -32,6 +32,7 @@ License
#include "processorPolyPatch.H" #include "processorPolyPatch.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include "polyMesh.H" #include "polyMesh.H"
#include "controlSwitches.H"
#include "matchPoints.H" #include "matchPoints.H"
#include "DimensionedField.H" #include "DimensionedField.H"
@ -1872,10 +1873,14 @@ void mesquiteMotionSolver::initParallelSurfaceSmoothing()
const boundBox& box = mesh().bounds(); const boundBox& box = mesh().bounds();
// Fetch relative tolerance // Fetch relative tolerance
scalar relTol = debug::tolerances("processorMatchTol", 1e-4); const Foam::debug::tolerancesSwitch relTol
(
"processorMatchTol",
1e-4
);
// Compute tolerance // Compute tolerance
scalar tol = relTol * box.mag(); scalar tol = relTol() * box.mag();
// Wait for all transfers to complete. // Wait for all transfers to complete.
OPstream::waitRequests(); OPstream::waitRequests();

View file

@ -38,6 +38,7 @@ Description
#include "wedgeFaPatch.H" #include "wedgeFaPatch.H"
#include "faPatchData.H" #include "faPatchData.H"
#include "SortableList.H" #include "SortableList.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -48,11 +49,14 @@ namespace Foam
Foam::word Foam::faMesh::meshSubDir = "faMesh"; Foam::word Foam::faMesh::meshSubDir = "faMesh";
const bool Foam::faMesh::quadricsFit_ const Foam::debug::optimisationSwitch
Foam::faMesh::quadricsFit_
( (
debug::optimisationSwitch("quadricsFit", 0) > 0 "quadricsFit",
0
); );
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::faMesh::setPrimitiveMeshData() void Foam::faMesh::setPrimitiveMeshData()
@ -1189,7 +1193,7 @@ const Foam::vectorField& Foam::faMesh::pointAreaNormals() const
{ {
calcPointAreaNormals(); calcPointAreaNormals();
if (quadricsFit_) if (quadricsFit_() > 0)
{ {
calcPointAreaNormalsByQuadricsFit(); calcPointAreaNormalsByQuadricsFit();
} }

View file

@ -174,7 +174,7 @@ class faMesh
// Static Private Data // Static Private Data
static const bool quadricsFit_; static const Foam::debug::optimisationSwitch quadricsFit_;
// Private Member Functions // Private Member Functions

View file

@ -38,9 +38,10 @@ namespace Foam
defineTypeNameAndDebug(cyclicFaPatch, 0); defineTypeNameAndDebug(cyclicFaPatch, 0);
addToRunTimeSelectionTable(faPatch, cyclicFaPatch, dictionary); addToRunTimeSelectionTable(faPatch, cyclicFaPatch, dictionary);
const scalar cyclicFaPatch::matchTol_ const Foam::debug::tolerancesSwitch cyclicFaPatch::matchTol_
( (
debug::tolerances("patchFaceMatchTol", 1e-3) "patchFaceMatchTol",
1e-3
); );
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -86,7 +87,7 @@ void Foam::cyclicFaPatch::calcTransforms()
else if else if
( (
mag(magLe - nbrMagLe)/avLe mag(magLe - nbrMagLe)/avLe
> matchTol_ > matchTol_()
) )
{ {
// Error in area matching. Find largest error // Error in area matching. Find largest error
@ -102,7 +103,7 @@ void Foam::cyclicFaPatch::calcTransforms()
} }
// Check for error in edge matching // Check for error in edge matching
if (maxMatchError > matchTol_) if (maxMatchError > matchTol_())
{ {
label nbrEdgei = errorEdge + size()/2; label nbrEdgei = errorEdge + size()/2;
scalar magLe = mag(half0Normals[errorEdge]); scalar magLe = mag(half0Normals[errorEdge]);
@ -120,7 +121,7 @@ void Foam::cyclicFaPatch::calcTransforms()
<< "patch:" << name() << "patch:" << name()
<< " my area:" << magLe << " my area:" << magLe
<< " neighbour area:" << nbrMagLe << " neighbour area:" << nbrMagLe
<< " matching tolerance:" << matchTol_ << " matching tolerance:" << matchTol_()
<< endl << endl
<< "Mesh edge:" << start() + errorEdge << "Mesh edge:" << start() + errorEdge
<< endl << endl
@ -175,7 +176,7 @@ void cyclicFaPatch::makeWeights(scalarField& w) const
if if
( (
mag(magL[edgei] - magL[edgei + sizeby2])/avL mag(magL[edgei] - magL[edgei + sizeby2])/avL
> matchTol_ > matchTol_()
) )
{ {
// Found error. Look for largest matching error // Found error. Look for largest matching error
@ -197,7 +198,7 @@ void cyclicFaPatch::makeWeights(scalarField& w) const
} }
// Check for error in matching // Check for error in matching
if (maxMatchError > polyPatch::matchTol_) if (maxMatchError > polyPatch::matchTol_())
{ {
scalar avL = (magL[errorEdge] + magL[errorEdge + sizeby2])/2.0; scalar avL = (magL[errorEdge] + magL[errorEdge + sizeby2])/2.0;
@ -207,7 +208,7 @@ void cyclicFaPatch::makeWeights(scalarField& w) const
<< 100*mag(magL[errorEdge] - magL[errorEdge + sizeby2])/avL << 100*mag(magL[errorEdge] - magL[errorEdge + sizeby2])/avL
<< "% -- possible edge ordering problem." << nl << "% -- possible edge ordering problem." << nl
<< "Cyclic area match tolerance = " << "Cyclic area match tolerance = "
<< polyPatch::matchTol_ << " patch: " << name() << polyPatch::matchTol_() << " patch: " << name()
<< abort(FatalError); << abort(FatalError);
} }
} }

View file

@ -38,6 +38,7 @@ SourceFiles
#include "coupledFaPatch.H" #include "coupledFaPatch.H"
#include "cyclicLduInterface.H" #include "cyclicLduInterface.H"
#include "cyclicPolyPatch.H" #include "cyclicPolyPatch.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -65,7 +66,7 @@ protected:
//- Relative tolerance (for geometric matching). Is factor of //- Relative tolerance (for geometric matching). Is factor of
// maximum edge length per face. // maximum edge length per face.
static const scalar matchTol_; static const debug::tolerancesSwitch matchTol_;
// Protected Member functions // Protected Member functions

View file

@ -38,7 +38,7 @@ defineNamedTemplateTypeNameAndDebug(faPatchTypeField, 0); \
template<> \ template<> \
int faPatchTypeField::disallowDefaultFaPatchField \ int faPatchTypeField::disallowDefaultFaPatchField \
( \ ( \
debug::debugSwitch("disallowDefaultFaPatchField", 0) \ debug::debugSwitchFromDict("disallowDefaultFaPatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(faPatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(faPatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(faPatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(faPatchTypeField, patchMapper); \

View file

@ -41,7 +41,7 @@ defineNamedTemplateTypeNameAndDebug(faePatchTypeField, 0); \
template<> \ template<> \
int faePatchTypeField::disallowDefaultFaePatchField \ int faePatchTypeField::disallowDefaultFaePatchField \
( \ ( \
debug::debugSwitch("disallowDefaultFaePatchField", 0) \ debug::debugSwitchFromDict("disallowDefaultFaePatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(faePatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(faePatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(faePatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(faePatchTypeField, patchMapper); \

View file

@ -35,7 +35,7 @@ Description
namespace Foam namespace Foam
{ {
int faSchemes::debug(Foam::debug::debugSwitch("faSchemes", false)); int faSchemes::debug(Foam::debug::debugSwitchFromDict("faSchemes", false));
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View file

@ -29,6 +29,7 @@ License
#include "processorFvsPatchFields.H" #include "processorFvsPatchFields.H"
#include "inletOutletFvPatchFields.H" #include "inletOutletFvPatchFields.H"
#include "fvc.H" #include "fvc.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
@ -115,8 +116,11 @@ bool Foam::adjustPhi
scalar massCorr = 1.0; scalar massCorr = 1.0;
static const scalar closedDomainTol = static const Foam::debug::tolerancesSwitch closedDomainTol
debug::tolerances("closedDomainTol", 1e-10); (
"closedDomainTol",
1e-10
);
if (mag(adjustableMassOut) > SMALL) if (mag(adjustableMassOut) > SMALL)
{ {
@ -125,7 +129,7 @@ bool Foam::adjustPhi
else if else if
( (
mag(fixedMassOut - massIn) mag(fixedMassOut - massIn)
> closedDomainTol*Foam::max(1.0, mag(massIn)) > closedDomainTol()*Foam::max(1.0, mag(massIn))
) )
{ {
phi.write(); phi.write();

View file

@ -38,7 +38,7 @@ defineNamedTemplateTypeNameAndDebug(fvPatchTypeField, 0); \
template<> \ template<> \
int fvPatchTypeField::disallowGenericFvPatchField \ int fvPatchTypeField::disallowGenericFvPatchField \
( \ ( \
debug::debugSwitch("disallowGenericFvPatchField", 0) \ debug::debugSwitchFromDict("disallowGenericFvPatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(fvPatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(fvPatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(fvPatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(fvPatchTypeField, patchMapper); \

View file

@ -38,7 +38,7 @@ defineNamedTemplateTypeNameAndDebug(fvsPatchTypeField, 0); \
template<> \ template<> \
int fvsPatchTypeField::disallowDefaultFvsPatchField \ int fvsPatchTypeField::disallowDefaultFvsPatchField \
( \ ( \
debug::debugSwitch("disallowDefaultFvsPatchField", 0) \ debug::debugSwitchFromDict("disallowDefaultFvsPatchField", 0) \
); \ ); \
defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patch); \ defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patch); \
defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patchMapper); \ defineTemplateRunTimeSelectionTable(fvsPatchTypeField, patchMapper); \

View file

@ -29,7 +29,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
int Foam::fvSchemes::debug(Foam::debug::debugSwitch("fvSchemes", false)); int Foam::fvSchemes::debug(Foam::debug::debugSwitchFromDict("fvSchemes", false));
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //

View file

@ -63,7 +63,7 @@ void cyclicFvPatch::makeWeights(scalarField& w) const
if if
( (
mag(magFa[facei] - magFa[facei + sizeby2])/avFa mag(magFa[facei] - magFa[facei + sizeby2])/avFa
> polyPatch::matchTol_ > polyPatch::matchTol_()
) )
{ {
// Found error. Look for largest matching error // Found error. Look for largest matching error
@ -85,7 +85,7 @@ void cyclicFvPatch::makeWeights(scalarField& w) const
} }
// Check for error in matching // Check for error in matching
if (maxMatchError > polyPatch::matchTol_) if (maxMatchError > polyPatch::matchTol_())
{ {
scalar avFa = (magFa[errorFace] + magFa[errorFace + sizeby2])/2.0; scalar avFa = (magFa[errorFace] + magFa[errorFace + sizeby2])/2.0;
@ -95,7 +95,7 @@ void cyclicFvPatch::makeWeights(scalarField& w) const
<< 100*mag(magFa[errorFace] - magFa[errorFace + sizeby2])/avFa << 100*mag(magFa[errorFace] - magFa[errorFace + sizeby2])/avFa
<< "% -- possible face ordering problem." << nl << "% -- possible face ordering problem." << nl
<< "Cyclic area match tolerance = " << "Cyclic area match tolerance = "
<< polyPatch::matchTol_ << " patch: " << name() << polyPatch::matchTol_() << " patch: " << name()
<< abort(FatalError); << abort(FatalError);
} }
} }

View file

@ -28,7 +28,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
int Foam::cellPointWeight::debug(debug::debugSwitch("cellPointWeight", 0)); int Foam::cellPointWeight::debug(debug::debugSwitchFromDict("cellPointWeight", 0));
Foam::scalar Foam::cellPointWeight::tol(SMALL); Foam::scalar Foam::cellPointWeight::tol(SMALL);
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //

View file

@ -36,15 +36,17 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template <class Type> template <class Type>
Foam::scalar Foam::FaceCellWave<Type>::geomTol_ Foam::debug::tolerancesSwitch Foam::FaceCellWave<Type>::geomTol_
( (
debug::tolerances("FaceCellWaveGeomTol", 1e-6) "FaceCellWaveGeomTol",
1e-6
); );
template <class Type> template <class Type>
Foam::scalar Foam::FaceCellWave<Type>::propagationTol_ Foam::debug::tolerancesSwitch Foam::FaceCellWave<Type>::propagationTol_
( (
debug::tolerances("FaceCellWavePropagationTol", 0.01) "FaceCellWavePropagationTol",
0.01
); );
// Write to ostream // Write to ostream
@ -264,7 +266,7 @@ void Foam::FaceCellWave<Type>::checkCyclic(const polyPatch& patch) const
label i1 = patch.start() + patchFaceI; label i1 = patch.start() + patchFaceI;
label i2 = i1 + cycOffset; label i2 = i1 + cycOffset;
if (!allFaceInfo_[i1].sameGeometry(mesh_, allFaceInfo_[i2], geomTol_)) if (!allFaceInfo_[i1].sameGeometry(mesh_, allFaceInfo_[i2], geomTol_()))
{ {
FatalErrorIn("FaceCellWave<Type>::checkCyclic(const polyPatch&)") FatalErrorIn("FaceCellWave<Type>::checkCyclic(const polyPatch&)")
<< "problem: i:" << i1 << " otheri:" << i2 << "problem: i:" << i1 << " otheri:" << i2
@ -359,7 +361,7 @@ void Foam::FaceCellWave<Type>::mergeFaceInfo
( (
meshFaceI, meshFaceI,
neighbourWallInfo, neighbourWallInfo,
propagationTol_, propagationTol_(),
currentWallInfo currentWallInfo
); );
} }
@ -934,7 +936,7 @@ Foam::label Foam::FaceCellWave<Type>::faceToCell()
cellI, cellI,
faceI, faceI,
neighbourWallInfo, neighbourWallInfo,
propagationTol_, propagationTol_(),
currentWallInfo currentWallInfo
); );
} }
@ -952,7 +954,7 @@ Foam::label Foam::FaceCellWave<Type>::faceToCell()
cellI, cellI,
faceI, faceI,
neighbourWallInfo, neighbourWallInfo,
propagationTol_, propagationTol_(),
currentWallInfo2 currentWallInfo2
); );
} }
@ -1018,7 +1020,7 @@ Foam::label Foam::FaceCellWave<Type>::cellToFace()
faceI, faceI,
cellI, cellI,
neighbourWallInfo, neighbourWallInfo,
propagationTol_, propagationTol_(),
currentWallInfo currentWallInfo
); );
} }

View file

@ -50,6 +50,7 @@ SourceFiles
#include "boolList.H" #include "boolList.H"
#include "labelList.H" #include "labelList.H"
#include "primitiveFieldsFwd.H" #include "primitiveFieldsFwd.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -267,9 +268,8 @@ class FaceCellWave
// Private static data // Private static data
static scalar geomTol_; static debug::tolerancesSwitch geomTol_;
static scalar propagationTol_; static debug::tolerancesSwitch propagationTol_;
public: public:
@ -278,7 +278,7 @@ public:
//- Access to tolerance //- Access to tolerance
static scalar propagationTol() static scalar propagationTol()
{ {
return propagationTol_; return propagationTol_();
} }
//- Change tolerance //- Change tolerance

View file

@ -35,12 +35,13 @@ License
defineTypeNameAndDebug(Foam::octreeDataBoundBox, 0); defineTypeNameAndDebug(Foam::octreeDataBoundBox, 0);
Foam::scalar Foam::octreeDataBoundBox::tol const Foam::debug::tolerancesSwitch
Foam::octreeDataBoundBox::tol
( (
debug::tolerances("octreeDataBoundBoxTol", 1e-6) "octreeDataBoundBoxTol",
1e-6
); );
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::octreeDataBoundBox::octreeDataBoundBox Foam::octreeDataBoundBox::octreeDataBoundBox

View file

@ -49,6 +49,7 @@ Author
#include "point.H" #include "point.H"
#include "className.H" #include "className.H"
#include "linePointRef.H" #include "linePointRef.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -69,7 +70,7 @@ class octreeDataBoundBox
// Static data // Static data
//- Tolerance on linear dimensions //- Tolerance on linear dimensions
static scalar tol; static const Foam::debug::tolerancesSwitch tol;
// Private data // Private data

View file

@ -36,8 +36,13 @@ namespace Foam
const IOstream::versionNumber IOstream::originalVersion(0.5); const IOstream::versionNumber IOstream::originalVersion(0.5);
const IOstream::versionNumber IOstream::currentVersion(2.0); const IOstream::versionNumber IOstream::currentVersion(2.0);
unsigned int IOstream::precision_(debug::infoSwitch("writePrecision", 6));
Foam::debug::infoSwitch
IOstream::precision_
(
"writePrecision",
6
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Global IO streams // Global IO streams

View file

@ -49,9 +49,13 @@ SourceFiles
#include "scalar.H" #include "scalar.H"
#include "fileName.H" #include "fileName.H"
#include "InfoProxy.H" #include "InfoProxy.H"
#include "controlSwitches.H"
#include "debug.H"
#include <iostream> #include <iostream>
#if __GNUC__ < 3 #if __GNUC__ < 3
# define ios_base ios # define ios_base ios
#endif #endif
@ -211,8 +215,7 @@ public:
static const versionNumber currentVersion; static const versionNumber currentVersion;
//- Default precision //- Default precision
static unsigned int precision_; static Foam::debug::infoSwitch precision_;
private: private:
@ -466,13 +469,13 @@ public:
//- Return the default precision //- Return the default precision
static unsigned int defaultPrecision() static unsigned int defaultPrecision()
{ {
return precision_; return precision_();
} }
//- Reset the default precision (and return old precision) //- Reset the default precision (and return old precision)
static unsigned int defaultPrecision(unsigned int p) static unsigned int defaultPrecision(unsigned int p)
{ {
unsigned int precision0 = precision_; unsigned int precision0 = precision_();
precision_ = p; precision_ = p;
return precision0; return precision0;
} }

View file

@ -227,16 +227,20 @@ Foam::List<Foam::Pstream::commsStruct> Foam::Pstream::treeCommunication_(0);
// Should compact transfer be used in which floats replace doubles // Should compact transfer be used in which floats replace doubles
// reducing the bandwidth requirement at the expense of some loss // reducing the bandwidth requirement at the expense of some loss
// in accuracy // in accuracy
bool Foam::Pstream::floatTransfer const Foam::debug::optimisationSwitch
Foam::Pstream::floatTransfer
( (
debug::optimisationSwitch("floatTransfer", 0) "floatTransfer",
0
); );
// 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
int Foam::Pstream::nProcsSimpleSum const Foam::debug::optimisationSwitch
Foam::Pstream::nProcsSimpleSum
( (
debug::optimisationSwitch("nProcsSimpleSum", 16) "nProcsSimpleSum",
16
); );
// Default commsType // Default commsType
@ -245,5 +249,4 @@ Foam::Pstream::commsTypes Foam::Pstream::defaultCommsType
commsTypeNames.read(debug::optimisationSwitches().lookup("commsType")) commsTypeNames.read(debug::optimisationSwitches().lookup("commsType"))
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -45,6 +45,7 @@ SourceFiles
#include "HashTable.H" #include "HashTable.H"
#include "string.H" #include "string.H"
#include "NamedEnum.H" #include "NamedEnum.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -224,11 +225,11 @@ public:
//- Should compact transfer be used in which floats replace doubles //- Should compact transfer be used in which floats replace doubles
// reducing the bandwidth requirement at the expense of some loss // reducing the bandwidth requirement at the expense of some loss
// in accuracy // in accuracy
static bool floatTransfer; static const Foam::debug::optimisationSwitch floatTransfer;
//- Number of processors at which the sum algorithm changes from linear //- Number of processors at which the sum algorithm changes from linear
// to tree // to tree
static int nProcsSimpleSum; static const Foam::debug::optimisationSwitch nProcsSimpleSum;
//- Default commsType //- Default commsType
static commsTypes defaultCommsType; static commsTypes defaultCommsType;

View file

@ -62,7 +62,7 @@ void combineReduce
template <class T, class CombineOp> template <class T, class CombineOp>
void combineReduce(T& Value, const CombineOp& cop) void combineReduce(T& Value, const CombineOp& cop)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
Pstream::combineGather(Pstream::linearCommunication(), Value, cop); Pstream::combineGather(Pstream::linearCommunication(), Value, cop);
Pstream::combineScatter(Pstream::linearCommunication(), Value); Pstream::combineScatter(Pstream::linearCommunication(), Value);

View file

@ -58,7 +58,7 @@ void reduce
const BinaryOp& bop const BinaryOp& bop
) )
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
reduce(Pstream::linearCommunication(), Value, bop); reduce(Pstream::linearCommunication(), Value, bop);
} }
@ -79,7 +79,7 @@ T returnReduce
{ {
T WorkValue(Value); T WorkValue(Value);
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
reduce(Pstream::linearCommunication(), WorkValue, bop); reduce(Pstream::linearCommunication(), WorkValue, bop);
} }

View file

@ -129,7 +129,7 @@ void Pstream::combineGather
template <class T, class CombineOp> template <class T, class CombineOp>
void Pstream::combineGather(T& Value, const CombineOp& cop) void Pstream::combineGather(T& Value, const CombineOp& cop)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
combineGather(Pstream::linearCommunication(), Value, cop); combineGather(Pstream::linearCommunication(), Value, cop);
} }
@ -207,7 +207,7 @@ void Pstream::combineScatter(const List<Pstream::commsStruct>& comms, T& Value)
template <class T> template <class T>
void Pstream::combineScatter(T& Value) void Pstream::combineScatter(T& Value)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
combineScatter(Pstream::linearCommunication(), Value); combineScatter(Pstream::linearCommunication(), Value);
} }
@ -313,7 +313,7 @@ void Pstream::listCombineGather
template <class T, class CombineOp> template <class T, class CombineOp>
void Pstream::listCombineGather(List<T>& Values, const CombineOp& cop) void Pstream::listCombineGather(List<T>& Values, const CombineOp& cop)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
listCombineGather(Pstream::linearCommunication(), Values, cop); listCombineGather(Pstream::linearCommunication(), Values, cop);
} }
@ -395,7 +395,7 @@ void Pstream::listCombineScatter
template <class T> template <class T>
void Pstream::listCombineScatter(List<T>& Values) void Pstream::listCombineScatter(List<T>& Values)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
listCombineScatter(Pstream::linearCommunication(), Values); listCombineScatter(Pstream::linearCommunication(), Values);
} }
@ -480,7 +480,7 @@ void Pstream::mapCombineGather
template <class Container, class CombineOp> template <class Container, class CombineOp>
void Pstream::mapCombineGather(Container& Values, const CombineOp& cop) void Pstream::mapCombineGather(Container& Values, const CombineOp& cop)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
mapCombineGather(Pstream::linearCommunication(), Values, cop); mapCombineGather(Pstream::linearCommunication(), Values, cop);
} }
@ -536,7 +536,7 @@ void Pstream::mapCombineScatter
template <class Container> template <class Container>
void Pstream::mapCombineScatter(Container& Values) void Pstream::mapCombineScatter(Container& Values)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
mapCombineScatter(Pstream::linearCommunication(), Values); mapCombineScatter(Pstream::linearCommunication(), Values);
} }

View file

@ -103,7 +103,7 @@ void Pstream::gather
template <class T, class BinaryOp> template <class T, class BinaryOp>
void Pstream::gather(T& Value, const BinaryOp& bop) void Pstream::gather(T& Value, const BinaryOp& bop)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
gather(Pstream::linearCommunication(), Value, bop); gather(Pstream::linearCommunication(), Value, bop);
} }
@ -168,7 +168,7 @@ void Pstream::scatter(const List<Pstream::commsStruct>& comms, T& Value)
template <class T> template <class T>
void Pstream::scatter(T& Value) void Pstream::scatter(T& Value)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
scatter(Pstream::linearCommunication(), Value); scatter(Pstream::linearCommunication(), Value);
} }

View file

@ -180,7 +180,7 @@ void Pstream::gatherList
template <class T> template <class T>
void Pstream::gatherList(List<T>& Values) void Pstream::gatherList(List<T>& Values)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
gatherList(Pstream::linearCommunication(), Values); gatherList(Pstream::linearCommunication(), Values);
} }
@ -305,7 +305,7 @@ void Pstream::scatterList
template <class T> template <class T>
void Pstream::scatterList(List<T>& Values) void Pstream::scatterList(List<T>& Values)
{ {
if (Pstream::nProcs() < Pstream::nProcsSimpleSum) if (Pstream::nProcs() < Pstream::nProcsSimpleSum())
{ {
scatterList(Pstream::linearCommunication(), Values); scatterList(Pstream::linearCommunication(), Values);
} }

View file

@ -44,7 +44,7 @@ inline Foam::OSstream::OSstream
{ {
setOpened(); setOpened();
setGood(); setGood();
os_.precision(precision_); os_.precision(precision_());
} }
else else
{ {

View file

@ -33,6 +33,9 @@ License
void Foam::Time::readDict() void Foam::Time::readDict()
{ {
if (debug)
Info << "Time::readDict(): reading " << controlDict_.name() << endl;
if (!deltaTchanged_) if (!deltaTchanged_)
{ {
deltaT_ = readScalar(controlDict_.lookup("deltaT")); deltaT_ = readScalar(controlDict_.lookup("deltaT"));

View file

@ -37,7 +37,12 @@ const Foam::word Foam::functionEntries::includeEntry::typeName
// Don't lookup the debug switch here as the debug switch dictionary // Don't lookup the debug switch here as the debug switch dictionary
// might include includeEntry // might include includeEntry
int Foam::functionEntries::includeEntry::debug(0); Foam::debug::debugSwitch
Foam::functionEntries::includeEntry::debug
(
"includeEntry",
0
);
namespace Foam namespace Foam
{ {

View file

@ -37,7 +37,12 @@ const Foam::word Foam::functionEntries::includeIfPresentEntry::typeName
// Don't lookup the debug switch here as the debug switch dictionary // Don't lookup the debug switch here as the debug switch dictionary
// might include includeIfPresentEntry // might include includeIfPresentEntry
int Foam::functionEntries::includeIfPresentEntry::debug(0); Foam::debug::debugSwitch
Foam::functionEntries::includeIfPresentEntry::debug
(
"includeIfPresentEntry",
0
);
namespace Foam namespace Foam
{ {

View file

@ -36,7 +36,12 @@ const Foam::word Foam::functionEntries::inputModeEntry::typeName
// Don't lookup the debug switch here as the debug switch dictionary // Don't lookup the debug switch here as the debug switch dictionary
// might include inputModeEntries // might include inputModeEntries
int Foam::functionEntries::inputModeEntry::debug(0); Foam::debug::debugSwitch
Foam::functionEntries::inputModeEntry::debug
(
"inputModeEntry",
0
);
Foam::functionEntries::inputModeEntry::inputMode Foam::functionEntries::inputModeEntry::inputMode
Foam::functionEntries::inputModeEntry::mode_(MERGE); Foam::functionEntries::inputModeEntry::mode_(MERGE);

View file

@ -39,7 +39,12 @@ const Foam::word Foam::functionEntries::removeEntry::typeName
// Don't lookup the debug switch here as the debug switch dictionary // Don't lookup the debug switch here as the debug switch dictionary
// might include removeEntry // might include removeEntry
int Foam::functionEntries::removeEntry::debug(0); Foam::debug::debugSwitch
Foam::functionEntries::removeEntry::debug
(
"removeEntry",
0
);
namespace Foam namespace Foam
{ {

View file

@ -29,7 +29,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
int Foam::messageStream::level(Foam::debug::debugSwitch("level", 2)); int Foam::messageStream::level(Foam::debug::debugSwitchFromDict("level", 2));
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -30,7 +30,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineRunTimeSelectionTable(Foam::functionObject, dictionary); defineRunTimeSelectionTable(Foam::functionObject, dictionary);
int Foam::functionObject::debug(Foam::debug::debugSwitch("functionObject", 0)); int Foam::functionObject::debug(Foam::debug::debugSwitchFromDict("functionObject", 0));
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View file

@ -31,12 +31,13 @@ License
defineTypeNameAndDebug(Foam::regIOobject, 0); defineTypeNameAndDebug(Foam::regIOobject, 0);
int Foam::regIOobject::fileModificationSkew const Foam::debug::optimisationSwitch
Foam::regIOobject::fileModificationSkew
( (
Foam::debug::optimisationSwitch("fileModificationSkew", 30) "fileModificationSkew",
30
); );
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from IOobject // Construct from IOobject

View file

@ -41,6 +41,7 @@ SourceFiles
#include "IOobject.H" #include "IOobject.H"
#include "typeInfo.H" #include "typeInfo.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -93,7 +94,7 @@ public:
//- Runtime type information //- Runtime type information
TypeName("regIOobject"); TypeName("regIOobject");
static int fileModificationSkew; static const Foam::debug::optimisationSwitch fileModificationSkew;
// Constructors // Constructors

View file

@ -154,7 +154,7 @@ bool Foam::regIOobject::modified() const
return return
( (
lastModified_ lastModified_
&& lastModified(filePath()) > (lastModified_ + fileModificationSkew) && lastModified(filePath()) > (lastModified_ + fileModificationSkew())
); );
} }
@ -167,7 +167,7 @@ bool Foam::regIOobject::readIfModified()
bool readFile = false; bool readFile = false;
if (newTimeStamp > (lastModified_ + fileModificationSkew)) if (newTimeStamp > (lastModified_ + fileModificationSkew()))
{ {
readFile = true; readFile = true;
} }

View file

@ -28,7 +28,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
int Foam::scalarRange::debug(::Foam::debug::debugSwitch("scalarRange", 0)); int Foam::scalarRange::debug(::Foam::debug::debugSwitchFromDict("scalarRange", 0));
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View file

@ -31,6 +31,7 @@ Description
#include "word.H" #include "word.H"
#include "debug.H" #include "debug.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -72,13 +73,13 @@ public: \
// Also declares debug information. // Also declares debug information.
#define ClassName(TypeNameString) \ #define ClassName(TypeNameString) \
ClassNameNoDebug(TypeNameString); \ ClassNameNoDebug(TypeNameString); \
static int debug static Foam::debug::debugSwitch debug;
//- Add typeName information from argument @a TypeNameString to a namespace. //- Add typeName information from argument @a TypeNameString to a namespace.
// Also declares debug information. // Also declares debug information.
#define NamespaceName(TypeNameString) \ #define NamespaceName(TypeNameString) \
NamespaceNameNoDebug(TypeNameString); \ NamespaceNameNoDebug(TypeNameString); \
extern int debug extern Foam::debug::debugSwitch debug;
//- Add typeName information from argument @a TypeNameString to a template class. //- Add typeName information from argument @a TypeNameString to a template class.
// Also declares debug information. // Also declares debug information.
@ -133,21 +134,23 @@ public: \
//- Define the debug information, lookup as @a Name //- Define the debug information, lookup as @a Name
#define defineDebugSwitchWithName(Type, Name, DebugSwitch) \ #define defineDebugSwitchWithName(Type, Name, DebugSwitch) \
int Type::debug(::Foam::debug::debugSwitch(Name, DebugSwitch)) ::Foam::debug::debugSwitch \
Type::debug(std::string(Name), DebugSwitch)
//- Define the debug information //- Define the debug information
#define defineDebugSwitch(Type, DebugSwitch) \ #define defineDebugSwitch(Type, DebugSwitch) \
defineDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch) defineDebugSwitchWithName(Type, Type::typeName_(), DebugSwitch);
#ifdef __INTEL_COMPILER #ifdef __INTEL_COMPILER
//- Define the debug information for templates, lookup as @a Name //- Define the debug information for templates, lookup as @a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \ # define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
defineDebugSwitchWithName(Type, Name, DebugSwitch) defineDebugSwitchWithName(Type, Name, DebugSwitch);
#else #else
//- Define the debug information for templates, lookup as @a Name //- Define the debug information for templates, lookup as @a Name
# define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \ # define defineTemplateDebugSwitchWithName(Type, Name, DebugSwitch) \
template<> \ template<> \
defineDebugSwitchWithName(Type, Name, DebugSwitch) defineDebugSwitchWithName(Type, Name, DebugSwitch);
#endif #endif
//- Define the debug information for templates //- Define the debug information for templates

View file

@ -31,7 +31,13 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
bool Foam::JobInfo::writeJobInfo(Foam::debug::infoSwitch("writeJobInfo", 0)); Foam::debug::infoSwitch
Foam::JobInfo::writeJobInfo
(
"writeJobInfo",
0
);
Foam::JobInfo Foam::jobInfo; Foam::JobInfo Foam::jobInfo;

View file

@ -42,6 +42,7 @@ SourceFiles
#include "dictionary.H" #include "dictionary.H"
#include "fileName.H" #include "fileName.H"
#include "cpuTime.H" #include "cpuTime.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -70,7 +71,7 @@ class JobInfo
public: public:
static bool constructed; static bool constructed;
static bool writeJobInfo; static Foam::debug::infoSwitch writeJobInfo;
// Constructors // Constructors

View file

@ -32,6 +32,8 @@ License
#include "IOobject.H" #include "IOobject.H"
#include "JobInfo.H" #include "JobInfo.H"
#include "labelList.H" #include "labelList.H"
#include "SortableList.H"
//#include "dimensionedConstants.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -39,8 +41,32 @@ License
Foam::SLList<Foam::string> Foam::argList::validArgs; Foam::SLList<Foam::string> Foam::argList::validArgs;
Foam::HashTable<Foam::string> Foam::argList::validOptions; Foam::HashTable<Foam::string> Foam::argList::validOptions;
Foam::HashTable<Foam::string> Foam::argList::validParOptions; Foam::HashTable<Foam::string> Foam::argList::validParOptions;
Foam::word Foam::argList::appDictName_("");
bool Foam::argList::bannerEnabled(true); bool Foam::argList::bannerEnabled(true);
template<>
const char*
Foam::NamedEnum
<
Foam::debug::globalControlDictSwitchSet,
5
>::names[] =
{
"DebugSwitches",
"InfoSwitches",
"OptimisationSwitches",
"Tolerances",
"DimensionedConstants"
};
const Foam::NamedEnum
<
Foam::debug::globalControlDictSwitchSet,
5
>
Foam::argList::globalControlDictSwitchSetNames_;
Foam::argList::initValidTables::initValidTables() Foam::argList::initValidTables::initValidTables()
{ {
@ -48,7 +74,11 @@ Foam::argList::initValidTables::initValidTables()
validOptions.set("parallel", ""); validOptions.set("parallel", "");
validParOptions.set("parallel", ""); validParOptions.set("parallel", "");
validOptions.set("noFunctionObjects", ""); validOptions.set("noFunctionObjects", "");
validOptions.set("DebugSwitches", "key=value");
validOptions.set("InfoSwitches", "key=value");
validOptions.set("OptimisationSwitches", "key=value");
validOptions.set("Tolerances", "key=value");
validOptions.set("DimensionedConstants", "key=value");
Pstream::addValidParOptions(validParOptions); Pstream::addValidParOptions(validParOptions);
} }
@ -308,6 +338,7 @@ Foam::argList::argList
FatalError.exit(); FatalError.exit();
} }
// From here, we consider the command-line arguments to be valid
string dateString = clock::date(); string dateString = clock::date();
string timeString = clock::clockTime(); string timeString = clock::clockTime();
@ -328,6 +359,19 @@ Foam::argList::argList
<< endl; << endl;
} }
// Command-line override for central controlDict's variables
forAll(globalControlDictSwitchSetNames_, cI)
{
word switchSetName = globalControlDictSwitchSetNames_.names[cI];
if( optionFound(switchSetName) )
Foam::debug::updateCentralDictVars
(
globalControlDictSwitchSetNames_[switchSetName],
option(switchSetName)
);
}
jobInfo.add("startDate", dateString); jobInfo.add("startDate", dateString);
jobInfo.add("startTime", timeString); jobInfo.add("startTime", timeString);
jobInfo.add("userName", userName()); jobInfo.add("userName", userName());
@ -540,7 +584,7 @@ Foam::argList::argList
Info<< "Slaves : " << slaveProcs << nl Info<< "Slaves : " << slaveProcs << nl
<< "Pstream initialized with:" << nl << "Pstream initialized with:" << nl
<< " floatTransfer : " << Pstream::floatTransfer << nl << " floatTransfer : " << Pstream::floatTransfer << nl
<< " nProcsSimpleSum : " << Pstream::nProcsSimpleSum << nl << " nProcsSimpleSum : " << Pstream::nProcsSimpleSum() << nl
<< " commsType : " << " commsType : "
<< Pstream::commsTypeNames[Pstream::defaultCommsType] << Pstream::commsTypeNames[Pstream::defaultCommsType]
<< endl; << endl;
@ -568,6 +612,13 @@ Foam::argList::argList
Info<< endl; Info<< endl;
IOobject::writeDivider(Info); IOobject::writeDivider(Info);
} }
// If the macro AppSpecificDictionary is used, one can
// modify the application-specific dictionnary using the
// command-line parameter -appDict
if(appDictName_ != "")
optionReadIfPresent("appDict", appDictName_);
} }
@ -608,22 +659,31 @@ void Foam::argList::printUsage() const
Info<< " <" << iter().c_str() << '>'; Info<< " <" << iter().c_str() << '>';
} }
int i=0;
SortableList<Foam::string> sortedValidOptions(validOptions.size());
for for
( (
HashTable<string>::iterator iter = validOptions.begin(); HashTable<string>::iterator iter = validOptions.begin();
iter != validOptions.end(); iter != validOptions.end();
++iter ++iter, ++i
) )
{ {
Info<< " [-" << iter.key(); OStringStream keyValuePair;
keyValuePair << "[-" << iter.key();
if (iter().size()) if (iter().size())
{ {
Info<< ' ' << iter().c_str(); keyValuePair<< ' ' << iter().c_str();
} }
Info<< ']'; keyValuePair<< ']';
sortedValidOptions[i]= keyValuePair.str();
} }
sortedValidOptions.sort();
forAll(sortedValidOptions, sI)
Info << " " << sortedValidOptions[sI].c_str();
// place help/doc/srcDoc options of the way at the end, // place help/doc/srcDoc options of the way at the end,
// but with an extra space to separate it a little // but with an extra space to separate it a little

View file

@ -126,6 +126,9 @@ public:
// Static data members // Static data members
//- Central dictionary switchSet names
static const NamedEnum<Foam::debug::globalControlDictSwitchSet, 5> globalControlDictSwitchSetNames_;
//- A list of valid (mandatory) arguments //- A list of valid (mandatory) arguments
static SLList<string> validArgs; static SLList<string> validArgs;
@ -135,6 +138,9 @@ public:
//- A list of valid parallel options //- A list of valid parallel options
static HashTable<string> validParOptions; static HashTable<string> validParOptions;
//- Name of the application-specific dictionary
static word appDictName_;
//! @cond ignoreDocumentation //! @cond ignoreDocumentation
class initValidTables class initValidTables
{ {
@ -263,6 +269,11 @@ public:
return readList<T>(optionLookup(opt)()); return readList<T>(optionLookup(opt)());
} }
//- Return appDictName_
const word appDictName() const
{
return appDictName_;
}
// Edit // Edit
@ -290,8 +301,21 @@ public:
//- Check root path and case path //- Check root path and case path
bool checkRootCase() const; bool checkRootCase() const;
}; };
// Allow overriding the application-specific dictionary using the command-line
// parameter -appDict. The dictionary file must still be located in the case's
// "system" directory, or accessible using a path relative to the case's
// "system" directory.
// Example:
// cellSet # Default will be cellSetDict
// cellSet -appDict cellSetDict # Same as above
// cellSet -appDict cellSetDict.rotorOnly
//
#define AppSpecificDictionary(DefaultAppDict) \
argList::appDictName_ = (DefaultAppDict); \
argList::validOptions.insert("appDict", argList::appDictName_);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -0,0 +1,145 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration |
\\ / A nd | For copyright notice see file Copyright
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Author
Martin Beaudoin, Hydro-Quebec, 2014. All rights reserved
\*---------------------------------------------------------------------------*/
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace debug
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
Foam::debug::controlSwitches<Type>::controlSwitches()
:
switchValue_(Type(0))
{
}
template<class T>
Foam::debug::controlSwitches<T>::controlSwitches(const T& switchValue)
:
switchValue_(switchValue)
{}
template<class T>
Foam::debug::controlSwitches<T>::controlSwitches
(
const std::string& switchName,
const T& switchValue,
globalControlDictSwitchSet switchSet,
std::map<std::string, std::list<controlSwitches<T> *> >** switchValuesTable
)
:
switchSet_(switchSet),
switchName_(switchName),
switchValue_(switchValue)
{
// Register the switch in its list
if (*switchValuesTable == NULL)
{
*switchValuesTable = new std::map<std::string, std::list<controlSwitches<T> *> >();
}
switchValuesTable_ = *switchValuesTable;
std::map<std::string, std::list<controlSwitches<T> *> >&switchValues = *switchValuesTable_;
// Memorize this switch object address
if (switchValues.find(switchName) != switchValues.end())
{
switchValues[switchName].push_back(this);
}
else
{
std::list<controlSwitches<T>* > pList;
pList.push_back(this);
switchValues.insert(std::pair<std::string, std::list<controlSwitches<T>* > >(switchName, pList));
}
}
template<class T>
Foam::debug::controlSwitches<T>::controlSwitches(const Foam::debug::controlSwitches<T>& csw)
:
switchName_(csw.switchName_),
switchValue_(csw.switchValue_)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template<class T>
Foam::debug::controlSwitches<T>::~controlSwitches()
{
// Unregister the switch from its list
std::map<std::string, std::list<controlSwitches<T> *> >&switchValuesTable = *switchValuesTable_;
// Remove entry or key if pointers list is empty
switchValuesTable[switchName_].remove(this);
// Replace the updated list
if(switchValuesTable[switchName_].size() == 0)
{
switchValuesTable.erase(switchName_);
}
}
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
template<class T>
void Foam::debug::controlSwitches<T>::operator=(const Foam::debug::controlSwitches<T>& rhs)
{
// Check for assignment to self
if (this == &rhs)
{
std::cerr << "Foam::debug::controlSwitches<T>::operator=(const Foam::controlSwitches<T>&)"
<< "--> FOAM FATAL ERROR: "
<< "Attempted assignment to self"
<< std::endl;
std::abort();
exit(-1);
}
else
{
switchValue_ = rhs.switchValue_;
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace debug
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,358 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration |
\\ / A nd | For copyright notice see file Copyright
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::controlSwitches
Author
Martin Beaudoin, Hydro-Quebec, 2014. All rights reserved
Description
Handling of runtime controlSwitches
- Debug switches
- Info switches
- Optimisation switches
- Tolerances switches
- DimensionedConstants values
This class is a specialization of the safe_bool class, where additional
boolean operators are allowed. This class is also offering access to
information like the switch name, etc.
Note:
We will be using std::map and std::list for the containers for this class.
In some sections of the code where controlSwitches are being used, we are at
a relatively low level, so we cannot use HashTable and DynamicList.
MB 23/05/2014
SourceFiles
controlSwitchesI.H
controlSwitches.C
controlSwitchesIO.C
\*---------------------------------------------------------------------------*/
#ifndef controlSwitches_H
#define controlSwitches_H
#include <list>
#include <map>
#include <string>
#include "safe_bool.H"
#include "scalar.H"
#include "debug.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace debug
{
// Forward declaration of classes
template<class T> class controlSwitches;
// Typedefs
// Hashtables to static class attributes addresses holding the
// runtime debug/info/optimisation/tolerances values
typedef std::map<std::string, std::list<controlSwitches<int> *> > ListDebugControlSwitches;
typedef std::map<std::string, std::list<controlSwitches<int> *> > ListInfoControlSwitches;
typedef std::map<std::string, std::list<controlSwitches<int> *> > ListOptimisationControlSwitches;
typedef std::map<std::string, std::list<controlSwitches<Foam::scalar> *> > ListTolerancesControlSwitches;
typedef std::map<std::string, std::list<controlSwitches<Foam::scalar> *> > ListConstantsControlSwitches;
extern ListDebugControlSwitches* debugSwitchValues_;
extern ListInfoControlSwitches* infoSwitchValues_;
extern ListOptimisationControlSwitches* optimisationSwitchValues_;
extern ListTolerancesControlSwitches* tolerancesSwitchValues_;
extern ListConstantsControlSwitches* constantsSwitchValues_;
/*---------------------------------------------------------------------------*\
Class controlSwitches Declaration
\*---------------------------------------------------------------------------*/
template<class T>
class controlSwitches
: public safe_bool<controlSwitches<T> > // using the CRTP idiom
{
// Private data
//- Switch section
globalControlDictSwitchSet switchSet_;
//- Switch name
std::string switchName_;
//- Switch value
T switchValue_;
//- Handle to runTime switches list
std::map<std::string, std::list<controlSwitches<T> *> >* switchValuesTable_ ;
// Private Member Functions
public:
// Constructors
//- Construct null
controlSwitches();
//- Construct from components
controlSwitches(const T& data);
controlSwitches
(
const std::string& switchName,
const T& switchValue,
globalControlDictSwitchSet switchSet,
std::map<std::string, std::list<controlSwitches<T> *> >** switchesValues
);
//- Construct as copy
controlSwitches(const controlSwitches&);
//- Destructor
~controlSwitches();
// Member Functions
// Access
// Check
bool boolean_test() const
{
// Perform Boolean logic here
return switchValue_ != 0;
}
// Member Operators
// Assignement operator
void operator=(const T&);
//- Assignement operator
void operator=(const controlSwitches&);
// & operator
const T operator&(const T&);
// == operator
bool operator==(const T&);
// >= operator
bool operator>=(const T&);
// > operator
bool operator>(const T&);
// < operator
bool operator<(const T&);
// Return value
T operator()() const
{
return switchValue_;
}
};
// Utility classes
class debugSwitch
: public controlSwitches<int>
{
public:
debugSwitch
(
const std::string& switchName,
const int& switchValue
)
:
controlSwitches<int>
(
switchName,
debug::debugSwitchFromDict(switchName.c_str(), switchValue),
debug::DEBUGSWITCHES,
&debugSwitchValues_
)
{}
virtual ~debugSwitch()
{
}
// Assignement operator
void operator=(const int& rhs)
{
controlSwitches<int>::operator=(rhs);
}
};
class infoSwitch
: public controlSwitches<int>
{
public:
infoSwitch
(
const std::string& switchName,
const int& switchValue
)
:
controlSwitches<int>
(
switchName,
debug::infoSwitchFromDict(switchName.c_str(), switchValue),
debug::INFOSWITCHES,
&infoSwitchValues_
)
{}
virtual ~infoSwitch()
{
}
// Assignement operator
void operator=(const int& rhs)
{
controlSwitches<int>::operator=(rhs);
}
};
class optimisationSwitch
: public controlSwitches<int>
{
public:
optimisationSwitch
(
const std::string& switchName,
const int& switchValue
)
:
controlSwitches<int>
(
switchName,
debug::optimisationSwitchFromDict(switchName.c_str(), switchValue),
debug::OPTIMISATIONSWITCHES,
&optimisationSwitchValues_
)
{}
virtual ~optimisationSwitch()
{
}
// Assignement operator
void operator=(const int& rhs)
{
controlSwitches<int>::operator=(rhs);
}
};
class tolerancesSwitch
: public controlSwitches<Foam::scalar>
{
public:
tolerancesSwitch
(
const std::string& switchName,
const Foam::scalar& switchValue
)
:
controlSwitches<Foam::scalar>
(
switchName,
debug::tolerancesFromDict(switchName.c_str(), switchValue),
debug::TOLERANCES,
&tolerancesSwitchValues_
)
{
}
virtual ~tolerancesSwitch()
{
}
// Assignement operator
void operator=(const Foam::scalar& rhs)
{
controlSwitches<Foam::scalar>::operator=(rhs);
}
};
class constantsSwitch
: public controlSwitches<Foam::scalar>
{
public:
constantsSwitch
(
const std::string& switchName,
const Foam::scalar& switchValue
)
:
controlSwitches<Foam::scalar>
(
switchName,
debug::constantsFromDict(switchName.c_str(), switchValue),
debug::DIMENSIONEDCONSTANTS,
&constantsSwitchValues_
)
{
}
virtual ~constantsSwitch()
{
}
// Assignement operator
void operator=(const Foam::scalar& rhs)
{
controlSwitches<Foam::scalar>::operator=(rhs);
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace debug
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "controlSwitchesI.H"
#ifdef NoRepository
# include "controlSwitches.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,79 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration |
\\ / A nd | For copyright notice see file Copyright
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
template<class T>
inline void Foam::debug::controlSwitches<T>::operator=(const T& rhs)
{
switchValue_ = rhs;
}
template<class T>
inline const T Foam::debug::controlSwitches<T>::operator&(const T& rhs)
{
return switchValue_ & rhs;
}
template<class T>
inline bool Foam::debug::controlSwitches<T>::operator==(const T& rhs)
{
return switchValue_ == rhs;
}
template<class T>
inline bool Foam::debug::controlSwitches<T>::operator>=(const T& rhs)
{
return switchValue_ >= rhs;
}
template<class T>
inline bool Foam::debug::controlSwitches<T>::operator>(const T& rhs)
{
return switchValue_ > rhs;
}
template<class T>
inline bool Foam::debug::controlSwitches<T>::operator<(const T& rhs)
{
return switchValue_ < rhs;
}
// * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* //

View file

@ -0,0 +1,100 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration |
\\ / A nd | For copyright notice see file Copyright
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::safe_bool
Description
Implementation of the Safe Bool Idiom.
This is the version without virtual functions.
Author: Bjorn Karlsson
http://www.artima.com/cppsource/safebool.html
SourceFiles
\*---------------------------------------------------------------------------*/
#ifndef safe_bool_H
#define safe_bool_H
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class safe_bool_base Declaration
\*---------------------------------------------------------------------------*/
class safe_bool_base
{
public:
typedef void (safe_bool_base::*bool_type)() const;
void this_type_does_not_support_comparisons() const {}
protected:
safe_bool_base() {}
safe_bool_base(const safe_bool_base&) {}
safe_bool_base& operator=(const safe_bool_base&) {return *this;}
~safe_bool_base() {}
};
/*---------------------------------------------------------------------------*\
Class safe_bool Declaration
\*---------------------------------------------------------------------------*/
template <typename T=void>
class safe_bool
:
private safe_bool_base
{
// private or protected inheritance is very important here as it triggers the
// access control violation in main.
public:
operator bool_type() const
{
return (static_cast<const T*>(this))->boolean_test()
? &safe_bool_base::this_type_does_not_support_comparisons : 0;
}
protected:
//- Destructor
~safe_bool()
{}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "safe_boolI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,79 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration |
\\ / A nd | For copyright notice see file Copyright
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
template <typename T>
inline bool operator==(const Foam::safe_bool<T>& lhs, bool b)
{
if (b)
{
if (lhs) return true;
else return false;
}
else
{
if (lhs) return false;
else return true;
}
}
template <typename T>
inline bool operator==(bool b, const Foam::safe_bool<T>& rhs)
{
if (b)
{
if (rhs) return true;
else return false;
}
else
{
if (rhs) return false;
else return true;
}
}
template <typename T, typename U>
inline bool operator==(const Foam::safe_bool<T>& lhs,const Foam::safe_bool<U>& rhs)
{
lhs.this_type_does_not_support_comparisons();
return false;
}
template <typename T,typename U>
inline bool operator!=(const Foam::safe_bool<T>& lhs,const Foam::safe_bool<U>& rhs)
{
lhs.this_type_does_not_support_comparisons();
return false;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* //

View file

@ -30,6 +30,9 @@ Description
#include "dictionary.H" #include "dictionary.H"
#include "IFstream.H" #include "IFstream.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "dimensionedConstants.H"
#include "SortableList.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -44,6 +47,18 @@ dictionary* debugSwitchesPtr_(NULL);
dictionary* infoSwitchesPtr_(NULL); dictionary* infoSwitchesPtr_(NULL);
dictionary* optimisationSwitchesPtr_(NULL); dictionary* optimisationSwitchesPtr_(NULL);
dictionary* tolerancesPtr_(NULL); dictionary* tolerancesPtr_(NULL);
dictionary* constantsPtr_(NULL);
// Hashtables to static class attributes addresses holding the
// runtime debug/info/optimisation/tolerances values
// This needs to go on the heap so the destructor will not get
// called before the object's destructor it is overseeing
ListDebugControlSwitches* debugSwitchValues_(NULL);
ListInfoControlSwitches* infoSwitchValues_(NULL);
ListOptimisationControlSwitches* optimisationSwitchValues_(NULL);
ListTolerancesControlSwitches* tolerancesSwitchValues_(NULL);
ListConstantsControlSwitches* constantsSwitchValues_(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
@ -149,8 +164,13 @@ Foam::dictionary& Foam::debug::tolerances()
return switchSet("Tolerances", tolerancesPtr_); return switchSet("Tolerances", tolerancesPtr_);
} }
Foam::dictionary& Foam::debug::constants()
{
return switchSet("DimensionedConstants", constantsPtr_);
}
int Foam::debug::debugSwitch(const char* name, const int defaultValue)
int Foam::debug::debugSwitchFromDict(const char* name, const int defaultValue)
{ {
return debugSwitches().lookupOrAddDefault return debugSwitches().lookupOrAddDefault
( (
@ -159,7 +179,7 @@ int Foam::debug::debugSwitch(const char* name, const int defaultValue)
} }
int Foam::debug::infoSwitch(const char* name, const int defaultValue) int Foam::debug::infoSwitchFromDict(const char* name, const int defaultValue)
{ {
return infoSwitches().lookupOrAddDefault return infoSwitches().lookupOrAddDefault
( (
@ -168,7 +188,7 @@ int Foam::debug::infoSwitch(const char* name, const int defaultValue)
} }
int Foam::debug::optimisationSwitch(const char* name, const int defaultValue) int Foam::debug::optimisationSwitchFromDict(const char* name, const int defaultValue)
{ {
return optimisationSwitches().lookupOrAddDefault return optimisationSwitches().lookupOrAddDefault
( (
@ -177,11 +197,7 @@ int Foam::debug::optimisationSwitch(const char* name, const int defaultValue)
} }
double Foam::debug::tolerances double Foam::debug::tolerancesFromDict(const char* name, const double defaultValue)
(
const char* name,
const double defaultValue
)
{ {
return tolerances().lookupOrAddDefault return tolerances().lookupOrAddDefault
( (
@ -189,5 +205,299 @@ double Foam::debug::tolerances
); );
} }
double Foam::debug::constantsFromDict(const char* name, const double defaultValue)
{
return tolerances().lookupOrAddDefault
(
name, defaultValue, false, false
);
}
void Foam::debug::updateCentralDictVars(Foam::debug::globalControlDictSwitchSet globalControlDictSwitchSetName, Foam::string keyValues)
{
Foam::word token;
// Extract the multiple keyValues, separated by ','
std::istringstream issmkvs(keyValues);
while ( getline(issmkvs, token, ',') )
{
// Cleanup
Foam::string::stripInvalid<word>(token);
// Extract the keyValue pair, separated by '='
std::istringstream isskv(token);
while ( getline(isskv, token, '=') )
{
Foam::word key = token;
switch(globalControlDictSwitchSetName)
{
case DEBUGSWITCHES:
{
if (debugSwitchValues_)
{
ListDebugControlSwitches& runTimeDebugSwitchValues = *debugSwitchValues_;
label oldDebugValue;
label newDebugValue;
isskv >> newDebugValue;
if(Foam::debug::debugSwitches().readIfPresent(key, oldDebugValue))
{
Info << endl
<< "Warning: Modification of DebugSwitch: " << key << endl
<< " Old value: " << oldDebugValue << endl
<< " New value: " << newDebugValue << endl
<< endl;
Foam::debug::debugSwitches().set(key, newDebugValue);
std::list<controlSwitches<int> *> curList = runTimeDebugSwitchValues[key];
// Modify all entries for this key
forAllIter(std::list<controlSwitches<int> *>, curList, iterI)
*(*iterI) = newDebugValue;
}
else
{
// Usage of non-existent DebugSwitches: best to abort right away
SortableList<Foam::word> sortedValidKeys(runTimeDebugSwitchValues.size());
int i=0;
forAllIter(ListDebugControlSwitches, runTimeDebugSwitchValues, iterI)
{
sortedValidKeys[i++] = iterI->first;
}
sortedValidKeys.sort();
FatalError
<< "Usage of non-existent DebugSwitches: " << key
<< endl << endl
<< "Valid entries for this application are: " << sortedValidKeys
<< exit(FatalError);
}
}
else
{
FatalError
<< "No DebugSwitches values are available for this application."
<< exit(FatalError);
}
}
break;
case INFOSWITCHES:
{
if (infoSwitchValues_)
{
ListInfoControlSwitches& runTimeInfoSwitchValues = *infoSwitchValues_;
label oldInfoValue;
label newInfoValue;
isskv >> newInfoValue;
if(Foam::debug::infoSwitches().readIfPresent(key, oldInfoValue))
{
Info << endl
<< "Warning: Modification of InfoSwitch: " << key << endl
<< " Old value: " << oldInfoValue << endl
<< " New value: " << newInfoValue << endl
<< endl;
Foam::debug::infoSwitches().set(key, newInfoValue);
std::list<controlSwitches<int> *> curList = runTimeInfoSwitchValues[key];
// Modify all entries for this key
forAllIter(std::list<controlSwitches<int> *>, curList, iterI)
*(*iterI) = newInfoValue;
}
else
{
// Usage of non-existent InfoSwitches: best to abort right away
SortableList<Foam::word> sortedValidKeys(runTimeInfoSwitchValues.size());
int i=0;
forAllIter(ListInfoControlSwitches, runTimeInfoSwitchValues, iterI)
{
sortedValidKeys[i++] = iterI->first;
}
sortedValidKeys.sort();
FatalError
<< "Usage of non-existent InfoSwitches: " << key
<< endl << endl
<< "Valid entries for this application are: " << sortedValidKeys
<< exit(FatalError);
}
}
else
{
FatalError
<< "No InfoSwitches values are available for this application."
<< exit(FatalError);
}
}
break;
case OPTIMISATIONSWITCHES:
{
if (optimisationSwitchValues_)
{
ListOptimisationControlSwitches& runTimeOptimisationSwitchValues = *optimisationSwitchValues_;
label oldOptimisationValue;
label newOptimisationValue;
isskv >> newOptimisationValue;
if(Foam::debug::optimisationSwitches().readIfPresent(key, oldOptimisationValue))
{
Info << endl
<< "Warning: Modification of OptimisationSwitch value: " << key << endl
<< " Old value: " << oldOptimisationValue << endl
<< " New value: " << newOptimisationValue << endl
<< endl;
Foam::debug::optimisationSwitches().set(key, newOptimisationValue);
std::list<controlSwitches<int> *> curList = runTimeOptimisationSwitchValues[key];
// Modify all entries for this key
forAllIter(std::list<controlSwitches<int> *>, curList, iterI)
*(*iterI) = newOptimisationValue;
}
else
{
// Usage of non-existent OptimisationSwitches: best to abort right away
SortableList<Foam::word> sortedValidKeys(runTimeOptimisationSwitchValues.size());
int i=0;
forAllIter(ListOptimisationControlSwitches, runTimeOptimisationSwitchValues, iterI)
{
sortedValidKeys[i++] = iterI->first;
}
sortedValidKeys.sort();
FatalError
<< "Usage of non-existent OptimisationSwitches value: " << key
<< endl << endl
<< "Valid entries for this application are: " << sortedValidKeys
<< exit(FatalError);
}
}
else
{
FatalError
<< "No OptimisationSwitches values are available for this application."
<< exit(FatalError);
}
}
break;
case TOLERANCES:
{
if (tolerancesSwitchValues_)
{
ListTolerancesControlSwitches& runTimeTolerancesSwitchValues = *tolerancesSwitchValues_;
scalar oldTolerancesValue;
scalar newTolerancesValue;
isskv >> newTolerancesValue;
if(Foam::debug::tolerances().readIfPresent(key, oldTolerancesValue))
{
Info << endl
<< "Warning: Modification of Tolerance value: " << key << endl
<< " Old value: " << oldTolerancesValue << endl
<< " New value: " << newTolerancesValue << endl
<< endl;
Foam::debug::tolerances().set(key, newTolerancesValue);
std::list<controlSwitches<scalar> *> curList = runTimeTolerancesSwitchValues[key];
// Modify all entries for this key
forAllIter(std::list<controlSwitches<scalar> *>, curList, iterI)
*(*iterI) = newTolerancesValue;
}
else
{
// Usage of non-existent Tolerances: best to abort right away
SortableList<Foam::word> sortedValidKeys(runTimeTolerancesSwitchValues.size());
int i=0;
forAllIter(ListTolerancesControlSwitches, runTimeTolerancesSwitchValues, iterI)
{
sortedValidKeys[i++] = iterI->first;
}
sortedValidKeys.sort();
FatalError
<< "Usage of non-existent Tolerances value: " << key
<< endl << endl
<< "Valid entries for this application are: " << sortedValidKeys
<< exit(FatalError);
}
}
else
{
FatalError
<< "No Tolerances values are available for this application."
<< exit(FatalError);
}
}
break;
case DIMENSIONEDCONSTANTS:
{
if (constantsSwitchValues_)
{
ListConstantsControlSwitches& runTimeConstantsSwitchValues = *constantsSwitchValues_;
scalar oldDimensionedConstantsValue;
scalar newDimensionedConstantsValue;
isskv >> newDimensionedConstantsValue;
if(Foam::dimensionedConstants().readIfPresent(key, oldDimensionedConstantsValue))
{
Info << endl
<< "Warning: Modification of DimensionedConstant: " << key << endl
<< " Old value: " << oldDimensionedConstantsValue << endl
<< " New value: " << newDimensionedConstantsValue << endl
<< endl;
Foam::dimensionedConstants().set(key, newDimensionedConstantsValue);
std::list<controlSwitches<scalar> *> curList = runTimeConstantsSwitchValues[key];
// Modify all entries for this key
forAllIter(std::list<controlSwitches<scalar> *>, curList, iterI)
*(*iterI) = newDimensionedConstantsValue;
}
else
{
// Usage of non-existent DimensionedConstants: best to abort right away
SortableList<Foam::word> sortedValidKeys(runTimeConstantsSwitchValues.size());
int i=0;
forAllIter(ListConstantsControlSwitches, runTimeConstantsSwitchValues, iterI)
{
sortedValidKeys[i++] = iterI->first;
}
sortedValidKeys.sort();
FatalError
<< "Usage of non-existent DimensionedConstants: " << key
<< endl << endl
<< "Valid entries for this application are: " << sortedValidKeys
<< exit(FatalError);
}
}
else
{
FatalError
<< "No DimensionedConstants values are available for this application."
<< exit(FatalError);
}
}
break;
default:
break;
}
}
}
}
// ************************************************************************* // // ************************************************************************* //

View file

@ -47,6 +47,16 @@ class dictionary;
namespace debug namespace debug
{ {
//- Define central control dictionary switchSet
enum globalControlDictSwitchSet
{
DEBUGSWITCHES,
INFOSWITCHES,
OPTIMISATIONSWITCHES,
TOLERANCES,
DIMENSIONEDCONSTANTS
};
//- The central control dictionary. //- The central control dictionary.
// Located in $WM_PROJECT_DIR/etc // Located in $WM_PROJECT_DIR/etc
// @sa Foam::findEtcFile() // @sa Foam::findEtcFile()
@ -64,21 +74,35 @@ namespace debug
//- The Tolerances sub-dictionary in the central controlDict. //- The Tolerances sub-dictionary in the central controlDict.
dictionary& tolerances(); dictionary& tolerances();
//- The DimensionedConstants sub-dictionary in the central controlDict.
dictionary& constants();
//- Lookup debug switch or add default value. //- Lookup debug switch or add default value.
int debugSwitch(const char* name, const int defaultValue = 0); int debugSwitchFromDict(const char* name, const int defaultValue = 0);
//- Lookup info switch or add default value. //- Lookup info switch or add default value.
int infoSwitch(const char* name, const int defaultValue = 0); int infoSwitchFromDict(const char* name, const int defaultValue = 0);
//- Lookup optimisation switch or add default value. //- Lookup optimisation switch or add default value.
int optimisationSwitch(const char* name, const int defaultValue = 0); int optimisationSwitchFromDict(const char* name, const int defaultValue = 0);
//- Lookup tolerances switch or add default value. //- Lookup tolerances switch or add default value.
double tolerances(const char* name, const double defaultValue = 0); double tolerancesFromDict(const char* name, const double defaultValue = 0);
//- Lookup tolerances switch or add default value.
double constantsFromDict(const char* name, const double defaultValue = 0);
//- Internal function to lookup a sub-dictionary from controlDict. //- Internal function to lookup a sub-dictionary from controlDict.
dictionary& switchSet(const char* subDictName, dictionary*& subDictPtr); dictionary& switchSet(const char* subDictName, dictionary*& subDictPtr);
//- Update central controlDict variables
// supported keyValues format: key1=value1,key2=value2
void updateCentralDictVars
(
globalControlDictSwitchSet centralDictSwitchSetName,
Foam::string keyValues
);
} // End namespace debug } // End namespace debug

View file

@ -53,6 +53,7 @@ SourceFiles
#include "intersection.H" #include "intersection.H"
#include "point2D.H" #include "point2D.H"
#include "NamedEnum.H" #include "NamedEnum.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -188,13 +189,13 @@ class GGIInterpolation
// Private static data // Private static data
//- Facet area error tolerance //- Facet area error tolerance
static const scalar areaErrorTol_; static const debug::tolerancesSwitch areaErrorTol_;
//- Facet normal featureCos criteria //- Facet normal featureCos criteria
static const scalar featureCosTol_; static const debug::tolerancesSwitch featureCosTol_;
//- Facet bound box extension factor //- Facet bound box extension factor
static const scalar faceBoundBoxExtendSpanFraction_; static const debug::tolerancesSwitch faceBoundBoxExtendSpanFraction_;
//- The next 3 attributes are parameters controlling the creation //- The next 3 attributes are parameters controlling the creation
// of an octree search engine for the GGI facets neighbourhood // of an octree search engine for the GGI facets neighbourhood
@ -218,13 +219,13 @@ class GGIInterpolation
// //
//- Octree search: minNlevel parameter for octree constructor //- Octree search: minNlevel parameter for octree constructor
static const label octreeSearchMinNLevel_; static const Foam::debug::optimisationSwitch octreeSearchMinNLevel_;
//- Octree search: maxLeafRatio parameter for octree constructor //- Octree search: maxLeafRatio parameter for octree constructor
static const scalar octreeSearchMaxLeafRatio_; static const Foam::debug::optimisationSwitch octreeSearchMaxLeafRatio_;
//- Octree search: maxShapeRatio parameter for octree constructor //- Octree search: maxShapeRatio parameter for octree constructor
static const scalar octreeSearchMaxShapeRatio_; static const Foam::debug::optimisationSwitch octreeSearchMaxShapeRatio_;
// Private Member Functions // Private Member Functions

View file

@ -184,8 +184,8 @@ GGIInterpolation<MasterPatch, SlavePatch>::polygonIntersection
if if
( (
mag(intersectionArea/clippingArea) < areaErrorTol_ mag(intersectionArea/clippingArea) < areaErrorTol_()
|| mag(intersectionArea/subjectArea) < areaErrorTol_ || mag(intersectionArea/subjectArea) < areaErrorTol_()
) )
{ {
WarningIn WarningIn
@ -232,7 +232,7 @@ GGIInterpolation<MasterPatch, SlavePatch>::isVertexInsidePolygon
// We use distErrorTol_ to evaluate a distance factor called // We use distErrorTol_ to evaluate a distance factor called
// epsilon. That epsilon factor will be used to detect if a point // epsilon. That epsilon factor will be used to detect if a point
// is on a vertex or an edge. // is on a vertex or an edge.
const scalar distErrorTol = sqrt(areaErrorTol_); const scalar distErrorTol = sqrt(areaErrorTol_());
HormannAgathos pip(clippingPolygon, distErrorTol); HormannAgathos pip(clippingPolygon, distErrorTol);
@ -303,7 +303,7 @@ GGIInterpolation<MasterPatch, SlavePatch>::clipPolygon2DSutherlandHodgman
( (
clippingPolygon, clippingPolygon,
subjectPolygon, subjectPolygon,
sqrt(areaErrorTol_) // = distErrorTol sqrt(areaErrorTol_()) // = distErrorTol
).evaluate(); ).evaluate();
} }

View file

@ -44,31 +44,35 @@ namespace Foam
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const scalar const Foam::debug::tolerancesSwitch
GGIInterpolation<MasterPatch, SlavePatch>::faceBoundBoxExtendSpanFraction_ GGIInterpolation<MasterPatch, SlavePatch>::faceBoundBoxExtendSpanFraction_
( (
debug::tolerances("GGIFaceBoundBoxExtendSpanFraction", 1.0e-2) "GGIFaceBoundBoxExtendSpanFraction",
1.0e-2
); );
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const label const Foam::debug::optimisationSwitch
GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMinNLevel_ GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMinNLevel_
( (
debug::optimisationSwitch("GGIOctreeSearchMinNLevel", 3) "GGIOctreeSearchMinNLevel",
3
); );
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const scalar const Foam::debug::optimisationSwitch
GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMaxLeafRatio_ GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMaxLeafRatio_
( (
debug::optimisationSwitch("GGIOctreeSearchMaxLeafRatio", 3) "GGIOctreeSearchMaxLeafRatio",
3
); );
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const scalar const Foam::debug::optimisationSwitch
GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMaxShapeRatio_ GGIInterpolation<MasterPatch, SlavePatch>::octreeSearchMaxShapeRatio_
( (
debug::optimisationSwitch("GGIOctreeSearchMaxShapeRatio", 1) "GGIOctreeSearchMaxShapeRatio",
1
); );
@ -397,7 +401,7 @@ void GGIInterpolation<MasterPatch, SlavePatch>::findNeighboursAABB
scalar featureCos = scalar featureCos =
masterFaceNormals[faceMi] & slaveNormals[faceSi]; masterFaceNormals[faceMi] & slaveNormals[faceSi];
if (mag(featureCos) > featureCosTol_) if (mag(featureCos) > featureCosTol_())
{ {
candidateMasterNeighbors[faceMi].append(faceSi); candidateMasterNeighbors[faceMi].append(faceSi);
} }
@ -440,7 +444,7 @@ void GGIInterpolation<MasterPatch, SlavePatch>::findNeighboursBBOctree
treeBoundBox bbFaceMaster(facePoints); treeBoundBox bbFaceMaster(facePoints);
lmasterFaceBB[faceMi] = lmasterFaceBB[faceMi] =
bbFaceMaster.extend(faceBoundBoxExtendSpanFraction_); bbFaceMaster.extend(faceBoundBoxExtendSpanFraction_());
} }
// Initialize the list of slave patch faces bounding box // Initialize the list of slave patch faces bounding box
@ -484,7 +488,7 @@ void GGIInterpolation<MasterPatch, SlavePatch>::findNeighboursBBOctree
treeBoundBox bbFaceSlave(facePoints); treeBoundBox bbFaceSlave(facePoints);
lslaveFaceBB[faceSi] = lslaveFaceBB[faceSi] =
bbFaceSlave.extend(faceBoundBoxExtendSpanFraction_); bbFaceSlave.extend(faceBoundBoxExtendSpanFraction_());
} }
// Create the slave octreeData, using the boundBox flavor // Create the slave octreeData, using the boundBox flavor
@ -499,9 +503,9 @@ void GGIInterpolation<MasterPatch, SlavePatch>::findNeighboursBBOctree
( (
slaveOverallBB, // overall search domain slaveOverallBB, // overall search domain
slaveDataBB, slaveDataBB,
octreeSearchMinNLevel_, // min number of levels octreeSearchMinNLevel_(), // min number of levels
octreeSearchMaxLeafRatio_, // max avg. size of leaves octreeSearchMaxLeafRatio_(), // max avg. size of leaves
octreeSearchMaxShapeRatio_ // max avg. duplicity. octreeSearchMaxShapeRatio_() // max avg. duplicity.
); );
const vectorField& masterFaceNormals = masterPatch_.faceNormals(); const vectorField& masterFaceNormals = masterPatch_.faceNormals();
@ -538,7 +542,7 @@ void GGIInterpolation<MasterPatch, SlavePatch>::findNeighboursBBOctree
scalar featureCos = scalar featureCos =
masterFaceNormals[faceMi] & slaveNormals[faceSi]; masterFaceNormals[faceMi] & slaveNormals[faceSi];
if (mag(featureCos) > featureCosTol_) if (mag(featureCos) > featureCosTol_())
{ {
candidateMasterNeighbors[faceMi].append(faceSi); candidateMasterNeighbors[faceMi].append(faceSi);
} }

View file

@ -37,7 +37,6 @@ Modification by:
#include "objectHit.H" #include "objectHit.H"
#include "boolList.H" #include "boolList.H"
#include "DynamicList.H" #include "DynamicList.H"
#include "dimensionedConstants.H" #include "dimensionedConstants.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -48,19 +47,21 @@ namespace Foam
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const scalar GGIInterpolation<MasterPatch, SlavePatch>::areaErrorTol_ const Foam::debug::tolerancesSwitch
GGIInterpolation<MasterPatch, SlavePatch>::areaErrorTol_
( (
debug::tolerances("GGIAreaErrorTol", 1.0e-8) "GGIAreaErrorTol",
1.0e-8
); );
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
const scalar GGIInterpolation<MasterPatch, SlavePatch>::featureCosTol_ const Foam::debug::tolerancesSwitch
GGIInterpolation<MasterPatch, SlavePatch>::featureCosTol_
( (
debug::tolerances("GGIFeatureCosTol", 0.8) "GGIFeatureCosTol",
0.8
); );
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template<class MasterPatch, class SlavePatch> template<class MasterPatch, class SlavePatch>
@ -354,7 +355,7 @@ void GGIInterpolation<MasterPatch, SlavePatch>::calcAddressing() const
( (
masterPointsInUV, masterPointsInUV,
neighbPointsInUV, neighbPointsInUV,
sqrt(areaErrorTol_) // distErrorTol sqrt(areaErrorTol_()) // distErrorTol
) )
) )
{ {

View file

@ -112,7 +112,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcPointAddressing() const
// Grab hit point // Grab hit point
hitPoint = curHit.hitPoint(); hitPoint = curHit.hitPoint();
} }
else if (projectionTol_ > SMALL) else if (projectionTol_() > SMALL)
{ {
// Check for a near miss // Check for a near miss
pointHit ph = pointHit ph =
@ -162,7 +162,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcPointAddressing() const
); );
} }
if (dist < minEdgeLength*projectionTol_) if (dist < minEdgeLength*projectionTol_())
{ {
// This point is being corrected // This point is being corrected
doWeights = true; doWeights = true;
@ -304,7 +304,7 @@ void PatchToPatchInterpolation<FromPatch, ToPatch>::calcFaceAddressing() const
if if
( (
m < directHitTol_ // Direct hit m < directHitTol_() // Direct hit
|| neighbours.empty() || neighbours.empty()
) )
{ {

View file

@ -38,19 +38,21 @@ namespace Foam
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template<class FromPatch, class ToPatch> template<class FromPatch, class ToPatch>
scalar PatchToPatchInterpolation<FromPatch, ToPatch>::directHitTol_ const Foam::debug::tolerancesSwitch
PatchToPatchInterpolation<FromPatch, ToPatch>::directHitTol_
( (
debug::tolerances("patchToPatchDirectHit", 1e-5) "patchToPatchDirectHit",
1e-5
); );
template<class FromPatch, class ToPatch> template<class FromPatch, class ToPatch>
scalar PatchToPatchInterpolation<FromPatch, ToPatch>::projectionTol_ const Foam::debug::tolerancesSwitch
PatchToPatchInterpolation<FromPatch, ToPatch>::projectionTol_
( (
debug::tolerances("patchToPatchProjectionTol", 0.05) "patchToPatchProjectionTol",
0.05
); );
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template<class FromPatch, class ToPatch> template<class FromPatch, class ToPatch>
@ -109,7 +111,8 @@ PatchToPatchInterpolation<FromPatch, ToPatch>::PatchToPatchInterpolation
faceAddressingPtr_(NULL), faceAddressingPtr_(NULL),
faceWeightsPtr_(NULL), faceWeightsPtr_(NULL),
faceDistancePtr_(NULL) faceDistancePtr_(NULL)
{} {
}
// Construct as copy // Construct as copy

View file

@ -45,6 +45,7 @@ SourceFiles
#include "FieldFields.H" #include "FieldFields.H"
#include "faceList.H" #include "faceList.H"
#include "intersection.H" #include "intersection.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -86,10 +87,10 @@ class PatchToPatchInterpolation
//- Relative merge tolerance for projected points missing the target //- Relative merge tolerance for projected points missing the target
// Expressed as the fraction of min involved edge size // Expressed as the fraction of min involved edge size
static scalar projectionTol_; static const Foam::debug::tolerancesSwitch projectionTol_;
//- Direct hit tolerance //- Direct hit tolerance
static scalar directHitTol_; static const Foam::debug::tolerancesSwitch directHitTol_;
// Point addressing // Point addressing

View file

@ -38,9 +38,11 @@ Description
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template<class Type> template<class Type>
const Foam::label Foam::BlockLduMatrix<Type>::fixFillIn const Foam::debug::optimisationSwitch
Foam::BlockLduMatrix<Type>::fixFillIn
( (
debug::optimisationSwitch("matrixConstraintFillIn", 4) "matrixConstraintFillIn",
4
); );
@ -56,7 +58,7 @@ Foam::BlockLduMatrix<Type>::BlockLduMatrix(const lduMesh& ldu)
interfaces_(ldu.interfaces().size()), interfaces_(ldu.interfaces().size()),
coupleUpper_(ldu.lduAddr().nPatches()), coupleUpper_(ldu.lduAddr().nPatches()),
coupleLower_(ldu.lduAddr().nPatches()), coupleLower_(ldu.lduAddr().nPatches()),
fixedEqns_(ldu.lduAddr().size()/fixFillIn) fixedEqns_(ldu.lduAddr().size()/fixFillIn())
{ {
const lduAddressing& addr = ldu.lduAddr(); const lduAddressing& addr = ldu.lduAddr();
@ -65,6 +67,7 @@ Foam::BlockLduMatrix<Type>::BlockLduMatrix(const lduMesh& ldu)
coupleUpper_.set(i, new CoeffField<Type>(addr.patchAddr(i).size())); coupleUpper_.set(i, new CoeffField<Type>(addr.patchAddr(i).size()));
coupleLower_.set(i, new CoeffField<Type>(addr.patchAddr(i).size())); coupleLower_.set(i, new CoeffField<Type>(addr.patchAddr(i).size()));
} }
} }

View file

@ -53,6 +53,7 @@ SourceFiles
#include "HashSet.H" #include "HashSet.H"
#include "BlockLduInterfaceFieldPtrsList.H" #include "BlockLduInterfaceFieldPtrsList.H"
#include "Map.H" #include "Map.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -135,7 +136,7 @@ private:
//- Matrix constraint fill-in //- Matrix constraint fill-in
// Equals to the estimated fraction of fixed nodes in the matrix // Equals to the estimated fraction of fixed nodes in the matrix
static const label fixFillIn; static const Foam::debug::optimisationSwitch fixFillIn;
// Private member functions // Private member functions

View file

@ -33,7 +33,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
int Foam::solution::debug(::Foam::debug::debugSwitch("solution", 0)); int Foam::solution::debug(::Foam::debug::debugSwitchFromDict("solution", 0));
// List of sub-dictionaries to rewrite // List of sub-dictionaries to rewrite
//! @cond localScope //! @cond localScope

View file

@ -30,7 +30,7 @@ License
const char* const Foam::cell::typeName = "cell"; const char* const Foam::cell::typeName = "cell";
int Foam::cell::debug(debug::debugSwitch("cell", 0)); int Foam::cell::debug(debug::debugSwitchFromDict("cell", 0));
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //

View file

@ -42,9 +42,11 @@ License
defineTypeNameAndDebug(Foam::globalMeshData, 0); defineTypeNameAndDebug(Foam::globalMeshData, 0);
// Geometric matching tolerance. Factor of mesh bounding box. // Geometric matching tolerance. Factor of mesh bounding box.
const Foam::scalar Foam::globalMeshData::matchTol_ const Foam::debug::tolerancesSwitch
Foam::globalMeshData::matchTol_
( (
debug::tolerances("globalMeshDataMatchTol", 1e-8) "globalMeshDataMatchTol",
1e-8
); );
@ -661,7 +663,7 @@ Foam::pointField Foam::globalMeshData::geometricSharedPoints() const
combineReduce(sharedPoints, plusEqOp<pointField>()); combineReduce(sharedPoints, plusEqOp<pointField>());
// Merge tolerance // Merge tolerance
scalar tolDim = matchTol_*bb_.mag(); scalar tolDim = matchTol_()*bb_.mag();
// And see how many are unique // And see how many are unique
labelList pMap; labelList pMap;
@ -729,7 +731,7 @@ void Foam::globalMeshData::updateMesh()
// Note: boundBox does reduce // Note: boundBox does reduce
bb_ = boundBox(mesh_.points()); bb_ = boundBox(mesh_.points());
scalar tolDim = matchTol_*bb_.mag(); scalar tolDim = matchTol_()*bb_.mag();
if (debug) if (debug)
{ {

View file

@ -75,6 +75,7 @@ SourceFiles
#include "Switch.H" #include "Switch.H"
#include "processorTopology.H" #include "processorTopology.H"
#include "labelPair.H" #include "labelPair.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -230,7 +231,7 @@ public:
// Static data members // Static data members
//- Geomtric tolerance (fraction of bounding box) //- Geomtric tolerance (fraction of bounding box)
static const Foam::scalar matchTol_; static const Foam::debug::tolerancesSwitch matchTol_;
// Constructors // Constructors

View file

@ -82,7 +82,7 @@ protected:
const vectorField& nf, const vectorField& nf,
const vectorField& nr, const vectorField& nr,
const scalarField& smallDist, const scalarField& smallDist,
const scalar absTol = matchTol_ const scalar absTol = matchTol_()
) const; ) const;
//- Initialise the calculation of the patch addressing //- Initialise the calculation of the patch addressing

View file

@ -165,7 +165,7 @@ void Foam::cyclicPolyPatch::calcTransforms() const
else if else if
( (
mag(magSf - nbrMagSf)/avSf mag(magSf - nbrMagSf)/avSf
> polyPatch::matchTol_ > polyPatch::matchTol_()
) )
{ {
// Error in area matching. Find largest error // Error in area matching. Find largest error
@ -280,7 +280,7 @@ void Foam::cyclicPolyPatch::calcTransforms() const
} }
// Check for error in face matching // Check for error in face matching
if (maxMatchError > polyPatch::matchTol_) if (maxMatchError > polyPatch::matchTol_())
{ {
label nbrFacei = errorFace + size()/2; label nbrFacei = errorFace + size()/2;
scalar magSf = mag(half0Normals[errorFace]); scalar magSf = mag(half0Normals[errorFace]);
@ -298,7 +298,7 @@ void Foam::cyclicPolyPatch::calcTransforms() const
<< "patch:" << name() << "patch:" << name()
<< " my area:" << magSf << " my area:" << magSf
<< " neighbour area:" << nbrMagSf << " neighbour area:" << nbrMagSf
<< " matching tolerance:" << polyPatch::matchTol_ << " matching tolerance:" << polyPatch::matchTol_()
<< endl << endl
<< "Mesh face:" << start() + errorFace << "Mesh face:" << start() + errorFace
<< " vertices:" << " vertices:"
@ -384,7 +384,7 @@ void Foam::cyclicPolyPatch::calcTransforms() const
// Check max distance between face centre and // Check max distance between face centre and
// transformed face centre // transformed face centre
if (maxRelDistance > sqrt(polyPatch::matchTol_)) if (maxRelDistance > sqrt(polyPatch::matchTol_()))
{ {
SeriousErrorIn SeriousErrorIn
( (
@ -633,7 +633,7 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors
} }
} }
if (mag(n0 & n1) < 1 - polyPatch::matchTol_) if (mag(n0 & n1) < 1 - polyPatch::matchTol_())
{ {
if (debug) if (debug)
{ {

View file

@ -209,7 +209,7 @@ void Foam::processorPolyPatch::calcGeometry()
faceNormals[facei] = point(1, 0, 0); faceNormals[facei] = point(1, 0, 0);
nbrFaceNormals[facei] = faceNormals[facei]; nbrFaceNormals[facei] = faceNormals[facei];
} }
else if (mag(magSf - nbrMagSf)/avSf > polyPatch::matchTol_) else if (mag(magSf - nbrMagSf)/avSf > polyPatch::matchTol_())
{ {
FatalErrorIn FatalErrorIn
( (
@ -220,7 +220,7 @@ void Foam::processorPolyPatch::calcGeometry()
<< "patch: " << name() << "patch: " << name()
<< " my area: " << magSf << " my area: " << magSf
<< " neighbour area: " << nbrMagSf << " neighbour area: " << nbrMagSf
<< " matching tolerance: " << polyPatch::matchTol_ << " matching tolerance: " << polyPatch::matchTol_()
<< endl << endl
<< "Mesh face: " << start()+facei << "Mesh face: " << start()+facei
<< " vertices: " << " vertices: "

View file

@ -41,7 +41,7 @@ namespace Foam
int polyPatch::disallowGenericPolyPatch int polyPatch::disallowGenericPolyPatch
( (
debug::debugSwitch("disallowGenericPolyPatch", 0) debug::debugSwitchFromDict("disallowGenericPolyPatch", 0)
); );
defineRunTimeSelectionTable(polyPatch, word); defineRunTimeSelectionTable(polyPatch, word);
@ -52,12 +52,13 @@ namespace Foam
} }
const Foam::scalar Foam::polyPatch::matchTol_ const Foam::debug::tolerancesSwitch
Foam::polyPatch::matchTol_
( (
debug::tolerances("patchFaceMatchTol", 1e-3) "patchFaceMatchTol",
1e-3
); );
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
void Foam::polyPatch::movePoints(const pointField& p) void Foam::polyPatch::movePoints(const pointField& p)
@ -253,7 +254,7 @@ Foam::scalarField Foam::polyPatch::calcFaceTol
maxLen = max(maxLen, mag(points[f[fp]] - cc)); maxLen = max(maxLen, mag(points[f[fp]] - cc));
} }
tols[faceI] = matchTol_*maxLen; tols[faceI] = matchTol_()*maxLen;
} }
return tols; return tols;

View file

@ -51,6 +51,7 @@ SourceFiles
#include "primitivePatch.H" #include "primitivePatch.H"
#include "typeInfo.H" #include "typeInfo.H"
#include "runTimeSelectionTables.H" #include "runTimeSelectionTables.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -230,8 +231,7 @@ public:
//- Relative tolerance (for geometric matching) //- Relative tolerance (for geometric matching)
// Calculated as a factor of maximum edge length per face. // Calculated as a factor of maximum edge length per face.
// HJ, 21/Dec/2006 // HJ, 21/Dec/2006
static const scalar matchTol_; static const Foam::debug::tolerancesSwitch matchTol_;
// Declare run-time constructor selection tables // Declare run-time constructor selection tables

View file

@ -24,6 +24,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "Map.H" #include "Map.H"
#include "debug.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -34,11 +35,12 @@ template
class PointField, class PointField,
class PointType class PointType
> >
const bool const Foam::debug::optimisationSwitch
Foam::PrimitivePatch<Face, FaceList, PointField, PointType>:: Foam::PrimitivePatch<Face, FaceList, PointField, PointType>::
nSquaredProjection_ nSquaredProjection_
( (
debug::optimisationSwitch("nSquaredProjection", 0) > 0 "nSquaredProjection",
0
); );
@ -77,7 +79,8 @@ PrimitivePatch
faceCentresPtr_(NULL), faceCentresPtr_(NULL),
faceNormalsPtr_(NULL), faceNormalsPtr_(NULL),
pointNormalsPtr_(NULL) pointNormalsPtr_(NULL)
{} {
}
template template

View file

@ -57,6 +57,7 @@ SourceFiles
#include "point.H" #include "point.H"
#include "intersection.H" #include "intersection.H"
#include "HashSet.H" #include "HashSet.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -177,7 +178,7 @@ private:
// Static Private Data // Static Private Data
static const bool nSquaredProjection_; static const Foam::debug::optimisationSwitch nSquaredProjection_;
// Private Member Functions // Private Member Functions

View file

@ -399,7 +399,7 @@ projectFaceCentres
// Force the full search for the first point to ensure good // Force the full search for the first point to ensure good
// starting face // starting face
if (faceI == 0 || nSquaredProjection_) if (faceI == 0 || nSquaredProjection_() > 0)
{ {
doNSquaredSearch = true; doNSquaredSearch = true;
} }

View file

@ -66,6 +66,7 @@ SourceFiles
#include "HashSet.H" #include "HashSet.H"
#include "Map.H" #include "Map.H"
#include "EdgeMap.H" #include "EdgeMap.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -321,22 +322,22 @@ public:
//- Cell closedness warning threshold //- Cell closedness warning threshold
// set as the fraction of un-closed area to closed area // set as the fraction of un-closed area to closed area
static scalar closedThreshold_; static const Foam::debug::tolerancesSwitch closedThreshold_;
//- Aspect ratio warning threshold //- Aspect ratio warning threshold
static scalar aspectThreshold_; static const Foam::debug::tolerancesSwitch aspectThreshold_;
//- Non-orthogonality warning threshold in deg //- Non-orthogonality warning threshold in deg
static scalar nonOrthThreshold_; static Foam::debug::tolerancesSwitch nonOrthThreshold_;
//- Skewness warning threshold //- Skewness warning threshold
static scalar skewThreshold_; static const Foam::debug::tolerancesSwitch skewThreshold_;
//- Face angle threshold //- Face angle threshold
static scalar faceAngleThreshold_; static Foam::debug::tolerancesSwitch faceAngleThreshold_;
//- Face flatness threshold //- Face flatness threshold
static scalar faceFlatnessThreshold_; static const Foam::debug::tolerancesSwitch faceFlatnessThreshold_;
// Constructors // Constructors

View file

@ -31,35 +31,46 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const Foam::debug::tolerancesSwitch
Foam::scalar Foam::primitiveMesh::closedThreshold_ Foam::primitiveMesh::closedThreshold_
( (
debug::tolerances("primitiveMeshClosedThreshold", 1e-6) "primitiveMeshClosedThreshold",
1e-6
); );
Foam::scalar Foam::primitiveMesh::aspectThreshold_ const Foam::debug::tolerancesSwitch
Foam::primitiveMesh::aspectThreshold_
( (
debug::tolerances("primitiveMeshAspectThreshold", 1000) "primitiveMeshAspectThreshold",
1000
); );
Foam::scalar Foam::primitiveMesh::nonOrthThreshold_ // deg Foam::debug::tolerancesSwitch
Foam::primitiveMesh::nonOrthThreshold_ // deg
( (
debug::tolerances("primitiveMeshNonOrthThreshold", 70) "primitiveMeshNonOrthThreshold",
70
); );
Foam::scalar Foam::primitiveMesh::skewThreshold_ const Foam::debug::tolerancesSwitch
Foam::primitiveMesh::skewThreshold_
( (
debug::tolerances("primitiveMeshSkewThreshold", 4) "primitiveMeshSkewThreshold",
4
); );
Foam::scalar Foam::primitiveMesh::faceAngleThreshold_ Foam::debug::tolerancesSwitch
Foam::primitiveMesh::faceAngleThreshold_
( (
debug::tolerances("primitiveMeshFaceAngleThreshold", 10) "primitiveMeshFaceAngleThreshold",
10
); );
Foam::scalar Foam::primitiveMesh::faceFlatnessThreshold_ const Foam::debug::tolerancesSwitch
Foam::primitiveMesh::faceFlatnessThreshold_
( (
debug::tolerances("primitiveMeshFaceFlatnessThreshold", 0.8) "primitiveMeshFaceFlatnessThreshold",
0.8
); );
@ -93,12 +104,12 @@ bool Foam::primitiveMesh::checkClosedBoundary(const bool report) const
vector openness = sumClosed/(sumMagClosedBoundary + VSMALL); vector openness = sumClosed/(sumMagClosedBoundary + VSMALL);
if (cmptMax(cmptMag(openness)) > closedThreshold_) if (cmptMax(cmptMag(openness)) > closedThreshold_())
{ {
if (debug || report) if (debug || report)
{ {
Info<< " ***Boundary openness " << openness Info<< " ***Boundary openness " << openness
<< " Threshold = " << closedThreshold_ << " Threshold = " << closedThreshold_()
<< " possible hole in boundary description." << " possible hole in boundary description."
<< endl; << endl;
} }
@ -110,7 +121,7 @@ bool Foam::primitiveMesh::checkClosedBoundary(const bool report) const
if (debug || report) if (debug || report)
{ {
Info<< " Boundary openness " << openness Info<< " Boundary openness " << openness
<< " Threshold = " << closedThreshold_ << " Threshold = " << closedThreshold_()
<< " OK." << " OK."
<< endl; << endl;
} }
@ -245,7 +256,7 @@ bool Foam::primitiveMesh::checkClosedCells
maxOpennessCell = max(maxOpennessCell, maxOpenness); maxOpennessCell = max(maxOpennessCell, maxOpenness);
if (maxOpenness > closedThreshold_) if (maxOpenness > closedThreshold_())
{ {
if (setPtr) if (setPtr)
{ {
@ -267,7 +278,7 @@ bool Foam::primitiveMesh::checkClosedCells
maxAspectRatio = max(maxAspectRatio, aspectRatio); maxAspectRatio = max(maxAspectRatio, aspectRatio);
if (aspectRatio > aspectThreshold_) if (aspectRatio > aspectThreshold_())
{ {
if (aspectSetPtr) if (aspectSetPtr)
{ {
@ -291,7 +302,7 @@ bool Foam::primitiveMesh::checkClosedCells
{ {
Info<< " ***Open cells found, max cell openness: " Info<< " ***Open cells found, max cell openness: "
<< maxOpennessCell << ", number of open cells " << nOpen << maxOpennessCell << ", number of open cells " << nOpen
<< " Threshold = " << closedThreshold_ << " Threshold = " << closedThreshold_()
<< endl; << endl;
} }
@ -305,7 +316,7 @@ bool Foam::primitiveMesh::checkClosedCells
Info<< " ***High aspect ratio cells found, Max aspect ratio: " Info<< " ***High aspect ratio cells found, Max aspect ratio: "
<< maxAspectRatio << maxAspectRatio
<< ", number of cells " << nAspect << ", number of cells " << nAspect
<< " Threshold = " << aspectThreshold_ << " Threshold = " << aspectThreshold_()
<< endl; << endl;
} }
@ -471,7 +482,7 @@ bool Foam::primitiveMesh::checkFaceOrthogonality
// Severe nonorthogonality threshold // Severe nonorthogonality threshold
const scalar severeNonorthogonalityThreshold = const scalar severeNonorthogonalityThreshold =
::cos(nonOrthThreshold_/180.0*mathematicalConstant::pi); ::cos(nonOrthThreshold_()/180.0*mathematicalConstant::pi);
scalar minDDotS = GREAT; scalar minDDotS = GREAT;
@ -536,7 +547,7 @@ bool Foam::primitiveMesh::checkFaceOrthogonality
<< ::acos(minDDotS)/mathematicalConstant::pi*180.0 << ::acos(minDDotS)/mathematicalConstant::pi*180.0
<< " average: " << << " average: " <<
::acos(sumDDotS/neiSize)/mathematicalConstant::pi*180.0 ::acos(sumDDotS/neiSize)/mathematicalConstant::pi*180.0
<< " Threshold = " << nonOrthThreshold_ << " Threshold = " << nonOrthThreshold_()
<< endl; << endl;
} }
} }
@ -707,7 +718,7 @@ bool Foam::primitiveMesh::checkFaceSkewness
// Check if the skewness vector is greater than the PN vector. // 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. // This does not cause trouble but is a good indication of a poor mesh.
if (skewness > skewThreshold_) if (skewness > skewThreshold_())
{ {
if (setPtr) if (setPtr)
{ {
@ -755,7 +766,7 @@ bool Foam::primitiveMesh::checkFaceSkewness
// Check if the skewness vector is greater than the PN vector. // 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. // This does not cause trouble but is a good indication of a poor mesh.
if (skewness > skewThreshold_) if (skewness > skewThreshold_())
{ {
if (setPtr) if (setPtr)
{ {
@ -781,7 +792,7 @@ bool Foam::primitiveMesh::checkFaceSkewness
{ {
Info<< " ***Max skewness = " << maxSkew Info<< " ***Max skewness = " << maxSkew
<< ", " << nWarnSkew << " highly skew faces detected" << ", " << nWarnSkew << " highly skew faces detected"
<< " Threshold = " << skewThreshold_ << " Threshold = " << skewThreshold_()
<< endl; << endl;
} }
@ -890,18 +901,18 @@ bool Foam::primitiveMesh::checkFaceAngles
<< "checking face angles" << endl; << "checking face angles" << endl;
} }
if (faceAngleThreshold_ < -SMALL || faceAngleThreshold_ > 180 + SMALL) if (faceAngleThreshold_() < -SMALL || faceAngleThreshold_() > 180 + SMALL)
{ {
FatalErrorIn FatalErrorIn
( (
"primitiveMesh::checkFaceAngles(const bool, labelHashSet*)" "primitiveMesh::checkFaceAngles(const bool, labelHashSet*)"
) << "faceAngleThreshold_ should be [0..180] but is now " ) << "faceAngleThreshold_ should be [0..180] but is now "
<< faceAngleThreshold_ << faceAngleThreshold_()
<< exit(FatalError); << exit(FatalError);
} }
const scalar maxSin = const scalar maxSin =
Foam::sin(faceAngleThreshold_/180.0*mathematicalConstant::pi); Foam::sin(faceAngleThreshold_()/180.0*mathematicalConstant::pi);
const pointField& p = points(); const pointField& p = points();
const faceList& fcs = faces(); const faceList& fcs = faces();
@ -1018,14 +1029,14 @@ bool Foam::primitiveMesh::checkFaceFlatness
<< "checking face flatness" << endl; << "checking face flatness" << endl;
} }
if (faceFlatnessThreshold_ < 0 || faceFlatnessThreshold_ > 1) if (faceFlatnessThreshold_() < 0 || faceFlatnessThreshold_() > 1)
{ {
FatalErrorIn FatalErrorIn
( (
"primitiveMesh::checkFaceFlatness" "primitiveMesh::checkFaceFlatness"
"(const bool, labelHashSet*)" "(const bool, labelHashSet*)"
) << "faceFlatnessThreshold_ should be [0..1] but is now " ) << "faceFlatnessThreshold_ should be [0..1] but is now "
<< faceFlatnessThreshold_ << faceFlatnessThreshold_()
<< exit(FatalError); << exit(FatalError);
} }
@ -1074,7 +1085,7 @@ bool Foam::primitiveMesh::checkFaceFlatness
minFlatness = min(minFlatness, flatness); minFlatness = min(minFlatness, flatness);
if (flatness < faceFlatnessThreshold_) if (flatness < faceFlatnessThreshold_())
{ {
nWarped++; nWarped++;
@ -1109,7 +1120,7 @@ bool Foam::primitiveMesh::checkFaceFlatness
{ {
Info<< " *There are " << nWarped Info<< " *There are " << nWarped
<< " faces with ratio between projected and actual area < " << " faces with ratio between projected and actual area < "
<< faceFlatnessThreshold_ << endl; << faceFlatnessThreshold_() << endl;
Info<< " Minimum ratio (minimum flatness, maximum warpage) = " Info<< " Minimum ratio (minimum flatness, maximum warpage) = "
<< minFlatness << endl; << minFlatness << endl;

View file

@ -29,18 +29,22 @@ Description
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const Foam::scalar Foam::intersection::planarTol_ //Foam::debug::controlSwitches<Foam::scalar>
Foam::debug::tolerancesSwitch
Foam::intersection::planarTol_
( (
debug::tolerances("intersectionPlanarTol", 0.2) "intersectionPlanarTol",
0.2
); );
//const Foam::debug::controlSwitches<Foam::scalar>
const Foam::scalar Foam::intersection::missTol_ const Foam::debug::tolerancesSwitch
Foam::intersection::missTol_
( (
debug::tolerances("intersectionMissTol", SMALL) "intersectionMissTol",
SMALL
); );
template<> template<>
const char* Foam::NamedEnum<Foam::intersection::direction, 2>::names[] = const char* Foam::NamedEnum<Foam::intersection::direction, 2>::names[] =
{ {

View file

@ -37,6 +37,7 @@ SourceFiles
#include "scalar.H" #include "scalar.H"
#include "NamedEnum.H" #include "NamedEnum.H"
#include "controlSwitches.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -59,10 +60,11 @@ public:
// intersects the triangle or not. // intersects the triangle or not.
// Adjusting the tolerance from the code does not allow it to be const // Adjusting the tolerance from the code does not allow it to be const
// HJ, 5/Jan/2008 // HJ, 5/Jan/2008
static const scalar planarTol_; //static Foam::debug::controlSwitches<scalar> planarTol_;
static Foam::debug::tolerancesSwitch planarTol_;
//- Intersection miss tolerance, of the order of 1e-15 //- Intersection miss tolerance, of the order of 1e-15
static const scalar missTol_; static const Foam::debug::tolerancesSwitch missTol_;
enum direction enum direction
@ -101,9 +103,14 @@ public:
// Ugly violence to allow tolerance to remain a const scalar // Ugly violence to allow tolerance to remain a const scalar
// HJ, 7/Sep/2008 // HJ, 7/Sep/2008
scalar oldTol = planarTol_; scalar oldTol = planarTol_();
scalar* ptPtr = const_cast<scalar*>(&planarTol_);
(*ptPtr) = t; // Is this still necessary? If not a const, then it is not a const.
// MB 18/05_2014
//scalar* ptPtr = const_cast<scalar*>(&planarTol_);
//(*ptPtr) = t;
planarTol_ = t;
return oldTol; return oldTol;
} }

View file

@ -100,20 +100,20 @@ bool triangle<Point, PointRef>::intersection
// User-controlled projection tolerance // User-controlled projection tolerance
// HJ, 23/Oct/2007 // HJ, 23/Oct/2007
if (Foam::mag(u1) < intersection::missTol_) if (Foam::mag(u1) < intersection::missTol_())
{ {
beta = u0/u2; beta = u0/u2;
if if
( (
(beta > -intersection::missTol_) (beta > -intersection::missTol_())
&& (beta < 1 + intersection::missTol_) && (beta < 1 + intersection::missTol_())
) )
{ {
alpha = (v0 - beta*v2)/v1; alpha = (v0 - beta*v2)/v1;
hit = hit =
( (
(alpha > -intersection::missTol_) (alpha > -intersection::missTol_())
&& ((alpha + beta) < 1 + intersection::missTol_) && ((alpha + beta) < 1 + intersection::missTol_())
); );
} }
} }
@ -122,15 +122,15 @@ bool triangle<Point, PointRef>::intersection
beta = (v0*u1 - u0*v1)/det; beta = (v0*u1 - u0*v1)/det;
if if
( (
(beta > -intersection::missTol_) (beta > -intersection::missTol_())
&& (beta < 1 + intersection::missTol_) && (beta < 1 + intersection::missTol_())
) )
{ {
alpha = (u0 - beta*u2)/u1; alpha = (u0 - beta*u2)/u1;
hit = hit =
( (
(alpha > -intersection::missTol_) (alpha > -intersection::missTol_())
&& ((alpha + beta) < 1 + intersection::missTol_) && ((alpha + beta) < 1 + intersection::missTol_())
); );
} }
} }
@ -552,7 +552,7 @@ inline pointHit triangle<Point, PointRef>::ray
Foam::mag(E1) Foam::mag(E1)
), ),
Foam::mag(c_ - b_) Foam::mag(c_ - b_)
)*intersection::planarTol_; )*intersection::planarTol_();
bool eligible = bool eligible =
alg == intersection::FULL_RAY alg == intersection::FULL_RAY

View file

@ -32,7 +32,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const char* const Foam::fileName::typeName = "fileName"; const char* const Foam::fileName::typeName = "fileName";
int Foam::fileName::debug(debug::debugSwitch(fileName::typeName, 0)); int Foam::fileName::debug(debug::debugSwitchFromDict(fileName::typeName, 0));
const Foam::fileName Foam::fileName::null; const Foam::fileName Foam::fileName::null;
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View file

@ -29,7 +29,7 @@ License
/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */
const char* const Foam::string::typeName = "string"; const char* const Foam::string::typeName = "string";
int Foam::string::debug(debug::debugSwitch(string::typeName, 0)); int Foam::string::debug(debug::debugSwitchFromDict(string::typeName, 0));
const Foam::string Foam::string::null; const Foam::string Foam::string::null;
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //

View file

@ -29,7 +29,7 @@ License
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
const char* const Foam::word::typeName = "word"; const char* const Foam::word::typeName = "word";
int Foam::word::debug(Foam::debug::debugSwitch(word::typeName, 0)); int Foam::word::debug(Foam::debug::debugSwitchFromDict(word::typeName, 0));
const Foam::word Foam::word::null; const Foam::word Foam::word::null;
// ************************************************************************* // // ************************************************************************* //

View file

@ -489,7 +489,8 @@ public:
template<> \ template<> \
const Foam::word Particle<Type>::typeName(#Type); \ const Foam::word Particle<Type>::typeName(#Type); \
template<> \ template<> \
int Particle<Type>::debug(Foam::debug::debugSwitch(#Type, DebugSwitch)); Foam::debug::debugSwitch \
Particle<Type>::debug(std::string(#Type), DebugSwitch);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -134,13 +134,13 @@ Foam::scalar Foam::COxidationKineticDiffusionLimitedRate<CloudType>::calculate
const scalar D0 = C1_/d*pow(0.5*(T + Tc), 0.75); const scalar D0 = C1_/d*pow(0.5*(T + Tc), 0.75);
// Kinetic rate // Kinetic rate
const scalar Rk = C2_*exp(-E_/(specie::RR*Tc)); const scalar Rk = C2_*exp(-E_/(specie::RR()*Tc));
// Particle surface area // Particle surface area
const scalar Ap = mathematicalConstant::pi*sqr(d); const scalar Ap = mathematicalConstant::pi*sqr(d);
// Change in C mass [kg] // Change in C mass [kg]
scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk); scalar dmC = Ap*rhoc*specie::RR()*Tc*YO2/WO2_*D0*Rk/(D0 + Rk);
// Limit mass transfer by availability of C // Limit mass transfer by availability of C
dmC = min(mass*fComb, dmC); dmC = min(mass*fComb, dmC);

View file

@ -140,10 +140,10 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate
const scalar D = D0_*(rho0_/rhoc)*pow(Tc/T0_, Dn_); const scalar D = D0_*(rho0_/rhoc)*pow(Tc/T0_, Dn_);
// Far field partial pressure O2 [Pa] // Far field partial pressure O2 [Pa]
const scalar ppO2 = rhoO2/WO2_*specie::RR*Tc; const scalar ppO2 = rhoO2/WO2_*specie::RR()*Tc;
// Total molar concentration of the carrier phase [kmol/m^3] // Total molar concentration of the carrier phase [kmol/m^3]
const scalar C = pc/(specie::RR*Tc); const scalar C = pc/(specie::RR()*Tc);
if (debug) if (debug)
{ {
@ -171,7 +171,7 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate
{ {
qCsOld = qCs; qCsOld = qCs;
const scalar PO2Surface = ppO2*exp(-(qCs + N)*d/(2*C*D)); const scalar PO2Surface = ppO2*exp(-(qCs + N)*d/(2*C*D));
qCs = A_*exp(-E_/(specie::RR*T))*pow(PO2Surface, n_); qCs = A_*exp(-E_/(specie::RR()*T))*pow(PO2Surface, n_);
qCs = (100.0*qCs + iter*qCsOld)/(100.0 + iter); qCs = (100.0*qCs + iter*qCsOld)/(100.0 + iter);
qCs = min(qCs, qCsLim); qCs = min(qCs, qCsLim);

View file

@ -114,7 +114,7 @@ void parcel::setRelaxationTimes
// Assume equilibrium at drop-surface => pressure @ surface // Assume equilibrium at drop-surface => pressure @ surface
// = vapour pressure to calculate fuel-vapour density @ surface // = vapour pressure to calculate fuel-vapour density @ surface
scalar pressureAtSurface = fuels.pv(pressure, T(), X()); scalar pressureAtSurface = fuels.pv(pressure, T(), X());
scalar rhoFuelVap = pressureAtSurface*fuels.W(X())/(specie::RR*Tf); scalar rhoFuelVap = pressureAtSurface*fuels.W(X())/(specie::RR()*Tf);
scalarField Xs(sDB.fuels().Xs(pressure, temperature, T(), Xf, X())); scalarField Xs(sDB.fuels().Xs(pressure, temperature, T(), Xf, X()));
scalarField Ys(Nf, 0.0); scalarField Ys(Nf, 0.0);

View file

@ -98,7 +98,7 @@ void LISA::atomizeParcel
Winv += Y[i][cellI]/spray_.gasProperties()[i].W(); Winv += Y[i][cellI]/spray_.gasProperties()[i].W();
} }
scalar R = specie::RR*Winv; scalar R = specie::RR()*Winv;
// ideal gas law to evaluate density // ideal gas law to evaluate density
scalar rhoAverage = pressure/R/Taverage; scalar rhoAverage = pressure/R/Taverage;

View file

@ -94,7 +94,7 @@ void blobsSheetAtomization::atomizeParcel
{ {
Winv += Y[i][cellI]/spray_.gasProperties()[i].W(); Winv += Y[i][cellI]/spray_.gasProperties()[i].W();
} }
scalar R = specie::RR*Winv; scalar R = specie::RR()*Winv;
// ideal gas law to evaluate density // ideal gas law to evaluate density
scalar rhoAverage = pressure/R/Taverage; scalar rhoAverage = pressure/R/Taverage;

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