/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2012-2017 OpenFOAM Foundation
Copyright (C) 2015-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
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 .
\*---------------------------------------------------------------------------*/
#include "meshToMesh.H"
#include "Time.H"
#include "globalIndex.H"
#include "meshToMeshMethod.H"
#include "nearestFaceAMI.H"
#include "processorPolyPatch.H"
#include "faceAreaWeightAMI.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(meshToMesh, 0);
}
const Foam::Enum
<
Foam::meshToMesh::interpolationMethod
>
Foam::meshToMesh::interpolationMethodNames_
({
{ interpolationMethod::imDirect, "direct" },
{ interpolationMethod::imMapNearest, "mapNearest" },
{ interpolationMethod::imCellVolumeWeight, "cellVolumeWeight" },
{
interpolationMethod::imCorrectedCellVolumeWeight,
"correctedCellVolumeWeight"
},
});
const Foam::Enum
<
Foam::meshToMesh::procMapMethod
>
Foam::meshToMesh::procMapMethodNames_
{
{ procMapMethod::pmAABB, "AABB" },
{ procMapMethod::pmLOD, "LOD" },
};
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalSrcToTgt
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapSrcToTgt(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const plusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapInternalTgtToSrc
(
const VolumeField& field,
const minusEqOp& cop,
VolumeField& result,
const bool secondOrder
) const
{
mapTgtToSrc(field, cop, result.primitiveFieldRef());
}
template<>
void Foam::meshToMesh::mapAndOpSrcToTgt
(
const AMIPatchToPatchInterpolation& AMI,
const Field& srcField,
Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpSrcToTgt
(
const AMIPatchToPatchInterpolation& AMI,
const Field& srcField,
Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpSrcToTgt
(
const AMIPatchToPatchInterpolation& AMI,
const Field& srcField,
Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpSrcToTgt
(
const AMIPatchToPatchInterpolation& AMI,
const Field& srcField,
Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpSrcToTgt
(
const AMIPatchToPatchInterpolation& AMI,
const Field& srcField,
Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpTgtToSrc
(
const AMIPatchToPatchInterpolation& AMI,
Field& srcField,
const Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpTgtToSrc
(
const AMIPatchToPatchInterpolation& AMI,
Field& srcField,
const Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpTgtToSrc
(
const AMIPatchToPatchInterpolation& AMI,
Field& srcField,
const Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpTgtToSrc
(
const AMIPatchToPatchInterpolation& AMI,
Field& srcField,
const Field& tgtField,
const plusEqOp& cop
) const
{}
template<>
void Foam::meshToMesh::mapAndOpTgtToSrc
(
const AMIPatchToPatchInterpolation& AMI,
Field& srcField,
const Field& tgtField,
const plusEqOp& cop
) const
{}
Foam::labelList Foam::meshToMesh::maskCells
(
const polyMesh& src,
const polyMesh& tgt
) const
{
boundBox intersectBb
(
max(src.bounds().min(), tgt.bounds().min()),
min(src.bounds().max(), tgt.bounds().max())
);
intersectBb.inflate(0.01);
const cellList& srcCells = src.cells();
const faceList& srcFaces = src.faces();
const pointField& srcPts = src.points();
DynamicList