From 1e157ad7b25a2989bac07a6bd2338a29c1fc1e6e Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Tue, 8 Apr 2014 12:32:59 +0100 Subject: [PATCH] ENH: porosity model updates for moving meshes --- .../DarcyForchheimer/DarcyForchheimer.C | 53 +++++++++--------- .../DarcyForchheimer/DarcyForchheimer.H | 14 ++++- .../porosityModel/fixedCoeff/fixedCoeff.C | 55 ++++++++++--------- .../porosityModel/fixedCoeff/fixedCoeff.H | 15 ++++- .../porosityModel/porosityModel.C | 44 ++++++++------- .../porosityModel/porosityModel.H | 26 ++++----- .../porosityModel/porosityModelList.C | 8 +-- .../porosityModel/porosityModelList.H | 6 +- .../general/porosityModel/powerLaw/powerLaw.C | 8 ++- .../general/porosityModel/powerLaw/powerLaw.H | 5 +- 10 files changed, 134 insertions(+), 100 deletions(-) diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C index 619ce5f1a34..3036baff95b 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 7b6ea1dd4e5..119cb9df684 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 bb7c3c9d7ec..c3ef2826a59 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 7154cdf2c4d..ad441f3ac10 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 81d722a57bb..613248b05fe 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 06df0bfdae4..a3b4b0f0e09 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 df3028547cb..339ea07b73f 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 8b79095b0da..3e953c30ef5 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 ae9d5641e43..8a8361db8e6 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 299335b7294..0bd9be2a99d 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 ( -- GitLab