From b06bb1f98a6f59fcf21f88d865dc5b7fd5648a91 Mon Sep 17 00:00:00 2001 From: danielque Date: Fri, 14 Aug 2020 14:16:44 +0200 Subject: [PATCH] test memory allocation of registered properties by cfdemCloud perform per-particle property allocation in cfdemCloud instead of model if registered size > 0 if no reallocation is triggered due to a change in particle number, reset data to initial values (if registered size > 0) --- .../cfdemParticle/cfdemCloud/cfdemCloud.C | 51 +++++++++++++++++++ .../cfdemParticle/cfdemCloud/cfdemCloud.H | 4 +- .../cfdemParticle/cfdemCloud/cfdemCloudI.H | 4 +- .../diffusionCoefficients.C | 16 +----- .../diffusionCoefficients.H | 2 - .../massTransferCoeff/massTransferCoeff.C | 14 +---- .../massTransferCoeff/massTransferCoeff.H | 2 - .../reactantPerParticle/reactantPerParticle.C | 11 +--- .../reactantPerParticle/reactantPerParticle.H | 2 - .../chemistryModel/species/species.C | 32 ++---------- .../chemistryModel/species/species.H | 2 - .../heatTransferGranConduction.C | 17 +------ .../heatTransferGranConduction.H | 2 - .../heatTransferGunn/heatTransferGunn.C | 36 ++----------- .../heatTransferGunn/heatTransferGunn.H | 2 - .../heatTransferRanzMarshall.C | 36 ++----------- .../heatTransferRanzMarshall.H | 2 - .../energyModel/reactionHeat/reactionHeat.C | 11 +--- .../energyModel/reactionHeat/reactionHeat.H | 2 - .../KochHillRWDrag/KochHillRWDrag.C | 21 +------- .../KochHillRWDrag/KochHillRWDrag.H | 2 - .../subModels/forceModel/dSauter/dSauter.C | 14 +---- .../subModels/forceModel/dSauter/dSauter.H | 2 - .../granKineticEnergy/granKineticEnergy.C | 10 +--- .../granKineticEnergy/granKineticEnergy.H | 2 - .../particleDeformation/particleDeformation.C | 12 +---- .../particleDeformation/particleDeformation.H | 2 - .../forceModel/pdCorrelation/pdCorrelation.C | 27 ++-------- .../forceModel/pdCorrelation/pdCorrelation.H | 2 - .../potentialRelaxation/potentialRelaxation.C | 11 +--- .../potentialRelaxation/potentialRelaxation.H | 2 - .../virtualMassForce/virtualMassForce.C | 15 +----- .../virtualMassForce/virtualMassForce.H | 2 - .../regionModel/allRegion/allRegion.C | 1 - .../regionModel/regionModel/regionModel.C | 15 +----- .../regionModel/regionModel/regionModel.H | 2 - .../ZehnerSchluenderThermCond.C | 11 +--- .../ZehnerSchluenderThermCond.H | 2 - .../GaussVoidFraction/GaussVoidFraction.C | 2 - .../IBVoidFraction/IBVoidFraction.C | 2 - .../bigParticleVoidFraction.C | 2 - .../centreVoidFraction/centreVoidFraction.C | 2 - .../dividedVoidFraction/dividedVoidFraction.C | 7 +-- .../dividedVoidFraction/dividedVoidFraction.H | 2 - .../trilinearVoidFraction.C | 2 - .../voidFractionModel/voidFractionModel.C | 22 +------- .../voidFractionModel/voidFractionModel.H | 4 -- 47 files changed, 99 insertions(+), 349 deletions(-) diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C index 27b07c6e..aefec255 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.C @@ -797,9 +797,60 @@ bool cfdemCloud::reAllocArrays() if(getParticleDensities_) dataExchangeM().allocateArray(particleDensities_,0.,1); if(getParticleEffVolFactors_) dataExchangeM().allocateArray(particleEffVolFactors_,0.,1); if(getParticleTypes_) dataExchangeM().allocateArray(particleTypes_,0,1); + + for + ( + HashTable::iterator iter = particlePropertyTable.begin(); + iter != particlePropertyTable.end(); + ++iter + ) + { + if (iter().size > 0) { + ///Info << "!! about to realloc property of type " << iter().ti->name() << endl; + if ((*(iter().ti)) == typeid(int**)) { + dataExchangeM().allocateArray(iter().ref(),iter().initVal,iter().size); + } else if ((*(iter().ti)) == typeid(double**)) { + dataExchangeM().allocateArray(iter().ref(),iter().initVal,iter().size); + } else { + FatalError << "Trying to realloc property of type " << iter().ti->name() << endl; + } + } + } + arraysReallocated_ = true; return true; } + else + { + for + ( + HashTable::iterator iter = particlePropertyTable.begin(); + iter != particlePropertyTable.end(); + ++iter + ) + { + if (iter().size > 0) { + if ((*(iter().ti)) == typeid(int**)) { + int**& property = iter().ref(); + for (int index=0; index(); + for (int index=0; indexname() << endl; + } + } + } + } + return false; } diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H index 49762ced..7851e033 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloud.H @@ -192,6 +192,8 @@ protected: struct particleProperty { void** property; const std::type_info* ti; + int size; + double initVal; template T& ref() { if (*ti == typeid(T)) return *reinterpret_cast(&property); @@ -458,7 +460,7 @@ public: bool checkPeriodicCells() const { return checkPeriodicCells_; } template - void registerParticleProperty(const word& property); + void registerParticleProperty(const word& property, int size=0, double initVal=0.0); template T& getParticlePropertyRef(const word& property); protected: diff --git a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H index 88a00208..6d7d973a 100644 --- a/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H +++ b/src/lagrangian/cfdemParticle/cfdemCloud/cfdemCloudI.H @@ -405,9 +405,9 @@ inline const turbulenceModel& cfdemCloud::turbulence() const template -void cfdemCloud::registerParticleProperty(const word& property) +void cfdemCloud::registerParticleProperty(const word& property, int size, double initVal) { - particlePropertyTable.insert(property,{NULL,&typeid(T)}); + particlePropertyTable.insert(property,{NULL,&typeid(T),size,initVal}); } template diff --git a/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.C b/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.C index f5a8a329..c824f43c 100644 --- a/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.C +++ b/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.C @@ -77,10 +77,10 @@ diffusionCoefficient::diffusionCoefficient initialized_(false) { particleCloud_.checkCG(false); - particleCloud_.registerParticleProperty("partPressure"); + particleCloud_.registerParticleProperty("partPressure",1); for (int i=0; i(diffusantGasNames_[i]); + particleCloud_.registerParticleProperty(diffusantGasNames_[i],1); } createCoeffs(); molWeightTable(); @@ -94,15 +94,6 @@ diffusionCoefficient::~diffusionCoefficient() // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // -void diffusionCoefficient::reAllocMyArrays() const -{ - double initVal=0.0; - particleCloud_.dataExchangeM().allocateArray(particleCloud_.getParticlePropertyRef("partPressure"),initVal,1); - for (int i=0; i(diffusantGasNames_[i]),initVal,1); - } -} void diffusionCoefficient::init() { @@ -140,9 +131,6 @@ void diffusionCoefficient::execute() init(); } - // realloc the arrays - reAllocMyArrays(); - label cellI=0; scalar Tfluid(0); scalar Pfluid(0); diff --git a/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.H b/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.H index add7be45..72ad8a68 100644 --- a/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.H +++ b/src/lagrangian/cfdemParticle/subModels/chemistryModel/diffusionCoefficients/diffusionCoefficients.H @@ -120,8 +120,6 @@ private: // Member Functions void execute(); - - void reAllocMyArrays() const; }; diff --git a/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.C b/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.C index 053aeb4c..4a82ba82 100644 --- a/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.C +++ b/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.C @@ -67,8 +67,8 @@ massTransferCoeff::massTransferCoeff scaleDia_(1) { particleCloud_.checkCG(true); - particleCloud_.registerParticleProperty(partNuName_); - particleCloud_.registerParticleProperty(partReynolds_); + particleCloud_.registerParticleProperty(partNuName_,1); + particleCloud_.registerParticleProperty(partReynolds_,1); } // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // @@ -79,20 +79,10 @@ massTransferCoeff::~massTransferCoeff() // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // -void massTransferCoeff::reAllocMyArrays() const -{ - double initVal=0.0; - particleCloud_.dataExchangeM().allocateArray(particleCloud_.getParticlePropertyRef(partNuName_),initVal,1); - particleCloud_.dataExchangeM().allocateArray(particleCloud_.getParticlePropertyRef(partReynolds_),initVal,1); -} - // * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // void massTransferCoeff::execute() { - // realloc the arrays - reAllocMyArrays(); - #ifdef compre const volScalarField nufField = particleCloud_.turbulence().mu()/rho_; #else diff --git a/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.H b/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.H index 8fc14ce1..3f3e37da 100644 --- a/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.H +++ b/src/lagrangian/cfdemParticle/subModels/chemistryModel/massTransferCoeff/massTransferCoeff.H @@ -95,8 +95,6 @@ public: // Member Functions void execute(); - void reAllocMyArrays() const; - }; diff --git a/src/lagrangian/cfdemParticle/subModels/chemistryModel/reactantPerParticle/reactantPerParticle.C b/src/lagrangian/cfdemParticle/subModels/chemistryModel/reactantPerParticle/reactantPerParticle.C index eabe40a7..81372103 100644 --- a/src/lagrangian/cfdemParticle/subModels/chemistryModel/reactantPerParticle/reactantPerParticle.C +++ b/src/lagrangian/cfdemParticle/subModels/chemistryModel/reactantPerParticle/reactantPerParticle.C @@ -75,7 +75,7 @@ reactantPerParticle::reactantPerParticle Nevery_(propsDict_.lookupOrDefault