/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2016-2017 Wikki Ltd
Copyright (C) 2023 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 "coupledFaPatch.H"
#include "transform.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
defineTypeName(coupledFaPatch);
}
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
void Foam::coupledFaPatch::calcTransformTensors
(
const vector& Cf,
const vector& Cr,
const vector& nf,
const vector& nr
) const
{
if (mag(nf & nr) < 1 - SMALL)
{
separation_.clear();
forwardT_.resize(1);
reverseT_.resize(1);
forwardT_[0] = rotationTensor(-nr, nf);
reverseT_[0] = rotationTensor(nf, -nr);
}
else
{
forwardT_.clear();
reverseT_.clear();
vector separation = (nf & (Cr - Cf))*nf;
if (mag(separation) > SMALL)
{
separation_.resize(1);
separation_[0] = separation;
}
else
{
separation_.clear();
}
}
}
void Foam::coupledFaPatch::calcTransformTensors
(
const vectorField& Cf,
const vectorField& Cr,
const vectorField& nf,
const vectorField& nr
) const
{
if (sum(mag(nf & nr)) < Cf.size() - SMALL)
{
separation_.clear();
forwardT_.resize_nocopy(size());
reverseT_.resize_nocopy(size());
forAll(forwardT_, facei)
{
forwardT_[facei] = rotationTensor(-nr[facei], nf[facei]);
reverseT_[facei] = rotationTensor(nf[facei], -nr[facei]);
}
if (sum(mag(forwardT_ - forwardT_[0])) < SMALL)
{
forwardT_.resize(1);
reverseT_.resize(1);
}
}
else
{
forwardT_.clear();
reverseT_.clear();
separation_ = (nf&(Cr - Cf))*nf;
if (sum(mag(separation_)) < SMALL)
{
separation_.clear();
}
else if (sum(mag(separation_ - separation_[0])) < SMALL)
{
separation_.resize(1);
}
}
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::tmp Foam::coupledFaPatch::delta() const
{
return (edgeCentres() - edgeFaceCentres());
}
// ************************************************************************* //