5 #ifndef OPENFPM_NUMERICS_ODEINTEGRATORS_HPP
6 #define OPENFPM_NUMERICS_ODEINTEGRATORS_HPP
14 template<
typename T,
typename Sfinae =
void>
22 template<class T,class Enabler=typename std::enable_if<has_state_vector<T>::value>::type>
24 size(
const T& rng) -> decltype(rng.size())
30 #include <boost/numeric/odeint.hpp>
31 #include "Operators/Vector/vector_dist_operators.hpp"
32 #include "FiniteDifference/FD_expressions.hpp"
33 #include "OdeIntegrators/vector_algebra_ofp.hpp"
36 #include "OdeIntegrators/vector_algebra_ofp_gpu.hpp"
44 struct state_type_1d_ofp_ker{
45 state_type_1d_ofp_ker(){
47 typedef decltype(std::declval<
texp_v_gpu<double>>().getVector().toKernel()) state_kernel;
48 typedef
size_t size_type;
49 typedef
int is_state_vector;
52 __host__ __device__
size_t size()
const
53 {
return data.
get<0>().size(); }
63 struct state_type_1d_ofp_gpu{
64 state_type_1d_ofp_gpu(){
66 typedef size_t size_type;
67 typedef int is_state_vector;
71 {
return data.
get<0>().size(); }
75 data.
get<0>().resize(n);
77 state_type_1d_ofp_ker toKernel()
const
79 state_type_1d_ofp_ker s1_ker;
80 s1_ker.data.get<0>()=data.
get<0>().getVector().toKernel();
92 struct state_type_2d_ofp_ker{
93 state_type_2d_ofp_ker(){
95 typedef decltype(std::declval<
texp_v_gpu<double>>().getVector().toKernel()) state_kernel;
96 typedef
size_t size_type;
97 typedef
int is_state_vector;
98 aggregate<state_kernel,state_kernel> data;
100 __host__ __device__
size_t size()
const
101 {
return data.
get<0>().size(); }
111 struct state_type_2d_ofp_gpu{
112 state_type_2d_ofp_gpu(){
114 typedef size_t size_type;
115 typedef int is_state_vector;
119 {
return data.
get<0>().size(); }
121 void resize(
size_t n)
123 data.
get<0>().resize(n);
124 data.
get<1>().resize(n);
126 state_type_2d_ofp_ker toKernel()
const
128 state_type_2d_ofp_ker s2_ker;
129 s2_ker.data.get<0>()=data.
get<0>().getVector().toKernel();
130 s2_ker.data.get<1>()=data.
get<1>().getVector().toKernel();
137 namespace boost {
namespace numeric {
namespace odeint {
142 typedef boost::true_type type;
143 static const bool value = type::value;
158 typedef size_t size_type;
159 typedef size_t index_type;
160 typedef int is_state_vector;
164 {
return data.
get<0>().size(); }
166 void resize(
size_t n)
168 data.
get<0>().resize(n);
182 typedef size_t size_type;
183 typedef size_t index_type;
184 typedef int is_state_vector;
188 {
return data.
get<0>().size(); }
190 void resize(
size_t n)
192 data.
get<0>().resize(n);
193 data.
get<1>().resize(n);
207 typedef size_t size_type;
208 typedef size_t index_type;
209 typedef int is_state_vector;
213 {
return data.
get<0>().size(); }
215 void resize(
size_t n)
217 data.
get<0>().resize(n);
218 data.
get<1>().resize(n);
219 data.
get<2>().resize(n);
233 typedef size_t size_type;
234 typedef size_t index_type;
235 typedef int is_state_vector;
239 {
return data.
get<0>().size(); }
241 void resize(
size_t n)
243 data.
get<0>().resize(n);
244 data.
get<1>().resize(n);
245 data.
get<2>().resize(n);
246 data.
get<3>().resize(n);
260 typedef size_t size_type;
261 typedef size_t index_type;
262 typedef int is_state_vector;
266 {
return data.
get<0>().size(); }
268 void resize(
size_t n)
270 data.
get<0>().resize(n);
271 data.
get<1>().resize(n);
272 data.
get<2>().resize(n);
273 data.
get<3>().resize(n);
274 data.
get<4>().resize(n);
290 typedef size_t size_type;
291 typedef size_t index_type;
292 typedef int is_state_vector;
296 {
return data.
get<0>().size(); }
298 void resize(
size_t n)
300 data.
get<0>().resize(n);
301 data.
get<1>().resize(n);
302 data.
get<2>().resize(n);
303 data.
get<3>().resize(n);
304 data.
get<4>().resize(n);
305 data.
get<5>().resize(n);
320 typedef size_t size_type;
321 typedef size_t index_type;
322 typedef int is_state_vector;
326 {
return data.
get<0>().size(); }
328 void resize(
size_t n)
330 data.
get<0>().resize(n);
331 data.
get<1>().resize(n);
332 data.
get<2>().resize(n);
333 data.
get<3>().resize(n);
334 data.
get<4>().resize(n);
335 data.
get<5>().resize(n);
336 data.
get<6>().resize(n);
341 template<
int counter,
typename state_type,
typename ... list>
348 template<
typename state_type,
typename ... list>
354 template<
int n_state,
typename state_type>
358 typedef typename state_type::index_type index_type;
359 typedef int is_state_vector;
367 return data.template get<0>().size();
386 typedef boost::true_type type;
387 static const bool value = type::value;
391 struct is_resizeable<state_type_1d_ofp_gpu> {
392 typedef boost::true_type type;
393 static const bool value = type::value;
398 typedef boost::true_type type;
399 static const bool value = type::value;
404 typedef boost::true_type type;
405 static const bool value = type::value;
409 typedef boost::true_type type;
410 static const bool value = type::value;
414 typedef boost::true_type type;
415 static const bool value = type::value;
421 typedef boost::true_type type;
422 static const bool value = type::value;
428 typedef boost::true_type type;
429 static const bool value = type::value;
436 typedef double result_type;
442 typedef double result_type;
448 typedef double result_type;
454 typedef double result_type;
460 typedef double result_type;
467 typedef double result_type;
474 typedef double result_type;
479 template<
typename state_type>
481 typedef boost::true_type type;
482 static const bool value = type::value;
485 template<
typename state_type>
487 typedef boost::true_type type;
488 static const bool value = type::value;
491 template<
typename state_type>
493 typedef boost::true_type type;
494 static const bool value = type::value;
497 template<
typename state_type>
499 typedef boost::true_type type;
500 static const bool value = type::value;
503 template<
typename state_type>
505 typedef boost::true_type type;
506 static const bool value = type::value;
510 template<
typename state_type>
512 typedef boost::true_type type;
513 static const bool value = type::value;
517 template<
typename state_type>
519 typedef boost::true_type type;
520 static const bool value = type::value;
554 template<
typename state_type>
557 typedef double result_type;
560 template<
typename state_type>
563 typedef double result_type;
566 template<
typename state_type>
569 typedef double result_type;
572 template<
typename state_type>
575 typedef double result_type;
578 template<
typename state_type>
581 typedef double result_type;
585 template<
typename state_type>
588 typedef double result_type;
592 template<
typename state_type>
595 typedef double result_type;
Main class that encapsulate a vector properties operand to be used for expressions construction.
convert a type into constant type
aggregate of properties, from a list of object if create a struct that follow the OPENFPM native stru...
__device__ __host__ boost::mpl::at< type, boost::mpl::int_< i > >::type & get()
get the properties i
A 1d Odeint and Openfpm compatible structure.
A 2d Odeint and Openfpm compatible structure.
A 3d Odeint and Openfpm compatible structure.
A 4d Odeint and Openfpm compatible structure.
A 5d Odeint and Openfpm compatible structure.
A 6d Odeint and Openfpm compatible structure.
A 7d Odeint and Openfpm compatible structure.