/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.1
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see .
\*---------------------------------------------------------------------------*/
#include "mixedFixedValueSlipFvPatchField.H"
#include "symmTransformField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
mixedFixedValueSlipFvPatchField::mixedFixedValueSlipFvPatchField
(
const fvPatch& p,
const DimensionedField& iF
)
:
transformFvPatchField(p, iF),
refValue_(p.size(), pTraits::zero),
valueFraction_(p.size(), 1.0)
{}
template
mixedFixedValueSlipFvPatchField::mixedFixedValueSlipFvPatchField
(
const mixedFixedValueSlipFvPatchField& ptf,
const fvPatch& p,
const DimensionedField& iF,
const fvPatchFieldMapper& mapper
)
:
transformFvPatchField(ptf, p, iF, mapper),
refValue_(ptf.refValue_, mapper),
valueFraction_(ptf.valueFraction_, mapper)
{}
template
mixedFixedValueSlipFvPatchField::mixedFixedValueSlipFvPatchField
(
const fvPatch& p,
const DimensionedField& iF,
const dictionary& dict
)
:
transformFvPatchField(p, iF),
refValue_("refValue", dict, p.size()),
valueFraction_("valueFraction", dict, p.size())
{}
template
mixedFixedValueSlipFvPatchField::mixedFixedValueSlipFvPatchField
(
const mixedFixedValueSlipFvPatchField& ptf
)
:
transformFvPatchField(ptf),
refValue_(ptf.refValue_),
valueFraction_(ptf.valueFraction_)
{}
template
mixedFixedValueSlipFvPatchField::mixedFixedValueSlipFvPatchField
(
const mixedFixedValueSlipFvPatchField& ptf,
const DimensionedField& iF
)
:
transformFvPatchField(ptf, iF),
refValue_(ptf.refValue_),
valueFraction_(ptf.valueFraction_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Map from self
template
void mixedFixedValueSlipFvPatchField::autoMap
(
const fvPatchFieldMapper& m
)
{
Field::autoMap(m);
refValue_.autoMap(m);
valueFraction_.autoMap(m);
}
// Reverse-map the given fvPatchField onto this fvPatchField
template
void mixedFixedValueSlipFvPatchField::rmap
(
const fvPatchField& ptf,
const labelList& addr
)
{
transformFvPatchField::rmap(ptf, addr);
const mixedFixedValueSlipFvPatchField& dmptf =
refCast >(ptf);
refValue_.rmap(dmptf.refValue_, addr);
valueFraction_.rmap(dmptf.valueFraction_, addr);
}
// Return gradient at boundary
template
tmp > mixedFixedValueSlipFvPatchField::snGrad() const
{
vectorField nHat = this->patch().nf();
Field pif = this->patchInternalField();
return
(
valueFraction_*refValue_
+ (1.0 - valueFraction_)*transform(I - sqr(nHat), pif) - pif
)*this->patch().deltaCoeffs();
}
// Evaluate the field on the patch
template
void mixedFixedValueSlipFvPatchField::evaluate(const Pstream::commsTypes)
{
if (!this->updated())
{
this->updateCoeffs();
}
vectorField nHat = this->patch().nf();
Field::operator=
(
valueFraction_*refValue_
+
(1.0 - valueFraction_)
*transform(I - nHat*nHat, this->patchInternalField())
);
transformFvPatchField::evaluate();
}
// Return defining fields
template
tmp > mixedFixedValueSlipFvPatchField::snGradTransformDiag() const
{
vectorField nHat = this->patch().nf();
vectorField diag(nHat.size());
diag.replace(vector::X, mag(nHat.component(vector::X)));
diag.replace(vector::Y, mag(nHat.component(vector::Y)));
diag.replace(vector::Z, mag(nHat.component(vector::Z)));
return
valueFraction_*Type(pTraits::one)
+ (1.0 - valueFraction_)*transformFieldMask(pow::rank>(diag));
}
// Write
template
void mixedFixedValueSlipFvPatchField::write(Ostream& os) const
{
transformFvPatchField::write(os);
refValue_.writeEntry("refValue", os);
valueFraction_.writeEntry("valueFraction", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //