From 2fdb507181566424463459759615356971dc0b44 Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:03:58 +0100 Subject: [PATCH 1/9] Use std::variants for BoundaryConditions in ConfigParser --- include/ConfigParser/config_parser.h | 4 +-- include/ConfigParser/test_selection.h | 21 ++++++++++++ src/ConfigParser/config_parser.cpp | 2 +- src/ConfigParser/select_test_case.cpp | 46 ++++++++++++++++----------- 4 files changed, 52 insertions(+), 21 deletions(-) diff --git a/include/ConfigParser/config_parser.h b/include/ConfigParser/config_parser.h index 8768d76f..53f06970 100644 --- a/include/ConfigParser/config_parser.h +++ b/include/ConfigParser/config_parser.h @@ -26,7 +26,7 @@ class ConfigParser // Test Case const DomainGeometryVariant& domainGeometry() const; const DensityProfileCoefficientsVariant& densityProfileCoefficients() const; - const BoundaryConditions& boundaryConditions() const; + const BoundaryConditionsVariant& boundaryConditions() const; const SourceTerm& sourceTerm() const; const ExactSolution& exactSolution() const; std::unique_ptr solver() const; @@ -62,7 +62,7 @@ class ConfigParser // Input Functions std::unique_ptr domain_geometry_; std::unique_ptr density_profile_coefficients_; - std::unique_ptr boundary_conditions_; + std::unique_ptr boundary_conditions_; std::unique_ptr source_term_; std::unique_ptr exact_solution_; // General solver output and visualization settings diff --git a/include/ConfigParser/test_selection.h b/include/ConfigParser/test_selection.h index 922a67d7..2b155992 100644 --- a/include/ConfigParser/test_selection.h +++ b/include/ConfigParser/test_selection.h @@ -1,9 +1,30 @@ #pragma once #include #include "../../include/GMGPolar/test_cases.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h" +#include "../../include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h" using DomainGeometryVariant = std::variant; using DensityProfileCoefficientsVariant = std::variant; + +using BoundaryConditionsVariant = std::variant< + CartesianR2_Boundary_CircularGeometry, CartesianR6_Boundary_CzarnyGeometry, PolarR6_Boundary_CzarnyGeometry, + Refined_Boundary_CzarnyGeometry, CartesianR2_Boundary_CzarnyGeometry, CartesianR6_Boundary_ShafranovGeometry, + PolarR6_Boundary_ShafranovGeometry, Refined_Boundary_ShafranovGeometry, CartesianR2_Boundary_ShafranovGeometry, + PolarR6_Boundary_CircularGeometry, Refined_Boundary_CircularGeometry, CartesianR6_Boundary_CircularGeometry, + PolarR6_Boundary_CulhamGeometry, Refined_Boundary_CulhamGeometry>; diff --git a/src/ConfigParser/config_parser.cpp b/src/ConfigParser/config_parser.cpp index df699711..e4e51551 100644 --- a/src/ConfigParser/config_parser.cpp +++ b/src/ConfigParser/config_parser.cpp @@ -377,7 +377,7 @@ const DensityProfileCoefficientsVariant& ConfigParser::densityProfileCoefficient return *density_profile_coefficients_.get(); } -const BoundaryConditions& ConfigParser::boundaryConditions() const +const BoundaryConditionsVariant& ConfigParser::boundaryConditions() const { return *boundary_conditions_.get(); } diff --git a/src/ConfigParser/select_test_case.cpp b/src/ConfigParser/select_test_case.cpp index e533d7de..2be74f16 100644 --- a/src/ConfigParser/select_test_case.cpp +++ b/src/ConfigParser/select_test_case.cpp @@ -113,16 +113,19 @@ void ConfigParser::selectTestCase(GeometryType geometry_type, ProblemType proble case ProblemType::CARTESIAN_R2: switch (geometry_type) { case GeometryType::CIRCULAR: - exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + exact_solution_ = std::make_unique(Rmax); + boundary_conditions_ = + std::make_unique(CartesianR2_Boundary_CircularGeometry(Rmax)); break; case GeometryType::SHAFRANOV: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + CartesianR2_Boundary_ShafranovGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CZARNY: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + CartesianR2_Boundary_CzarnyGeometry(Rmax, kappa_eps, delta_e)); break; default: throw std::runtime_error("Invalid geometry for configuration.\n"); @@ -132,16 +135,19 @@ void ConfigParser::selectTestCase(GeometryType geometry_type, ProblemType proble case ProblemType::CARTESIAN_R6: switch (geometry_type) { case GeometryType::CIRCULAR: - exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + exact_solution_ = std::make_unique(Rmax); + boundary_conditions_ = + std::make_unique(CartesianR6_Boundary_CircularGeometry(Rmax)); break; case GeometryType::SHAFRANOV: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + CartesianR6_Boundary_ShafranovGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CZARNY: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + CartesianR6_Boundary_CzarnyGeometry(Rmax, kappa_eps, delta_e)); break; default: throw std::runtime_error("Invalid geometry for configuration.\n"); @@ -152,19 +158,21 @@ void ConfigParser::selectTestCase(GeometryType geometry_type, ProblemType proble switch (geometry_type) { case GeometryType::CIRCULAR: exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + boundary_conditions_ = std::make_unique(PolarR6_Boundary_CircularGeometry(Rmax)); break; case GeometryType::SHAFRANOV: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + PolarR6_Boundary_ShafranovGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CZARNY: - exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = + std::make_unique(PolarR6_Boundary_CzarnyGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CULHAM: exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + boundary_conditions_ = std::make_unique(PolarR6_Boundary_CulhamGeometry(Rmax)); break; default: throw std::runtime_error("Invalid geometry for configuration.\n"); @@ -175,19 +183,21 @@ void ConfigParser::selectTestCase(GeometryType geometry_type, ProblemType proble switch (geometry_type) { case GeometryType::CIRCULAR: exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + boundary_conditions_ = std::make_unique(Refined_Boundary_CircularGeometry(Rmax)); break; case GeometryType::SHAFRANOV: exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = std::make_unique( + Refined_Boundary_ShafranovGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CZARNY: - exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); - boundary_conditions_ = std::make_unique(Rmax, kappa_eps, delta_e); + exact_solution_ = std::make_unique(Rmax, kappa_eps, delta_e); + boundary_conditions_ = + std::make_unique(Refined_Boundary_CzarnyGeometry(Rmax, kappa_eps, delta_e)); break; case GeometryType::CULHAM: exact_solution_ = std::make_unique(Rmax); - boundary_conditions_ = std::make_unique(Rmax); + boundary_conditions_ = std::make_unique(Refined_Boundary_CulhamGeometry(Rmax)); break; default: throw std::runtime_error("Invalid geometry for configuration.\n"); From 41b2aa68a6128dfe790943c47b2a2d71fb39970a Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:05:28 +0100 Subject: [PATCH 2/9] Template IGMGPolar::build_rhs_f and IGMGPolar::solve on concepts::BoundaryConditions --- include/GMGPolar/build_rhs_f.h | 53 ++++++ include/GMGPolar/igmgpolar.h | 4 + include/GMGPolar/solver.h | 179 ++++++++++++++++++++ include/InputFunctions/boundaryConditions.h | 11 ++ src/GMGPolar/build_rhs_f.cpp | 53 ------ src/GMGPolar/solver.cpp | 179 -------------------- 6 files changed, 247 insertions(+), 232 deletions(-) create mode 100644 include/GMGPolar/solver.h delete mode 100644 src/GMGPolar/build_rhs_f.cpp diff --git a/include/GMGPolar/build_rhs_f.h b/include/GMGPolar/build_rhs_f.h index 3eccc253..04083376 100644 --- a/include/GMGPolar/build_rhs_f.h +++ b/include/GMGPolar/build_rhs_f.h @@ -139,3 +139,56 @@ void GMGPolar::discretize_rhs_f(cons } } } + +template +void IGMGPolar::build_rhs_f(const Level& level, Vector rhs_f, const BoundaryConditions& boundary_conditions, + const SourceTerm& source_term) +{ + const PolarGrid& grid = level.grid(); + assert(std::ssize(rhs_f) == grid.numberOfNodes()); + +#pragma omp parallel + { +// ----------------------------------------- // +// Store rhs values (circular index section) // +// ----------------------------------------- // +#pragma omp for nowait + for (int i_r = 0; i_r < grid.numberSmootherCircles(); i_r++) { + double r = grid.radius(i_r); + for (int i_theta = 0; i_theta < grid.ntheta(); i_theta++) { + double theta = grid.theta(i_theta); + + if ((0 < i_r && i_r < grid.nr() - 1) || (i_r == 0 && !DirBC_Interior_)) { + rhs_f[grid.index(i_r, i_theta)] = source_term(i_r, i_theta); + } + else if (i_r == 0 && DirBC_Interior_) { + rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D_Interior(r, theta); + } + else if (i_r == grid.nr() - 1) { + rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D(r, theta); + } + } + } + +// --------------------------------------- // +// Store rhs values (radial index section) // +// --------------------------------------- // +#pragma omp for + for (int i_theta = 0; i_theta < grid.ntheta(); i_theta++) { + double theta = grid.theta(i_theta); + + for (int i_r = grid.numberSmootherCircles(); i_r < grid.nr(); i_r++) { + double r = grid.radius(i_r); + if ((0 < i_r && i_r < grid.nr() - 1) || (i_r == 0 && !DirBC_Interior_)) { + rhs_f[grid.index(i_r, i_theta)] = source_term(i_r, i_theta); + } + else if (i_r == 0 && DirBC_Interior_) { + rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D_Interior(r, theta); + } + else if (i_r == grid.nr() - 1) { + rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D(r, theta); + } + } + } + } +} diff --git a/include/GMGPolar/igmgpolar.h b/include/GMGPolar/igmgpolar.h index d5ecf032..ee501944 100644 --- a/include/GMGPolar/igmgpolar.h +++ b/include/GMGPolar/igmgpolar.h @@ -135,6 +135,7 @@ class IGMGPolar // Solve system with given boundary conditions and source term. // Multiple solves with different inputs are supported. + template void solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term); /* ---------------------------------------------------------------------- */ @@ -255,6 +256,7 @@ class IGMGPolar /* --------------- */ /* Setup Functions */ int chooseNumberOfLevels(const PolarGrid& finest_grid); + template void build_rhs_f(const Level& level, Vector rhs_f, const BoundaryConditions& boundary_conditions, const SourceTerm& source_term); virtual void discretize_rhs_f(const Level& level, Vector rhs_f) = 0; @@ -326,3 +328,5 @@ class IGMGPolar double t_avg_MGC_residual_; double t_avg_MGC_directSolver_; }; + +#include "solver.h" diff --git a/include/GMGPolar/solver.h b/include/GMGPolar/solver.h new file mode 100644 index 00000000..715e2171 --- /dev/null +++ b/include/GMGPolar/solver.h @@ -0,0 +1,179 @@ + +// ============================================================================= +// Main Solver Routine +// ============================================================================= +template +void IGMGPolar::solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term) +{ + auto start_setup_rhs = std::chrono::high_resolution_clock::now(); + + /* ------------------------------------- */ + /* Build rhs_f on Level 0 (finest Level) */ + /* ------------------------------------- */ + build_rhs_f(levels_[0], levels_[0].rhs(), boundary_conditions, source_term); + + /* ---------------- */ + /* Discretize rhs_f */ + /* ---------------- */ + int initial_rhs_f_levels = FMG_ ? number_of_levels_ : (extrapolation_ == ExtrapolationType::NONE ? 1 : 2); + // Loop through the levels, injecting and discretizing rhs + for (int level_depth = 0; level_depth < initial_rhs_f_levels; ++level_depth) { + Level& current_level = levels_[level_depth]; + // Inject rhs if there is a next level + if (level_depth + 1 < initial_rhs_f_levels) { + Level& next_level = levels_[level_depth + 1]; + injection(level_depth, next_level.rhs(), current_level.rhs()); + } + // Discretize the rhs for the current level + discretize_rhs_f(current_level, current_level.rhs()); + } + + auto end_setup_rhs = std::chrono::high_resolution_clock::now(); + t_setup_rhs_ = std::chrono::duration(end_setup_rhs - start_setup_rhs).count(); + + LIKWID_START("Solve"); + auto start_solve = std::chrono::high_resolution_clock::now(); + + // Clear solve-phase timings + resetSolvePhaseTimings(); + + /* ---------------------------- */ + /* Initialize starting solution */ + /* ---------------------------- */ + auto start_initial_approximation = std::chrono::high_resolution_clock::now(); + + initializeSolution(); + + auto end_initial_approximation = std::chrono::high_resolution_clock::now(); + t_solve_initial_approximation_ = + std::chrono::duration(end_initial_approximation - start_initial_approximation).count(); + + // These times are included in the initial approximation and don't count towards the multigrid cyclces. + resetAvgMultigridCycleTimings(); + + /* --------------------------------------- */ + /* Start Solver at finest level (depth 0) */ + /* --------------------------------------- */ + Level& level = levels_[0]; + + number_of_iterations_ = 0; + double initial_residual_norm = 1.0; + double current_residual_norm = 1.0; + double current_relative_residual_norm = 1.0; + + printIterationHeader(exact_solution_); + + while (number_of_iterations_ < max_iterations_) { + /* ---------------------------------------------- */ + /* Test solution against exact solution if given. */ + /* ---------------------------------------------- */ + LIKWID_STOP("Solver"); + auto start_check_exact_error = std::chrono::high_resolution_clock::now(); + + if (exact_solution_ != nullptr) + evaluateExactError(level, *exact_solution_); + + auto end_check_exact_error = std::chrono::high_resolution_clock::now(); + t_check_exact_error_ += std::chrono::duration(end_check_exact_error - start_check_exact_error).count(); + LIKWID_START("Solver"); + + /* ---------------------------- */ + /* Compute convergence criteria */ + /* ---------------------------- */ + auto start_check_convergence = std::chrono::high_resolution_clock::now(); + + if (absolute_tolerance_.has_value() || relative_tolerance_.has_value()) { + updateResidualNorms(level, number_of_iterations_, initial_residual_norm, current_residual_norm, + current_relative_residual_norm); + } + + auto end_check_convergence = std::chrono::high_resolution_clock::now(); + t_check_convergence_ += std::chrono::duration(end_check_convergence - start_check_convergence).count(); + + printIterationInfo(number_of_iterations_, current_residual_norm, current_relative_residual_norm, + exact_solution_); + + if (converged(current_residual_norm, current_relative_residual_norm)) + break; + + /* ----------------------- */ + /* Perform Multigrid Cycle */ + /* ----------------------- */ + auto start_solve_multigrid_iterations = std::chrono::high_resolution_clock::now(); + + switch (multigrid_cycle_) { + case MultigridCycleType::V_CYCLE: + if (extrapolation_ == ExtrapolationType::NONE) { + multigrid_V_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); + } + else { + implicitlyExtrapolatedMultigrid_V_Cycle(level.level_depth(), level.solution(), level.rhs(), + level.residual()); + } + break; + case MultigridCycleType::W_CYCLE: + if (extrapolation_ == ExtrapolationType::NONE) { + multigrid_W_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); + } + else { + implicitlyExtrapolatedMultigrid_W_Cycle(level.level_depth(), level.solution(), level.rhs(), + level.residual()); + } + break; + case MultigridCycleType::F_CYCLE: + if (extrapolation_ == ExtrapolationType::NONE) { + multigrid_F_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); + } + else { + implicitlyExtrapolatedMultigrid_F_Cycle(level.level_depth(), level.solution(), level.rhs(), + level.residual()); + } + break; + default: + throw std::invalid_argument("Unknown MultigridCycleType"); + } + number_of_iterations_++; + + auto end_solve_multigrid_iterations = std::chrono::high_resolution_clock::now(); + t_solve_multigrid_iterations_ += + std::chrono::duration(end_solve_multigrid_iterations - start_solve_multigrid_iterations).count(); + } + + /* ---------------------- */ + /* Post-solution analysis */ + /* ---------------------- */ + if (number_of_iterations_ > 0) { + /* --------------------------------------------- */ + /* Compute the average Multigrid Iteration times */ + /* --------------------------------------------- */ + t_avg_MGC_total_ = t_solve_multigrid_iterations_ / number_of_iterations_; + t_avg_MGC_preSmoothing_ /= number_of_iterations_; + t_avg_MGC_postSmoothing_ /= number_of_iterations_; + t_avg_MGC_residual_ /= number_of_iterations_; + t_avg_MGC_directSolver_ /= number_of_iterations_; + + /* -------------------------------- */ + /* Compute the reduction factor rho */ + /* -------------------------------- */ + mean_residual_reduction_factor_ = + std::pow(current_residual_norm / initial_residual_norm, 1.0 / number_of_iterations_); + + if (verbose_ > 0) { + std::cout << "------------------------------\n"; + std::cout << "Total Iterations: " << number_of_iterations_ << "\n"; + std::cout << "Reduction Factor: ρ = " << mean_residual_reduction_factor_ << "\n"; + } + } + + auto end_solve = std::chrono::high_resolution_clock::now(); + t_solve_total_ = std::chrono::duration(end_solve - start_solve).count() - t_check_exact_error_; + LIKWID_STOP("Solve"); + + if (paraview_) { + writeToVTK("output_solution", level, level.solution()); + if (exact_solution_ != nullptr) { + computeExactError(level, level.solution(), level.residual(), *exact_solution_); + writeToVTK("output_error", level, level.residual()); + } + } +} diff --git a/include/InputFunctions/boundaryConditions.h b/include/InputFunctions/boundaryConditions.h index 86f7b0a6..811f8a03 100644 --- a/include/InputFunctions/boundaryConditions.h +++ b/include/InputFunctions/boundaryConditions.h @@ -10,3 +10,14 @@ class BoundaryConditions // Only used if DirBC_Interior = true virtual double u_D_Interior(double r, double theta) const = 0; }; + +namespace concepts +{ + +template +concept BoundaryConditions = !std::same_as && requires(const T bcs, double r, double theta) { + { bcs.u_D(r, theta) } -> std::convertible_to; + { bcs.u_D_Interior(r, theta) } -> std::convertible_to; +}; + +} // namespace concepts diff --git a/src/GMGPolar/build_rhs_f.cpp b/src/GMGPolar/build_rhs_f.cpp deleted file mode 100644 index a4da1ccd..00000000 --- a/src/GMGPolar/build_rhs_f.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "../../include/GMGPolar/gmgpolar.h" - -void IGMGPolar::build_rhs_f(const Level& level, Vector rhs_f, const BoundaryConditions& boundary_conditions, - const SourceTerm& source_term) -{ - const PolarGrid& grid = level.grid(); - assert(std::ssize(rhs_f) == grid.numberOfNodes()); - -#pragma omp parallel - { -// ----------------------------------------- // -// Store rhs values (circular index section) // -// ----------------------------------------- // -#pragma omp for nowait - for (int i_r = 0; i_r < grid.numberSmootherCircles(); i_r++) { - double r = grid.radius(i_r); - for (int i_theta = 0; i_theta < grid.ntheta(); i_theta++) { - double theta = grid.theta(i_theta); - - if ((0 < i_r && i_r < grid.nr() - 1) || (i_r == 0 && !DirBC_Interior_)) { - rhs_f[grid.index(i_r, i_theta)] = source_term(i_r, i_theta); - } - else if (i_r == 0 && DirBC_Interior_) { - rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D_Interior(r, theta); - } - else if (i_r == grid.nr() - 1) { - rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D(r, theta); - } - } - } - -// --------------------------------------- // -// Store rhs values (radial index section) // -// --------------------------------------- // -#pragma omp for - for (int i_theta = 0; i_theta < grid.ntheta(); i_theta++) { - double theta = grid.theta(i_theta); - - for (int i_r = grid.numberSmootherCircles(); i_r < grid.nr(); i_r++) { - double r = grid.radius(i_r); - if ((0 < i_r && i_r < grid.nr() - 1) || (i_r == 0 && !DirBC_Interior_)) { - rhs_f[grid.index(i_r, i_theta)] = source_term(i_r, i_theta); - } - else if (i_r == 0 && DirBC_Interior_) { - rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D_Interior(r, theta); - } - else if (i_r == grid.nr() - 1) { - rhs_f[grid.index(i_r, i_theta)] = boundary_conditions.u_D(r, theta); - } - } - } - } -} diff --git a/src/GMGPolar/solver.cpp b/src/GMGPolar/solver.cpp index 68aed2ca..8800f19a 100644 --- a/src/GMGPolar/solver.cpp +++ b/src/GMGPolar/solver.cpp @@ -2,185 +2,6 @@ #include -// ============================================================================= -// Main Solver Routine -// ============================================================================= - -void IGMGPolar::solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term) -{ - auto start_setup_rhs = std::chrono::high_resolution_clock::now(); - - /* ------------------------------------- */ - /* Build rhs_f on Level 0 (finest Level) */ - /* ------------------------------------- */ - build_rhs_f(levels_[0], levels_[0].rhs(), boundary_conditions, source_term); - - /* ---------------- */ - /* Discretize rhs_f */ - /* ---------------- */ - int initial_rhs_f_levels = FMG_ ? number_of_levels_ : (extrapolation_ == ExtrapolationType::NONE ? 1 : 2); - // Loop through the levels, injecting and discretizing rhs - for (int level_depth = 0; level_depth < initial_rhs_f_levels; ++level_depth) { - Level& current_level = levels_[level_depth]; - // Inject rhs if there is a next level - if (level_depth + 1 < initial_rhs_f_levels) { - Level& next_level = levels_[level_depth + 1]; - injection(level_depth, next_level.rhs(), current_level.rhs()); - } - // Discretize the rhs for the current level - discretize_rhs_f(current_level, current_level.rhs()); - } - - auto end_setup_rhs = std::chrono::high_resolution_clock::now(); - t_setup_rhs_ = std::chrono::duration(end_setup_rhs - start_setup_rhs).count(); - - LIKWID_START("Solve"); - auto start_solve = std::chrono::high_resolution_clock::now(); - - // Clear solve-phase timings - resetSolvePhaseTimings(); - - /* ---------------------------- */ - /* Initialize starting solution */ - /* ---------------------------- */ - auto start_initial_approximation = std::chrono::high_resolution_clock::now(); - - initializeSolution(); - - auto end_initial_approximation = std::chrono::high_resolution_clock::now(); - t_solve_initial_approximation_ = - std::chrono::duration(end_initial_approximation - start_initial_approximation).count(); - - // These times are included in the initial approximation and don't count towards the multigrid cyclces. - resetAvgMultigridCycleTimings(); - - /* --------------------------------------- */ - /* Start Solver at finest level (depth 0) */ - /* --------------------------------------- */ - Level& level = levels_[0]; - - number_of_iterations_ = 0; - double initial_residual_norm = 1.0; - double current_residual_norm = 1.0; - double current_relative_residual_norm = 1.0; - - printIterationHeader(exact_solution_); - - while (number_of_iterations_ < max_iterations_) { - /* ---------------------------------------------- */ - /* Test solution against exact solution if given. */ - /* ---------------------------------------------- */ - LIKWID_STOP("Solver"); - auto start_check_exact_error = std::chrono::high_resolution_clock::now(); - - if (exact_solution_ != nullptr) - evaluateExactError(level, *exact_solution_); - - auto end_check_exact_error = std::chrono::high_resolution_clock::now(); - t_check_exact_error_ += std::chrono::duration(end_check_exact_error - start_check_exact_error).count(); - LIKWID_START("Solver"); - - /* ---------------------------- */ - /* Compute convergence criteria */ - /* ---------------------------- */ - auto start_check_convergence = std::chrono::high_resolution_clock::now(); - - if (absolute_tolerance_.has_value() || relative_tolerance_.has_value()) { - updateResidualNorms(level, number_of_iterations_, initial_residual_norm, current_residual_norm, - current_relative_residual_norm); - } - - auto end_check_convergence = std::chrono::high_resolution_clock::now(); - t_check_convergence_ += std::chrono::duration(end_check_convergence - start_check_convergence).count(); - - printIterationInfo(number_of_iterations_, current_residual_norm, current_relative_residual_norm, - exact_solution_); - - if (converged(current_residual_norm, current_relative_residual_norm)) - break; - - /* ----------------------- */ - /* Perform Multigrid Cycle */ - /* ----------------------- */ - auto start_solve_multigrid_iterations = std::chrono::high_resolution_clock::now(); - - switch (multigrid_cycle_) { - case MultigridCycleType::V_CYCLE: - if (extrapolation_ == ExtrapolationType::NONE) { - multigrid_V_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); - } - else { - implicitlyExtrapolatedMultigrid_V_Cycle(level.level_depth(), level.solution(), level.rhs(), - level.residual()); - } - break; - case MultigridCycleType::W_CYCLE: - if (extrapolation_ == ExtrapolationType::NONE) { - multigrid_W_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); - } - else { - implicitlyExtrapolatedMultigrid_W_Cycle(level.level_depth(), level.solution(), level.rhs(), - level.residual()); - } - break; - case MultigridCycleType::F_CYCLE: - if (extrapolation_ == ExtrapolationType::NONE) { - multigrid_F_Cycle(level.level_depth(), level.solution(), level.rhs(), level.residual()); - } - else { - implicitlyExtrapolatedMultigrid_F_Cycle(level.level_depth(), level.solution(), level.rhs(), - level.residual()); - } - break; - default: - throw std::invalid_argument("Unknown MultigridCycleType"); - } - number_of_iterations_++; - - auto end_solve_multigrid_iterations = std::chrono::high_resolution_clock::now(); - t_solve_multigrid_iterations_ += - std::chrono::duration(end_solve_multigrid_iterations - start_solve_multigrid_iterations).count(); - } - - /* ---------------------- */ - /* Post-solution analysis */ - /* ---------------------- */ - if (number_of_iterations_ > 0) { - /* --------------------------------------------- */ - /* Compute the average Multigrid Iteration times */ - /* --------------------------------------------- */ - t_avg_MGC_total_ = t_solve_multigrid_iterations_ / number_of_iterations_; - t_avg_MGC_preSmoothing_ /= number_of_iterations_; - t_avg_MGC_postSmoothing_ /= number_of_iterations_; - t_avg_MGC_residual_ /= number_of_iterations_; - t_avg_MGC_directSolver_ /= number_of_iterations_; - - /* -------------------------------- */ - /* Compute the reduction factor rho */ - /* -------------------------------- */ - mean_residual_reduction_factor_ = - std::pow(current_residual_norm / initial_residual_norm, 1.0 / number_of_iterations_); - - if (verbose_ > 0) { - std::cout << "------------------------------\n"; - std::cout << "Total Iterations: " << number_of_iterations_ << "\n"; - std::cout << "Reduction Factor: ρ = " << mean_residual_reduction_factor_ << "\n"; - } - } - - auto end_solve = std::chrono::high_resolution_clock::now(); - t_solve_total_ = std::chrono::duration(end_solve - start_solve).count() - t_check_exact_error_; - LIKWID_STOP("Solve"); - - if (paraview_) { - writeToVTK("output_solution", level, level.solution()); - if (exact_solution_ != nullptr) { - computeExactError(level, level.solution(), level.residual(), *exact_solution_); - writeToVTK("output_error", level, level.residual()); - } - } -} - // ============================================================================= // Solution Initialization // ============================================================================= From 13655230a6126daa6daa381db7b52075dfd6754b Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:06:04 +0100 Subject: [PATCH 3/9] Remove empty file --- src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index af7fab81..60e5fbd3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,6 @@ set(POLAR_GRID_SOURCES # file(GLOB_RECURSE GMG_POLAR_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/GMGPolar/*.cpp) set(GMG_POLAR_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/GMGPolar/build_rhs_f.cpp ${CMAKE_CURRENT_SOURCE_DIR}/GMGPolar/gmgpolar.cpp ${CMAKE_CURRENT_SOURCE_DIR}/GMGPolar/level_interpolation.cpp ${CMAKE_CURRENT_SOURCE_DIR}/GMGPolar/setup.cpp From 134b8283c86219a00612860ca033b13971f2de64 Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:21:04 +0100 Subject: [PATCH 4/9] Remove unused variables --- tests/DirectSolver/directSolver.cpp | 52 ------------------- tests/DirectSolver/directSolverNoMumps.cpp | 52 ------------------- .../extrapolated_smoother.cpp | 38 -------------- tests/Residual/residual.cpp | 5 -- tests/Smoother/smoother.cpp | 37 ------------- 5 files changed, 184 deletions(-) diff --git a/tests/DirectSolver/directSolver.cpp b/tests/DirectSolver/directSolver.cpp index 28f26f83..570d5abe 100644 --- a/tests/DirectSolver/directSolver.cpp +++ b/tests/DirectSolver/directSolver.cpp @@ -21,28 +21,24 @@ /* Test 1 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/circularGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/sonnendruckerGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/cartesianR2_SonnendruckerGyro_CircularGeometry.h" /* ------ */ /* Test 2 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/shafranovGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/cartesianR6_ZoniGyro_ShafranovGeometry.h" /* ------ */ /* Test 3 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/czarnyGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedCoefficients.h" #include "../include/InputFunctions/SourceTerms/polarR6_ZoniShifted_CzarnyGeometry.h" /* ------ */ /* Test 4 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/culhamGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/refined_ZoniShiftedGyro_CulhamGeometry.h" @@ -66,8 +62,6 @@ TEST(DirectSolverTest, directSolver_DirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -122,8 +116,6 @@ TEST(DirectSolverTest, directSolver_AcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -182,8 +174,6 @@ TEST(DirectSolverTest_CircularGeometry, SequentialDirectSolverDirBC_Interior_Cir double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -228,8 +218,6 @@ TEST(DirectSolverTest_CircularGeometry, ParallelDirectSolverDirBC_Interior_Circu double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -274,8 +262,6 @@ TEST(DirectSolverTest_CircularGeometry, SequentialDirectSolverAcrossOrigin_Circu double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -320,8 +306,6 @@ TEST(DirectSolverTest_CircularGeometry, ParallelDirectSolverAcrossOrigin_Circula double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -371,8 +355,6 @@ TEST(DirectSolverTest_ShafranovGeometry, DirectSolverDirBC_Interior_ShafranovGeo double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -418,8 +400,6 @@ TEST(DirectSolverTest_ShafranovGeometry, DirectSolverAcrossOrigin_ShafranovGeome double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -470,8 +450,6 @@ TEST(DirectSolverTest_CzarnyGeometry, DirectSolverDirBC_Interior_CzarnyGeometry) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -518,8 +496,6 @@ TEST(DirectSolverTest_CzarnyGeometry, DirectSolverAcrossOrigin_CzarnyGeometry) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -568,7 +544,6 @@ TEST(DirectSolverTest_CulhamGeometry, DirectSolverDirBC_Interior_CulhamGeometry) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -613,7 +588,6 @@ TEST(DirectSolverTest_CulhamGeometry, DirectSolverAcrossOrigin_CulhamGeometry) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -670,8 +644,6 @@ TEST(DirectSolverTest_CircularGeometry, DirectSolverAcrossOriginHigherPrecision_ double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -716,8 +688,6 @@ TEST(DirectSolverTest_CircularGeometry, DirectSolverAcrossOriginHigherPrecision2 double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -763,8 +733,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, SequentialDirectSolverDirBC_Interior double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -809,8 +777,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, ParallelDirectSolverDirBC_Interior_C double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -855,8 +821,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, SequentialDirectSolverAcrossOrigin_C double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -901,8 +865,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, ParallelDirectSolverAcrossOrigin_Cir double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -952,8 +914,6 @@ TEST(DirectSolverTakeTest_ShafranovGeometry, DirectSolverDirBC_Interior_Shafrano double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -999,8 +959,6 @@ TEST(DirectSolverTakeTest_ShafranovGeometry, DirectSolverAcrossOrigin_ShafranovG double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1051,8 +1009,6 @@ TEST(DirectSolverTakeTest_CzarnyGeometry, DirectSolverDirBC_Interior_CzarnyGeome double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1099,8 +1055,6 @@ TEST(DirectSolverTakeTest_CzarnyGeometry, DirectSolverAcrossOrigin_CzarnyGeometr double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1149,7 +1103,6 @@ TEST(DirectSolverTakeTest_CulhamGeometry, DirectSolverDirBC_Interior_CulhamGeome double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1194,7 +1147,6 @@ TEST(DirectSolverTakeTest_CulhamGeometry, DirectSolverAcrossOrigin_CulhamGeometr double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1249,8 +1201,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, DirectSolverAcrossOriginHigherPrecis double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -1295,8 +1245,6 @@ TEST(DirectSolverTakeTest_CircularGeometry, DirectSolverAcrossOriginHigherPrecis double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; diff --git a/tests/DirectSolver/directSolverNoMumps.cpp b/tests/DirectSolver/directSolverNoMumps.cpp index 39596560..a1abb89c 100644 --- a/tests/DirectSolver/directSolverNoMumps.cpp +++ b/tests/DirectSolver/directSolverNoMumps.cpp @@ -21,28 +21,24 @@ /* Test 1 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/circularGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/sonnendruckerGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/cartesianR2_SonnendruckerGyro_CircularGeometry.h" /* ------ */ /* Test 2 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/shafranovGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/cartesianR6_ZoniGyro_ShafranovGeometry.h" /* ------ */ /* Test 3 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/czarnyGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedCoefficients.h" #include "../include/InputFunctions/SourceTerms/polarR6_ZoniShifted_CzarnyGeometry.h" /* ------ */ /* Test 4 */ /* ------ */ #include "../include/InputFunctions/DomainGeometry/culhamGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedGyroCoefficients.h" #include "../include/InputFunctions/SourceTerms/refined_ZoniShiftedGyro_CulhamGeometry.h" @@ -66,8 +62,6 @@ TEST(DirectSolverTestNoMumps, directSolver_DirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -123,8 +117,6 @@ TEST(DirectSolverTestNoMumps, directSolver_AcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -184,8 +176,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, SequentialDirectSolverDirBC_Inter double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -230,8 +220,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, ParallelDirectSolverDirBC_Interio double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -276,8 +264,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, SequentialDirectSolverAcrossOrigi double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -322,8 +308,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, ParallelDirectSolverAcrossOrigin_ double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -373,8 +357,6 @@ TEST(DirectSolverTestNoMumps_ShafranovGeometry, DirectSolverDirBC_Interior_Shafr double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -421,8 +403,6 @@ TEST(DirectSolverTestNoMumps_ShafranovGeometry, DirectSolverAcrossOrigin_Shafran double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -474,8 +454,6 @@ TEST(DirectSolverTestNoMumps_CzarnyGeometry, DirectSolverDirBC_Interior_CzarnyGe double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -523,8 +501,6 @@ TEST(DirectSolverTestNoMumps_CzarnyGeometry, DirectSolverAcrossOrigin_CzarnyGeom double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -574,7 +550,6 @@ TEST(DirectSolverTestNoMumps_CulhamGeometry, DirectSolverDirBC_Interior_CulhamGe double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -619,7 +594,6 @@ TEST(DirectSolverTestNoMumps_CulhamGeometry, DirectSolverAcrossOrigin_CulhamGeom double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -676,8 +650,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, DirectSolverAcrossOriginHigherPre double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -722,8 +694,6 @@ TEST(DirectSolverTestNoMumps_CircularGeometry, DirectSolverAcrossOriginHigherPre double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -769,8 +739,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, SequentialDirectSolverDirBC_ double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -815,8 +783,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, ParallelDirectSolverDirBC_In double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -861,8 +827,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, SequentialDirectSolverAcross double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -907,8 +871,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, ParallelDirectSolverAcrossOr double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -958,8 +920,6 @@ TEST(DirectSolverTakeCustomLUTest_ShafranovGeometry, DirectSolverDirBC_Interior_ double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1006,8 +966,6 @@ TEST(DirectSolverTakeCustomLUTest_ShafranovGeometry, DirectSolverAcrossOrigin_Sh double alpha_jump = 0.4837 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1059,8 +1017,6 @@ TEST(DirectSolverTakeCustomLUTest_CzarnyGeometry, DirectSolverDirBC_Interior_Cza double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1108,8 +1064,6 @@ TEST(DirectSolverTakeCustomLUTest_CzarnyGeometry, DirectSolverAcrossOrigin_Czarn double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1159,7 +1113,6 @@ TEST(DirectSolverTakeCustomLUTest_CulhamGeometry, DirectSolverDirBC_Interior_Cul double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = true; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -1204,7 +1157,6 @@ TEST(DirectSolverTakeCustomLUTest_CulhamGeometry, DirectSolverAcrossOrigin_Culha double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 16; bool cache_density_rpofile_coefficients = true; @@ -1259,8 +1211,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, DirectSolverAcrossOriginHigh double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; @@ -1305,8 +1255,6 @@ TEST(DirectSolverTakeCustomLUTest_CircularGeometry, DirectSolverAcrossOriginHigh double alpha_jump = 0.66 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax); bool DirBC_Interior = false; int maxOpenMPThreads = 1; bool cache_density_rpofile_coefficients = true; diff --git a/tests/ExtrapolatedSmoother/extrapolated_smoother.cpp b/tests/ExtrapolatedSmoother/extrapolated_smoother.cpp index 1d2f7e1d..d35a809d 100644 --- a/tests/ExtrapolatedSmoother/extrapolated_smoother.cpp +++ b/tests/ExtrapolatedSmoother/extrapolated_smoother.cpp @@ -16,13 +16,11 @@ #include "../../include/InputFunctions/domainGeometry.h" #include "../../include/InputFunctions/densityProfileCoefficients.h" -#include "../../include/InputFunctions/boundaryConditions.h" #include "../../include/InputFunctions/sourceTerm.h" /* --------- */ /* Test Case */ /* --------- */ #include "../include/InputFunctions/DomainGeometry/czarnyGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedCoefficients.h" #include "../include/InputFunctions/SourceTerms/polarR6_ZoniShifted_CzarnyGeometry.h" @@ -48,8 +46,6 @@ TEST(ExtrapolatedSmootherTest, extrapolatedSmoother_DirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -110,8 +106,6 @@ TEST(ExtrapolatedSmootherTest, extrapolatedSmoother_AcossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -174,8 +168,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -259,8 +251,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -344,8 +334,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -431,8 +419,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -517,8 +503,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherDirBC_Interior_Smal double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -603,8 +587,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherDirBC_Interior_Smalle double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -689,8 +671,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherAcrossOrigin_Smalle double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -773,8 +753,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherAcrossOrigin_Smallest double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -860,8 +838,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherTakeDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -947,8 +923,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherTakeDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1032,8 +1006,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherTakeAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -1117,8 +1089,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherTakeAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1201,8 +1171,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherTakeDirBC_Interior_ double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -1285,8 +1253,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherTakeDirBC_Interior_Sm double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1369,8 +1335,6 @@ TEST(ExtrapolatedSmootherTest, SequentialExtrapolatedSmootherTakeAcrossOrigin_Sm double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -1453,8 +1417,6 @@ TEST(ExtrapolatedSmootherTest, ParallelExtrapolatedSmootherTakeAcrossOrigin_Smal double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; diff --git a/tests/Residual/residual.cpp b/tests/Residual/residual.cpp index dccf7e7e..c419b885 100644 --- a/tests/Residual/residual.cpp +++ b/tests/Residual/residual.cpp @@ -18,7 +18,6 @@ /* Test Case */ /* --------- */ #include "../include/InputFunctions/DomainGeometry/czarnyGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedCoefficients.h" #include "../include/InputFunctions/SourceTerms/polarR6_ZoniShifted_CzarnyGeometry.h" @@ -40,8 +39,6 @@ TEST(OperatorATest, applyA_DirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -97,8 +94,6 @@ TEST(OperatorATest, applyA_AcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; diff --git a/tests/Smoother/smoother.cpp b/tests/Smoother/smoother.cpp index dfc58f8b..087d9bae 100644 --- a/tests/Smoother/smoother.cpp +++ b/tests/Smoother/smoother.cpp @@ -20,7 +20,6 @@ /* Test Case */ /* --------- */ #include "../include/InputFunctions/DomainGeometry/czarnyGeometry.h" -#include "../include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h" #include "../include/InputFunctions/DensityProfileCoefficients/zoniShiftedCoefficients.h" #include "../include/InputFunctions/SourceTerms/polarR6_ZoniShifted_CzarnyGeometry.h" @@ -46,8 +45,6 @@ TEST(SmootherTest, smoother_DirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -107,8 +104,6 @@ TEST(SmootherTest, smoother_AcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -171,8 +166,6 @@ TEST(SmootherTest, SequentialSmootherDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -251,8 +244,6 @@ TEST(SmootherTest, ParallelSmootherDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -331,8 +322,6 @@ TEST(SmootherTest, SequentialSmootherAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -411,8 +400,6 @@ TEST(SmootherTest, ParallelSmootherAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -490,8 +477,6 @@ TEST(SmootherTest, SequentialSmootherDirBC_Interior_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -569,8 +554,6 @@ TEST(SmootherTest, ParallelSmootherDirBC_Interior_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -648,8 +631,6 @@ TEST(SmootherTest, SequentialSmootherAcrossOrigin_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -727,8 +708,6 @@ TEST(SmootherTest, ParallelSmootherAcrossOrigin_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -809,8 +788,6 @@ TEST(SmootherTest, SequentialSmootherTakeDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -889,8 +866,6 @@ TEST(SmootherTest, ParallelSmootherTakeDirBC_Interior) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -969,8 +944,6 @@ TEST(SmootherTest, SequentialSmootherTakeAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -1049,8 +1022,6 @@ TEST(SmootherTest, ParallelSmootherTakeAcrossOrigin) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; @@ -1128,8 +1099,6 @@ TEST(SmootherTest, SequentialSmootherTakeDirBC_Interior_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 1; @@ -1207,8 +1176,6 @@ TEST(SmootherTest, ParallelSmootherTakeDirBC_Interior_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = true; int maxOpenMPThreads = 16; @@ -1286,8 +1253,6 @@ TEST(SmootherTest, SequentialSmootherTakeAcrossOrigin_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 1; @@ -1365,8 +1330,6 @@ TEST(SmootherTest, ParallelSmootherTakeAcrossOrigin_SmallestGrid) double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - std::unique_ptr boundary_conditions = - std::make_unique(Rmax, kappa_eps, delta_e); bool DirBC_Interior = false; int maxOpenMPThreads = 16; From 4a7519c6c6cc0840d016a7e7168377426d9eca0a Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:24:05 +0100 Subject: [PATCH 5/9] Handle solve call on templated BoundaryConditions --- src/main.cpp | 6 +++++- tests/GMGPolar/convergence_order.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8a3896f5..36b3fbaa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,7 +53,11 @@ int main(int argc, char* argv[]) // --- Provide optional exact solution --- // solver->setSolution(&parser.exactSolution()); // --- Solve Phase --- // - solver->solve(parser.boundaryConditions(), parser.sourceTerm()); + std::visit( + [&](auto const& boundary_condition) { + solver->solve(boundary_condition, parser.sourceTerm()); + }, + parser.boundaryConditions()); // --- Retrieve solution and associated grid --- // Vector solution = solver->solution(); diff --git a/tests/GMGPolar/convergence_order.cpp b/tests/GMGPolar/convergence_order.cpp index 4d07722b..a75bbbb5 100644 --- a/tests/GMGPolar/convergence_order.cpp +++ b/tests/GMGPolar/convergence_order.cpp @@ -152,7 +152,7 @@ std::vector refine(std::vector const& original_points) return refined; } -template +template std::tuple get_gmgpolar_error(PolarGrid const& grid, CzarnyGeometry const& domain_geometry, DensityProfileCoefficients const& coefficients, BoundaryConditions const& boundary_conditions, From 15fa6c864a3ba9af8772398e19b148b2bb7a6626 Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:26:42 +0100 Subject: [PATCH 6/9] Remove BoundaryConditions super class --- .../cartesianR2_Boundary_CircularGeometry.h | 8 +++++--- .../cartesianR2_Boundary_CzarnyGeometry.h | 8 +++++--- .../cartesianR2_Boundary_ShafranovGeometry.h | 8 +++++--- .../cartesianR6_Boundary_CircularGeometry.h | 8 +++++--- .../cartesianR6_Boundary_CzarnyGeometry.h | 8 +++++--- .../cartesianR6_Boundary_ShafranovGeometry.h | 8 +++++--- .../polarR6_Boundary_CircularGeometry.h | 8 +++++--- .../polarR6_Boundary_CulhamGeometry.h | 8 +++++--- .../polarR6_Boundary_CzarnyGeometry.h | 8 +++++--- .../polarR6_Boundary_ShafranovGeometry.h | 8 +++++--- .../refined_Boundary_CircularGeometry.h | 8 +++++--- .../refined_Boundary_CulhamGeometry.h | 8 +++++--- .../refined_Boundary_CzarnyGeometry.h | 8 +++++--- .../refined_Boundary_ShafranovGeometry.h | 8 +++++--- include/InputFunctions/boundaryConditions.h | 13 +------------ 15 files changed, 71 insertions(+), 54 deletions(-) diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h index 32501ce1..320683f8 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class CartesianR2_Boundary_CircularGeometry : public BoundaryConditions +class CartesianR2_Boundary_CircularGeometry { public: CartesianR2_Boundary_CircularGeometry() = default; explicit CartesianR2_Boundary_CircularGeometry(double Rmax); virtual ~CartesianR2_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h index d88d90d6..d39e74a5 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h @@ -4,7 +4,7 @@ #include "../boundaryConditions.h" -class CartesianR2_Boundary_CzarnyGeometry : public BoundaryConditions +class CartesianR2_Boundary_CzarnyGeometry { public: explicit CartesianR2_Boundary_CzarnyGeometry(); @@ -13,8 +13,8 @@ class CartesianR2_Boundary_CzarnyGeometry : public BoundaryConditions virtual ~CartesianR2_Boundary_CzarnyGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; @@ -24,3 +24,5 @@ class CartesianR2_Boundary_CzarnyGeometry : public BoundaryConditions void initializeGeometry(); double factor_xi; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h index a0d9b4de..4ead9353 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h @@ -4,18 +4,20 @@ #include "../boundaryConditions.h" -class CartesianR2_Boundary_ShafranovGeometry : public BoundaryConditions +class CartesianR2_Boundary_ShafranovGeometry { public: CartesianR2_Boundary_ShafranovGeometry() = default; explicit CartesianR2_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); virtual ~CartesianR2_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; const double elongation_kappa = 0.3; const double shift_delta = 0.2; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h index 085e1f44..2598e3cf 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class CartesianR6_Boundary_CircularGeometry : public BoundaryConditions +class CartesianR6_Boundary_CircularGeometry { public: CartesianR6_Boundary_CircularGeometry() = default; explicit CartesianR6_Boundary_CircularGeometry(double Rmax); virtual ~CartesianR6_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h index 6dfc719f..dc6ddf2f 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h @@ -4,7 +4,7 @@ #include "../boundaryConditions.h" -class CartesianR6_Boundary_CzarnyGeometry : public BoundaryConditions +class CartesianR6_Boundary_CzarnyGeometry { public: explicit CartesianR6_Boundary_CzarnyGeometry(); @@ -13,8 +13,8 @@ class CartesianR6_Boundary_CzarnyGeometry : public BoundaryConditions virtual ~CartesianR6_Boundary_CzarnyGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; @@ -24,3 +24,5 @@ class CartesianR6_Boundary_CzarnyGeometry : public BoundaryConditions void initializeGeometry(); double factor_xi; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h index 4bbb1dc4..bcf448a3 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h @@ -4,18 +4,20 @@ #include "../boundaryConditions.h" -class CartesianR6_Boundary_ShafranovGeometry : public BoundaryConditions +class CartesianR6_Boundary_ShafranovGeometry { public: CartesianR6_Boundary_ShafranovGeometry() = default; explicit CartesianR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); virtual ~CartesianR6_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; const double elongation_kappa = 0.3; const double shift_delta = 0.2; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h index 338c1719..d063c902 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class PolarR6_Boundary_CircularGeometry : public BoundaryConditions +class PolarR6_Boundary_CircularGeometry { public: PolarR6_Boundary_CircularGeometry() = default; explicit PolarR6_Boundary_CircularGeometry(double Rmax); virtual ~PolarR6_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h index 5d674595..9c328849 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class PolarR6_Boundary_CulhamGeometry : public BoundaryConditions +class PolarR6_Boundary_CulhamGeometry { public: PolarR6_Boundary_CulhamGeometry() = default; explicit PolarR6_Boundary_CulhamGeometry(double Rmax); virtual ~PolarR6_Boundary_CulhamGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h index 4cc8f9c1..48e5f1ec 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h @@ -4,7 +4,7 @@ #include "../boundaryConditions.h" -class PolarR6_Boundary_CzarnyGeometry : public BoundaryConditions +class PolarR6_Boundary_CzarnyGeometry { public: explicit PolarR6_Boundary_CzarnyGeometry(); @@ -12,8 +12,8 @@ class PolarR6_Boundary_CzarnyGeometry : public BoundaryConditions virtual ~PolarR6_Boundary_CzarnyGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; @@ -23,3 +23,5 @@ class PolarR6_Boundary_CzarnyGeometry : public BoundaryConditions void initializeGeometry(); double factor_xi; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h index 637a122a..63027af8 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h @@ -4,18 +4,20 @@ #include "../boundaryConditions.h" -class PolarR6_Boundary_ShafranovGeometry : public BoundaryConditions +class PolarR6_Boundary_ShafranovGeometry { public: PolarR6_Boundary_ShafranovGeometry() = default; explicit PolarR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); virtual ~PolarR6_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; const double elongation_kappa = 0.3; const double shift_delta = 0.2; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h index b3a1770f..1e6f1f34 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class Refined_Boundary_CircularGeometry : public BoundaryConditions +class Refined_Boundary_CircularGeometry { public: Refined_Boundary_CircularGeometry() = default; explicit Refined_Boundary_CircularGeometry(double Rmax); virtual ~Refined_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h index 94fa1e60..c99f51b3 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h @@ -4,16 +4,18 @@ #include "../boundaryConditions.h" -class Refined_Boundary_CulhamGeometry : public BoundaryConditions +class Refined_Boundary_CulhamGeometry { public: Refined_Boundary_CulhamGeometry() = default; explicit Refined_Boundary_CulhamGeometry(double Rmax); virtual ~Refined_Boundary_CulhamGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h index 2bd96209..c94cfc4e 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h @@ -4,7 +4,7 @@ #include "../boundaryConditions.h" -class Refined_Boundary_CzarnyGeometry : public BoundaryConditions +class Refined_Boundary_CzarnyGeometry { public: explicit Refined_Boundary_CzarnyGeometry(); @@ -12,8 +12,8 @@ class Refined_Boundary_CzarnyGeometry : public BoundaryConditions virtual ~Refined_Boundary_CzarnyGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; @@ -23,3 +23,5 @@ class Refined_Boundary_CzarnyGeometry : public BoundaryConditions void initializeGeometry(); double factor_xi; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h index 8d5e170d..e8c8820e 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h @@ -4,18 +4,20 @@ #include "../boundaryConditions.h" -class Refined_Boundary_ShafranovGeometry : public BoundaryConditions +class Refined_Boundary_ShafranovGeometry { public: Refined_Boundary_ShafranovGeometry() = default; explicit Refined_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); virtual ~Refined_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const override; - double u_D_Interior(double r, double theta) const override; + double u_D(double r, double theta) const ; + double u_D_Interior(double r, double theta) const ; private: const double Rmax = 1.3; const double elongation_kappa = 0.3; const double shift_delta = 0.2; }; + +static_assert(concepts::BoundaryConditions); diff --git a/include/InputFunctions/boundaryConditions.h b/include/InputFunctions/boundaryConditions.h index 811f8a03..b19af423 100644 --- a/include/InputFunctions/boundaryConditions.h +++ b/include/InputFunctions/boundaryConditions.h @@ -1,21 +1,10 @@ #pragma once -class BoundaryConditions -{ -public: - BoundaryConditions() = default; - virtual ~BoundaryConditions() = default; - - virtual double u_D(double r, double theta) const = 0; - // Only used if DirBC_Interior = true - virtual double u_D_Interior(double r, double theta) const = 0; -}; - namespace concepts { template -concept BoundaryConditions = !std::same_as && requires(const T bcs, double r, double theta) { +concept BoundaryConditions = requires(const T bcs, double r, double theta) { { bcs.u_D(r, theta) } -> std::convertible_to; { bcs.u_D_Interior(r, theta) } -> std::convertible_to; }; From f029b6e24a2c3a44b448831b77eee2dffb14228b Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:30:30 +0100 Subject: [PATCH 7/9] Remove virtual --- .../cartesianR2_Boundary_CircularGeometry.h | 5 ++--- .../cartesianR2_Boundary_CzarnyGeometry.h | 6 ++---- .../cartesianR2_Boundary_ShafranovGeometry.h | 5 ++--- .../cartesianR6_Boundary_CircularGeometry.h | 5 ++--- .../cartesianR6_Boundary_CzarnyGeometry.h | 6 ++---- .../cartesianR6_Boundary_ShafranovGeometry.h | 5 ++--- .../BoundaryConditions/polarR6_Boundary_CircularGeometry.h | 5 ++--- .../BoundaryConditions/polarR6_Boundary_CulhamGeometry.h | 5 ++--- .../BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h | 6 ++---- .../BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h | 5 ++--- .../BoundaryConditions/refined_Boundary_CircularGeometry.h | 5 ++--- .../BoundaryConditions/refined_Boundary_CulhamGeometry.h | 5 ++--- .../BoundaryConditions/refined_Boundary_CzarnyGeometry.h | 6 ++---- .../BoundaryConditions/refined_Boundary_ShafranovGeometry.h | 5 ++--- 14 files changed, 28 insertions(+), 46 deletions(-) diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h index 320683f8..6d401935 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h @@ -9,10 +9,9 @@ class CartesianR2_Boundary_CircularGeometry public: CartesianR2_Boundary_CircularGeometry() = default; explicit CartesianR2_Boundary_CircularGeometry(double Rmax); - virtual ~CartesianR2_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h index d39e74a5..d1f8d7dd 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CzarnyGeometry.h @@ -11,10 +11,8 @@ class CartesianR2_Boundary_CzarnyGeometry explicit CartesianR2_Boundary_CzarnyGeometry(double Rmax, double inverse_aspect_ratio_epsilon, double ellipticity_e); - virtual ~CartesianR2_Boundary_CzarnyGeometry() = default; - - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h index 4ead9353..b69a2315 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h @@ -9,10 +9,9 @@ class CartesianR2_Boundary_ShafranovGeometry public: CartesianR2_Boundary_ShafranovGeometry() = default; explicit CartesianR2_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); - virtual ~CartesianR2_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h index 2598e3cf..248a4e92 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h @@ -9,10 +9,9 @@ class CartesianR6_Boundary_CircularGeometry public: CartesianR6_Boundary_CircularGeometry() = default; explicit CartesianR6_Boundary_CircularGeometry(double Rmax); - virtual ~CartesianR6_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h index dc6ddf2f..749094d7 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CzarnyGeometry.h @@ -11,10 +11,8 @@ class CartesianR6_Boundary_CzarnyGeometry explicit CartesianR6_Boundary_CzarnyGeometry(double Rmax, double inverse_aspect_ratio_epsilon, double ellipticity_e); - virtual ~CartesianR6_Boundary_CzarnyGeometry() = default; - - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h index bcf448a3..3660d502 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h @@ -9,10 +9,9 @@ class CartesianR6_Boundary_ShafranovGeometry public: CartesianR6_Boundary_ShafranovGeometry() = default; explicit CartesianR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); - virtual ~CartesianR6_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h index d063c902..828081df 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h @@ -9,10 +9,9 @@ class PolarR6_Boundary_CircularGeometry public: PolarR6_Boundary_CircularGeometry() = default; explicit PolarR6_Boundary_CircularGeometry(double Rmax); - virtual ~PolarR6_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h index 9c328849..35752b51 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h @@ -9,10 +9,9 @@ class PolarR6_Boundary_CulhamGeometry public: PolarR6_Boundary_CulhamGeometry() = default; explicit PolarR6_Boundary_CulhamGeometry(double Rmax); - virtual ~PolarR6_Boundary_CulhamGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h index 48e5f1ec..177f2eb7 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CzarnyGeometry.h @@ -10,10 +10,8 @@ class PolarR6_Boundary_CzarnyGeometry explicit PolarR6_Boundary_CzarnyGeometry(); explicit PolarR6_Boundary_CzarnyGeometry(double Rmax, double inverse_aspect_ratio_epsilon, double ellipticity_e); - virtual ~PolarR6_Boundary_CzarnyGeometry() = default; - - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h index 63027af8..66452ada 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h @@ -9,10 +9,9 @@ class PolarR6_Boundary_ShafranovGeometry public: PolarR6_Boundary_ShafranovGeometry() = default; explicit PolarR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); - virtual ~PolarR6_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h index 1e6f1f34..1cfbb521 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h @@ -9,10 +9,9 @@ class Refined_Boundary_CircularGeometry public: Refined_Boundary_CircularGeometry() = default; explicit Refined_Boundary_CircularGeometry(double Rmax); - virtual ~Refined_Boundary_CircularGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h index c99f51b3..181b5880 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h @@ -9,10 +9,9 @@ class Refined_Boundary_CulhamGeometry public: Refined_Boundary_CulhamGeometry() = default; explicit Refined_Boundary_CulhamGeometry(double Rmax); - virtual ~Refined_Boundary_CulhamGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h index c94cfc4e..e857e5b0 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CzarnyGeometry.h @@ -10,10 +10,8 @@ class Refined_Boundary_CzarnyGeometry explicit Refined_Boundary_CzarnyGeometry(); explicit Refined_Boundary_CzarnyGeometry(double Rmax, double inverse_aspect_ratio_epsilon, double ellipticity_e); - virtual ~Refined_Boundary_CzarnyGeometry() = default; - - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h index e8c8820e..0c54e6e9 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h @@ -9,10 +9,9 @@ class Refined_Boundary_ShafranovGeometry public: Refined_Boundary_ShafranovGeometry() = default; explicit Refined_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); - virtual ~Refined_Boundary_ShafranovGeometry() = default; - double u_D(double r, double theta) const ; - double u_D_Interior(double r, double theta) const ; + double u_D(double r, double theta) const; + double u_D_Interior(double r, double theta) const; private: const double Rmax = 1.3; From c3f2069f038c44008e9c3fb70d7e5dbcd7908559 Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:33:22 +0100 Subject: [PATCH 8/9] Remove unnecessary default constructor --- .../BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h | 1 - .../BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h | 1 - .../BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h | 1 - .../BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h | 1 - .../BoundaryConditions/polarR6_Boundary_CircularGeometry.h | 1 - .../BoundaryConditions/polarR6_Boundary_CulhamGeometry.h | 1 - .../BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h | 1 - .../BoundaryConditions/refined_Boundary_CircularGeometry.h | 1 - .../BoundaryConditions/refined_Boundary_CulhamGeometry.h | 1 - .../BoundaryConditions/refined_Boundary_ShafranovGeometry.h | 1 - 10 files changed, 10 deletions(-) diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h index 6d401935..066eb3d6 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_CircularGeometry.h @@ -7,7 +7,6 @@ class CartesianR2_Boundary_CircularGeometry { public: - CartesianR2_Boundary_CircularGeometry() = default; explicit CartesianR2_Boundary_CircularGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h index b69a2315..d3f2c0c9 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR2_Boundary_ShafranovGeometry.h @@ -7,7 +7,6 @@ class CartesianR2_Boundary_ShafranovGeometry { public: - CartesianR2_Boundary_ShafranovGeometry() = default; explicit CartesianR2_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h index 248a4e92..afe80cb6 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_CircularGeometry.h @@ -7,7 +7,6 @@ class CartesianR6_Boundary_CircularGeometry { public: - CartesianR6_Boundary_CircularGeometry() = default; explicit CartesianR6_Boundary_CircularGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h index 3660d502..235ee6f6 100644 --- a/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/cartesianR6_Boundary_ShafranovGeometry.h @@ -7,7 +7,6 @@ class CartesianR6_Boundary_ShafranovGeometry { public: - CartesianR6_Boundary_ShafranovGeometry() = default; explicit CartesianR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h index 828081df..bd9bb478 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CircularGeometry.h @@ -7,7 +7,6 @@ class PolarR6_Boundary_CircularGeometry { public: - PolarR6_Boundary_CircularGeometry() = default; explicit PolarR6_Boundary_CircularGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h index 35752b51..0af9883b 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_CulhamGeometry.h @@ -7,7 +7,6 @@ class PolarR6_Boundary_CulhamGeometry { public: - PolarR6_Boundary_CulhamGeometry() = default; explicit PolarR6_Boundary_CulhamGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h index 66452ada..ff98d536 100644 --- a/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/polarR6_Boundary_ShafranovGeometry.h @@ -7,7 +7,6 @@ class PolarR6_Boundary_ShafranovGeometry { public: - PolarR6_Boundary_ShafranovGeometry() = default; explicit PolarR6_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h index 1cfbb521..d6c8c02b 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CircularGeometry.h @@ -7,7 +7,6 @@ class Refined_Boundary_CircularGeometry { public: - Refined_Boundary_CircularGeometry() = default; explicit Refined_Boundary_CircularGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h index 181b5880..39ef8999 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_CulhamGeometry.h @@ -7,7 +7,6 @@ class Refined_Boundary_CulhamGeometry { public: - Refined_Boundary_CulhamGeometry() = default; explicit Refined_Boundary_CulhamGeometry(double Rmax); double u_D(double r, double theta) const; diff --git a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h index 0c54e6e9..5d880f47 100644 --- a/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h +++ b/include/InputFunctions/BoundaryConditions/refined_Boundary_ShafranovGeometry.h @@ -7,7 +7,6 @@ class Refined_Boundary_ShafranovGeometry { public: - Refined_Boundary_ShafranovGeometry() = default; explicit Refined_Boundary_ShafranovGeometry(double Rmax, double elongation_kappa, double shift_delta); double u_D(double r, double theta) const; From 6182e3ebf5bf1dd4c4975f70e379b733d14d8d04 Mon Sep 17 00:00:00 2001 From: Emily Bourne Date: Tue, 27 Jan 2026 17:48:27 +0100 Subject: [PATCH 9/9] Clang format --- include/GMGPolar/build_rhs_f.h | 2 +- include/GMGPolar/igmgpolar.h | 4 +-- include/GMGPolar/solver.h | 2 +- tests/DirectSolver/directSolverNoMumps.cpp | 32 +++++++++++----------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/include/GMGPolar/build_rhs_f.h b/include/GMGPolar/build_rhs_f.h index 04083376..c37e2aa8 100644 --- a/include/GMGPolar/build_rhs_f.h +++ b/include/GMGPolar/build_rhs_f.h @@ -140,7 +140,7 @@ void GMGPolar::discretize_rhs_f(cons } } -template +template void IGMGPolar::build_rhs_f(const Level& level, Vector rhs_f, const BoundaryConditions& boundary_conditions, const SourceTerm& source_term) { diff --git a/include/GMGPolar/igmgpolar.h b/include/GMGPolar/igmgpolar.h index ee501944..1a2cec4d 100644 --- a/include/GMGPolar/igmgpolar.h +++ b/include/GMGPolar/igmgpolar.h @@ -135,7 +135,7 @@ class IGMGPolar // Solve system with given boundary conditions and source term. // Multiple solves with different inputs are supported. - template + template void solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term); /* ---------------------------------------------------------------------- */ @@ -256,7 +256,7 @@ class IGMGPolar /* --------------- */ /* Setup Functions */ int chooseNumberOfLevels(const PolarGrid& finest_grid); - template + template void build_rhs_f(const Level& level, Vector rhs_f, const BoundaryConditions& boundary_conditions, const SourceTerm& source_term); virtual void discretize_rhs_f(const Level& level, Vector rhs_f) = 0; diff --git a/include/GMGPolar/solver.h b/include/GMGPolar/solver.h index 715e2171..d9825832 100644 --- a/include/GMGPolar/solver.h +++ b/include/GMGPolar/solver.h @@ -2,7 +2,7 @@ // ============================================================================= // Main Solver Routine // ============================================================================= -template +template void IGMGPolar::solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term) { auto start_setup_rhs = std::chrono::high_resolution_clock::now(); diff --git a/tests/DirectSolver/directSolverNoMumps.cpp b/tests/DirectSolver/directSolverNoMumps.cpp index a1abb89c..8d296245 100644 --- a/tests/DirectSolver/directSolverNoMumps.cpp +++ b/tests/DirectSolver/directSolverNoMumps.cpp @@ -550,10 +550,10 @@ TEST(DirectSolverTestNoMumps_CulhamGeometry, DirectSolverDirBC_Interior_CulhamGe double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - bool DirBC_Interior = true; - int maxOpenMPThreads = 16; - bool cache_density_rpofile_coefficients = true; - bool cache_domain_geometry = false; + bool DirBC_Interior = true; + int maxOpenMPThreads = 16; + bool cache_density_rpofile_coefficients = true; + bool cache_domain_geometry = false; auto levelCache = std::make_unique(*grid, *coefficients, domain_geometry, cache_density_rpofile_coefficients, cache_domain_geometry); @@ -594,10 +594,10 @@ TEST(DirectSolverTestNoMumps_CulhamGeometry, DirectSolverAcrossOrigin_CulhamGeom double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - bool DirBC_Interior = false; - int maxOpenMPThreads = 16; - bool cache_density_rpofile_coefficients = true; - bool cache_domain_geometry = false; + bool DirBC_Interior = false; + int maxOpenMPThreads = 16; + bool cache_density_rpofile_coefficients = true; + bool cache_domain_geometry = false; auto levelCache = std::make_unique(*grid, *coefficients, domain_geometry, cache_density_rpofile_coefficients, cache_domain_geometry); @@ -1113,10 +1113,10 @@ TEST(DirectSolverTakeCustomLUTest_CulhamGeometry, DirectSolverDirBC_Interior_Cul double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - bool DirBC_Interior = true; - int maxOpenMPThreads = 16; - bool cache_density_rpofile_coefficients = true; - bool cache_domain_geometry = true; + bool DirBC_Interior = true; + int maxOpenMPThreads = 16; + bool cache_density_rpofile_coefficients = true; + bool cache_domain_geometry = true; auto levelCache = std::make_unique(*grid, *coefficients, domain_geometry, cache_density_rpofile_coefficients, cache_domain_geometry); @@ -1157,10 +1157,10 @@ TEST(DirectSolverTakeCustomLUTest_CulhamGeometry, DirectSolverAcrossOrigin_Culha double alpha_jump = 0.678 * Rmax; std::unique_ptr coefficients = std::make_unique(Rmax, alpha_jump); - bool DirBC_Interior = false; - int maxOpenMPThreads = 16; - bool cache_density_rpofile_coefficients = true; - bool cache_domain_geometry = true; + bool DirBC_Interior = false; + int maxOpenMPThreads = 16; + bool cache_density_rpofile_coefficients = true; + bool cache_domain_geometry = true; auto levelCache = std::make_unique(*grid, *coefficients, domain_geometry, cache_density_rpofile_coefficients, cache_domain_geometry);