Program Listing for File Solver.h

Return to documentation for file (include/classes/Solver.h)

//       _______.  ______  __       ___      .__   __. .___________. __  ___   ___  //
//      /       | /      ||  |     /   \     |  \ |  | |           ||  | \  \ /  /  //
//     |   (----`|  ,----'|  |    /  ^  \    |   \|  | `---|  |----`|  |  \  V  /   //
//      \   \    |  |     |  |   /  /_\  \   |  . `  |     |  |     |  |   >   <    //
//  .----)   |   |  `----.|  |  /  _____  \  |  |\   |     |  |     |  |  /  .  \   //
//  |_______/     \______||__| /__/     \__\ |__| \__|     |__|     |__| /__/ \__\  //
//                                                                                  //
//  Originally developed by D. Pizzocri & T. Barani                                 //
//                                                                                  //
//  Version: 2.2.1                                                                    //
//  Year: 2025                                                                      //
//  Authors: D. Pizzocri, G. Zullo.                                                 //
//                                                                                  //

#ifndef SOLVER_h
#define SOLVER_h

#include "InputVariable.h"
#include <cmath>
#include <string>
#include <vector>

class Solver : virtual public InputVariable
{
  public:
    double Integrator(double initial_value, double parameter, double increment);

    double LimitedGrowth(double initial_value, std::vector<double> parameter, double increment);

    double Decay(double initial_condition, double decay_rate, double source_term, double increment);

    double BinaryInteraction(double initial_condition, double interaction_coefficient,
                             double increment);

    double SpectralDiffusion(double* initial_condition, std::vector<double> parameter,
                             double increment);

    double dotProduct1D(std::vector<double> u, double v[], int n);

    void dotProduct2D(double A[], double v[], int n_rows, const int n_col, double result[]);

    void SpectralDiffusion2equations(double& gas_1, double& gas_2, double* initial_condition_gas_1,
                                     double* initial_condition_gas_2, std::vector<double> parameter,
                                     double increment);

    void SpectralDiffusion3equations(double& gas_1, double& gas_2, double& gas_3,
                                     double* initial_condition_gas_1,
                                     double* initial_condition_gas_2,
                                     double* initial_condition_gas_3, std::vector<double> parameter,
                                     double increment);

    void Laplace2x2(double A[], double b[]);

    void Laplace3x3(double A[], double b[]);

    double det(int N, double A[]);

    void Laplace(int N, double A[], double b[]);

    double QuarticEquation(std::vector<double> parameter);

    void modeInitialization(int n_modes, double mode_initial_condition, double* diffusion_modes);

    double NewtonBlackburn(std::vector<double> parameter);
    double NewtonLangmuirBasedModel(double initial_value, std::vector<double> parameter,
                                    double increment);

    Solver() {}
    ~Solver() {}
};

#endif  // SOLVER_H