Files
OpenFOAM-12/src/finiteVolume/fvMeshToFvMesh/fvMeshToFvMesh.H
Will Bainbridge 2f4ef2abba fvMeshStitcher: Prevent storage of internal surface fields for mapping
This reduces the memory usage of the stitching operation, and simplifies
its interaction with other mesh changers.

The storage of separate original and non-conformal field parts is now
done within a new "conformal" boundary condition. This condition
internally stores two boundary conditions; one for the original patch
values, and one for the non-conformal part. The conformal condition
replaces the condition applied to the original patch on un-stitch when
the non-conformal boundaries are removed. The data stored in the
conformal condition is then used to restore the previous conditions
during the re-stitch process.

This conformal condition supports mapping of various types. This means
both original and non-conformal boundary data gets mapped automatically
as a result of other mesh changes such as automatic refinement.
2023-11-02 09:32:31 +00:00

156 lines
4.8 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022-2023 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::fvMeshToFvMesh
Description
SourceFiles
fvMeshToFvMeshTemplates.C
\*---------------------------------------------------------------------------*/
#ifndef fvMeshToFvMesh_H
#define fvMeshToFvMesh_H
#include "meshToMesh.H"
#include "volFields.H"
#include "surfaceFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class fvMeshToFvMesh Declaration
\*---------------------------------------------------------------------------*/
class fvMeshToFvMesh
:
public meshToMesh
{
private:
// Private Typedefs
//- Alias for surface boundary fields to reduce verbosity of method
// definitions below
template<class Type>
using SurfaceFieldBoundary =
GeometricBoundaryField<Type, fvsPatchField, surfaceMesh>;
// Private Member Functions
//- Evaluate constraint types for the given vol field
template<class Type>
static void evaluateConstraintTypes(VolField<Type>& fld);
public:
//- Run-time type information
TypeName("fvMeshToFvMesh");
// Constructors
//- Inherit base class' constructors
using meshToMesh::meshToMesh;
//- Destructor
virtual ~fvMeshToFvMesh();
// Member Functions
// Interpolation
//- Interpolate a source vol field to the target with no left
// over values specified. If the interpolation weight sum is less
// than one for a face then they will be normalised. If the
// interpolation weight sum is zero for a face then that face's
// value will be NaN.
template<class Type>
tmp<VolField<Type>> srcToTgt
(
const VolField<Type>& srcFld
) const;
//- Interpolate a source vol field to the target with left over
// values specified. If the interpolation weight sum is less than
// one for a face then the average will include the left over
// value multiplied by one minus the weight sum.
template<class Type>
tmp<VolField<Type>> srcToTgt
(
const VolField<Type>& srcFld,
const VolField<Type>& leftOverTgtFld,
const UList<wordRe>& tgtCuttingPatches
) const;
//- Interpolate a source vol internal field to the target with no
// left over values specified. As the corresponding srcToTgt.
template<class Type>
tmp<VolInternalField<Type>> srcToTgt
(
const VolInternalField<Type>& srcFld
) const;
//- Interpolate a source vol internal field to the target with left
// over values specified. As the corresponding srcToTgt.
template<class Type>
tmp<VolInternalField<Type>> srcToTgt
(
const VolInternalField<Type>& srcFld,
const VolInternalField<Type>& leftOverTgtFld
) const;
//- ...
template<class Type>
tmp<SurfaceFieldBoundary<Type>> srcToTgt
(
const SurfaceFieldBoundary<Type>& srcFld
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "fvMeshToFvMeshTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //