mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
adding mag/component options
This commit is contained in:
@ -38,6 +38,18 @@ namespace Foam
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char* Foam::NamedEnum<Foam::fieldMinMax::modeType, 2>::names[] =
|
||||||
|
{
|
||||||
|
"magnitude",
|
||||||
|
"component"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::NamedEnum<Foam::fieldMinMax::modeType, 2>
|
||||||
|
Foam::fieldMinMax::modeTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::fieldMinMax::fieldMinMax
|
Foam::fieldMinMax::fieldMinMax
|
||||||
@ -52,6 +64,7 @@ Foam::fieldMinMax::fieldMinMax
|
|||||||
obr_(obr),
|
obr_(obr),
|
||||||
active_(true),
|
active_(true),
|
||||||
log_(false),
|
log_(false),
|
||||||
|
mode_(mdMag),
|
||||||
fieldSet_(),
|
fieldSet_(),
|
||||||
fieldMinMaxFilePtr_(NULL)
|
fieldMinMaxFilePtr_(NULL)
|
||||||
{
|
{
|
||||||
@ -85,6 +98,7 @@ void Foam::fieldMinMax::read(const dictionary& dict)
|
|||||||
{
|
{
|
||||||
log_ = dict.lookupOrDefault<Switch>("log", false);
|
log_ = dict.lookupOrDefault<Switch>("log", false);
|
||||||
|
|
||||||
|
mode_ = modeTypeNames_[dict.lookup("mode")];
|
||||||
dict.lookup("fields") >> fieldSet_;
|
dict.lookup("fields") >> fieldSet_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,14 +189,14 @@ void Foam::fieldMinMax::calcMinMaxFields<Foam::scalar>
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (obr_.foundObject<volScalarField>(fieldName))
|
if (obr_.foundObject<volScalarField>(fieldName))
|
||||||
|
{
|
||||||
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
const volScalarField& field =
|
const volScalarField& field =
|
||||||
obr_.lookupObject<volScalarField>(fieldName);
|
obr_.lookupObject<volScalarField>(fieldName);
|
||||||
scalar minValue = min(field).value();
|
scalar minValue = min(field).value();
|
||||||
scalar maxValue = max(field).value();
|
scalar maxValue = max(field).value();
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
fieldMinMaxFilePtr_() << obr_.time().value() << tab
|
fieldMinMaxFilePtr_() << obr_.time().value() << tab
|
||||||
<< fieldName << tab << minValue << tab << maxValue << endl;
|
<< fieldName << tab << minValue << tab << maxValue << endl;
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,7 @@ SourceFiles
|
|||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
#include "Switch.H"
|
#include "Switch.H"
|
||||||
#include "pointFieldFwd.H"
|
#include "pointFieldFwd.H"
|
||||||
|
#include "NamedEnum.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -66,9 +67,18 @@ class mapPolyMesh;
|
|||||||
|
|
||||||
class fieldMinMax
|
class fieldMinMax
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum modeType
|
||||||
|
{
|
||||||
|
mdMag,
|
||||||
|
mdCmpt
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Private data
|
// Protected data
|
||||||
|
|
||||||
//- Name of this set of forces,
|
//- Name of this set of forces,
|
||||||
// Also used as the name of the probes directory.
|
// Also used as the name of the probes directory.
|
||||||
@ -82,11 +92,17 @@ protected:
|
|||||||
//- Switch to send output to Info as well as to file
|
//- Switch to send output to Info as well as to file
|
||||||
Switch log_;
|
Switch log_;
|
||||||
|
|
||||||
//- Patches to integrate forces over
|
//- Mode type names
|
||||||
|
static const NamedEnum<modeType, 2> modeTypeNames_;
|
||||||
|
|
||||||
|
//- Mode for min/max - only applicable for ranks > 0
|
||||||
|
modeType mode_;
|
||||||
|
|
||||||
|
//- Fields to assess min/max
|
||||||
wordList fieldSet_;
|
wordList fieldSet_;
|
||||||
|
|
||||||
|
|
||||||
//- Forces/moment file ptr
|
//- Min/max file ptr
|
||||||
autoPtr<OFstream> fieldMinMaxFilePtr_;
|
autoPtr<OFstream> fieldMinMaxFilePtr_;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,23 +37,62 @@ void Foam::fieldMinMax::calcMinMaxFields(const word& fieldName)
|
|||||||
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
||||||
|
|
||||||
if (obr_.foundObject<fieldType>(fieldName))
|
if (obr_.foundObject<fieldType>(fieldName))
|
||||||
|
{
|
||||||
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
const fieldType& field = obr_.lookupObject<fieldType>(fieldName);
|
const fieldType& field = obr_.lookupObject<fieldType>(fieldName);
|
||||||
|
switch (mode_)
|
||||||
|
{
|
||||||
|
case mdMag:
|
||||||
|
{
|
||||||
scalar minValue = min(mag(field)).value();
|
scalar minValue = min(mag(field)).value();
|
||||||
scalar maxValue = max(mag(field)).value();
|
scalar maxValue = max(mag(field)).value();
|
||||||
|
|
||||||
if (Pstream::master())
|
|
||||||
{
|
|
||||||
fieldMinMaxFilePtr_() << obr_.time().value() << tab
|
fieldMinMaxFilePtr_() << obr_.time().value() << tab
|
||||||
<< fieldName << tab << minValue << tab << maxValue << endl;
|
<< fieldName << tab << minValue << tab << maxValue
|
||||||
|
<< endl;
|
||||||
|
|
||||||
if (log_)
|
if (log_)
|
||||||
{
|
{
|
||||||
Info<< "fieldMinMax output:" << nl
|
Info<< "fieldMinMax output:" << nl
|
||||||
<< " min(mag(" << fieldName << ")) = " << minValue << nl
|
<< " min(mag(" << fieldName << ")) = "
|
||||||
<< " max(mag(" << fieldName << ")) = " << maxValue << nl
|
<< minValue << nl
|
||||||
|
<< " max(mag(" << fieldName << ")) = "
|
||||||
|
<< maxValue << nl
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case mdCmpt:
|
||||||
|
{
|
||||||
|
Type minValue = min(field).value();
|
||||||
|
Type maxValue = max(field).value();
|
||||||
|
|
||||||
|
fieldMinMaxFilePtr_() << obr_.time().value() << tab
|
||||||
|
<< fieldName << tab << minValue << tab << maxValue
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
if (log_)
|
||||||
|
{
|
||||||
|
Info<< "fieldMinMax output:" << nl
|
||||||
|
<< " cmptMin(" << fieldName << ") = "
|
||||||
|
<< minValue << nl
|
||||||
|
<< " cmptMax(" << fieldName << ") = "
|
||||||
|
<< maxValue << nl
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"Foam::fieldMinMax::calcMinMaxFields"
|
||||||
|
"(const word& fieldName)"
|
||||||
|
)<< "Unknown min/max mode: " << modeTypeNames_[mode_]
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user