Skip to content

Commit

Permalink
Address a clang compiler problem.
Browse files Browse the repository at this point in the history
  • Loading branch information
bangerth committed Jul 15, 2023
1 parent 57653ee commit d2a7ef4
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 50 deletions.
27 changes: 6 additions & 21 deletions include/aspect/utilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -1277,31 +1277,16 @@ namespace aspect
to_voigt_stiffness_vector(const SymmetricTensor<4,3> &input);


namespace internal
{
constexpr Tensor<3,3> create_levi_civita_tensor_3d()
{
Tensor<3,3> permutation_operator_3d;
permutation_operator_3d[0][1][2] = 1;
permutation_operator_3d[1][2][0] = 1;
permutation_operator_3d[2][0][1] = 1;
permutation_operator_3d[0][2][1] = -1;
permutation_operator_3d[1][0][2] = -1;
permutation_operator_3d[2][1][0] = -1;
return permutation_operator_3d;
}
}

/**
* The Levi-Civita tensor, also called a permutation or "totally antisymmetric" tensor.
* Return the Levi-Civita tensor, also called a permutation or "totally antisymmetric" tensor.
* See https://en.wikipedia.org/wiki/Levi-Civita_symbol for a definition.
* See https://en.wikipedia.org/wiki/Levi-Civita_symbol for more info.
*/
template<int dim>
constexpr Tensor<dim,dim> levi_civita;

template <> constexpr Tensor<3,3> levi_civita<3> = internal::create_levi_civita_tensor_3d();
template <int dim>
const Tensor<dim,dim> &levi_civita();

// Declare the existence of a specialization:
template <>
const Tensor<3,3> &levi_civita<3>();
}

}
Expand Down
21 changes: 21 additions & 0 deletions source/utilities.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3369,6 +3369,27 @@ namespace aspect
});

}


template <>
const Tensor<3,3> &levi_civita<3>()
{
static const Tensor<3,3> t =
[]()
{
Tensor<3,3> permutation_operator_3d;

permutation_operator_3d[0][1][2] = 1;
permutation_operator_3d[1][2][0] = 1;
permutation_operator_3d[2][0][1] = 1;
permutation_operator_3d[0][2][1] = -1;
permutation_operator_3d[1][0][2] = -1;
permutation_operator_3d[2][1][0] = -1;
return permutation_operator_3d;
}();

return t;
}
}


Expand Down
58 changes: 29 additions & 29 deletions unit_tests/utilities.cc
Original file line number Diff line number Diff line change
Expand Up @@ -581,34 +581,34 @@ TEST_CASE("CPO elastic tensor transform functions")
*/
{

REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][0][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][0][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][1][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][1][2] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][2][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][2][1] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[0][2][2] == Approx(0.0));

REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][0][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][0][2] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][1][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][1][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][2][0] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][2][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[1][2][2] == Approx(0.0));

REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][0][1] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][0][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][1][0] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][1][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][2][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][2][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>[2][2][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][0][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][0][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][1][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][1][2] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][2][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][2][1] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[0][2][2] == Approx(0.0));

REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][0][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][0][2] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][1][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][1][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][2][0] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][2][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[1][2][2] == Approx(0.0));

REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][0][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][0][1] == Approx(1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][0][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][1][0] == Approx(-1.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][1][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][1][2] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][2][0] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][2][1] == Approx(0.0));
REQUIRE(aspect::Utilities::Tensors::levi_civita<3>()[2][2][2] == Approx(0.0));
}
}

0 comments on commit d2a7ef4

Please sign in to comment.