Newer
Older
#ifndef _UTILS_PARALL_H_
#define _UTILS_PARALL_H_
#include <ginac/ginac.h>
namespace gi = GiNaC;
/*******************************************************************************
* Datatypes *
*******************************************************************************/
class parameters_t{
public:
unsigned int a4, a2, a1;
parameters_t( unsigned int, unsigned int, unsigned int );
parameters_t( void ){};
};
class parameters_2_t{
public:
char A[6]; // A is always a simple symbol, of form T_xyz.
unsigned int a1, a2, a3, b1, b2, b3, c1, c2;
parameters_2_t( gi::ex, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int );
parameters_2_t( void ){};
};
/*******************************************************************************
* Prototypes *
*******************************************************************************/
std::string linearize_expression( gi::ex );
gi::ex de_linearize_expression( std::string, gi::lst );
void send_work( std::vector<parameters_t>& input, int peer, MPI_Comm comm = MPI_COMM_WORLD );
void send_work( std::vector<parameters_2_t>& input, int peer, MPI_Comm comm = MPI_COMM_WORLD );
void send_expressions_to_add( std::vector<std::string>&, int );
void send_add_or_end_addslave( std::vector<std::string>&, int, int* );
void send_work_addslave( std::vector<parameters_t>&, std::vector<std::string>&, int ) ;
void send_result( gi::ex T, MPI_Comm comm = MPI_COMM_WORLD );
void send_end( int peer, MPI_Comm comm = MPI_COMM_WORLD );
void send_end_batch( int peer, MPI_Comm comm = MPI_COMM_WORLD );
void create_parameters_datatye( void );
void create_parameters_datatye_2( void );
void free_parameters_dt( void );
void free_parameters_2_dt( void );
gi::ex add_expressions( std::vector<std::string>, gi::lst );
/*******************************************************************************
* Global variables *
*******************************************************************************/
extern MPI_Datatype DT_PARAMETERS;
extern MPI_Datatype DT_PARAMETERS_2;
extern unsigned int nbforemen; /* Number of foremen to use with the hierarchical M/W */
extern unsigned int maxresult; /* Maximum results in the result queue, addslave version */