PFASST++
simple_physics_solver.hpp
Go to the documentation of this file.
1 
5 #ifndef _SIMPLE_PHYSICS_SOLVER_HPP_
6 #define _SIMPLE_PHYSICS_SOLVER_HPP_
7 
8 #include <cstdlib>
9 using namespace std;
10 
11 #ifndef DIM
12  #define DIM 3
13 #endif
14 
15 
17 namespace simple_physics_solver
18 {
21  {
22  public:
23  double omega_e;
24  double omega_b;
25  double epsilon;
26  double sigma;
27  double sigma2;
28  double external_e_field_matrix[3][3];
29  double b_field_matrix[3][3];
30 
31  SimplePhysicsSolverConfig(const double omega_e = double(-4.9), const double omega_b = double(25.0),
32  const double epsilon = double(-1.0), const double sigma = double(0.1));
33  virtual ~SimplePhysicsSolverConfig();
34  };
35 
37  void evaluate_external_e_field(const double* positions, const double* charges, const double* masses,
38  const size_t num_particles, const double t,
39  const SimplePhysicsSolverConfig* config,
40  double* forces);
41 
43  void evaluate_internal_e_field(const double* positions, const double* charges, const double* masses,
44  const size_t num_particles, const double t,
45  const SimplePhysicsSolverConfig* config,
46  double* exyz, double* phis);
47 
49  void evaluate_e_field(const double* positions, const double* charges, const double* masses,
50  const size_t num_particles, const double t,
51  const SimplePhysicsSolverConfig* config,
52  double* forces);
53 
56  double* b_field_vector);
57 
59  void evaluate_b_field(const double* velocities, const double* masses, const double* charges,
60  const size_t num_particles, const double t,
61  const SimplePhysicsSolverConfig* config,
62  double* forces);
63 
65  double compute_energy(const double* positions, const double* velocities, const double* masses,
66  const double* charges,
67  const size_t num_particles, const double t,
68  const SimplePhysicsSolverConfig* config);
69 
71  namespace internal
72  {
73  inline void cross_prod(const double first[DIM], const double second[DIM], double cross_prod[DIM]);
74 
75  inline double scalar_prod(const double first[DIM], const double second[DIM]);
76 
77  inline void scale_mat_mul_vec(const double mat[DIM][DIM], const double vec[DIM], const double factor, double prod[DIM]);
78 
79  inline void print_vec(const double vec[DIM]);
80  } // ::simple_physics_solver::internal
81 } // ::simple_physics_solver
82 
83 #endif
void evaluate_external_e_field(const double *positions, const double *charges, const double *masses, const size_t num_particles, const double t, const SimplePhysicsSolverConfig *config, double *forces)
void evaluate_internal_e_field(const double *positions, const double *charges, const double *masses, const size_t num_particles, const double t, const SimplePhysicsSolverConfig *config, double *exyz, double *phis)
double scalar_prod(const double first[DIM], const double second[DIM])
STL namespace.
void cross_prod(const double first[DIM], const double second[DIM], double cross_prod[DIM])
void get_b_field_vector(const SimplePhysicsSolverConfig *config, double *b_field_vector)
void evaluate_b_field(const double *velocities, const double *charges, const double *masses, const size_t num_particles, const double t, const SimplePhysicsSolverConfig *config, double *forces)
#define DIM
void scale_mat_mul_vec(const double mat[DIM][DIM], const double vec[DIM], const double factor, double prod[DIM])
tuple t
Definition: plot.py:12
double compute_energy(const double *positions, const double *velocities, const double *charges, const double *masses, const size_t num_particles, const double t, const SimplePhysicsSolverConfig *config)
void evaluate_e_field(const double *positions, const double *charges, const double *masses, const size_t num_particles, const double t, const SimplePhysicsSolverConfig *config, double *forces)
void print_vec(const double vec[DIM])