Merge branch 'master' of ssh://noisy/home/noisy3/OpenFOAM/OpenFOAM-dev

This commit is contained in:
henry
2010-05-17 15:16:56 +01:00
436 changed files with 12350 additions and 4843 deletions

View File

@ -14,7 +14,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
label inertIndex = -1; label inertIndex = -1;
volScalarField Yt = 0.0*Y[0]; volScalarField Yt = 0.0*Y[0];
for (label i=0; i<Y.size(); i++) forAll(Y, i)
{ {
if (Y[i].name() != inertSpecie) if (Y[i].name() != inertSpecie)
{ {

View File

@ -43,7 +43,7 @@ volScalarField Sevap
dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0) dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0)
); );
for (label i=0; i<Y.size(); i++) forAll(Y, i)
{ {
if (dieselSpray.isLiquidFuel()[i]) if (dieselSpray.isLiquidFuel()[i])
{ {

View File

@ -13,7 +13,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
label inertIndex = -1; label inertIndex = -1;
volScalarField Yt = 0.0*Y[0]; volScalarField Yt = 0.0*Y[0];
for (label i=0; i<Y.size(); i++) forAll(Y, i)
{ {
if (Y[i].name() != inertSpecie) if (Y[i].name() != inertSpecie)
{ {

View File

@ -13,7 +13,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
label inertIndex = -1; label inertIndex = -1;
volScalarField Yt = 0.0*Y[0]; volScalarField Yt = 0.0*Y[0];
for (label i=0; i<Y.size(); i++) forAll(Y, i)
{ {
if (Y[i].name() != inertSpecie) if (Y[i].name() != inertSpecie)
{ {

View File

@ -63,8 +63,7 @@
<< exit(FatalIOError); << exit(FatalIOError);
} }
const labelList& faces = const labelList& faces = mesh.faceZones()[magnetZonei];
mesh.faceZones()[magnetZonei];
const scalar muri = magnets[i].mur(); const scalar muri = magnets[i].mur();
const scalar Mri = magnets[i].Mr().value(); const scalar Mri = magnets[i].Mr().value();

View File

@ -1,7 +1,6 @@
// Initialise solid field pointer lists // Initialise solid field pointer lists
PtrList<volScalarField> rhos(solidRegions.size()); PtrList<volScalarField> rhos(solidRegions.size());
PtrList<volScalarField> cps(solidRegions.size()); PtrList<volScalarField> cps(solidRegions.size());
PtrList<volScalarField> rhosCps(solidRegions.size());
PtrList<volScalarField> Ks(solidRegions.size()); PtrList<volScalarField> Ks(solidRegions.size());
PtrList<volScalarField> Ts(solidRegions.size()); PtrList<volScalarField> Ts(solidRegions.size());
@ -47,12 +46,6 @@
) )
); );
rhosCps.set
(
i,
new volScalarField("rhosCps", rhos[i]*cps[i])
);
Info<< " Adding to Ks\n" << endl; Info<< " Adding to Ks\n" << endl;
Ks.set Ks.set
( (

View File

@ -1,7 +1,6 @@
// Initialise solid field pointer lists // Initialise solid field pointer lists
PtrList<volScalarField> rhos(solidRegions.size()); PtrList<volScalarField> rhos(solidRegions.size());
PtrList<volScalarField> cps(solidRegions.size()); PtrList<volScalarField> cps(solidRegions.size());
PtrList<volScalarField> rhosCps(solidRegions.size());
PtrList<volScalarField> Ks(solidRegions.size()); PtrList<volScalarField> Ks(solidRegions.size());
PtrList<volScalarField> Ts(solidRegions.size()); PtrList<volScalarField> Ts(solidRegions.size());
@ -47,12 +46,6 @@
) )
); );
rhosCps.set
(
i,
new volScalarField("rhosCps", rhos[i]*cps[i])
);
Info<< " Adding to Ks\n" << endl; Info<< " Adding to Ks\n" << endl;
Ks.set Ks.set
( (

View File

@ -8,7 +8,7 @@
( (
solidRegions[regionI], solidRegions[regionI],
runTime, runTime,
rhosCps[regionI], rhos[regionI]*cps[regionI],
Ks[regionI] Ks[regionI]
), ),
DiNum DiNum

View File

@ -1,4 +1,4 @@
Info << "Reading field p\n" << endl; Info<< "Reading field p\n" << endl;
volScalarField p volScalarField p
( (
IOobject IOobject
@ -12,7 +12,7 @@
mesh mesh
); );
Info << "Reading field U\n" << endl; Info<< "Reading field U\n" << endl;
volVectorField U volVectorField U
( (
IOobject IOobject
@ -34,7 +34,7 @@
setRefCell(p, mesh.solutionDict().subDict("SIMPLE"), pRefCell, pRefValue); setRefCell(p, mesh.solutionDict().subDict("SIMPLE"), pRefCell, pRefValue);
Info << "Reading field pa\n" << endl; Info<< "Reading field pa\n" << endl;
volScalarField pa volScalarField pa
( (
IOobject IOobject
@ -48,7 +48,7 @@
mesh mesh
); );
Info << "Reading field Ua\n" << endl; Info<< "Reading field Ua\n" << endl;
volVectorField Ua volVectorField Ua
( (
IOobject IOobject
@ -84,10 +84,8 @@
dimensionedScalar lambda(laminarTransport.lookup("lambda")); dimensionedScalar lambda(laminarTransport.lookup("lambda"));
dimensionedScalar alphaMax(laminarTransport.lookup("alphaMax")); dimensionedScalar alphaMax(laminarTransport.lookup("alphaMax"));
const labelList& inletCells = const labelList& inletCells = mesh.boundary()["inlet"].faceCells();
mesh.boundary()[mesh.boundaryMesh().findPatchID("inlet")].faceCells(); //const labelList& outletCells = mesh.boundary()["outlet"].faceCells();
//const labelList& outletCells =
// mesh.boundary()[mesh.boundaryMesh().findPatchID("outlet")].faceCells();
volScalarField alpha volScalarField alpha
( (

View File

@ -27,7 +27,7 @@
zeroGradientFvPatchScalarField::typeName zeroGradientFvPatchScalarField::typeName
); );
for (label i=0; i<p.boundaryField().size(); i++) forAll(p.boundaryField(), i)
{ {
if (p.boundaryField()[i].fixesValue()) if (p.boundaryField()[i].fixesValue())
{ {

View File

@ -41,7 +41,12 @@ Description
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addOption("cloudName", "cloud name"); argList::addOption
(
"cloudName",
"name",
"specify alternative cloud name. default is 'kinematicCloud'"
);
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"

View File

@ -14,7 +14,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
label inertIndex = -1; label inertIndex = -1;
volScalarField Yt = 0.0*Y[0]; volScalarField Yt = 0.0*Y[0];
for (label i=0; i<Y.size(); i++) forAll(Y, i)
{ {
if (Y[i].name() != inertSpecie) if (Y[i].name() != inertSpecie)
{ {

View File

@ -41,7 +41,12 @@ Description
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addOption("cloudName", "cloud name"); argList::addOption
(
"cloudName",
"name",
"specify alternative cloud name. default is 'kinematicCloud'"
);
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"

View File

@ -36,7 +36,7 @@
calculatedFvPatchScalarField::typeName calculatedFvPatchScalarField::typeName
); );
for (label i=0; i<Ua.boundaryField().size(); i++) forAll(Ua.boundaryField(), i)
{ {
if (isA<fixedValueFvPatchVectorField>(Ua.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(Ua.boundaryField()[i]))
{ {

View File

@ -36,7 +36,7 @@
calculatedFvPatchScalarField::typeName calculatedFvPatchScalarField::typeName
); );
for (label i=0; i<Ub.boundaryField().size(); i++) forAll(Ub.boundaryField(), i)
{ {
if (isA<fixedValueFvPatchVectorField>(Ub.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(Ub.boundaryField()[i]))
{ {

View File

@ -135,7 +135,7 @@
zeroGradientFvPatchScalarField::typeName zeroGradientFvPatchScalarField::typeName
); );
for (label i=0; i<p.boundaryField().size(); i++) forAll(p.boundaryField(), i)
{ {
if (p.boundaryField()[i].fixesValue()) if (p.boundaryField()[i].fixesValue())
{ {

View File

@ -98,7 +98,7 @@
zeroGradientFvPatchScalarField::typeName zeroGradientFvPatchScalarField::typeName
); );
for (label i=0; i<p.boundaryField().size(); i++) forAll(p.boundaryField(), i)
{ {
if (p.boundaryField()[i].fixesValue()) if (p.boundaryField()[i].fixesValue())
{ {

View File

@ -7,7 +7,7 @@
zeroGradientFvPatchScalarField::typeName zeroGradientFvPatchScalarField::typeName
); );
for (label i=0; i<p.boundaryField().size(); i++) forAll(p.boundaryField(), i)
{ {
if (p.boundaryField()[i].fixesValue()) if (p.boundaryField()[i].fixesValue())
{ {

View File

@ -7,7 +7,7 @@
zeroGradientFvPatchScalarField::typeName zeroGradientFvPatchScalarField::typeName
); );
for (label i=0; i<p.boundaryField().size(); i++) forAll(p.boundaryField(), i)
{ {
if (p.boundaryField()[i].fixesValue()) if (p.boundaryField()[i].fixesValue())
{ {

View File

@ -17,7 +17,7 @@ phi =
surfaceScalarField phiU("phiU", phi); surfaceScalarField phiU("phiU", phi);
phi -= ghf*fvc::snGrad(rho)*rUAf*mesh.magSf(); phi -= ghf*fvc::snGrad(rho)*rUAf*mesh.magSf();
for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{ {
fvScalarMatrix pmhEqn fvScalarMatrix pmhEqn
( (

View File

@ -106,7 +106,7 @@ Foam::phaseModel::phaseModel
calculatedFvPatchScalarField::typeName calculatedFvPatchScalarField::typeName
); );
for (label i=0; i<U_.boundaryField().size(); i++) forAll(U_.boundaryField(), i)
{ {
if (isA<fixedValueFvPatchVectorField>(U_.boundaryField()[i])) if (isA<fixedValueFvPatchVectorField>(U_.boundaryField()[i]))
{ {

View File

@ -43,7 +43,6 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::validArgs.clear();
argList args(argc, argv); argList args(argc, argv);
FixedList<label, 4> list; FixedList<label, 4> list;

View File

@ -104,7 +104,6 @@ public:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::validArgs.clear();
argList::validArgs.append("ODESolver"); argList::validArgs.append("ODESolver");
argList args(argc, argv); argList args(argc, argv);

View File

@ -45,7 +45,6 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::validArgs.clear();
argList args(argc, argv); argList args(argc, argv);
//Pout.prefix() = '[' + name(Pstream::myProcNo()) + "] "; //Pout.prefix() = '[' + name(Pstream::myProcNo()) + "] ";

View File

@ -220,10 +220,7 @@ int main(int argc, char *argv[])
# include "createPolyMesh.H" # include "createPolyMesh.H"
const word patchName = args[1]; const word patchName = args[1];
const polyPatch& patch = mesh.boundaryMesh()[patchName];
label patchI = mesh.boundaryMesh().findPatchID(patchName);
const polyPatch& patch = mesh.boundaryMesh()[patchI];
Info<< "Patch:" << patch.name() << endl; Info<< "Patch:" << patch.name() << endl;

View File

@ -35,7 +35,6 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::validArgs.clear();
argList::validArgs.append("CHEMKINIIIFile"); argList::validArgs.append("CHEMKINIIIFile");
argList::addOption("thermo", "fileName"); argList::addOption("thermo", "fileName");
argList args(argc, argv); argList args(argc, argv);

View File

@ -38,7 +38,7 @@ Description
E.g. to allow all faces on same patch to be merged: E.g. to allow all faces on same patch to be merged:
combinePatchFaces .. cavity 180 -concaveAngle 90 combinePatchFaces 180 -concaveAngle 90
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -429,15 +429,18 @@ int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" # include "addOverwriteOption.H"
argList::validArgs.append("feature angle [0..180]"); argList::validArgs.append("featureAngle [0..180]");
argList::addOption argList::addOption
( (
"concaveAngle", "concaveAngle",
"[0..180]", "degrees",
"specify concave angle [0..180] degrees (default: 30.0 degrees)" "specify concave angle [0..180] (default: 30 degrees)"
);
argList::addBoolOption
(
"snapMesh",
"use system/snapMeshDict"
); );
argList::addBoolOption("snapMesh");
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View File

@ -46,12 +46,18 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" #include "addOverwriteOption.H"
argList::noParallel(); argList::noParallel();
argList::validArgs.append("patchName"); argList::validArgs.append("patchName");
argList::validArgs.append("edgeWeight"); argList::validArgs.append("edgeWeight");
argList::addOption("useSet", "cellSet"); argList::addOption
(
"useSet",
"name",
"restrict cells to refine based on specified cellSet name"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View File

@ -96,11 +96,15 @@ bool limitRefinementLevel
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("readLevel"); argList::addBoolOption
(
"readLevel",
"read level from refinementLevel file"
);
# include "setRootCase.H" #include "setRootCase.H"
# include "createTime.H" #include "createTime.H"
# include "createPolyMesh.H" #include "createPolyMesh.H"
Info<< "Dividing cells into bins depending on cell volume.\nThis will" Info<< "Dividing cells into bins depending on cell volume.\nThis will"
<< " correspond to refinement levels for a mesh with only 2x2x2" << " correspond to refinement levels for a mesh with only 2x2x2"
@ -109,7 +113,7 @@ int main(int argc, char *argv[])
<< " to allow for some truncation error." << " to allow for some truncation error."
<< nl << endl; << nl << endl;
bool readLevel = args.optionFound("readLevel"); const bool readLevel = args.optionFound("readLevel");
const scalarField& vols = mesh.cellVolumes(); const scalarField& vols = mesh.cellVolumes();

View File

@ -517,17 +517,35 @@ void collectCuts
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
(
"split cells with flat faces"
);
#include "addOverwriteOption.H"
argList::noParallel(); argList::noParallel();
argList::addOption("set", "cellSet name"); argList::validArgs.append("edgeAngle [0..360]");
argList::addBoolOption("geometry");
argList::addOption("tol", "edge snap tolerance");
argList::validArgs.append("edge angle [0..360]");
# include "setRootCase.H" argList::addOption
# include "createTime.H" (
"set",
"name",
"split cells from specified cellSet only"
);
argList::addBoolOption
(
"geometry",
"use geometric cut for hexes as well"
);
argList::addOption
(
"tol",
"scalar", "edge snap tolerance (default 0.2)"
);
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createPolyMesh.H" #include "createPolyMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
const scalar featureAngle = args.argRead<scalar>(1); const scalar featureAngle = args.argRead<scalar>(1);
@ -538,7 +556,7 @@ int main(int argc, char *argv[])
const bool geometry = args.optionFound("geometry"); const bool geometry = args.optionFound("geometry");
const bool overwrite = args.optionFound("overwrite"); const bool overwrite = args.optionFound("overwrite");
scalar edgeTol = args.optionLookupOrDefault("tol", 0.2); const scalar edgeTol = args.optionLookupOrDefault("tol", 0.2);
Info<< "Trying to split cells with internal angles > feature angle\n" << nl Info<< "Trying to split cells with internal angles > feature angle\n" << nl
<< "featureAngle : " << featureAngle << nl << "featureAngle : " << featureAngle << nl

View File

@ -235,7 +235,12 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("ANSYS input file"); argList::validArgs.append("ANSYS input file");
argList::addOption("scale", "scale factor"); argList::addOption
(
"scale",
"factor",
"geometry scaling factor - default is 1"
);
argList args(argc, argv); argList args(argc, argv);
@ -244,8 +249,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
# include "createTime.H" # include "createTime.H"

View File

@ -49,7 +49,12 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("CFX geom file"); argList::validArgs.append("CFX geom file");
argList::addOption("scale", "scale factor"); argList::addOption
(
"scale",
"factor",
"geometry scaling factor - default is 1"
);
argList args(argc, argv); argList args(argc, argv);
@ -58,8 +63,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
# include "createTime.H" # include "createTime.H"

View File

@ -761,10 +761,30 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("Fluent mesh file"); argList::validArgs.append("Fluent mesh file");
argList::addOption("scale", "scale factor"); argList::addOption
argList::addOption("ignoreCellGroups", "cell group names"); (
argList::addOption("ignoreFaceGroups", "face group names"); "scale",
argList::addBoolOption("cubit"); "factor",
"geometry scaling factor - default is 1"
);
argList::addOption
(
"ignoreCellGroups",
"names",
"specify cell groups to ignore"
);
argList::addOption
(
"ignoreFaceGroups",
"names",
"specify face groups to ignore"
);
argList::addBoolOption
(
"cubit",
"special parsing of (incorrect) cubit files"
);
argList args(argc, argv); argList args(argc, argv);

View File

@ -20,8 +20,7 @@ Notes for fluentMeshToFoam with zone preservation
with the cellZones(), faceZones() and pointZones() member functions with the cellZones(), faceZones() and pointZones() member functions
- Example (Members from polyMesh.H and ZoneMesh.H): - Example (Members from polyMesh.H and ZoneMesh.H):
label thisCellZoneID = mesh.cellZones().findZoneID("thisZoneName"); const labelList& thisCellZone = mesh.cellZones()["thisZoneName"];
const labelList& thisCellZone = mesh.cellZones()[thisCellZoneID];
- Zone integrity is preserved during mesh modification and decompomposition. - Zone integrity is preserved during mesh modification and decompomposition.

View File

@ -866,9 +866,22 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("Fluent mesh file"); argList::validArgs.append("Fluent mesh file");
argList::addOption("scale", "scale factor"); argList::addOption
argList::addBoolOption("writeSets"); (
argList::addBoolOption("writeZones"); "scale",
"factor",
"geometry scaling factor - default is 1"
);
argList::addBoolOption
(
"writeSets",
"write cell zones and patches as sets"
);
argList::addBoolOption
(
"writeZones",
"write cell zones as zones"
);
argList args(argc, argv); argList args(argc, argv);
@ -877,8 +890,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
const bool writeSets = args.optionFound("writeSets"); const bool writeSets = args.optionFound("writeSets");
const bool writeZones = args.optionFound("writeZones"); const bool writeZones = args.optionFound("writeZones");
@ -1554,7 +1566,7 @@ int main(int argc, char *argv[])
// interior boundaries are handled via faceSets // interior boundaries are handled via faceSets
// cell zones will only be written if there is more than one // cell zones will only be written if there is more than one
if (writeZones && cellGroupZoneID.size()>1) if (writeZones && cellGroupZoneID.size() > 1)
{ {
Info<< "Adding Zones" << endl; Info<< "Adding Zones" << endl;
List<pointZone*> pz(0); List<pointZone*> pz(0);

View File

@ -69,7 +69,7 @@ int main(int argc, char *argv[])
( (
"scale", "scale",
"factor", "factor",
"specify geometry scaling factor - default is 1000 ([m] to [mm])" "geometry scaling factor - default is 1000 ([m] to [mm])"
); );
argList::addBoolOption argList::addBoolOption
( (

View File

@ -61,8 +61,8 @@ int main(int argc, char *argv[])
argList::addOption argList::addOption
( (
"scale", "scale",
"scale", "factor",
"specify geometry scaling factor" "geometry scaling factor - default is 1"
); );
argList::addBoolOption argList::addBoolOption
( (

View File

@ -628,7 +628,12 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("GAMBIT file"); argList::validArgs.append("GAMBIT file");
argList::addOption("scale", "scale factor"); argList::addOption
(
"scale",
"factor",
"geometry scaling factor - default is 1"
);
argList args(argc, argv); argList args(argc, argv);
@ -637,8 +642,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
# include "createTime.H" # include "createTime.H"

View File

@ -716,7 +716,11 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append(".msh file"); argList::validArgs.append(".msh file");
argList::addBoolOption("keepOrientation"); argList::addBoolOption
(
"keepOrientation",
"retain raw orientation for prisms/hexs"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View File

@ -46,7 +46,7 @@ Description
using namespace Foam; using namespace Foam;
// Supported KIVA versions //- Supported KIVA versions
enum kivaVersions enum kivaVersions
{ {
kiva3, kiva3,
@ -59,37 +59,51 @@ enum kivaVersions
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::addOption("file", "fileName"); argList::addOption
argList::addOption("version", "[kiva3|kiva3v]"); (
argList::addOption("zHeadMin", "scalar"); "file",
"name",
"specify alternative input file name - default is otape17"
);
argList::addOption
(
"version",
"version",
"specify kiva version [kiva3|kiva3v] - default is '3v'"
);
argList::addOption
(
"zHeadMin",
"scalar",
"minimum z-height for transferring liner faces to cylinder-head"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
fileName kivaFileName("otape17"); const fileName kivaFileName =
args.optionReadIfPresent("file", kivaFileName); args.optionLookupOrDefault<fileName>("file", "otape17");
kivaVersions kivaVersion = kiva3v; kivaVersions kivaVersion = kiva3v;
if (args.optionFound("version")) if (args.optionFound("version"))
{ {
const word kivaVersionName = args["version"]; const word versionName = args["version"];
if (kivaVersionName == "kiva3") if (versionName == "kiva3")
{ {
kivaVersion = kiva3; kivaVersion = kiva3;
} }
else if (kivaVersionName == "kiva3v") else if (versionName == "kiva3v")
{ {
kivaVersion = kiva3v; kivaVersion = kiva3v;
} }
else else
{ {
FatalErrorIn("main(int argc, char *argv[])") FatalErrorIn("main(int argc, char *argv[])")
<< "KIVA file version " << kivaVersionName << " not supported" << "KIVA file version " << versionName << " not supported"
<< exit(FatalError); << exit(FatalError);
args.printUsage(); args.printUsage();
FatalError.exit(1); FatalError.exit(1);
} }
} }

View File

@ -315,7 +315,7 @@ for (label i=0; i<nPoints; i++)
} }
} }
// Tranfer liner faces that are above the minimum cylinder-head z height // Transfer liner faces that are above the minimum cylinder-head z height
// into the cylinder-head region // into the cylinder-head region
if if
( (

View File

@ -56,7 +56,11 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append(".msh file"); argList::validArgs.append(".msh file");
argList::addBoolOption("hex"); argList::addBoolOption
(
"hex",
"treat input as containing hex instead of tet cells"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
@ -69,11 +73,11 @@ int main(int argc, char *argv[])
if (readHex) if (readHex)
{ {
Info<< "Trying to read " << nCells << " hexes." << endl << endl; Info<< "Trying to read " << nCells << " hexes." << nl << endl;
} }
else else
{ {
Info<< "Trying to read " << nCells << " tets." << endl << endl; Info<< "Trying to read " << nCells << " tets." << nl << endl;
} }
cellShapeList cells(nCells); cellShapeList cells(nCells);

View File

@ -57,10 +57,28 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("PLOT3D geom file"); argList::validArgs.append("PLOT3D geom file");
argList::addOption("scale", "scale factor"); argList::addOption
argList::addBoolOption("noBlank"); (
argList::addBoolOption("singleBlock"); "scale",
argList::addOption("2D", "thickness"); "factor",
"geometry scaling factor - default is 1"
);
argList::addBoolOption
(
"noBlank",
"skip blank items"
);
argList::addBoolOption
(
"singleBlock",
"input is a single block"
);
argList::addOption
(
"2D",
"thickness",
"use when converting a 2-D geometry"
);
argList args(argc, argv); argList args(argc, argv);
@ -69,8 +87,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = 1.0; const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
args.optionReadIfPresent("scale", scaleFactor);
bool readBlank = !args.optionFound("noBlank"); bool readBlank = !args.optionFound("noBlank");
bool singleBlock = args.optionFound("singleBlock"); bool singleBlock = args.optionFound("singleBlock");

View File

@ -356,7 +356,7 @@ int main(int argc, char *argv[])
argList::noParallel(); argList::noParallel();
timeSelector::addOptions(true, false); timeSelector::addOptions(true, false);
argList::validArgs.append("feature angle[0-180]"); argList::validArgs.append("featureAngle [0-180]");
argList::addBoolOption argList::addBoolOption
( (
"splitAllFaces", "splitAllFaces",

View File

@ -40,7 +40,12 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("SAMM mesh file prefix"); argList::validArgs.append("SAMM mesh file prefix");
argList::addOption("scale", "scale factor"); argList::addOption
(
"scale",
"factor",
"geometry scaling factor - default is 1"
);
argList args(argc, argv); argList args(argc, argv);
@ -49,7 +54,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0); const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
# include "createTime.H" # include "createTime.H"

View File

@ -40,7 +40,12 @@ int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.append("STAR mesh file prefix"); argList::validArgs.append("STAR mesh file prefix");
argList::addOption("scale", "scale factor"); argList::addOption
(
"scale",
"factor",
"geometry scaling factor - default is 1"
);
argList args(argc, argv); argList args(argc, argv);
@ -49,7 +54,7 @@ int main(int argc, char *argv[])
FatalError.exit(); FatalError.exit();
} }
scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0); const scalar scaleFactor = args.optionLookupOrDefault("scale", 1.0);
# include "createTime.H" # include "createTime.H"

View File

@ -69,7 +69,7 @@ int main(int argc, char *argv[])
argList::addOption argList::addOption
( (
"scale", "scale",
"scale", "factor",
"geometry scaling factor - default is 0.001 ([mm] to [m])" "geometry scaling factor - default is 0.001 ([mm] to [m])"
); );
argList::addBoolOption argList::addBoolOption

View File

@ -97,7 +97,11 @@ label findFace(const primitiveMesh& mesh, const face& f)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::validArgs.append("file prefix"); argList::validArgs.append("file prefix");
argList::addBoolOption("noFaceFile"); argList::addBoolOption
(
"noFaceFile",
"skip reading .face file for boundary information"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View File

@ -371,27 +371,65 @@ void writePointCells
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions(); argList::addNote
argList::addBoolOption("patchFaces"); (
argList::addBoolOption("patchEdges"); "for mesh debugging: write mesh as separate OBJ files"
argList::addOption("cell", "cellI"); );
argList::addOption("face", "faceI");
argList::addOption("point", "pointI");
argList::addOption("cellSet", "setName");
argList::addOption("faceSet", "setName");
# include "addRegionOption.H"
# include "setRootCase.H" timeSelector::addOptions();
# include "createTime.H" argList::addBoolOption
(
"patchFaces",
"write patch faces edges"
);
argList::addBoolOption
(
"patchEdges",
"write patch boundary edges"
);
argList::addOption
(
"cell",
"int",
"write points for the specified cell"
);
argList::addOption
(
"face",
"int",
"write specified face"
);
argList::addOption
(
"point",
"int",
"write specified point"
);
argList::addOption
(
"cellSet",
"name",
"write points for specified cellSet"
);
argList::addOption
(
"faceSet",
"name",
"write points for specified faceSet"
);
#include "addRegionOption.H"
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
bool patchFaces = args.optionFound("patchFaces"); const bool patchFaces = args.optionFound("patchFaces");
bool patchEdges = args.optionFound("patchEdges"); const bool patchEdges = args.optionFound("patchEdges");
bool doCell = args.optionFound("cell"); const bool doCell = args.optionFound("cell");
bool doPoint = args.optionFound("point"); const bool doPoint = args.optionFound("point");
bool doFace = args.optionFound("face"); const bool doFace = args.optionFound("face");
bool doCellSet = args.optionFound("cellSet"); const bool doCellSet = args.optionFound("cellSet");
bool doFaceSet = args.optionFound("faceSet"); const bool doFaceSet = args.optionFound("faceSet");
Info<< "Writing mesh objects as .obj files such that the object" Info<< "Writing mesh objects as .obj files such that the object"
@ -401,7 +439,7 @@ int main(int argc, char *argv[])
instantList timeDirs = timeSelector::select0(runTime, args); instantList timeDirs = timeSelector::select0(runTime, args);
# include "createNamedPolyMesh.H" #include "createNamedPolyMesh.H"
forAll(timeDirs, timeI) forAll(timeDirs, timeI)
{ {
@ -465,7 +503,6 @@ int main(int argc, char *argv[])
<< endl; << endl;
writePoints(mesh, cells.toc(), runTime.timeName()); writePoints(mesh, cells.toc(), runTime.timeName());
} }
if (doFaceSet) if (doFaceSet)
{ {

View File

@ -42,7 +42,7 @@ Usage
Specify an alternative mesh region. Specify an alternative mesh region.
@param -dict \<filename\> \n @param -dict \<filename\> \n
Specify an alternative dictionary for the block mesh description. Specify alternative dictionary for the block mesh description.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -80,7 +80,7 @@ int main(int argc, char *argv[])
( (
"dict", "dict",
"file", "file",
"specify an alternative dictionary for the blockMesh description" "specify alternative dictionary for the blockMesh description"
); );
# include "addRegionOption.H" # include "addRegionOption.H"

View File

@ -27,10 +27,7 @@
// Master patch // Master patch
const word masterPatchName(mergePatchPairs[pairI].first()); const word masterPatchName(mergePatchPairs[pairI].first());
const polyPatch& masterPatch = const polyPatch& masterPatch =
mesh.boundaryMesh() mesh.boundaryMesh()[masterPatchName];
[
mesh.boundaryMesh().findPatchID(masterPatchName)
];
labelList isf(masterPatch.size()); labelList isf(masterPatch.size());
@ -51,10 +48,7 @@
// Slave patch // Slave patch
const word slavePatchName(mergePatchPairs[pairI].second()); const word slavePatchName(mergePatchPairs[pairI].second());
const polyPatch& slavePatch = const polyPatch& slavePatch =
mesh.boundaryMesh() mesh.boundaryMesh()[slavePatchName];
[
mesh.boundaryMesh().findPatchID(slavePatchName)
];
labelList osf(slavePatch.size()); labelList osf(slavePatch.size());

View File

@ -123,7 +123,7 @@ void createDummyFvMeshFiles(const polyMesh& mesh, const word& regionName)
label findPatchID(const polyBoundaryMesh& patches, const word& name) label findPatchID(const polyBoundaryMesh& patches, const word& name)
{ {
label patchID = patches.findPatchID(name); const label patchID = patches.findPatchID(name);
if (patchID == -1) if (patchID == -1)
{ {

View File

@ -632,7 +632,7 @@ int main(int argc, char *argv[])
argList::validArgs.append("thickness"); argList::validArgs.append("thickness");
#include "addRegionOption.H" #include "addRegionOption.H"
argList::validOptions.insert("overwrite", ""); #include "addOverwriteOption.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createNamedMesh.H" #include "createNamedMesh.H"
@ -849,8 +849,7 @@ int main(int argc, char *argv[])
nExtrudeFaces = 0; nExtrudeFaces = 0;
forAll(zoneNames, i) forAll(zoneNames, i)
{ {
label zoneI = faceZones.findZoneID(zoneNames[i]); const faceZone& fz = faceZones[zoneNames[i]];
const faceZone& fz = faceZones[zoneI];
forAll(fz, j) forAll(fz, j)
{ {
extrudeTopPatchID[nExtrudeFaces] = interRegionTopPatch[i]; extrudeTopPatchID[nExtrudeFaces] = interRegionTopPatch[i];

View File

@ -143,11 +143,19 @@ castellatedMeshControls
} }
} }
// Optional angle to detect small-large cell situation perpendicular //- Optional angle to detect small-large cell situation
// to the surface. Is the angle of face w.r.t the local surface // perpendicular to the surface. Is the angle of face w.r.t.
// normal. Use on flat(ish) surfaces only. Otherwise // the local surface normal. Use on flat(ish) surfaces only.
// leave out or set to negative number. // Otherwise leave out or set to negative number.
//perpendicularAngle 10; //perpendicularAngle 10;
//- Optional faceZone and (for closed surface) cellZone with
// how to select the cells that are in the cellZone
// (inside / outside / specified insidePoint)
//faceZone sphere;
//cellZone sphere;
//cellZoneInside inside; //outside/insidePoint
} }
} }

View File

@ -1,4 +0,0 @@
cellSet.C
EXE = $(FOAM_APPBIN)/cellSet

View File

@ -1,196 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / 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 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Selects a cell set through a dictionary.
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "polyMesh.H"
#include "topoSetSource.H"
#include "cellSet.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
# include "setRootCase.H"
# include "createTime.H"
# include "createPolyMesh.H"
Info<< "Reading cellSetDict\n" << endl;
IOdictionary cellSetDict
(
IOobject
(
"cellSetDict",
runTime.system(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
const word setName(cellSetDict.lookup("name"));
const word actionName(cellSetDict.lookup("action"));
topoSetSource::setAction action = topoSetSource::toAction(actionName);
// Create topoSetSources
PtrList<topoSetSource> topoSetSources
(
cellSetDict.lookup("topoSetSources"),
topoSetSource::iNew(mesh)
);
// Load set to work
autoPtr<topoSet> currentSetPtr(NULL);
IOobject::readOption r;
if ((action == topoSetSource::NEW) || (action == topoSetSource::CLEAR))
{
r = IOobject::NO_READ;
currentSetPtr.reset
(
new cellSet
(
mesh,
setName,
mesh.nCells()/10+1 // Reasonable size estimate.
)
);
}
else
{
r = IOobject::MUST_READ;
currentSetPtr.reset
(
new cellSet
(
mesh,
setName,
r
)
);
}
topoSet& currentSet = currentSetPtr();
Info<< "Set:" << currentSet.name()
<< " Size:" << currentSet.size()
<< " Action:" << actionName
<< endl;
if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
{
// currentSet has been read so can make copy.
//backup(mesh, setName, currentSet, setName + "_old");
}
if (action == topoSetSource::CLEAR)
{
// Already handled above by not reading
}
else if (action == topoSetSource::INVERT)
{
currentSet.invert(currentSet.maxSize(mesh));
}
else if (action == topoSetSource::LIST)
{
currentSet.writeDebug(Info, mesh, 100);
Info<< endl;
}
else if (action == topoSetSource::SUBSET)
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
// Backup current set.
autoPtr<topoSet> oldSet
(
topoSet::New
(
currentSet.type(),
mesh,
currentSet.name() + "_old2",
currentSet
)
);
currentSet.clear();
topoSetSources[topoSetSourceI].applyToSet
(
topoSetSource::NEW,
currentSet
);
// Combine new value of currentSet with old one.
currentSet.subset(oldSet);
}
}
else
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
topoSetSources[topoSetSourceI].applyToSet(action, currentSet);
}
}
if (action != topoSetSource::LIST)
{
// Set has changed.
// Sync across coupled patches.
currentSet.sync(mesh);
Info<< "Writing " << currentSet.name()
<< " (size " << currentSet.size() << ") to "
<< currentSet.instance()/currentSet.local()
/currentSet.name()
<< endl << endl;
currentSet.write();
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,149 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object cellSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Name of set to operate on
name c0;
// One of clear/new/invert/add/delete|subset/list
action new;
// Actions to apply to cellSet. These are all the topoSetSource's ending
// in ..ToCell (see the meshTools library).
topoSetSources
(
// Select by explicitly providing cell labels
labelToCell
{
value (12 13 56); // labels of cells
}
// Copy elements from cellSet
cellToCell
{
set c1;
}
// Cells in cell zone
zoneToCell
{
name ".*Zone"; // Name of cellZone, regular expressions allowed
}
// Cells on master or slave side of faceZone
faceZoneToCell
{
name ".*Zone"; // Name of faceZone, regular expressions allowed
option master; // master/slave
}
// Select based on faceSet
faceToCell
{
set f0; // Name of faceSet
//option neighbour; // cell with neighbour in faceSet
//option owner; // ,, owner
option any; // cell with any face in faceSet
//option all; // cell with all faces in faceSet
}
// Select based on pointSet
pointToCell
{
set p0;
option any; // cell with any point in pointSet
//option all; // cell with all points in pointSet
}
// Select based on cellShape
shapeToCell
{
type hex; // hex/wedge/prism/pyr/tet/tetWedge/splitHex
}
// Cells with cell centre within box
boxToCell
{
box (0 0 0) (1 1 1);
}
// Cells with cell centre within box
// Is skewed, rotated box. Given as origin and three spanning vectors.
rotatedBoxToCell
{
origin (0.2 0.2 -10);
i (0.2 0.2 0);
j (-0.2 0.2 0);
k (10 10 10);
}
// Cells with centre within cylinder
cylinderToCell
{
p1 (0.2 0.2 -10); // start point on cylinder axis
p2 (0.2 0.2 0); // end point on cylinder axis
radius 5.0;
}
// Cells with centre within sphere
sphereToCell
{
centre (0.2 0.2 -10);
radius 5.0;
}
// Cells with cellCentre nearest to coordinates
nearestToCell
{
points ((0 0 0) (1 1 1)(2 2 2));
}
// Select based on surface
surfaceToCell
{
file "www.avl.com-geometry.stl";
outsidePoints ((-99 -99 -59)); // definition of outside
includeCut false; // cells cut by surface
includeInside false; // cells not on outside of surf
includeOutside false; // cells on outside of surf
nearDistance -1; // cells with centre near surf
// (set to -1 if not used)
curvature 0.9; // cells within nearDistance
// and near surf curvature
// (set to -100 if not used)
}
// values of field within certain range
fieldToCell
{
fieldName U; // Note: uses mag(U) since volVectorField
min 0.1;
max 0.5;
}
// Mesh region (non-face connected part of (subset of)mesh)
regionToCell
{
set c0; // name of cellSet giving mesh subset
insidePoint (1 2 3); // point inside region to select
}
);
// ************************************************************************* //

View File

@ -48,9 +48,21 @@ int main(int argc, char *argv[])
{ {
timeSelector::addOptions(); timeSelector::addOptions();
# include "addRegionOption.H" # include "addRegionOption.H"
argList::addBoolOption("noTopology"); argList::addBoolOption
argList::addBoolOption("allGeometry"); (
argList::addBoolOption("allTopology"); "noTopology",
"skip checking the mesh topology"
);
argList::addBoolOption
(
"allGeometry",
"include bounding box checks"
);
argList::addBoolOption
(
"allTopology",
"include extra topology checks"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View File

@ -107,7 +107,7 @@ void modifyOrAddFace
label findPatchID(const polyMesh& mesh, const word& name) label findPatchID(const polyMesh& mesh, const word& name)
{ {
label patchI = mesh.boundaryMesh().findPatchID(name); const label patchI = mesh.boundaryMesh().findPatchID(name);
if (patchI == -1) if (patchI == -1)
{ {
@ -124,18 +124,35 @@ label findPatchID(const polyMesh& mesh, const word& name)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
# include "addRegionOption.H" (
"Makes internal faces into boundary faces.\n"
"Does not duplicate points, unlike mergeOrSplitBaffles."
);
#include "addOverwriteOption.H"
#include "addRegionOption.H"
argList::validArgs.append("faceZone"); argList::validArgs.append("faceZone");
argList::validArgs.append("patch"); argList::validArgs.append("patch");
argList::addOption("additionalPatches", "(patch2 .. patchN)");
argList::addBoolOption("internalFacesOnly");
# include "setRootCase.H" argList::addOption
# include "createTime.H" (
"additionalPatches",
"(patch2 .. patchN)",
"specify additional patches for creating baffles"
);
argList::addBoolOption
(
"internalFacesOnly",
"do not convert boundary faces"
);
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createNamedMesh.H" #include "createNamedMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
const polyBoundaryMesh& patches = mesh.boundaryMesh(); const polyBoundaryMesh& patches = mesh.boundaryMesh();

View File

@ -681,17 +681,17 @@ int main(int argc, char *argv[])
{ {
const dictionary& dict = patchSources[addedI]; const dictionary& dict = patchSources[addedI];
word patchName(dict.lookup("name")); const word patchName(dict.lookup("name"));
label destPatchI = patches.findPatchID(patchName); label destPatchI = patches.findPatchID(patchName);
if (destPatchI == -1) if (destPatchI == -1)
{ {
FatalErrorIn(args.executable()) << "patch " << patchName FatalErrorIn(args.executable())
<< " not added. Problem." << abort(FatalError); << "patch " << patchName << " not added. Problem."
<< abort(FatalError);
} }
word sourceType(dict.lookup("constructFrom")); const word sourceType(dict.lookup("constructFrom"));
if (sourceType == "patches") if (sourceType == "patches")
{ {
@ -719,7 +719,7 @@ int main(int argc, char *argv[])
} }
else if (sourceType == "set") else if (sourceType == "set")
{ {
word setName(dict.lookup("set")); const word setName(dict.lookup("set"));
faceSet faces(mesh, setName); faceSet faces(mesh, setName);

View File

@ -1,4 +0,0 @@
faceSet.C
EXE = $(FOAM_APPBIN)/faceSet

View File

@ -1,5 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lmeshTools

View File

@ -1,196 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / 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 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Selects a face set through a dictionary.
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "polyMesh.H"
#include "topoSetSource.H"
#include "faceSet.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
# include "setRootCase.H"
# include "createTime.H"
# include "createPolyMesh.H"
Info<< "Reading faceSetDict\n" << endl;
IOdictionary faceSetDict
(
IOobject
(
"faceSetDict",
runTime.system(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
const word setName(faceSetDict.lookup("name"));
const word actionName(faceSetDict.lookup("action"));
topoSetSource::setAction action = topoSetSource::toAction(actionName);
// Create topoSetSources
PtrList<topoSetSource> topoSetSources
(
faceSetDict.lookup("topoSetSources"),
topoSetSource::iNew(mesh)
);
// Load set to work
autoPtr<topoSet> currentSetPtr(NULL);
IOobject::readOption r;
if ((action == topoSetSource::NEW) || (action == topoSetSource::CLEAR))
{
r = IOobject::NO_READ;
currentSetPtr.reset
(
new faceSet
(
mesh,
setName,
mesh.nFaces()/10+1 // Reasonable size estimate.
)
);
}
else
{
r = IOobject::MUST_READ;
currentSetPtr.reset
(
new faceSet
(
mesh,
setName,
r
)
);
}
topoSet& currentSet = currentSetPtr();
Info<< "Set:" << currentSet.name()
<< " Size:" << currentSet.size()
<< " Action:" << actionName
<< endl;
if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
{
// currentSet has been read so can make copy.
//backup(mesh, setName, currentSet, setName + "_old");
}
if (action == topoSetSource::CLEAR)
{
// Already handled above by not reading
}
else if (action == topoSetSource::INVERT)
{
currentSet.invert(currentSet.maxSize(mesh));
}
else if (action == topoSetSource::LIST)
{
currentSet.writeDebug(Info, mesh, 100);
Info<< endl;
}
else if (action == topoSetSource::SUBSET)
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
// Backup current set.
autoPtr<topoSet> oldSet
(
topoSet::New
(
currentSet.type(),
mesh,
currentSet.name() + "_old2",
currentSet
)
);
currentSet.clear();
topoSetSources[topoSetSourceI].applyToSet
(
topoSetSource::NEW,
currentSet
);
// Combine new value of currentSet with old one.
currentSet.subset(oldSet);
}
}
else
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
topoSetSources[topoSetSourceI].applyToSet(action, currentSet);
}
}
if (action != topoSetSource::LIST)
{
// Set has changed.
// Sync across coupled patches.
currentSet.sync(mesh);
Info<< "Writing " << currentSet.name()
<< " (size " << currentSet.size() << ") to "
<< currentSet.instance()/currentSet.local()
/currentSet.name()
<< endl << endl;
currentSet.write();
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,82 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object faceSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Name of set to operate on
name f0;
// One of clear/new/invert/add/delete|subset/list
action new;
// Actions to apply to pointSet. These are all the topoSetSource's ending
// in ..ToFace (see the meshTools library).
topoSetSources
(
// Copy elements from faceSet
faceToFace
{
set f1;
}
// Select based on cellSet
cellToFace
{
set c0;
option all; // All faces of cells
//option both; // Only faces whose owner&neighbour are in cellSet
}
// Select based on pointSet
pointToFace
{
set p0;
option any; // Faces using any point in pointSet
//option all // Faces with all points in pointSet
}
// Select by explicitly providing face labels
labelToFace
{
value (12 13 56); // labels of faces
}
// All faces of patch
patchToFace
{
name ".*Wall"; // Name of patch, regular expressions allowed
}
// All faces of faceZone
zoneToFace
{
name ".*Zone1"; // Name of faceZone, regular expressions allowed
}
// Faces with face centre within box
boxToFace
{
box (0 0 0) (1 1 1);
}
// Faces with normal to within certain angle aligned with vector.
normalToFace
{
normal (0 0 1); // Vector
cos 0.01; // Tolerance (max cos of angle)
}
);
// ************************************************************************* //

View File

@ -1,15 +1,22 @@
Info<< nl << "Create Times" << endl; Info<< nl << "Create Times" << endl;
const fileName masterCasePath = masterCase.path();
const fileName masterCaseName = masterCase.name();
Time runTimeMaster Time runTimeMaster
( (
Time::controlDictName, Time::controlDictName,
rootDirMaster, masterCasePath,
caseDirMaster masterCaseName
); );
const fileName addCasePath = addCase.path();
const fileName addCaseName = addCase.name();
Time runTimeToAdd Time runTimeToAdd
( (
Time::controlDictName, Time::controlDictName,
rootDirToAdd, addCasePath,
caseDirToAdd addCaseName
); );

View File

@ -32,16 +32,74 @@ Description
using namespace Foam; using namespace Foam;
void getRootCase(fileName& casePath)
{
casePath.clean();
if (casePath.empty() || casePath == ".")
{
// handle degenerate form and '.'
casePath = cwd();
}
else if (casePath[0] != '/' && casePath.name() == "..")
{
// avoid relative cases ending in '..' - makes for very ugly names
casePath = cwd()/casePath;
casePath.clean();
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::addNote
# include "setRoots.H" (
# include "createTimes.H" "merge two meshes"
);
Info<< "Reading master mesh for time = " << runTimeMaster.timeName() << endl; argList::noParallel();
argList::validArgs.append("masterCase");
argList::addOption
(
"masterRegion",
"name",
"specify alternative mesh region for the master mesh"
);
argList::validArgs.append("addCase");
argList::addOption
(
"addRegion",
"name",
"specify alternative mesh region for the additional mesh"
);
argList args(argc, argv);
if (!args.check())
{
FatalError.exit();
}
fileName masterCase = args[1];
word masterRegion = polyMesh::defaultRegion;
args.optionReadIfPresent("masterRegion", masterRegion);
fileName addCase = args[2];
word addRegion = polyMesh::defaultRegion;
args.optionReadIfPresent("addRegion", addRegion);
getRootCase(masterCase);
getRootCase(addCase);
Info<< "Master: " << masterCase << " region " << masterRegion << nl
<< "mesh to add: " << addCase << " region " << addRegion << endl;
#include "createTimes.H"
Info<< "Reading master mesh for time = " << runTimeMaster.timeName() << nl;
Info<< "Create mesh\n" << endl; Info<< "Create mesh\n" << endl;
mergePolyMesh masterMesh mergePolyMesh masterMesh
@ -55,7 +113,7 @@ int main(int argc, char *argv[])
); );
Info<< "Reading mesh to add for time = " << runTimeToAdd.timeName() << endl; Info<< "Reading mesh to add for time = " << runTimeToAdd.timeName() << nl;
Info<< "Create mesh\n" << endl; Info<< "Create mesh\n" << endl;
polyMesh meshToAdd polyMesh meshToAdd

View File

@ -1,32 +0,0 @@
argList::validArgs.clear();
argList::validArgs.append("master root");
argList::validArgs.append("master case");
argList::addOption("masterRegion", "name");
argList::validArgs.append("root to add");
argList::validArgs.append("case to add");
argList::addOption("addRegion", "name");
argList args(argc, argv);
if (!args.check())
{
FatalError.exit();
}
fileName rootDirMaster = args[1];
fileName caseDirMaster = args[2];
word masterRegion = polyMesh::defaultRegion;
args.optionReadIfPresent("masterRegion", masterRegion);
fileName rootDirToAdd = args[3];
fileName caseDirToAdd = args[4];
word addRegion = polyMesh::defaultRegion;
args.optionReadIfPresent("addRegion", addRegion);
Info<< "Master: " << rootDirMaster << " " << caseDirMaster
<< " region " << masterRegion << nl
<< "mesh to add: " << rootDirToAdd << " " << caseDirToAdd
<< " region " << addRegion << endl;

View File

@ -221,15 +221,30 @@ labelList findBaffles(const polyMesh& mesh, const labelList& boundaryFaces)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
# include "addRegionOption.H" (
argList::addBoolOption("split"); "Detect faces that share points (baffles).\n"
argList::addBoolOption("detectOnly"); "Merge them or duplicate the points."
);
# include "setRootCase.H" #include "addOverwriteOption.H"
# include "createTime.H" #include "addRegionOption.H"
argList::addBoolOption
(
"detectOnly",
"find baffles only, but do not merge or split them"
);
argList::addBoolOption
(
"split",
"topologically split duplicate surfaces"
);
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createNamedMesh.H" #include "createNamedMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
const bool split = args.optionFound("split"); const bool split = args.optionFound("split");
@ -248,12 +263,10 @@ int main(int argc, char *argv[])
if (detectOnly) if (detectOnly)
{ {
findBaffles(mesh, boundaryFaces); findBaffles(mesh, boundaryFaces);
return 0; return 0;
} }
// Read objects in time directory // Read objects in time directory
IOobjectList objects(mesh, runTime.timeName()); IOobjectList objects(mesh, runTime.timeName());

View File

@ -110,7 +110,6 @@ labelList parseVertices(const string& line)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validArgs.clear();
argList::validArgs.append("OBJ file"); argList::validArgs.append("OBJ file");
argList::validArgs.append("output VTK file"); argList::validArgs.append("output VTK file");
argList args(argc, argv); argList args(argc, argv);

View File

@ -1,4 +0,0 @@
pointSet.C
EXE = $(FOAM_APPBIN)/pointSet

View File

@ -1,5 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lmeshTools

View File

@ -1,196 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / 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 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Selects a point set through a dictionary.
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "polyMesh.H"
#include "topoSetSource.H"
#include "pointSet.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
# include "setRootCase.H"
# include "createTime.H"
# include "createPolyMesh.H"
Info<< "Reading pointSetDict\n" << endl;
IOdictionary pointSetDict
(
IOobject
(
"pointSetDict",
runTime.system(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
const word setName(pointSetDict.lookup("name"));
const word actionName(pointSetDict.lookup("action"));
topoSetSource::setAction action = topoSetSource::toAction(actionName);
// Create topoSetSources
PtrList<topoSetSource> topoSetSources
(
pointSetDict.lookup("topoSetSources"),
topoSetSource::iNew(mesh)
);
// Load set to work
autoPtr<topoSet> currentSetPtr(NULL);
IOobject::readOption r;
if ((action == topoSetSource::NEW) || (action == topoSetSource::CLEAR))
{
r = IOobject::NO_READ;
currentSetPtr.reset
(
new pointSet
(
mesh,
setName,
mesh.nPoints()/10+1 // Reasonable size estimate.
)
);
}
else
{
r = IOobject::MUST_READ;
currentSetPtr.reset
(
new pointSet
(
mesh,
setName,
r
)
);
}
topoSet& currentSet = currentSetPtr();
Info<< "Set:" << currentSet.name()
<< " Size:" << currentSet.size()
<< " Action:" << actionName
<< endl;
if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
{
// currentSet has been read so can make copy.
//backup(mesh, setName, currentSet, setName + "_old");
}
if (action == topoSetSource::CLEAR)
{
// Already handled above by not reading
}
else if (action == topoSetSource::INVERT)
{
currentSet.invert(currentSet.maxSize(mesh));
}
else if (action == topoSetSource::LIST)
{
currentSet.writeDebug(Info, mesh, 100);
Info<< endl;
}
else if (action == topoSetSource::SUBSET)
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
// Backup current set.
autoPtr<topoSet> oldSet
(
topoSet::New
(
currentSet.type(),
mesh,
currentSet.name() + "_old2",
currentSet
)
);
currentSet.clear();
topoSetSources[topoSetSourceI].applyToSet
(
topoSetSource::NEW,
currentSet
);
// Combine new value of currentSet with old one.
currentSet.subset(oldSet);
}
}
else
{
// Apply topoSetSources to it to handle new/add/delete
forAll(topoSetSources, topoSetSourceI)
{
topoSetSources[topoSetSourceI].applyToSet(action, currentSet);
}
}
if (action != topoSetSource::LIST)
{
// Set has changed.
// Sync across coupled patches.
currentSet.sync(mesh);
Info<< "Writing " << currentSet.name()
<< " (size " << currentSet.size() << ") to "
<< currentSet.instance()/currentSet.local()
/currentSet.name()
<< endl << endl;
currentSet.write();
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,84 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object pointSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Name of set to operate on
name p0;
// One of clear/new/invert/add/delete|subset/list
action new;
// Actions to apply to pointSet. These are all the topoSetSource's ending
// in ..ToPoint (see the meshTools library).
topoSetSources
(
// Copy elements from pointSet
pointToPoint
{
set p1;
}
// Select based on cellSet
cellToPoint
{
set c0;
option all; // all points of cell
}
// Select based on faceSet
faceToPoint
{
set f0; // name of faceSet
option all; // all points of face
}
// Select by explicitly providing point labels
labelToPoint
{
value (12 13 56); // labels of points
}
// All points in pointzone
zoneToPoint
{
name ".*Zone"; // name of pointZone, regular expressions allowed
}
// Points nearest to coordinates
nearestToPoint
{
points ((0 0 0) (1 1 1));
}
// Points with coordinate within box
boxToPoint
{
box (0 0 0) (1 1 1);
}
// Select based on surface
surfaceToPoint
{
file "www.avl.com-geometry.stl";
nearDistance 0.1; // points near to surface
includeInside false; // points on inside of surface
// (requires closed surface with consistent
// normals)
includeOutside false; // ,, outside ,,
}
);
// ************************************************************************* //

View File

@ -290,18 +290,26 @@ label twoDNess(const polyMesh& mesh)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
argList::addBoolOption("dict"); (
"refine cells in multiple directions"
);
# include "setRootCase.H" #include "addOverwriteOption.H"
# include "createTime.H" argList::addBoolOption
(
"dict",
"refine according to system/refineMeshDict"
);
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createPolyMesh.H" #include "createPolyMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
printEdgeStats(mesh); printEdgeStats(mesh);
// //
// Read/construct control dictionary // Read/construct control dictionary
// //

View File

@ -363,9 +363,21 @@ autoPtr<mapPolyMesh> reorderMesh
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("blockOrder"); argList::addBoolOption
argList::addBoolOption("orderPoints"); (
argList::addBoolOption("writeMaps"); "blockOrder",
"order cells into regions (using decomposition)"
);
argList::addBoolOption
(
"orderPoints",
"order points into internal and boundary points"
);
argList::addBoolOption
(
"writeMaps",
"write cellMap, faceMap, pointMap in polyMesh/"
);
# include "addOverwriteOption.H" # include "addOverwriteOption.H"
# include "addTimeOptions.H" # include "addTimeOptions.H"

View File

@ -439,6 +439,7 @@ bool doCommand
const word& actionName, const word& actionName,
const bool writeVTKFile, const bool writeVTKFile,
const bool writeCurrentTime, const bool writeCurrentTime,
const bool noSync,
Istream& is Istream& is
) )
{ {
@ -581,7 +582,7 @@ bool doCommand
// Set will have been modified. // Set will have been modified.
// Synchronize for coupled patches. // Synchronize for coupled patches.
currentSet.sync(mesh); if (!noSync) currentSet.sync(mesh);
// Write // Write
if (writeVTKFile) if (writeVTKFile)
@ -828,7 +829,17 @@ int main(int argc, char *argv[])
# include "addRegionOption.H" # include "addRegionOption.H"
argList::addBoolOption("noVTK", "do not write VTK files"); argList::addBoolOption("noVTK", "do not write VTK files");
argList::addBoolOption("loop", "execute batch commands for all timesteps"); argList::addBoolOption("loop", "execute batch commands for all timesteps");
argList::addOption("batch", "file"); argList::addOption
(
"batch",
"file",
"process in batch mode, using input from specified file"
);
argList::addBoolOption
(
"noSync",
"do not synchronise selection across coupled patches"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
@ -837,6 +848,7 @@ int main(int argc, char *argv[])
const bool writeVTK = !args.optionFound("noVTK"); const bool writeVTK = !args.optionFound("noVTK");
const bool loop = args.optionFound("loop"); const bool loop = args.optionFound("loop");
const bool batch = args.optionFound("batch"); const bool batch = args.optionFound("batch");
const bool noSync = args.optionFound("noSync");
if (loop && !batch) if (loop && !batch)
{ {
@ -1004,6 +1016,7 @@ int main(int argc, char *argv[])
actionName, actionName,
writeVTK, writeVTK,
loop, // if in looping mode dump sets to time directory loop, // if in looping mode dump sets to time directory
noSync,
is is
); );

View File

@ -57,14 +57,23 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("noFlipMap"); argList::addNote
(
"add point/face/cell Zones from similar named point/face/cell Sets"
);
# include "addRegionOption.H" argList::addBoolOption
# include "addTimeOptions.H" (
# include "setRootCase.H" "noFlipMap",
# include "createTime.H" "ignore orientation of faceSet"
);
bool noFlipMap = args.optionFound("noFlipMap"); #include "addRegionOption.H"
#include "addTimeOptions.H"
#include "setRootCase.H"
#include "createTime.H"
const bool noFlipMap = args.optionFound("noFlipMap");
// Get times list // Get times list
instantList Times = runTime.times(); instantList Times = runTime.times();
@ -73,11 +82,11 @@ int main(int argc, char *argv[])
label endTime = Times.size(); label endTime = Times.size();
// check -time and -latestTime options // check -time and -latestTime options
# include "checkTimeOption.H" #include "checkTimeOption.H"
runTime.setTime(Times[startTime], startTime); runTime.setTime(Times[startTime], startTime);
# include "createNamedPolyMesh.H" #include "createNamedPolyMesh.H"
// Search for list of objects for the time of the mesh // Search for list of objects for the time of the mesh
word setsInstance = runTime.findInstance word setsInstance = runTime.findInstance
@ -153,9 +162,19 @@ int main(int argc, char *argv[])
DynamicList<label> addressing(set.size()); DynamicList<label> addressing(set.size());
DynamicList<bool> flipMap(set.size()); DynamicList<bool> flipMap(set.size());
if (!noFlipMap) if (noFlipMap)
{ {
word setName(set.name() + "SlaveCells"); // No flip map.
forAll(faceLabels, i)
{
label faceI = faceLabels[i];
addressing.append(faceI);
flipMap.append(false);
}
}
else
{
const word setName(set.name() + "SlaveCells");
Info<< "Trying to load cellSet " << setName Info<< "Trying to load cellSet " << setName
<< " to find out the slave side of the zone." << nl << " to find out the slave side of the zone." << nl
@ -226,16 +245,6 @@ int main(int argc, char *argv[])
flipMap.append(flip); flipMap.append(flip);
} }
} }
else
{
// No flip map.
forAll(faceLabels, i)
{
label faceI = faceLabels[i];
addressing.append(faceI);
flipMap.append(false);
}
}
label zoneID = mesh.faceZones().findZoneID(set.name()); label zoneID = mesh.faceZones().findZoneID(set.name());
if (zoneID == -1) if (zoneID == -1)

View File

@ -85,12 +85,12 @@ label findEdge(const primitiveMesh& mesh, const label v0, const label v1)
// Checks whether patch present // Checks whether patch present
void checkPatch(const polyBoundaryMesh& bMesh, const word& name) void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
{ {
label patchI = bMesh.findPatchID(name); const label patchI = bMesh.findPatchID(name);
if (patchI == -1) if (patchI == -1)
{ {
FatalErrorIn("checkPatch(const polyBoundaryMesh&, const word&)") FatalErrorIn("checkPatch(const polyBoundaryMesh&, const word&)")
<< "Cannot find patch " << name << endl << "Cannot find patch " << name << nl
<< "It should be present but of zero size" << endl << "It should be present but of zero size" << endl
<< "Valid patches are " << bMesh.names() << "Valid patches are " << bMesh.names()
<< exit(FatalError); << exit(FatalError);

View File

@ -1473,26 +1473,68 @@ void writeCellToRegion(const fvMesh& mesh, const labelList& cellRegion)
} }
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
argList::addBoolOption("cellZones"); (
argList::addBoolOption("cellZonesOnly"); "splits mesh into multiple regions (detected by walking across faces)"
argList::addOption("cellZonesFileOnly", "cellZonesName"); );
argList::addOption("blockedFaces", "faceSet"); #include "addOverwriteOption.H"
argList::addBoolOption("makeCellZones"); argList::addBoolOption
argList::addBoolOption("largestOnly"); (
argList::addOption("insidePoint", "point"); "cellZones",
argList::addBoolOption("detectOnly"); "additionally split cellZones off into separate regions"
argList::addBoolOption("sloppyCellZones"); );
argList::addBoolOption
(
"cellZonesOnly",
"use cellZones only to split mesh into regions; do not use walking"
);
argList::addOption
(
"cellZonesFileOnly",
"file",
"like -cellZonesOnly, but use specified file"
);
argList::addOption
(
"blockedFaces",
"faceSet",
"specify additional region boundaries that walking does not cross"
);
argList::addBoolOption
(
"makeCellZones",
"place cells into cellZones instead of splitting mesh"
);
argList::addBoolOption
(
"largestOnly",
"only write largest region"
);
argList::addOption
(
"insidePoint",
"point",
"only write region containing point"
);
argList::addBoolOption
(
"detectOnly",
"do not write mesh"
);
argList::addBoolOption
(
"sloppyCellZones",
"try to match heuristically regions to existing cell zones"
);
# include "setRootCase.H" #include "setRootCase.H"
# include "createTime.H" #include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createMesh.H" #include "createMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
word blockedFacesName; word blockedFacesName;
@ -1514,10 +1556,7 @@ int main(int argc, char *argv[])
if if
( (
(useCellZonesOnly || useCellZonesFile) (useCellZonesOnly || useCellZonesFile)
&& ( && (useCellZones || blockedFacesName.size())
blockedFacesName != word::null
|| useCellZones
)
) )
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
@ -1529,7 +1568,6 @@ int main(int argc, char *argv[])
} }
if (insidePoint && largestOnly) if (insidePoint && largestOnly)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
@ -1719,7 +1757,6 @@ int main(int argc, char *argv[])
writeCellToRegion(mesh, cellRegion); writeCellToRegion(mesh, cellRegion);
// Sizes per region // Sizes per region
// ~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~

View File

@ -40,6 +40,7 @@ Description
Comparable to running a meshModifier of the form Comparable to running a meshModifier of the form
(if masterPatch is called "M" and slavePatch "S"): (if masterPatch is called "M" and slavePatch "S"):
@verbatim
couple couple
{ {
type slidingInterface; type slidingInterface;
@ -51,6 +52,7 @@ Description
slavePatchName S; slavePatchName S;
typeOfMatch partial or integral typeOfMatch partial or integral
} }
@endverbatim
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -168,7 +170,7 @@ label addCellZone(const polyMesh& mesh, const word& name)
// Checks whether patch present // Checks whether patch present
void checkPatch(const polyBoundaryMesh& bMesh, const word& name) void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
{ {
label patchI = bMesh.findPatchID(name); const label patchI = bMesh.findPatchID(name);
if (patchI == -1) if (patchI == -1)
{ {
@ -192,22 +194,41 @@ void checkPatch(const polyBoundaryMesh& bMesh, const word& name)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"merge the faces on the specified patches (if geometrically possible)\n"
"so the faces become internal"
);
argList::noParallel(); argList::noParallel();
# include "addOverwriteOption.H" #include "addOverwriteOption.H"
# include "addRegionOption.H" #include "addRegionOption.H"
argList::validArgs.append("masterPatch"); argList::validArgs.append("masterPatch");
argList::validArgs.append("slavePatch"); argList::validArgs.append("slavePatch");
argList::addBoolOption("partial"); argList::addBoolOption
argList::addBoolOption("perfect"); (
"partial",
"couple partially overlapping patches"
);
argList::addBoolOption
(
"perfect",
"couple perfectly aligned patches"
);
argList::addOption
(
"toleranceDict",
"file",
"dictionary file with tolerances"
);
argList::addOption("toleranceDict", "file with tolerances"); #include "setRootCase.H"
#include "createTime.H"
# include "setRootCase.H"
# include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createNamedMesh.H" #include "createNamedMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
const word masterPatchName = args[1]; const word masterPatchName = args[1];
@ -220,7 +241,7 @@ int main(int argc, char *argv[])
if (partialCover && perfectCover) if (partialCover && perfectCover)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot both supply partial and perfect." << endl << "Cannot supply both partial and perfect." << endl
<< "Use perfect match option if the patches perfectly align" << "Use perfect match option if the patches perfectly align"
<< " (both vertex positions and face centres)" << endl << " (both vertex positions and face centres)" << endl
<< exit(FatalError); << exit(FatalError);
@ -291,11 +312,7 @@ int main(int argc, char *argv[])
// Create and add face zones and mesh modifiers // Create and add face zones and mesh modifiers
// Master patch // Master patch
const polyPatch& masterPatch = const polyPatch& masterPatch = mesh.boundaryMesh()[masterPatchName];
mesh.boundaryMesh()
[
mesh.boundaryMesh().findPatchID(masterPatchName)
];
// Make list of masterPatch faces // Make list of masterPatch faces
labelList isf(masterPatch.size()); labelList isf(masterPatch.size());
@ -352,11 +369,7 @@ int main(int argc, char *argv[])
); );
// Slave patch // Slave patch
const polyPatch& slavePatch = const polyPatch& slavePatch = mesh.boundaryMesh()[slavePatchName];
mesh.boundaryMesh()
[
mesh.boundaryMesh().findPatchID(slavePatchName)
];
labelList osf(slavePatch.size()); labelList osf(slavePatch.size());

View File

@ -150,14 +150,25 @@ void subsetPointFields
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" argList::addNote
argList::validArgs.append("set"); (
argList::addOption("patch", "patch name"); "select a mesh subset based on a cellSet"
);
# include "setRootCase.H" #include "addOverwriteOption.H"
# include "createTime.H" argList::validArgs.append("cellSet");
argList::addOption
(
"patch",
"name",
"add exposed internal faces to specified patch instead of to "
"'oldInternalFaces'"
);
#include "setRootCase.H"
#include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
# include "createMesh.H" #include "createMesh.H"
const word oldInstance = mesh.pointsInstance(); const word oldInstance = mesh.pointsInstance();
const word setName = args[1]; const word setName = args[1];
@ -190,7 +201,7 @@ int main(int argc, char *argv[])
else else
{ {
Info<< "Adding exposed internal faces to a patch called" Info<< "Adding exposed internal faces to a patch called"
<< " \"oldInternalFaces\" (created if nessecary)" << endl << " \"oldInternalFaces\" (created if necessary)" << endl
<< endl; << endl;
} }

View File

@ -0,0 +1,4 @@
topoSet.C
EXE = $(FOAM_APPBIN)/topoSet

View File

@ -0,0 +1,233 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / 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 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Operates on cellSets/faceSets/pointSets through a dictionary.
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "polyMesh.H"
#include "topoSetSource.H"
#include "cellSet.H"
#include "faceSet.H"
#include "pointSet.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
argList::addOption
(
"dict",
"file",
"specify an alternative dictionary for the topoSet dictionary"
);
# include "addRegionOption.H"
argList::addBoolOption
(
"noSync",
"do not synchronise selection across coupled patches"
);
# include "setRootCase.H"
# include "createTime.H"
# include "createNamedPolyMesh.H"
const bool noSync = args.optionFound("noSync");
const word dictName("topoSetDict");
fileName dictPath = dictName;
if (args.optionFound("dict"))
{
dictPath = args["dict"];
if (isDir(dictPath))
{
dictPath = dictPath / dictName;
}
}
Info<< "Reading " << dictName << "\n" << endl;
IOdictionary topoSetDict
(
(
args.optionFound("dict")
? IOobject
(
dictPath,
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
: IOobject
(
dictName,
runTime.system(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
)
);
// Read set construct info from dictionary
PtrList<dictionary> patchSources(topoSetDict.lookup("actions"));
forAll(patchSources, i)
{
const dictionary& dict = patchSources[i];
const word setName(dict.lookup("name"));
const word actionName(dict.lookup("action"));
const word setType(dict.lookup("type"));
topoSetSource::setAction action = topoSetSource::toAction(actionName);
autoPtr<topoSet> currentSet;
if
(
(action == topoSetSource::NEW)
|| (action == topoSetSource::CLEAR)
)
{
currentSet = topoSet::New(setType, mesh, setName, 10000);
Info<< "Created set " << setName << endl;
}
else if (action == topoSetSource::REMOVE)
{
//?
}
else
{
currentSet = topoSet::New
(
setType,
mesh,
setName,
IOobject::MUST_READ
);
Info<< "Read set " << setName << " with size "
<< currentSet().size() << endl;
}
// Handle special actions (clear, invert) locally, rest through sources.
switch (action)
{
case topoSetSource::NEW:
case topoSetSource::ADD:
case topoSetSource::DELETE:
{
Info<< " Applying source " << word(dict.lookup("source"))
<< endl;
autoPtr<topoSetSource> source = topoSetSource::New
(
dict.lookup("source"),
mesh,
dict.subDict("sourceInfo")
);
source().applyToSet(action, currentSet());
// Synchronize for coupled patches.
if (!noSync) currentSet().sync(mesh);
currentSet().write();
}
break;
case topoSetSource::SUBSET:
{
Info<< " Applying source " << word(dict.lookup("source"))
<< endl;
autoPtr<topoSetSource> source = topoSetSource::New
(
dict.lookup("source"),
mesh,
dict.subDict("sourceInfo")
);
// Backup current set.
autoPtr<topoSet> oldSet
(
topoSet::New
(
setType,
mesh,
currentSet().name() + "_old2",
currentSet()
)
);
currentSet().clear();
source().applyToSet(topoSetSource::NEW, currentSet());
// Combine new value of currentSet with old one.
currentSet().subset(oldSet());
// Synchronize for coupled patches.
if (!noSync) currentSet().sync(mesh);
currentSet().write();
}
break;
case topoSetSource::CLEAR:
Info<< " Clearing set" << endl;
currentSet().clear();
currentSet().write();
break;
case topoSetSource::INVERT:
Info<< " Inverting set" << endl;
currentSet().invert(currentSet().maxSize(mesh));
currentSet().write();
break;
default:
WarningIn(args.executable())
<< "Unhandled action " << action << endl;
break;
}
if (currentSet.valid())
{
Info<< " Set " << currentSet().name()
<< " now size " << currentSet().size()
<< endl;
}
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,363 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.6 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// List of actions. Each action is a dictionary with e.g.
// // name of set
// name c0;
//
// // type: pointSet/faceSet/cellSet/faceZoneSet/cellZoneSet
// type cellSet;
//
// // action to perform on set. Two types:
// // - require no source : clear/invert
// // - require source : new/add/delete/subset
// action new;
//
// The source entry varies according to the type of set:
//
// cellSet
// ~~~~~~~
//
// // Select by explicitly providing cell labels
// source labelToCell;
// {
// value (12 13 56); // labels of cells
// }
//
// // Copy elements from cellSet
// source cellToCell;
// {
// set c1;
// }
//
// // Cells in cell zone
// source zoneToCell;
// {
// name ".*Zone"; // Name of cellZone, regular expressions allowed
// }
//
// // Cells on master or slave side of faceZone
// source faceZoneToCell;
// {
// name ".*Zone"; // Name of faceZone, regular expressions allowed
// option master; // master/slave
// }
//
// // Select based on faceSet
// source faceToCell;
// {
// set f0; // Name of faceSet
//
// //option neighbour; // cell with neighbour in faceSet
// //option owner; // ,, owner
// option any; // cell with any face in faceSet
// //option all; // cell with all faces in faceSet
// }
//
// // Select based on pointSet
// source pointToCell;
// {
// set p0;
// option any; // cell with any point in pointSet
// //option all; // cell with all points in pointSet
// }
//
// // Select based on cellShape
// source shapeToCell;
// {
// type hex; // hex/wedge/prism/pyr/tet/tetWedge/splitHex
// }
//
// // Cells with cell centre within box
// source boxToCell;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Cells with cell centre within box
// // Is skewed, rotated box. Given as origin and three spanning vectors.
// source rotatedBoxToCell;
// {
// origin (0.2 0.2 -10);
// i (0.2 0.2 0);
// j (-0.2 0.2 0);
// k (10 10 10);
// }
//
// // Cells with centre within cylinder
// source cylinderToCell;
// {
// p1 (0.2 0.2 -10); // start point on cylinder axis
// p2 (0.2 0.2 0); // end point on cylinder axis
// radius 5.0;
// }
//
// // Cells with centre within sphere
// source sphereToCell;
// {
// centre (0.2 0.2 -10);
// radius 5.0;
// }
//
// // Cells with cellCentre nearest to coordinates
// source nearestToCell;
// {
// points ((0 0 0) (1 1 1)(2 2 2));
// }
//
// // Select based on surface
// source surfaceToCell;
// {
// file "www.avl.com-geometry.stl";
// outsidePoints ((-99 -99 -59)); // definition of outside
// includeCut false; // cells cut by surface
// includeInside false; // cells not on outside of surf
// includeOutside false; // cells on outside of surf
// nearDistance -1; // cells with centre near surf
// // (set to -1 if not used)
// curvature 0.9; // cells within nearDistance
// // and near surf curvature
// // (set to -100 if not used)
// }
//
// // values of field within certain range
// source fieldToCell;
// {
// fieldName U; // Note: uses mag(U) since volVectorField
// min 0.1;
// max 0.5;
// }
//
// // Mesh region (non-face connected part of (subset of)mesh)
// source regionToCell;
// {
// set c0; // name of cellSet giving mesh subset
// insidePoint (1 2 3); // point inside region to select
// }
//
//
//
// faceSet
// ~~~~~~~
//
// // Copy elements from faceSet
// source faceToFace;
// {
// set f1;
// }
//
// // Select based on cellSet
// source cellToFace;
// {
// set c0;
// option all; // All faces of cells
// //option both; // Only faces whose owner&neighbour are in cellSet
// }
//
// // Select based on pointSet
// source pointToFace;
// {
// set p0;
// option any; // Faces using any point in pointSet
// //option all // Faces with all points in pointSet
// }
//
// // Select by explicitly providing face labels
// source labelToFace;
// {
// value (12 13 56); // labels of faces
// }
//
// // All faces of patch
// source patchToFace;
// {
// name ".*Wall"; // Name of patch, regular expressions allowed
// }
//
// // All faces of faceZone
// source zoneToFace;
// {
// name ".*Zone1"; // Name of faceZone, regular expressions allowed
// }
//
// // Faces with face centre within box
// source boxToFace;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Faces with normal to within certain angle aligned with vector.
// source normalToFace;
// {
// normal (0 0 1); // Vector
// cos 0.01; // Tolerance (max cos of angle)
// }
//
//
//
// pointSet
// ~~~~~~~
//
// // Copy elements from pointSet
// source pointToPoint;
// {
// set p1;
// }
//
// // Select based on cellSet
// source cellToPoint;
// {
// set c0;
// option all; // all points of cell
// }
//
// // Select based on faceSet
// source faceToPoint;
// {
// set f0; // name of faceSet
// option all; // all points of face
// }
//
// // Select by explicitly providing point labels
// source labelToPoint;
// {
// value (12 13 56); // labels of points
// }
//
// // All points in pointzone
// source zoneToPoint;
// {
// name ".*Zone"; // name of pointZone, regular expressions allowed
// }
//
// // Points nearest to coordinates
// source nearestToPoint;
// {
// points ((0 0 0) (1 1 1));
// }
//
// // Points with coordinate within box
// source boxToPoint;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Select based on surface
// source surfaceToPoint;
// {
// file "www.avl.com-geometry.stl";
// nearDistance 0.1; // points near to surface
// includeInside false; // points on inside of surface
// // (requires closed surface with consistent
// // normals)
// includeOutside false; // ,, outside ,,
// }
//
//
//
//
// cellZoneSet
// ~~~~~~~~~~~
// (mirrors operations on a cellSet into a cellZone)
//
// // Select based on cellSet
// source setToCellZone;
// {
// set c0; // name of cellSet
// }
//
//
//
// faceZoneSet
// ~~~~~~~~~~~
// // Select based on faceSet without orientation
// source setToFaceZone;
// {
// set f0; // name of faceSet
// }
//
// // Select based on faceSet, using cellSet to determine orientation
// source setsToFaceZone;
// {
// faceSet f0; // name of faceSet
// cellSet c0; // name of cellSet of slave side
// }
actions
(
// Example:pick up internal faces on outside of cellSet
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Load initial cellSet
{
name c0;
type cellSet;
action new;
source labelToCell;
sourceInfo
{
value (12 13 56);
}
}
// Get all faces in cellSet
{
name f0;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set c0;
option all;
}
}
// Determine inverse cellSet
{
name c1;
type cellSet;
action new;
source cellToCell;
sourceInfo
{
set c0;
}
}
{
name c1;
type cellSet;
action invert;
}
// Keep in f0 all faces in c1
{
name f0;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set c1;
option all;
}
}
);
// ************************************************************************* //

View File

@ -158,13 +158,13 @@ int main(int argc, char *argv[])
( (
"rollPitchYaw", "rollPitchYaw",
"vector", "vector",
"transform in terms of '( roll pitch yaw )' in degrees" "transform in terms of '(roll pitch yaw)' in degrees"
); );
argList::addOption argList::addOption
( (
"yawPitchRoll", "yawPitchRoll",
"vector", "vector",
"transform in terms of '( yaw pitch roll )' in degrees" "transform in terms of '(yaw pitch roll)' in degrees"
); );
argList::addBoolOption argList::addBoolOption
( (

View File

@ -44,7 +44,6 @@ int main(int argc, char *argv[])
{ {
argList::noBanner(); argList::noBanner();
argList::noParallel(); argList::noParallel();
argList::validArgs.clear();
argList::validArgs.append("inputDict"); argList::validArgs.append("inputDict");
argList args(argc, argv); argList args(argc, argv);

View File

@ -22,7 +22,7 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description Description
Interrogates a case and prints information to screen Interrogates a case and prints information to stdout
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -38,15 +38,33 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"interrogates a case and prints information to stdout"
);
argList::noBanner();
argList::noParallel(); argList::noParallel();
argList::addBoolOption("times"); argList::addBoolOption("times", "list available times");
argList::addOption("dictionary", "dictionary name"); argList::addBoolOption
argList::addBoolOption("keywords"); (
argList::addOption("entry", "entry name"); "keywords",
"report keywords for the specified dictionary"
);
argList::addOption
(
"dict",
"file",
"specify a dictionary to interrogate"
);
argList::addOption
(
"entry",
"name",
"report the named entry for the specified dictionary"
);
# include "setRootCase.H" #include "setRootCase.H"
Info<< endl;
if (args.optionFound("times")) if (args.optionFound("times"))
{ {
@ -61,11 +79,11 @@ int main(int argc, char *argv[])
} }
} }
if (args.optionFound("dictionary")) if (args.optionFound("dict"))
{ {
fileName dictFileName const fileName dictFileName
( (
args.rootPath()/args.caseName()/args["dictionary"] args.rootPath()/args.caseName()/args["dict"]
); );
IFstream dictFile(dictFileName); IFstream dictFile(dictFileName);
@ -74,14 +92,7 @@ int main(int argc, char *argv[])
{ {
dictionary dict(dictFile); dictionary dict(dictFile);
if (args.optionFound("keywords") && !args.optionFound("entry")) if (args.optionFound("entry"))
{
forAllConstIter(dictionary, dict, iter)
{
Info<< iter().keyword() << endl;
}
}
else if (args.optionFound("entry"))
{ {
wordList entryNames wordList entryNames
( (
@ -152,6 +163,13 @@ int main(int argc, char *argv[])
FatalError.exit(2); FatalError.exit(2);
} }
} }
else if (args.optionFound("keywords"))
{
forAllConstIter(dictionary, dict, iter)
{
Info<< iter().keyword() << endl;
}
}
else else
{ {
Info<< dict; Info<< dict;

View File

@ -81,8 +81,13 @@ Usage
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"decompose a mesh and fields of a case for parallel execution"
);
argList::noParallel(); argList::noParallel();
# include "addRegionOption.H" #include "addRegionOption.H"
argList::addBoolOption argList::addBoolOption
( (
"cellDist", "cellDist",
@ -110,12 +115,7 @@ int main(int argc, char *argv[])
"only decompose geometry if the number of domains has changed" "only decompose geometry if the number of domains has changed"
); );
argList::addNote #include "setRootCase.H"
(
"decompose a mesh and fields of a case for parallel execution"
);
# include "setRootCase.H"
word regionName = fvMesh::defaultRegion; word regionName = fvMesh::defaultRegion;
word regionDir = word::null; word regionDir = word::null;
@ -132,7 +132,7 @@ int main(int argc, char *argv[])
bool forceOverwrite = args.optionFound("force"); bool forceOverwrite = args.optionFound("force");
bool ifRequiredDecomposition = args.optionFound("ifRequired"); bool ifRequiredDecomposition = args.optionFound("ifRequired");
# include "createTime.H" #include "createTime.H"
Info<< "Time = " << runTime.timeName() << endl; Info<< "Time = " << runTime.timeName() << endl;

View File

@ -55,7 +55,7 @@ void Foam::domainDecomposition::distributeCells()
forAll(pNames, i) forAll(pNames, i)
{ {
label patchI = patches.findPatchID(pNames[i]); const label patchI = patches.findPatchID(pNames[i]);
if (patchI == -1) if (patchI == -1)
{ {

View File

@ -279,6 +279,11 @@ autoPtr<mapPolyMesh> mergeSharedPoints
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"reconstruct a mesh using geometric information only"
);
argList::noParallel(); argList::noParallel();
argList::addOption argList::addOption
( (
@ -293,15 +298,10 @@ int main(int argc, char *argv[])
"do (slower) geometric matching on all boundary faces" "do (slower) geometric matching on all boundary faces"
); );
argList::addNote #include "addTimeOptions.H"
( #include "addRegionOption.H"
"reconstruct a mesh using geometric information only" #include "setRootCase.H"
); #include "createTime.H"
# include "addTimeOptions.H"
# include "addRegionOption.H"
# include "setRootCase.H"
# include "createTime.H"
Info<< "This is an experimental tool which tries to merge" Info<< "This is an experimental tool which tries to merge"
<< " individual processor" << nl << " individual processor" << nl

View File

@ -503,7 +503,13 @@ void compareFields
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addRegionOption.H" # include "addRegionOption.H"
argList::addOption("mergeTol", "relative merge distance"); argList::addOption
(
"mergeTol",
"scalar",
"specify the merge distance relative to the bounding box size "
"(default 1E-6)"
);
// Create argList. This will check for non-existing processor dirs. // Create argList. This will check for non-existing processor dirs.
# include "setRootCase.H" # include "setRootCase.H"

View File

@ -341,9 +341,9 @@ int main(int argc, char *argv[])
{ {
wordList fieldNames = objects.names(volFieldTypes[i]); wordList fieldNames = objects.names(volFieldTypes[i]);
for (label j=0; j<fieldNames.size(); j++) forAll(fieldNames, j)
{ {
word fieldName = fieldNames[j]; const word& fieldName = fieldNames[j];
# include "checkData.H" # include "checkData.H"

View File

@ -176,7 +176,11 @@ static void writeFaceData
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::addBoolOption("noWall"); argList::addBoolOption
(
"noWall",
"skip setting wall information"
);
timeSelector::addOptions(true, false); timeSelector::addOptions(true, false);
# include "setRootCase.H" # include "setRootCase.H"

View File

@ -6,10 +6,10 @@ for (label i=0; i < nTypes; i++)
{ {
gmvFile << "variable" << nl; gmvFile << "variable" << nl;
} }
for (label j=0; j < fieldNames.size(); j++)
{
word fieldName = fieldNames[j]; forAll(fieldNames, j)
{
const word& fieldName = fieldNames[j];
IOobject fieldObject IOobject fieldObject
( (

View File

@ -20,7 +20,7 @@ for (label indx=0;indx<nPoints;indx++)
} }
gmvFile << nl; gmvFile << nl;
gmvFile << "cells " << cells.size() << nl; gmvFile << "cells " << cells.size() << nl;
for (label indx=0;indx<cells.size();indx++) forAll(cells, indx)
{ {
label nNodes = cells[indx].size(); label nNodes = cells[indx].size();
if (nNodes == 8) if (nNodes == 8)

View File

@ -31,7 +31,7 @@ Usage
- foamToTecplot360 [OPTION] - foamToTecplot360 [OPTION]
@param -fields \<fields\>\n @param -fields \<names\>\n
Convert selected fields only. For example, Convert selected fields only. For example,
@verbatim @verbatim
-fields '( p T U )' -fields '( p T U )'
@ -163,30 +163,65 @@ labelList getSelectedPatches
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"Tecplot binary file format writer"
);
timeSelector::addOptions(); timeSelector::addOptions();
#include "addRegionOption.H"
# include "addRegionOption.H" argList::addOption
(
argList::addOption("fields", "fields"); "fields",
argList::addOption("cellSet", "cellSet name"); "names",
argList::addOption("faceSet", "faceSet name"); "convert selected fields only. eg, '(p T U)'"
argList::addBoolOption("nearCellValue"); );
argList::addBoolOption("noInternal"); argList::addOption
argList::addBoolOption("noPointValues"); (
"cellSet",
"name",
"restrict conversion to the specified cellSet"
);
argList::addOption
(
"faceSet",
"name",
"restrict conversion to the specified cellSet"
);
argList::addBoolOption
(
"nearCellValue",
"output cell value on patches instead of patch value itself"
);
argList::addBoolOption
(
"noInternal",
"do not generate file for mesh, only for patches"
);
argList::addBoolOption
(
"noPointValues",
"no pointFields"
);
argList::addOption argList::addOption
( (
"excludePatches", "excludePatches",
"patches (wildcards) to exclude" "patches (wildcards) to exclude"
); );
argList::addBoolOption("noFaceZones"); argList::addBoolOption
(
"noFaceZones",
"no faceZones"
);
# include "setRootCase.H" #include "setRootCase.H"
# include "createTime.H" #include "createTime.H"
bool doWriteInternal = !args.optionFound("noInternal"); const bool doWriteInternal = !args.optionFound("noInternal");
bool doFaceZones = !args.optionFound("noFaceZones"); const bool doFaceZones = !args.optionFound("noFaceZones");
const bool nearCellValue = args.optionFound("nearCellValue");
bool nearCellValue = args.optionFound("nearCellValue"); const bool noPointValues = args.optionFound("noPointValues");
if (nearCellValue) if (nearCellValue)
{ {
@ -195,8 +230,6 @@ int main(int argc, char *argv[])
<< nl << endl; << nl << endl;
} }
bool noPointValues = args.optionFound("noPointValues");
if (noPointValues) if (noPointValues)
{ {
WarningIn(args.executable()) WarningIn(args.executable())

View File

@ -40,7 +40,6 @@ Usage
- foamToVTK [OPTION] - foamToVTK [OPTION]
@param -ascii \n @param -ascii \n
Write VTK data in ASCII format instead of binary. Write VTK data in ASCII format instead of binary.
@ -78,6 +77,9 @@ Usage
@param -noLinks \n @param -noLinks \n
(in parallel) do not link processor files to master (in parallel) do not link processor files to master
@param poly \n
write polyhedral cells without tet/pyramid decomposition
@param -allPatches \n @param -allPatches \n
Combine all patches into a single file Combine all patches into a single file
@ -95,7 +97,7 @@ Usage
Note Note
mesh subset is handled by vtkMesh. Slight inconsistency in mesh subset is handled by vtkMesh. Slight inconsistency in
interpolation: on the internal field it interpolates the whole volfield interpolation: on the internal field it interpolates the whole volField
to the whole-mesh pointField and then selects only those values it to the whole-mesh pointField and then selects only those values it
needs for the subMesh (using the fvMeshSubset cellMap(), pointMap() needs for the subMesh (using the fvMeshSubset cellMap(), pointMap()
functions). For the patches however it uses the functions). For the patches however it uses the
@ -226,13 +228,17 @@ labelList getSelectedPatches
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addNote
(
"legacy VTK file format writer"
);
timeSelector::addOptions(); timeSelector::addOptions();
# include "addRegionOption.H" #include "addRegionOption.H"
argList::addOption argList::addOption
( (
"fields", "wordList", "fields",
"wordList",
"only convert the specified fields - eg '(p T U)'" "only convert the specified fields - eg '(p T U)'"
); );
argList::addOption argList::addOption
@ -241,25 +247,64 @@ int main(int argc, char *argv[])
"name", "name",
"convert a mesh subset corresponding to the specified cellSet" "convert a mesh subset corresponding to the specified cellSet"
); );
argList::addOption("faceSet", "name"); argList::addOption
argList::addOption("pointSet", "name"); (
"faceSet",
"name",
"restrict conversion to the specified faceSet"
);
argList::addOption
(
"pointSet",
"name",
"restrict conversion to the specified pointSet"
);
argList::addBoolOption argList::addBoolOption
( (
"ascii", "ascii",
"write in ASCII format instead of binary" "write in ASCII format instead of binary"
); );
argList::addBoolOption("surfaceFields"); argList::addBoolOption
argList::addBoolOption("nearCellValue"); (
argList::addBoolOption("noInternal"); "poly",
argList::addBoolOption("noPointValues"); "write polyhedral cells without tet/pyramid decomposition"
argList::addBoolOption("allPatches"); );
argList::addBoolOption
(
"surfaceFields",
"write surfaceScalarFields (e.g., phi)"
);
argList::addBoolOption
(
"nearCellValue",
"use cell value on patches instead of patch value itself"
);
argList::addBoolOption
(
"noInternal",
"do not generate file for mesh, only for patches"
);
argList::addBoolOption
(
"noPointValues",
"no pointFields"
);
argList::addBoolOption
(
"allPatches",
"combine all patches into a single file"
);
argList::addOption argList::addOption
( (
"excludePatches", "excludePatches",
"wordReList", "wordReList",
"a list of patches to exclude - eg '( inlet \".*Wall\" )' " "a list of patches to exclude - eg '( inlet \".*Wall\" )' "
); );
argList::addBoolOption("noFaceZones"); argList::addBoolOption
(
"noFaceZones",
"no faceZones"
);
argList::addBoolOption argList::addBoolOption
( (
"noLinks", "noLinks",
@ -271,8 +316,8 @@ int main(int argc, char *argv[])
"use the time name instead of the time index when naming the files" "use the time name instead of the time index when naming the files"
); );
# include "setRootCase.H" #include "setRootCase.H"
# include "createTime.H" #include "createTime.H"
const bool doWriteInternal = !args.optionFound("noInternal"); const bool doWriteInternal = !args.optionFound("noInternal");
const bool doFaceZones = !args.optionFound("noFaceZones"); const bool doFaceZones = !args.optionFound("noFaceZones");
@ -280,6 +325,9 @@ int main(int argc, char *argv[])
const bool binary = !args.optionFound("ascii"); const bool binary = !args.optionFound("ascii");
const bool useTimeName = args.optionFound("useTimeName"); const bool useTimeName = args.optionFound("useTimeName");
// decomposition of polyhedral cells into tets/pyramids cells
vtkTopo::decomposePoly = !args.optionFound("poly");
if (binary && (sizeof(floatScalar) != 4 || sizeof(label) != 4)) if (binary && (sizeof(floatScalar) != 4 || sizeof(label) != 4))
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
@ -941,17 +989,17 @@ int main(int argc, char *argv[])
Info<< " FaceZone : " << patchFileName << endl; Info<< " FaceZone : " << patchFileName << endl;
std::ofstream str(patchFileName.c_str()); std::ofstream ostr(patchFileName.c_str());
writeFuns::writeHeader(str, binary, pp.name()); writeFuns::writeHeader(ostr, binary, pp.name());
str << "DATASET POLYDATA" << std::endl; ostr<< "DATASET POLYDATA" << std::endl;
writePatchGeom writePatchGeom
( (
binary, binary,
pp().localFaces(), pp().localFaces(),
pp().localPoints(), pp().localPoints(),
str ostr
); );
} }
} }

View File

@ -28,7 +28,6 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::internalWriter::internalWriter Foam::internalWriter::internalWriter
( (
const vtkMesh& vMesh, const vtkMesh& vMesh,
@ -58,8 +57,7 @@ Foam::internalWriter::internalWriter
const labelList& addPointCellLabels = topo.addPointCellLabels(); const labelList& addPointCellLabels = topo.addPointCellLabels();
const label nTotPoints = mesh.nPoints() + addPointCellLabels.size(); const label nTotPoints = mesh.nPoints() + addPointCellLabels.size();
os_ << "POINTS " << nTotPoints os_ << "POINTS " << nTotPoints << " float" << std::endl;
<< " float" << std::endl;
DynamicList<floatScalar> ptField(3*nTotPoints); DynamicList<floatScalar> ptField(3*nTotPoints);
@ -87,9 +85,7 @@ Foam::internalWriter::internalWriter
nFaceVerts += vtkVertLabels[cellI].size() + 1; nFaceVerts += vtkVertLabels[cellI].size() + 1;
} }
os_ << "CELLS " << vtkVertLabels.size() << ' ' << nFaceVerts os_ << "CELLS " << vtkVertLabels.size() << ' ' << nFaceVerts << std::endl;
<< std::endl;
DynamicList<label> vertLabels(nFaceVerts); DynamicList<label> vertLabels(nFaceVerts);
@ -104,7 +100,6 @@ Foam::internalWriter::internalWriter
writeFuns::write(os_, binary_, vertLabels); writeFuns::write(os_, binary_, vertLabels);
const labelList& vtkCellTypes = topo.cellTypes(); const labelList& vtkCellTypes = topo.cellTypes();
os_ << "CELL_TYPES " << vtkCellTypes.size() << std::endl; os_ << "CELL_TYPES " << vtkCellTypes.size() << std::endl;
@ -128,8 +123,7 @@ void Foam::internalWriter::writeCellIDs()
const labelList& superCells = topo.superCells(); const labelList& superCells = topo.superCells();
// Cell ids first // Cell ids first
os_ << "cellID 1 " << vtkCellTypes.size() << " int" os_ << "cellID 1 " << vtkCellTypes.size() << " int" << std::endl;
<< std::endl;
labelList cellId(vtkCellTypes.size()); labelList cellId(vtkCellTypes.size());
label labelI = 0; label labelI = 0;

View File

@ -30,7 +30,6 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::lagrangianWriter::lagrangianWriter Foam::lagrangianWriter::lagrangianWriter
( (
const vtkMesh& vMesh, const vtkMesh& vMesh,

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