5#ifndef OPENFPM_NUMERICS_ODEINTEGRATORS_HPP
6#define OPENFPM_NUMERICS_ODEINTEGRATORS_HPP
14template<
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"
44struct 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(); }
63struct 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();
86namespace boost {
namespace numeric {
namespace odeint {
91 typedef boost::true_type type;
92 static const bool value = type::value;
107 typedef size_t size_type;
108 typedef size_t index_type;
109 typedef int is_state_vector;
113 {
return data.
get<0>().size(); }
115 void resize(
size_t n)
117 data.
get<0>().resize(n);
131 typedef size_t size_type;
132 typedef size_t index_type;
133 typedef int is_state_vector;
137 {
return data.
get<0>().size(); }
139 void resize(
size_t n)
141 data.
get<0>().resize(n);
142 data.
get<1>().resize(n);
156 typedef size_t size_type;
157 typedef size_t index_type;
158 typedef int is_state_vector;
162 {
return data.
get<0>().size(); }
164 void resize(
size_t n)
166 data.
get<0>().resize(n);
167 data.
get<1>().resize(n);
168 data.
get<2>().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);
194 data.
get<2>().resize(n);
195 data.
get<3>().resize(n);
209 typedef size_t size_type;
210 typedef size_t index_type;
211 typedef int is_state_vector;
215 {
return data.
get<0>().size(); }
217 void resize(
size_t n)
219 data.
get<0>().resize(n);
220 data.
get<1>().resize(n);
221 data.
get<2>().resize(n);
222 data.
get<3>().resize(n);
223 data.
get<4>().resize(n);
228template<
int counter,
typename state_type,
typename ... list>
235template<
typename state_type,
typename ... list>
241template<
int n_state,
typename state_type>
245 typedef typename state_type::index_type index_type;
246 typedef int is_state_vector;
254 return data.template get<0>().size();
273 typedef boost::true_type type;
274 static const bool value = type::value;
278 struct is_resizeable<state_type_1d_ofp_gpu> {
279 typedef boost::true_type type;
280 static const bool value = type::value;
285 typedef boost::true_type type;
286 static const bool value = type::value;
291 typedef boost::true_type type;
292 static const bool value = type::value;
296 typedef boost::true_type type;
297 static const bool value = type::value;
301 typedef boost::true_type type;
302 static const bool value = type::value;
310 typedef double result_type;
316 typedef double result_type;
322 typedef double result_type;
328 typedef double result_type;
334 typedef double result_type;
339 template<
typename state_type>
341 typedef boost::true_type type;
342 static const bool value = type::value;
345 template<
typename state_type>
347 typedef boost::true_type type;
348 static const bool value = type::value;
351 template<
typename state_type>
353 typedef boost::true_type type;
354 static const bool value = type::value;
357 template<
typename state_type>
359 typedef boost::true_type type;
360 static const bool value = type::value;
363 template<
typename state_type>
365 typedef boost::true_type type;
366 static const bool value = type::value;
399 template<
typename state_type>
402 typedef double result_type;
405 template<
typename state_type>
408 typedef double result_type;
411 template<
typename state_type>
414 typedef double result_type;
417 template<
typename state_type>
420 typedef double result_type;
423 template<
typename state_type>
426 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.