Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Another attempt to fix compile warning #15954

Merged
merged 2 commits into from
Sep 7, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 27 additions & 25 deletions source/base/tensor_product_polynomials.cc
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,7 @@ TensorProductPolynomials<0, Polynomials::Polynomial<double>>::compute_index(
const unsigned int,
std::array<unsigned int, 0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}


Expand Down Expand Up @@ -130,8 +129,7 @@ void
TensorProductPolynomials<0, Polynomials::Polynomial<double>>::output_indices(
std::ostream &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}


Expand All @@ -156,8 +154,7 @@ void
TensorProductPolynomials<0, Polynomials::Polynomial<double>>::set_numbering(
const std::vector<unsigned int> &)
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}


Expand Down Expand Up @@ -188,8 +185,7 @@ TensorProductPolynomials<0, Polynomials::Polynomial<double>>::compute_value(
const unsigned int,
const Point<0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down Expand Up @@ -239,8 +235,7 @@ TensorProductPolynomials<0, Polynomials::Polynomial<double>>::compute_grad(
const unsigned int,
const Point<0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down Expand Up @@ -500,6 +495,7 @@ namespace internal
} // namespace internal



template <int dim, typename PolynomialType>
void
TensorProductPolynomials<dim, PolynomialType>::evaluate(
Expand All @@ -510,9 +506,6 @@ TensorProductPolynomials<dim, PolynomialType>::evaluate(
std::vector<Tensor<3, dim>> &third_derivatives,
std::vector<Tensor<4, dim>> &fourth_derivatives) const
{
if constexpr (dim == 0)
return;

Comment on lines -513 to -515
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would the warning have gone away if you had put the rest into an else branch?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it would, but I do not like to increase of the indentation level that change many more lines. I also note that many other places are using the same technique with separate specializations for 0-d, see the changes I push in a moment for your other remark.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity: Do you dislike the change because you would not have liked to see the code written in that way to begin with, or because you don't like patches that change indentation? I believe that we should write patches that reflect the code we want, instead of so that they change the minimal number of lines. In other words, our code base should reflect our best effort to produce good and readable code, not reflect its history.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer if the code does not indent too much irrespective history, which is why I wrote the early return (I know you prefer the if() ... else ... form). Upon your suggestion, I then realized that the code has many of those template specialization, which I didn't want to touch all. Generally, if I'm given the alternative to indent more or to have separate functions, I would often go with separate functions if the code can be logically split like here. I would not be opposed to switch all occurrences in this class to if constexpr (dim > 0) {...}, because here the indentation is not worrisome. That said, I am certainly guilty of using if (...) return; in some of my code because it can lead to simpler control flow or less indentation when there are multiple conditions, but I also see the point in your preference, so I try to use it only in selected cases.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's a case of personal preference, and I'll leave it at your discretion :-)

Assert(dim <= 3, ExcNotImplemented());
Assert(values.size() == this->n() || values.empty(),
ExcDimensionMismatch2(values.size(), this->n(), 0));
Expand Down Expand Up @@ -598,6 +591,21 @@ TensorProductPolynomials<dim, PolynomialType>::evaluate(



template <>
void
TensorProductPolynomials<0, Polynomials::Polynomial<double>>::evaluate(
const Point<0> &,
std::vector<double> &,
std::vector<Tensor<1, 0>> &,
std::vector<Tensor<2, 0>> &,
std::vector<Tensor<3, 0>> &,
std::vector<Tensor<4, 0>> &) const
{
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}



template <int dim, typename PolynomialType>
std::unique_ptr<ScalarPolynomialsBase<dim>>
TensorProductPolynomials<dim, PolynomialType>::clone() const
Expand Down Expand Up @@ -684,8 +692,7 @@ void
AnisotropicPolynomials<0>::compute_index(const unsigned int,
std::array<unsigned int, 0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}


Expand All @@ -712,8 +719,7 @@ double
AnisotropicPolynomials<0>::compute_value(const unsigned int,
const Point<0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down Expand Up @@ -754,8 +760,7 @@ Tensor<1, 0>
AnisotropicPolynomials<0>::compute_grad(const unsigned int,
const Point<0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down Expand Up @@ -803,8 +808,7 @@ Tensor<2, 0>
AnisotropicPolynomials<0>::compute_grad_grad(const unsigned int,
const Point<0> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down Expand Up @@ -910,8 +914,7 @@ AnisotropicPolynomials<0>::evaluate(const Point<0> &,
std::vector<Tensor<3, 0>> &,
std::vector<Tensor<4, 0>> &) const
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));
}


Expand All @@ -934,8 +937,7 @@ unsigned int
AnisotropicPolynomials<0>::get_n_tensor_pols(
const std::vector<std::vector<Polynomials::Polynomial<double>>> &)
{
constexpr int dim = 0;
AssertThrow(dim > 0, ExcNotImplemented());
AssertThrow(false, ExcNotImplemented("This function does not work in 0-d!"));

return {};
}
Expand Down