/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2015-2020 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 "polyMesh.H"
#include "transform.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Update this with w2 if w2 nearer to pt.
template
inline bool Foam::transportData::update
(
const point& pt,
const transportData& w2,
const scalar tol,
TrackingData& td
)
{
const scalar dist2 = magSqr(pt - w2.origin());
if (valid(td))
{
const scalar diff = distSqr() - dist2;
if (diff < 0)
{
// Already nearer to pt
return false;
}
if ((diff < SMALL) || ((distSqr() > SMALL) && (diff/distSqr() < tol)))
{
// Don't propagate small changes
return false;
}
}
// Either *this is not yet valid or w2 is closer
{
// current not yet set so use any value
distSqr() = dist2;
origin() = w2.origin();
data() = w2.data();
if (distSqr() > sqr(0.25*data()))
{
// No need to transport gap data since too far away
return false;
}
return true;
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
inline Foam::transportData::transportData()
:
wallPointData()
{}
inline Foam::transportData::transportData
(
const point& origin,
const scalar gapSize,
const scalar distSqr
)
:
wallPointData(origin, gapSize, distSqr)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template
inline bool Foam::transportData::updateCell
(
const polyMesh& mesh,
const label cellI,
const label faceI,
const transportData& neighbourWallInfo,
const scalar tol,
TrackingData& td
)
{
if (td.surfaceIndex_[faceI] != -1)
{
return false;
}
const vectorField& cellCentres = mesh.primitiveMesh::cellCentres();
bool updated = update
(
cellCentres[cellI],
neighbourWallInfo,
tol,
td
);
return updated;
}
template
inline bool Foam::transportData::updateFace
(
const polyMesh& mesh,
const label thisFaceI,
const label neighbourCellI,
const transportData& neighbourWallInfo,
const scalar tol,
TrackingData& td
)
{
if (td.surfaceIndex_[thisFaceI] != -1)
{
return false;
}
return update
(
mesh.faceCentres()[thisFaceI],
neighbourWallInfo,
tol,
td
);
}
template
inline bool Foam::transportData::updateFace
(
const polyMesh& mesh,
const label thisFaceI,
const transportData& neighbourWallInfo,
const scalar tol,
TrackingData& td
)
{
if (td.surfaceIndex_[thisFaceI] != -1)
{
return false;
}
return update
(
mesh.faceCentres()[thisFaceI],
neighbourWallInfo,
tol,
td
);
}
// ************************************************************************* //