Skip to content
Snippets Groups Projects
Commit 4cb39db7 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add support to R1x1, R2x2 and R3x3 for sub item values per item

parent 8228cfba
Branches
Tags
No related merge requests found
......@@ -2653,9 +2653,9 @@ edges or faces values cannot be post processed since neither ~VTK~ nor
This abstract type is handle values defined on the sub items of the
items of a ~mesh~. Similarly these values are attached to a *connectivity*
and not to a mesh. Values can bed of type The values on the entities
can be of type ~B~, ~N~, ~Z~, ~R~, ~R^1~, ~R^2~ or ~R^3~. An example of
~sub_item_value~ is the $\mathbf{C}_{jr}$ vectors which are defined at each
node of each cell.
can be of type ~B~, ~N~, ~Z~, ~R~, ~R^1~, ~R^2~, ~R^3~, ~R^1x1~, ~R^2x2~ or ~R^3x3~. An
example of ~sub_item_value~ is the $\mathbf{C}_{jr}$ vectors which are
defined at each node of each cell.
These variables are used to pass data from one function to
another. They cannot be post processed.
......
......@@ -16,6 +16,9 @@ class SubItemValuePerItemVariant
NodeValuePerEdge<const TinyVector<1, double>>,
NodeValuePerEdge<const TinyVector<2, double>>,
NodeValuePerEdge<const TinyVector<3, double>>,
NodeValuePerEdge<const TinyMatrix<1, 1, double>>,
NodeValuePerEdge<const TinyMatrix<2, 2, double>>,
NodeValuePerEdge<const TinyMatrix<3, 3, double>>,
NodeValuePerFace<const bool>,
NodeValuePerFace<const long int>,
......@@ -24,6 +27,9 @@ class SubItemValuePerItemVariant
NodeValuePerFace<const TinyVector<1, double>>,
NodeValuePerFace<const TinyVector<2, double>>,
NodeValuePerFace<const TinyVector<3, double>>,
NodeValuePerFace<const TinyMatrix<1, 1, double>>,
NodeValuePerFace<const TinyMatrix<2, 2, double>>,
NodeValuePerFace<const TinyMatrix<3, 3, double>>,
NodeValuePerCell<const bool>,
NodeValuePerCell<const long int>,
......@@ -32,6 +38,9 @@ class SubItemValuePerItemVariant
NodeValuePerCell<const TinyVector<1, double>>,
NodeValuePerCell<const TinyVector<2, double>>,
NodeValuePerCell<const TinyVector<3, double>>,
NodeValuePerCell<const TinyMatrix<1, 1, double>>,
NodeValuePerCell<const TinyMatrix<2, 2, double>>,
NodeValuePerCell<const TinyMatrix<3, 3, double>>,
EdgeValuePerNode<const bool>,
EdgeValuePerNode<const long int>,
......@@ -40,6 +49,9 @@ class SubItemValuePerItemVariant
EdgeValuePerNode<const TinyVector<1, double>>,
EdgeValuePerNode<const TinyVector<2, double>>,
EdgeValuePerNode<const TinyVector<3, double>>,
EdgeValuePerNode<const TinyMatrix<1, 1, double>>,
EdgeValuePerNode<const TinyMatrix<2, 2, double>>,
EdgeValuePerNode<const TinyMatrix<3, 3, double>>,
EdgeValuePerFace<const bool>,
EdgeValuePerFace<const long int>,
......@@ -48,6 +60,9 @@ class SubItemValuePerItemVariant
EdgeValuePerFace<const TinyVector<1, double>>,
EdgeValuePerFace<const TinyVector<2, double>>,
EdgeValuePerFace<const TinyVector<3, double>>,
EdgeValuePerFace<const TinyMatrix<1, 1, double>>,
EdgeValuePerFace<const TinyMatrix<2, 2, double>>,
EdgeValuePerFace<const TinyMatrix<3, 3, double>>,
EdgeValuePerCell<const bool>,
EdgeValuePerCell<const long int>,
......@@ -56,6 +71,9 @@ class SubItemValuePerItemVariant
EdgeValuePerCell<const TinyVector<1, double>>,
EdgeValuePerCell<const TinyVector<2, double>>,
EdgeValuePerCell<const TinyVector<3, double>>,
EdgeValuePerCell<const TinyMatrix<1, 1, double>>,
EdgeValuePerCell<const TinyMatrix<2, 2, double>>,
EdgeValuePerCell<const TinyMatrix<3, 3, double>>,
FaceValuePerNode<const bool>,
FaceValuePerNode<const long int>,
......@@ -64,6 +82,9 @@ class SubItemValuePerItemVariant
FaceValuePerNode<const TinyVector<1, double>>,
FaceValuePerNode<const TinyVector<2, double>>,
FaceValuePerNode<const TinyVector<3, double>>,
FaceValuePerNode<const TinyMatrix<1, 1, double>>,
FaceValuePerNode<const TinyMatrix<2, 2, double>>,
FaceValuePerNode<const TinyMatrix<3, 3, double>>,
FaceValuePerEdge<const bool>,
FaceValuePerEdge<const long int>,
......@@ -72,6 +93,9 @@ class SubItemValuePerItemVariant
FaceValuePerEdge<const TinyVector<1, double>>,
FaceValuePerEdge<const TinyVector<2, double>>,
FaceValuePerEdge<const TinyVector<3, double>>,
FaceValuePerEdge<const TinyMatrix<1, 1, double>>,
FaceValuePerEdge<const TinyMatrix<2, 2, double>>,
FaceValuePerEdge<const TinyMatrix<3, 3, double>>,
FaceValuePerCell<const bool>,
FaceValuePerCell<const long int>,
......@@ -80,6 +104,9 @@ class SubItemValuePerItemVariant
FaceValuePerCell<const TinyVector<1, double>>,
FaceValuePerCell<const TinyVector<2, double>>,
FaceValuePerCell<const TinyVector<3, double>>,
FaceValuePerCell<const TinyMatrix<1, 1, double>>,
FaceValuePerCell<const TinyMatrix<2, 2, double>>,
FaceValuePerCell<const TinyMatrix<3, 3, double>>,
CellValuePerNode<const bool>,
CellValuePerNode<const long int>,
......@@ -88,6 +115,9 @@ class SubItemValuePerItemVariant
CellValuePerNode<const TinyVector<1, double>>,
CellValuePerNode<const TinyVector<2, double>>,
CellValuePerNode<const TinyVector<3, double>>,
CellValuePerNode<const TinyMatrix<1, 1, double>>,
CellValuePerNode<const TinyMatrix<2, 2, double>>,
CellValuePerNode<const TinyMatrix<3, 3, double>>,
CellValuePerEdge<const bool>,
CellValuePerEdge<const long int>,
......@@ -96,6 +126,9 @@ class SubItemValuePerItemVariant
CellValuePerEdge<const TinyVector<1, double>>,
CellValuePerEdge<const TinyVector<2, double>>,
CellValuePerEdge<const TinyVector<3, double>>,
CellValuePerEdge<const TinyMatrix<1, 1, double>>,
CellValuePerEdge<const TinyMatrix<2, 2, double>>,
CellValuePerEdge<const TinyMatrix<3, 3, double>>,
CellValuePerFace<const bool>,
CellValuePerFace<const long int>,
......@@ -103,7 +136,10 @@ class SubItemValuePerItemVariant
CellValuePerFace<const double>,
CellValuePerFace<const TinyVector<1, double>>,
CellValuePerFace<const TinyVector<2, double>>,
CellValuePerFace<const TinyVector<3, double>>>;
CellValuePerFace<const TinyVector<3, double>>,
CellValuePerFace<const TinyMatrix<1, 1, double>>,
CellValuePerFace<const TinyMatrix<2, 2, double>>,
CellValuePerFace<const TinyMatrix<3, 3, double>>>;
Variant m_sub_item_value_per_item;
......@@ -146,7 +182,10 @@ class SubItemValuePerItemVariant
std::is_same_v<std::remove_const_t<DataType>, double> or //
std::is_same_v<std::remove_const_t<DataType>, TinyVector<1, double>> or //
std::is_same_v<std::remove_const_t<DataType>, TinyVector<2, double>> or //
std::is_same_v<std::remove_const_t<DataType>, TinyVector<3, double>>,
std::is_same_v<std::remove_const_t<DataType>, TinyVector<3, double>> or //
std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<1, 1, double>> or //
std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<2, 2, double>> or //
std::is_same_v<std::remove_const_t<DataType>, TinyMatrix<3, 3, double>>,
"SubItemValuePerItem with this DataType is not allowed in variant");
}
......
......@@ -18,6 +18,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
using R1 = TinyVector<1>;
using R2 = TinyVector<2>;
using R3 = TinyVector<3>;
using R1x1 = TinyMatrix<1>;
using R2x2 = TinyMatrix<2>;
using R3x3 = TinyMatrix<3>;
SECTION("NodeValuePerCell<double>")
{
......@@ -29,6 +32,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("NodeValuePerFace<R1>")
......@@ -41,6 +47,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_NOTHROW(v.get<NodeValuePerFace<const R1>>());
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<const R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<const R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<const R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<const R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<const R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("NodeValuePerEdge<int64_t>")
......@@ -53,6 +62,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("EdgeValuePerCell<R2>")
......@@ -65,6 +77,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<EdgeValuePerCell<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<EdgeValuePerCell<R2>>());
REQUIRE_THROWS_WITH(v.get<EdgeValuePerCell<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerCell<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerCell<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerCell<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("EdgeValuePerFace<R1>")
......@@ -77,6 +92,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_NOTHROW(v.get<EdgeValuePerFace<R1>>());
REQUIRE_THROWS_WITH(v.get<EdgeValuePerFace<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerFace<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerFace<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerFace<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerFace<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("EdgeValuePerNode<double>")
......@@ -89,54 +107,69 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<EdgeValuePerNode<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("FaceValuePerCell<uint64_t>")
SECTION("FaceValuePerCell<R3x3>")
{
FaceValuePerCell<uint64_t> node_value{connectivity};
FaceValuePerCell<R3x3> node_value{connectivity};
SubItemValuePerItemVariant v(node_value);
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<double>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<int64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<FaceValuePerCell<uint64_t>>());
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<uint64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerCell<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<FaceValuePerCell<R3x3>>());
}
SECTION("FaceValuePerEdge<double>")
SECTION("FaceValuePerEdge<R2x2>")
{
FaceValuePerEdge<double> node_value{connectivity};
FaceValuePerEdge<R2x2> node_value{connectivity};
SubItemValuePerItemVariant v(node_value);
REQUIRE_NOTHROW(v.get<FaceValuePerEdge<double>>());
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<double>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<int64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<uint64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<FaceValuePerEdge<R2x2>>());
REQUIRE_THROWS_WITH(v.get<FaceValuePerEdge<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("FaceValuePerNode<double>")
SECTION("FaceValuePerNode<uint64_t>")
{
FaceValuePerNode<double> node_value{connectivity};
FaceValuePerNode<uint64_t> node_value{connectivity};
SubItemValuePerItemVariant v(node_value);
REQUIRE_NOTHROW(v.get<FaceValuePerNode<double>>());
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<double>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<int64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<uint64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<FaceValuePerNode<uint64_t>>());
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<FaceValuePerNode<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("NodeValuePerCell<double>")
SECTION("NodeValuePerCell<R1x1>")
{
NodeValuePerCell<double> node_value{connectivity};
NodeValuePerCell<R1x1> node_value{connectivity};
SubItemValuePerItemVariant v(node_value);
REQUIRE_NOTHROW(v.get<NodeValuePerCell<double>>());
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<double>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<int64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<uint64_t>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<NodeValuePerCell<R1x1>>());
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerCell<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("NodeValuePerFace<R3>")
......@@ -149,6 +182,9 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_NOTHROW(v.get<NodeValuePerFace<R3>>());
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerFace<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
SECTION("NodeValuePerEdge<double>")
......@@ -161,5 +197,8 @@ TEST_CASE("SubItemValuePerItemVariant", "[mesh]")
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R3>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R1x1>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R2x2>>(), "error: invalid SubItemValuePerItem type");
REQUIRE_THROWS_WITH(v.get<NodeValuePerEdge<R3x3>>(), "error: invalid SubItemValuePerItem type");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment