00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00048 #ifndef _CXSC_MPICOMM_INCLUDE
00049 #define _CXSC_MPICOMM_INCLUDE
00050
00051 #include <mpi.h>
00052
00053 #include <real.hpp>
00054 #include <interval.hpp>
00055 #include <rvector.hpp>
00056 #include <ivector.hpp>
00057 #include <rmatrix.hpp>
00058 #include <imatrix.hpp>
00059
00060 #include <complex.hpp>
00061 #include <cinterval.hpp>
00062 #include <cvector.hpp>
00063 #include <civector.hpp>
00064 #include <cmatrix.hpp>
00065 #include <cimatrix.hpp>
00066
00067 #include <l_real.hpp>
00068 #include <l_interval.hpp>
00069 #include <l_rvector.hpp>
00070 #include <l_ivector.hpp>
00071 #include <l_rmatrix.hpp>
00072 #include <l_imatrix.hpp>
00073
00074 #include <l_complex.hpp>
00075
00076 #include <dot.hpp>
00077 #include <idot.hpp>
00078 #include <cdot.hpp>
00079 #include <cidot.hpp>
00080
00081 using namespace cxsc;
00082
00083
00084
00093 const int MPI_CXSC_BUFFERLEN=900000000;
00094
00098 void MPI_Fehler(int, char*, char*, int);
00099
00104 extern bool MPI_CXSC_TYPES_DEFINED;
00105 extern MPI_Datatype MPI_CXSC_REAL;
00106 extern MPI_Datatype MPI_CXSC_COMPLEX;
00107 extern MPI_Datatype MPI_CXSC_INTERVAL;
00108 extern MPI_Datatype MPI_CXSC_CINTERVAL;
00110
00114 int MPI_Define_CXSC_Types();
00115
00116
00117
00122 int MPI_Pack (real&, void *, int, int *, MPI_Comm);
00123 int MPI_Unpack (void*, int, int *, real&, MPI_Comm);
00124 int MPI_Pack (interval&, void *, int, int *, MPI_Comm);
00125 int MPI_Unpack (void*, int, int *, interval&, MPI_Comm);
00126 int MPI_Pack (complex&, void *, int, int *, MPI_Comm);
00127 int MPI_Unpack (void*, int, int *, complex&, MPI_Comm);
00128 int MPI_Pack (cinterval&, void *, int, int *, MPI_Comm);
00129 int MPI_Unpack (void*, int, int *, cinterval&, MPI_Comm);
00131
00136 int MPI_Pack (l_real&, void *, int, int *, MPI_Comm);
00137 int MPI_Unpack (void*, int, int *, l_real&, MPI_Comm);
00138 int MPI_Pack (l_interval&, void *, int, int *, MPI_Comm);
00139 int MPI_Unpack (void*, int, int *, l_interval&, MPI_Comm);
00140 int MPI_Pack (l_complex&, void *, int, int *, MPI_Comm);
00141 int MPI_Unpack (void*, int, int *, l_complex&, MPI_Comm);
00143
00148 int MPI_Pack (rvector&, void *, int, int *, MPI_Comm);
00149 int MPI_Unpack (void*, int, int *, rvector&, MPI_Comm);
00150 int MPI_Pack (ivector&, void *, int, int *, MPI_Comm);
00151 int MPI_Unpack (void*, int, int *, ivector&, MPI_Comm);
00152 int MPI_Pack (cvector&, void *, int, int *, MPI_Comm);
00153 int MPI_Unpack (void*, int, int *, cvector&, MPI_Comm);
00154 int MPI_Pack (civector&, void *, int, int *, MPI_Comm);
00155 int MPI_Unpack (void*, int, int *, civector&, MPI_Comm);
00157
00162 int MPI_Pack (l_rvector&, void *, int, int *, MPI_Comm);
00163 int MPI_Unpack (void*, int, int *, l_rvector&, MPI_Comm);
00164 int MPI_Pack (l_ivector&, void *, int, int *, MPI_Comm);
00165 int MPI_Unpack (void*, int, int *, l_ivector&, MPI_Comm);
00166
00168
00173 int MPI_Pack (rmatrix&, void *, int, int *, MPI_Comm);
00174 int MPI_Pack (rmatrix&, int, int, int, int, void *, int, int *, MPI_Comm);
00175 int MPI_Unpack (void*, int, int *, rmatrix&, MPI_Comm);
00176 int MPI_Unpack (void*, int, int *, rmatrix&, int, int, int, int, MPI_Comm);
00177 int MPI_Pack (imatrix&, void *, int, int *, MPI_Comm);
00178 int MPI_Pack (imatrix&, int, int, int, int, void *, int, int *, MPI_Comm);
00179 int MPI_Unpack (void*, int, int *, imatrix&, MPI_Comm);
00180 int MPI_Unpack (void*, int, int *, imatrix&, int, int, int, int, MPI_Comm);
00181 int MPI_Pack (cmatrix&, void *, int, int *, MPI_Comm);
00182 int MPI_Pack (cmatrix&, int, int, int, int, void *, int, int *, MPI_Comm);
00183 int MPI_Unpack (void*, int, int *, cmatrix&, MPI_Comm);
00184 int MPI_Unpack (void*, int, int *, cmatrix&, int, int, int, int, MPI_Comm);
00185 int MPI_Pack (cimatrix&, void *, int, int *, MPI_Comm);
00186 int MPI_Pack (cimatrix&, int, int, int, int, void *, int, int *, MPI_Comm);
00187 int MPI_Unpack (void*, int, int *, cimatrix&, MPI_Comm);
00188 int MPI_Unpack (void*, int, int *, cimatrix&, int, int, int, int, MPI_Comm);
00190
00195 int MPI_Pack (l_rmatrix&, void *, int, int *, MPI_Comm);
00196 int MPI_Unpack (void*, int, int *, l_rmatrix&, MPI_Comm);
00197 int MPI_Pack (l_imatrix&, void *, int, int *, MPI_Comm);
00198 int MPI_Unpack (void*, int, int *, l_imatrix&, MPI_Comm);
00200
00205 int MPI_Pack (dotprecision&, void *, int, int *, MPI_Comm);
00206 int MPI_Unpack (void*, int, int *, dotprecision&, MPI_Comm);
00207 int MPI_Pack (idotprecision&, void *, int, int *, MPI_Comm);
00208 int MPI_Unpack (void*, int, int *, idotprecision&, MPI_Comm);
00209 int MPI_Pack (cdotprecision&, void *, int, int *, MPI_Comm);
00210 int MPI_Unpack (void*, int, int *, cdotprecision&, MPI_Comm);
00211 int MPI_Pack (cidotprecision&, void *, int, int *, MPI_Comm);
00212 int MPI_Unpack (void*, int, int *, cidotprecision&, MPI_Comm);
00214
00215
00216
00221 template<class T>
00222 int MPI_Send(T&, int, int, MPI_Comm);
00223 template<class T>
00224 int MPI_Send(T&, int, int, int, int, int, int, MPI_Comm);
00225 template<class T>
00226 int MPI_Bsend(T&, int, int, MPI_Comm);
00227 template<class T>
00228 int MPI_Bsend(T&, int, int, int, int, int, int, MPI_Comm);
00229 template<class T>
00230 int MPI_Ssend(T&, int, int, MPI_Comm);
00231 template<class T>
00232 int MPI_Ssend(T&, int, int, int, int, int, int, MPI_Comm);
00233 template<class T>
00234 int MPI_Rsend(T&, int, int, MPI_Comm);
00235 template<class T>
00236 int MPI_Rsend(T&, int, int, int, int, int, int, MPI_Comm);
00237
00238 template<class T>
00239 int MPI_Isend(T&, int, int, MPI_Comm, MPI_Request*);
00240 template<class T>
00241 int MPI_Isend(T&, int, int, int, int, int, int, MPI_Comm, MPI_Request*);
00242 template<class T>
00243 int MPI_Ibsend(T&, int, int, MPI_Comm, MPI_Request*);
00244 template<class T>
00245 int MPI_Ibsend(T&, int, int, int, int, int, int, MPI_Comm, MPI_Request*);
00246 template<class T>
00247 int MPI_Issend(T&, int, int, MPI_Comm, MPI_Request*);
00248 template<class T>
00249 int MPI_Issend(T&, int, int, int, int, int, int, MPI_Comm, MPI_Request*);
00250 template<class T>
00251 int MPI_Irsend(T&, int, int, MPI_Comm, MPI_Request*);
00252 template<class T>
00253 int MPI_Irsend(T&, int, int, int, int, int, int, MPI_Comm, MPI_Request*);
00254
00255 template<class T>
00256 int MPI_Recv(T&, int, int, MPI_Comm, MPI_Status*);
00257 template<class T>
00258 int MPI_Recv(T&, int, int, int, int, int, int, MPI_Comm, MPI_Status*);
00260
00265 template<class T>
00266 int MPI_Bcast(T&, int, MPI_Comm);
00267 template<class T>
00268 int MPI_Bcast(T&, int, int, int, int, int, MPI_Comm);
00270
00271
00272 #endif