Skip to content
Snippets Groups Projects
utils_parall.h 2.45 KiB
Newer Older
  • Learn to ignore specific revisions
  • Camille Coti's avatar
    Camille Coti committed
    #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 );
    
    Camille Coti's avatar
    Camille Coti committed
        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* );
    
    Camille Coti's avatar
    Camille Coti committed
    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;
    
    
    Camille Coti's avatar
    Camille Coti committed
    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 */
    
    Camille Coti's avatar
    Camille Coti committed
    
    #endif // _UTILS_PARALL_H_