Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 13 additions & 25 deletions CpuImplementations/include/GeliosphereCpuModel.hpp
Original file line number Diff line number Diff line change
@@ -1,24 +1,13 @@
/**
* @file GeliosphereCpuModel.hpp
* @author Michal Solanik
* @brief CPU implementation for Geliosphere 2D model
* @version 0.2
* @date 2022-07-07
*
* @copyright Copyright (c) 2022
*
*/

#ifndef BP_CPU_THREE_DIMENSION_SIMULATION_H
#define BP_CPU_THREE_DIMENSION_SIMULATION_H

#include "AbstractCpuModel.hpp"
#include "IGeliosphereCpuModel.hpp"

#include <mutex>
#include <queue>

struct SimulationOutput
{
struct SimulationOutput {
double Tkininj;
double Tkin;
double r;
Expand All @@ -27,21 +16,20 @@ struct SimulationOutput
double theta;
};

/**
* @brief Class implements @ref AbstractAlgorithm "AbstractAlgorithm" interface
* to define support functions for running implementation of Geliosphere 2D B-p model.
*
*/
class GeliosphereCpuModel : public AbstractCpuModel
{
class GeliosphereCpuModel : public AbstractCpuModel, public IGeliosphereCpuModel {
public:
/**
* @brief Definition of simulation runner.
*
* @param singleTone data structure containing input parameters.
*/
void runSimulation(ParamsCarrier *singleTone);

protected:
double Beta(double Tkin) override;
double RigFromTkin(double Tkin) override;
double W(double p) override;
double GetMomentum(double Rig) override;
double LarmorRadius(double Rig, double Bfield) override;
double AlphaH(double Larmor, double r) override;
double ComputeF(double theta, double alphaH) override;
double ComputeFPrime(double theta, double alphaH) override;

private:
void simulation(int threadNumber, unsigned int availableThreads, int iteration);
std::mutex outputMutex;
Expand Down
19 changes: 19 additions & 0 deletions CpuImplementations/include/IGeliosphereCpuModel.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef I_GELIOSPHERE_CPU_MODEL_H
#define I_GELIOSPHERE_CPU_MODEL_H

class IGeliosphereCpuModel {
protected:
virtual double Beta(double Tkin) = 0;
virtual double RigFromTkin(double Tkin) = 0;
virtual double W(double p) = 0;
virtual double GetMomentum(double Rig) = 0;
virtual double LarmorRadius(double Rig, double Bfield) = 0;
virtual double AlphaH(double Larmor, double r) = 0;
virtual double ComputeF(double theta, double alphaH) = 0;
virtual double ComputeFPrime(double theta, double alphaH) = 0;

public:
virtual ~IGeliosphereCpuModel() = default;
};

#endif // I_GELIOSPHERE_CPU_MODEL_H
17 changes: 17 additions & 0 deletions CpuImplementations/include/IOneDimensionBpCpuModel.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifndef I_ONE_DIMENSION_BP_CPU_MODEL_H
#define I_ONE_DIMENSION_BP_CPU_MODEL_H

class IOneDimensionBpCpuModel {
protected:
virtual double Beta(double Tkin) = 0;
virtual double RigFromTkin(double Tkin) = 0;
virtual double Kdiffr(double beta, double Rig) = 0;
virtual double Dp(double V, double p, double r) = 0;
virtual double Dr(double V, double Kdiff, double r, double dt, double rand) = 0;
virtual double W(double p) = 0;

public:
virtual ~IOneDimensionBpCpuModel() = default;
};

#endif // I_ONE_DIMENSION_BP_CPU_MODEL_H
20 changes: 20 additions & 0 deletions CpuImplementations/include/IOneDimensionFpCpuModel.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef I_ONE_DIMENSION_FP_CPU_MODEL_H
#define I_ONE_DIMENSION_FP_CPU_MODEL_H

class IOneDimensionFpCpuModel {
protected:
virtual double Beta(double Tkin) = 0;
virtual double RigFromTkin(double Tkin) = 0;
virtual double RigFromTkinJoule(double Tkin) = 0;
virtual double Kdiffr(double beta, double Rig) = 0;
virtual double Dp(double V, double p, double r) = 0;
virtual double Dr(double V, double Kdiff, double r, double dt, double rand) = 0;
virtual double Cfactor(double V, double r) = 0;
virtual double TkinFromRig(double Rig) = 0;
virtual double W(double p) = 0;

public:
virtual ~IOneDimensionFpCpuModel() = default;
};

#endif // I_ONE_DIMENSION_FP_CPU_MODEL_H
19 changes: 18 additions & 1 deletion CpuImplementations/include/OneDimensionBpCpuModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define BP_CPU_ONE_DIMENSION_SIMULATION_H

#include "AbstractCpuModel.hpp"
#include "IOneDimensionBpCpuModel.hpp"

#include <mutex>
#include <queue>
Expand All @@ -22,14 +23,18 @@ struct SimulationOutput {
double Tkininj;
double r;
double w;

// Constructor
//SimulationOutput(double Tkin_, double Tkininj_, double r_, double w_)
//: Tkin(Tkin_), Tkininj(Tkininj_), r(r_), w(w_) {}
};

/**
* @brief Class implements @ref AbstractAlgorithm "AbstractAlgorithm" interface
* to define support functions for running implementation of 1D B-p model.
*
*/
class OneDimensionBpCpuModel : public AbstractCpuModel
class OneDimensionBpCpuModel : public AbstractCpuModel, public IOneDimensionBpCpuModel
{
public:
/**
Expand All @@ -38,6 +43,18 @@ class OneDimensionBpCpuModel : public AbstractCpuModel
* @param singleTone data structure containing input parameters.
*/
void runSimulation(ParamsCarrier *singleTone);

protected:
// Implemented from interface
double Beta(double Tkin) override;
double RigFromTkin(double Tkin) override;
//double RigFromMomentum(double p) override;
double Kdiffr(double beta, double Rig) override;
double Dp(double V, double p, double r) override;
double Dr(double V, double Kdiff, double r, double dt, double rand) override;
//double TkinFromRig(double Rig) override;
double W(double p) override;

private:
void simulation(int threadNumber, unsigned int availableThreads, int iteration);
std::mutex outputMutex;
Expand Down
16 changes: 15 additions & 1 deletion CpuImplementations/include/OneDimensionFpCpuModel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define FP_CPU_ONE_DIMENSION_SIMULATION_H

#include "AbstractCpuModel.hpp"
#include "IOneDimensionFpCpuModel.hpp"

#include <mutex>
#include <queue>
Expand All @@ -30,7 +31,7 @@ struct SimulationOutput {
* to define support functions for running implementation of 1D F-p model.
*
*/
class OneDimensionFpCpuModel : public AbstractCpuModel
class OneDimensionFpCpuModel : public AbstractCpuModel, public IOneDimensionFpCpuModel
{
public:
/**
Expand All @@ -39,6 +40,19 @@ class OneDimensionFpCpuModel : public AbstractCpuModel
* @param singleTone data structure containing input parameters.
*/
void runSimulation(ParamsCarrier *singleTone);

protected:
// Implemented from interface
double Beta(double Tkin) override;
double RigFromTkin(double Tkin) override;
double RigFromTkinJoule(double Tkin) override;
double Kdiffr(double beta, double Rig) override;
double Dp(double V, double p, double r) override;
double Dr(double V, double Kdiff, double r, double dt, double rand) override;
double Cfactor(double V, double r) override;
double TkinFromRig(double Rig) override;
double W(double p) override;

private:
void simulation(int threadNumber, unsigned int availableThreads, int iteration);
std::mutex outputMutex;
Expand Down
Loading