Merge branch 'master' into particleInteractions

This commit is contained in:
graham
2009-09-17 15:15:19 +01:00
133 changed files with 73529 additions and 405 deletions

View File

@ -1,7 +1,4 @@
regionProperties/regionProperties.C
derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C
derivedFvPatchFields/solidWallMixedTemperatureCoupled/solidWallMixedTemperatureCoupledFvPatchScalarField.C
fluid/compressibleCourantNo.C fluid/compressibleCourantNo.C

View File

@ -5,7 +5,8 @@ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lbasicThermophysicalModels \ -lbasicThermophysicalModels \

View File

@ -38,7 +38,7 @@
for (label i=0; i<Ua.boundaryField().size(); i++) for (label i=0; i<Ua.boundaryField().size(); i++)
{ {
if (isType<fixedValueFvPatchVectorField>(Ua.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(Ua.boundaryField()[i]))
{ {
phiTypes[i] = fixedValueFvPatchScalarField::typeName; phiTypes[i] = fixedValueFvPatchScalarField::typeName;
} }

View File

@ -38,7 +38,7 @@
for (label i=0; i<Ub.boundaryField().size(); i++) for (label i=0; i<Ub.boundaryField().size(); i++)
{ {
if (isType<fixedValueFvPatchVectorField>(Ub.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(Ub.boundaryField()[i]))
{ {
phiTypes[i] = fixedValueFvPatchScalarField::typeName; phiTypes[i] = fixedValueFvPatchScalarField::typeName;
} }

View File

@ -37,7 +37,7 @@ Description
{ {
const fvPatch& p = patches[patchi]; const fvPatch& p = patches[patchi];
if (isType<wallFvPatch>(p)) if (isA<wallFvPatch>(p))
{ {
epsEqn.setValues epsEqn.setValues
( (

View File

@ -12,7 +12,7 @@
{ {
const fvPatch& currPatch = patches[patchi]; const fvPatch& currPatch = patches[patchi];
if (isType<wallFvPatch>(currPatch)) if (isA<wallFvPatch>(currPatch))
{ {
forAll(currPatch, facei) forAll(currPatch, facei)
{ {
@ -30,7 +30,7 @@
{ {
const fvPatch& currPatch = patches[patchi]; const fvPatch& currPatch = patches[patchi];
if (isType<wallFvPatch>(currPatch)) if (isA<wallFvPatch>(currPatch))
{ {
const scalarField& nuw = nutb.boundaryField()[patchi]; const scalarField& nuw = nutb.boundaryField()[patchi];
@ -74,7 +74,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {

View File

@ -10,7 +10,7 @@
{ {
const fvPatch& currPatch = patches[patchi]; const fvPatch& currPatch = patches[patchi];
if (isType<wallFvPatch>(currPatch)) if (isA<wallFvPatch>(currPatch))
{ {
scalarField& nutw = nutb.boundaryField()[patchi]; scalarField& nutw = nutb.boundaryField()[patchi];

View File

@ -352,7 +352,7 @@ void Foam::multiphaseMixture::correctContactAngle
forAll(boundary, patchi) forAll(boundary, patchi)
{ {
if (typeid(gbf[patchi]) == typeid(alphaContactAngleFvPatchScalarField)) if (isA<alphaContactAngleFvPatchScalarField>(gbf[patchi]))
{ {
const alphaContactAngleFvPatchScalarField& acap = const alphaContactAngleFvPatchScalarField& acap =
refCast<const alphaContactAngleFvPatchScalarField>(gbf[patchi]); refCast<const alphaContactAngleFvPatchScalarField>(gbf[patchi]);

View File

@ -37,7 +37,7 @@ Description
{ {
const fvPatch& p = patches[patchi]; const fvPatch& p = patches[patchi];
if (isType<wallFvPatch>(p)) if (isA<wallFvPatch>(p))
{ {
epsEqn.setValues epsEqn.setValues
( (

View File

@ -12,7 +12,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -30,7 +30,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
const scalarField& rhow = rho.boundaryField()[patchi]; const scalarField& rhow = rho.boundaryField()[patchi];
@ -76,7 +76,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {

View File

@ -9,7 +9,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
const scalarField& rhow = rho.boundaryField()[patchi]; const scalarField& rhow = rho.boundaryField()[patchi];

View File

@ -109,7 +109,7 @@ Foam::phaseModel::phaseModel
for (label i=0; i<U_.boundaryField().size(); i++) for (label i=0; i<U_.boundaryField().size(); i++)
{ {
if (isType<fixedValueFvPatchVectorField>(U_.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(U_.boundaryField()[i]))
{ {
phiTypes[i] = fixedValueFvPatchScalarField::typeName; phiTypes[i] = fixedValueFvPatchScalarField::typeName;
} }

View File

@ -77,7 +77,7 @@ int main(int argc, char *argv[])
{ {
const fvPatch& patch = mesh.boundary()[patchI]; const fvPatch& patch = mesh.boundary()[patchI];
if (typeid(patch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(patch))
{ {
nWalls += patch.size(); nWalls += patch.size();
} }
@ -91,7 +91,7 @@ int main(int argc, char *argv[])
{ {
const fvPatch& patch = mesh.boundary()[patchI]; const fvPatch& patch = mesh.boundary()[patchI];
if (typeid(patch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(patch))
{ {
forAll (patch.Cf(), patchFaceI) forAll (patch.Cf(), patchFaceI)
{ {

View File

@ -66,7 +66,7 @@ int main(int argc, char *argv[])
{ {
const fvPatch& patch = mesh.boundary()[patchI]; const fvPatch& patch = mesh.boundary()[patchI];
if (typeid(patch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(patch))
{ {
fvPatchVectorField& wallData = n.boundaryField()[patchI]; fvPatchVectorField& wallData = n.boundaryField()[patchI];

View File

@ -66,7 +66,7 @@ int main(int argc, char *argv[])
{ {
const fvPatch& patch = mesh.boundary()[patchI]; const fvPatch& patch = mesh.boundary()[patchI];
if (typeid(patch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(patch))
{ {
fvPatchScalarField& wallData = yStar.boundaryField()[patchI]; fvPatchScalarField& wallData = yStar.boundaryField()[patchI];

View File

@ -55,7 +55,7 @@ labelList procNeighbours(const polyMesh& mesh)
forAll (mesh.boundaryMesh(), patchI) forAll (mesh.boundaryMesh(), patchI)
{ {
if (typeid(mesh.boundaryMesh()[patchI]) == typeid(processorPolyPatch)) if (isA<processorPolyPatch>(mesh.boundaryMesh()[patchI]))
{ {
nNeighbours++; nNeighbours++;
} }
@ -67,7 +67,7 @@ labelList procNeighbours(const polyMesh& mesh)
forAll (mesh.boundaryMesh(), patchI) forAll (mesh.boundaryMesh(), patchI)
{ {
if (typeid(mesh.boundaryMesh()[patchI]) == typeid(processorPolyPatch)) if (isA<processorPolyPatch>(mesh.boundaryMesh()[patchI]))
{ {
const polyPatch& patch = mesh.boundaryMesh()[patchI]; const polyPatch& patch = mesh.boundaryMesh()[patchI];

View File

@ -174,17 +174,11 @@ void Foam::fluentFvMesh::writeFluentMesh() const
nWrittenFaces += patchFaces.size(); nWrittenFaces += patchFaces.size();
// Write patch type // Write patch type
if if (isA<wallFvPatch>(boundary()[patchI]))
(
typeid(boundary()[patchI]) == typeid(wallFvPatch)
)
{ {
fluentMeshFile << 3; fluentMeshFile << 3;
} }
else if else if (isA<symmetryFvPatch>(boundary()[patchI]))
(
typeid(boundary()[patchI]) == typeid(symmetryFvPatch)
)
{ {
fluentMeshFile << 7; fluentMeshFile << 7;
} }
@ -282,17 +276,11 @@ void Foam::fluentFvMesh::writeFluentMesh() const
<< "(39 (" << patchI + 10 << " "; << "(39 (" << patchI + 10 << " ";
// Write patch type // Write patch type
if if (isA<wallFvPatch>(boundary()[patchI]))
(
typeid(boundary()[patchI]) == typeid(wallFvPatch)
)
{ {
fluentMeshFile << "wall "; fluentMeshFile << "wall ";
} }
else if else if (isA<symmetryFvPatch>(boundary()[patchI]))
(
typeid(boundary()[patchI]) == typeid(symmetryFvPatch)
)
{ {
fluentMeshFile << "symmetry "; fluentMeshFile << "symmetry ";
} }

View File

@ -0,0 +1,79 @@
// Parametres geometriques
r1 = 200*Cos(Pi/4)/1000;
r2 = 200*Cos(Pi/4)/1000;
h1 = 250/1000;
h2 = 360/1000;
h3 = 900/1000;
h4 = 1900/1000;
// Parametres de maillage
// selon le rayon
rCells = 10/2; rRatio = 0.85;
// selon S1
S1Cells = 30/2; S1ratio = 1;
// selon S2
S2Cells = 35/2; S2ratio = 0.95;
// selon S3
S3Cells = 20/2; S3ratio = 1;
Point(1) = {r1, r1, h4};
Point(2) = {r1, r1, h3};
Point(3) = {r2, r2, h2};
Point(4) = {r2, r2, h1};
Point(5) = {0, 0, h1};
Point(6) = {0, 0, h2};
Point(7) = {0, 0, h3};
Point(8) = {0, 0, h4};
Line(1) = {8, 1};
Line(2) = {1, 2};
Line(3) = {7, 2};
Line(4) = {8, 7};
Line(5) = {2, 3};
Line(6) = {6, 3};
Line(7) = {7, 6};
Line(8) = {3, 4};
Line(9) = {5, 4};
Line(10) = {6, 5};
Line Loop(11) = {1, 2, -3, -4};
Ruled Surface(12) = {11};
Line Loop(13) = {5, -6, -7, 3};
Ruled Surface(14) = {13};
Line Loop(15) = {8, -9, -10, 6};
Ruled Surface(16) = {15};
Transfinite Line {1, 3, 6, 9} = rCells Using Progression rRatio;
Transfinite Line {4, 2} = S1Cells Using Progression S1ratio;
Transfinite Line {7, 5} = S2Cells Using Progression S2ratio;
Transfinite Line {10, 8} = S3Cells Using Progression S3ratio;
Transfinite Surface {12} = {8, 1, 2, 7};
Transfinite Surface {14} = {7, 2, 3, 6};
Transfinite Surface {16} = {6, 3, 4, 5};
Recombine Surface {12, 14, 16};
Extrude {{0, 0, 1}, {0, 0, 0}, Pi/2} {
Surface{12, 14, 16};
Layers{25};
Recombine;
}
Extrude {{0, 0, 1}, {0, 0, 0}, Pi/2} {
Surface{33, 50, 67};
Layers{25};
Recombine;
}
Extrude {{0, 0, 1}, {0, 0, 0}, Pi/2} {
Surface{84, 101, 118};
Layers{25};
Recombine;
}
Extrude {{0, 0, 1}, {0, 0, 0}, Pi/2} {
Surface{135, 152, 169};
Layers{25};
Recombine;
}
Physical Surface("entree") = {126, 75, 24, 177};
Physical Surface("S1") = {28, 181, 130, 79};
Physical Surface("S2") = {93, 42, 193, 144};
Physical Surface("S3") = {110, 59, 205, 161};
Physical Surface("fond") = {113, 62, 208, 164};
Physical Volume("fluide") = {4, 7, 10, 1, 5, 8, 11, 2, 9, 12, 3, 6};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -312,11 +312,36 @@ void readPhysNames(IFstream& inFile, Map<word>& physicalNames)
string line; string line;
inFile.getLine(line); inFile.getLine(line);
IStringStream lineStr(line); IStringStream lineStr(line);
label nSpaces = lineStr.str().count(' ');
lineStr >> regionI >> regionName; if(nSpaces == 1)
{
lineStr >> regionI >> regionName;
Info<< " " << regionI << '\t' << string::validate<word>(regionName) Info<< " " << regionI << '\t'
<< endl; << string::validate<word>(regionName) << endl;
}
else if(nSpaces == 2)
{
// >= Gmsh2.4 physical types has tag in front.
label physType;
lineStr >> physType >> regionI >> regionName;
if (physType == 1)
{
Info<< " " << "Line " << regionI << '\t'
<< string::validate<word>(regionName) << endl;
}
else if (physType == 2)
{
Info<< " " << "Surface " << regionI << '\t'
<< string::validate<word>(regionName) << endl;
}
else if (physType == 3)
{
Info<< " " << "Volume " << regionI << '\t'
<< string::validate<word>(regionName) << endl;
}
}
physicalNames.insert(regionI, string::validate<word>(regionName)); physicalNames.insert(regionI, string::validate<word>(regionName));
} }

View File

@ -138,12 +138,29 @@ label findPatchID(const polyBoundaryMesh& patches, const word& name)
} }
labelList patchFaces(const polyBoundaryMesh& patches, const word& name) labelList patchFaces(const polyBoundaryMesh& patches, const wordList& names)
{ {
label patchID = findPatchID(patches, name); label n = 0;
const polyPatch& pp = patches[patchID];
return identity(pp.size()) + pp.start(); forAll(names, i)
{
const polyPatch& pp = patches[findPatchID(patches, names[i])];
n += pp.size();
}
labelList faceLabels(n);
n = 0;
forAll(names, i)
{
const polyPatch& pp = patches[findPatchID(patches, names[i])];
forAll(pp, j)
{
faceLabels[n++] = pp.start()+j;
}
}
return faceLabels;
} }
@ -242,9 +259,15 @@ int main(int argc, char *argv[])
sourceCasePath.expand(); sourceCasePath.expand();
fileName sourceRootDir = sourceCasePath.path(); fileName sourceRootDir = sourceCasePath.path();
fileName sourceCaseDir = sourceCasePath.name(); fileName sourceCaseDir = sourceCasePath.name();
dict.lookup("sourcePatch") >> frontPatchName; wordList sourcePatches;
dict.lookup("sourcePatches") >> sourcePatches;
Info<< "Extruding patch " << frontPatchName if (sourcePatches.size() == 1)
{
frontPatchName = sourcePatches[0];
}
Info<< "Extruding patches " << sourcePatches
<< " on mesh " << sourceCasePath << nl << " on mesh " << sourceCasePath << nl
<< endl; << endl;
@ -279,7 +302,7 @@ int main(int argc, char *argv[])
IndirectList<face> IndirectList<face>
( (
mesh.faces(), mesh.faces(),
patchFaces(patches, frontPatchName) patchFaces(patches, sourcePatches)
), ),
mesh.points() mesh.points()
); );
@ -478,13 +501,13 @@ int main(int argc, char *argv[])
frontPatchFaces = patchFaces frontPatchFaces = patchFaces
( (
meshFromSurface().boundaryMesh(), meshFromSurface().boundaryMesh(),
frontPatchName wordList(1, frontPatchName)
); );
backPatchName = "otherSide"; backPatchName = "otherSide";
backPatchFaces = patchFaces backPatchFaces = patchFaces
( (
meshFromSurface().boundaryMesh(), meshFromSurface().boundaryMesh(),
backPatchName wordList(1, backPatchName)
); );
} }

View File

@ -1,6 +1,7 @@
extrudeModel/extrudeModel.C extrudeModel/extrudeModel.C
extrudeModel/newExtrudeModel.C extrudeModel/newExtrudeModel.C
linearNormal/linearNormal.C linearNormal/linearNormal.C
linearDirection/linearDirection.C
linearRadial/linearRadial.C linearRadial/linearRadial.C
sigmaRadial/sigmaRadial.C sigmaRadial/sigmaRadial.C
wedge/wedge.C wedge/wedge.C

View File

@ -0,0 +1,90 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "linearDirection.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace extrudeModels
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(linearDirection, 0);
addToRunTimeSelectionTable(extrudeModel, linearDirection, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
linearDirection::linearDirection(const dictionary& dict)
:
extrudeModel(typeName, dict),
direction_(coeffDict_.lookup("direction")),
thickness_(readScalar(coeffDict_.lookup("thickness")))
{
direction_ /= mag(direction_);
if (thickness_ <= 0)
{
FatalErrorIn("linearDirection(const dictionary&)")
<< "thickness should be positive : " << thickness_
<< exit(FatalError);
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
linearDirection::~linearDirection()
{}
// * * * * * * * * * * * * * * * * Operators * * * * * * * * * * * * * * * * //
point linearDirection::operator()
(
const point& surfacePoint,
const vector& surfaceNormal,
const label layer
) const
{
//scalar d = thickness_*layer/nLayers_;
scalar d = thickness_*sumThickness(layer);
return surfacePoint + d*direction_;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace extrudeModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,99 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::extrudeModels::linearDirection
Description
Extrudes by transforming points in a specified direction by a given distance
\*---------------------------------------------------------------------------*/
#ifndef linearDirection_H
#define linearDirection_H
#include "point.H"
#include "extrudeModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace extrudeModels
{
/*---------------------------------------------------------------------------*\
Class linearDirection Declaration
\*---------------------------------------------------------------------------*/
class linearDirection
:
public extrudeModel
{
// Private data
//- Extrude direction
vector direction_;
//- layer thickness
scalar thickness_;
public:
//- Runtime type information
TypeName("linearDirection");
// Constructors
//- Construct from dictionary
linearDirection(const dictionary& dict);
//- Destructor
~linearDirection();
// Member Operators
point operator()
(
const point& surfacePoint,
const vector& surfaceNormal,
const label layer
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace extrudeModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -25,7 +25,7 @@ constructFrom patch;
// If construct from patch/mesh: // If construct from patch/mesh:
sourceCase "../cavity"; sourceCase "../cavity";
sourcePatch movingWall; sourcePatches (movingWall);
// If construct from patch: patch to use for back (can be same as sourcePatch) // If construct from patch: patch to use for back (can be same as sourcePatch)
exposedPatchName movingWall; exposedPatchName movingWall;
// If construct from surface: // If construct from surface:
@ -41,6 +41,9 @@ flipNormals false;
//- Linear extrusion in point-normal direction //- Linear extrusion in point-normal direction
//extrudeModel linearNormal; //extrudeModel linearNormal;
//- Linear extrusion in specified direction
//extrudeModel linearDirection;
//- Wedge extrusion. If nLayers is 1 assumes symmetry around plane. //- Wedge extrusion. If nLayers is 1 assumes symmetry around plane.
extrudeModel wedge; extrudeModel wedge;
@ -66,6 +69,11 @@ linearNormalCoeffs
thickness 0.05; thickness 0.05;
} }
linearDirectionCoeffs
{
direction (0 0 1);
}
linearRadialCoeffs linearRadialCoeffs
{ {
R 0.1; R 0.1;

View File

@ -363,6 +363,8 @@ int main(int argc, char *argv[])
if (wantRefine) if (wantRefine)
{ {
cpuTime timer;
autoRefineDriver refineDriver autoRefineDriver refineDriver
( (
meshRefiner, meshRefiner,
@ -387,10 +389,15 @@ int main(int argc, char *argv[])
meshRefiner, meshRefiner,
debug debug
); );
Info<< "Mesh refined in = "
<< timer.cpuTimeIncrement() << " s." << endl;
} }
if (wantSnap) if (wantSnap)
{ {
cpuTime timer;
autoSnapDriver snapDriver autoSnapDriver snapDriver
( (
meshRefiner, meshRefiner,
@ -413,10 +420,15 @@ int main(int argc, char *argv[])
meshRefiner, meshRefiner,
debug debug
); );
Info<< "Mesh snapped in = "
<< timer.cpuTimeIncrement() << " s." << endl;
} }
if (wantLayers) if (wantLayers)
{ {
cpuTime timer;
autoLayerDriver layerDriver(meshRefiner); autoLayerDriver layerDriver(meshRefiner);
// Layer addition parameters // Layer addition parameters
@ -442,6 +454,9 @@ int main(int argc, char *argv[])
meshRefiner, meshRefiner,
debug debug
); );
Info<< "Layers added in = "
<< timer.cpuTimeIncrement() << " s." << endl;
} }

View File

@ -268,10 +268,7 @@ label twoDNess(const polyMesh& mesh)
{ {
const polyPatch& patch = patches[patchI]; const polyPatch& patch = patches[patchI];
if if (!isA<wedgePolyPatch>(patch))
(
typeid(patch) != typeid(wedgePolyPatch)
)
{ {
const vectorField& n = patch.faceAreas(); const vectorField& n = patch.faceAreas();

View File

@ -121,7 +121,7 @@ void writeVTK
const fileName& vtkName const fileName& vtkName
) )
{ {
if (typeid(currentSet) == typeid(faceSet)) if (isA<faceSet>(currentSet))
{ {
// Faces of set with OpenFOAM faceID as value // Faces of set with OpenFOAM faceID as value
@ -148,7 +148,7 @@ void writeVTK
mesh.time().path()/vtkName mesh.time().path()/vtkName
); );
} }
else if (typeid(currentSet) == typeid(cellSet)) else if (isA<cellSet>(currentSet))
{ {
// External faces of cellset with OpenFOAM cellID as value // External faces of cellset with OpenFOAM cellID as value
@ -208,7 +208,7 @@ void writeVTK
mesh.time().path()/vtkName mesh.time().path()/vtkName
); );
} }
else if (typeid(currentSet) == typeid(pointSet)) else if (isA<pointSet>(currentSet))
{ {
writePointSet writePointSet
( (

View File

@ -160,12 +160,8 @@ void reorderPatchFields(fvMesh& mesh, const labelList& oldToNew)
// Adds patch if not yet there. Returns patchID. // Adds patch if not yet there. Returns patchID.
label addPatch template<class PatchType>
( label addPatch(fvMesh& mesh, const word& patchName)
fvMesh& mesh,
const word& patchName,
const word& patchType
)
{ {
polyBoundaryMesh& polyPatches = polyBoundaryMesh& polyPatches =
const_cast<polyBoundaryMesh&>(mesh.boundaryMesh()); const_cast<polyBoundaryMesh&>(mesh.boundaryMesh());
@ -173,11 +169,18 @@ label addPatch
label patchI = polyPatches.findPatchID(patchName); label patchI = polyPatches.findPatchID(patchName);
if (patchI != -1) if (patchI != -1)
{ {
if (polyPatches[patchI].type() == patchType) if (isA<PatchType>(polyPatches[patchI]))
{ {
// Already there // Already there
return patchI; return patchI;
} }
else
{
FatalErrorIn("addPatch<PatchType>(fvMesh&, const word&)")
<< "Already have patch " << patchName
<< " but of type " << PatchType::typeName
<< exit(FatalError);
}
} }
@ -214,7 +217,7 @@ label addPatch
sz, sz,
polyPatch::New polyPatch::New
( (
patchType, PatchType::typeName,
patchName, patchName,
0, // size 0, // size
startFaceI, startFaceI,
@ -1021,17 +1024,15 @@ EdgeMap<label> addRegionPatches
if (interfaceSizes[e] > 0) if (interfaceSizes[e] > 0)
{ {
label patchI = addPatch label patchI = addPatch<directMappedWallPolyPatch>
( (
mesh, mesh,
regionNames[e[0]] + "_to_" + regionNames[e[1]], regionNames[e[0]] + "_to_" + regionNames[e[1]]
directMappedWallPolyPatch::typeName
); );
addPatch addPatch<directMappedWallPolyPatch>
( (
mesh, mesh,
regionNames[e[1]] + "_to_" + regionNames[e[0]], regionNames[e[1]] + "_to_" + regionNames[e[0]]
directMappedWallPolyPatch::typeName
); );
Info<< "For interface between region " << e[0] Info<< "For interface between region " << e[0]
@ -1405,7 +1406,7 @@ int main(int argc, char *argv[])
IOobject IOobject
( (
"cellToRegion", "cellToRegion",
mesh.facesInstance(), runTime.timeName(),
mesh, mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE, IOobject::NO_WRITE,

View File

@ -243,7 +243,7 @@ void domainDecomposition::decomposeMesh(const bool filterEmptyPatches)
const label patchStart = patches[patchi].start(); const label patchStart = patches[patchi].start();
if (typeid(patches[patchi]) != typeid(cyclicPolyPatch)) if (!isA<cyclicPolyPatch>(patches[patchi]))
{ {
// Normal patch. Add faces to processor where the cell // Normal patch. Add faces to processor where the cell
// next to the face lives // next to the face lives

View File

@ -191,7 +191,7 @@ Foam::fvFieldReconstructor::reconstructFvVolumeField
// add empty patches // add empty patches
if if
( (
typeid(mesh_.boundary()[patchI]) == typeid(emptyFvPatch) isType<emptyFvPatch>(mesh_.boundary()[patchI])
&& !patchFields(patchI) && !patchFields(patchI)
) )
{ {
@ -411,7 +411,7 @@ Foam::fvFieldReconstructor::reconstructFvSurfaceField
// add empty patches // add empty patches
if if
( (
typeid(mesh_.boundary()[patchI]) == typeid(emptyFvPatch) isType<emptyFvPatch>(mesh_.boundary()[patchI])
&& !patchFields(patchI) && !patchFields(patchI)
) )
{ {

View File

@ -127,8 +127,8 @@ Foam::fieldviewTopology::fieldviewTopology
const polyPatch& currPatch = mesh.boundaryMesh()[patchI]; const polyPatch& currPatch = mesh.boundaryMesh()[patchI];
if if
( (
isType<wallPolyPatch>(currPatch) isA<wallPolyPatch>(currPatch)
|| isType<symmetryPolyPatch>(currPatch) || isA<symmetryPolyPatch>(currPatch)
) )
{ {
forAll(currPatch, patchFaceI) forAll(currPatch, patchFaceI)

View File

@ -205,8 +205,8 @@ labelList getSelectedPatches
if if
( (
isType<emptyPolyPatch>(pp) isA<emptyPolyPatch>(pp)
|| (Pstream::parRun() && isType<processorPolyPatch>(pp)) || (Pstream::parRun() && isA<processorPolyPatch>(pp))
) )
{ {
Info<< " discarding empty/processor patch " << patchI Info<< " discarding empty/processor patch " << patchI
@ -805,7 +805,7 @@ int main(int argc, char *argv[])
labelList(1, patchI) labelList(1, patchI)
); );
if (!isType<emptyPolyPatch>(pp)) if (!isA<emptyPolyPatch>(pp))
{ {
// VolFields + patchID // VolFields + patchID
writeFuns::writeCellDataHeader writeFuns::writeCellDataHeader

View File

@ -152,7 +152,7 @@ void Foam::patchWriter::writePatchIDs()
const polyPatch& pp = mesh.boundaryMesh()[patchI]; const polyPatch& pp = mesh.boundaryMesh()[patchI];
if (!isType<emptyPolyPatch>(pp)) if (!isA<emptyPolyPatch>(pp))
{ {
writeFuns::insert(scalarField(pp.size(), patchI), fField); writeFuns::insert(scalarField(pp.size(), patchI), fField);
} }

View File

@ -609,7 +609,7 @@ void user_query_file_function
strcpy(face_type_names[patchI], patch.name().c_str()); strcpy(face_type_names[patchI], patch.name().c_str());
if (isType<wallPolyPatch>(patch)) if (isA<wallPolyPatch>(patch))
{ {
wall_flags[patchI] = 1; wall_flags[patchI] = 1;
} }

View File

@ -76,7 +76,7 @@ int main(int argc, char *argv[])
} }
// Give patch area // Give patch area
if (isType<cyclicPolyPatch>(mesh.boundaryMesh()[patchi])) if (isA<cyclicPolyPatch>(mesh.boundaryMesh()[patchi]))
{ {
Info<< " Cyclic patch vector area: " << nl; Info<< " Cyclic patch vector area: " << nl;
label nFaces = mesh.boundaryMesh()[patchi].size(); label nFaces = mesh.boundaryMesh()[patchi].size();

View File

@ -64,7 +64,7 @@ int main(int argc, char *argv[])
Info<< "\nWall heat fluxes [W]" << endl; Info<< "\nWall heat fluxes [W]" << endl;
forAll(patchHeatFlux, patchi) forAll(patchHeatFlux, patchi)
{ {
if (typeid(mesh.boundary()[patchi]) == typeid(wallFvPatch)) if (isA<wallFvPatch>(mesh.boundary()[patchi]))
{ {
Info<< mesh.boundary()[patchi].name() Info<< mesh.boundary()[patchi].name()
<< " " << " "

View File

@ -109,7 +109,7 @@ int main(int argc, char *argv[])
{ {
const fvPatch& currPatch = patches[patchi]; const fvPatch& currPatch = patches[patchi];
if (typeid(currPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(currPatch))
{ {
yPlus.boundaryField()[patchi] = yPlus.boundaryField()[patchi] =
d[patchi] d[patchi]

View File

@ -202,7 +202,7 @@ void replaceBoundaryType
dictionary& boundaryDict = dict.subDict("boundaryField"); dictionary& boundaryDict = dict.subDict("boundaryField");
forAll(bMesh, patchI) forAll(bMesh, patchI)
{ {
if (isType<wallPolyPatch>(bMesh[patchI])) if (isA<wallPolyPatch>(bMesh[patchI]))
{ {
word patchName = bMesh[patchI].name(); word patchName = bMesh[patchI].name();
dictionary& oldPatch = boundaryDict.subDict(patchName); dictionary& oldPatch = boundaryDict.subDict(patchName);

View File

@ -164,7 +164,7 @@ void mapConsistentSubMesh
forAll(meshTarget.boundary(), patchi) forAll(meshTarget.boundary(), patchi)
{ {
if (typeid(meshTarget.boundary()[patchi]) != typeid(processorFvPatch)) if (!isA<processorFvPatch>(meshTarget.boundary()[patchi]))
{ {
patchMap.insert patchMap.insert
( (
@ -201,7 +201,7 @@ wordList addProcessorPatches
forAll (meshTarget.boundary(), patchi) forAll (meshTarget.boundary(), patchi)
{ {
if (typeid(meshTarget.boundary()[patchi]) == typeid(processorFvPatch)) if (isA<processorFvPatch>(meshTarget.boundary()[patchi]))
{ {
if if
( (

View File

@ -108,11 +108,7 @@ int main(int argc, char *argv[])
{ {
const polyPatch& patch = bMesh[patchI]; const polyPatch& patch = bMesh[patchI];
if if (includeProcPatches || !isA<processorPolyPatch>(patch))
(
includeProcPatches
|| (patch.type() != processorPolyPatch::typeName)
)
{ {
includePatches.insert(patchI); includePatches.insert(patchI);
} }

View File

@ -282,13 +282,13 @@ void Foam::FaceCellWave<Type>::checkCyclic(const polyPatch& patch) const
} }
// Check if patches of given type name are present // Check if has cyclic patches
template <class Type> template <class Type>
bool Foam::FaceCellWave<Type>::hasPatchType(const word& nameOfType) bool Foam::FaceCellWave<Type>::hasCyclicPatch() const
{ {
forAll(mesh_.boundaryMesh(), patchI) forAll(mesh_.boundaryMesh(), patchI)
{ {
if (mesh_.boundaryMesh()[patchI].type() == nameOfType) if (isA<cyclicPolyPatch>(mesh_.boundaryMesh()[patchI]))
{ {
return true; return true;
} }
@ -811,7 +811,7 @@ Foam::FaceCellWave<Type>::FaceCellWave
changedCell_(mesh_.nCells(), false), changedCell_(mesh_.nCells(), false),
changedCells_(mesh_.nCells()), changedCells_(mesh_.nCells()),
nChangedCells_(0), nChangedCells_(0),
hasCyclicPatches_(hasPatchType(cyclicPolyPatch::typeName)), hasCyclicPatches_(hasCyclicPatch()),
nEvals_(0), nEvals_(0),
nUnvisitedCells_(mesh_.nCells()), nUnvisitedCells_(mesh_.nCells()),
nUnvisitedFaces_(mesh_.nFaces()), nUnvisitedFaces_(mesh_.nFaces()),
@ -841,7 +841,7 @@ Foam::FaceCellWave<Type>::FaceCellWave
changedCell_(mesh_.nCells(), false), changedCell_(mesh_.nCells(), false),
changedCells_(mesh_.nCells()), changedCells_(mesh_.nCells()),
nChangedCells_(0), nChangedCells_(0),
hasCyclicPatches_(hasPatchType(cyclicPolyPatch::typeName)), hasCyclicPatches_(hasCyclicPatch()),
nEvals_(0), nEvals_(0),
nUnvisitedCells_(mesh_.nCells()), nUnvisitedCells_(mesh_.nCells()),
nUnvisitedFaces_(mesh_.nFaces()), nUnvisitedFaces_(mesh_.nFaces()),

View File

@ -184,8 +184,8 @@ class FaceCellWave
//- Debugging: check info on both sides of cyclic //- Debugging: check info on both sides of cyclic
void checkCyclic(const polyPatch& pPatch) const; void checkCyclic(const polyPatch& pPatch) const;
//- Has patches of certain type? //- Has cyclic patch?
bool hasPatchType(const word& nameOfType); bool hasCyclicPatch() const;
//- Merge received patch data into global data //- Merge received patch data into global data
void mergeFaceInfo void mergeFaceInfo

View File

@ -105,7 +105,6 @@ Foam::OSstream& Foam::error::operator()
const int sourceFileLineNumber const int sourceFileLineNumber
) )
{ {
messageStreamPtr_->rewind();
functionName_ = functionName; functionName_ = functionName;
sourceFileName_ = sourceFileName; sourceFileName_ = sourceFileName;
sourceFileLineNumber_ = sourceFileLineNumber; sourceFileLineNumber_ = sourceFileLineNumber;
@ -137,7 +136,6 @@ Foam::error::operator OSstream&()
Perr<< endl Perr<< endl
<< "error::operator OSstream&() : error stream has failed" << "error::operator OSstream&() : error stream has failed"
<< endl; << endl;
printStack(Perr);
abort(); abort();
} }
@ -178,9 +176,6 @@ void Foam::error::exit(const int errNo)
if (abort_) if (abort_)
{ {
printStack(*this);
Perr<< endl << *this << endl
<< "\nFOAM aborting (FOAM_ABORT set)\n" << endl;
abort(); abort();
} }
@ -194,7 +189,13 @@ void Foam::error::exit(const int errNo)
{ {
if (throwExceptions_) if (throwExceptions_)
{ {
throw *this; // Make a copy of the error to throw
error errorException(*this);
// Rewind the message buffer for the next error message
messageStreamPtr_->rewind();
throw errorException;
} }
else else
{ {
@ -216,30 +217,36 @@ void Foam::error::abort()
if (abort_) if (abort_)
{ {
printStack(*this);
Perr<< endl << *this << endl Perr<< endl << *this << endl
<< "\nFOAM aborting (FOAM_ABORT set)\n" << endl; << "\nFOAM aborting (FOAM_ABORT set)\n" << endl;
printStack(Perr);
::abort(); ::abort();
} }
if (Pstream::parRun()) if (Pstream::parRun())
{ {
printStack(*this);
Perr<< endl << *this << endl Perr<< endl << *this << endl
<< "\nFOAM parallel run aborting\n" << endl; << "\nFOAM parallel run aborting\n" << endl;
printStack(Perr);
Pstream::abort(); Pstream::abort();
} }
else else
{ {
if (throwExceptions_) if (throwExceptions_)
{ {
// Make a copy of the error to throw
error errorException(*this);
// Rewind the message buffer for the next error message
messageStreamPtr_->rewind();
throw *this; throw *this;
} }
else else
{ {
printStack(*this);
Perr<< endl << *this << endl Perr<< endl << *this << endl
<< "\nFOAM aborting\n" << endl; << "\nFOAM aborting\n" << endl;
printStack(Perr);
::abort(); ::abort();
} }
} }
@ -248,7 +255,9 @@ void Foam::error::abort()
Foam::Ostream& Foam::operator<<(Ostream& os, const error& fErr) Foam::Ostream& Foam::operator<<(Ostream& os, const error& fErr)
{ {
os << endl << fErr.message().c_str(); os << endl
<< fErr.title().c_str() << endl
<< fErr.message().c_str();
if (error::level >= 2 && fErr.sourceFileLineNumber()) if (error::level >= 2 && fErr.sourceFileLineNumber())
{ {

View File

@ -35,7 +35,6 @@ int Foam::messageStream::level(Foam::debug::debugSwitch("level", 2));
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Construct from components
Foam::messageStream::messageStream Foam::messageStream::messageStream
( (
const string& title, const string& title,
@ -50,7 +49,6 @@ Foam::messageStream::messageStream
{} {}
//- Construct from dictionary
Foam::messageStream::messageStream(const dictionary& dict) Foam::messageStream::messageStream(const dictionary& dict)
: :
title_(dict.lookup("title")), title_(dict.lookup("title")),

View File

@ -47,7 +47,7 @@ Foam::labelList Foam::ProcessorTopology<Patch, ProcPatch>::procNeighbours
{ {
const Patch& patch = patches[patchi]; const Patch& patch = patches[patchi];
if (isType<ProcPatch>(patch)) if (isA<ProcPatch>(patch))
{ {
const ProcPatch& procPatch = const ProcPatch& procPatch =
refCast<const ProcPatch>(patch); refCast<const ProcPatch>(patch);
@ -69,7 +69,7 @@ Foam::labelList Foam::ProcessorTopology<Patch, ProcPatch>::procNeighbours
{ {
const Patch& patch = patches[patchi]; const Patch& patch = patches[patchi];
if (isType<ProcPatch>(patch)) if (isA<ProcPatch>(patch))
{ {
const ProcPatch& procPatch = const ProcPatch& procPatch =
refCast<const ProcPatch>(patch); refCast<const ProcPatch>(patch);
@ -116,7 +116,7 @@ Foam::ProcessorTopology<Patch, ProcPatch>::ProcessorTopology
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (!isType<ProcPatch>(patches[patchi])) if (!isA<ProcPatch>(patches[patchi]))
{ {
patchSchedule_[patchEvali].patch = patchi; patchSchedule_[patchEvali].patch = patchi;
patchSchedule_[patchEvali++].init = true; patchSchedule_[patchEvali++].init = true;
@ -204,7 +204,7 @@ Foam::ProcessorTopology<Patch, ProcPatch>::ProcessorTopology
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (!isType<ProcPatch>(patches[patchi])) if (!isA<ProcPatch>(patches[patchi]))
{ {
patchSchedule_[patchEvali].patch = patchi; patchSchedule_[patchEvali].patch = patchi;
patchSchedule_[patchEvali++].init = true; patchSchedule_[patchEvali++].init = true;
@ -219,7 +219,7 @@ Foam::ProcessorTopology<Patch, ProcPatch>::ProcessorTopology
// 2a. initEvaluate // 2a. initEvaluate
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (isType<ProcPatch>(patches[patchi])) if (isA<ProcPatch>(patches[patchi]))
{ {
patchSchedule_[patchEvali].patch = patchi; patchSchedule_[patchEvali].patch = patchi;
patchSchedule_[patchEvali++].init = true; patchSchedule_[patchEvali++].init = true;
@ -229,7 +229,7 @@ Foam::ProcessorTopology<Patch, ProcPatch>::ProcessorTopology
// 2b. evaluate // 2b. evaluate
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (isType<ProcPatch>(patches[patchi])) if (isA<ProcPatch>(patches[patchi]))
{ {
patchSchedule_[patchEvali].patch = patchi; patchSchedule_[patchEvali].patch = patchi;
patchSchedule_[patchEvali++].init = false; patchSchedule_[patchEvali++].init = false;

View File

@ -158,11 +158,7 @@ void Foam::ensightParts::recalculate(const polyMesh& pMesh)
forAll(pMesh.boundaryMesh(), patchI) forAll(pMesh.boundaryMesh(), patchI)
{ {
const polyPatch& pPatch = pMesh.boundaryMesh()[patchI]; const polyPatch& pPatch = pMesh.boundaryMesh()[patchI];
if if (pPatch.size() && !isA<processorPolyPatch>(pPatch))
(
pPatch.size()
&& typeid(pPatch) != typeid(processorPolyPatch)
)
{ {
partsList_.set partsList_.set
( (

View File

@ -31,6 +31,7 @@ License
#include "fvMeshAdder.H" #include "fvMeshAdder.H"
#include "faceCoupleInfo.H" #include "faceCoupleInfo.H"
#include "processorFvPatchField.H" #include "processorFvPatchField.H"
#include "processorFvsPatchField.H"
#include "polyTopoChange.H" #include "polyTopoChange.H"
#include "removeCells.H" #include "removeCells.H"
#include "polyModifyFace.H" #include "polyModifyFace.H"
@ -2124,54 +2125,56 @@ Foam::autoPtr<Foam::mapDistributePolyMesh> Foam::fvMeshDistribute::distribute
// Bit of hack: processorFvPatchField does not get reset since created // Bit of hack: processorFvPatchField does not get reset since created
// from nothing so explicitly reset. // from nothing so explicitly reset.
initPatchFields<volScalarField> initPatchFields<volScalarField, processorFvPatchField<scalar> >
( (
processorFvPatchField<scalar>::typeName,
pTraits<scalar>::zero pTraits<scalar>::zero
); );
initPatchFields<volVectorField> initPatchFields<volVectorField, processorFvPatchField<vector> >
( (
processorFvPatchField<vector>::typeName,
pTraits<vector>::zero pTraits<vector>::zero
); );
initPatchFields<volSphericalTensorField> initPatchFields
<
volSphericalTensorField,
processorFvPatchField<sphericalTensor>
>
( (
processorFvPatchField<sphericalTensor>::typeName,
pTraits<sphericalTensor>::zero pTraits<sphericalTensor>::zero
); );
initPatchFields<volSymmTensorField> initPatchFields<volSymmTensorField, processorFvPatchField<symmTensor> >
( (
processorFvPatchField<symmTensor>::typeName,
pTraits<symmTensor>::zero pTraits<symmTensor>::zero
); );
initPatchFields<volTensorField> initPatchFields<volTensorField, processorFvPatchField<tensor> >
( (
processorFvPatchField<tensor>::typeName,
pTraits<tensor>::zero pTraits<tensor>::zero
); );
initPatchFields<surfaceScalarField> initPatchFields<surfaceScalarField, processorFvsPatchField<scalar> >
( (
processorFvPatchField<scalar>::typeName,
pTraits<scalar>::zero pTraits<scalar>::zero
); );
initPatchFields<surfaceVectorField> initPatchFields<surfaceVectorField, processorFvsPatchField<vector> >
( (
processorFvPatchField<vector>::typeName,
pTraits<vector>::zero pTraits<vector>::zero
); );
initPatchFields<surfaceSphericalTensorField> initPatchFields
<
surfaceSphericalTensorField,
processorFvsPatchField<sphericalTensor>
>
( (
processorFvPatchField<sphericalTensor>::typeName,
pTraits<sphericalTensor>::zero pTraits<sphericalTensor>::zero
); );
initPatchFields<surfaceSymmTensorField> initPatchFields
<
surfaceSymmTensorField,
processorFvsPatchField<symmTensor>
>
( (
processorFvPatchField<symmTensor>::typeName,
pTraits<symmTensor>::zero pTraits<symmTensor>::zero
); );
initPatchFields<surfaceTensorField> initPatchFields<surfaceTensorField, processorFvsPatchField<tensor> >
( (
processorFvPatchField<tensor>::typeName,
pTraits<tensor>::zero pTraits<tensor>::zero
); );

View File

@ -164,10 +164,9 @@ class fvMeshDistribute
); );
//- Init patch fields of certain type //- Init patch fields of certain type
template<class GeoField> template<class GeoField, class PatchFieldType>
void initPatchFields void initPatchFields
( (
const word& patchFieldType,
const typename GeoField::value_type& initVal const typename GeoField::value_type& initVal
); );

View File

@ -235,10 +235,9 @@ void Foam::fvMeshDistribute::mapBoundaryFields
// Init patch fields of certain type // Init patch fields of certain type
template<class GeoField> template<class GeoField, class PatchFieldType>
void Foam::fvMeshDistribute::initPatchFields void Foam::fvMeshDistribute::initPatchFields
( (
const word& patchFieldType,
const typename GeoField::value_type& initVal const typename GeoField::value_type& initVal
) )
{ {
@ -264,7 +263,7 @@ void Foam::fvMeshDistribute::initPatchFields
forAll(bfld, patchI) forAll(bfld, patchI)
{ {
if (bfld[patchI].type() == patchFieldType) if (isA<PatchFieldType>(bfld[patchI]))
{ {
bfld[patchI] == initVal; bfld[patchI] == initVal;
} }

View File

@ -774,7 +774,7 @@ void Foam::addPatchCellLayer::setRefinement
", polyTopoChange&)" ", polyTopoChange&)"
) << "boundary-edge-to-be-extruded:" ) << "boundary-edge-to-be-extruded:"
<< pp.points()[meshPoints[e[0]]] << pp.points()[meshPoints[e[0]]]
<< pp.points()[meshPoints[e[0]]] << pp.points()[meshPoints[e[1]]]
<< " has more than two faces using it:" << eFaces << " has more than two faces using it:" << eFaces
<< abort(FatalError); << abort(FatalError);
} }
@ -816,7 +816,7 @@ void Foam::addPatchCellLayer::setRefinement
", polyTopoChange&)" ", polyTopoChange&)"
) << "boundary-edge-to-be-extruded:" ) << "boundary-edge-to-be-extruded:"
<< pp.points()[meshPoints[e[0]]] << pp.points()[meshPoints[e[0]]]
<< pp.points()[meshPoints[e[0]]] << pp.points()[meshPoints[e[1]]]
<< " has more than two boundary faces" << " has more than two boundary faces"
<< " using it:" << " using it:"
<< bFaceI << " fc:" << bFaceI << " fc:"

View File

@ -52,7 +52,7 @@ bool Foam::adjustPhi
const fvPatchVectorField& Up = U.boundaryField()[patchi]; const fvPatchVectorField& Up = U.boundaryField()[patchi];
const fvsPatchScalarField& phip = phi.boundaryField()[patchi]; const fvsPatchScalarField& phip = phi.boundaryField()[patchi];
if (!isType<processorFvsPatchScalarField>(phip)) if (!isA<processorFvsPatchScalarField>(phip))
{ {
if if
( (
@ -128,7 +128,7 @@ bool Foam::adjustPhi
const fvPatchVectorField& Up = U.boundaryField()[patchi]; const fvPatchVectorField& Up = U.boundaryField()[patchi];
fvsPatchScalarField& phip = phi.boundaryField()[patchi]; fvsPatchScalarField& phip = phi.boundaryField()[patchi];
if (!isType<processorFvsPatchScalarField>(phip)) if (!isA<processorFvsPatchScalarField>(phip))
{ {
if if
( (

View File

@ -1,4 +1,4 @@
if (!isType<zeroGradientFvPatchScalarField>(k_.boundaryField()[patchi])) if (!isA<zeroGradientFvPatchScalarField>(k_.boundaryField()[patchi]))
{ {
FatalErrorIn("wall-function evaluation") FatalErrorIn("wall-function evaluation")
<< k_.boundaryField()[patchi].type() << k_.boundaryField()[patchi].type()
@ -8,7 +8,7 @@ if (!isType<zeroGradientFvPatchScalarField>(k_.boundaryField()[patchi]))
<< exit(FatalError); << exit(FatalError);
} }
if (!isType<zeroGradientFvPatchScalarField>(epsilon_.boundaryField()[patchi])) if (!isA<zeroGradientFvPatchScalarField>(epsilon_.boundaryField()[patchi]))
{ {
FatalErrorIn("wall-function evaluation") FatalErrorIn("wall-function evaluation")
<< epsilon_.boundaryField()[patchi].type() << epsilon_.boundaryField()[patchi].type()

View File

@ -61,7 +61,7 @@ void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs()
( (
scalarField::subField(phip, size()/2) scalarField::subField(phip, size()/2)
/scalarField::subField(patch().magSf(), size()/2), /scalarField::subField(patch().magSf(), size()/2),
0.0 scalar(0)
); );
if (phi.dimensions() == dimDensity*dimVelocity*dimArea) if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
@ -79,7 +79,7 @@ void Foam::fanFvPatchField<Foam::scalar>::updateCoeffs()
jump_ += f_[i]*pow(Un, i); jump_ += f_[i]*pow(Un, i);
} }
jump_ = max(jump_, 0.0); jump_ = max(jump_, scalar(0));
} }
jumpCyclicFvPatchField<scalar>::updateCoeffs(); jumpCyclicFvPatchField<scalar>::updateCoeffs();

View File

@ -111,7 +111,7 @@ void Foam::fvMeshSubset::doCoupledPatches
{ {
const polyPatch& pp = oldPatches[oldPatchI]; const polyPatch& pp = oldPatches[oldPatchI];
if (typeid(pp) == typeid(processorPolyPatch)) if (isA<processorPolyPatch>(pp))
{ {
const processorPolyPatch& procPatch = const processorPolyPatch& procPatch =
refCast<const processorPolyPatch>(pp); refCast<const processorPolyPatch>(pp);
@ -133,7 +133,7 @@ void Foam::fvMeshSubset::doCoupledPatches
{ {
const polyPatch& pp = oldPatches[oldPatchI]; const polyPatch& pp = oldPatches[oldPatchI];
if (typeid(pp) == typeid(processorPolyPatch)) if (isA<processorPolyPatch>(pp))
{ {
const processorPolyPatch& procPatch = const processorPolyPatch& procPatch =
refCast<const processorPolyPatch>(pp); refCast<const processorPolyPatch>(pp);
@ -171,7 +171,7 @@ void Foam::fvMeshSubset::doCoupledPatches
{ {
const polyPatch& pp = oldPatches[oldPatchI]; const polyPatch& pp = oldPatches[oldPatchI];
if (typeid(pp) == typeid(cyclicPolyPatch)) if (isA<cyclicPolyPatch>(pp))
{ {
const cyclicPolyPatch& cycPatch = const cyclicPolyPatch& cycPatch =
refCast<const cyclicPolyPatch>(pp); refCast<const cyclicPolyPatch>(pp);

View File

@ -37,13 +37,7 @@ void Foam::nearWallDist::doAll()
cellDistFuncs wallUtils(mesh_); cellDistFuncs wallUtils(mesh_);
// Get patch ids of walls // Get patch ids of walls
labelHashSet wallPatchIDs labelHashSet wallPatchIDs(wallUtils.getPatchIDs<wallPolyPatch>());
(
wallUtils.getPatchIDs
(
wallPolyPatch::typeName
)
);
// Size neighbours array for maximum possible // Size neighbours array for maximum possible
@ -60,7 +54,7 @@ void Foam::nearWallDist::doAll()
const fvPatch& patch = mesh_.boundary()[patchI]; const fvPatch& patch = mesh_.boundary()[patchI];
if (patch.type() == wallFvPatch::typeName) if (isA<wallFvPatch>(patch))
{ {
const polyPatch& pPatch = patch.patch(); const polyPatch& pPatch = patch.patch();

View File

@ -41,7 +41,7 @@ void Foam::nearWallDistNoSearch::doAll()
{ {
fvPatchScalarField& ypatch = operator[](patchI); fvPatchScalarField& ypatch = operator[](patchI);
if (patches[patchI].type() == wallFvPatch::typeName) if (isA<wallFvPatch>(patches[patchI]))
{ {
const unallocLabelList& faceCells = patches[patchI].faceCells(); const unallocLabelList& faceCells = patches[patchI].faceCells();

View File

@ -60,7 +60,7 @@ void Foam::reflectionVectors::correct()
forAll(patches, patchi) forAll(patches, patchi)
{ {
// find the nearest face for every cell // find the nearest face for every cell
if (patches[patchi].type() == wallFvPatch::typeName) if (isA<wallFvPatch>(patches[patchi]))
{ {
n_.boundaryField()[patchi] = n_.boundaryField()[patchi] =
mesh.Sf().boundaryField()[patchi] mesh.Sf().boundaryField()[patchi]

View File

@ -68,7 +68,7 @@ Foam::wallDist::~wallDist()
void Foam::wallDist::correct() void Foam::wallDist::correct()
{ {
// Get patchids of walls // Get patchids of walls
labelHashSet wallPatchIDs(getPatchIDs(wallPolyPatch::typeName)); labelHashSet wallPatchIDs(getPatchIDs<wallPolyPatch>());
// Calculate distance starting from wallPatch faces. // Calculate distance starting from wallPatch faces.
patchWave wave(cellDistFuncs::mesh(), wallPatchIDs, correctWalls_); patchWave wave(cellDistFuncs::mesh(), wallPatchIDs, correctWalls_);
@ -79,7 +79,7 @@ void Foam::wallDist::correct()
// Transfer values on patches into boundaryField of *this // Transfer values on patches into boundaryField of *this
forAll(boundaryField(), patchI) forAll(boundaryField(), patchI)
{ {
if (boundaryField()[patchI].type() != emptyFvPatchScalarField::typeName) if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI]))
{ {
scalarField& waveFld = wave.patchDistance()[patchI]; scalarField& waveFld = wave.patchDistance()[patchI];

View File

@ -80,7 +80,7 @@ void Foam::wallDistData<TransferType>::correct()
// //
// Get patchids of walls // Get patchids of walls
labelHashSet wallPatchIDs(getPatchIDs(wallPolyPatch::typeName)); labelHashSet wallPatchIDs(getPatchIDs<wallPolyPatch>());
// Collect pointers to data on patches // Collect pointers to data on patches
UPtrList<Field<Type> > patchData(mesh.boundaryMesh().size()); UPtrList<Field<Type> > patchData(mesh.boundaryMesh().size());
@ -109,7 +109,7 @@ void Foam::wallDistData<TransferType>::correct()
{ {
scalarField& waveFld = wave.patchDistance()[patchI]; scalarField& waveFld = wave.patchDistance()[patchI];
if (boundaryField()[patchI].type() != emptyFvPatchScalarField::typeName) if (!isA<emptyFvPatchScalarField>(boundaryField()[patchI]))
{ {
boundaryField()[patchI].transfer(waveFld); boundaryField()[patchI].transfer(waveFld);

View File

@ -367,7 +367,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
new scalarField new scalarField
( (
this->size(), this->size(),
fieldToken.scalarToken() fieldToken.number()
) )
); );
} }

View File

@ -1,4 +1,4 @@
if (isType<wallPolyPatch>(pbMesh[patch(face())])) if (isA<wallPolyPatch>(pbMesh[patch(face())]))
{ {
keepParcel = sDB.wall().wallTreatment(*this, face()); keepParcel = sDB.wall().wallTreatment(*this, face());
@ -12,7 +12,7 @@ if (isType<wallPolyPatch>(pbMesh[patch(face())]))
U() = (magUs/magV1)*v1*n() + vs*sDB.axisOfSymmetry(); U() = (magUs/magV1)*v1*n() + vs*sDB.axisOfSymmetry();
} }
} }
else if (isType<wedgePolyPatch>(pbMesh[patch(face())])) else if (isA<wedgePolyPatch>(pbMesh[patch(face())]))
{ {
// check if parcel is trying to move out of the domain // check if parcel is trying to move out of the domain
label patchi = patch(face()); label patchi = patch(face());
@ -27,7 +27,7 @@ else if (isType<wedgePolyPatch>(pbMesh[patch(face())]))
U() -= 2.0*Un2*n(); U() -= 2.0*Un2*n();
} }
} }
else if (isType<symmetryPolyPatch>(pbMesh[patch(face())])) else if (isA<symmetryPolyPatch>(pbMesh[patch(face())]))
{ {
// check if parcel is trying to move out of the domain // check if parcel is trying to move out of the domain
label patchi = patch(face()); label patchi = patch(face());

View File

@ -314,7 +314,7 @@ bool Foam::parcel::move(spray& sDB)
{ {
if (face() > -1) if (face() > -1)
{ {
if (isType<processorPolyPatch>(pbMesh[patch(face())])) if (isA<processorPolyPatch>(pbMesh[patch(face())]))
{ {
switchProcessor = true; switchProcessor = true;
} }

View File

@ -242,11 +242,11 @@ Foam::spray::spray
// check for the type of boundary condition // check for the type of boundary condition
forAll(bMesh, patchi) forAll(bMesh, patchi)
{ {
if (isType<symmetryPolyPatch>(bMesh[patchi])) if (isA<symmetryPolyPatch>(bMesh[patchi]))
{ {
symPlaneExist = true; symPlaneExist = true;
} }
else if (isType<wedgePolyPatch>(bMesh[patchi])) else if (isA<wedgePolyPatch>(bMesh[patchi]))
{ {
wedgeExist = true; wedgeExist = true;
patches[n++] = patchi; patches[n++] = patchi;

View File

@ -82,7 +82,7 @@ bool reflectParcel::wallTreatment
const polyMesh& mesh = spray_.mesh(); const polyMesh& mesh = spray_.mesh();
if (isType<wallPolyPatch>(mesh_.boundaryMesh()[patchi])) if (isA<wallPolyPatch>(mesh_.boundaryMesh()[patchi]))
{ {
// wallNormal defined to point outwards of domain // wallNormal defined to point outwards of domain
vector Sf = mesh_.Sf().boundaryField()[patchi][facei]; vector Sf = mesh_.Sf().boundaryField()[patchi][facei];

View File

@ -60,7 +60,7 @@ bool Foam::DsmcParcel<ParcelType>::move
if (p.onBoundary() && td.keepParticle) if (p.onBoundary() && td.keepParticle)
{ {
if (isType<processorPolyPatch>(pbMesh[p.patch(p.face())])) if (isA<processorPolyPatch>(pbMesh[p.patch(p.face())]))
{ {
td.switchProcessor = true; td.switchProcessor = true;
} }

View File

@ -52,7 +52,7 @@ Foam::FreeStream<CloudType>::FreeStream
{ {
const polyPatch& patch = cloud.mesh().boundaryMesh()[p]; const polyPatch& patch = cloud.mesh().boundaryMesh()[p];
if (patch.type() == polyPatch::typeName) if (isType<polyPatch>(patch))
{ {
patches.append(p); patches.append(p);
} }

View File

@ -263,7 +263,7 @@ bool Foam::KinematicParcel<ParcelType>::move(TrackData& td)
if (p.onBoundary() && td.keepParticle) if (p.onBoundary() && td.keepParticle)
{ {
if (isType<processorPolyPatch>(pbMesh[p.patch(p.face())])) if (isA<processorPolyPatch>(pbMesh[p.patch(p.face())]))
{ {
td.switchProcessor = true; td.switchProcessor = true;
} }

View File

@ -367,7 +367,7 @@ void Foam::referredCellList::buildReferredCellList
// boundaries. Separate treatment allows the serial version to run // boundaries. Separate treatment allows the serial version to run
// transparently. // transparently.
if (mesh.boundaryMesh()[patchI].type() == "cyclic") if (isA<cyclicPolyPatch>(mesh.boundaryMesh()[patchI]))
{ {
const cyclicPolyPatch& patch = refCast<const cyclicPolyPatch> const cyclicPolyPatch& patch = refCast<const cyclicPolyPatch>
( (

View File

@ -84,7 +84,7 @@ bool Foam::solidParticle::move(solidParticle::trackData& td)
if (onBoundary() && td.keepParticle) if (onBoundary() && td.keepParticle)
{ {
if (isType<processorPolyPatch>(pbMesh[patch(face())])) if (isA<processorPolyPatch>(pbMesh[patch(face())]))
{ {
td.switchProcessor = true; td.switchProcessor = true;
} }

View File

@ -104,27 +104,6 @@ Foam::labelHashSet Foam::cellDistFuncs::getPatchIDs
} }
// Get patch ids of patches of certain type (e.g. 'polyProcessorPatch')
Foam::labelHashSet Foam::cellDistFuncs::getPatchIDs(const word& wantedType)
const
{
const polyBoundaryMesh& bMesh = mesh().boundaryMesh();
labelHashSet patchIDs(bMesh.size());
forAll(bMesh, patchI)
{
const polyPatch& patch = bMesh[patchI];
if (patch.type() == wantedType)
{
patchIDs.insert(patchI);
}
}
return patchIDs;
}
// Return smallest true distance from p to any of wallFaces. // Return smallest true distance from p to any of wallFaces.
// Note that even if normal hits face we still check other faces. // Note that even if normal hits face we still check other faces.
// Note that wallFaces is untruncated and we explicitly pass in size. // Note that wallFaces is untruncated and we explicitly pass in size.

View File

@ -30,6 +30,7 @@ Description
SourceFiles SourceFiles
cellDistFuncs.C cellDistFuncs.C
cellDistFuncsTemplates.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -101,8 +102,10 @@ public:
//- Get patchIDs of named patches //- Get patchIDs of named patches
labelHashSet getPatchIDs(const wordList&) const; labelHashSet getPatchIDs(const wordList&) const;
//- Get patchIDs of certain type (e.g. 'processorPolyPatch') //- Get patchIDs of/derived off certain type (e.g. 'processorPolyPatch')
labelHashSet getPatchIDs(const word&) const; // Uses isA, not isType
template<class Type>
labelHashSet getPatchIDs() const;
//- Calculate smallest true distance (and face index) //- Calculate smallest true distance (and face index)
// from pt to faces wallFaces. // from pt to faces wallFaces.
@ -159,6 +162,12 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "cellDistFuncsTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,52 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "cellDistFuncs.H"
#include "polyMesh.H"
#include "polyBoundaryMesh.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
Foam::labelHashSet Foam::cellDistFuncs::getPatchIDs() const
{
const polyBoundaryMesh& bMesh = mesh().boundaryMesh();
labelHashSet patchIDs(bMesh.size());
forAll(bMesh, patchI)
{
if (isA<Type>(bMesh[patchI]))
{
patchIDs.insert(patchI);
}
}
return patchIDs;
}
// ************************************************************************* //

View File

@ -366,14 +366,24 @@ void Foam::directMappedPatchBase::calcMapping() const
if if
( (
offset_ == vector::zero offset_ == vector::zero
&& mode_ == NEARESTPATCHFACE
&& sampleRegion_ == patch_.boundaryMesh().mesh().name() && sampleRegion_ == patch_.boundaryMesh().mesh().name()
&& samplePatch_ == patch_.name()
) )
{ {
FatalErrorIn("directMappedPatchBase::calcMapping() const") WarningIn("directMappedPatchBase::calcMapping() const")
<< "Invalid offset " << offset_ << endl << "Invalid offset " << offset_ << endl
<< "Offset is the vector added to the patch face centres to" << "Offset is the vector added to the patch face centres to"
<< " find the cell supplying the data." << " find the patch face supplying the data." << endl
<< exit(FatalError); << "Setting it to " << offset_
<< " on the same patch, on the same region"
<< " will find the faces themselves which does not make sense"
<< " for anything but testing." << endl
<< "patch_:" << patch_.name() << endl
<< "sampleRegion_:" << sampleRegion_ << endl
<< "mode_:" << sampleModeNames_[mode_] << endl
<< "samplePatch_:" << samplePatch_ << endl
<< "offset_:" << offset_ << endl;
} }

View File

@ -113,7 +113,7 @@ void faceSet::sync(const polyMesh& mesh)
{ {
const polyPatch& pp = patches[patchI]; const polyPatch& pp = patches[patchI];
if (isType<processorPolyPatch>(pp)) if (isA<processorPolyPatch>(pp))
{ {
const processorPolyPatch& procPatch = const processorPolyPatch& procPatch =
refCast<const processorPolyPatch>(pp); refCast<const processorPolyPatch>(pp);
@ -145,7 +145,7 @@ void faceSet::sync(const polyMesh& mesh)
{ {
const polyPatch& pp = patches[patchI]; const polyPatch& pp = patches[patchI];
if (isType<processorPolyPatch>(pp)) if (isA<processorPolyPatch>(pp))
{ {
const processorPolyPatch& procPatch = const processorPolyPatch& procPatch =
refCast<const processorPolyPatch>(pp); refCast<const processorPolyPatch>(pp);
@ -174,7 +174,7 @@ void faceSet::sync(const polyMesh& mesh)
{ {
const polyPatch& pp = patches[patchI]; const polyPatch& pp = patches[patchI];
if (typeid(pp) == typeid(cyclicPolyPatch)) if (isA<cyclicPolyPatch>(pp))
{ {
const cyclicPolyPatch& cycPatch = const cyclicPolyPatch& cycPatch =
refCast<const cyclicPolyPatch>(pp); refCast<const cyclicPolyPatch>(pp);

View File

@ -100,7 +100,7 @@ meshToMesh::meshToMesh
forAll (toMesh_.boundaryMesh(), patchi) forAll (toMesh_.boundaryMesh(), patchi)
{ {
// Add the processor patches in the toMesh to the cuttingPatches list // Add the processor patches in the toMesh to the cuttingPatches list
if (toMesh_.boundaryMesh()[patchi].type() == processorFvPatch::typeName) if (isA<processorPolyPatch>(toMesh_.boundaryMesh()[patchi]))
{ {
cuttingPatches_.insert cuttingPatches_.insert
( (

View File

@ -179,8 +179,8 @@ void Foam::thresholdCellFaces::calculate
if if
( (
isType<emptyPolyPatch>(p) isA<emptyPolyPatch>(p)
|| (Pstream::parRun() && isType<processorPolyPatch>(p)) || (Pstream::parRun() && isA<processorPolyPatch>(p))
) )
{ {
continue; continue;

View File

@ -175,7 +175,7 @@ void Foam::linearValveFvMesh::makeSlidersDead()
// Enable layering // Enable layering
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
topoChanges[modI].disable(); topoChanges[modI].disable();
} }
@ -197,7 +197,7 @@ void Foam::linearValveFvMesh::makeSlidersLive()
// Enable sliding interface // Enable sliding interface
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
topoChanges[modI].enable(); topoChanges[modI].enable();
} }
@ -220,7 +220,7 @@ bool Foam::linearValveFvMesh::attached() const
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
result = result =
result result
@ -231,7 +231,7 @@ bool Foam::linearValveFvMesh::attached() const
// Check thal all sliders are in sync (debug only) // Check thal all sliders are in sync (debug only)
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
if if
( (

View File

@ -219,11 +219,11 @@ void Foam::linearValveLayersFvMesh::makeLayersLive()
// Enable layering // Enable layering
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(layerAdditionRemoval)) if (isA<layerAdditionRemoval>(topoChanges[modI]))
{ {
topoChanges[modI].enable(); topoChanges[modI].enable();
} }
else if (typeid(topoChanges[modI]) == typeid(slidingInterface)) else if (isA<slidingInterface>(topoChanges[modI]))
{ {
topoChanges[modI].disable(); topoChanges[modI].disable();
} }
@ -245,11 +245,11 @@ void Foam::linearValveLayersFvMesh::makeSlidersLive()
// Enable sliding interface // Enable sliding interface
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(layerAdditionRemoval)) if (isA<layerAdditionRemoval>(topoChanges[modI]))
{ {
topoChanges[modI].disable(); topoChanges[modI].disable();
} }
else if (typeid(topoChanges[modI]) == typeid(slidingInterface)) else if (isA<slidingInterface>(topoChanges[modI]))
{ {
topoChanges[modI].enable(); topoChanges[modI].enable();
} }
@ -272,7 +272,7 @@ bool Foam::linearValveLayersFvMesh::attached() const
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
result = result =
result result
@ -283,7 +283,7 @@ bool Foam::linearValveLayersFvMesh::attached() const
// Check thal all sliders are in sync (debug only) // Check thal all sliders are in sync (debug only)
forAll (topoChanges, modI) forAll (topoChanges, modI)
{ {
if (typeid(topoChanges[modI]) == typeid(slidingInterface)) if (isA<slidingInterface>(topoChanges[modI]))
{ {
if if
( (

View File

@ -71,7 +71,7 @@ void vanDriestDelta::calcDelta()
const fvPatchList& patches = mesh_.boundary(); const fvPatchList& patches = mesh_.boundary();
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (isType<wallFvPatch>(patches[patchi])) if (isA<wallFvPatch>(patches[patchi]))
{ {
const fvPatchVectorField& Uw = U.boundaryField()[patchi]; const fvPatchVectorField& Uw = U.boundaryField()[patchi];
const scalarField& rhow = rho.boundaryField()[patchi]; const scalarField& rhow = rho.boundaryField()[patchi];

View File

@ -370,7 +370,7 @@ void LRR::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -432,7 +432,7 @@ void LRR::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
symmTensorField& Rw = R_.boundaryField()[patchi]; symmTensorField& Rw = R_.boundaryField()[patchi];

View File

@ -408,7 +408,7 @@ void LaunderGibsonRSTM::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -478,7 +478,7 @@ void LaunderGibsonRSTM::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
symmTensorField& Rw = R_.boundaryField()[patchi]; symmTensorField& Rw = R_.boundaryField()[patchi];

View File

@ -142,7 +142,7 @@ LaunderSharmaKE::LaunderSharmaKE
"k", "k",
runTime_.timeName(), runTime_.timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
mesh_ mesh_
@ -155,7 +155,7 @@ LaunderSharmaKE::LaunderSharmaKE
"epsilon", "epsilon",
runTime_.timeName(), runTime_.timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
mesh_ mesh_

View File

@ -37,6 +37,8 @@ $(kqRWallFunctions)/kqRWallFunction/kqRWallFunctionFvPatchFields.C
derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C
derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C
derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C
derivedFvPatchFields/turbulentTemperatureCoupledBaffle/turbulentTemperatureCoupledBaffleFvPatchScalarField.C
derivedFvPatchFields/turbulentTemperatureCoupledBaffle/regionProperties.C
backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C

View File

@ -7,4 +7,6 @@ EXE_INC = \
LIB_LIBS = \ LIB_LIBS = \
-lcompressibleTurbulenceModel \ -lcompressibleTurbulenceModel \
-lfiniteVolume \ -lfiniteVolume \
-lbasicThermophysicalModels \
-lspecie \
-lmeshTools -lmeshTools

View File

@ -174,7 +174,7 @@ tmp<scalarField> RASModel::yPlus(const label patchNo, const scalar Cmu) const
tmp<scalarField> tYp(new scalarField(curPatch.size())); tmp<scalarField> tYp(new scalarField(curPatch.size()));
scalarField& Yp = tYp(); scalarField& Yp = tYp();
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
Yp = pow025(Cmu) Yp = pow025(Cmu)
*y_[patchNo] *y_[patchNo]

View File

@ -73,7 +73,7 @@ tmp<volScalarField> autoCreateAlphat
forAll(bm, patchI) forAll(bm, patchI)
{ {
if (isType<wallFvPatch>(bm[patchI])) if (isA<wallFvPatch>(bm[patchI]))
{ {
alphatBoundaryTypes[patchI] = alphatBoundaryTypes[patchI] =
RASModels::alphatWallFunctionFvPatchScalarField::typeName; RASModels::alphatWallFunctionFvPatchScalarField::typeName;
@ -143,7 +143,7 @@ tmp<volScalarField> autoCreateMut
forAll(bm, patchI) forAll(bm, patchI)
{ {
if (isType<wallFvPatch>(bm[patchI])) if (isA<wallFvPatch>(bm[patchI]))
{ {
mutBoundaryTypes[patchI] = mutBoundaryTypes[patchI] =
RASModels::mutkWallFunctionFvPatchScalarField::typeName; RASModels::mutkWallFunctionFvPatchScalarField::typeName;

View File

@ -28,7 +28,7 @@ License
#include "Time.H" #include "Time.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "wallPolyPatch.H" #include "wallFvPatch.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -111,7 +111,7 @@ autoCreateWallFunctionField
forAll(newPatchFields, patchI) forAll(newPatchFields, patchI)
{ {
if (isType<wallPolyPatch>(mesh.boundaryMesh()[patchI])) if (isA<wallFvPatch>(mesh.boundary()[patchI]))
{ {
newPatchFields.set newPatchFields.set
( (

View File

@ -24,70 +24,87 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "solidWallMixedTemperatureCoupledFvPatchScalarField.H" #include "turbulentTemperatureCoupledBaffleFvPatchScalarField.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include "fvPatchFieldMapper.H" #include "fvPatchFieldMapper.H"
#include "volFields.H" #include "volFields.H"
#include "directMappedPatchBase.H" #include "directMappedPatchBase.H"
#include "regionProperties.H" #include "regionProperties.H"
#include "basicThermo.H"
#include "RASModel.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
bool Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::interfaceOwner bool Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::interfaceOwner
( (
const polyMesh& nbrRegion const polyMesh& nbrRegion,
const polyPatch& nbrPatch
) const ) const
{ {
const fvMesh& myRegion = patch().boundaryMesh().mesh(); const fvMesh& myRegion = patch().boundaryMesh().mesh();
const regionProperties& props = if (nbrRegion.name() == myRegion.name())
myRegion.objectRegistry::parent().lookupObject<regionProperties>
(
"regionProperties"
);
label myIndex = findIndex(props.fluidRegionNames(), myRegion.name());
if (myIndex == -1)
{ {
label i = findIndex(props.solidRegionNames(), myRegion.name()); return patch().index() < nbrPatch.index();
}
if (i == -1) else
{ {
FatalErrorIn const regionProperties& props =
myRegion.objectRegistry::parent().lookupObject<regionProperties>
( (
"solidWallMixedTemperatureCoupledFvPatchScalarField" "regionProperties"
"::interfaceOwner(const polyMesh&) const" );
) << "Cannot find region " << myRegion.name()
<< " neither in fluids " << props.fluidRegionNames()
<< " nor in solids " << props.solidRegionNames()
<< exit(FatalError);
}
myIndex = props.fluidRegionNames().size() + i;
}
label nbrIndex = findIndex(props.fluidRegionNames(), nbrRegion.name());
if (nbrIndex == -1)
{
label i = findIndex(props.solidRegionNames(), nbrRegion.name());
if (i == -1) label myIndex = findIndex(props.fluidRegionNames(), myRegion.name());
if (myIndex == -1)
{ {
FatalErrorIn("coupleManager::interfaceOwner(const polyMesh&) const") label i = findIndex(props.solidRegionNames(), myRegion.name());
<< "Cannot find region " << nbrRegion.name()
<< " neither in fluids " << props.fluidRegionNames()
<< " nor in solids " << props.solidRegionNames()
<< exit(FatalError);
}
nbrIndex = props.fluidRegionNames().size() + i;
}
return myIndex < nbrIndex; if (i == -1)
{
FatalErrorIn
(
"turbulentTemperatureCoupledBaffleFvPatchScalarField"
"::interfaceOwner(const polyMesh&"
", const polyPatch&)const"
) << "Cannot find region " << myRegion.name()
<< " neither in fluids " << props.fluidRegionNames()
<< " nor in solids " << props.solidRegionNames()
<< exit(FatalError);
}
myIndex = props.fluidRegionNames().size() + i;
}
label nbrIndex = findIndex
(
props.fluidRegionNames(),
nbrRegion.name()
);
if (nbrIndex == -1)
{
label i = findIndex(props.solidRegionNames(), nbrRegion.name());
if (i == -1)
{
FatalErrorIn
(
"coupleManager::interfaceOwner"
"(const polyMesh&, const polyPatch&) const"
) << "Cannot find region " << nbrRegion.name()
<< " neither in fluids " << props.fluidRegionNames()
<< " nor in solids " << props.solidRegionNames()
<< exit(FatalError);
}
nbrIndex = props.fluidRegionNames().size() + i;
}
return myIndex < nbrIndex;
}
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::solidWallMixedTemperatureCoupledFvPatchScalarField:: Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -104,10 +121,10 @@ solidWallMixedTemperatureCoupledFvPatchScalarField
} }
Foam::solidWallMixedTemperatureCoupledFvPatchScalarField:: Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const solidWallMixedTemperatureCoupledFvPatchScalarField& ptf, const turbulentTemperatureCoupledBaffleFvPatchScalarField& ptf,
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF, const DimensionedField<scalar, volMesh>& iF,
const fvPatchFieldMapper& mapper const fvPatchFieldMapper& mapper
@ -120,8 +137,8 @@ solidWallMixedTemperatureCoupledFvPatchScalarField
{} {}
Foam::solidWallMixedTemperatureCoupledFvPatchScalarField:: Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF, const DimensionedField<scalar, volMesh>& iF,
@ -136,8 +153,8 @@ solidWallMixedTemperatureCoupledFvPatchScalarField
{ {
FatalErrorIn FatalErrorIn
( (
"solidWallMixedTemperatureCoupledFvPatchScalarField::" "turbulentTemperatureCoupledBaffleFvPatchScalarField::"
"solidWallMixedTemperatureCoupledFvPatchScalarField\n" "turbulentTemperatureCoupledBaffleFvPatchScalarField\n"
"(\n" "(\n"
" const fvPatch& p,\n" " const fvPatch& p,\n"
" const DimensionedField<scalar, volMesh>& iF,\n" " const DimensionedField<scalar, volMesh>& iF,\n"
@ -172,10 +189,10 @@ solidWallMixedTemperatureCoupledFvPatchScalarField
} }
Foam::solidWallMixedTemperatureCoupledFvPatchScalarField:: Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const solidWallMixedTemperatureCoupledFvPatchScalarField& wtcsf, const turbulentTemperatureCoupledBaffleFvPatchScalarField& wtcsf,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
) )
: :
@ -188,14 +205,32 @@ solidWallMixedTemperatureCoupledFvPatchScalarField
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const Foam::fvPatchScalarField& Foam::tmp<Foam::scalarField>
Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::K() const Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::K() const
{ {
return this->patch().lookupPatchField<volScalarField, scalar>(KName_); if (KName_ == "none")
{
const compressible::RASModel& model =
db().lookupObject<compressible::RASModel>("RASProperties");
tmp<volScalarField> talpha = model.alphaEff();
const basicThermo& thermo =
db().lookupObject<basicThermo>("thermophysicalProperties");
return
talpha().boundaryField()[patch().index()]
*thermo.rho()().boundaryField()[patch().index()]
*thermo.Cp()().boundaryField()[patch().index()];
}
else
{
return patch().lookupPatchField<volScalarField, scalar>(KName_);
}
} }
void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs() void Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::updateCoeffs()
{ {
if (updated()) if (updated())
{ {
@ -208,29 +243,29 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
patch().patch() patch().patch()
); );
const polyMesh& nbrMesh = mpp.sampleMesh(); const polyMesh& nbrMesh = mpp.sampleMesh();
const fvPatch& nbrPatch = refCast<const fvMesh>
(
nbrMesh
).boundary()[mpp.samplePolyPatch().index()];
// Force recalculation of mapping and schedule // Force recalculation of mapping and schedule
const mapDistribute& distMap = mpp.map(); const mapDistribute& distMap = mpp.map();
(void)distMap.schedule(); (void)distMap.schedule();
tmp<scalarField> intFld = patchInternalField(); tmp<scalarField> intFld = patchInternalField();
if (interfaceOwner(nbrMesh)) if (interfaceOwner(nbrMesh, nbrPatch.patch()))
{ {
// Note: other side information could be cached - it only needs // Note: other side information could be cached - it only needs
// to be updated the first time round the iteration (i.e. when // to be updated the first time round the iteration (i.e. when
// switching regions) but unfortunately we don't have this information. // switching regions) but unfortunately we don't have this information.
const fvPatch& nbrPatch = refCast<const fvMesh>
(
nbrMesh
).boundary()[mpp.samplePolyPatch().index()];
// Calculate the temperature by harmonic averaging // Calculate the temperature by harmonic averaging
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const solidWallMixedTemperatureCoupledFvPatchScalarField& nbrField = const turbulentTemperatureCoupledBaffleFvPatchScalarField& nbrField =
refCast<const solidWallMixedTemperatureCoupledFvPatchScalarField> refCast<const turbulentTemperatureCoupledBaffleFvPatchScalarField>
( (
nbrPatch.lookupPatchField<volScalarField, scalar> nbrPatch.lookupPatchField<volScalarField, scalar>
( (
@ -262,7 +297,6 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
nbrKDelta nbrKDelta
); );
tmp<scalarField> myKDelta = K()*patch().deltaCoeffs(); tmp<scalarField> myKDelta = K()*patch().deltaCoeffs();
// Calculate common wall temperature. Reuse *this to store common value. // Calculate common wall temperature. Reuse *this to store common value.
@ -283,7 +317,7 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
distMap.subMap(), distMap.subMap(),
Twall Twall
); );
const_cast<solidWallMixedTemperatureCoupledFvPatchScalarField&> const_cast<turbulentTemperatureCoupledBaffleFvPatchScalarField&>
( (
nbrField nbrField
).fvPatchScalarField::operator=(Twall); ).fvPatchScalarField::operator=(Twall);
@ -302,7 +336,7 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
{ {
scalar Q = gSum(K()*patch().magSf()*normalGradient()); scalar Q = gSum(K()*patch().magSf()*normalGradient());
Info<< "solidWallMixedTemperatureCoupledFvPatchScalarField::" Info<< "turbulentTemperatureCoupledBaffleFvPatchScalarField::"
<< "updateCoeffs() :" << "updateCoeffs() :"
<< " patch:" << patch().name() << " patch:" << patch().name()
<< " heatFlux:" << Q << " heatFlux:" << Q
@ -339,7 +373,7 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
{ {
label nTotSize = returnReduce(this->size(), sumOp<label>()); label nTotSize = returnReduce(this->size(), sumOp<label>());
Info<< "solidWallMixedTemperatureCoupledFvPatchScalarField::" Info<< "turbulentTemperatureCoupledBaffleFvPatchScalarField::"
<< "updateCoeffs() :" << "updateCoeffs() :"
<< " patch:" << patch().name() << " patch:" << patch().name()
<< " out of:" << nTotSize << " out of:" << nTotSize
@ -351,7 +385,7 @@ void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::updateCoeffs()
} }
void Foam::solidWallMixedTemperatureCoupledFvPatchScalarField::write void Foam::turbulentTemperatureCoupledBaffleFvPatchScalarField::write
( (
Ostream& os Ostream& os
) const ) const
@ -372,7 +406,7 @@ namespace Foam
makePatchTypeField makePatchTypeField
( (
fvPatchScalarField, fvPatchScalarField,
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
); );
} // End namespace Foam } // End namespace Foam

View File

@ -23,11 +23,12 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
Description Description
Mixed boundary condition for temperature, to be used by the Mixed boundary condition for temperature, to be used for heat-transfer
conjugate heat transfer solver. on back-to-back baffles.
If my temperature is T1, neighbour is T2: If my temperature is T1, neighbour is T2:
T1 > T2: my side becomes fixedValue T2 bc, other side becomes fixedGradient. T1 > T2: my side becomes fixedValue T2 bc, other side becomes fixedGradient.
@ -36,14 +37,17 @@ Description
Example usage: Example usage:
myInterfacePatchName myInterfacePatchName
{ {
type solidWallMixedTemperatureCoupled; type turbulentTemperatureCoupledBaffle;
neighbourFieldName T; neighbourFieldName T;
K K; K K; // or none
value uniform 300; value uniform 300;
} }
Needs to be on underlying directMapped(Wall)FvPatch. Needs to be on underlying directMapped(Wall)FvPatch.
Note: if K is "none" looks up RASModel and basicThermo, otherwise expects
the solver to calculate a 'K' field.
Note: runs in parallel with arbitrary decomposition. Uses directMapped Note: runs in parallel with arbitrary decomposition. Uses directMapped
functionality to calculate exchange. functionality to calculate exchange.
@ -54,12 +58,12 @@ Description
this for last outer iteration but don't have access to this. this for last outer iteration but don't have access to this.
SourceFiles SourceFiles
solidWallMixedTemperatureCoupledFvPatchScalarField.C turbulentTemperatureCoupledBaffleFvPatchScalarField.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef solidWallMixedTemperatureCoupledFvPatchScalarField_H #ifndef turbulentTemperatureCoupledBaffleFvPatchScalarField_H
#define solidWallMixedTemperatureCoupledFvPatchScalarField_H #define turbulentTemperatureCoupledBaffleFvPatchScalarField_H
#include "fvPatchFields.H" #include "fvPatchFields.H"
#include "mixedFvPatchFields.H" #include "mixedFvPatchFields.H"
@ -71,10 +75,10 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class solidWallMixedTemperatureCoupledFvPatchScalarField Declaration Class turbulentTemperatureCoupledBaffleFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class solidWallMixedTemperatureCoupledFvPatchScalarField class turbulentTemperatureCoupledBaffleFvPatchScalarField
: :
public mixedFvPatchScalarField public mixedFvPatchScalarField
{ {
@ -92,26 +96,26 @@ class solidWallMixedTemperatureCoupledFvPatchScalarField
// Private Member Functions // Private Member Functions
//- Am I or neighbour owner of interface //- Am I or neighbour owner of interface
bool interfaceOwner(const polyMesh& nbrRegion) const; bool interfaceOwner(const polyMesh&, const polyPatch&) const;
public: public:
//- Runtime type information //- Runtime type information
TypeName("solidWallMixedTemperatureCoupled"); TypeName("turbulentTemperatureCoupledBaffle");
// Constructors // Constructors
//- Construct from patch and internal field //- Construct from patch and internal field
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const fvPatch&, const fvPatch&,
const DimensionedField<scalar, volMesh>& const DimensionedField<scalar, volMesh>&
); );
//- Construct from patch, internal field and dictionary //- Construct from patch, internal field and dictionary
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const fvPatch&, const fvPatch&,
const DimensionedField<scalar, volMesh>&, const DimensionedField<scalar, volMesh>&,
@ -119,10 +123,10 @@ public:
); );
//- Construct by mapping given //- Construct by mapping given
// solidWallMixedTemperatureCoupledFvPatchScalarField onto a new patch // turbulentTemperatureCoupledBaffleFvPatchScalarField onto a new patch
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const solidWallMixedTemperatureCoupledFvPatchScalarField&, const turbulentTemperatureCoupledBaffleFvPatchScalarField&,
const fvPatch&, const fvPatch&,
const DimensionedField<scalar, volMesh>&, const DimensionedField<scalar, volMesh>&,
const fvPatchFieldMapper& const fvPatchFieldMapper&
@ -133,14 +137,14 @@ public:
{ {
return tmp<fvPatchScalarField> return tmp<fvPatchScalarField>
( (
new solidWallMixedTemperatureCoupledFvPatchScalarField(*this) new turbulentTemperatureCoupledBaffleFvPatchScalarField(*this)
); );
} }
//- Construct as copy setting internal field reference //- Construct as copy setting internal field reference
solidWallMixedTemperatureCoupledFvPatchScalarField turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
const solidWallMixedTemperatureCoupledFvPatchScalarField&, const turbulentTemperatureCoupledBaffleFvPatchScalarField&,
const DimensionedField<scalar, volMesh>& const DimensionedField<scalar, volMesh>&
); );
@ -152,7 +156,7 @@ public:
{ {
return tmp<fvPatchScalarField> return tmp<fvPatchScalarField>
( (
new solidWallMixedTemperatureCoupledFvPatchScalarField new turbulentTemperatureCoupledBaffleFvPatchScalarField
( (
*this, *this,
iF iF
@ -164,7 +168,7 @@ public:
// Member functions // Member functions
//- Get corresponding K field //- Get corresponding K field
const fvPatchScalarField& K() const; tmp<scalarField> K() const;
//- Return true if this patch field fixes a value. //- Return true if this patch field fixes a value.
// Needed to check if a level has to be specified while solving // Needed to check if a level has to be specified while solving

View File

@ -70,7 +70,7 @@ void vanDriestDelta::calcDelta()
const fvPatchList& patches = mesh_.boundary(); const fvPatchList& patches = mesh_.boundary();
forAll(patches, patchi) forAll(patches, patchi)
{ {
if (isType<wallFvPatch>(patches[patchi])) if (isA<wallFvPatch>(patches[patchi]))
{ {
const fvPatchVectorField& Uw = U.boundaryField()[patchi]; const fvPatchVectorField& Uw = U.boundaryField()[patchi];
const scalarField& nuw = nu.boundaryField()[patchi]; const scalarField& nuw = nu.boundaryField()[patchi];

View File

@ -331,7 +331,7 @@ void LRR::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -390,7 +390,7 @@ void LRR::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
symmTensorField& Rw = R_.boundaryField()[patchi]; symmTensorField& Rw = R_.boundaryField()[patchi];

View File

@ -373,7 +373,7 @@ void LaunderGibsonRSTM::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -441,7 +441,7 @@ void LaunderGibsonRSTM::correct()
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (typeid(curPatch) == typeid(wallFvPatch)) if (isA<wallFvPatch>(curPatch))
{ {
symmTensorField& Rw = R_.boundaryField()[patchi]; symmTensorField& Rw = R_.boundaryField()[patchi];

View File

@ -14,7 +14,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -29,7 +29,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -58,7 +58,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {

View File

@ -14,7 +14,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -29,7 +29,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {
@ -58,7 +58,7 @@
{ {
const fvPatch& curPatch = patches[patchi]; const fvPatch& curPatch = patches[patchi];
if (isType<wallFvPatch>(curPatch)) if (isA<wallFvPatch>(curPatch))
{ {
forAll(curPatch, facei) forAll(curPatch, facei)
{ {

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