Die Art Signatur für Klasse Schritt ich verwende hier zusammengefasst:Template-Parameter von `boost :: numeric :: odeint :: runge_kutta-X` kompatibel mit CUDA/OpenMP
kann es sein, instanziiert wie folgt:
boost::numeric::odeint::runge_kutta_dopri5<state_type_> stepper;
So weit so gut. Es klappt.
Ich plane Port mein Programm CUDA (mit Schub) und später OpenMP. Ich habe die Erklärung folgende:
boost::numeric::odeint::runge_kutta_dopri5< state_type_
, double
, state_type_
, double
, boost::numeric::odeint::vector_space_algebra
> stepper;
Ich folgte Lösung this problem aber nicht kompiliert.
In file included from /usr/include/boost/numeric/odeint/stepper/euler.hpp:26:
/usr/include/boost/numeric/odeint/algebra/default_operations.hpp:87:27: error: invalid operands to binary expression ('double' and 'const std::vector<double, std::allocator<double> >')
t1 = m_alpha1 * t2 + m_alpha2 * t3;
~~~~~~~~^~~
Ich frage mich, was der meist tragbare Weg zu erklären, werden später den Schritt so dass minimale Änderungen erforderlich, wenn CUDA portiert.
Ich sehe. Das ist nett. Auch habe ich eine Kompilierungsfehlermeldung hinzugefügt, die ich mit clang ++ bekommen habe. Ich habe keine Ahnung von dieser Warnung. Ich verwende die Template-Typnamen wie im Beispielcode. Bei der ersten Deklaration, bei der ich nur einen Vorlagentypnamen übergebe, funktioniert es gut (es funktioniert sogar etwas besser als der vorhandene GSL-Integrator). – Dilawar
Ihr state_type ist 'vector < double >'. Vektorraumalgebra bedeutet, dass Sie Ausdrücke wie 'a * x + b * y' schreiben können, was mit 'vector < double >' nicht möglich ist. Verwenden Sie eine lineare Algebra-Bibliothek wie Eigen! – headmyshoulder