diff --git a/src/recurrence/Make/files b/src/recurrence/Make/files index e832cfb5..31c09b23 100644 --- a/src/recurrence/Make/files +++ b/src/recurrence/Make/files @@ -2,7 +2,6 @@ recBase/recBase.C recModel/recModel/recModel.C recModel/recModel/newRecModel.C recModel/standardRecModel/standardRecModel.C -recModel/gerhardsRecModel/gerhardsRecModel.C recNorm/recNorm/recNorm.C recNorm/recNorm/newRecNorm.C recNorm/diffNorm/diffNorm.C @@ -23,5 +22,6 @@ recStatAnalysis/recStatAnalysis/recStatAnalysis.C recStatAnalysis/recStatAnalysis/newRecStatAnalysis.C recStatAnalysis/noRecStatAnalysis/noRecStatAnalysis.C recStatAnalysis/standardRecStatAnalysis/standardRecStatAnalysis.C +recStatAnalysis/autocorrelation/autocorrelation.C LIB = $(CFDEM_LIB_DIR)/librecurrence diff --git a/src/recurrence/recModel/recModel/recModel.H b/src/recurrence/recModel/recModel/recModel.H index df2800b6..95f63797 100644 --- a/src/recurrence/recModel/recModel/recModel.H +++ b/src/recurrence/recModel/recModel/recModel.H @@ -135,11 +135,7 @@ public: /*virtual void exportVolScalarField(word, volScalarField&) const = 0; virtual void exportVolVectorField(word, volVectorField&) const = 0; - virtual void exportSurfaceScalarField(word, surfaceScalarField&) const = 0; - - virtual const volScalarField& exportVolScalarField(word, label) const = 0; - virtual const volVectorField& exportVolVectorField(word, label) const = 0; - virtual const surfaceScalarField& exportSurfaceScalarField(word, label) const = 0;*/ + virtual void exportSurfaceScalarField(word, surfaceScalarField&) const = 0;*/ virtual void exportVolScalarFieldAve(word, volScalarField&, label = 0) {} @@ -148,6 +144,14 @@ public: virtual void exportSurfaceScalarFieldAve(word, surfaceScalarField&, label = 0) {} + virtual tmp exportVolScalarFieldAve(word, label = 0) + { + return volScalarField::null(); + } + virtual tmp exportVolVectorFieldAve(word, label = 0) + { + return volVectorField::null(); + } virtual tmp exportSurfaceScalarFieldAve(word, label = 0) { return surfaceScalarField::null(); @@ -161,6 +165,10 @@ public: virtual const volVectorField& exportVolVectorField(word, label) = 0; virtual const surfaceScalarField& exportSurfaceScalarField(word, label) = 0; + virtual PtrList& exportVolScalarFieldList(word) = 0; + virtual PtrList& exportVolVectorFieldList(word) = 0; + virtual PtrList& exportSurfaceScalarFieldList(word) = 0; + // virtual tmp exportAveragedSurfaceScalarField(word, scalar, label index = -1) = 0; virtual void exportAveragedVolVectorField(volVectorField&, word, scalar, label index = -1) const = 0; diff --git a/src/recurrence/recModel/standardRecModel/standardRecModel.C b/src/recurrence/recModel/standardRecModel/standardRecModel.C index e87f99d4..e6e9fdc7 100644 --- a/src/recurrence/recModel/standardRecModel/standardRecModel.C +++ b/src/recurrence/recModel/standardRecModel/standardRecModel.C @@ -550,6 +550,34 @@ void standardRecModel::exportSurfaceScalarFieldAve(word fieldname, surfaceScalar field = aveSurfaceScalarFieldList_[fieldI][db]; } +tmp standardRecModel::exportVolScalarFieldAve(word fieldname, label db) +{ + if(!storeAveragedFields_) + { + FatalError <<"no averaged fields available, need to activate \"storeAveragedFields\"\n" << abort(FatalError); + } + if (db >= numDataBases_) + { + FatalError <<"can't find database with number " << db << abort(FatalError); + } + const label fieldI = getVolScalarFieldIndex(fieldname, 0); + return aveVolScalarFieldList_[fieldI][db]; +} + +tmp standardRecModel::exportVolVectorFieldAve(word fieldname, label db) +{ + if(!storeAveragedFields_) + { + FatalError <<"no averaged fields available, need to activate \"storeAveragedFields\"\n" << abort(FatalError); + } + if (db >= numDataBases_) + { + FatalError <<"can't find database with number " << db << abort(FatalError); + } + const label fieldI = getVolVectorFieldIndex(fieldname, 0); + return aveVolVectorFieldList_[fieldI][db]; +} + tmp standardRecModel::exportSurfaceScalarFieldAve(word fieldname, label db) { if(!storeAveragedFields_) @@ -603,6 +631,27 @@ const surfaceScalarField& standardRecModel::exportSurfaceScalarField(word fieldn return surfaceScalarFieldList_[fieldI][index]; } +PtrList& standardRecModel::exportVolScalarFieldList(word fieldname) +{ + const label fieldI = getVolScalarFieldIndex(fieldname); + + return volScalarFieldList_[fieldI]; +} + +PtrList& standardRecModel::exportVolVectorFieldList(word fieldname) +{ + const label fieldI = getVolVectorFieldIndex(fieldname); + + return volVectorFieldList_[fieldI]; +} + +PtrList& standardRecModel::exportSurfaceScalarFieldList(word fieldname) +{ + const label fieldI = getSurfaceScalarFieldIndex(fieldname); + + return surfaceScalarFieldList_[fieldI]; +} + SymmetricSquareMatrix& standardRecModel::recurrenceMatrix() { diff --git a/src/recurrence/recModel/standardRecModel/standardRecModel.H b/src/recurrence/recModel/standardRecModel/standardRecModel.H index e7959bef..19adc5a7 100644 --- a/src/recurrence/recModel/standardRecModel/standardRecModel.H +++ b/src/recurrence/recModel/standardRecModel/standardRecModel.H @@ -84,9 +84,9 @@ protected: scalar checkTimeStep(); - inline label getVolScalarFieldIndex(word, label) const; - inline label getVolVectorFieldIndex(word, label) const; - inline label getSurfaceScalarFieldIndex(word, label) const; + inline label getVolScalarFieldIndex(word, label = 0) const; + inline label getVolVectorFieldIndex(word, label = 0) const; + inline label getSurfaceScalarFieldIndex(word, label = 0) const; void init(); @@ -119,6 +119,8 @@ public: void exportVolVectorFieldAve(word, volVectorField&, label); void exportSurfaceScalarFieldAve(word, surfaceScalarField&, label); + tmp exportVolScalarFieldAve(word, label = 0); + tmp exportVolVectorFieldAve(word, label = 0); tmp exportSurfaceScalarFieldAve(word, label = 0); void exportVolScalarField(word, volScalarField&); @@ -128,6 +130,10 @@ public: const volScalarField& exportVolScalarField(word, label); const volVectorField& exportVolVectorField(word, label); const surfaceScalarField& exportSurfaceScalarField(word, label); + + PtrList& exportVolScalarFieldList(word); + PtrList& exportVolVectorFieldList(word); + PtrList& exportSurfaceScalarFieldList(word); // tmp exportAveragedSurfaceScalarField(word, scalar, label index = -1); void exportAveragedVolVectorField(volVectorField&, word, scalar, label index = -1) const; diff --git a/src/recurrence/recStatAnalysis/autocorrelation/autocorrelation.C b/src/recurrence/recStatAnalysis/autocorrelation/autocorrelation.C new file mode 100644 index 00000000..0da4e408 --- /dev/null +++ b/src/recurrence/recStatAnalysis/autocorrelation/autocorrelation.C @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------*\ + CFDEMcoupling academic - Open Source CFD-DEM coupling + + Contributing authors: + Thomas Lichtenegger, Gerhard Holzinger + Copyright (C) 2015- Johannes Kepler University, Linz +------------------------------------------------------------------------------- +License + This file is part of CFDEMcoupling academic. + + CFDEMcoupling academic 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. + + CFDEMcoupling academic 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 CFDEMcoupling academic. If not, see . +\*---------------------------------------------------------------------------*/ + +#include "error.H" +#include "Random.H" +#include "autocorrelation.H" +#include "recModel.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(autocorrelation, 0); + +addToRunTimeSelectionTable +( + recStatAnalysis, + autocorrelation, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +autocorrelation::autocorrelation +( + const dictionary& dict, + recBase& base +) +: + recStatAnalysis(dict,base), + propsDict_(dict.subDict(typeName + "Props")), + fieldname_(propsDict_.lookup("fieldname")), + fieldtype_(propsDict_.lookup("fieldtype")), + delaySteps_(propsDict_.lookupOrDefault