diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C index 619ce5f1a34dfe2186a7609d07acad79c26efa6e..3036baff95b702e0e67d559bec552c1f7a1b5200 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C @@ -52,19 +52,31 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer ) : porosityModel(name, modelType, mesh, dict, cellZoneName), + dXYZ_(coeffs_.lookup("d")), + fXYZ_(coeffs_.lookup("f")), D_(cellZoneIDs_.size()), F_(cellZoneIDs_.size()), rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho")), muName_(coeffs_.lookupOrDefault<word>("mu", "thermo:mu")), nuName_(coeffs_.lookupOrDefault<word>("nu", "nu")) { + adjustNegativeResistance(dXYZ_); + adjustNegativeResistance(fXYZ_); - dimensionedVector d(coeffs_.lookup("d")); - dimensionedVector f(coeffs_.lookup("f")); + calcTranformModelData(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::porosityModels::DarcyForchheimer::~DarcyForchheimer() +{} - adjustNegativeResistance(d); - adjustNegativeResistance(f); +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::porosityModels::DarcyForchheimer::calcTranformModelData() +{ if (coordSys_.R().uniform()) { forAll (cellZoneIDs_, zoneI) @@ -72,20 +84,19 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer D_[zoneI].setSize(1, tensor::zero); F_[zoneI].setSize(1, tensor::zero); - D_[zoneI][0].xx() = d.value().x(); - D_[zoneI][0].yy() = d.value().y(); - D_[zoneI][0].zz() = d.value().z(); + D_[zoneI][0].xx() = dXYZ_.value().x(); + D_[zoneI][0].yy() = dXYZ_.value().y(); + D_[zoneI][0].zz() = dXYZ_.value().z(); D_[zoneI][0] = coordSys_.R().transformTensor(D_[zoneI][0]); // leading 0.5 is from 1/2*rho - F_[zoneI][0].xx() = 0.5*f.value().x(); - F_[zoneI][0].yy() = 0.5*f.value().y(); - F_[zoneI][0].zz() = 0.5*f.value().z(); + F_[zoneI][0].xx() = 0.5*fXYZ_.value().x(); + F_[zoneI][0].yy() = 0.5*fXYZ_.value().y(); + F_[zoneI][0].zz() = 0.5*fXYZ_.value().z(); F_[zoneI][0] = coordSys_.R().transformTensor(F_[zoneI][0]); } - } else { @@ -98,14 +109,14 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer forAll(cells, i) { - D_[zoneI][i].xx() = d.value().x(); - D_[zoneI][i].yy() = d.value().y(); - D_[zoneI][i].zz() = d.value().z(); + D_[zoneI][i].xx() = dXYZ_.value().x(); + D_[zoneI][i].yy() = dXYZ_.value().y(); + D_[zoneI][i].zz() = dXYZ_.value().z(); // leading 0.5 is from 1/2*rho - F_[zoneI][i].xx() = 0.5*f.value().x(); - F_[zoneI][i].yy() = 0.5*f.value().y(); - F_[zoneI][i].zz() = 0.5*f.value().z(); + F_[zoneI][i].xx() = 0.5*fXYZ_.value().x(); + F_[zoneI][i].yy() = 0.5*fXYZ_.value().y(); + F_[zoneI][i].zz() = 0.5*fXYZ_.value().z(); } D_[zoneI] = coordSys_.R().transformTensor(D_[zoneI], cells); @@ -115,14 +126,6 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer } -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::porosityModels::DarcyForchheimer::~DarcyForchheimer() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - void Foam::porosityModels::DarcyForchheimer::calcForce ( const volVectorField& U, diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H index 7b6ea1dd4e5c0c2d0649d826b59f399972335aaa..119cb9df684f0607208fda6eef997a9027b611cb 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -74,11 +74,16 @@ private: // Private data + //- Darcy coeffient XYZ components (user-supplied) [1/m2] + dimensionedVector dXYZ_; - //- Darcy coefficient [1/m2] + //- Forchheimer coeffient XYZ components (user-supplied) [1/m] + dimensionedVector fXYZ_; + + //- Darcy coefficient - converted from dXYZ [1/m2] List<tensorField> D_; - //- Forchheimer coefficient [1/m] + //- Forchheimer coefficient - converted from fXYZ [1/m] List<tensorField> F_; //- Name of density field @@ -143,6 +148,9 @@ public: // Member Functions + //- Transform the model data wrt mesh changes + virtual void calcTranformModelData(); + //- Calculate the porosity force virtual void calcForce ( diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C index bb7c3c9d7ecbf08b29e7b9c62053a71ffb5e98e0..c3ef2826a59722291d749d4a7e540a4391f36ab7 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,15 +111,28 @@ Foam::porosityModels::fixedCoeff::fixedCoeff ) : porosityModel(name, modelType, mesh, dict, cellZoneName), + alphaXYZ_(coeffs_.lookup("alpha")), + betaXYZ_(coeffs_.lookup("beta")), alpha_(cellZoneIDs_.size()), beta_(cellZoneIDs_.size()) { - dimensionedVector alpha(coeffs_.lookup("alpha")); - dimensionedVector beta(coeffs_.lookup("beta")); + adjustNegativeResistance(alphaXYZ_); + adjustNegativeResistance(betaXYZ_); - adjustNegativeResistance(alpha); - adjustNegativeResistance(beta); + calcTranformModelData(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::porosityModels::fixedCoeff::~fixedCoeff() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void Foam::porosityModels::fixedCoeff::calcTranformModelData() +{ if (coordSys_.R().uniform()) { forAll (cellZoneIDs_, zoneI) @@ -127,14 +140,14 @@ Foam::porosityModels::fixedCoeff::fixedCoeff alpha_[zoneI].setSize(1, tensor::zero); beta_[zoneI].setSize(1, tensor::zero); - alpha_[zoneI][0].xx() = alpha.value().x(); - alpha_[zoneI][0].yy() = alpha.value().y(); - alpha_[zoneI][0].zz() = alpha.value().z(); + alpha_[zoneI][0].xx() = alphaXYZ_.value().x(); + alpha_[zoneI][0].yy() = alphaXYZ_.value().y(); + alpha_[zoneI][0].zz() = alphaXYZ_.value().z(); alpha_[zoneI][0] = coordSys_.R().transformTensor(alpha_[zoneI][0]); - beta_[zoneI][0].xx() = beta.value().x(); - beta_[zoneI][0].yy() = beta.value().y(); - beta_[zoneI][0].zz() = beta.value().z(); + beta_[zoneI][0].xx() = betaXYZ_.value().x(); + beta_[zoneI][0].yy() = betaXYZ_.value().y(); + beta_[zoneI][0].zz() = betaXYZ_.value().z(); beta_[zoneI][0] = coordSys_.R().transformTensor(beta_[zoneI][0]); } } @@ -149,13 +162,13 @@ Foam::porosityModels::fixedCoeff::fixedCoeff forAll(cells, i) { - alpha_[zoneI][i].xx() = alpha.value().x(); - alpha_[zoneI][i].yy() = alpha.value().y(); - alpha_[zoneI][i].zz() = alpha.value().z(); + alpha_[zoneI][i].xx() = alphaXYZ_.value().x(); + alpha_[zoneI][i].yy() = alphaXYZ_.value().y(); + alpha_[zoneI][i].zz() = alphaXYZ_.value().z(); - beta_[zoneI][i].xx() = beta.value().x(); - beta_[zoneI][i].yy() = beta.value().y(); - beta_[zoneI][i].zz() = beta.value().z(); + beta_[zoneI][i].xx() = betaXYZ_.value().x(); + beta_[zoneI][i].yy() = betaXYZ_.value().y(); + beta_[zoneI][i].zz() = betaXYZ_.value().z(); } alpha_[zoneI] = @@ -167,14 +180,6 @@ Foam::porosityModels::fixedCoeff::fixedCoeff } -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::porosityModels::fixedCoeff::~fixedCoeff() -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - void Foam::porosityModels::fixedCoeff::calcForce ( const volVectorField& U, diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H index 7154cdf2c4dd937122f43b6a4b305101966843f9..ad441f3ac104f8d3f31f226e0cbbc31332b17e1e 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,10 +64,16 @@ private: // Private data - //- Model alpha coefficient [1/s] + //- alpha coefficient XYZ components (user-supplied) [1/s] + dimensionedVector alphaXYZ_; + + //- beta coefficient XYZ components (user-supplied) [1/m] + dimensionedVector betaXYZ_; + + //- Model alpha coefficient - converted from alphaXYZ [1/s] List<tensorField> alpha_; - //- Model beta coefficient [1/m] + //- Model beta coefficient - converted from betaXYZ [1/m] List<tensorField> beta_; @@ -119,6 +125,9 @@ public: // Member Functions + //- Transform the model data wrt mesh changes + virtual void calcTranformModelData(); + //- Calculate the porosity force virtual void calcForce ( diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C index 81d722a57bbbfc29865c834d75b1b5158466904b..613248b05fe23d4201708e158edb17e9d6967da5 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -147,13 +147,27 @@ Foam::porosityModel::~porosityModel() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void Foam::porosityModel::transformModelData() +{ + if (!mesh_.upToDatePoints(*this)) + { + calcTranformModelData(); + + // set model up-to-date wrt points + mesh_.setUpToDatePoints(*this); + } +} + + Foam::tmp<Foam::vectorField> Foam::porosityModel::porosityModel::force ( const volVectorField& U, const volScalarField& rho, const volScalarField& mu -) const +) { + transformModelData(); + tmp<vectorField> tforce(new vectorField(U.size(), vector::zero)); if (!cellZoneIDs_.empty()) @@ -165,16 +179,14 @@ Foam::tmp<Foam::vectorField> Foam::porosityModel::porosityModel::force } -void Foam::porosityModel::addResistance -( - fvVectorMatrix& UEqn -) const +void Foam::porosityModel::addResistance(fvVectorMatrix& UEqn) { if (cellZoneIDs_.empty()) { return; } + transformModelData(); this->correct(UEqn); } @@ -184,13 +196,14 @@ void Foam::porosityModel::addResistance fvVectorMatrix& UEqn, const volScalarField& rho, const volScalarField& mu -) const +) { if (cellZoneIDs_.empty()) { return; } + transformModelData(); this->correct(UEqn, rho, mu); } @@ -200,13 +213,14 @@ void Foam::porosityModel::addResistance const fvVectorMatrix& UEqn, volTensorField& AU, bool correctAUprocBC -) const +) { if (cellZoneIDs_.empty()) { return; } + transformModelData(); this->correct(UEqn, AU); if (correctAUprocBC) @@ -219,24 +233,12 @@ void Foam::porosityModel::addResistance } -bool Foam::porosityModel::movePoints() -{ - // no updates necessary; all member data independent of mesh - return true; -} - - -void Foam::porosityModel::updateMesh(const mapPolyMesh& mpm) -{ - // no updates necessary; all member data independent of mesh -} - - bool Foam::porosityModel::writeData(Ostream& os) const { return true; } + bool Foam::porosityModel::read(const dictionary& dict) { active_ = readBool(dict.lookup("active")); diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H index 06df0bfdae4fba64418f66cb9c2889c2280b1cf0..a3b4b0f0e098f3c355da07ba810e6002bf500b81 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -99,6 +99,10 @@ protected: // Protected Member Functions + + //- Transform the model data wrt mesh changes + virtual void calcTranformModelData() = 0; + //- Adjust negative resistance values to be multiplier of max value void adjustNegativeResistance(dimensionedVector& resist); @@ -221,16 +225,19 @@ public: //- Return const access to the cell zone IDs inline const labelList& cellZoneIDs() const; + //- Transform the model data wrt mesh changes + virtual void transformModelData(); + //- Return the force over the cell zone(s) virtual tmp<vectorField> force ( const volVectorField& U, const volScalarField& rho, const volScalarField& mu - ) const; + ); //- Add resistance - virtual void addResistance(fvVectorMatrix& UEqn) const; + virtual void addResistance(fvVectorMatrix& UEqn); //- Add resistance virtual void addResistance @@ -238,7 +245,7 @@ public: fvVectorMatrix& UEqn, const volScalarField& rho, const volScalarField& mu - ) const; + ); //- Add resistance virtual void addResistance @@ -246,16 +253,7 @@ public: const fvVectorMatrix& UEqn, volTensorField& AU, bool correctAUprocBC - ) const; - - - // Topology change - - //- Move points - virtual bool movePoints(); - - //- Update on meshUpdate - virtual void updateMesh(const mapPolyMesh& mpm); + ); // I-O diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.C b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.C index df3028547cb2c9e835cb4727af38cb90f6f7e24d..339ea07b73f942176efea0b6586aee8d2a576706 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -126,7 +126,7 @@ bool Foam::porosityModelList::writeData(Ostream& os) const void Foam::porosityModelList::addResistance ( fvVectorMatrix& UEqn -) const +) { forAll(*this, i) { @@ -140,7 +140,7 @@ void Foam::porosityModelList::addResistance fvVectorMatrix& UEqn, const volScalarField& rho, const volScalarField& mu -) const +) { forAll(*this, i) { @@ -154,7 +154,7 @@ void Foam::porosityModelList::addResistance const fvVectorMatrix& UEqn, volTensorField& AU, bool correctAUprocBC -) const +) { forAll(*this, i) { diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.H b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.H index 8b79095b0daa60e365d1940bd02855f9192d0e8e..3e953c30ef5455f7216a06d04b0cb43fc9339b6c 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModelList.H @@ -94,7 +94,7 @@ public: void reset(const dictionary& dict); //- Add resistance - void addResistance(fvVectorMatrix& UEqn) const; + void addResistance(fvVectorMatrix& UEqn); //- Add resistance void addResistance @@ -102,7 +102,7 @@ public: fvVectorMatrix& UEqn, const volScalarField& rho, const volScalarField& mu - ) const; + ); //- Add resistance void addResistance @@ -110,7 +110,7 @@ public: const fvVectorMatrix& UEqn, volTensorField& AU, bool correctAUprocBC = true - ) const; + ); // I-O diff --git a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C index ae9d5641e436acfef7260fa063fede226d6a43c1..8a8361db8e6a5c1dd3e3c82181861b6527675c23 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -66,6 +66,12 @@ Foam::porosityModels::powerLaw::~powerLaw() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void Foam::porosityModels::powerLaw::calcTranformModelData() +{ + // nothing to be transformed +} + + void Foam::porosityModels::powerLaw::calcForce ( const volVectorField& U, diff --git a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H index 299335b7294db56343e8b9533b915b8b6b5df012..0bd9be2a99d3b94c955a76b1cf8dd981d44ab759 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/powerLaw/powerLaw.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -127,6 +127,9 @@ public: // Member Functions + //- Transform the model data wrt mesh changes + virtual void calcTranformModelData(); + //- Calculate the porosity force virtual void calcForce (