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
00030 #ifndef PETSCTOOLS_HPP_
00031 #define PETSCTOOLS_HPP_
00032
00033
00034 #include <vector>
00035 #include <iostream>
00036 #include <cassert>
00037 #include <cstring>
00038
00039 #ifndef SPECIAL_SERIAL
00040 #include <petsc.h>
00041 #include <petscvec.h>
00042 #include <petscmat.h>
00043
00044 #include "DistributedVector.hpp"
00045 #include "ReplicatableVector.hpp"
00046 #endif //SPECIAL_SERIAL
00047
00048 #define EXIT_IF_PARALLEL if(!PetscTools::IsSequential()){TS_TRACE("This test does not pass in parallel yet.");return;}
00049 #define EXIT_IF_SEQUENTIAL if(PetscTools::IsSequential()){TS_TRACE("This test is not meant to be executed in sequential.");return;}
00050
00054 class PetscTools
00055 {
00056 private:
00058 static bool mPetscIsInitialised;
00059
00061 static unsigned mNumProcessors;
00062
00064 static unsigned mRank;
00065
00066 public:
00067
00071 static const unsigned MASTER_RANK=0;
00072
00077 static void ResetCache();
00078
00082 static bool IsSequential();
00083
00087 static unsigned NumProcs();
00088
00094 static unsigned GetMyRank();
00095
00101 static bool AmMaster();
00102
00107 static void Barrier();
00108
00109 #ifndef SPECIAL_SERIAL
00110
00115 static Vec CreateVec(int size);
00116
00124 static Vec CreateVec(int size, double value);
00125
00131 static Vec CreateVec(std::vector<double> data);
00132
00147 static void SetupMat(Mat& rMat, int numRows, int numColumns,
00148 MatType matType=(MatType) MATMPIAIJ,
00149 int numLocalRows=PETSC_DECIDE,
00150 int numLocalColumns=PETSC_DECIDE,
00151 int maxColsPerRow=54);
00152
00159 static void ReplicateException(bool flag);
00160
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00193 static void DumpPetscObject(Mat& rMat, const std::string& rOutputFileFullPath);
00194
00201 static void DumpPetscObject(Vec& rVec, const std::string& rOutputFileFullPath);
00202
00209 static void ReadPetscObject(Mat& rMat, const std::string& rOutputFileFullPath);
00210
00217 static void ReadPetscObject(Vec& rVec, const std::string& rOutputFileFullPath);
00218
00219
00220 #endif //SPECIAL_SERIAL
00221
00222 };
00223
00224
00225
00226 #endif