mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-12-28 03:37:59 +00:00
ENH: Added help utility for buondary conditions
This commit is contained in:
@ -0,0 +1,185 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 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/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "helpBoundary.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace helpTypes
|
||||
{
|
||||
defineTypeNameAndDebug(helpBoundary, 0);
|
||||
addNamedToRunTimeSelectionTable
|
||||
(
|
||||
helpType,
|
||||
helpBoundary,
|
||||
dictionary,
|
||||
boundary
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::helpTypes::helpBoundary::helpBoundary()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::helpTypes::helpBoundary::~helpBoundary()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::helpTypes::helpBoundary::init()
|
||||
{
|
||||
helpType::init();
|
||||
|
||||
argList::validArgs.append("boundary");
|
||||
|
||||
argList::addOption
|
||||
(
|
||||
"field",
|
||||
"word",
|
||||
"list available conditions for field"
|
||||
);
|
||||
argList::addBoolOption
|
||||
(
|
||||
"constraint",
|
||||
"list constraint patches"
|
||||
);
|
||||
argList::addBoolOption
|
||||
(
|
||||
"fixedValue",
|
||||
"list fixed value patches (use with -field option)"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Foam::helpTypes::helpBoundary::execute
|
||||
(
|
||||
const argList& args,
|
||||
const fvMesh& mesh
|
||||
)
|
||||
{
|
||||
bool abortVar(env("FOAM_ABORT"));
|
||||
if (abortVar)
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"void Foam::helpTypes::helpBoundary::execute"
|
||||
"("
|
||||
"const argList&, "
|
||||
"const fvMesh&"
|
||||
")"
|
||||
)
|
||||
<< "Please unset FOAM_ABORT to use this utlity"
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
word condition(word::null);
|
||||
word fieldName(word::null);
|
||||
|
||||
if (args.optionReadIfPresent("browse", condition))
|
||||
{
|
||||
// TODO: strip scoping info if present?
|
||||
// e.g. conditions with leading "compressible::" will not be found
|
||||
// ".*[fF]vPatchField.*" + className + ".*"
|
||||
displayDoc(condition, ".*[fF]vPatchField.*", false);
|
||||
}
|
||||
else if (args.optionFound("constraint"))
|
||||
{
|
||||
HashSet<word> constraintTypes(fvPatch::constraintTypes());
|
||||
Info<< "Constraint types:" << nl;
|
||||
forAllConstIter(HashSet<word>, constraintTypes, iter)
|
||||
{
|
||||
Info<< " " << iter.key() << nl;
|
||||
}
|
||||
Info<< endl;
|
||||
}
|
||||
else if (args.optionReadIfPresent("field", fieldName))
|
||||
{
|
||||
IOobject fieldHeader
|
||||
(
|
||||
fieldName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
|
||||
if (fieldHeader.headerOk())
|
||||
{
|
||||
if (args.optionFound("fixedValue"))
|
||||
{
|
||||
fixedValueFieldConditions<scalar>(fieldHeader);
|
||||
fixedValueFieldConditions<vector>(fieldHeader);
|
||||
fixedValueFieldConditions<sphericalTensor>(fieldHeader);
|
||||
fixedValueFieldConditions<symmTensor>(fieldHeader);
|
||||
fixedValueFieldConditions<tensor>(fieldHeader);
|
||||
}
|
||||
else
|
||||
{
|
||||
(void)fieldConditions<scalar>(fieldHeader, true);
|
||||
(void)fieldConditions<vector>(fieldHeader, true);
|
||||
(void)fieldConditions<sphericalTensor>(fieldHeader, true);
|
||||
(void)fieldConditions<symmTensor>(fieldHeader, true);
|
||||
(void)fieldConditions<tensor>(fieldHeader, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"void Foam::helpTypes::helpBoundary::execute"
|
||||
"("
|
||||
"const argList&, "
|
||||
"const fvMesh&"
|
||||
")"
|
||||
)
|
||||
<< "Unable to read field " << fieldName << exit(FatalError);
|
||||
}
|
||||
}
|
||||
else if (args.optionReadIfPresent("fixedValue", fieldName))
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"void Foam::helpTypes::helpBoundary::execute"
|
||||
"("
|
||||
"const argList&, "
|
||||
"const fvMesh&"
|
||||
")"
|
||||
)
|
||||
<< "-field option must be specified when using the -fixedValue "
|
||||
<< "option" << exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,109 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 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/>.
|
||||
|
||||
Class
|
||||
Foam::helpBoundary
|
||||
|
||||
Description
|
||||
|
||||
|
||||
SourceFiles
|
||||
helpBoundary.C
|
||||
helpBoundaryTemplates.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef helpBoundary_H
|
||||
#define helpBoundary_H
|
||||
|
||||
#include "helpType.H"
|
||||
#include "IOobject.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace helpTypes
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class helpBoundary Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class helpBoundary
|
||||
:
|
||||
public helpType
|
||||
{
|
||||
|
||||
protected:
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- Return/output the available boundary conditions for fields of Type
|
||||
template<class Type>
|
||||
wordList fieldConditions(const IOobject& io, const bool write) const;
|
||||
|
||||
//- Output the available fixed boundary conditions for fields of Type
|
||||
template<class Type>
|
||||
void fixedValueFieldConditions(const IOobject& io) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("helpBoundary");
|
||||
|
||||
//- Constructor
|
||||
helpBoundary();
|
||||
|
||||
//- Destructor
|
||||
virtual ~helpBoundary();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Initialise - typically setting static variables,
|
||||
// e.g. command line arguments
|
||||
virtual void init();
|
||||
|
||||
//- Execute the help
|
||||
virtual void execute(const argList& args, const fvMesh& mesh);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace helpTypes
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
#include "helpBoundaryTemplates.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,160 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 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/>.
|
||||
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "GeometricField.H"
|
||||
#include "fvPatchField.H"
|
||||
#include "volMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
Foam::wordList Foam::helpTypes::helpBoundary::fieldConditions
|
||||
(
|
||||
const IOobject& io,
|
||||
const bool write
|
||||
) const
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
||||
|
||||
if (io.headerClassName() == fieldType::typeName)
|
||||
{
|
||||
wordList types
|
||||
(
|
||||
fvPatchField<Type>::dictionaryConstructorTablePtr_->sortedToc()
|
||||
);
|
||||
|
||||
if (write)
|
||||
{
|
||||
Info<< "Available boundary conditions for "
|
||||
<< pTraits<Type>::typeName << " field: " << io.name() << nl;
|
||||
|
||||
forAll(types, i)
|
||||
{
|
||||
Info<< " " << types[i] << nl;
|
||||
}
|
||||
|
||||
Info<< endl;
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
return wordList();
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::helpTypes::helpBoundary::fixedValueFieldConditions
|
||||
(
|
||||
const IOobject& io
|
||||
) const
|
||||
{
|
||||
wordList types(fieldConditions<Type>(io, false));
|
||||
|
||||
if (!types.size())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
||||
|
||||
const fvMesh& mesh = dynamic_cast<const fvMesh&>(io.db());
|
||||
|
||||
fieldType fld
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"dummy",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh,
|
||||
dimensioned<Type>("zero", dimless, pTraits<Type>::zero)
|
||||
);
|
||||
|
||||
|
||||
Info<< "Fixed value boundary conditions for "
|
||||
<< pTraits<Type>::typeName << " field: " << io.name() << nl;
|
||||
|
||||
// throw exceptions to avoid fatal errors when casting from generic patch
|
||||
// type to incompatible patch type
|
||||
FatalIOError.throwExceptions();
|
||||
FatalError.throwExceptions();
|
||||
|
||||
bool foundFixed = false;
|
||||
forAll(types, i)
|
||||
{
|
||||
const word& patchType = types[i];
|
||||
|
||||
try
|
||||
{
|
||||
polyPatch pp
|
||||
(
|
||||
"defaultFaces",
|
||||
0,
|
||||
mesh.nInternalFaces(),
|
||||
0,
|
||||
mesh.boundaryMesh()
|
||||
);
|
||||
|
||||
fvPatch fvp(pp, mesh.boundary());
|
||||
|
||||
tmp<fvPatchField<Type> > pf
|
||||
(
|
||||
fvPatchField<Type>::New
|
||||
(
|
||||
patchType,
|
||||
fvp,
|
||||
fld
|
||||
)
|
||||
);
|
||||
|
||||
if (pf().fixesValue())
|
||||
{
|
||||
Info<< " " << patchType << nl;
|
||||
foundFixed = true;
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundFixed)
|
||||
{
|
||||
// no conditions???
|
||||
Info<< " none" << nl;
|
||||
}
|
||||
|
||||
Info<< endl;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user