diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index f94219df921ad652877508633d5669b5b6da86c1..97295969b91d18702d43146787d046f1c8808a67 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -426,6 +426,7 @@ $(SRF)/SRFModel/SRFModel/SRFModel.C $(SRF)/SRFModel/SRFModel/SRFModelNew.C $(SRF)/SRFModel/rpm/rpm.C $(SRF)/derivedFvPatchFields/SRFVelocityFvPatchVectorField/SRFVelocityFvPatchVectorField.C +$(SRF)/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.C $(SRF)/derivedFvPatchFields/SRFFreestreamVelocityFvPatchVectorField/SRFFreestreamVelocityFvPatchVectorField.C fvOptions = $(general)/fvOptions diff --git a/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.C b/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..17c0dc700f8b4903566e537239b0cc1532f993de --- /dev/null +++ b/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.C @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------* \ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "SRFWallVelocityFvPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "volFields.H" + +#include "SRFModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::SRFWallVelocityFvPatchVectorField::SRFWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchVectorField(p, iF) +{} + + +Foam::SRFWallVelocityFvPatchVectorField::SRFWallVelocityFvPatchVectorField +( + const SRFWallVelocityFvPatchVectorField& ptf, + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const fvPatchFieldMapper& mapper +) +: + fixedValueFvPatchVectorField(ptf, p, iF, mapper) +{} + + +Foam::SRFWallVelocityFvPatchVectorField::SRFWallVelocityFvPatchVectorField +( + const fvPatch& p, + const DimensionedField<vector, volMesh>& iF, + const dictionary& dict +) +: + fixedValueFvPatchVectorField(p, iF) +{ + fvPatchVectorField::operator=(vectorField("value", dict, p.size())); +} + + +Foam::SRFWallVelocityFvPatchVectorField::SRFWallVelocityFvPatchVectorField +( + const SRFWallVelocityFvPatchVectorField& srfvpvf +) +: + fixedValueFvPatchVectorField(srfvpvf) +{} + + +Foam::SRFWallVelocityFvPatchVectorField::SRFWallVelocityFvPatchVectorField +( + const SRFWallVelocityFvPatchVectorField& srfvpvf, + const DimensionedField<vector, volMesh>& iF +) +: + fixedValueFvPatchVectorField(srfvpvf, iF) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::SRFWallVelocityFvPatchVectorField::autoMap +( + const fvPatchFieldMapper& m +) +{ + vectorField::autoMap(m); +} + + +void Foam::SRFWallVelocityFvPatchVectorField::rmap +( + const fvPatchVectorField& ptf, + const labelList& addr +) +{ + fixedValueFvPatchVectorField::rmap(ptf, addr); +} + + +void Foam::SRFWallVelocityFvPatchVectorField::updateCoeffs() +{ + if (updated()) + { + return; + } + + // Get reference to the SRF model + const SRF::SRFModel& srf = + db().lookupObject<SRF::SRFModel>("SRFProperties"); + + // Determine patch velocity due to SRF + const vectorField Up(-srf.velocity(patch().Cf())); + + // Remove the component of Up normal to the wall + // just in case it is not exactly circular + const vectorField n(patch().nf()); + vectorField::operator=(Up - n*(n & Up)); + + fixedValueFvPatchVectorField::updateCoeffs(); +} + + +void Foam::SRFWallVelocityFvPatchVectorField::write(Ostream& os) const +{ + fvPatchVectorField::write(os); + writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchVectorField, + SRFWallVelocityFvPatchVectorField + ); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.H b/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..060898c65e844693c5e340163c35ca3fa4632b88 --- /dev/null +++ b/src/finiteVolume/cfdTools/general/SRF/derivedFvPatchFields/SRFWallVelocityFvPatchVectorField/SRFWallVelocityFvPatchVectorField.H @@ -0,0 +1,199 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM 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. + + OpenFOAM 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 OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::SRFWallVelocityFvPatchVectorField + +Group + grpWallBoundaryConditions + +Description + Wall-velocity condition to be used in conjunction with the single rotating + frame (SRF) model (see: FOAM::SRFModel) + + The condition applies the appropriate rotation transformation in time and + space to determine the local SRF velocity of the wall. + + \f[ + U_p = - U_{p,srf} + \f] + + where + \vartable + U_p = patch velocity [m/s] + U_{p,srf} = SRF velocity + \endvartable + + The normal component of \f$ U_p \f$ is removed to ensure 0 wall-flux even + if the wall patch faces are irregular. + + \heading Patch usage + + Example of the boundary condition specification: + \verbatim + myPatch + { + type SRFWallVelocity; + value uniform (0 0 0); // Initial value + } + \endverbatim + +SeeAlso + Foam::SRFModel + Foam::SRFVelocityFvPatchVectorField + Foam::fixedValueFvPatchField + +SourceFiles + SRFWallVelocityFvPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef SRFWallVelocityFvPatchVectorField_H +#define SRFWallVelocityFvPatchVectorField_H + +#include "fvPatchFields.H" +#include "fixedValueFvPatchFields.H" +#include "Switch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class SRFWallVelocityFvPatchVectorField Declaration +\*---------------------------------------------------------------------------*/ + +class SRFWallVelocityFvPatchVectorField +: + public fixedValueFvPatchVectorField +{ + +public: + + //- Runtime type information + TypeName("SRFWallVelocity"); + + + // Constructors + + //- Construct from patch and internal field + SRFWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct from patch, internal field and dictionary + SRFWallVelocityFvPatchVectorField + ( + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const dictionary& + ); + + //- Construct by mapping given SRFWallVelocityFvPatchVectorField + // onto a new patch + SRFWallVelocityFvPatchVectorField + ( + const SRFWallVelocityFvPatchVectorField&, + const fvPatch&, + const DimensionedField<vector, volMesh>&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + SRFWallVelocityFvPatchVectorField + ( + const SRFWallVelocityFvPatchVectorField& + ); + + //- Construct and return a clone + virtual tmp<fvPatchVectorField> clone() const + { + return tmp<fvPatchVectorField> + ( + new SRFWallVelocityFvPatchVectorField(*this) + ); + } + + //- Construct as copy setting internal field reference + SRFWallVelocityFvPatchVectorField + ( + const SRFWallVelocityFvPatchVectorField&, + const DimensionedField<vector, volMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp<fvPatchVectorField> clone + ( + const DimensionedField<vector, volMesh>& iF + ) const + { + return tmp<fvPatchVectorField> + ( + new SRFWallVelocityFvPatchVectorField(*this, iF) + ); + } + + + // Member functions + + // Mapping functions + + //- Map (and resize as needed) from self given a mapping object + virtual void autoMap + ( + const fvPatchFieldMapper& + ); + + //- Reverse map the given fvPatchField onto this fvPatchField + virtual void rmap + ( + const fvPatchVectorField&, + const labelList& + ); + + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + // I-O + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //