The patch field 'autoMap' and 'rmap' functions have been replaced with a
single 'map' function that can used to do any form of in-place
patch-to-patch mapping. The exact form of mapping is now controlled
entirely by the mapper object.
An example 'map' function is shown below:
void nutkRoughWallFunctionFvPatchScalarField::map
(
const fvPatchScalarField& ptf,
const fvPatchFieldMapper& mapper
)
{
nutkWallFunctionFvPatchScalarField::map(ptf, mapper);
const nutkRoughWallFunctionFvPatchScalarField& nrwfpsf =
refCast<const nutkRoughWallFunctionFvPatchScalarField>(ptf);
mapper(Ks_, nrwfpsf.Ks_);
mapper(Cs_, nrwfpsf.Cs_);
}
This single function replaces these two previous functions:
void nutkRoughWallFunctionFvPatchScalarField::autoMap
(
const fvPatchFieldMapper& m
)
{
nutkWallFunctionFvPatchScalarField::autoMap(m);
m(Ks_, Ks_);
m(Cs_, Cs_);
}
void nutkRoughWallFunctionFvPatchScalarField::rmap
(
const fvPatchScalarField& ptf,
const labelList& addr
)
{
nutkWallFunctionFvPatchScalarField::rmap(ptf, addr);
const nutkRoughWallFunctionFvPatchScalarField& nrwfpsf =
refCast<const nutkRoughWallFunctionFvPatchScalarField>(ptf);
Ks_.rmap(nrwfpsf.Ks_, addr);
Cs_.rmap(nrwfpsf.Cs_, addr);
}
Calls to 'autoMap' should be replaced with calls to 'map' with the same
mapper object and the patch field itself provided as the source. Calls
to 'rmap' should be replaced with calls to 'map' by wrapping the
addressing in a 'reverseFvPatchFieldMapper' (or
'reversePointPatchFieldMapper') object.
This change simplifies the creation of new patch fields and hence
improves extensibility. It also provides more options regarding general
mapping strategies between patches. Previously, general abstracted
mapping was only possible in 'autoMap'; i.e., from a patch to itself.
Now, general mapping is possible between different patches.
232 lines
6.2 KiB
C++
232 lines
6.2 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration | Website: https://openfoam.org
|
|
\\ / A nd | Copyright (C) YEAR 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::CONSTRUCT
|
|
|
|
Description
|
|
This boundary condition provides a NAME condition,
|
|
calculated as:
|
|
|
|
\f[
|
|
Q = Q_{0} + Q_{p} + s*Q_{t}
|
|
\f]
|
|
|
|
where
|
|
\vartable
|
|
s | single scalar value [units]
|
|
Q_{0} | single TYPE value [units]
|
|
Q_{p} | TYPE field across patch [units]
|
|
Q_{t} | TYPE function of time [units]
|
|
\endtable
|
|
|
|
Usage
|
|
\table
|
|
Property | Description | Req'd? | Default
|
|
scalarData | single scalar value | yes |
|
|
data | single TYPE value | yes |
|
|
fieldData | TYPE field across patch | yes |
|
|
timeVsData | TYPE function of time | yes |
|
|
wordData | word, eg name of data object | no | wordDefault
|
|
\endtable
|
|
|
|
Example of the boundary condition specification:
|
|
\verbatim
|
|
<patchName>
|
|
{
|
|
type NAME;
|
|
scalarData -1;
|
|
data ONE;
|
|
fieldData uniform THREE;
|
|
timeVsData table (
|
|
(0 ZERO)
|
|
(1 TWO)
|
|
);
|
|
wordName anotherName;
|
|
value uniform FOUR; // optional initial value
|
|
}
|
|
\endverbatim
|
|
|
|
SourceFiles
|
|
CONSTRUCT.C
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef BC_H
|
|
#define BC_H
|
|
|
|
#include "BASEFvPatchFields.H"
|
|
#include "Function1.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class CONSTRUCT Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
template<class Type>
|
|
class CONSTRUCT
|
|
:
|
|
public PARENT
|
|
{
|
|
// Private Data
|
|
|
|
//- Single valued scalar quantity, e.g. a coefficient
|
|
scalar scalarData_;
|
|
|
|
//- Single valued Type quantity, e.g. reference pressure pRefValue_
|
|
// Other options include vector, tensor
|
|
TYPE data_;
|
|
|
|
//- Field of Types, typically defined across patch faces
|
|
// e.g. total pressure p0_. Other options include vectorField
|
|
FIELD fieldData_;
|
|
|
|
//- Type specified as a function of time for time-varying BCs
|
|
autoPtr<Function1<TYPE>> timeVsData_;
|
|
|
|
//- Word entry, e.g. pName_ for name of the pressure field on database
|
|
word wordData_;
|
|
|
|
//- Label, e.g. patch index, current time index
|
|
label labelData_;
|
|
|
|
//- Boolean for true/false, e.g. specify if flow rate is volumetric_
|
|
bool boolData_;
|
|
|
|
|
|
// Private Member Functions
|
|
|
|
//- Return current time
|
|
scalar t() const;
|
|
|
|
|
|
public:
|
|
|
|
//- Runtime type information
|
|
TypeName("NAME");
|
|
|
|
|
|
// Constructors
|
|
|
|
//- Construct from patch and internal field
|
|
CONSTRUCT
|
|
(
|
|
const fvPatch&,
|
|
const DimensionedField<TYPE, volMesh>&
|
|
);
|
|
|
|
//- Construct from patch, internal field and dictionary
|
|
CONSTRUCT
|
|
(
|
|
const fvPatch&,
|
|
const DimensionedField<TYPE, volMesh>&,
|
|
const dictionary&
|
|
);
|
|
|
|
//- Construct by mapping given BASETypeFvPatchField
|
|
// onto a new patch
|
|
CONSTRUCT
|
|
(
|
|
const CLASS&,
|
|
const fvPatch&,
|
|
const DimensionedField<TYPE, volMesh>&,
|
|
const fvPatchFieldMapper&
|
|
);
|
|
|
|
//- Disallow copy without setting internal field reference
|
|
CONSTRUCT
|
|
(
|
|
const CLASS&
|
|
) = delete;
|
|
|
|
//- Copy constructor setting internal field reference
|
|
CONSTRUCT
|
|
(
|
|
const CLASS&,
|
|
const DimensionedField<TYPE, volMesh>&
|
|
);
|
|
|
|
//- Construct and return a clone setting internal field reference
|
|
virtual tmp<FVPATCHF> clone
|
|
(
|
|
const DimensionedField<TYPE, volMesh>& iF
|
|
) const
|
|
{
|
|
return tmp<FVPATCHF>
|
|
(
|
|
new CLASS
|
|
(
|
|
*this,
|
|
iF
|
|
)
|
|
);
|
|
}
|
|
|
|
|
|
// Member Functions
|
|
|
|
// Mapping functions
|
|
|
|
//- Map the given fvPatchField onto this fvPatchField
|
|
virtual void map
|
|
(
|
|
const FVPATCHF&,
|
|
const fvPatchFieldMapper&
|
|
);
|
|
|
|
//- Reset the fvPatchField to the given fvPatchField
|
|
// Used for mesh to mesh mapping
|
|
virtual void reset(const FVPATCHF&);
|
|
|
|
|
|
// Evaluation functions
|
|
|
|
//- Update the coefficients associated with the patch field
|
|
virtual void updateCoeffs();
|
|
|
|
|
|
//- Write
|
|
virtual void write(Ostream&) const;
|
|
};
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#ifdef NoRepository
|
|
#include "CONSTRUCT.C"
|
|
#endif
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|