Skip to content
Snippets Groups Projects
Commit 05e0749d authored by Andrew Heather's avatar Andrew Heather Committed by Andrew Heather
Browse files

ENH: Added under-relaxation to jump conditions

Currently only applied to the fanFvPatchField, e.g.

    plane
    {
        type            fan;
        patchType       cyclic;
        jump            uniform 0;
        value           uniform 0;
        uniformJump     false;

        // Optional under-relaxation
        relax           0.2;

        ...
    }
parent 30da494e
No related branches found
No related tags found
1 merge request!467ENH: Added under-relaxation to jump conditions
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2017-2020 OpenCFD Ltd. Copyright (C) 2017-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -80,6 +80,8 @@ void Foam::fanFvPatchField<Foam::scalar>::calcFanJump() ...@@ -80,6 +80,8 @@ void Foam::fanFvPatchField<Foam::scalar>::calcFanJump()
{ {
this->jump_ = this->jumpTable_->value(Un); this->jump_ = this->jumpTable_->value(Un);
} }
this->relax();
} }
} }
...@@ -94,7 +96,7 @@ Foam::fanFvPatchField<Foam::scalar>::fanFvPatchField ...@@ -94,7 +96,7 @@ Foam::fanFvPatchField<Foam::scalar>::fanFvPatchField
const dictionary& dict const dictionary& dict
) )
: :
uniformJumpFvPatchField<scalar>(p, iF), uniformJumpFvPatchField<scalar>(p, iF, dict),
phiName_(dict.getOrDefault<word>("phi", "phi")), phiName_(dict.getOrDefault<word>("phi", "phi")),
rhoName_(dict.getOrDefault<word>("rho", "rho")), rhoName_(dict.getOrDefault<word>("rho", "rho")),
uniformJump_(dict.getOrDefault("uniformJump", false)), uniformJump_(dict.getOrDefault("uniformJump", false)),
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -37,7 +38,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField ...@@ -37,7 +38,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
) )
: :
jumpCyclicFvPatchField<Type>(p, iF), jumpCyclicFvPatchField<Type>(p, iF),
jump_(this->size(), Zero) jump_(this->size(), Zero),
jump0_(this->size(), Zero),
relaxFactor_(-1),
timeIndex_(-1)
{} {}
...@@ -51,7 +55,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField ...@@ -51,7 +55,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
) )
: :
jumpCyclicFvPatchField<Type>(ptf, p, iF, mapper), jumpCyclicFvPatchField<Type>(ptf, p, iF, mapper),
jump_(ptf.jump_, mapper) jump_(ptf.jump_, mapper),
jump0_(ptf.jump0_, mapper),
relaxFactor_(ptf.relaxFactor_),
timeIndex_(ptf.timeIndex_)
{} {}
...@@ -63,12 +70,20 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField ...@@ -63,12 +70,20 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
const dictionary& dict const dictionary& dict
) )
: :
jumpCyclicFvPatchField<Type>(p, iF), jumpCyclicFvPatchField<Type>(p, iF, dict),
jump_(p.size(), Zero) jump_(p.size(), Zero),
jump0_(p.size(), Zero),
relaxFactor_(dict.getOrDefault<scalar>("relax", -1)),
timeIndex_(this->db().time().timeIndex())
{ {
if (this->cyclicPatch().owner()) if (this->cyclicPatch().owner())
{ {
jump_ = Field<Type>("jump", dict, p.size()); jump_ = Field<Type>("jump", dict, p.size());
if (dict.found("jump0"))
{
jump0_ = Field<Type>("jump0", dict, p.size());
}
} }
if (dict.found("value")) if (dict.found("value"))
...@@ -92,7 +107,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField ...@@ -92,7 +107,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
) )
: :
jumpCyclicFvPatchField<Type>(ptf), jumpCyclicFvPatchField<Type>(ptf),
jump_(ptf.jump_) jump_(ptf.jump_),
jump0_(ptf.jump0_),
relaxFactor_(ptf.relaxFactor_),
timeIndex_(ptf.timeIndex_)
{} {}
...@@ -104,7 +122,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField ...@@ -104,7 +122,10 @@ Foam::fixedJumpFvPatchField<Type>::fixedJumpFvPatchField
) )
: :
jumpCyclicFvPatchField<Type>(ptf, iF), jumpCyclicFvPatchField<Type>(ptf, iF),
jump_(ptf.jump_) jump_(ptf.jump_),
jump0_(ptf.jump0_),
relaxFactor_(ptf.relaxFactor_),
timeIndex_(ptf.timeIndex_)
{} {}
...@@ -127,6 +148,49 @@ Foam::tmp<Foam::Field<Type>> Foam::fixedJumpFvPatchField<Type>::jump() const ...@@ -127,6 +148,49 @@ Foam::tmp<Foam::Field<Type>> Foam::fixedJumpFvPatchField<Type>::jump() const
} }
template<class Type>
Foam::tmp<Foam::Field<Type>> Foam::fixedJumpFvPatchField<Type>::jump0() const
{
if (this->cyclicPatch().owner())
{
return jump0_;
}
else
{
return refCast<const fixedJumpFvPatchField<Type>>
(
this->neighbourPatchField()
).jump0();
}
}
template<class Type>
Foam::scalar Foam::fixedJumpFvPatchField<Type>::relaxFactor() const
{
return relaxFactor_;
}
template<class Type>
void Foam::fixedJumpFvPatchField<Type>::relax()
{
if (!this->cyclicPatch().owner() || relaxFactor_ < 0)
{
return;
}
jump_ = relaxFactor_*jump_ + (1 - relaxFactor_)*jump0_;
if (timeIndex_ != this->db().time().timeIndex())
{
jump0_ = jump_;
timeIndex_ = this->db().time().timeIndex();
}
}
template<class Type> template<class Type>
void Foam::fixedJumpFvPatchField<Type>::autoMap void Foam::fixedJumpFvPatchField<Type>::autoMap
( (
...@@ -135,6 +199,7 @@ void Foam::fixedJumpFvPatchField<Type>::autoMap ...@@ -135,6 +199,7 @@ void Foam::fixedJumpFvPatchField<Type>::autoMap
{ {
jumpCyclicFvPatchField<Type>::autoMap(m); jumpCyclicFvPatchField<Type>::autoMap(m);
jump_.autoMap(m); jump_.autoMap(m);
jump0_.autoMap(m);
} }
...@@ -147,9 +212,9 @@ void Foam::fixedJumpFvPatchField<Type>::rmap ...@@ -147,9 +212,9 @@ void Foam::fixedJumpFvPatchField<Type>::rmap
{ {
jumpCyclicFvPatchField<Type>::rmap(ptf, addr); jumpCyclicFvPatchField<Type>::rmap(ptf, addr);
const fixedJumpFvPatchField<Type>& tiptf = const auto& fjptf = refCast<const fixedJumpFvPatchField<Type>>(ptf);
refCast<const fixedJumpFvPatchField<Type>>(ptf); jump_.rmap(fjptf.jump_, addr);
jump_.rmap(tiptf.jump_, addr); jump0_.rmap(fjptf.jump0_, addr);
} }
...@@ -157,11 +222,22 @@ template<class Type> ...@@ -157,11 +222,22 @@ template<class Type>
void Foam::fixedJumpFvPatchField<Type>::write(Ostream& os) const void Foam::fixedJumpFvPatchField<Type>::write(Ostream& os) const
{ {
fvPatchField<Type>::write(os); fvPatchField<Type>::write(os);
os.writeEntry("patchType", this->interfaceFieldType());
// Write patchType if not done already by fvPatchField
if (!this->patchType().size())
{
os.writeEntry("patchType", this->interfaceFieldType());
}
if (this->cyclicPatch().owner()) if (this->cyclicPatch().owner())
{ {
jump_.writeEntry("jump", os); jump_.writeEntry("jump", os);
if (relaxFactor_ > 0)
{
os.writeEntry("relax", relaxFactor_);
jump0_.writeEntry("jump0", os);
}
} }
this->writeEntry("value", os); this->writeEntry("value", os);
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -41,6 +42,7 @@ Usage ...@@ -41,6 +42,7 @@ Usage
Property | Description | Required | Default value Property | Description | Required | Default value
patchType | underlying patch type should be \c cyclic| yes | patchType | underlying patch type should be \c cyclic| yes |
jump | current jump value | yes | jump | current jump value | yes |
relax | under-relaxation factor | no |
\endtable \endtable
Example of the boundary condition specification: Example of the boundary condition specification:
...@@ -93,6 +95,15 @@ protected: ...@@ -93,6 +95,15 @@ protected:
//- "jump" field //- "jump" field
Field<Type> jump_; Field<Type> jump_;
//- "jump" field at old time level
Field<Type> jump0_;
//- Under-relaxation factor
scalar relaxFactor_;
//- Time index
label timeIndex_;
public: public:
...@@ -168,6 +179,15 @@ public: ...@@ -168,6 +179,15 @@ public:
//- Return the "jump" across the patch //- Return the "jump" across the patch
virtual tmp<Field<Type>> jump() const; virtual tmp<Field<Type>> jump() const;
//- Return the old time "jump" across the patch
virtual tmp<Field<Type>> jump0() const;
//- Return the under-relaxation factor
virtual scalar relaxFactor() const;
//- Return the relaxed "jump" across the patch
virtual void relax();
// Mapping functions // Mapping functions
......
...@@ -63,7 +63,7 @@ Foam::uniformJumpFvPatchField<Type>::uniformJumpFvPatchField ...@@ -63,7 +63,7 @@ Foam::uniformJumpFvPatchField<Type>::uniformJumpFvPatchField
const dictionary& dict const dictionary& dict
) )
: :
fixedJumpFvPatchField<Type>(p, iF), fixedJumpFvPatchField<Type>(p, iF, dict),
jumpTable_() jumpTable_()
{ {
if (this->cyclicPatch().owner()) if (this->cyclicPatch().owner())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment