diff --git a/src/lagrangian/cfdemParticle/Make/files b/src/lagrangian/cfdemParticle/Make/files index c3ec28be..bfcc0fba 100644 --- a/src/lagrangian/cfdemParticle/Make/files +++ b/src/lagrangian/cfdemParticle/Make/files @@ -33,8 +33,8 @@ $(energyModels)/energyModel/energyModel.C $(energyModels)/energyModel/newEnergyModel.C $(energyModels)/heatTransferGunn/heatTransferGunn.C $(energyModels)/heatTransferGunnImplicit/heatTransferGunnImplicit.C -$(energyModels)/YagiWallHT/YagiWallHT.C -$(energyModels)/YagiWallHTImplicit/YagiWallHTImplicit.C +$(energyModels)/wallHeatTransferYagi/wallHeatTransferYagi.C +$(energyModels)/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.C $(energyModels)/reactionHeat/reactionHeat.C $(thermCondModels)/thermCondModel/thermCondModel.C diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.C b/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.C index 349ed598..264ab29d 100644 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.C +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.C @@ -19,7 +19,7 @@ Copyright (C) 2015- Thomas Lichtenegger, JKU Linz, Austria \*---------------------------------------------------------------------------*/ #include "error.H" -#include "YagiWallHT.H" +#include "wallHeatTransferYagi.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -28,14 +28,14 @@ namespace Foam // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - defineTypeNameAndDebug(YagiWallHT, 0); + defineTypeNameAndDebug(wallHeatTransferYagi, 0); - addToRunTimeSelectionTable(energyModel, YagiWallHT, dictionary); + addToRunTimeSelectionTable(energyModel, wallHeatTransferYagi, dictionary); // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - YagiWallHT::YagiWallHT + wallHeatTransferYagi::wallHeatTransferYagi ( const dictionary& dict, cfdemCloudEnergy& sm @@ -141,13 +141,13 @@ namespace Foam // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - YagiWallHT::~YagiWallHT() + wallHeatTransferYagi::~wallHeatTransferYagi() { particleCloud_.dataExchangeM().destroy(partRe_,1); } // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // - void YagiWallHT::allocateMyArrays() const + void wallHeatTransferYagi::allocateMyArrays() const { // get memory for 2d arrays double initVal=0.0; @@ -160,7 +160,7 @@ namespace Foam // * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // - void YagiWallHT::calcEnergyContribution() + void wallHeatTransferYagi::calcEnergyContribution() { allocateMyArrays(); @@ -244,12 +244,12 @@ namespace Foam // calculate Urel scalar magG = mag(U_[faceCelli]-Us_[faceCelli])*voidfraction_[faceCelli]*rho_[faceCelli]; - // calculate H - scalar H; + // calculate h + scalar h; if (voidfraction_[faceCelli]<=voidfractionMax_) - H = 0.2087 * (pow(ReField_[faceCelli]+SMALL,-0.20)) * CpField_[faceCelli] * magG / (pow(PrField_[faceCelli],2/3) + SMALL); + h = 0.2087 * (pow(ReField_[faceCelli]+SMALL,-0.20)) * CpField_[faceCelli] * magG / (pow(PrField_[faceCelli],2/3) + SMALL); else - H = 0; + h = 0; // get delta T (wall-fluid) scalar Twall = wallTemp_.boundaryField()[patchi][facei]; @@ -260,31 +260,29 @@ namespace Foam scalar area = curPatch.magSf()[facei]; // calculate heat flux - heatFlux(faceCelli, H, area, Twall, Tfluid); - heatFluxCoeff(faceCelli, H, area); + heatFlux(faceCelli, h, area, Twall, Tfluid); + heatFluxCoeff(faceCelli, h, area); if(verbose_ && facei >=0 && facei <2) { Info << "####################" << endl; - Info << "cellID: " << faceCelli << endl; - Info << "G : " << magG << endl; - Info << "Re: " << ReField_[faceCelli] << endl; - Info << "Pr: " << PrField_[faceCelli] << endl; - Info << "Cp: " << CpField_[faceCelli] << endl; - Info << "kf: " << kfField_[faceCelli] << endl; - Info << "H : " << H << endl; - Info << "Twall: " << Twall << endl; - Info << "Tfluid: " << Tfluid << endl; - Info << "dT: " << deltaT << endl; - Info << "q: " << H*deltaT << endl; - Info << "area: " << area << endl; - Info << "Q:" << H*deltaT*area << endl; + Info << "cellID [-] : " << faceCelli << endl; + Info << "G [kg/(m2s)] : " << magG << endl; + Info << "Re [-] : " << ReField_[faceCelli] << endl; + Info << "Pr [-] : " << PrField_[faceCelli] << endl; + Info << "Cp [J/(kgK)] : " << CpField_[faceCelli] << endl; + Info << "kf [J/(msK)] : " << kfField_[faceCelli] << endl; + Info << "h [J/(m2Ks)] : " << h << endl; + Info << "Twall [K] : " << Twall << endl; + Info << "Tfluid [K] : " << Tfluid << endl; + Info << "area [m2] : " << area << endl; + Info << "Q [J/s] : " << H*deltaT*area << endl; } } } else { - FatalError << "YagiWallHT requires zeroGradient BC for temperature field" << endl; + FatalError << "wallHeatTransferYagi requires zeroGradient BC for temperature field" << endl; } } } @@ -307,17 +305,17 @@ namespace Foam } - void YagiWallHT::addEnergyContribution(volScalarField& Qsource) const + void wallHeatTransferYagi::addEnergyContribution(volScalarField& Qsource) const { Qsource += QWallFluid_; } - void YagiWallHT::heatFlux(label faceCelli, scalar H, scalar area, scalar Twall, scalar Tfluid) + void wallHeatTransferYagi::heatFlux(label faceCelli, scalar h, scalar area, scalar Twall, scalar Tfluid) { - QWallFluid_[faceCelli] += H * area * (Twall - Tfluid); + QWallFluid_[faceCelli] += h * area * (Twall - Tfluid); } - void YagiWallHT::heatFluxCoeff(label faceCelli, scalar H, scalar area) + void wallHeatTransferYagi::heatFluxCoeff(label faceCelli, scalar h, scalar area) { //no heat transfer coefficient in explicit model } diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.C b/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.C index 918c0266..e92630e2 100644 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.C +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.C @@ -19,7 +19,7 @@ License \*---------------------------------------------------------------------------*/ #include "error.H" -#include "YagiWallHTImplicit.H" +#include "wallHeatTransferYagiImplicit.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -28,20 +28,20 @@ namespace Foam // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(YagiWallHTImplicit, 0); +defineTypeNameAndDebug(wallHeatTransferYagiImplicit, 0); -addToRunTimeSelectionTable(energyModel, YagiWallHTImplicit, dictionary); +addToRunTimeSelectionTable(energyModel, wallHeatTransferYagiImplicit, dictionary); // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // Construct from components -YagiWallHTImplicit::YagiWallHTImplicit +wallHeatTransferYagiImplicit::wallHeatTransferYagiImplicit ( const dictionary& dict, cfdemCloudEnergy& sm ) : - YagiWallHT(dict,sm), + wallHeatTransferYagi(dict,sm), QWallFluidCoeffName_(propsDict_.lookupOrDefault("QWallFluidCoeffName","QWallFluidCoeff")), QWallFluidCoeff_ ( IOobject @@ -66,27 +66,27 @@ YagiWallHTImplicit::YagiWallHTImplicit // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -YagiWallHTImplicit::~YagiWallHTImplicit() +wallHeatTransferYagiImplicit::~wallHeatTransferYagiImplicit() { particleCloud_.dataExchangeM().destroy(partHeatFluxCoeff_,1); } // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // -void YagiWallHTImplicit::allocateMyArrays() const +void wallHeatTransferYagiImplicit::allocateMyArrays() const { -// YagiWallHT::allocateMyArrays(); +// wallHeatTransferYagi::allocateMyArrays(); double initVal=0.0; particleCloud_.dataExchangeM().allocateArray(partHeatFluxCoeff_,initVal,1); } // * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // -void YagiWallHTImplicit::calcEnergyContribution() +void wallHeatTransferYagiImplicit::calcEnergyContribution() { allocateMyArrays(); QWallFluidCoeff_.primitiveFieldRef() = 0.0; - YagiWallHT::calcEnergyContribution(); + wallHeatTransferYagi::calcEnergyContribution(); QWallFluidCoeff_.primitiveFieldRef() /= QWallFluidCoeff_.mesh().V(); @@ -94,19 +94,19 @@ void YagiWallHTImplicit::calcEnergyContribution() } -void YagiWallHTImplicit::addEnergyCoefficient(volScalarField& Qsource) const +void wallHeatTransferYagiImplicit::addEnergyCoefficient(volScalarField& Qsource) const { Qsource += QWallFluidCoeff_; } -void YagiWallHTImplicit::heatFlux(label faceCelli, scalar H, scalar area, scalar Twall, scalar Tfluid) +void wallHeatTransferYagiImplicit::heatFlux(label faceCelli, scalar h, scalar area, scalar Twall, scalar Tfluid) { - QWallFluid_[faceCelli] += H * area * Twall; + QWallFluid_[faceCelli] += h * area * Twall; } -void YagiWallHTImplicit::heatFluxCoeff(label faceCelli, scalar H, scalar area) +void wallHeatTransferYagiImplicit::heatFluxCoeff(label faceCelli, scalar h, scalar area) { - QWallFluidCoeff_[faceCelli] -= H * area; + QWallFluidCoeff_[faceCelli] -= h * area; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.C b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.C new file mode 100644 index 00000000..b7c93ee4 --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.C @@ -0,0 +1,329 @@ +/*---------------------------------------------------------------------------*\ +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 "wallHeatTransferYagi.H" +#include "addToRunTimeSelectionTable.H" +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + + // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + + defineTypeNameAndDebug(wallHeatTransferYagi, 0); + + addToRunTimeSelectionTable(energyModel, wallHeatTransferYagi, dictionary); + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + + + wallHeatTransferYagi::wallHeatTransferYagi + ( + const dictionary& dict, + cfdemCloudEnergy& sm + ) + : + energyModel(dict,sm), + propsDict_(dict.subDict(typeName + "Props")), + interpolation_(propsDict_.lookupOrDefault("interpolation",false)), + verbose_(propsDict_.lookupOrDefault("verbose",false)), + QWallFluidName_(propsDict_.lookupOrDefault("QWallFluidName","QWallFluid")), + QWallFluid_ + ( IOobject + ( + QWallFluidName_, + sm.mesh().time().timeName(), + sm.mesh(), + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + sm.mesh(), + dimensionedScalar("zero", dimensionSet(1,-1,-3,0,0,0,0), 0.0) + ), + wallTempName_(propsDict_.lookup("wallTempName")), + wallTemp_ + ( IOobject + ( + wallTempName_, + sm.mesh().time().timeName(), + sm.mesh(), + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + sm.mesh(), + dimensionedScalar("zero", dimensionSet(0,0,0,1,0,0,0), 0.0) + ), + ReField_ + ( IOobject + ( + "ReField", + sm.mesh().time().timeName(), + sm.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + sm.mesh(), + dimensionedScalar("zero", dimensionSet(0,0,0,0,0,0,0), 0.0) + ), + PrField_ + ( IOobject + ( + "PrField", + sm.mesh().time().timeName(), + sm.mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + sm.mesh(), + dimensionedScalar("zero", dimensionSet(0,0,0,0,0,0,0), 0.0) + ), + tempFieldName_(propsDict_.lookupOrDefault("tempFieldName","T")), + tempField_(sm.mesh().lookupObject (tempFieldName_)), + voidfractionFieldName_(propsDict_.lookupOrDefault("voidfractionFieldName","voidfraction")), + voidfraction_(sm.mesh().lookupObject (voidfractionFieldName_)), + voidfractionMax_(readScalar(propsDict_.lookup("voidfractionMax"))), + maxSource_(1e30), + velFieldName_(propsDict_.lookupOrDefault("velFieldName","U")), + U_(sm.mesh().lookupObject (velFieldName_)), + UsFieldName_(propsDict_.lookup("granVelFieldName")), + Us_(sm.mesh().lookupObject (UsFieldName_)), + densityFieldName_(propsDict_.lookupOrDefault("densityFieldName","rho")), + rho_(sm.mesh().lookupObject (densityFieldName_)), + partRe_(NULL), + multiphase_(propsDict_.lookupOrDefault("multiphase",false)), + kfFieldName_(propsDict_.lookupOrDefault("kfFieldName",voidfractionFieldName_)), // use voidfractionField as dummy to prevent lookup error when not using multiphase + kfField_(sm.mesh().lookupObject (kfFieldName_)), + CpFieldName_(propsDict_.lookupOrDefault("CpFieldName",voidfractionFieldName_)), // use voidfractionField as dummy to prevent lookup error when not using multiphase + CpField_(sm.mesh().lookupObject (CpFieldName_)) + { + allocateMyArrays(); + + if (propsDict_.found("maxSource")) + { + maxSource_=readScalar(propsDict_.lookup ("maxSource")); + Info << "limiting wall source field to: " << maxSource_ << endl; + } + + if (verbose_) + { + ReField_.writeOpt() = IOobject::AUTO_WRITE; + PrField_.writeOpt() = IOobject::AUTO_WRITE; + ReField_.write(); + PrField_.write(); + } + + // currently it is detected if field was auto generated or defined + // improvement would be changing the type here automatically + forAll(wallTemp_.boundaryField(),patchI) + if(wallTemp_.boundaryField()[patchI].type()=="calculated") + FatalError <<"Scalar field:"<< wallTemp_.name() << " must be defined.\n" << abort(FatalError); + + wallTemp_.writeOpt() = IOobject::AUTO_WRITE; + } + + // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + + wallHeatTransferYagi::~wallHeatTransferYagi() + { + particleCloud_.dataExchangeM().destroy(partRe_,1); + } + + // * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // + void wallHeatTransferYagi::allocateMyArrays() const + { + // get memory for 2d arrays + double initVal=0.0; + + if(verbose_) + { + particleCloud_.dataExchangeM().allocateArray(partRe_,initVal,1); + } + } + + // * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // + + void wallHeatTransferYagi::calcEnergyContribution() + { + allocateMyArrays(); + + // reset Scalar field + QWallFluid_.primitiveFieldRef() = 0.0; + + #ifdef compre + const volScalarField mufField = particleCloud_.turbulence().mu(); + #else + const volScalarField mufField = particleCloud_.turbulence().nu()*rho_; + #endif + + interpolationCellPoint voidfractionInterpolator_(voidfraction_); + interpolationCellPoint UInterpolator_(U_); + interpolationCellPoint TInterpolator_(tempField_); + + // calculate Rep + for(int index = 0;index < particleCloud_.numberOfParticles(); ++index) + { + label cellI = particleCloud_.cellIDs()[index][0]; + if(cellI >= 0) + { + scalar voidfraction; + vector Ufluid; + + if(interpolation_) + { + vector position = particleCloud_.position(index); + voidfraction = voidfractionInterpolator_.interpolate(position,cellI); + Ufluid = UInterpolator_.interpolate(position,cellI); + } + else + { + voidfraction = voidfraction_[cellI]; + Ufluid = U_[cellI]; + } + + if (voidfraction < 0.01) + voidfraction = 0.01; + + vector Us = particleCloud_.velocity(index); + scalar magUr = mag(Ufluid - Us); + scalar ds = 2.*particleCloud_.radius(index); + scalar muf = mufField[cellI]; + + scalar Rep = ds * magUr * voidfraction * rho_[cellI]/ muf; + partRe_[index][0] = Rep; + } + } + + // calculate Rep field + particleCloud_.averagingM().resetWeightFields(); + particleCloud_.averagingM().setScalarAverage + ( + ReField_, + partRe_, + particleCloud_.particleWeights(), + particleCloud_.averagingM().UsWeightField(), + NULL + ); + + // calculate Pr field + PrField_ = CpField_ * mufField / kfField_; + + const fvPatchList& patches = U_.mesh().boundary(); + + // calculate flux + forAll(patches, patchi) + { + const fvPatch& curPatch = patches[patchi]; + + if (wallTemp_.boundaryField().types()[patchi] == "fixedValue") + { + if(tempField_.boundaryField().types()[patchi] == "zeroGradient") + { + + forAll(curPatch, facei) + { + label faceCelli = curPatch.faceCells()[facei]; + + // calculate Urel + scalar magG = mag(U_[faceCelli]-Us_[faceCelli])*voidfraction_[faceCelli]*rho_[faceCelli]; + + // calculate H + scalar H; + if (voidfraction_[faceCelli]<=voidfractionMax_) + H = 0.2087 * (pow(ReField_[faceCelli]+SMALL,-0.20)) * CpField_[faceCelli] * magG / (pow(PrField_[faceCelli],2/3) + SMALL); + else + H = 0; + + // get delta T (wall-fluid) + scalar Twall = wallTemp_.boundaryField()[patchi][facei]; + scalar Tfluid = tempField_[faceCelli]; + scalar deltaT = Twall - Tfluid; + + // get area + scalar area = curPatch.magSf()[facei]; + + // calculate heat flux + heatFlux(faceCelli, H, area, Twall, Tfluid); + heatFluxCoeff(faceCelli, H, area); + + if(verbose_ && facei >=0 && facei <2) + { + Info << "####################" << endl; + Info << "cellID: " << faceCelli << endl; + Info << "G : " << magG << endl; + Info << "Re: " << ReField_[faceCelli] << endl; + Info << "Pr: " << PrField_[faceCelli] << endl; + Info << "Cp: " << CpField_[faceCelli] << endl; + Info << "kf: " << kfField_[faceCelli] << endl; + Info << "H : " << H << endl; + Info << "Twall: " << Twall << endl; + Info << "Tfluid: " << Tfluid << endl; + Info << "dT: " << deltaT << endl; + Info << "q: " << H*deltaT << endl; + Info << "area: " << area << endl; + Info << "Q:" << H*deltaT*area << endl; + } + } + } + else + { + FatalError << "wallHeatTransferYagi requires zeroGradient BC for temperature field" << endl; + } + } + } + + QWallFluid_.primitiveFieldRef() /= QWallFluid_.mesh().V(); + + // limit source term + forAll(QWallFluid_,cellI) + { + scalar EuFieldInCell = QWallFluid_[cellI]; + + if(mag(EuFieldInCell) > maxSource_ ) + { + Pout << "limiting source term" << endl ; + QWallFluid_[cellI] = sign(EuFieldInCell) * maxSource_; + } + } + + QWallFluid_.correctBoundaryConditions(); + + } + + void wallHeatTransferYagi::addEnergyContribution(volScalarField& Qsource) const + { + Qsource += QWallFluid_; + } + + void wallHeatTransferYagi::heatFlux(label faceCelli, scalar H, scalar area, scalar Twall, scalar Tfluid) + { + QWallFluid_[faceCelli] += H * area * (Twall - Tfluid); + } + + void wallHeatTransferYagi::heatFluxCoeff(label faceCelli, scalar H, scalar area) + { + //no heat transfer coefficient in explicit model + } + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.H b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.H similarity index 92% rename from src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.H rename to src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.H index 528e9ef0..d3ea5e13 100644 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHT/YagiWallHT.H +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagi/wallHeatTransferYagi.H @@ -22,8 +22,8 @@ License \*---------------------------------------------------------------------------*/ -#ifndef YagiWallHT_H -#define YagiWallHT_H +#ifndef wallHeatTransferYagi_H +#define wallHeatTransferYagi_H #include "fvCFD.H" #include "cfdemCloudEnergy.H" @@ -34,10 +34,10 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class YagiWallHT Declaration + Class wallHeatTransferYagi Declaration \*---------------------------------------------------------------------------*/ -class YagiWallHT +class wallHeatTransferYagi : public energyModel { @@ -106,12 +106,12 @@ protected: public: //- Runtime type information - TypeName("YagiWallHT"); + TypeName("wallHeatTransferYagi"); // Constructors //- Construct from components - YagiWallHT + wallHeatTransferYagi ( const dictionary& dict, cfdemCloudEnergy& sm @@ -120,7 +120,7 @@ public: // Destructor - virtual ~YagiWallHT(); + virtual ~wallHeatTransferYagi(); // Member Functions diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.C b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.C new file mode 100644 index 00000000..9499fcba --- /dev/null +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.C @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------*\ +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 "wallHeatTransferYagiImplicit.H" +#include "addToRunTimeSelectionTable.H" +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(wallHeatTransferYagiImplicit, 0); + +addToRunTimeSelectionTable(energyModel, wallHeatTransferYagiImplicit, dictionary); + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +wallHeatTransferYagiImplicit::wallHeatTransferYagiImplicit +( + const dictionary& dict, + cfdemCloudEnergy& sm +) +: + wallHeatTransferYagi(dict,sm), + QWallFluidCoeffName_(propsDict_.lookupOrDefault("QWallFluidCoeffName","QWallFluidCoeff")), + QWallFluidCoeff_ + ( IOobject + ( + QWallFluidCoeffName_, + sm.mesh().time().timeName(), + sm.mesh(), + IOobject::READ_IF_PRESENT, + IOobject::AUTO_WRITE + ), + sm.mesh(), + dimensionedScalar("zero", dimensionSet(1,-1,-3,-1,0,0,0), 0.0) + ), + partHeatFluxCoeff_(NULL) +{ + allocateMyArrays(); + + // no limiting necessary for implicit heat transfer + maxSource_ = 1e30; +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +wallHeatTransferYagiImplicit::~wallHeatTransferYagiImplicit() +{ + particleCloud_.dataExchangeM().destroy(partHeatFluxCoeff_,1); +} + +// * * * * * * * * * * * * * * * private Member Functions * * * * * * * * * * * * * // +void wallHeatTransferYagiImplicit::allocateMyArrays() const +{ +// wallHeatTransferYagi::allocateMyArrays(); + double initVal=0.0; + particleCloud_.dataExchangeM().allocateArray(partHeatFluxCoeff_,initVal,1); +} +// * * * * * * * * * * * * * * * * Member Fct * * * * * * * * * * * * * * * // + +void wallHeatTransferYagiImplicit::calcEnergyContribution() +{ + allocateMyArrays(); + + QWallFluidCoeff_.primitiveFieldRef() = 0.0; + + wallHeatTransferYagi::calcEnergyContribution(); + + QWallFluidCoeff_.primitiveFieldRef() /= QWallFluidCoeff_.mesh().V(); + +// QWallFluidCoeff_.correctBoundaryConditions(); + +} + +void wallHeatTransferYagiImplicit::addEnergyCoefficient(volScalarField& Qsource) const +{ + Qsource += QWallFluidCoeff_; +} + +void wallHeatTransferYagiImplicit::heatFlux(label faceCelli, scalar H, scalar area, scalar Twall, scalar Tfluid) +{ + QWallFluid_[faceCelli] += H * area * Twall; +} + +void wallHeatTransferYagiImplicit::heatFluxCoeff(label faceCelli, scalar H, scalar area) +{ + QWallFluidCoeff_[faceCelli] -= H * area; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.H b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.H similarity index 85% rename from src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.H rename to src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.H index 2d4403be..08c8cd31 100644 --- a/src/lagrangian/cfdemParticle/subModels/energyModel/YagiWallHTImplicit/YagiWallHTImplicit.H +++ b/src/lagrangian/cfdemParticle/subModels/energyModel/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.H @@ -22,24 +22,24 @@ License \*---------------------------------------------------------------------------*/ -#ifndef YagiWallHTImplicit_H -#define YagiWallHTImplicit_H +#ifndef wallHeatTransferYagiImplicit_H +#define wallHeatTransferYagiImplicit_H #include "fvCFD.H" #include "cfdemCloudEnergy.H" -#include "YagiWallHT.H" +#include "wallHeatTransferYagi.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ - Class YagiWallHTImplicit Declaration + Class wallHeatTransferYagiImplicit Declaration \*---------------------------------------------------------------------------*/ -class YagiWallHTImplicit +class wallHeatTransferYagiImplicit : - public YagiWallHT + public wallHeatTransferYagi { private: @@ -58,12 +58,12 @@ private: public: //- Runtime type information - TypeName("YagiWallHTImplicit"); + TypeName("wallHeatTransferYagiImplicit"); // Constructors //- Construct from components - YagiWallHTImplicit + wallHeatTransferYagiImplicit ( const dictionary& dict, cfdemCloudEnergy& sm @@ -72,7 +72,7 @@ public: // Destructor - virtual ~YagiWallHTImplicit(); + virtual ~wallHeatTransferYagiImplicit(); // Member Functions diff --git a/src/lagrangian/cfdemParticleComp/Make/files b/src/lagrangian/cfdemParticleComp/Make/files index 17a7f1bf..44ea58f0 100644 --- a/src/lagrangian/cfdemParticleComp/Make/files +++ b/src/lagrangian/cfdemParticleComp/Make/files @@ -32,8 +32,8 @@ $(energyModels)/energyModel/energyModel.C $(energyModels)/energyModel/newEnergyModel.C $(energyModels)/heatTransferGunn/heatTransferGunn.C $(energyModels)/heatTransferGunnImplicit/heatTransferGunnImplicit.C -$(energyModels)/YagiWallHT/YagiWallHT.C -$(energyModels)/YagiWallHTImplicit/YagiWallHTImplicit.C +$(energyModels)/wallHeatTransferYagi/wallHeatTransferYagi.C +$(energyModels)/wallHeatTransferYagiImplicit/wallHeatTransferYagiImplicit.C $(energyModels)/reactionHeat/reactionHeat.C $(thermCondModels)/thermCondModel/thermCondModel.C