diff --git a/framework/math/linear_solver/linear_eigen_solver.h b/framework/math/linear_solver/linear_eigen_solver.h
new file mode 100644
index 0000000000..d23c8a3bf6
--- /dev/null
+++ b/framework/math/linear_solver/linear_eigen_solver.h
@@ -0,0 +1,40 @@
+// SPDX-FileCopyrightText: 2025 The OpenSn Authors
+// SPDX-License-Identifier: MIT
+
+#pragma once
+
+#include "framework/math/linear_solver/linear_solver.h"
+#include "framework/math/linear_solver/linear_solver_context.h"
+
+namespace opensn
+{
+
+class LinearEigenSolver : public LinearSolver
+{
+public:
+ enum class IterativeMethod : int
+ {
+ POWER
+ };
+
+ LinearEigenSolver(IterativeMethod method, std::shared_ptr ctx)
+ : LinearSolver(ctx), method_(method)
+ {
+ }
+
+ std::string GetIterativeMethodName()
+ {
+ switch (method_)
+ {
+ case IterativeMethod::POWER:
+ return "POWER ITERATION";
+ default:
+ return "UNKNOWN ITERATIVE METHOD";
+ }
+ }
+
+protected:
+ IterativeMethod method_;
+};
+
+} // namespace opensn
diff --git a/framework/math/linear_solver/linear_solver.cc b/framework/math/linear_solver/linear_solver.cc
deleted file mode 100644
index d813f17649..0000000000
--- a/framework/math/linear_solver/linear_solver.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// SPDX-FileCopyrightText: 2024 The OpenSn Authors
-// SPDX-License-Identifier: MIT
-
-#include "framework/math/linear_solver/linear_solver.h"
-
-namespace opensn
-{
-
-std::string
-LinearSolver::IterativeMethodName(LinearSolver::IterativeMethod iterative_method)
-{
- switch (iterative_method)
- {
- case IterativeMethod::NONE:
- return "NONE";
- case IterativeMethod::CLASSIC_RICHARDSON:
- return "CLASSIC_RICHARDSON";
- case IterativeMethod::PETSC_RICHARDSON:
- return "PETSC_RICHARDSON";
- case IterativeMethod::PETSC_GMRES:
- return "PETSC_GMRES";
- case IterativeMethod::PETSC_BICGSTAB:
- return "PETSC_BICGSTAB";
- default:
- throw std::runtime_error("Unrecognized iterative method.");
- }
-}
-
-} // namespace opensn
diff --git a/framework/math/linear_solver/linear_solver.h b/framework/math/linear_solver/linear_solver.h
index b4a8c82b7b..486347443b 100644
--- a/framework/math/linear_solver/linear_solver.h
+++ b/framework/math/linear_solver/linear_solver.h
@@ -14,23 +14,12 @@ struct LinearSolverContext;
class LinearSolver
{
public:
- enum class IterativeMethod : int
- {
- NONE = 0,
- CLASSIC_RICHARDSON = 1, ///< Classic Richardson (source iteration)
- PETSC_RICHARDSON = 3, ///< PETSc Richardson iteration
- PETSC_GMRES = 2, ///< PETSc GMRES iterative algorithm
- PETSC_BICGSTAB = 4, ///< PETSc BiCGStab iterative algorithm
- };
-
- LinearSolver(IterativeMethod iterative_method, std::shared_ptr context_ptr)
- : iterative_method_(iterative_method), context_ptr_(context_ptr)
+ explicit LinearSolver(std::shared_ptr context_ptr)
+ : context_ptr_(context_ptr)
{
}
- virtual ~LinearSolver() {}
-
- std::shared_ptr GetContext() { return context_ptr_; }
+ virtual ~LinearSolver() = default;
/// Set up the linaer solver
virtual void Setup() {}
@@ -38,12 +27,10 @@ class LinearSolver
/// Solve the system
virtual void Solve() = 0;
+ std::shared_ptr GetContext() { return context_ptr_; }
+
protected:
- const IterativeMethod iterative_method_;
std::shared_ptr context_ptr_;
-
-public:
- static std::string IterativeMethodName(IterativeMethod iterative_method);
};
} // namespace opensn
diff --git a/framework/math/linear_solver/linear_solver_context.h b/framework/math/linear_solver/linear_solver_context.h
index baf475f150..2c47b8435f 100644
--- a/framework/math/linear_solver/linear_solver_context.h
+++ b/framework/math/linear_solver/linear_solver_context.h
@@ -17,15 +17,23 @@ enum class ResidualScaleType
};
struct LinearSolverContext
+{
+ virtual int MatrixAction(Mat& matrix, Vec& vector, Vec& action) { return 0; }
+
+ virtual ~LinearSolverContext() = default;
+};
+
+struct LinearSystemContext : public LinearSolverContext
{
double rhs_norm = 0.0;
double rhs_preconditioned_norm = 0.0;
double custom_residual_scale = 1.0;
ResidualScaleType residual_scale_type = ResidualScaleType::NONE;
+};
- virtual int MatrixAction(Mat& matrix, Vec& vector, Vec& action) { return 0; }
-
- virtual ~LinearSolverContext() = default;
+struct LinearEigenContext : public LinearSolverContext
+{
+ double eigenvalue = 0.0;
};
} // namespace opensn
diff --git a/framework/math/linear_solver/linear_system_solver.h b/framework/math/linear_solver/linear_system_solver.h
new file mode 100644
index 0000000000..e7f50d3e7d
--- /dev/null
+++ b/framework/math/linear_solver/linear_system_solver.h
@@ -0,0 +1,52 @@
+// SPDX-FileCopyrightText: 2025 The OpenSn Authors
+// SPDX-License-Identifier: MIT
+
+#pragma once
+
+#include "framework/math/linear_solver/linear_solver.h"
+#include "framework/math/linear_solver/linear_solver_context.h"
+
+namespace opensn
+{
+
+class LinearSystemSolver : public LinearSolver
+{
+public:
+ enum class IterativeMethod : int
+ {
+ NONE,
+ CLASSIC_RICHARDSON,
+ PETSC_RICHARDSON,
+ PETSC_GMRES,
+ PETSC_BICGSTAB
+ };
+
+ LinearSystemSolver(IterativeMethod method, std::shared_ptr ctx)
+ : LinearSolver(ctx), method_(method)
+ {
+ }
+
+ std::string GetIterativeMethodName()
+ {
+ switch (method_)
+ {
+ case IterativeMethod::NONE:
+ return "NONE";
+ case IterativeMethod::CLASSIC_RICHARDSON:
+ return "CLASSIC_RICHARDSON";
+ case IterativeMethod::PETSC_RICHARDSON:
+ return "PETSC_RICHARDSON";
+ case IterativeMethod::PETSC_GMRES:
+ return "PETSC_GMRES";
+ case IterativeMethod::PETSC_BICGSTAB:
+ return "PETSC_BICGSTAB";
+ default:
+ return "UNKNOWN ITERATIVE METHOD";
+ }
+ }
+
+protected:
+ IterativeMethod method_;
+};
+
+} // namespace opensn
diff --git a/framework/math/linear_solver/petsc_linear_solver.cc b/framework/math/linear_solver/petsc_linear_system_solver.cc
similarity index 79%
rename from framework/math/linear_solver/petsc_linear_solver.cc
rename to framework/math/linear_solver/petsc_linear_system_solver.cc
index eac541a464..07436b606c 100644
--- a/framework/math/linear_solver/petsc_linear_solver.cc
+++ b/framework/math/linear_solver/petsc_linear_system_solver.cc
@@ -1,15 +1,15 @@
// SPDX-FileCopyrightText: 2024 The OpenSn Authors
// SPDX-License-Identifier: MIT
-#include "framework/math/linear_solver/petsc_linear_solver.h"
+#include "framework/math/linear_solver/petsc_linear_system_solver.h"
#include "framework/runtime.h"
namespace opensn
{
-PETScLinearSolver::PETScLinearSolver(IterativeMethod iterative_method,
- std::shared_ptr context_ptr)
- : LinearSolver(iterative_method, context_ptr),
+PETScLinearSolver::PETScLinearSolver(IterativeMethod method,
+ std::shared_ptr context_ptr)
+ : LinearSystemSolver(method, context_ptr),
A_(nullptr),
b_(nullptr),
x_(nullptr),
@@ -82,34 +82,25 @@ PETScLinearSolver::Setup()
return;
PreSetupCallback();
-
KSPCreate(opensn::mpi_comm, &ksp_);
-
- const auto petsc_iterative_method = PETScIterativeMethodName(iterative_method_);
+ const auto petsc_iterative_method = PETScIterativeMethodName();
KSPSetType(ksp_, petsc_iterative_method.c_str());
-
ApplyToleranceOptions();
-
- if (iterative_method_ == IterativeMethod::PETSC_GMRES)
+ if (method_ == IterativeMethod::PETSC_GMRES)
{
KSPGMRESSetRestart(ksp_, tolerance_options.gmres_restart_interval);
KSPGMRESSetBreakdownTolerance(ksp_, tolerance_options.gmres_breakdown_tolerance);
}
-
KSPSetInitialGuessNonzero(ksp_, PETSC_FALSE);
-
SetOptions();
-
SetSolverContext();
SetConvergenceTest();
SetMonitor();
-
SetSystemSize();
SetSystem();
-
SetPreconditioner();
-
PostSetupCallback();
+
system_set_ = true;
}
@@ -135,9 +126,9 @@ PETScLinearSolver::Solve()
}
std::string
-PETScLinearSolver::PETScIterativeMethodName(opensn::LinearSolver::IterativeMethod iterative_method)
+PETScLinearSolver::PETScIterativeMethodName()
{
- switch (iterative_method)
+ switch (method_)
{
case IterativeMethod::NONE:
return "preonly";
@@ -148,14 +139,14 @@ PETScLinearSolver::PETScIterativeMethodName(opensn::LinearSolver::IterativeMetho
case IterativeMethod::PETSC_BICGSTAB:
return "bcgs";
default:
- throw std::runtime_error("Cannot get a PETSc option name for a non-PETSc iterative method.");
+ throw std::runtime_error("Unsupported PETSc iterative method.");
}
}
int
PETScLinearSolver::LinearSolverMatrixAction(Mat matrix, Vec vector, Vec action)
{
- LinearSolverContext* context;
+ LinearSystemContext* context;
MatShellGetContext(matrix, &context);
context->MatrixAction(matrix, vector, action);
diff --git a/framework/math/linear_solver/petsc_linear_solver.h b/framework/math/linear_solver/petsc_linear_system_solver.h
similarity index 85%
rename from framework/math/linear_solver/petsc_linear_solver.h
rename to framework/math/linear_solver/petsc_linear_system_solver.h
index 9c2c2f9258..27b28374a6 100644
--- a/framework/math/linear_solver/petsc_linear_solver.h
+++ b/framework/math/linear_solver/petsc_linear_system_solver.h
@@ -3,7 +3,7 @@
#pragma once
-#include "framework/math/linear_solver/linear_solver.h"
+#include "framework/math/linear_solver/linear_system_solver.h"
#include "framework/math/linear_solver/linear_solver_context.h"
#include
#include
@@ -13,7 +13,7 @@
namespace opensn
{
-class PETScLinearSolver : public LinearSolver
+class PETScLinearSolver : public LinearSystemSolver
{
public:
struct ToleranceOptions
@@ -26,8 +26,7 @@ class PETScLinearSolver : public LinearSolver
double gmres_breakdown_tolerance = 1.0e6;
} tolerance_options;
- PETScLinearSolver(IterativeMethod iterative_method,
- std::shared_ptr context_ptr);
+ PETScLinearSolver(IterativeMethod method, std::shared_ptr context_ptr);
virtual ~PETScLinearSolver();
@@ -72,12 +71,10 @@ class PETScLinearSolver : public LinearSolver
private:
bool system_set_;
bool suppress_kspsolve_;
+ std::string PETScIterativeMethodName();
protected:
static int LinearSolverMatrixAction(Mat matrix, Vec vector, Vec action);
-
-private:
- static std::string PETScIterativeMethodName(IterativeMethod iterative_method);
};
} // namespace opensn
diff --git a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.cc b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.cc
index 56969322ae..ae9901d5e4 100644
--- a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.cc
+++ b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.cc
@@ -311,8 +311,11 @@ DiscreteOrdinatesProblem::InitializeWGSSolvers()
options_.verbose_inner_iterations,
sweep_chunk);
- if (groupset.iterative_method == LinearSolver::IterativeMethod::CLASSIC_RICHARDSON)
- wgs_solvers_.push_back(std::make_shared(sweep_wgs_context_ptr));
+ if (groupset.iterative_method == LinearSystemSolver::IterativeMethod::CLASSIC_RICHARDSON)
+ {
+ wgs_solvers_.push_back(std::make_shared(
+ sweep_wgs_context_ptr, options_.verbose_inner_iterations));
+ }
else
wgs_solvers_.push_back(std::make_shared(sweep_wgs_context_ptr));
}
diff --git a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.cc b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.cc
index 199e351faa..a17cc96b44 100644
--- a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.cc
+++ b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.cc
@@ -3,12 +3,12 @@
#include "modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.h"
#include "modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_vecops.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/preconditioning/lbs_shell_operations.h"
-#include "framework/runtime.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_vecops.h"
#include "framework/logging/log.h"
-#include
+#include "framework/runtime.h"
#include "caliper/cali.h"
+#include
#include
namespace opensn
@@ -33,20 +33,6 @@ SweepWGSContext::SweepWGSContext(DiscreteOrdinatesProblem& do_problem,
{
}
-void
-SweepWGSContext::PreSetupCallback()
-{
- CALI_CXX_MARK_SCOPE("SweepWGSContext::PreSetupCallback");
-
- if (log_info)
- log.Log() << "\n\n"
- << "********** Solving groupset " << groupset.id << " with "
- << LinearSolver::IterativeMethodName(groupset.iterative_method) << ".\n\n"
- << "Quadrature number of angles: " << groupset.quadrature->abscissae.size() << "\n"
- << "Groups " << groupset.groups.front().id << " " << groupset.groups.back().id
- << "\n\n";
-}
-
void
SweepWGSContext::SetPreconditioner(KSP& solver)
{
@@ -130,9 +116,9 @@ SweepWGSContext::PostSolveCallback()
// Perform final sweep with converged phi and delayed psi dofs. This step is necessary for
// Krylov methods to recover the actual solution (this includes all of the PETSc methods
// currently used in OpenSn).
- if (groupset.iterative_method == LinearSolver::IterativeMethod::PETSC_GMRES or
- groupset.iterative_method == LinearSolver::IterativeMethod::PETSC_BICGSTAB or
- (groupset.iterative_method == LinearSolver::IterativeMethod::PETSC_RICHARDSON and
+ if (groupset.iterative_method == LinearSystemSolver::IterativeMethod::PETSC_GMRES or
+ groupset.iterative_method == LinearSystemSolver::IterativeMethod::PETSC_BICGSTAB or
+ (groupset.iterative_method == LinearSystemSolver::IterativeMethod::PETSC_RICHARDSON and
groupset.max_iterations > 1))
{
const auto scope = lhs_src_scope | rhs_src_scope;
diff --git a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.h b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.h
index 69689aa95d..34d0186bf6 100644
--- a/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.h
+++ b/modules/linear_boltzmann_solvers/discrete_ordinates_problem/iterative_methods/sweep_wgs_context.h
@@ -21,8 +21,6 @@ struct SweepWGSContext : public WGSContext
bool log_info,
std::shared_ptr sweep_chunk);
- void PreSetupCallback() override;
-
void SetPreconditioner(KSP& solver) override;
std::pair GetSystemSize() override;
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.cc b/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.cc
index 6fdafc21f9..535c4bc3fd 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.cc
@@ -96,7 +96,7 @@ LBSGroupset::Init(int aid)
quadrature = nullptr;
angle_agg = nullptr;
master_num_ang_subsets = 1;
- iterative_method = LinearSolver::IterativeMethod::PETSC_RICHARDSON;
+ iterative_method = LinearSystemSolver::IterativeMethod::PETSC_RICHARDSON;
angleagg_method = AngleAggregationType::POLAR;
residual_tolerance = 1.0e-6;
max_iterations = 200;
@@ -172,13 +172,13 @@ LBSGroupset::LBSGroupset(const InputParameters& params, const int id, const LBSP
// Inner solver
const auto inner_linear_method = params.GetParamValue("inner_linear_method");
if (inner_linear_method == "classic_richardson")
- iterative_method = LinearSolver::IterativeMethod::CLASSIC_RICHARDSON;
+ iterative_method = LinearSystemSolver::IterativeMethod::CLASSIC_RICHARDSON;
else if (inner_linear_method == "petsc_richardson")
- iterative_method = LinearSolver::IterativeMethod::PETSC_RICHARDSON;
+ iterative_method = LinearSystemSolver::IterativeMethod::PETSC_RICHARDSON;
else if (inner_linear_method == "petsc_gmres")
- iterative_method = LinearSolver::IterativeMethod::PETSC_GMRES;
+ iterative_method = LinearSystemSolver::IterativeMethod::PETSC_GMRES;
else if (inner_linear_method == "petsc_bicgstab")
- iterative_method = LinearSolver::IterativeMethod::PETSC_BICGSTAB;
+ iterative_method = LinearSystemSolver::IterativeMethod::PETSC_BICGSTAB;
gmres_restart_intvl = params.GetParamValue("gmres_restart_interval");
allow_cycles = params.GetParamValue("allow_cycles");
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h b/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h
index 47a7b71099..45b6d74480 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h
@@ -9,7 +9,7 @@
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_structs.h"
#include "framework/math/quadratures/angular/legendre_poly/legendrepoly.h"
#include "framework/math/quadratures/angular/angular_quadrature.h"
-#include "framework/math/linear_solver/linear_solver.h"
+#include "framework/math/linear_solver/linear_system_solver.h"
#include "framework/math/unknown_manager/unknown_manager.h"
#include "framework/utils/utils.h"
@@ -32,7 +32,7 @@ class LBSGroupset
int master_num_ang_subsets;
- LinearSolver::IterativeMethod iterative_method;
+ LinearSystemSolver::IterativeMethod iterative_method;
AngleAggregationType angleagg_method;
double residual_tolerance;
int max_iterations;
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.cc
similarity index 95%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.cc
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.cc
index f4a4c5cea5..4494fa2c94 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.cc
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2024 The OpenSn Authors
// SPDX-License-Identifier: MIT
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/convergence.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h"
#include "framework/mesh/mesh_continuum/mesh_continuum.h"
@@ -14,9 +14,9 @@ namespace opensn
{
void
-AGSSolver::Solve()
+AGSLinearSolver::Solve()
{
- CALI_CXX_MARK_SCOPE("AGSSolver::Solve");
+ CALI_CXX_MARK_SCOPE("AGSLinearSolver::Solve");
std::fill(phi_old_.begin(), phi_old_.end(), 0.0);
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h
similarity index 74%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h
index 29f7c36454..4503ae8ac0 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h
@@ -4,6 +4,7 @@
#pragma once
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h"
+#include "framework/math/linear_solver/linear_system_solver.h"
#include "framework/utils/timer.h"
#include
@@ -11,11 +12,12 @@ namespace opensn
{
/**Solver for Across-Groupset (AGS) solves.*/
-class AGSSolver
+class AGSLinearSolver : public LinearSystemSolver
{
public:
- AGSSolver(LBSProblem& lbs_problem, std::vector> wgs_solvers)
- : lbs_problem_(lbs_problem),
+ AGSLinearSolver(LBSProblem& lbs_problem, std::vector> wgs_solvers)
+ : LinearSystemSolver(IterativeMethod::CLASSIC_RICHARDSON, nullptr),
+ lbs_problem_(lbs_problem),
wgs_solvers_(std::move(wgs_solvers)),
phi_old_(lbs_problem.GetPhiOldLocal().size()),
max_iterations_(100),
@@ -24,9 +26,9 @@ class AGSSolver
{
}
- ~AGSSolver() {}
+ ~AGSLinearSolver() override {}
- void Solve();
+ void Solve() override;
bool IsVerbose() const { return verbose_; }
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.cc
index c631d9bd3b..d8d2ee252f 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.cc
@@ -19,8 +19,9 @@
namespace opensn
{
-ClassicRichardson::ClassicRichardson(const std::shared_ptr& gs_context_ptr)
- : LinearSolver(LinearSolver::IterativeMethod::CLASSIC_RICHARDSON, gs_context_ptr)
+ClassicRichardson::ClassicRichardson(const std::shared_ptr& gs_context_ptr,
+ bool verbose = true)
+ : LinearSystemSolver(IterativeMethod::CLASSIC_RICHARDSON, gs_context_ptr), verbose_(verbose)
{
}
@@ -90,21 +91,24 @@ ClassicRichardson::Solve()
psi_old_ = psi_new_;
}
- std::stringstream iter_stats;
- iter_stats << program_timer.GetTimeString() << " WGS groups [" << groupset.groups.front().id
- << "-" << groupset.groups.back().id << "]:"
- << " Iteration = " << std::left << std::setw(5) << k
- << " Point-wise change = " << std::left << std::setw(14) << pw_phi_change
- << " Spectral-radius estimate = " << std::left << std::setw(10) << rho;
-
- if (converged)
+ if (verbose_)
{
- iter_stats << " CONVERGED";
- log.Log() << iter_stats.str();
- break;
+ std::stringstream iter_stats;
+ iter_stats << program_timer.GetTimeString() << " WGS groups [" << groupset.groups.front().id
+ << "-" << groupset.groups.back().id << "]:"
+ << " Iteration = " << std::left << std::setw(5) << k
+ << " Point-wise change = " << std::left << std::setw(14) << pw_phi_change
+ << " Spectral-radius estimate = " << std::left << std::setw(10) << rho;
+
+ if (converged)
+ {
+ iter_stats << " CONVERGED";
+ log.Log() << iter_stats.str();
+ break;
+ }
+ else
+ log.Log() << iter_stats.str();
}
- else
- log.Log() << iter_stats.str();
}
do_problem.GetQMomentsLocal() = saved_q_moments_local_;
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.h
index 785cd13acc..668f165ed1 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/classic_richardson.h
@@ -5,7 +5,7 @@
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h"
-#include "framework/math/linear_solver/linear_solver.h"
+#include "framework/math/linear_solver/linear_system_solver.h"
#include
#include
#include
@@ -17,20 +17,21 @@ namespace opensn
* Linear Solver specialization for Within GroupSet (WGS) solves with classic
* Richardson.
*/
-class ClassicRichardson : public LinearSolver
+class ClassicRichardson : public LinearSystemSolver
{
public:
/**
* Constructor.
* \param gs_context_ptr Context Pointer to abstract context.
*/
- explicit ClassicRichardson(const std::shared_ptr& gs_context_ptr);
+ explicit ClassicRichardson(const std::shared_ptr& gs_context_ptr, bool verbose);
~ClassicRichardson() override;
void Solve() override;
private:
+ bool verbose_;
std::vector saved_q_moments_local_;
std::vector psi_new_, psi_old_;
};
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_context.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_context.h
similarity index 100%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_context.h
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_context.h
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.cc
similarity index 98%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.cc
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.cc
index ebf7adad65..81f5bf8054 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.cc
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2024 The OpenSn Authors
// SPDX-License-Identifier: MIT
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_context.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_context.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_vecops.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_compute.h"
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.h
similarity index 100%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.h
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.h
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.cc
similarity index 97%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.cc
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.cc
index 8a19ea1c1a..2561d354a5 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.cc
@@ -1,9 +1,9 @@
// SPDX-FileCopyrightText: 2024 The OpenSn Authors
// SPDX-License-Identifier: MIT
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/snes_k_monitor.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_residual_func.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_residual_func.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_vecops.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_compute.h"
#include "framework/math/petsc_utils/petsc_utils.h"
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.h
similarity index 95%
rename from modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.h
rename to modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.h
index 74cd91e967..9fa0a59f04 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.h
@@ -3,7 +3,7 @@
#pragma once
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_context.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_context.h"
#include "framework/math/nonlinear_solver/petsc_nonlinear_solver.h"
namespace opensn
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/power_iteration_keigen.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/power_iteration_keigen.cc
index a4479d9577..dfffe12478 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/power_iteration_keigen.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/power_iteration_keigen.cc
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: MIT
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_compute.h"
#include "framework/runtime.h"
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.cc
index 5dd7169fd2..ccca4753ad 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.cc
@@ -15,7 +15,7 @@ WGSContext::WGSContext(DiscreteOrdinatesProblem& do_problem,
SourceFlags lhs_scope,
SourceFlags rhs_scope,
bool log_info)
- : LinearSolverContext(),
+ : LinearSystemContext(),
do_problem(do_problem),
groupset(groupset),
set_source_function(set_source_function),
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h
index 71ce9e361d..5622589464 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h
@@ -16,7 +16,7 @@ namespace opensn
class LBSGroupset;
class DiscreteOrdinatesProblem;
-struct WGSContext : public LinearSolverContext
+struct WGSContext : public LinearSystemContext
{
WGSContext(DiscreteOrdinatesProblem& do_problem,
LBSGroupset& groupset,
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.cc b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.cc
index 296881fdf0..519b7695d4 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.cc
@@ -35,29 +35,21 @@ WGSLinearSolver::~WGSLinearSolver()
void
WGSLinearSolver::PreSetupCallback()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::PreSetupCallback");
-
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
gs_context_ptr->PreSetupCallback();
}
void
WGSLinearSolver::SetConvergenceTest()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetConvergenceTest");
-
KSPSetConvergenceTest(ksp_, &GSConvergenceTest, nullptr, nullptr);
}
void
WGSLinearSolver::SetSystemSize()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetSystemSize");
-
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
const auto sizes = gs_context_ptr->GetSystemSize();
-
num_local_dofs_ = sizes.first;
num_global_dofs_ = sizes.second;
}
@@ -65,8 +57,6 @@ WGSLinearSolver::SetSystemSize()
void
WGSLinearSolver::SetSystem()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetSystem");
-
if (IsSystemSet())
return;
@@ -95,45 +85,44 @@ WGSLinearSolver::SetSystem()
void
WGSLinearSolver::SetPreconditioner()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetPreconditioner");
-
if (IsSystemSet())
return;
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
gs_context_ptr->SetPreconditioner(ksp_);
}
void
WGSLinearSolver::PostSetupCallback()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::PostSetupCallback");
-
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
gs_context_ptr->PostSetupCallback();
}
void
WGSLinearSolver::PreSolveCallback()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::PreSolveCallback");
-
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
+ auto& groupset = gs_context_ptr->groupset;
+ auto& do_problem = gs_context_ptr->do_problem;
+ if (do_problem.GetOptions().verbose_inner_iterations)
+ {
+ log.Log() << "\n\n"
+ << "********** Solving groupset " << groupset.id << " with "
+ << this->GetIterativeMethodName() << "\n\n"
+ << "Quadrature number of angles: " << groupset.quadrature->abscissae.size() << "\n"
+ << "Groups " << groupset.groups.front().id << " " << groupset.groups.back().id
+ << "\n\n";
+ }
gs_context_ptr->PreSolveCallback();
}
void
WGSLinearSolver::SetInitialGuess()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetInitialGuess");
-
// If the norm of the initial guess is large enough, the initial guess will be used, otherwise it
// is assumed to be zero.
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
auto& groupset = gs_context_ptr->groupset;
auto& do_problem = gs_context_ptr->do_problem;
@@ -156,7 +145,6 @@ WGSLinearSolver::SetRHS()
CALI_CXX_MARK_SCOPE("WGSLinearSolver::SetRHS");
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
auto& groupset = gs_context_ptr->groupset;
auto& do_problem = gs_context_ptr->do_problem;
@@ -167,7 +155,7 @@ WGSLinearSolver::SetRHS()
saved_q_moments_local_ = do_problem.GetQMomentsLocal();
const bool single_richardson =
- groupset.iterative_method == LinearSolver::IterativeMethod::PETSC_RICHARDSON and
+ groupset.iterative_method == LinearSystemSolver::IterativeMethod::PETSC_RICHARDSON and
tolerance_options.maximum_iterations == 1;
if (not single_richardson)
@@ -183,7 +171,7 @@ WGSLinearSolver::SetRHS()
LBSVecOps::SetGSPETScVecFromPrimarySTLvector(do_problem, groupset, b_, PhiSTLOption::PHI_NEW);
// Compute RHS norm
- VecNorm(b_, NORM_2, &context_ptr_->rhs_norm);
+ VecNorm(b_, NORM_2, &gs_context_ptr->rhs_norm);
// Compute precondition RHS norm
PC pc;
@@ -191,7 +179,7 @@ WGSLinearSolver::SetRHS()
Vec temp_vec;
VecDuplicate(b_, &temp_vec);
PCApply(pc, b_, temp_vec);
- VecNorm(temp_vec, NORM_2, &context_ptr_->rhs_preconditioned_norm);
+ VecNorm(temp_vec, NORM_2, &gs_context_ptr->rhs_preconditioned_norm);
VecDestroy(&temp_vec);
}
// If we have a single richardson iteration then the user probably wants
@@ -211,7 +199,7 @@ WGSLinearSolver::SetRHS()
LBSVecOps::SetGSPETScVecFromPrimarySTLvector(do_problem, groupset, x_, PhiSTLOption::PHI_NEW);
// Compute RHS norm
- VecNorm(x_, NORM_2, &context_ptr_->rhs_norm);
+ VecNorm(x_, NORM_2, &gs_context_ptr->rhs_norm);
// Compute precondition RHS norm
PC pc;
@@ -219,7 +207,7 @@ WGSLinearSolver::SetRHS()
Vec temp_vec;
VecDuplicate(x_, &temp_vec);
PCApply(pc, x_, temp_vec);
- VecNorm(temp_vec, NORM_2, &context_ptr_->rhs_preconditioned_norm);
+ VecNorm(temp_vec, NORM_2, &gs_context_ptr->rhs_preconditioned_norm);
VecDestroy(&temp_vec);
SetKSPSolveSuppressionFlag(true);
@@ -229,10 +217,6 @@ WGSLinearSolver::SetRHS()
void
WGSLinearSolver::PostSolveCallback()
{
- CALI_CXX_MARK_SCOPE("WGSLinearSolver::PostSolveCallback");
-
- // We simply restore the q_moments_local vector.
-
// Get convergence reason
if (not GetKSPSolveSuppressionFlag())
{
@@ -245,10 +229,8 @@ WGSLinearSolver::PostSolveCallback()
// Copy x to local solution
auto gs_context_ptr = std::dynamic_pointer_cast(context_ptr_);
-
auto& groupset = gs_context_ptr->groupset;
auto& do_problem = gs_context_ptr->do_problem;
-
LBSVecOps::SetPrimarySTLvectorFromGSPETScVec(do_problem, groupset, x_, PhiSTLOption::PHI_NEW);
LBSVecOps::SetPrimarySTLvectorFromGSPETScVec(do_problem, groupset, x_, PhiSTLOption::PHI_OLD);
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.h b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.h
index 4a680776f4..5843d0bfc0 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_linear_solver.h
@@ -4,7 +4,7 @@
#pragma once
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h"
-#include "framework/math/linear_solver/petsc_linear_solver.h"
+#include "framework/math/linear_solver/petsc_linear_system_solver.h"
#include
#include
#include
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.cc b/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.cc
index 06025fda2c..1dc828909e 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.cc
+++ b/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.cc
@@ -3,7 +3,7 @@
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/wgs_context.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/point_source/point_source.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/groupset/lbs_groupset.h"
#include "framework/math/spatial_discretization/finite_element/piecewise_linear/piecewise_linear_discontinuous.h"
@@ -385,7 +385,7 @@ LBSProblem::GetActiveSetSourceFunction() const
return active_set_source_function_;
}
-std::shared_ptr
+std::shared_ptr
LBSProblem::GetAGSSolver()
{
return ags_solver_;
@@ -1395,7 +1395,7 @@ LBSProblem::InitializeSolverSchemes()
InitializeWGSSolvers();
- ags_solver_ = std::make_shared(*this, wgs_solvers_);
+ ags_solver_ = std::make_shared(*this, wgs_solvers_);
if (groupsets_.size() == 1)
{
ags_solver_->SetMaxIterations(1);
diff --git a/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h b/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h
index 8ddd5881e0..a485d5c0e6 100644
--- a/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h
+++ b/modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h
@@ -24,7 +24,7 @@ namespace opensn
class MPICommunicatorSet;
class GridFaceHistogram;
class TimeIntegration;
-class AGSSolver;
+class AGSLinearSolver;
class WGSLinearSolver;
struct WGSContext;
@@ -198,7 +198,7 @@ class LBSProblem : public Problem
SetSourceFunction GetActiveSetSourceFunction() const;
- std::shared_ptr GetAGSSolver();
+ std::shared_ptr GetAGSSolver();
std::vector>& GetWGSSolvers();
@@ -329,7 +329,7 @@ class LBSProblem : public Problem
SetSourceFunction active_set_source_function_;
- std::shared_ptr ags_solver_;
+ std::shared_ptr ags_solver_;
std::vector> wgs_solvers_;
std::map, size_t> phi_field_functions_local_map_;
diff --git a/modules/linear_boltzmann_solvers/solvers/nl_keigen_solver.h b/modules/linear_boltzmann_solvers/solvers/nl_keigen_solver.h
index 194f7b43bf..f935c17444 100644
--- a/modules/linear_boltzmann_solvers/solvers/nl_keigen_solver.h
+++ b/modules/linear_boltzmann_solvers/solvers/nl_keigen_solver.h
@@ -5,7 +5,7 @@
#include "modules/solver.h"
#include "modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nl_keigen_ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/nonlinear_keigen_ags_solver.h"
#include
namespace opensn
diff --git a/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.cc b/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.cc
index 2c48e13060..14f305adc2 100644
--- a/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.cc
+++ b/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.cc
@@ -9,7 +9,7 @@
#include "modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.h"
#include "modules/linear_boltzmann_solvers/discrete_ordinates_problem/discrete_ordinates_problem.h"
#include "modules/linear_boltzmann_solvers/discrete_ordinates_problem/acceleration/discrete_ordinates_keigen_acceleration.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_vecops.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_compute.h"
#include
diff --git a/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.h b/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.h
index 24d1c785aa..7811f6ae7a 100644
--- a/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.h
+++ b/modules/linear_boltzmann_solvers/solvers/pi_keigen_solver.h
@@ -11,7 +11,7 @@ namespace opensn
class DiscreteOrdinatesProblem;
class DiscreteOrdinatesKEigenAcceleration;
-class AGSSolver;
+class AGSLinearSolver;
class LinearSolver;
class PowerIterationKEigenSolver : public Solver
@@ -31,7 +31,7 @@ class PowerIterationKEigenSolver : public Solver
std::vector& phi_new_local_;
std::vector& groupsets_;
- std::shared_ptr ags_solver_;
+ std::shared_ptr ags_solver_;
SetSourceFunction active_set_source_function_;
LBSGroupset& front_gs_;
diff --git a/modules/linear_boltzmann_solvers/solvers/steady_state_solver.cc b/modules/linear_boltzmann_solvers/solvers/steady_state_solver.cc
index 19b7978024..1994ceaa8f 100644
--- a/modules/linear_boltzmann_solvers/solvers/steady_state_solver.cc
+++ b/modules/linear_boltzmann_solvers/solvers/steady_state_solver.cc
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: MIT
#include "modules/linear_boltzmann_solvers/solvers/steady_state_solver.h"
-#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_solver.h"
+#include "modules/linear_boltzmann_solvers/lbs_problem/iterative_methods/ags_linear_solver.h"
#include "modules/linear_boltzmann_solvers/lbs_problem/lbs_compute.h"
#include "framework/object_factory.h"
#include "framework/utils/hdf_utils.h"