summaryrefslogtreecommitdiff
path: root/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp')
-rw-r--r--libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp88
1 files changed, 0 insertions, 88 deletions
diff --git a/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp b/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp
deleted file mode 100644
index 697208458..000000000
--- a/libs/numeric/odeint/performance/mpi/osc_chain_1d_system.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Boost libs/numeric/odeint/performance/openmp/osc_chain_1d_system.hpp
-
- Copyright 2013 Karsten Ahnert
- Copyright 2013 Mario Mulansky
- Copyright 2013 Pascal Germroth
-
- stronlgy nonlinear hamiltonian lattice
-
- Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE_1_0.txt or
- copy at http://www.boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef SYSTEM_HPP
-#define SYSTEM_HPP
-
-#include <vector>
-#include <cmath>
-#include <iostream>
-
-#include <boost/math/special_functions/sign.hpp>
-#include <boost/numeric/odeint/external/mpi/mpi.hpp>
-
-namespace checked_math {
- inline double pow( double x , double y )
- {
- if( x==0.0 )
- // 0**y = 0, don't care for y = 0 or NaN
- return 0.0;
- using std::pow;
- using std::abs;
- return pow( abs(x) , y );
- }
-}
-
-double signed_pow( double x , double k )
-{
- using boost::math::sign;
- return checked_math::pow( x , k ) * sign(x);
-}
-
-struct osc_chain {
- const double m_kap, m_lam;
- osc_chain( const double kap , const double lam )
- : m_kap( kap ) , m_lam( lam ) { }
-
- void operator()( const boost::numeric::odeint::mpi_state< std::vector<double> > &q ,
- boost::numeric::odeint::mpi_state< std::vector<double> > &dpdt ) const
- {
- const bool have_left = q.world.rank() > 0;
- const bool have_right = q.world.rank() + 1 < q.world.size();
- double q_left = 0, q_right = 0;
- boost::mpi::request r_left, r_right;
- if(have_left)
- {
- q.world.isend(q.world.rank() - 1, 0, q().front());
- r_left = q.world.irecv(q.world.rank() - 1, 0, q_left);
- }
- if(have_right)
- {
- q.world.isend(q.world.rank() + 1, 0, q().back());
- r_right = q.world.irecv(q.world.rank() + 1, 0, q_right);
- }
-
- double coupling_lr = 0;
- if(have_left)
- {
- r_left.wait();
- coupling_lr = signed_pow( q_left - q()[0] , m_lam-1 );
- }
- const size_t N = q().size();
- for(size_t i = 0 ; i < N-1 ; ++i)
- {
- dpdt()[i] = -signed_pow( q()[i] , m_kap-1 ) + coupling_lr;
- coupling_lr = signed_pow( q()[i] - q()[i+1] , m_lam-1 );
- dpdt()[i] -= coupling_lr;
- }
- dpdt()[N-1] = -signed_pow( q()[N-1] , m_kap-1 ) + coupling_lr;
- if(have_right)
- {
- r_right.wait();
- dpdt()[N-1] -= signed_pow( q()[N-1] - q_right , m_lam-1 );
- }
- }
- //]
-};
-
-#endif