|
@@ -44,6 +44,7 @@ PrecompMat<T>::PrecompMat(bool homogen, int max_d): homogeneous(homogen), max_de
|
|
|
template <class T>
|
|
|
Matrix<T>& PrecompMat<T>::Mat(int l, Mat_Type type, size_t indx){
|
|
|
int level=(homogeneous?0:l+PRECOMP_MIN_DEPTH);
|
|
|
+ assert(level*Type_Count+type<mat.size());
|
|
|
#pragma omp critical (PrecompMAT)
|
|
|
if(indx>=mat[level*Type_Count+type].size()){
|
|
|
mat[level*Type_Count+type].resize(indx+1);
|
|
@@ -55,6 +56,7 @@ Matrix<T>& PrecompMat<T>::Mat(int l, Mat_Type type, size_t indx){
|
|
|
template <class T>
|
|
|
Permutation<T>& PrecompMat<T>::Perm_R(int l, Mat_Type type, size_t indx){
|
|
|
int level=l+PRECOMP_MIN_DEPTH;
|
|
|
+ assert(level*Type_Count+type<perm_r.size());
|
|
|
#pragma omp critical (PrecompMAT)
|
|
|
if(indx>=perm_r[level*Type_Count+type].size()){
|
|
|
perm_r[level*Type_Count+type].resize(indx+1);
|
|
@@ -66,6 +68,7 @@ Permutation<T>& PrecompMat<T>::Perm_R(int l, Mat_Type type, size_t indx){
|
|
|
template <class T>
|
|
|
Permutation<T>& PrecompMat<T>::Perm_C(int l, Mat_Type type, size_t indx){
|
|
|
int level=l+PRECOMP_MIN_DEPTH;
|
|
|
+ assert(level*Type_Count+type<perm_c.size());
|
|
|
#pragma omp critical (PrecompMAT)
|
|
|
if(indx>=perm_c[level*Type_Count+type].size()){
|
|
|
perm_c[level*Type_Count+type].resize(indx+1);
|
|
@@ -295,7 +298,6 @@ void PrecompMat<T>::LoadFile(const char* fname, MPI_Comm comm){
|
|
|
max_depth=max_depth_;
|
|
|
mat.resize(mat_size);
|
|
|
}
|
|
|
-
|
|
|
for(size_t i=0;i<mat_size;i++){
|
|
|
int n;
|
|
|
n=*(int*)f_ptr; f_ptr+=sizeof(int);
|
|
@@ -314,6 +316,14 @@ void PrecompMat<T>::LoadFile(const char* fname, MPI_Comm comm){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Resize perm_r, perm_c
|
|
|
+ perm_r.resize((max_depth_+PRECOMP_MIN_DEPTH)*Type_Count);
|
|
|
+ perm_c.resize((max_depth_+PRECOMP_MIN_DEPTH)*Type_Count);
|
|
|
+ for(size_t i=0;i<perm_r.size();i++){
|
|
|
+ perm_r[i].resize(500);
|
|
|
+ perm_c[i].resize(500);
|
|
|
+ }
|
|
|
}
|
|
|
if(f_data!=NULL) delete[] f_data;
|
|
|
Profile::Toc();
|