From ccadb5f24c0b0d41ae9217b4d7714b0f8c8482b9 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 13 Feb 2009 08:55:10 +0000 Subject: [PATCH] average fields registered --- .../fieldAverage/fieldAverage/fieldAverage.C | 76 +++++++---- .../fieldAverage/fieldAverage/fieldAverage.H | 55 ++++---- .../fieldAverage/fieldAverageTemplates.C | 147 ++++++++++++++------- 3 files changed, 168 insertions(+), 110 deletions(-) diff --git a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C index 4937b64..3ac0b29 100644 --- a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C +++ b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C @@ -46,26 +46,45 @@ const Foam::word Foam::fieldAverage::EXT_PRIME2MEAN = "Prime2Mean"; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +void Foam::fieldAverage::checkoutFields(const wordList& fieldNames) const +{ + forAll(fieldNames, i) + { + if (fieldNames[i] != word::null) + { + obr_.checkOut(*obr_[fieldNames[i]]); + } + } +} + + void Foam::fieldAverage::resetLists(const label nItems) { + checkoutFields(meanScalarFields_); meanScalarFields_.clear(); meanScalarFields_.setSize(nItems); + checkoutFields(meanVectorFields_); meanVectorFields_.clear(); meanVectorFields_.setSize(nItems); + checkoutFields(meanSphericalTensorFields_); meanSphericalTensorFields_.clear(); meanSphericalTensorFields_.setSize(nItems); + checkoutFields(meanSymmTensorFields_); meanSymmTensorFields_.clear(); meanSymmTensorFields_.setSize(nItems); + checkoutFields(meanTensorFields_); meanTensorFields_.clear(); meanTensorFields_.setSize(nItems); + checkoutFields(prime2MeanScalarFields_); prime2MeanScalarFields_.clear(); prime2MeanScalarFields_.setSize(nItems); + checkoutFields(prime2MeanSymmTensorFields_); prime2MeanSymmTensorFields_.clear(); prime2MeanSymmTensorFields_.setSize(nItems); @@ -128,7 +147,7 @@ void Foam::fieldAverage::initialise() if (obr_.foundObject(fieldName)) { - addPrime2MeanField + addPrime2MeanField ( i, meanScalarFields_, @@ -137,7 +156,7 @@ void Foam::fieldAverage::initialise() } else if (obr_.foundObject(fieldName)) { - addPrime2MeanField + addPrime2MeanField ( i, meanVectorFields_, @@ -187,12 +206,12 @@ Foam::fieldAverage::fieldAverage active_ = false; WarningIn ( - "fieldAverage::fieldAverage" - "(" - "const word&," - "const objectRegistry&," - "const dictionary&," - "const bool" + "fieldAverage::fieldAverage\n" + "(\n" + "const word&,\n" + "const objectRegistry&,\n" + "const dictionary&,\n" + "const bool\n" ")" ) << "No fvMesh available, deactivating." << nl << endl; @@ -251,12 +270,12 @@ void Foam::fieldAverage::calcAverages() totalTime_[i] += obr_.time().deltaT().value(); } - addMeanSqrToPrime2Mean + addMeanSqrToPrime2Mean ( meanScalarFields_, prime2MeanScalarFields_ ); - addMeanSqrToPrime2Mean + addMeanSqrToPrime2Mean ( meanVectorFields_, prime2MeanSymmTensorFields_ @@ -268,12 +287,12 @@ void Foam::fieldAverage::calcAverages() calculateMeanFields(meanSymmTensorFields_); calculateMeanFields(meanTensorFields_); - calculatePrime2MeanFields + calculatePrime2MeanFields ( meanScalarFields_, prime2MeanScalarFields_ ); - calculatePrime2MeanFields + calculatePrime2MeanFields ( meanVectorFields_, prime2MeanSymmTensorFields_ @@ -324,28 +343,31 @@ void Foam::fieldAverage::writeAveragingProperties() const void Foam::fieldAverage::readAveragingProperties() { - IFstream propsFile + IOobject io ( - obr_.time().path()/obr_.time().timeName() - /"uniform"/"fieldAveragingProperties" + "fieldAveragingProperties", + obr_.time().timeName(), + "uniform", + obr_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false ); - if (!propsFile.good()) + if (io.headerOk()) { - return; - } - - dictionary propsDict(dictionary::null, propsFile); + IOdictionary propsDict(io); - forAll(faItems_, i) - { - const word& fieldName = faItems_[i].fieldName(); - if (propsDict.found(fieldName)) + forAll(faItems_, i) { - dictionary fieldDict(propsDict.subDict(fieldName)); + const word& fieldName = faItems_[i].fieldName(); + if (propsDict.found(fieldName)) + { + const dictionary& fieldDict = propsDict.subDict(fieldName); - totalIter_[i] = readLabel(fieldDict.lookup("totalIter")); - totalTime_[i] = readScalar(fieldDict.lookup("totalTime")); + totalIter_[i] = readLabel(fieldDict.lookup("totalIter")); + totalTime_[i] = readScalar(fieldDict.lookup("totalTime")); + } } } } diff --git a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H index 7d7b22a..bcc21c9 100644 --- a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H +++ b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H @@ -71,7 +71,6 @@ Description SourceFiles fieldAverage.C fieldAverageTemplates.C - IOfieldAverage.H \*---------------------------------------------------------------------------*/ @@ -114,7 +113,7 @@ protected: //- On/off switch bool active_; - //- List of field average items, describing waht averages to be + //- List of field average items, describing what averages to be // calculated and output List faItems_; @@ -130,15 +129,15 @@ protected: // Lists of averages // Arithmetic mean fields - PtrList meanScalarFields_; - PtrList meanVectorFields_; - PtrList meanSphericalTensorFields_; - PtrList meanSymmTensorFields_; - PtrList meanTensorFields_; + wordList meanScalarFields_; + wordList meanVectorFields_; + wordList meanSphericalTensorFields_; + wordList meanSymmTensorFields_; + wordList meanTensorFields_; // Prime-squared fields - applicable to volVectorFields only - PtrList prime2MeanScalarFields_; - PtrList prime2MeanSymmTensorFields_; + wordList prime2MeanScalarFields_; + wordList prime2MeanSymmTensorFields_; // Counters @@ -154,6 +153,9 @@ protected: // Initialisation routines + //- Checkout fields (causes deletion) from the database + void checkoutFields(const wordList&) const; + //- Reset size of lists (clear existing values) void resetLists(const label nItems); @@ -163,20 +165,16 @@ protected: //- Add mean average field to PtrList template - void addMeanField - ( - const label, - PtrList >& - ); + void addMeanField(const label, wordList&) const; //- Add prime-squared average field to PtrList template void addPrime2MeanField ( const label, - PtrList >&, - PtrList >& - ); + const wordList&, + wordList& + ) const; // Calculation functions @@ -186,26 +184,23 @@ protected: //- Calculate mean average fields template - void calculateMeanFields - ( - PtrList >& - ); + void calculateMeanFields(const wordList&) const; //- Add mean-squared field value to prime-squared mean field template void addMeanSqrToPrime2Mean ( - PtrList >&, - PtrList >& - ); + const wordList&, + const wordList& + ) const; //- Calculate prime-squared average fields template void calculatePrime2MeanFields ( - PtrList >&, - PtrList >& - ); + const wordList&, + const wordList& + ) const; // I-O @@ -215,11 +210,7 @@ protected: //- Write fields template - void writeFieldList - ( - const PtrList >& - fieldList - ) const; + void writeFieldList(const wordList&) const; //- Write averaging properties - steps and time void writeAveragingProperties() const; diff --git a/src/postProcessing/fieldAverage/fieldAverage/fieldAverageTemplates.C b/src/postProcessing/fieldAverage/fieldAverage/fieldAverageTemplates.C index b7bdadb..8e23f85 100644 --- a/src/postProcessing/fieldAverage/fieldAverage/fieldAverageTemplates.C +++ b/src/postProcessing/fieldAverage/fieldAverage/fieldAverageTemplates.C @@ -34,22 +34,36 @@ template void Foam::fieldAverage::addMeanField ( const label fieldi, - PtrList >& meanFieldList -) + wordList& meanFieldList +) const { if (faItems_[fieldi].mean()) { typedef GeometricField fieldType; const word& fieldName = faItems_[fieldi].fieldName(); - const fieldType& baseField = obr_.lookupObject(fieldName); const word meanFieldName = fieldName + EXT_MEAN; + Info<< "Reading/calculating field " << meanFieldName << nl << endl; - meanFieldList.set - ( - fieldi, - new fieldType + + if (obr_.foundObject(meanFieldName)) + { + meanFieldList[fieldi] = meanFieldName; + } + else if (obr_.found(meanFieldName)) + { + Info<< "Cannot allocate average field " << meanFieldName + << " since an object with that name already exists." + << " Disabling averaging." << nl << endl; + meanFieldList[fieldi] = word::null; + } + else + { + const fieldType& baseField = + obr_.lookupObject(fieldName); + + fieldType* fPtr = new fieldType ( IOobject ( @@ -57,12 +71,16 @@ void Foam::fieldAverage::addMeanField obr_.time().timeName(), obr_, IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE, - false + IOobject::NO_WRITE ), baseField - ) - ); + ); + + // Store on registry + fPtr->store(); + + meanFieldList[fieldi] = meanFieldName; + } } } @@ -71,25 +89,39 @@ template void Foam::fieldAverage::addPrime2MeanField ( const label fieldi, - PtrList >& meanFieldList, - PtrList >& prime2MeanFieldList -) + const wordList& meanFieldList, + wordList& prime2MeanFieldList +) const { - if (faItems_[fieldi].mean() && meanFieldList.set(fieldi)) + if (faItems_[fieldi].mean() && meanFieldList[fieldi] != word::null) { typedef GeometricField fieldType1; typedef GeometricField fieldType2; const word& fieldName = faItems_[fieldi].fieldName(); - const fieldType1& baseField = obr_.lookupObject(fieldName); - const fieldType1& meanField = meanFieldList[fieldi]; const word meanFieldName = fieldName + EXT_PRIME2MEAN; Info<< "Reading/calculating field " << meanFieldName << nl << endl; - prime2MeanFieldList.set - ( - fieldi, - new fieldType2 + + if (obr_.foundObject(meanFieldName)) + { + prime2MeanFieldList[fieldi] = meanFieldName; + } + else if (obr_.found(meanFieldName)) + { + Info<< "Cannot allocate average field " << meanFieldName + << " since an object with that name already exists." + << " Disabling averaging." << nl << endl; + prime2MeanFieldList[fieldi] = word::null; + } + else + { + const fieldType1& baseField = + obr_.lookupObject(fieldName); + const fieldType1& meanField = + obr_.lookupObject(meanFieldList[fieldi]); + + fieldType2* fPtr = new fieldType2 ( IOobject ( @@ -97,21 +129,23 @@ void Foam::fieldAverage::addPrime2MeanField obr_.time().timeName(), obr_, IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE, - false + IOobject::NO_WRITE ), sqr(baseField) - sqr(meanField) - ) - ); + ); + + // Store on registry + fPtr->store(); + + prime2MeanFieldList[fieldi] = meanFieldName; + } } } template -void Foam::fieldAverage::calculateMeanFields -( - PtrList >& meanFieldList -) +void Foam::fieldAverage::calculateMeanFields(const wordList& meanFieldList) +const { typedef GeometricField fieldType; @@ -119,12 +153,15 @@ void Foam::fieldAverage::calculateMeanFields forAll(faItems_, i) { - if (faItems_[i].mean() && meanFieldList.set(i)) + if (faItems_[i].mean() && meanFieldList[i] != word::null) { const word& fieldName = faItems_[i].fieldName(); const fieldType& baseField = obr_.lookupObject(fieldName); - fieldType& meanField = meanFieldList[i]; + fieldType& meanField = const_cast + ( + obr_.lookupObject(meanFieldList[i]) + ); scalar alpha = 0.0; scalar beta = 0.0; @@ -148,9 +185,9 @@ void Foam::fieldAverage::calculateMeanFields template void Foam::fieldAverage::calculatePrime2MeanFields ( - PtrList >& meanFieldList, - PtrList >& prime2MeanFieldList -) + const wordList& meanFieldList, + const wordList& prime2MeanFieldList +) const { typedef GeometricField fieldType1; typedef GeometricField fieldType2; @@ -162,15 +199,19 @@ void Foam::fieldAverage::calculatePrime2MeanFields if ( faItems_[i].prime2Mean() - && meanFieldList.set(i) - && prime2MeanFieldList.set(i) + && meanFieldList[i] != word::null + && prime2MeanFieldList[i] != word::null ) { const word& fieldName = faItems_[i].fieldName(); const fieldType1& baseField = obr_.lookupObject(fieldName); - const fieldType1& meanField = meanFieldList[i]; - fieldType2& prime2MeanField = prime2MeanFieldList[i]; + const fieldType1& meanField = + obr_.lookupObject(meanFieldList[i]); + fieldType2& prime2MeanField = const_cast + ( + obr_.lookupObject(prime2MeanFieldList[i]) + ); scalar alpha = 0.0; scalar beta = 0.0; @@ -197,9 +238,9 @@ void Foam::fieldAverage::calculatePrime2MeanFields template void Foam::fieldAverage::addMeanSqrToPrime2Mean ( - PtrList >& meanFieldList, - PtrList >& prime2MeanFieldList -) + const wordList& meanFieldList, + const wordList& prime2MeanFieldList +) const { typedef GeometricField fieldType1; typedef GeometricField fieldType2; @@ -209,12 +250,16 @@ void Foam::fieldAverage::addMeanSqrToPrime2Mean if ( faItems_[i].prime2Mean() - && meanFieldList.set(i) - && prime2MeanFieldList.set(i) + && meanFieldList[i] != word::null + && prime2MeanFieldList[i] != word::null ) { - const fieldType1& meanField = meanFieldList[i]; - fieldType2& prime2MeanField = prime2MeanFieldList[i]; + const fieldType1& meanField = + obr_.lookupObject(meanFieldList[i]); + fieldType2& prime2MeanField = const_cast + ( + obr_.lookupObject(prime2MeanFieldList[i]) + ); prime2MeanField += sqr(meanField); } @@ -223,16 +268,16 @@ void Foam::fieldAverage::addMeanSqrToPrime2Mean template -void Foam::fieldAverage::writeFieldList -( - const PtrList >& fieldList -) const +void Foam::fieldAverage::writeFieldList(const wordList& fieldList) const { + typedef GeometricField fieldType; + forAll(fieldList, i) { - if (fieldList.set(i)) + if (fieldList[i] != word::null) { - fieldList[i].write(); + const fieldType& f = obr_.lookupObject(fieldList[i]); + f.write(); } } } -- 2.11.4.GIT