OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
eq.hpp
1 /*
2  * eq.hpp
3  *
4  * Created on: Oct 5, 2015
5  * Author: i-bird
6  */
7 
8 #ifndef OPENFPM_NUMERICS_SRC_FINITEDIFFERENCE_EQ_HPP_
9 #define OPENFPM_NUMERICS_SRC_FINITEDIFFERENCE_EQ_HPP_
10 
11 #define EQS_FIELD 0
12 #define EQS_POS 1
13 
14 //#define PERIODIC true
15 //#define NON_PERIODIC false
16 
17 #include "util/util_num.hpp"
18 
27 template<typename expr1,typename expr2,typename Sys_eqs>
28 class Eq
29 {
35  template<unsigned int ord=EQS_FIELD> static void value(const grid_key_dx<Sys_eqs::dims> & pos)
36  {
37  if (EQS_FIELD)
38  value_f(pos);
39  else
40  value_s(pos);
41  }
42 
48  {
49  return expr1::value_s(it) - expr2::value_s(it);
50  }
51 
57  {
58  return expr1::value_s(it) - expr2::value_s(it);
59  }
60 };
61 
62 
63 // spatial position + value
64 
65 template<unsigned int dim,typename T>
66 struct pos_val
67 {
72  {
73  value = 0.0;
74  }
75 
76  grid_key_dx<dim> pos;
77  T value;
78 };
79 
80 template<unsigned int f, typename Sys_eqs>
81 class Field
82 {
84 
85 public:
86 
91  static void value(const map_grid & g_map, grid_dist_key_dx<Sys_eqs::dims> & kmap, const grid_sm<Sys_eqs::dims,void> & gs, typename Sys_eqs::stype (& spacing )[Sys_eqs::dims] , std::unordered_map<long int,typename Sys_eqs::stype > & cols, typename Sys_eqs::stype coeff)
92  {
93  cols[g_map.template get<0>(kmap)*Sys_eqs::nvar + f] += coeff;
94  }
95 
100  static grid_key_dx<Sys_eqs::dims> position(grid_key_dx<Sys_eqs::dims> & pos, const grid_sm<Sys_eqs::dims,void> & gs, const comb<Sys_eqs::dims> (& s_pos)[Sys_eqs::nvar])
101  {
102  return grid_key_dx<Sys_eqs::dims>(s_pos[f]);
103  }
104 };
105 
107 {
108 
109 };
110 
111 inline size_t mat_factor(size_t nvar, size_t sz, const size_t ord)
112 {
113  return nvar;
114 }
115 
116 #include "mul.hpp"
117 #include "Average.hpp"
118 #include "Derivative.hpp"
119 #include "sum.hpp"
120 #include "Laplacian.hpp"
121 
122 #endif /* OPENFPM_NUMERICS_SRC_FINITEDIFFERENCE_EQ_HPP_ */
static void value(const grid_key_dx< Sys_eqs::dims > &pos)
Create the row of the Matrix.
Definition: eq.hpp:35
pos_val()
Initialize to zero the value.
Definition: eq.hpp:71
Definition: eq.hpp:81
Grid key for a distributed grid.
Equation.
Definition: eq.hpp:28
static void value(const map_grid &g_map, grid_dist_key_dx< Sys_eqs::dims > &kmap, const grid_sm< Sys_eqs::dims, void > &gs, typename Sys_eqs::stype(&spacing)[Sys_eqs::dims], std::unordered_map< long int, typename Sys_eqs::stype > &cols, typename Sys_eqs::stype coeff)
fill the row
Definition: eq.hpp:91
static void value_f(grid_key_dx< Sys_eqs::dims > &it)
fill the row
Definition: eq.hpp:56
Definition: eq.hpp:66
static openfpm::vector< cval< typename Sys_eqs::stype > > value_s(grid_key_dx< Sys_eqs::dims > &it)
fill the row
Definition: eq.hpp:47
Implementation of 1-D std::vector like structure.
Definition: map_vector.hpp:61