From 9eaaff14c46ca21c737df66e3d996d55940d34d4 Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Tue, 10 Feb 2009 18:38:01 +0000 Subject: [PATCH] included subtract method --- .../foamCalcFunctions/Make/files | 2 +- .../{add/add.C => addSubtract/addSubtract.C} | 123 ++++++++++-------- .../{add/add.H => addSubtract/addSubtract.H} | 79 ++++++----- .../writeAddSubtractField.C} | 22 +++- .../writeAddSubtractValue.C} | 26 +++- 5 files changed, 153 insertions(+), 99 deletions(-) rename src/postProcessing/foamCalcFunctions/basic/{add/add.C => addSubtract/addSubtract.C} (63%) rename src/postProcessing/foamCalcFunctions/basic/{add/add.H => addSubtract/addSubtract.H} (71%) rename src/postProcessing/foamCalcFunctions/basic/{add/writeAddField.C => addSubtract/writeAddSubtractField.C} (84%) rename src/postProcessing/foamCalcFunctions/basic/{add/writeAddValue.C => addSubtract/writeAddSubtractValue.C} (76%) diff --git a/src/postProcessing/foamCalcFunctions/Make/files b/src/postProcessing/foamCalcFunctions/Make/files index 4f4a0ccf6ff..55297ca8c80 100644 --- a/src/postProcessing/foamCalcFunctions/Make/files +++ b/src/postProcessing/foamCalcFunctions/Make/files @@ -9,6 +9,6 @@ field/div/div.C field/randomise/randomise.C field/interpolate/interpolate.C -basic/add/add.C +basic/addSubtract/addSubtract.C LIB = $(FOAM_LIBBIN)/libfoamCalcFunctions diff --git a/src/postProcessing/foamCalcFunctions/basic/add/add.C b/src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.C similarity index 63% rename from src/postProcessing/foamCalcFunctions/basic/add/add.C rename to src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.C index 84ec8db834a..b64f5f8adbb 100644 --- a/src/postProcessing/foamCalcFunctions/basic/add/add.C +++ b/src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ -#include "add.H" +#include "addSubtract.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -33,15 +33,15 @@ namespace Foam { namespace calcTypes { - defineTypeNameAndDebug(add, 0); - addToRunTimeSelectionTable(calcType, add, dictionary); + defineTypeNameAndDebug(addSubtract, 0); + addToRunTimeSelectionTable(calcType, addSubtract, dictionary); } } // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::calcTypes::add::writeAddFields +void Foam::calcTypes::addSubtract::writeAddSubtractFields ( const Time& runTime, const fvMesh& mesh, @@ -50,48 +50,48 @@ void Foam::calcTypes::add::writeAddFields { bool processed = false; - IOobject addFieldHeader + IOobject addSubtractFieldHeader ( - addFieldName_, + addSubtractFieldName_, runTime.timeName(), mesh, IOobject::MUST_READ ); - if (addFieldHeader.headerOk()) + if (addSubtractFieldHeader.headerOk()) { - writeAddField<scalar> + writeAddSubtractField<scalar> ( baseFieldHeader, - addFieldHeader, + addSubtractFieldHeader, mesh, processed ); - writeAddField<vector> + writeAddSubtractField<vector> ( baseFieldHeader, - addFieldHeader, + addSubtractFieldHeader, mesh, processed ); - writeAddField<sphericalTensor> + writeAddSubtractField<sphericalTensor> ( baseFieldHeader, - addFieldHeader, + addSubtractFieldHeader, mesh, processed ); - writeAddField<symmTensor> + writeAddSubtractField<symmTensor> ( baseFieldHeader, - addFieldHeader, + addSubtractFieldHeader, mesh, processed ); - writeAddField<tensor> + writeAddSubtractField<tensor> ( baseFieldHeader, - addFieldHeader, + addSubtractFieldHeader, mesh, processed ); @@ -100,23 +100,23 @@ void Foam::calcTypes::add::writeAddFields { FatalError << "Unable to process " << baseFieldName_ - << " + " << addFieldName_ << nl - << "No call to add for fields of type " + << " + " << addSubtractFieldName_ << nl + << "No call to addSubtract for fields of type " << baseFieldHeader.headerClassName() << " + " - << addFieldHeader.headerClassName() << nl << nl + << addSubtractFieldHeader.headerClassName() << nl << nl << exit(FatalError); } } else { - FatalErrorIn("calcTypes::add::writeAddFields()") - << "Unable to read add field: " << addFieldName_ + FatalErrorIn("calcTypes::addSubtract::writeAddSubtractFields()") + << "Unable to read addSubtract field: " << addSubtractFieldName_ << nl << exit(FatalError); } } -void Foam::calcTypes::add::writeAddValues +void Foam::calcTypes::addSubtract::writeAddSubtractValues ( const Time& runTime, const fvMesh& mesh, @@ -125,48 +125,48 @@ void Foam::calcTypes::add::writeAddValues { bool processed = false; - writeAddValue<scalar> + writeAddSubtractValue<scalar> ( baseFieldHeader, - addValueStr_, + addSubtractValueStr_, mesh, processed ); - writeAddValue<vector> + writeAddSubtractValue<vector> ( baseFieldHeader, - addValueStr_, + addSubtractValueStr_, mesh, processed ); - writeAddValue<sphericalTensor> + writeAddSubtractValue<sphericalTensor> ( baseFieldHeader, - addValueStr_, + addSubtractValueStr_, mesh, processed ); - writeAddValue<symmTensor> + writeAddSubtractValue<symmTensor> ( baseFieldHeader, - addValueStr_, + addSubtractValueStr_, mesh, processed ); - writeAddValue<tensor> + writeAddSubtractValue<tensor> ( baseFieldHeader, - addValueStr_, + addSubtractValueStr_, mesh, processed ); if (!processed) { - FatalErrorIn("calcTypes::add::writeAddValues()") + FatalErrorIn("calcTypes::addSubtract::writeAddSubtractValue()") << "Unable to process " << baseFieldName_ - << " + " << addValueStr_ << nl - << "No call to add for fields of type " + << " + " << addSubtractValueStr_ << nl + << "No call to addSubtract for fields of type " << baseFieldHeader.headerClassName() << nl << nl << exit(FatalError); } @@ -175,36 +175,38 @@ void Foam::calcTypes::add::writeAddValues // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::calcTypes::add::add() +Foam::calcTypes::addSubtract::addSubtract() : calcType(), baseFieldName_(""), calcType_(FIELD), - addFieldName_(""), - addValueStr_(""), - resultName_("") + addSubtractFieldName_(""), + addSubtractValueStr_(""), + resultName_(""), + calcMode_(ADD) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -Foam::calcTypes::add::~add() +Foam::calcTypes::addSubtract::~addSubtract() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::calcTypes::add::init() +void Foam::calcTypes::addSubtract::init() { argList::validArgs.append("add"); argList::validArgs.append("baseField"); + argList::validArgs.append("calcMode"); argList::validOptions.insert("field", "fieldName"); argList::validOptions.insert("value", "valueString"); argList::validOptions.insert("resultName", "fieldName"); } -void Foam::calcTypes::add::preCalc +void Foam::calcTypes::addSubtract::preCalc ( const argList& args, const Time& runTime, @@ -212,21 +214,38 @@ void Foam::calcTypes::add::preCalc ) { baseFieldName_ = args.additionalArgs()[1]; + word calcModeName = args.additionalArgs()[2]; + + if (calcModeName == "add") + { + calcMode_ = ADD; + } + else if (calcModeName == "subtract") + { + calcMode_ = SUBTRACT; + } + else + { + FatalErrorIn("calcTypes::addSubtract::preCalc") + << "Invalid calcMode: " << calcModeName << nl + << " Valid calcModes are add and subtract" << nl + << exit(FatalError); + } if (args.options().found("field")) { - addFieldName_ = args.options()["field"]; + addSubtractFieldName_ = args.options()["field"]; calcType_ = FIELD; } else if (args.options().found("value")) { - addValueStr_ = args.options()["value"]; + addSubtractValueStr_ = args.options()["value"]; calcType_ = VALUE; } else { - FatalErrorIn("calcTypes::add::preCalc") - << "add requires either -field or -value option" + FatalErrorIn("calcTypes::addSubtract::preCalc") + << "addSubtract requires either -field or -value option" << nl << exit(FatalError); } @@ -237,7 +256,7 @@ void Foam::calcTypes::add::preCalc } -void Foam::calcTypes::add::calc +void Foam::calcTypes::addSubtract::calc ( const argList& args, const Time& runTime, @@ -258,17 +277,17 @@ void Foam::calcTypes::add::calc { case FIELD: { - writeAddFields(runTime, mesh, baseFieldHeader); + writeAddSubtractFields(runTime, mesh, baseFieldHeader); break; } case VALUE: { - writeAddValues(runTime, mesh, baseFieldHeader); + writeAddSubtractValues(runTime, mesh, baseFieldHeader); break; } default: { - FatalErrorIn("calcTypes::add::calc") + FatalErrorIn("calcTypes::addSubtract::calc") << "unknown calcType " << calcType_ << nl << abort(FatalError); } @@ -276,7 +295,7 @@ void Foam::calcTypes::add::calc } else { - FatalErrorIn("calcTypes::add::calc") + FatalErrorIn("calcTypes::addSubtract::calc") << "Unable to read base field: " << baseFieldName_ << nl << exit(FatalError); } diff --git a/src/postProcessing/foamCalcFunctions/basic/add/add.H b/src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.H similarity index 71% rename from src/postProcessing/foamCalcFunctions/basic/add/add.H rename to src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.H index f365ca50d4e..bc04b45b7c1 100644 --- a/src/postProcessing/foamCalcFunctions/basic/add/add.H +++ b/src/postProcessing/foamCalcFunctions/basic/addSubtract/addSubtract.H @@ -23,28 +23,30 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::calcTypes::add + Foam::calcTypes::addSubtract Description - Adds and field or value to base field. + adds/subtracts a field or value to/from a base field. New field name specified by -resultName option, or automatically as: - <baseFieldName>_plus_<addFieldName> - <baseFieldName>_plus_value + <baseFieldName>_add_<addSubtractFieldName> + <baseFieldName>_add_value + <baseFieldName>_subtract_<addSubtractFieldName> + <baseFieldName>_subtract_value Example usage: - add p -value 100000 -resultName pAbs - add U -field U0 + addSubtract p add -value 100000 -resultName pAbs + addSubtract U subtract -field U0 SourceFiles - add.C - writeAddField.C - writeAddValue.C + addSubtract.C + writeaddSubtractField.C + writeaddSubtractValue.C \*---------------------------------------------------------------------------*/ -#ifndef add_H -#define add_H +#ifndef addSubtract_H +#define addSubtract_H #include "calcType.H" @@ -57,10 +59,10 @@ namespace calcTypes { /*---------------------------------------------------------------------------*\ - Class add Declaration + Class addSubtract Declaration \*---------------------------------------------------------------------------*/ -class add +class addSubtract : public calcType { @@ -72,41 +74,50 @@ public: VALUE }; + enum calcModes + { + ADD, + SUBTRACT + }; + private: // Private data - //- Name of base field (to add to) + //- Name of base field (to addSubtract to) word baseFieldName_; //- Calc type as given by enumerations above calcTypes calcType_; - //- Name of field to add - word addFieldName_; + //- Name of field to add/subtract + word addSubtractFieldName_; - //- String representation of value to add - string addValueStr_; + //- String representation of value to add/subtract + string addSubtractValueStr_; //- Name of result field word resultName_; + //- Mode - addSubtract/subtract + calcModes calcMode_; + // Private Member Functions // Output - //- Calc and output field additions - void writeAddFields + //- Calc and output field addSubtractitions + void writeAddSubtractFields ( const Time& runTime, const fvMesh& mesh, const IOobject& baseFieldHeader ); - //- Calc and output field and value additions - void writeAddValues + //- Calc and output field and value addSubtractitions + void writeAddSubtractValues ( const Time& runTime, const fvMesh& mesh, @@ -115,10 +126,10 @@ private: //- Disallow default bitwise copy construct - add(const add&); + addSubtract(const addSubtract&); //- Disallow default bitwise assignment - void operator=(const add&); + void operator=(const addSubtract&); protected: @@ -150,19 +161,19 @@ protected: // I-O - //- Write add field + //- Write addSubtract field template<class Type> - void writeAddField + void writeAddSubtractField ( const IOobject& baseHeader, - const IOobject& addHeader, + const IOobject& addSubtractHeader, const fvMesh& mesh, bool& processed ); - //- Write add value + //- Write addSubtract value template<class Type> - void writeAddValue + void writeAddSubtractValue ( const IOobject& baseHeader, const string& valueStr, @@ -174,18 +185,18 @@ protected: public: //- Runtime type information - TypeName("add"); + TypeName("addSubtract"); // Constructors //- Construct null - add(); + addSubtract(); // Destructor - virtual ~add(); + virtual ~addSubtract(); }; @@ -197,8 +208,8 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "writeAddField.C" -# include "writeAddValue.C" +# include "writeAddSubtractField.C" +# include "writeAddSubtractValue.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/postProcessing/foamCalcFunctions/basic/add/writeAddField.C b/src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractField.C similarity index 84% rename from src/postProcessing/foamCalcFunctions/basic/add/writeAddField.C rename to src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractField.C index 3701a0d429f..79cd9a7cf81 100644 --- a/src/postProcessing/foamCalcFunctions/basic/add/writeAddField.C +++ b/src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractField.C @@ -25,7 +25,7 @@ License \*---------------------------------------------------------------------------*/ template<class Type> -void Foam::calcTypes::add::writeAddField +void Foam::calcTypes::addSubtract::writeAddSubtractField ( const IOobject& baseHeader, const IOobject& addHeader, @@ -33,11 +33,6 @@ void Foam::calcTypes::add::writeAddField bool& processed ) { - if (resultName_ == "") - { - resultName_ = baseHeader.name() + "_plus_" + addHeader.name(); - } - typedef GeometricField<Type, fvPatchField, volMesh> fieldType; if @@ -46,6 +41,19 @@ void Foam::calcTypes::add::writeAddField && baseHeader.headerClassName() == addHeader.headerClassName() ) { + if (resultName_ == "") + { + if (calcMode_ == ADD) + { + resultName_ = baseHeader.name() + "_add_" + addHeader.name(); + } + else + { + resultName_ = baseHeader.name() + "_subtract_" + + addHeader.name(); + } + } + Info<< " Reading " << baseHeader.name() << endl; fieldType baseField(baseHeader, mesh); @@ -65,7 +73,7 @@ void Foam::calcTypes::add::writeAddField mesh, IOobject::NO_READ ), - baseField + addField + calcMode_ == ADD ? baseField + addField : baseField - addField ); newField.write(); } diff --git a/src/postProcessing/foamCalcFunctions/basic/add/writeAddValue.C b/src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractValue.C similarity index 76% rename from src/postProcessing/foamCalcFunctions/basic/add/writeAddValue.C rename to src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractValue.C index 3a5abaf188c..2f8872b54a8 100644 --- a/src/postProcessing/foamCalcFunctions/basic/add/writeAddValue.C +++ b/src/postProcessing/foamCalcFunctions/basic/addSubtract/writeAddSubtractValue.C @@ -25,7 +25,7 @@ License \*---------------------------------------------------------------------------*/ template<class Type> -void Foam::calcTypes::add::writeAddValue +void Foam::calcTypes::addSubtract::writeAddSubtractValue ( const IOobject& baseHeader, const string& valueStr, @@ -39,14 +39,21 @@ void Foam::calcTypes::add::writeAddValue { if (resultName_ == "") { - resultName_ = baseHeader.name() + "_plus_value"; + if (calcMode_ == ADD) + { + resultName_ = baseHeader.name() + "_add_value"; + } + else + { + resultName_ = baseHeader.name() + "_subtract_value"; + } } Type value; IStringStream(valueStr)() >> value; Info<< " Reading " << baseHeader.name() << endl; - fieldType baseField(baseHeader, mesh); + fieldType baseField(baseHeader, mesh); fieldType newField ( @@ -61,8 +68,17 @@ void Foam::calcTypes::add::writeAddValue ); Info<< " Calculating " << resultName_ << endl; - newField == baseField - + dimensioned<Type>("value", baseField.dimensions(), value); + if (calcMode_ == ADD) + { + newField == baseField + + dimensioned<Type>("value", baseField.dimensions(), value); + } + else + { + newField == baseField + - dimensioned<Type>("value", baseField.dimensions(), value); + } + newField.write(); processed = true; -- GitLab