diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.C b/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.C deleted file mode 100644 index 4835da80..00000000 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.C +++ /dev/null @@ -1,244 +0,0 @@ -/*---------------------------------------------------------------------------*\ -License - - This 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. - - This code 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 this code. If not, see . - - Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria - -\*---------------------------------------------------------------------------*/ - -#include "error.H" -#include "heatTransferGunnPartField.H" -#include "addToRunTimeSelectionTable.H" -#include "thermCondModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(heatTransferGunnPartField, 0); - -addToRunTimeSelectionTable(energyModel, heatTransferGunnPartField, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from components -heatTransferGunnPartField::heatTransferGunnPartField -( - const dictionary& dict, - cfdemCloudEnergy& sm -) -: - heatTransferGunn(dict,sm), - partCpField_ - ( - IOobject - ( - "partCp", - sm.mesh().time().timeName(), - sm.mesh(), - IOobject::READ_IF_PRESENT, - IOobject::NO_WRITE - ), - sm.mesh(), - dimensionedScalar("zero", dimensionSet(0,2,-2,-1,0,0,0), 0.0), - "zeroGradient" - ), - partRhoField_(sm.mesh().lookupObject("partRho")), - typeCp_(propsDict_.lookupOrDefault("specificHeatCapacities",scalarList(1,-1.0))), - partCp_(NULL), - pTMax_(dimensionedScalar("pTMax",dimensionSet(0,0,0,1,0,0,0), -1.0)), - pTMin_(dimensionedScalar("pTMin",dimensionSet(0,0,0,1,0,0,0), -1.0)), - thermCondModel_ - ( - thermCondModel::New - ( - propsDict_, - sm - ) - ), - fvOptions(fv::options::New(sm.mesh())) -{ - if (!implicit_) - { - FatalError << "heatTransferGunnPartField requires implicit heat transfer treatment." << abort(FatalError); - } - - if (typeCp_[0] < 0.0) - { - FatalError << "heatTransferGunnPartField: provide list of specific heat capacities." << abort(FatalError); - } - - if (propsDict_.found("pTMax")) - { - pTMax_.value()=scalar(readScalar(propsDict_.lookup("pTMax"))); - } - - if (propsDict_.found("pTMin")) - { - pTMin_.value()=scalar(readScalar(propsDict_.lookup("pTMin"))); - } - - partTempField_.writeOpt() = IOobject::AUTO_WRITE; - - allocateMyArrays(); -} - - -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -heatTransferGunnPartField::~heatTransferGunnPartField() -{ - particleCloud_.dataExchangeM().destroy(partCp_,1); -} - -// * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // - -void heatTransferGunnPartField::allocateMyArrays() const -{ - double initVal=0.0; - particleCloud_.dataExchangeM().allocateArray(partCp_,initVal,1); -} -// * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // -void heatTransferGunnPartField::calcEnergyContribution() -{ - allocateMyArrays(); - heatTransferGunn::calcEnergyContribution(); - - // if heat sources in particles present, pull them here - - // loop over all particles to fill partCp_ based on type - label cellI=0; - label partType = 0; - for(int index = 0;index < particleCloud_.numberOfParticles(); ++index) - { - cellI = particleCloud_.cellIDs()[index][0]; - if(cellI >= 0) - { - partType = particleCloud_.particleType(index); - // LIGGGGHTS counts types 1, 2, ..., C++ array starts at 0 - partCp_[index][0] = typeCp_[partType - 1]; - } - } - - partCpField_.primitiveFieldRef() = 0.0; - particleCloud_.averagingM().resetWeightFields(); - particleCloud_.averagingM().setScalarAverage - ( - partCpField_, - partCp_, - particleCloud_.particleWeights(), - particleCloud_.averagingM().UsWeightField(), - NULL - ); - -} - -void heatTransferGunnPartField::addEnergyContribution(volScalarField& Qsource) const -{ - Qsource -= QPartFluidCoeff_*partTempField_; -} - -void heatTransferGunnPartField::giveData() -{ - particleCloud_.dataExchangeM().giveData(partTempName_,"scalar-atom", partTemp_); -} - -void heatTransferGunnPartField::postFlow() -{ - label cellI; - scalar Tpart(0.0); - interpolationCellPoint partTInterpolator_(partTempField_); - - particleCloud_.dataExchangeM().allocateArray(partTemp_,0.0,1); - - for(int index = 0;index < particleCloud_.numberOfParticles(); ++index) - { - cellI = particleCloud_.cellIDs()[index][0]; - if(cellI >= 0) - { - if(interpolation_) - { - vector position = particleCloud_.position(index); - Tpart = partTInterpolator_.interpolate(position,cellI); - } - else - { - Tpart = partTempField_[cellI]; - } - partTemp_[index][0] = Tpart; - } - } - - giveData(); -} - -void heatTransferGunnPartField::solve() -{ - // for some weird reason, the particle-fluid heat transfer fields were defined with a negative sign - - volScalarField alphaP = 1.0 - voidfraction_; - volScalarField correctedQPartFluidCoeff(QPartFluidCoeff_); - // no heattransfer in empty cells -- for numerical stability, add small amount - forAll(correctedQPartFluidCoeff,cellI) - { - if (-correctedQPartFluidCoeff[cellI] < SMALL) correctedQPartFluidCoeff[cellI] = -SMALL; - } - - volScalarField Qsource = correctedQPartFluidCoeff*tempField_; - volScalarField partCpEff = alphaP*partRhoField_*partCpField_; - volScalarField thCondEff = alphaP*thermCondModel_().thermCond(); -// thCondEff.correctBoundaryConditions(); - - - - fvScalarMatrix partTEqn - ( - // fvm::ddt(partCpEff, partTempField_) - // + Qsource - Qsource - - fvm::Sp(correctedQPartFluidCoeff, partTempField_) - - fvm::laplacian(thCondEff,partTempField_) - == - fvOptions(partCpEff, partTempField_) - ); - // if transient add time derivative - need particle density and specific heat fields - // if sources activated add sources - // if convection activated add convection - - partTEqn.relax(); - - fvOptions.constrain(partTEqn); - - partTEqn.solve(); - - partTempField_.relax(); - - fvOptions.correct(partTempField_); - - if (pTMax_.value() > 0.0) partTempField_ = min(partTempField_, pTMax_); - if (pTMin_.value() > 0.0) partTempField_ = max(partTempField_, pTMin_); - - - Info<< "partT max/min : " << max(partTempField_).value() << " " << min(partTempField_).value() << endl; - -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.H b/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.H deleted file mode 100644 index 5fd441f0..00000000 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/heatTransferGunnPartField/heatTransferGunnPartField.H +++ /dev/null @@ -1,109 +0,0 @@ -/*---------------------------------------------------------------------------*\ -License - - This 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. - - This code 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 this code. If not, see . - - Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria - - Description - Correlation for Nusselt number according to - Gunn, D. J. International Journal of Heat and Mass Transfer 21.4 (1978) - -\*---------------------------------------------------------------------------*/ - -#ifndef heatTransferGunnPartField_H -#define heatTransferGunnPartField_H - -#include "fvCFD.H" -#include "cfdemCloudEnergy.H" -#include "heatTransferGunn.H" -#include "fvOptions.H" -#include "scalarList.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -class thermCondModel; -/*---------------------------------------------------------------------------*\ - Class heatTransferGunnPartField Declaration -\*---------------------------------------------------------------------------*/ - -class heatTransferGunnPartField -: - public heatTransferGunn -{ -private: - - volScalarField partCpField_; - - const volScalarField& partRhoField_; - - scalarList typeCp_; - - mutable double **partCp_; - - dimensionedScalar pTMax_; - - dimensionedScalar pTMin_; - - autoPtr thermCondModel_; - - fv::options& fvOptions; - - void allocateMyArrays() const; - - void giveData(); - -public: - - //- Runtime type information - TypeName("heatTransferGunnPartField"); - - // Constructors - - //- Construct from components - heatTransferGunnPartField - ( - const dictionary& dict, - cfdemCloudEnergy& sm - ); - - - // Destructor - - virtual ~heatTransferGunnPartField(); - - - // Member Functions - void addEnergyContribution(volScalarField&) const; - - void calcEnergyContribution(); - - void postFlow(); - - void solve(); - -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* //