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

Fix uninitialized variable #16750

Merged
merged 4 commits into from
Mar 16, 2024
Merged
Show file tree
Hide file tree
Changes from 3 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
19 changes: 18 additions & 1 deletion include/deal.II/lac/precondition.h
Original file line number Diff line number Diff line change
Expand Up @@ -2698,7 +2698,8 @@ PreconditionRelaxation<MatrixType, PreconditionerType>::initialize(
const MatrixType &rA,
const AdditionalData &parameters)
{
A = &rA;
A = &rA;
eigenvalues_are_initialized = false;

Assert(parameters.preconditioner, ExcNotInitialized());

Expand Down Expand Up @@ -2880,6 +2881,10 @@ PreconditionJacobi<MatrixType>::initialize(const MatrixType &A,
const AdditionalData &parameters_in)
{
Assert(parameters_in.preconditioner == nullptr, ExcInternalError());
Assert(
parameters_in.relaxation != 0.0,
ExcMessage(
"Relaxation cannot automatically be determined by PreconditionJacobi."));

AdditionalData parameters;
parameters.relaxation = 1.0;
Expand All @@ -2898,6 +2903,10 @@ PreconditionSOR<MatrixType>::initialize(const MatrixType &A,
const AdditionalData &parameters_in)
{
Assert(parameters_in.preconditioner == nullptr, ExcInternalError());
Assert(
parameters_in.relaxation != 0.0,
ExcMessage(
"Relaxation cannot automatically be determined by PreconditionSOR."));

AdditionalData parameters;
parameters.relaxation = 1.0;
Expand All @@ -2916,6 +2925,10 @@ PreconditionSSOR<MatrixType>::initialize(const MatrixType &A,
const AdditionalData &parameters_in)
{
Assert(parameters_in.preconditioner == nullptr, ExcInternalError());
Assert(
parameters_in.relaxation != 0.0,
ExcMessage(
"Relaxation cannot automatically be determined by PreconditionSSOR."));

AdditionalData parameters;
parameters.relaxation = 1.0;
Expand All @@ -2939,6 +2952,10 @@ PreconditionPSOR<MatrixType>::initialize(
const typename BaseClass::AdditionalData &parameters_in)
{
Assert(parameters_in.preconditioner == nullptr, ExcInternalError());
Assert(
parameters_in.relaxation != 0.0,
ExcMessage(
"Relaxation cannot automatically be determined by PreconditionPSOR."));

typename BaseClass::AdditionalData parameters;
parameters.relaxation = 1.0;
Expand Down
23 changes: 13 additions & 10 deletions tests/lac/precondition_relaxation_01.cc
Original file line number Diff line number Diff line change
Expand Up @@ -225,18 +225,19 @@ main()
{
std::vector<std::tuple<double, double, double, double>> results;

{
// 0) Test PreconditionJacobi
PreconditionJacobi<MatrixType> preconditioner;
if (relaxation != 0.0)
{
// 0) Test PreconditionJacobi
PreconditionJacobi<MatrixType> preconditioner;

PreconditionJacobi<MatrixType>::AdditionalData ad;
ad.relaxation = relaxation;
ad.n_iterations = n_iterations;
PreconditionJacobi<MatrixType>::AdditionalData ad;
ad.relaxation = relaxation;
ad.n_iterations = n_iterations;

preconditioner.initialize(system_matrix, ad);
preconditioner.initialize(system_matrix, ad);

results.emplace_back(test(preconditioner, src));
}
results.emplace_back(test(preconditioner, src));
}

{
// 1) Test PreconditionRelaxation + DiagonalMatrix and matrix with
Expand Down Expand Up @@ -358,7 +359,9 @@ main()

return true;
}))
deallog << "OK!" << std::endl;
deallog << "OK! " << std::get<0>(results[0]) << " "
<< std::get<1>(results[0]) << " " << std::get<2>(results[0])
<< " " << std::get<3>(results[0]) << " " << std::endl;
else
deallog << "ERROR!" << std::endl;
}
Expand Down
24 changes: 12 additions & 12 deletions tests/lac/precondition_relaxation_01.output
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@

DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK!
DEAL::OK! 6.06176 14.6813 6.06176 14.6813
DEAL::OK! 10.5221 19.3228 10.5221 19.3228
DEAL::OK! 15.3680 24.2003 15.3680 24.2003
DEAL::OK! 5.62500 14.2615 5.62500 14.2615
DEAL::OK! 9.85490 18.6445 9.85490 18.6445
DEAL::OK! 14.3212 23.1484 14.3212 23.1484
DEAL::OK! 5.06250 13.7224 5.06250 13.7224
DEAL::OK! 8.97855 17.7551 8.97855 17.7551
DEAL::OK! 12.9800 21.7988 12.9800 21.7988
DEAL::OK! 6.18750 14.8024 6.18750 14.8024
DEAL::OK! 10.7121 19.5161 10.7121 19.5161
DEAL::OK! 15.6708 24.5042 15.6708 24.5042
Copy link
Member

Choose a reason for hiding this comment

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

Let's make this output more than 10 digits. Otherwise, numdiff might trigger accidentally.

Copy link
Member Author

Choose a reason for hiding this comment

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

Good idea, I adjusted the test and its output.