Renamed vectorTensorTransform -> transformer
and relocated to a primitives/transform in preparation for use as the transformation class in coupled patches.
This commit is contained in:
@ -83,7 +83,7 @@ primitives/Vector2D/vector2D/vector2D.C
|
|||||||
|
|
||||||
primitives/complex/complex.C
|
primitives/complex/complex.C
|
||||||
primitives/globalIndexAndTransform/globalIndexAndTransform.C
|
primitives/globalIndexAndTransform/globalIndexAndTransform.C
|
||||||
primitives/globalIndexAndTransform/vectorTensorTransform/vectorTensorTransform.C
|
primitives/transform/transformer/transformer.C
|
||||||
primitives/quaternion/quaternion.C
|
primitives/quaternion/quaternion.C
|
||||||
primitives/septernion/septernion.C
|
primitives/septernion/septernion.C
|
||||||
primitives/triad/triad.C
|
primitives/triad/triad.C
|
||||||
|
|||||||
@ -39,7 +39,7 @@ namespace Foam
|
|||||||
template<>
|
template<>
|
||||||
void Foam::mapDistribute::transform::operator()
|
void Foam::mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<label>&
|
List<label>&
|
||||||
) const
|
) const
|
||||||
@ -70,7 +70,7 @@ void Foam::mapDistribute::transform::operator()
|
|||||||
template<>
|
template<>
|
||||||
void Foam::mapDistribute::transform::operator()
|
void Foam::mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<scalar>&
|
List<scalar>&
|
||||||
) const
|
) const
|
||||||
@ -101,7 +101,7 @@ void Foam::mapDistribute::transform::operator()
|
|||||||
template<>
|
template<>
|
||||||
void Foam::mapDistribute::transform::operator()
|
void Foam::mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<bool>&
|
List<bool>&
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -135,7 +135,7 @@ SourceFiles
|
|||||||
|
|
||||||
#include "mapDistributeBase.H"
|
#include "mapDistributeBase.H"
|
||||||
#include "transformList.H"
|
#include "transformList.H"
|
||||||
#include "vectorTensorTransform.H"
|
#include "transformer.H"
|
||||||
#include "coupledPolyPatch.H"
|
#include "coupledPolyPatch.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -211,7 +211,7 @@ public:
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<Type>& fld
|
List<Type>& fld
|
||||||
) const
|
) const
|
||||||
@ -223,7 +223,7 @@ public:
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<List<Type>>& flds
|
List<List<Type>>& flds
|
||||||
) const
|
) const
|
||||||
@ -263,7 +263,7 @@ public:
|
|||||||
|
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<point>& fld
|
List<point>& fld
|
||||||
) const
|
) const
|
||||||
@ -280,7 +280,7 @@ public:
|
|||||||
}
|
}
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<List<point>>& flds
|
List<List<point>>& flds
|
||||||
) const
|
) const
|
||||||
@ -567,7 +567,7 @@ public:
|
|||||||
template<>
|
template<>
|
||||||
void mapDistribute::transform::operator()
|
void mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<label>&
|
List<label>&
|
||||||
) const;
|
) const;
|
||||||
@ -599,7 +599,7 @@ void mapDistribute::transform::operator()
|
|||||||
template<>
|
template<>
|
||||||
void mapDistribute::transform::operator()
|
void mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<scalar>&
|
List<scalar>&
|
||||||
) const;
|
) const;
|
||||||
@ -625,7 +625,7 @@ void mapDistribute::transform::operator()
|
|||||||
template<>
|
template<>
|
||||||
void mapDistribute::transform::operator()
|
void mapDistribute::transform::operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform&,
|
const transformer&,
|
||||||
const bool,
|
const bool,
|
||||||
List<bool>&
|
List<bool>&
|
||||||
) const;
|
) const;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -73,12 +73,12 @@ void Foam::mapDistribute::applyTransforms
|
|||||||
const TransformOp& top
|
const TransformOp& top
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const List<vectorTensorTransform>& totalTransform =
|
const List<transformer>& totalTransform =
|
||||||
globalTransforms.transformPermutations();
|
globalTransforms.transformPermutations();
|
||||||
|
|
||||||
forAll(totalTransform, trafoI)
|
forAll(totalTransform, trafoI)
|
||||||
{
|
{
|
||||||
const vectorTensorTransform& vt = totalTransform[trafoI];
|
const transformer& vt = totalTransform[trafoI];
|
||||||
const labelList& elems = transformElements_[trafoI];
|
const labelList& elems = transformElements_[trafoI];
|
||||||
label n = transformStart_[trafoI];
|
label n = transformStart_[trafoI];
|
||||||
|
|
||||||
@ -103,12 +103,12 @@ void Foam::mapDistribute::applyInverseTransforms
|
|||||||
const TransformOp& top
|
const TransformOp& top
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
const List<vectorTensorTransform>& totalTransform =
|
const List<transformer>& totalTransform =
|
||||||
globalTransforms.transformPermutations();
|
globalTransforms.transformPermutations();
|
||||||
|
|
||||||
forAll(totalTransform, trafoI)
|
forAll(totalTransform, trafoI)
|
||||||
{
|
{
|
||||||
const vectorTensorTransform& vt = totalTransform[trafoI];
|
const transformer& vt = totalTransform[trafoI];
|
||||||
const labelList& elems = transformElements_[trafoI];
|
const labelList& elems = transformElements_[trafoI];
|
||||||
label n = transformStart_[trafoI];
|
label n = transformStart_[trafoI];
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -47,7 +47,7 @@ public:
|
|||||||
template<class T>
|
template<class T>
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<T>& fld
|
List<T>& fld
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -40,9 +40,9 @@ namespace Foam
|
|||||||
|
|
||||||
Foam::label Foam::globalIndexAndTransform::matchTransform
|
Foam::label Foam::globalIndexAndTransform::matchTransform
|
||||||
(
|
(
|
||||||
const List<vectorTensorTransform>& refTransforms,
|
const List<transformer>& refTransforms,
|
||||||
label& matchedRefTransformI,
|
label& matchedRefTransformI,
|
||||||
const vectorTensorTransform& testTransform,
|
const transformer& testTransform,
|
||||||
scalar tolerance,
|
scalar tolerance,
|
||||||
bool checkBothSigns
|
bool checkBothSigns
|
||||||
) const
|
) const
|
||||||
@ -51,7 +51,7 @@ Foam::label Foam::globalIndexAndTransform::matchTransform
|
|||||||
|
|
||||||
forAll(refTransforms, i)
|
forAll(refTransforms, i)
|
||||||
{
|
{
|
||||||
const vectorTensorTransform& refTransform = refTransforms[i];
|
const transformer& refTransform = refTransforms[i];
|
||||||
|
|
||||||
scalar maxVectorMag = sqrt
|
scalar maxVectorMag = sqrt
|
||||||
(
|
(
|
||||||
@ -128,7 +128,7 @@ void Foam::globalIndexAndTransform::determineTransforms()
|
|||||||
{
|
{
|
||||||
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
DynamicList<vectorTensorTransform> localTransforms;
|
DynamicList<transformer> localTransforms;
|
||||||
DynamicField<scalar> localTols;
|
DynamicField<scalar> localTols;
|
||||||
|
|
||||||
label dummyMatch = -1;
|
label dummyMatch = -1;
|
||||||
@ -163,7 +163,7 @@ void Foam::globalIndexAndTransform::determineTransforms()
|
|||||||
|
|
||||||
if (mag(sepVec) > small)
|
if (mag(sepVec) > small)
|
||||||
{
|
{
|
||||||
vectorTensorTransform transform(sepVec);
|
transformer transform(sepVec);
|
||||||
|
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
@ -188,7 +188,7 @@ void Foam::globalIndexAndTransform::determineTransforms()
|
|||||||
|
|
||||||
if (mag(transT - I) > small)
|
if (mag(transT - I) > small)
|
||||||
{
|
{
|
||||||
vectorTensorTransform transform(transT);
|
transformer transform(transT);
|
||||||
|
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
@ -212,7 +212,7 @@ void Foam::globalIndexAndTransform::determineTransforms()
|
|||||||
|
|
||||||
|
|
||||||
// Collect transforms on master
|
// Collect transforms on master
|
||||||
List<List<vectorTensorTransform>> allTransforms(Pstream::nProcs());
|
List<List<transformer>> allTransforms(Pstream::nProcs());
|
||||||
allTransforms[Pstream::myProcNo()] = localTransforms;
|
allTransforms[Pstream::myProcNo()] = localTransforms;
|
||||||
Pstream::gatherList(allTransforms);
|
Pstream::gatherList(allTransforms);
|
||||||
|
|
||||||
@ -227,12 +227,12 @@ void Foam::globalIndexAndTransform::determineTransforms()
|
|||||||
|
|
||||||
forAll(allTransforms, proci)
|
forAll(allTransforms, proci)
|
||||||
{
|
{
|
||||||
const List<vectorTensorTransform>& procTransVecs =
|
const List<transformer>& procTransVecs =
|
||||||
allTransforms[proci];
|
allTransforms[proci];
|
||||||
|
|
||||||
forAll(procTransVecs, pSVI)
|
forAll(procTransVecs, pSVI)
|
||||||
{
|
{
|
||||||
const vectorTensorTransform& transform = procTransVecs[pSVI];
|
const transformer& transform = procTransVecs[pSVI];
|
||||||
|
|
||||||
if (mag(transform.t()) > small || transform.hasR())
|
if (mag(transform.t()) > small || transform.hasR())
|
||||||
{
|
{
|
||||||
@ -268,7 +268,7 @@ void Foam::globalIndexAndTransform::determineTransformPermutations()
|
|||||||
|
|
||||||
forAll(transformPermutations_, tPI)
|
forAll(transformPermutations_, tPI)
|
||||||
{
|
{
|
||||||
vectorTensorTransform transform;
|
transformer transform;
|
||||||
|
|
||||||
label transformIndex = tPI;
|
label transformIndex = tPI;
|
||||||
|
|
||||||
@ -337,7 +337,7 @@ void Foam::globalIndexAndTransform::determinePatchTransformSign()
|
|||||||
|
|
||||||
if (mag(sepVec) > small)
|
if (mag(sepVec) > small)
|
||||||
{
|
{
|
||||||
vectorTensorTransform t(sepVec);
|
transformer t(sepVec);
|
||||||
|
|
||||||
label matchTransI;
|
label matchTransI;
|
||||||
label sign = matchTransform
|
label sign = matchTransform
|
||||||
@ -357,7 +357,7 @@ void Foam::globalIndexAndTransform::determinePatchTransformSign()
|
|||||||
|
|
||||||
if (mag(transT - I) > small)
|
if (mag(transT - I) > small)
|
||||||
{
|
{
|
||||||
vectorTensorTransform t(transT);
|
transformer t(transT);
|
||||||
|
|
||||||
label matchTransI;
|
label matchTransI;
|
||||||
label sign = matchTransform
|
label sign = matchTransform
|
||||||
@ -447,7 +447,7 @@ Foam::globalIndexAndTransform::globalIndexAndTransform(const polyMesh& mesh)
|
|||||||
forAll(transforms_, i)
|
forAll(transforms_, i)
|
||||||
{
|
{
|
||||||
Info<< '\t' << i << '\t';
|
Info<< '\t' << i << '\t';
|
||||||
const vectorTensorTransform& trafo = transforms_[i];
|
const transformer& trafo = transforms_[i];
|
||||||
if (trafo.hasR())
|
if (trafo.hasR())
|
||||||
{
|
{
|
||||||
Info<< trafo.t() << '\t' << trafo.R();
|
Info<< trafo.t() << '\t' << trafo.R();
|
||||||
@ -480,7 +480,7 @@ Foam::globalIndexAndTransform::globalIndexAndTransform(const polyMesh& mesh)
|
|||||||
forAll(transformPermutations_, i)
|
forAll(transformPermutations_, i)
|
||||||
{
|
{
|
||||||
Info<< '\t' << i << '\t';
|
Info<< '\t' << i << '\t';
|
||||||
const vectorTensorTransform& trafo = transformPermutations_[i];
|
const transformer& trafo = transformPermutations_[i];
|
||||||
if (trafo.hasR())
|
if (trafo.hasR())
|
||||||
{
|
{
|
||||||
Info<< trafo.t() << '\t' << trafo.R();
|
Info<< trafo.t() << '\t' << trafo.R();
|
||||||
|
|||||||
@ -45,7 +45,7 @@ SourceFiles
|
|||||||
#define globalIndexAndTransform_H
|
#define globalIndexAndTransform_H
|
||||||
|
|
||||||
#include "labelPair.H"
|
#include "labelPair.H"
|
||||||
#include "vectorTensorTransform.H"
|
#include "transformer.H"
|
||||||
#include "HashSet.H"
|
#include "HashSet.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -98,13 +98,13 @@ private:
|
|||||||
// stores the two transforms, not the eight permutations.
|
// stores the two transforms, not the eight permutations.
|
||||||
// Any point can not be on more than three transforms but overall
|
// Any point can not be on more than three transforms but overall
|
||||||
// the mesh can have more than three.
|
// the mesh can have more than three.
|
||||||
List<vectorTensorTransform> transforms_;
|
List<transformer> transforms_;
|
||||||
|
|
||||||
//- The permutations of the transforms, stored for lookup
|
//- The permutations of the transforms, stored for lookup
|
||||||
// efficiency. If there are n transforms, then there are
|
// efficiency. If there are n transforms, then there are
|
||||||
// (3^n) permutations, including the no-transformation
|
// (3^n) permutations, including the no-transformation
|
||||||
// transform.
|
// transform.
|
||||||
List<vectorTensorTransform> transformPermutations_;
|
List<transformer> transformPermutations_;
|
||||||
|
|
||||||
//- Index of identity transform.
|
//- Index of identity transform.
|
||||||
label nullTransformIndex_;
|
label nullTransformIndex_;
|
||||||
@ -133,9 +133,9 @@ private:
|
|||||||
// sign of the match, or 0 if none matches.
|
// sign of the match, or 0 if none matches.
|
||||||
label matchTransform
|
label matchTransform
|
||||||
(
|
(
|
||||||
const List<vectorTensorTransform>& refTransforms,
|
const List<transformer>& refTransforms,
|
||||||
label& matchedRefTransformI,
|
label& matchedRefTransformI,
|
||||||
const vectorTensorTransform& testTransform,
|
const transformer& testTransform,
|
||||||
scalar tolerance,
|
scalar tolerance,
|
||||||
bool checkBothSigns
|
bool checkBothSigns
|
||||||
) const;
|
) const;
|
||||||
@ -239,10 +239,10 @@ public:
|
|||||||
inline label nIndependentTransforms() const;
|
inline label nIndependentTransforms() const;
|
||||||
|
|
||||||
//- Return access to the stored independent transforms
|
//- Return access to the stored independent transforms
|
||||||
inline const List<vectorTensorTransform>& transforms() const;
|
inline const List<transformer>& transforms() const;
|
||||||
|
|
||||||
//- Return access to the permuted transforms
|
//- Return access to the permuted transforms
|
||||||
inline const List<vectorTensorTransform>&
|
inline const List<transformer>&
|
||||||
transformPermutations() const;
|
transformPermutations() const;
|
||||||
|
|
||||||
//- Return the transformIndex (index in transformPermutations)
|
//- Return the transformIndex (index in transformPermutations)
|
||||||
@ -254,7 +254,7 @@ public:
|
|||||||
|
|
||||||
//- Access the overall (permuted) transform corresponding
|
//- Access the overall (permuted) transform corresponding
|
||||||
// to the transformIndex
|
// to the transformIndex
|
||||||
inline const vectorTensorTransform& transform
|
inline const transformer& transform
|
||||||
(
|
(
|
||||||
label transformIndex
|
label transformIndex
|
||||||
) const;
|
) const;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -187,7 +187,7 @@ Foam::label Foam::globalIndexAndTransform::addToTransformIndex
|
|||||||
// once +1)
|
// once +1)
|
||||||
bool antiCyclic = false;
|
bool antiCyclic = false;
|
||||||
|
|
||||||
const vectorTensorTransform& vt = transforms_[matchTransI];
|
const transformer& vt = transforms_[matchTransI];
|
||||||
if (mag(vt.t()) < small && vt.hasR())
|
if (mag(vt.t()) < small && vt.hasR())
|
||||||
{
|
{
|
||||||
const tensor& R = vt.R();
|
const tensor& R = vt.R();
|
||||||
@ -374,14 +374,14 @@ Foam::label Foam::globalIndexAndTransform::nIndependentTransforms() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::List<Foam::vectorTensorTransform>&
|
const Foam::List<Foam::transformer>&
|
||||||
Foam::globalIndexAndTransform::transforms() const
|
Foam::globalIndexAndTransform::transforms() const
|
||||||
{
|
{
|
||||||
return transforms_;
|
return transforms_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::List<Foam::vectorTensorTransform>&
|
const Foam::List<Foam::transformer>&
|
||||||
Foam::globalIndexAndTransform::transformPermutations() const
|
Foam::globalIndexAndTransform::transformPermutations() const
|
||||||
{
|
{
|
||||||
return transformPermutations_;
|
return transformPermutations_;
|
||||||
@ -401,7 +401,7 @@ Foam::globalIndexAndTransform::patchTransformSign() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::vectorTensorTransform& Foam::globalIndexAndTransform::transform
|
const Foam::transformer& Foam::globalIndexAndTransform::transform
|
||||||
(
|
(
|
||||||
label transformIndex
|
label transformIndex
|
||||||
) const
|
) const
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -23,16 +23,16 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "vectorTensorTransform.H"
|
#include "transformer.H"
|
||||||
#include "IOstreams.H"
|
#include "IOstreams.H"
|
||||||
#include "OStringStream.H"
|
#include "OStringStream.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
const char* const Foam::vectorTensorTransform::typeName =
|
const char* const Foam::transformer::typeName =
|
||||||
"vectorTensorTransform";
|
"transformer";
|
||||||
|
|
||||||
const Foam::vectorTensorTransform Foam::vectorTensorTransform::zero
|
const Foam::transformer Foam::transformer::zero
|
||||||
(
|
(
|
||||||
Zero,
|
Zero,
|
||||||
Zero,
|
Zero,
|
||||||
@ -40,7 +40,7 @@ const Foam::vectorTensorTransform Foam::vectorTensorTransform::zero
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
const Foam::vectorTensorTransform Foam::vectorTensorTransform::I
|
const Foam::transformer Foam::transformer::I
|
||||||
(
|
(
|
||||||
Zero,
|
Zero,
|
||||||
sphericalTensor::I,
|
sphericalTensor::I,
|
||||||
@ -50,7 +50,7 @@ const Foam::vectorTensorTransform Foam::vectorTensorTransform::I
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::vectorTensorTransform::vectorTensorTransform(Istream& is)
|
Foam::transformer::transformer(Istream& is)
|
||||||
{
|
{
|
||||||
is >> *this;
|
is >> *this;
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ Foam::vectorTensorTransform::vectorTensorTransform(Istream& is)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::word Foam::name(const vectorTensorTransform& s)
|
Foam::word Foam::name(const transformer& s)
|
||||||
{
|
{
|
||||||
OStringStream buf;
|
OStringStream buf;
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Foam::word Foam::name(const vectorTensorTransform& s)
|
|||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
Foam::tmp<Foam::Field<bool>> Foam::vectorTensorTransform::transform
|
Foam::tmp<Foam::Field<bool>> Foam::transformer::transform
|
||||||
(
|
(
|
||||||
const Field<bool>& fld
|
const Field<bool>& fld
|
||||||
) const
|
) const
|
||||||
@ -77,7 +77,7 @@ Foam::tmp<Foam::Field<bool>> Foam::vectorTensorTransform::transform
|
|||||||
return fld;
|
return fld;
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
Foam::tmp<Foam::Field<Foam::label>> Foam::vectorTensorTransform::transform
|
Foam::tmp<Foam::Field<Foam::label>> Foam::transformer::transform
|
||||||
(
|
(
|
||||||
const Field<label>& fld
|
const Field<label>& fld
|
||||||
) const
|
) const
|
||||||
@ -85,7 +85,7 @@ Foam::tmp<Foam::Field<Foam::label>> Foam::vectorTensorTransform::transform
|
|||||||
return fld;
|
return fld;
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
Foam::tmp<Foam::Field<Foam::scalar>> Foam::vectorTensorTransform::transform
|
Foam::tmp<Foam::Field<Foam::scalar>> Foam::transformer::transform
|
||||||
(
|
(
|
||||||
const Field<scalar>& fld
|
const Field<scalar>& fld
|
||||||
) const
|
) const
|
||||||
@ -96,24 +96,24 @@ Foam::tmp<Foam::Field<Foam::scalar>> Foam::vectorTensorTransform::transform
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Istream& Foam::operator>>(Istream& is, vectorTensorTransform& tr)
|
Foam::Istream& Foam::operator>>(Istream& is, transformer& tr)
|
||||||
{
|
{
|
||||||
// Read beginning of vectorTensorTransform
|
// Read beginning of transformer
|
||||||
is.readBegin("vectorTensorTransform");
|
is.readBegin("transformer");
|
||||||
|
|
||||||
is >> tr.t_ >> tr.R_ >> tr.hasR_;
|
is >> tr.t_ >> tr.R_ >> tr.hasR_;
|
||||||
|
|
||||||
// Read end of vectorTensorTransform
|
// Read end of transformer
|
||||||
is.readEnd("vectorTensorTransform");
|
is.readEnd("transformer");
|
||||||
|
|
||||||
// Check state of Istream
|
// Check state of Istream
|
||||||
is.check("operator>>(Istream&, vectorTensorTransform&)");
|
is.check("operator>>(Istream&, transformer&)");
|
||||||
|
|
||||||
return is;
|
return is;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const vectorTensorTransform& tr)
|
Foam::Ostream& Foam::operator<<(Ostream& os, const transformer& tr)
|
||||||
{
|
{
|
||||||
os << token::BEGIN_LIST
|
os << token::BEGIN_LIST
|
||||||
<< tr.t() << token::SPACE << tr.R() << token::SPACE << tr.hasR()
|
<< tr.t() << token::SPACE << tr.R() << token::SPACE << tr.hasR()
|
||||||
@ -22,21 +22,21 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::vectorTensorTransform
|
Foam::transformer
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Vector-tensor class used to perform translations and rotations in
|
Vector-tensor class used to perform translations and rotations in
|
||||||
3D space.
|
3D space.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
vectorTensorTransformI.H
|
transformerI.H
|
||||||
vectorTensorTransform.C
|
transformer.C
|
||||||
vectorTensorTransformTemplates.C
|
transformerTemplates.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef vectorTensorTransform_H
|
#ifndef transformer_H
|
||||||
#define vectorTensorTransform_H
|
#define transformer_H
|
||||||
|
|
||||||
#include "tensor.H"
|
#include "tensor.H"
|
||||||
#include "word.H"
|
#include "word.H"
|
||||||
@ -51,16 +51,16 @@ namespace Foam
|
|||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
// Forward declaration of friend functions and operators
|
||||||
|
|
||||||
class vectorTensorTransform;
|
class transformer;
|
||||||
Istream& operator>>(Istream& is, vectorTensorTransform&);
|
Istream& operator>>(Istream& is, transformer&);
|
||||||
Ostream& operator<<(Ostream& os, const vectorTensorTransform& C);
|
Ostream& operator<<(Ostream& os, const transformer& C);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class vectorTensorTransform Declaration
|
Class transformer Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class vectorTensorTransform
|
class transformer
|
||||||
{
|
{
|
||||||
// private data
|
// private data
|
||||||
|
|
||||||
@ -82,35 +82,35 @@ public:
|
|||||||
|
|
||||||
static const char* const typeName;
|
static const char* const typeName;
|
||||||
|
|
||||||
static const vectorTensorTransform zero;
|
static const transformer zero;
|
||||||
|
|
||||||
static const vectorTensorTransform I;
|
static const transformer I;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct null
|
//- Construct null
|
||||||
inline vectorTensorTransform();
|
inline transformer();
|
||||||
|
|
||||||
//- Construct given a translation vector, rotation tensor and
|
//- Construct given a translation vector, rotation tensor and
|
||||||
// hasR bool
|
// hasR bool
|
||||||
inline vectorTensorTransform
|
inline transformer
|
||||||
(
|
(
|
||||||
const vector& t,
|
const vector& t,
|
||||||
const tensor& R,
|
const tensor& R,
|
||||||
bool hasR = true
|
bool hasR = true
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct a pure translation vectorTensorTransform given a
|
//- Construct a pure translation transformer given a
|
||||||
// translation vector
|
// translation vector
|
||||||
inline explicit vectorTensorTransform(const vector& t);
|
inline explicit transformer(const vector& t);
|
||||||
|
|
||||||
//- Construct a pure rotation vectorTensorTransform given a
|
//- Construct a pure rotation transformer given a
|
||||||
// rotation tensor
|
// rotation tensor
|
||||||
inline explicit vectorTensorTransform(const tensor& R);
|
inline explicit transformer(const tensor& R);
|
||||||
|
|
||||||
//- Construct from Istream
|
//- Construct from Istream
|
||||||
vectorTensorTransform(Istream&);
|
transformer(Istream&);
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
@ -164,7 +164,7 @@ public:
|
|||||||
|
|
||||||
// Member Operators
|
// Member Operators
|
||||||
|
|
||||||
inline void operator&=(const vectorTensorTransform&);
|
inline void operator&=(const transformer&);
|
||||||
|
|
||||||
inline void operator=(const vector&);
|
inline void operator=(const vector&);
|
||||||
inline void operator+=(const vector&);
|
inline void operator+=(const vector&);
|
||||||
@ -176,33 +176,33 @@ public:
|
|||||||
|
|
||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
|
||||||
friend Istream& operator>>(Istream& is, vectorTensorTransform&);
|
friend Istream& operator>>(Istream& is, transformer&);
|
||||||
|
|
||||||
friend Ostream& operator<<(Ostream& os, const vectorTensorTransform&);
|
friend Ostream& operator<<(Ostream& os, const transformer&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
//- Return the inverse of the given vectorTensorTransform
|
//- Return the inverse of the given transformer
|
||||||
inline vectorTensorTransform inv(const vectorTensorTransform& tr);
|
inline transformer inv(const transformer& tr);
|
||||||
|
|
||||||
|
|
||||||
//- Return a string representation of a vectorTensorTransform
|
//- Return a string representation of a transformer
|
||||||
word name(const vectorTensorTransform&);
|
word name(const transformer&);
|
||||||
|
|
||||||
|
|
||||||
//- Data associated with vectorTensorTransform type are contiguous
|
//- Data associated with transformer type are contiguous
|
||||||
template<>
|
template<>
|
||||||
inline bool contiguous<vectorTensorTransform>() {return true;}
|
inline bool contiguous<transformer>() {return true;}
|
||||||
|
|
||||||
//- Template specialisations
|
//- Template specialisations
|
||||||
template<>
|
template<>
|
||||||
tmp<Field<bool>> vectorTensorTransform::transform(const Field<bool>&) const;
|
tmp<Field<bool>> transformer::transform(const Field<bool>&) const;
|
||||||
template<>
|
template<>
|
||||||
tmp<Field<label>> vectorTensorTransform::transform(const Field<label>&) const;
|
tmp<Field<label>> transformer::transform(const Field<label>&) const;
|
||||||
template<>
|
template<>
|
||||||
tmp<Field<scalar>> vectorTensorTransform::transform(const Field<scalar>&)
|
tmp<Field<scalar>> transformer::transform(const Field<scalar>&)
|
||||||
const;
|
const;
|
||||||
|
|
||||||
|
|
||||||
@ -210,44 +210,44 @@ const;
|
|||||||
|
|
||||||
inline bool operator==
|
inline bool operator==
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
inline bool operator!=
|
inline bool operator!=
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
inline vectorTensorTransform operator+
|
inline transformer operator+
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr,
|
const transformer& tr,
|
||||||
const vector& t
|
const vector& t
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
inline vectorTensorTransform operator+
|
inline transformer operator+
|
||||||
(
|
(
|
||||||
const vector& t,
|
const vector& t,
|
||||||
const vectorTensorTransform& tr
|
const transformer& tr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
inline vectorTensorTransform operator-
|
inline transformer operator-
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr,
|
const transformer& tr,
|
||||||
const vector& t
|
const vector& t
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
inline vectorTensorTransform operator&
|
inline transformer operator&
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -257,10 +257,10 @@ inline vectorTensorTransform operator&
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "vectorTensorTransformI.H"
|
#include "transformerI.H"
|
||||||
|
|
||||||
#ifdef NoRepository
|
#ifdef NoRepository
|
||||||
#include "vectorTensorTransformTemplates.C"
|
#include "transformerTemplates.C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -25,7 +25,7 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform::vectorTensorTransform()
|
inline Foam::transformer::transformer()
|
||||||
:
|
:
|
||||||
t_(Zero),
|
t_(Zero),
|
||||||
R_(sphericalTensor::I),
|
R_(sphericalTensor::I),
|
||||||
@ -33,7 +33,7 @@ inline Foam::vectorTensorTransform::vectorTensorTransform()
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform::vectorTensorTransform
|
inline Foam::transformer::transformer
|
||||||
(
|
(
|
||||||
const vector& t,
|
const vector& t,
|
||||||
const tensor& R,
|
const tensor& R,
|
||||||
@ -46,7 +46,7 @@ inline Foam::vectorTensorTransform::vectorTensorTransform
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform::vectorTensorTransform(const vector& t)
|
inline Foam::transformer::transformer(const vector& t)
|
||||||
:
|
:
|
||||||
t_(t),
|
t_(t),
|
||||||
R_(sphericalTensor::I),
|
R_(sphericalTensor::I),
|
||||||
@ -54,7 +54,7 @@ inline Foam::vectorTensorTransform::vectorTensorTransform(const vector& t)
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform::vectorTensorTransform(const tensor& R)
|
inline Foam::transformer::transformer(const tensor& R)
|
||||||
:
|
:
|
||||||
t_(Zero),
|
t_(Zero),
|
||||||
R_(R),
|
R_(R),
|
||||||
@ -64,31 +64,31 @@ inline Foam::vectorTensorTransform::vectorTensorTransform(const tensor& R)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline const Foam::vector& Foam::vectorTensorTransform::t() const
|
inline const Foam::vector& Foam::transformer::t() const
|
||||||
{
|
{
|
||||||
return t_;
|
return t_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::tensor& Foam::vectorTensorTransform::R() const
|
inline const Foam::tensor& Foam::transformer::R() const
|
||||||
{
|
{
|
||||||
return R_;
|
return R_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool Foam::vectorTensorTransform::hasR() const
|
inline bool Foam::transformer::hasR() const
|
||||||
{
|
{
|
||||||
return hasR_;
|
return hasR_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vector& Foam::vectorTensorTransform::t()
|
inline Foam::vector& Foam::transformer::t()
|
||||||
{
|
{
|
||||||
return t_;
|
return t_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::tensor& Foam::vectorTensorTransform::R()
|
inline Foam::tensor& Foam::transformer::R()
|
||||||
{
|
{
|
||||||
// Assume that non-const access to R changes it from I, so set
|
// Assume that non-const access to R changes it from I, so set
|
||||||
// hasR to true
|
// hasR to true
|
||||||
@ -99,7 +99,7 @@ inline Foam::tensor& Foam::vectorTensorTransform::R()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vector Foam::vectorTensorTransform::transformPosition
|
inline Foam::vector Foam::transformer::transformPosition
|
||||||
(
|
(
|
||||||
const vector& v
|
const vector& v
|
||||||
) const
|
) const
|
||||||
@ -115,7 +115,7 @@ inline Foam::vector Foam::vectorTensorTransform::transformPosition
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::pointField Foam::vectorTensorTransform::transformPosition
|
inline Foam::pointField Foam::transformer::transformPosition
|
||||||
(
|
(
|
||||||
const pointField& pts
|
const pointField& pts
|
||||||
) const
|
) const
|
||||||
@ -134,7 +134,7 @@ inline Foam::pointField Foam::vectorTensorTransform::transformPosition
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vector Foam::vectorTensorTransform::invTransformPosition
|
inline Foam::vector Foam::transformer::invTransformPosition
|
||||||
(
|
(
|
||||||
const vector& v
|
const vector& v
|
||||||
) const
|
) const
|
||||||
@ -150,7 +150,7 @@ inline Foam::vector Foam::vectorTensorTransform::invTransformPosition
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::pointField Foam::vectorTensorTransform::invTransformPosition
|
inline Foam::pointField Foam::transformer::invTransformPosition
|
||||||
(
|
(
|
||||||
const pointField& pts
|
const pointField& pts
|
||||||
) const
|
) const
|
||||||
@ -171,9 +171,9 @@ inline Foam::pointField Foam::vectorTensorTransform::invTransformPosition
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator&=
|
inline void Foam::transformer::operator&=
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr
|
const transformer& tr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
t_ += tr.t_;
|
t_ += tr.t_;
|
||||||
@ -185,25 +185,25 @@ inline void Foam::vectorTensorTransform::operator&=
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator=(const vector& t)
|
inline void Foam::transformer::operator=(const vector& t)
|
||||||
{
|
{
|
||||||
t_ = t;
|
t_ = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator+=(const vector& t)
|
inline void Foam::transformer::operator+=(const vector& t)
|
||||||
{
|
{
|
||||||
t_ += t;
|
t_ += t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator-=(const vector& t)
|
inline void Foam::transformer::operator-=(const vector& t)
|
||||||
{
|
{
|
||||||
t_ -= t;
|
t_ -= t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator=(const tensor& R)
|
inline void Foam::transformer::operator=(const tensor& R)
|
||||||
{
|
{
|
||||||
hasR_ = true;
|
hasR_ = true;
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ inline void Foam::vectorTensorTransform::operator=(const tensor& R)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline void Foam::vectorTensorTransform::operator&=(const tensor& R)
|
inline void Foam::transformer::operator&=(const tensor& R)
|
||||||
{
|
{
|
||||||
hasR_ = true;
|
hasR_ = true;
|
||||||
|
|
||||||
@ -221,9 +221,9 @@ inline void Foam::vectorTensorTransform::operator&=(const tensor& R)
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform Foam::inv(const vectorTensorTransform& tr)
|
inline Foam::transformer Foam::inv(const transformer& tr)
|
||||||
{
|
{
|
||||||
return vectorTensorTransform(-tr.t(), tr.R().T(), tr.hasR());
|
return transformer(-tr.t(), tr.R().T(), tr.hasR());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -231,8 +231,8 @@ inline Foam::vectorTensorTransform Foam::inv(const vectorTensorTransform& tr)
|
|||||||
|
|
||||||
inline bool Foam::operator==
|
inline bool Foam::operator==
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (tr1.t() == tr2.t() && tr1.R() == tr2.R());
|
return (tr1.t() == tr2.t() && tr1.R() == tr2.R());
|
||||||
@ -241,51 +241,51 @@ inline bool Foam::operator==
|
|||||||
|
|
||||||
inline bool Foam::operator!=
|
inline bool Foam::operator!=
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return !operator==(tr1, tr2);
|
return !operator==(tr1, tr2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform Foam::operator+
|
inline Foam::transformer Foam::operator+
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr,
|
const transformer& tr,
|
||||||
const vector& t
|
const vector& t
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return vectorTensorTransform(tr.t() + t, tr.R(), tr.hasR());
|
return transformer(tr.t() + t, tr.R(), tr.hasR());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform Foam::operator+
|
inline Foam::transformer Foam::operator+
|
||||||
(
|
(
|
||||||
const vector& t,
|
const vector& t,
|
||||||
const vectorTensorTransform& tr
|
const transformer& tr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return vectorTensorTransform(t + tr.t(), tr.R(), tr.hasR());
|
return transformer(t + tr.t(), tr.R(), tr.hasR());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform Foam::operator-
|
inline Foam::transformer Foam::operator-
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr,
|
const transformer& tr,
|
||||||
const vector& t
|
const vector& t
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return vectorTensorTransform(tr.t() - t, tr.R(), tr.hasR());
|
return transformer(tr.t() - t, tr.R(), tr.hasR());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::vectorTensorTransform Foam::operator&
|
inline Foam::transformer Foam::operator&
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& tr1,
|
const transformer& tr1,
|
||||||
const vectorTensorTransform& tr2
|
const transformer& tr2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return vectorTensorTransform
|
return transformer
|
||||||
(
|
(
|
||||||
tr1.t() + tr2.t(),
|
tr1.t() + tr2.t(),
|
||||||
tr1.R() & tr2.R(),
|
tr1.R() & tr2.R(),
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -26,7 +26,7 @@ License
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::vectorTensorTransform::transform(const Type& x) const
|
Type Foam::transformer::transform(const Type& x) const
|
||||||
{
|
{
|
||||||
if (hasR_)
|
if (hasR_)
|
||||||
{
|
{
|
||||||
@ -40,7 +40,7 @@ Type Foam::vectorTensorTransform::transform(const Type& x) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::vectorTensorTransform::transform
|
Foam::tmp<Foam::Field<Type>> Foam::transformer::transform
|
||||||
(
|
(
|
||||||
const Field<Type>& fld
|
const Field<Type>& fld
|
||||||
) const
|
) const
|
||||||
@ -57,7 +57,7 @@ Foam::tmp<Foam::Field<Type>> Foam::vectorTensorTransform::transform
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Type Foam::vectorTensorTransform::invTransform(const Type& x) const
|
Type Foam::transformer::invTransform(const Type& x) const
|
||||||
{
|
{
|
||||||
if (hasR_)
|
if (hasR_)
|
||||||
{
|
{
|
||||||
@ -71,7 +71,7 @@ Type Foam::vectorTensorTransform::invTransform(const Type& x) const
|
|||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::tmp<Foam::Field<Type>> Foam::vectorTensorTransform::invTransform
|
Foam::tmp<Foam::Field<Type>> Foam::transformer::invTransform
|
||||||
(
|
(
|
||||||
const Field<Type>& fld
|
const Field<Type>& fld
|
||||||
) const
|
) const
|
||||||
@ -96,9 +96,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- Return a reference to the AMI transformations
|
//- Return a reference to the AMI transformations
|
||||||
virtual const List<vectorTensorTransform>& AMITransforms() const
|
virtual const List<transformer>& AMITransforms() const
|
||||||
{
|
{
|
||||||
const List<vectorTensorTransform>& AMITransforms =
|
const List<transformer>& AMITransforms =
|
||||||
cyclicAMIFvPatch::AMITransforms();
|
cyclicAMIFvPatch::AMITransforms();
|
||||||
|
|
||||||
updateAreas();
|
updateAreas();
|
||||||
|
|||||||
@ -128,7 +128,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//- Return a reference to the AMI transforms
|
//- Return a reference to the AMI transforms
|
||||||
virtual const List<vectorTensorTransform>& AMITransforms() const
|
virtual const List<transformer>& AMITransforms() const
|
||||||
{
|
{
|
||||||
return cyclicAMIPolyPatch_.AMITransforms();
|
return cyclicAMIPolyPatch_.AMITransforms();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -186,7 +186,7 @@ void Foam::InteractionLists<ParticleType>::buildInteractionLists()
|
|||||||
{
|
{
|
||||||
const labelPair& ciat = cellIAndTToExchange[bbI];
|
const labelPair& ciat = cellIAndTToExchange[bbI];
|
||||||
|
|
||||||
const vectorTensorTransform& transform = globalTransforms.transform
|
const transformer& transform = globalTransforms.transform
|
||||||
(
|
(
|
||||||
globalTransforms.transformIndex(ciat)
|
globalTransforms.transformIndex(ciat)
|
||||||
);
|
);
|
||||||
@ -403,7 +403,7 @@ void Foam::InteractionLists<ParticleType>::buildInteractionLists()
|
|||||||
{
|
{
|
||||||
const labelPair& wfiat = wallFaceIAndTToExchange[bbI];
|
const labelPair& wfiat = wallFaceIAndTToExchange[bbI];
|
||||||
|
|
||||||
const vectorTensorTransform& transform = globalTransforms.transform
|
const transformer& transform = globalTransforms.transform
|
||||||
(
|
(
|
||||||
globalTransforms.transformIndex(wfiat)
|
globalTransforms.transformIndex(wfiat)
|
||||||
);
|
);
|
||||||
@ -533,7 +533,7 @@ void Foam::InteractionLists<ParticleType>::buildInteractionLists()
|
|||||||
|
|
||||||
label wallFaceIndex = globalTransforms.index(wfiat);
|
label wallFaceIndex = globalTransforms.index(wfiat);
|
||||||
|
|
||||||
const vectorTensorTransform& transform = globalTransforms.transform
|
const transformer& transform = globalTransforms.transform
|
||||||
(
|
(
|
||||||
globalTransforms.transformIndex(wfiat)
|
globalTransforms.transformIndex(wfiat)
|
||||||
);
|
);
|
||||||
@ -700,7 +700,7 @@ void Foam::InteractionLists<ParticleType>::findExtendedProcBbsInRange
|
|||||||
permutationIndices
|
permutationIndices
|
||||||
);
|
);
|
||||||
|
|
||||||
const vectorTensorTransform& transform =
|
const transformer& transform =
|
||||||
globalTransforms.transform(transI);
|
globalTransforms.transform(transI);
|
||||||
|
|
||||||
treeBoundBox extendedReferredProcBb
|
treeBoundBox extendedReferredProcBb
|
||||||
@ -747,7 +747,7 @@ void Foam::InteractionLists<ParticleType>::findExtendedProcBbsInRange
|
|||||||
permutationIndices
|
permutationIndices
|
||||||
);
|
);
|
||||||
|
|
||||||
const vectorTensorTransform& transform =
|
const transformer& transform =
|
||||||
globalTransforms.transform(transI);
|
globalTransforms.transform(transI);
|
||||||
|
|
||||||
treeBoundBox extendedReferredProcBb
|
treeBoundBox extendedReferredProcBb
|
||||||
@ -790,7 +790,7 @@ void Foam::InteractionLists<ParticleType>::findExtendedProcBbsInRange
|
|||||||
permutationIndices
|
permutationIndices
|
||||||
);
|
);
|
||||||
|
|
||||||
const vectorTensorTransform& transform =
|
const transformer& transform =
|
||||||
globalTransforms.transform(transI);
|
globalTransforms.transform(transI);
|
||||||
|
|
||||||
treeBoundBox extendedReferredProcBb
|
treeBoundBox extendedReferredProcBb
|
||||||
@ -958,7 +958,7 @@ void Foam::InteractionLists<ParticleType>::prepareParticleToBeReferred
|
|||||||
const globalIndexAndTransform& globalTransforms =
|
const globalIndexAndTransform& globalTransforms =
|
||||||
mesh_.globalData().globalTransforms();
|
mesh_.globalData().globalTransforms();
|
||||||
|
|
||||||
const vectorTensorTransform& transform = globalTransforms.transform
|
const transformer& transform = globalTransforms.transform
|
||||||
(
|
(
|
||||||
globalTransforms.transformIndex(ciat)
|
globalTransforms.transformIndex(ciat)
|
||||||
);
|
);
|
||||||
@ -1008,7 +1008,7 @@ void Foam::InteractionLists<ParticleType>::prepareWallDataToRefer()
|
|||||||
|
|
||||||
label wallFaceIndex = globalTransforms.index(wfiat);
|
label wallFaceIndex = globalTransforms.index(wfiat);
|
||||||
|
|
||||||
const vectorTensorTransform& transform = globalTransforms.transform
|
const transformer& transform = globalTransforms.transform
|
||||||
(
|
(
|
||||||
globalTransforms.transformIndex(wfiat)
|
globalTransforms.transformIndex(wfiat)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1097,7 +1097,7 @@ void Foam::particle::correctAfterParallelTransfer
|
|||||||
|
|
||||||
void Foam::particle::prepareForInteractionListReferral
|
void Foam::particle::prepareForInteractionListReferral
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& transform
|
const transformer& transform
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Get the transformed position
|
// Get the transformed position
|
||||||
|
|||||||
@ -44,7 +44,7 @@ Description
|
|||||||
#include "FixedList.H"
|
#include "FixedList.H"
|
||||||
#include "polyMeshTetDecomposition.H"
|
#include "polyMeshTetDecomposition.H"
|
||||||
#include "particleMacros.H"
|
#include "particleMacros.H"
|
||||||
#include "vectorTensorTransform.H"
|
#include "transformer.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -648,7 +648,7 @@ public:
|
|||||||
// particle can be referred.
|
// particle can be referred.
|
||||||
void prepareForInteractionListReferral
|
void prepareForInteractionListReferral
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& transform
|
const transformer& transform
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Correct the topology after referral. The particle may still be
|
//- Correct the topology after referral. The particle may still be
|
||||||
|
|||||||
@ -359,7 +359,7 @@ void Foam::particle::hitCyclicAMIPatch
|
|||||||
// Transform the properties
|
// Transform the properties
|
||||||
vector displacementT = displacement;
|
vector displacementT = displacement;
|
||||||
|
|
||||||
const vectorTensorTransform AMITransform =
|
const transformer AMITransform =
|
||||||
receiveCpp.owner()
|
receiveCpp.owner()
|
||||||
? receiveCpp.AMITransforms()[receiveAMIi]
|
? receiveCpp.AMITransforms()[receiveAMIi]
|
||||||
: inv(cpp.AMITransforms()[receiveAMIi]);
|
: inv(cpp.AMITransforms()[receiveAMIi]);
|
||||||
|
|||||||
@ -62,7 +62,7 @@ class cyclicAMIGAMGInterface
|
|||||||
PtrList<AMIInterpolation> AMIs_;
|
PtrList<AMIInterpolation> AMIs_;
|
||||||
|
|
||||||
//- AMI transformations
|
//- AMI transformations
|
||||||
List<vectorTensorTransform> AMITransforms_;
|
List<transformer> AMITransforms_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -136,7 +136,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return a reference to the AMI transformations
|
// Return a reference to the AMI transformations
|
||||||
virtual const List<vectorTensorTransform>& AMITransforms() const
|
virtual const List<transformer>& AMITransforms() const
|
||||||
{
|
{
|
||||||
return AMITransforms_;
|
return AMITransforms_;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,7 +84,7 @@ public:
|
|||||||
virtual const PtrList<AMIInterpolation>& AMIs() const = 0;
|
virtual const PtrList<AMIInterpolation>& AMIs() const = 0;
|
||||||
|
|
||||||
// Return a reference to the AMI transformations
|
// Return a reference to the AMI transformations
|
||||||
virtual const List<vectorTensorTransform>&
|
virtual const List<transformer>&
|
||||||
AMITransforms() const = 0;
|
AMITransforms() const = 0;
|
||||||
|
|
||||||
//- Return face transformation tensor
|
//- Return face transformation tensor
|
||||||
|
|||||||
@ -340,7 +340,7 @@ void Foam::cyclicAMIPolyPatch::resetAMI() const
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
AMITransforms_.resize(1, vectorTensorTransform::I);
|
AMITransforms_.resize(1, transformer::I);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
@ -818,7 +818,7 @@ Foam::cyclicAMIPolyPatch::AMIs() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const Foam::List<Foam::vectorTensorTransform>&
|
const Foam::List<Foam::transformer>&
|
||||||
Foam::cyclicAMIPolyPatch::AMITransforms() const
|
Foam::cyclicAMIPolyPatch::AMITransforms() const
|
||||||
{
|
{
|
||||||
if (!owner())
|
if (!owner())
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration | Website: https://openfoam.org
|
\\ / O peration | Website: https://openfoam.org
|
||||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -109,7 +109,7 @@ protected:
|
|||||||
mutable PtrList<AMIInterpolation> AMIs_;
|
mutable PtrList<AMIInterpolation> AMIs_;
|
||||||
|
|
||||||
//- AMI transforms (from source to target)
|
//- AMI transforms (from source to target)
|
||||||
mutable List<vectorTensorTransform> AMITransforms_;
|
mutable List<transformer> AMITransforms_;
|
||||||
|
|
||||||
//- Flag to indicate that slave patch should be reversed for AMI
|
//- Flag to indicate that slave patch should be reversed for AMI
|
||||||
const bool AMIReverse_;
|
const bool AMIReverse_;
|
||||||
@ -310,7 +310,7 @@ public:
|
|||||||
const PtrList<AMIInterpolation>& AMIs() const;
|
const PtrList<AMIInterpolation>& AMIs() const;
|
||||||
|
|
||||||
//- Return a reference to the AMI transforms
|
//- Return a reference to the AMI transforms
|
||||||
const List<vectorTensorTransform>& AMITransforms() const;
|
const List<transformer>& AMITransforms() const;
|
||||||
|
|
||||||
//- Return true if applying the low weight correction
|
//- Return true if applying the low weight correction
|
||||||
bool applyLowWeightCorrection() const;
|
bool applyLowWeightCorrection() const;
|
||||||
|
|||||||
@ -87,7 +87,7 @@ void Foam::cyclicRepeatAMIPolyPatch::resetAMI() const
|
|||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
// Get the transform associated with the transform patch
|
// Get the transform associated with the transform patch
|
||||||
vectorTensorTransform t;
|
transformer t;
|
||||||
{
|
{
|
||||||
const coupledPolyPatch& transformPatch = this->transformPatch();
|
const coupledPolyPatch& transformPatch = this->transformPatch();
|
||||||
|
|
||||||
@ -100,10 +100,10 @@ void Foam::cyclicRepeatAMIPolyPatch::resetAMI() const
|
|||||||
<< "This is not allowed." << exit(FatalError);
|
<< "This is not allowed." << exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tuple2<bool, vectorTensorTransform> bt
|
Tuple2<bool, transformer> bt
|
||||||
(
|
(
|
||||||
transformPatch.size(),
|
transformPatch.size(),
|
||||||
vectorTensorTransform
|
transformer
|
||||||
(
|
(
|
||||||
transformPatch.separated()
|
transformPatch.separated()
|
||||||
? transformPatch.separation()
|
? transformPatch.separation()
|
||||||
@ -115,7 +115,7 @@ void Foam::cyclicRepeatAMIPolyPatch::resetAMI() const
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
reduce(bt, keepIfTrueOp<vectorTensorTransform>());
|
reduce(bt, keepIfTrueOp<transformer>());
|
||||||
|
|
||||||
if (!bt.first())
|
if (!bt.first())
|
||||||
{
|
{
|
||||||
@ -130,7 +130,7 @@ void Foam::cyclicRepeatAMIPolyPatch::resetAMI() const
|
|||||||
|
|
||||||
t = bt.second();
|
t = bt.second();
|
||||||
}
|
}
|
||||||
const vectorTensorTransform tInv(inv(t));
|
const transformer tInv(inv(t));
|
||||||
|
|
||||||
// Work out the number of repetitions of the transform that separate this
|
// Work out the number of repetitions of the transform that separate this
|
||||||
// patch from its neighbour
|
// patch from its neighbour
|
||||||
@ -172,7 +172,7 @@ void Foam::cyclicRepeatAMIPolyPatch::resetAMI() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate the full transformations
|
// Generate the full transformations
|
||||||
vectorTensorTransform TLeft(t), T(vectorTensorTransform::I), TRight(tInv);
|
transformer TLeft(t), T(transformer::I), TRight(tInv);
|
||||||
if (n > 0)
|
if (n > 0)
|
||||||
{
|
{
|
||||||
for (label i = 0; i < n - 1; ++ i)
|
for (label i = 0; i < n - 1; ++ i)
|
||||||
|
|||||||
@ -472,7 +472,7 @@ void Foam::FaceCellWave<Type, TrackingData>::transform
|
|||||||
template<class Type, class TrackingData>
|
template<class Type, class TrackingData>
|
||||||
void Foam::FaceCellWave<Type, TrackingData>::transform
|
void Foam::FaceCellWave<Type, TrackingData>::transform
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& trans,
|
const transformer& trans,
|
||||||
const label nFaces,
|
const label nFaces,
|
||||||
List<Type>& faceInfo
|
List<Type>& faceInfo
|
||||||
)
|
)
|
||||||
|
|||||||
@ -60,7 +60,7 @@ namespace Foam
|
|||||||
// Forward declaration of classes
|
// Forward declaration of classes
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
class polyPatch;
|
class polyPatch;
|
||||||
class vectorTensorTransform;
|
class transformer;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class FaceCellWaveName Declaration
|
Class FaceCellWaveName Declaration
|
||||||
@ -223,7 +223,7 @@ protected:
|
|||||||
//- Apply transformation to Type
|
//- Apply transformation to Type
|
||||||
void transform
|
void transform
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& trans,
|
const transformer& trans,
|
||||||
const label nFaces,
|
const label nFaces,
|
||||||
List<Type>& faceInfo
|
List<Type>& faceInfo
|
||||||
);
|
);
|
||||||
|
|||||||
@ -40,7 +40,7 @@ SourceFiles
|
|||||||
#include "scalarField.H"
|
#include "scalarField.H"
|
||||||
#include "PackedBoolList.H"
|
#include "PackedBoolList.H"
|
||||||
#include "PrimitivePatch.H"
|
#include "PrimitivePatch.H"
|
||||||
#include "vectorTensorTransform.H"
|
#include "transformer.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ public:
|
|||||||
|
|
||||||
void operator()
|
void operator()
|
||||||
(
|
(
|
||||||
const vectorTensorTransform& vt,
|
const transformer& vt,
|
||||||
const bool forward,
|
const bool forward,
|
||||||
List<Type>& fld
|
List<Type>& fld
|
||||||
) const
|
) const
|
||||||
|
|||||||
Reference in New Issue
Block a user