ENH: uniformFixedValue: adapt point bc. See #1046.

This commit is contained in:
mattijs
2019-02-07 14:08:03 +00:00
parent 1e772411f6
commit 0c1c075c5b
7 changed files with 110 additions and 22 deletions

View File

@ -699,7 +699,6 @@ $(constraintPointPatchFields)/wedge/wedgePointPatchFields.C
derivedPointPatchFields = $(pointPatchFields)/derived derivedPointPatchFields = $(pointPatchFields)/derived
$(derivedPointPatchFields)/slip/slipPointPatchFields.C $(derivedPointPatchFields)/slip/slipPointPatchFields.C
$(derivedPointPatchFields)/fixedNormalSlip/fixedNormalSlipPointPatchFields.C $(derivedPointPatchFields)/fixedNormalSlip/fixedNormalSlipPointPatchFields.C
$(derivedPointPatchFields)/uniformFixedValue/uniformFixedValuePointPatchFields.C
$(derivedPointPatchFields)/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchFields.C $(derivedPointPatchFields)/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchFields.C
$(derivedPointPatchFields)/codedFixedValue/codedFixedValuePointPatchFields.C $(derivedPointPatchFields)/codedFixedValue/codedFixedValuePointPatchFields.C

View File

@ -37,6 +37,7 @@ $(derivedPoint)/oscillatingDisplacement/oscillatingDisplacementPointPatchVectorF
$(derivedPoint)/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C $(derivedPoint)/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C
$(derivedPoint)/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C $(derivedPoint)/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C
$(derivedPoint)/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C $(derivedPoint)/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C
$(derivedPoint)/uniformFixedValue/uniformFixedValuePointPatchFields.C
$(derivedPoint)/waveDisplacement/waveDisplacementPointPatchVectorField.C $(derivedPoint)/waveDisplacement/waveDisplacementPointPatchVectorField.C
$(derivedPoint)/timeVaryingMappedFixedValue/timeVaryingMappedFixedValuePointPatchFields.C $(derivedPoint)/timeVaryingMappedFixedValue/timeVaryingMappedFixedValuePointPatchFields.C

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2010, 2019 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
| Copyright (C) 2011-2017 OpenFOAM Foundation | Copyright (C) 2011-2017 OpenFOAM Foundation
@ -26,6 +26,27 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "uniformFixedValuePointPatchField.H" #include "uniformFixedValuePointPatchField.H"
#include "SubField.H"
#include "polyPatch.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
template<class Type>
const Foam::polyPatch&
Foam::uniformFixedValuePointPatchField<Type>::getPatch(const pointPatch& p)
{
const polyMesh& mesh = p.boundaryMesh().mesh()();
label patchi = mesh.boundaryMesh().findPatchID(p.name());
if (patchi == -1)
{
FatalErrorInFunction
<< "Cannot use uniformFixedValue on patch " << p.name()
<< " since there is no underlying mesh patch" << exit(FatalError);
}
return mesh.boundaryMesh()[patchi];
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
@ -52,7 +73,16 @@ uniformFixedValuePointPatchField
) )
: :
fixedValuePointPatchField<Type>(p, iF, dict, false), fixedValuePointPatchField<Type>(p, iF, dict, false),
uniformValue_(Function1<Type>::New("uniformValue", dict)) uniformValue_
(
PatchFunction1<Type>::New
(
this->getPatch(p),
"uniformValue",
dict,
false // generate point values
)
)
{ {
if (dict.found("value")) if (dict.found("value"))
{ {
@ -63,8 +93,7 @@ uniformFixedValuePointPatchField
} }
else else
{ {
const scalar t = this->db().time().timeOutputValue(); this->evaluate();
fixedValuePointPatchField<Type>::operator=(uniformValue_->value(t));
} }
} }
@ -80,11 +109,18 @@ uniformFixedValuePointPatchField
) )
: :
fixedValuePointPatchField<Type>(ptf, p, iF, mapper), fixedValuePointPatchField<Type>(ptf, p, iF, mapper),
uniformValue_(ptf.uniformValue_.clone()) uniformValue_(ptf.uniformValue_.clone(this->getPatch(p)))
{ {
// For safety re-evaluate if (mapper.direct() && !mapper.hasUnmapped())
const scalar t = this->db().time().timeOutputValue(); {
fixedValuePointPatchField<Type>::operator=(uniformValue_->value(t)); // Use mapping instead of re-evaluation
this->map(ptf, mapper);
}
else
{
// Evaluate since value not mapped
this->evaluate();
}
} }
@ -96,7 +132,7 @@ uniformFixedValuePointPatchField
) )
: :
fixedValuePointPatchField<Type>(ptf), fixedValuePointPatchField<Type>(ptf),
uniformValue_(ptf.uniformValue_.clone()) uniformValue_(ptf.uniformValue_.clone(this->getPatch(this->patch())))
{} {}
@ -109,16 +145,45 @@ uniformFixedValuePointPatchField
) )
: :
fixedValuePointPatchField<Type>(ptf, iF), fixedValuePointPatchField<Type>(ptf, iF),
uniformValue_(ptf.uniformValue_.clone()) uniformValue_(ptf.uniformValue_.clone(this->getPatch(this->patch())))
{ {}
// For safety re-evaluate
const scalar t = this->db().time().timeOutputValue();
fixedValuePointPatchField<Type>::operator==(uniformValue_->value(t));
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
void Foam::uniformFixedValuePointPatchField<Type>::autoMap
(
const pointPatchFieldMapper& mapper
)
{
fixedValuePointPatchField<Type>::autoMap(mapper);
uniformValue_().autoMap(mapper);
if (uniformValue_().constant())
{
// If mapper is not dependent on time we're ok to evaluate
this->evaluate();
}
}
template<class Type>
void Foam::uniformFixedValuePointPatchField<Type>::rmap
(
const pointPatchField<Type>& ptf,
const labelList& addr
)
{
fixedValuePointPatchField<Type>::rmap(ptf, addr);
const uniformFixedValuePointPatchField& tiptf =
refCast<const uniformFixedValuePointPatchField>(ptf);
uniformValue_().rmap(tiptf.uniformValue_(), addr);
}
template<class Type> template<class Type>
void Foam::uniformFixedValuePointPatchField<Type>::updateCoeffs() void Foam::uniformFixedValuePointPatchField<Type>::updateCoeffs()
{ {
@ -126,10 +191,8 @@ void Foam::uniformFixedValuePointPatchField<Type>::updateCoeffs()
{ {
return; return;
} }
const scalar t = this->db().time().timeOutputValue(); const scalar t = this->db().time().timeOutputValue();
fixedValuePointPatchField<Type>::operator==(uniformValue_->value(t)); fixedValuePointPatchField<Type>::operator==(uniformValue_->value(t));
fixedValuePointPatchField<Type>::updateCoeffs(); fixedValuePointPatchField<Type>::updateCoeffs();
} }

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2010, 2019 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
| Copyright (C) 2011-2016 OpenFOAM Foundation | Copyright (C) 2011-2016 OpenFOAM Foundation
@ -51,13 +51,15 @@ SourceFiles
#define uniformFixedValuePointPatchField_H #define uniformFixedValuePointPatchField_H
#include "fixedValuePointPatchField.H" #include "fixedValuePointPatchField.H"
#include "Function1.H" #include "PatchFunction1.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
class polyPatch;
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class uniformFixedValuePointPatchField Declaration Class uniformFixedValuePointPatchField Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -67,9 +69,14 @@ class uniformFixedValuePointPatchField
: :
public fixedValuePointPatchField<Type> public fixedValuePointPatchField<Type>
{ {
// Private Member Functions
static const polyPatch& getPatch(const pointPatch&);
// Private data // Private data
autoPtr<Function1<Type>> uniformValue_; autoPtr<PatchFunction1<Type>> uniformValue_;
public: public:
@ -157,6 +164,23 @@ public:
return uniformValue_; return uniformValue_;
} }
// Mapping functions
//- Map (and resize as needed) from self given a mapping object
virtual void autoMap
(
const pointPatchFieldMapper&
);
//- Reverse map the given fvPatchField onto this fvPatchField
virtual void rmap
(
const pointPatchField<Type>&,
const labelList&
);
// Evaluation functions // Evaluation functions
//- Update the coefficients associated with the patch field //- Update the coefficients associated with the patch field

View File

@ -102,7 +102,8 @@ Foam::autoPtr<Foam::PatchFunction1<Type>> Foam::PatchFunction1<Type>::New
pp, pp,
PatchFunction1Types::ConstantField<Type>::typeName, PatchFunction1Types::ConstantField<Type>::typeName,
entryName, entryName,
dict dict,
faceValues
) )
); );
} }