diff --git a/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2D.H b/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2D.H
new file mode 100644
index 0000000000..9923ab7db1
--- /dev/null
+++ b/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2D.H
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 .
+
+Class
+ Foam::BarycentricTensor2D
+
+Description
+ Templated 3x3 tensor derived from VectorSpace. Has 9 components. Can
+ represent a barycentric transformation as a matrix-barycentric inner-
+ product. Can alternatively represent an inverse barycentric transformation
+ as a vector-matrix inner-product.
+
+SourceFiles
+ BarycentricTensor2DI.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef BarycentricTensor2D_H
+#define BarycentricTensor2D_H
+
+#include "Barycentric2D.H"
+#include "Tensor2D.H"
+#include "Vector.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class BarycentricTensor2D Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class BarycentricTensor2D
+:
+ public MatrixSpace, Cmpt, 3, 3>
+{
+public:
+
+ //- Equivalent type of labels used for valid component indexing
+ typedef Tensor2D labelType;
+
+
+ // Member constants
+
+ //- Rank of BarycentricTensor2D is 2
+ static const direction rank = 2;
+
+
+ //- Component labeling enumeration
+ enum components { XA, XB, XC, YA, YB, YC, ZA, ZB, ZC };
+
+
+ // Constructors
+
+ //- Construct null
+ BarycentricTensor2D();
+
+ //- Construct initialised to zero
+ BarycentricTensor2D(const Foam::zero);
+
+ //- Construct given three barycentric components (rows)
+ BarycentricTensor2D
+ (
+ const Barycentric2D& x,
+ const Barycentric2D& y,
+ const Barycentric2D& z
+ );
+
+ //- Construct given three vector components (columns)
+ BarycentricTensor2D
+ (
+ const Vector& a,
+ const Vector& b,
+ const Vector& c
+ );
+
+
+ // Member Functions
+
+ // Row-barycentric access
+
+ inline Barycentric2D x() const;
+ inline Barycentric2D y() const;
+ inline Barycentric2D z() const;
+
+ // Column-vector access
+
+ inline Vector a() const;
+ inline Vector b() const;
+ inline Vector c() const;
+};
+
+
+template
+class typeOfTranspose>
+{
+public:
+
+ typedef void type;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "BarycentricTensor2DI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2DI.H b/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2DI.H
new file mode 100644
index 0000000000..e4046fb9f2
--- /dev/null
+++ b/src/OpenFOAM/primitives/Barycentric2D/BarycentricTensor2DI.H
@@ -0,0 +1,179 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 .
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+inline Foam::BarycentricTensor2D::BarycentricTensor2D()
+{}
+
+
+template
+inline Foam::BarycentricTensor2D::BarycentricTensor2D(const Foam::zero)
+:
+ BarycentricTensor2D::msType(Zero)
+{}
+
+
+template
+inline Foam::BarycentricTensor2D::BarycentricTensor2D
+(
+ const Barycentric2D& x,
+ const Barycentric2D& y,
+ const Barycentric2D& z
+)
+{
+ this->v_[XA] = x.a();
+ this->v_[XB] = x.b();
+ this->v_[XC] = x.c();
+
+ this->v_[YA] = y.a();
+ this->v_[YB] = y.b();
+ this->v_[YC] = y.c();
+
+ this->v_[ZA] = z.a();
+ this->v_[ZB] = z.b();
+ this->v_[ZC] = z.c();
+}
+
+
+template
+inline Foam::BarycentricTensor2D::BarycentricTensor2D
+(
+ const Vector& a,
+ const Vector& b,
+ const Vector& c
+)
+{
+ this->v_[XA] = a.x();
+ this->v_[XB] = b.x();
+ this->v_[XC] = c.x();
+
+ this->v_[YA] = a.y();
+ this->v_[YB] = b.y();
+ this->v_[YC] = c.y();
+
+ this->v_[ZA] = a.z();
+ this->v_[ZB] = b.z();
+ this->v_[ZC] = c.z();
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+inline Foam::Barycentric2D Foam::BarycentricTensor2D::x() const
+{
+ return
+ Barycentric2D
+ (
+ this->v_[XA],
+ this->v_[XB],
+ this->v_[XC]
+ );
+}
+
+
+template
+inline Foam::Barycentric2D Foam::BarycentricTensor2D::y() const
+{
+ return
+ Barycentric2D
+ (
+ this->v_[YA],
+ this->v_[YB],
+ this->v_[YC]
+ );
+}
+
+
+template
+inline Foam::Barycentric2D Foam::BarycentricTensor2D::z() const
+{
+ return
+ Barycentric2D
+ (
+ this->v_[ZA],
+ this->v_[ZB],
+ this->v_[ZC]
+ );
+}
+
+
+template
+inline Foam::Vector Foam::BarycentricTensor2D::a() const
+{
+ return Vector(this->v_[XA], this->v_[YA], this->v_[ZA]);
+}
+
+
+template
+inline Foam::Vector Foam::BarycentricTensor2D::b() const
+{
+ return Vector(this->v_[XB], this->v_[YB], this->v_[ZB]);
+}
+
+
+template
+inline Foam::Vector Foam::BarycentricTensor2D::c() const
+{
+ return Vector(this->v_[XC], this->v_[YC], this->v_[ZC]);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * Global Operators * * * * * * * * * * * * * //
+
+template
+inline Vector operator&
+(
+ const BarycentricTensor2D& T,
+ const Barycentric2D& b
+)
+{
+ return Vector(T.x() & b, T.y() & b, T.z() & b);
+}
+
+
+template
+inline Barycentric2D operator&
+(
+ const Vector& v,
+ const BarycentricTensor2D& T
+)
+{
+ return Barycentric2D(v & T.a(), v & T.b(), v & T.c());
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/primitives/Barycentric2D/barycentricTensor2D/barycentricTensor2D.H b/src/OpenFOAM/primitives/Barycentric2D/barycentricTensor2D/barycentricTensor2D.H
new file mode 100644
index 0000000000..724a57bfe3
--- /dev/null
+++ b/src/OpenFOAM/primitives/Barycentric2D/barycentricTensor2D/barycentricTensor2D.H
@@ -0,0 +1,64 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2021 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 .
+
+Typedef
+ Foam::barycentricTensor2D
+
+Description
+ A scalar version of the templated BarycentricTensor2D
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef barycentricTensor2D_H
+#define barycentricTensor2D_H
+
+#include "scalar.H"
+#include "BarycentricTensor2D.H"
+#include "contiguous.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+typedef BarycentricTensor2D barycentricTensor2D;
+
+
+template<>
+inline bool contiguous()
+{
+ return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //