Skip to content
Merged
15 changes: 11 additions & 4 deletions include/ConfigParser/config_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "../../include/PolarGrid/polargrid.h"
#include "../../include/GMGPolar/test_cases.h"
#include "../../include/GMGPolar/igmgpolar.h"
#include "../../include/GMGPolar/gmgpolar.h"
#include "test_selection.h"

class ConfigParser
Expand All @@ -26,11 +27,12 @@ class ConfigParser
// Test Case
const DomainGeometryVariant& domainGeometry() const;
const DensityProfileCoefficientsVariant& densityProfileCoefficients() const;
const BoundaryConditionsVariant& boundaryConditions() const;
const SourceTerm& sourceTerm() const;
const ExactSolution& exactSolution() const;
std::unique_ptr<IGMGPolar> solver() const;

template <concepts::DomainGeometry DomainGeometry, concepts::DensityProfileCoefficients DensityProfileCoefficients>
void solve(GMGPolar<DomainGeometry, DensityProfileCoefficients>& solver) const;

// Control Parameters
int verbose() const;
bool paraview() const;
Expand Down Expand Up @@ -72,9 +74,14 @@ class ConfigParser
// Input Functions
std::unique_ptr<const DomainGeometryVariant> domain_geometry_;
std::unique_ptr<const DensityProfileCoefficientsVariant> density_profile_coefficients_;
std::unique_ptr<const BoundaryConditionsVariant> boundary_conditions_;
std::unique_ptr<const SourceTerm> source_term_;
std::unique_ptr<const ExactSolution> exact_solution_;
GeometryType geometry_type_;
ProblemType problem_type_;
AlphaCoeff alpha_type_;
BetaCoeff beta_type_;
double Rmax_;
double kappa_eps_;
double delta_e_;
// General solver output and visualization settings
int verbose_;
bool paraview_;
Expand Down
21 changes: 0 additions & 21 deletions include/ConfigParser/test_selection.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,9 @@
#include <variant>

#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<CircularGeometry, ShafranovGeometry, CzarnyGeometry, CulhamGeometry>;

using DensityProfileCoefficientsVariant =
std::variant<PoissonCoefficients, SonnendruckerCoefficients, SonnendruckerGyroCoefficients, ZoniCoefficients,
ZoniGyroCoefficients, ZoniShiftedCoefficients, ZoniShiftedGyroCoefficients>;

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>;
5 changes: 3 additions & 2 deletions include/GMGPolar/gmgpolar.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "../InputFunctions/densityProfileCoefficients.h"
#include "../InputFunctions/domainGeometry.h"
#include "../InputFunctions/sourceTerm.h"
#include "../Level/level.h"

#include "igmgpolar.h"
Expand Down Expand Up @@ -51,7 +52,7 @@ class GMGPolar : public IGMGPolar

// Solve system with given boundary conditions and source term.
// Multiple solves with different inputs are supported.
template <concepts::BoundaryConditions BoundaryConditions>
template <concepts::BoundaryConditions BoundaryConditions, concepts::SourceTerm SourceTerm>
void solve(const BoundaryConditions& boundary_conditions, const SourceTerm& source_term);

/* ---------------------------------------------------------------------- */
Expand Down Expand Up @@ -139,7 +140,7 @@ class GMGPolar : public IGMGPolar
/* --------------- */
/* Setup Functions */
int chooseNumberOfLevels(const PolarGrid& finest_grid);
template <concepts::BoundaryConditions BoundaryConditions>
template <concepts::BoundaryConditions BoundaryConditions, concepts::SourceTerm SourceTerm>
void build_rhs_f(const Level<DomainGeometry, DensityProfileCoefficients>& level, Vector<double> rhs_f,
const BoundaryConditions& boundary_conditions, const SourceTerm& source_term);
void discretize_rhs_f(const Level<DomainGeometry, DensityProfileCoefficients>& level, Vector<double> rhs_f);
Expand Down
2 changes: 1 addition & 1 deletion include/GMGPolar/setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ void GMGPolar<DomainGeometry, DensityProfileCoefficients>::discretize_rhs_f(
}

template <concepts::DomainGeometry DomainGeometry, concepts::DensityProfileCoefficients DensityProfileCoefficients>
template <concepts::BoundaryConditions BoundaryConditions>
template <concepts::BoundaryConditions BoundaryConditions, concepts::SourceTerm SourceTerm>
void GMGPolar<DomainGeometry, DensityProfileCoefficients>::build_rhs_f(
const Level<DomainGeometry, DensityProfileCoefficients>& level, Vector<double> rhs_f,
const BoundaryConditions& boundary_conditions, const SourceTerm& source_term)
Expand Down
2 changes: 1 addition & 1 deletion include/GMGPolar/solver.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Main Solver Routine
// =============================================================================
template <concepts::DomainGeometry DomainGeometry, concepts::DensityProfileCoefficients DensityProfileCoefficients>
template <concepts::BoundaryConditions BoundaryConditions>
template <concepts::BoundaryConditions BoundaryConditions, concepts::SourceTerm SourceTerm>
void GMGPolar<DomainGeometry, DensityProfileCoefficients>::solve(const BoundaryConditions& boundary_conditions,
const SourceTerm& source_term)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Poisson_CircularGeometry : public SourceTerm
class CartesianR2_Poisson_CircularGeometry
{
public:
explicit CartesianR2_Poisson_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_Poisson_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Poisson_CzarnyGeometry : public SourceTerm
class CartesianR2_Poisson_CzarnyGeometry
{
public:
explicit CartesianR2_Poisson_CzarnyGeometry(PolarGrid const& grid, double Rmax, double inverse_aspect_ratio_epsilon,
double ellipticity_e);
virtual ~CartesianR2_Poisson_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Poisson_ShafranovGeometry : public SourceTerm
class CartesianR2_Poisson_ShafranovGeometry
{
public:
explicit CartesianR2_Poisson_ShafranovGeometry(PolarGrid const& grid, double Rmax, double elongation_kappa,
double shift_delta);
virtual ~CartesianR2_Poisson_ShafranovGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_SonnendruckerGyro_CircularGeometry : public SourceTerm
class CartesianR2_SonnendruckerGyro_CircularGeometry
{
public:
explicit CartesianR2_SonnendruckerGyro_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_SonnendruckerGyro_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_SonnendruckerGyro_CzarnyGeometry : public SourceTerm
class CartesianR2_SonnendruckerGyro_CzarnyGeometry
{
public:
explicit CartesianR2_SonnendruckerGyro_CzarnyGeometry(PolarGrid const& grid, double Rmax,
double inverse_aspect_ratio_epsilon, double ellipticity_e);
virtual ~CartesianR2_SonnendruckerGyro_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_SonnendruckerGyro_ShafranovGeometry : public SourceTerm
class CartesianR2_SonnendruckerGyro_ShafranovGeometry
{
public:
explicit CartesianR2_SonnendruckerGyro_ShafranovGeometry(PolarGrid const& grid, double Rmax,
double elongation_kappa, double shift_delta);
virtual ~CartesianR2_SonnendruckerGyro_ShafranovGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Sonnendrucker_CircularGeometry : public SourceTerm
class CartesianR2_Sonnendrucker_CircularGeometry
{
public:
explicit CartesianR2_Sonnendrucker_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_Sonnendrucker_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Sonnendrucker_CzarnyGeometry : public SourceTerm
class CartesianR2_Sonnendrucker_CzarnyGeometry
{
public:
explicit CartesianR2_Sonnendrucker_CzarnyGeometry(PolarGrid const& grid, double Rmax,
double inverse_aspect_ratio_epsilon, double ellipticity_e);
virtual ~CartesianR2_Sonnendrucker_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_Sonnendrucker_ShafranovGeometry : public SourceTerm
class CartesianR2_Sonnendrucker_ShafranovGeometry
{
public:
explicit CartesianR2_Sonnendrucker_ShafranovGeometry(PolarGrid const& grid, double Rmax, double elongation_kappa,
double shift_delta);
virtual ~CartesianR2_Sonnendrucker_ShafranovGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniGyro_CircularGeometry : public SourceTerm
class CartesianR2_ZoniGyro_CircularGeometry
{
public:
explicit CartesianR2_ZoniGyro_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_ZoniGyro_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniGyro_CzarnyGeometry : public SourceTerm
class CartesianR2_ZoniGyro_CzarnyGeometry
{
public:
explicit CartesianR2_ZoniGyro_CzarnyGeometry(PolarGrid const& grid, double Rmax,
double inverse_aspect_ratio_epsilon, double ellipticity_e);
virtual ~CartesianR2_ZoniGyro_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniGyro_ShafranovGeometry : public SourceTerm
class CartesianR2_ZoniGyro_ShafranovGeometry
{
public:
explicit CartesianR2_ZoniGyro_ShafranovGeometry(PolarGrid const& grid, double Rmax, double elongation_kappa,
double shift_delta);
virtual ~CartesianR2_ZoniGyro_ShafranovGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniShiftedGyro_CircularGeometry : public SourceTerm
class CartesianR2_ZoniShiftedGyro_CircularGeometry
{
public:
explicit CartesianR2_ZoniShiftedGyro_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_ZoniShiftedGyro_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniShiftedGyro_CzarnyGeometry : public SourceTerm
class CartesianR2_ZoniShiftedGyro_CzarnyGeometry
{
public:
explicit CartesianR2_ZoniShiftedGyro_CzarnyGeometry(PolarGrid const& grid, double Rmax,
double inverse_aspect_ratio_epsilon, double ellipticity_e);
virtual ~CartesianR2_ZoniShiftedGyro_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniShiftedGyro_ShafranovGeometry : public SourceTerm
class CartesianR2_ZoniShiftedGyro_ShafranovGeometry
{
public:
explicit CartesianR2_ZoniShiftedGyro_ShafranovGeometry(PolarGrid const& grid, double Rmax, double elongation_kappa,
double shift_delta);
virtual ~CartesianR2_ZoniShiftedGyro_ShafranovGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniShifted_CircularGeometry : public SourceTerm
class CartesianR2_ZoniShifted_CircularGeometry
{
public:
explicit CartesianR2_ZoniShifted_CircularGeometry(PolarGrid const& grid, double Rmax);
virtual ~CartesianR2_ZoniShifted_CircularGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@

#include "../../PolarGrid/polargrid.h"

class CartesianR2_ZoniShifted_CzarnyGeometry : public SourceTerm
class CartesianR2_ZoniShifted_CzarnyGeometry
{
public:
explicit CartesianR2_ZoniShifted_CzarnyGeometry(PolarGrid const& grid, double Rmax,
double inverse_aspect_ratio_epsilon, double ellipticity_e);
virtual ~CartesianR2_ZoniShifted_CzarnyGeometry() = default;

double operator()(std::size_t i_r, std::size_t i_theta) const override;
double operator()(std::size_t i_r, std::size_t i_theta) const;

private:
PolarGrid const& grid_;
Expand Down
Loading
Loading