Changeset 813 in Sophya for trunk/SophyaLib/TArray/basarr.cc
- Timestamp:
- Apr 5, 2000, 5:44:19 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/TArray/basarr.cc
r804 r813 14 14 "Stride(int )", "ElemCheckBound()", "operator()" }; 15 15 uint_4 BaseArray::max_nprt_ = 50; 16 uint_4 BaseArray::prt_lev_ = 0; 16 17 short BaseArray::default_memory_mapping = CMemoryMapping; 17 18 // Methodes statiques globales 19 void BaseArray::SetMaxPrint(uint_4 nprt) 18 short BaseArray::default_vector_type = ColumnVector; 19 uint_8 BaseArray::openmp_size_threshold = 200000; 20 21 // ------ Methodes statiques globales -------- 22 23 // 1/ Gestion des impressions 24 void BaseArray::SetMaxPrint(uint_4 nprt, uint_4 lev) 20 25 { 21 26 max_nprt_ = nprt; 27 prt_lev_ = (lev < 3) ? lev : 3; 28 } 29 30 void BaseArray::SetOpenMPSizeThreshold(uint_8 thr) 31 { 32 openmp_size_threshold = thr; 22 33 } 23 34 … … 32 43 short BaseArray::SetDefaultMemoryMapping(short mm) 33 44 { 34 default_memory_mapping = ( (mm == CMemoryMapping) ? CMemoryMapping : FortranMemoryMapping);45 default_memory_mapping = (mm != CMemoryMapping) ? FortranMemoryMapping : CMemoryMapping; 35 46 return default_memory_mapping; 36 47 } 37 48 38 49 short BaseArray::SetDefaultVectorType(short vt) 50 { 51 default_vector_type = (vt != ColumnVector) ? RowVector : ColumnVector ; 52 return default_vector_type; 53 } 54 55 // Memory organisation 39 56 short BaseArray::SelectMemoryMapping(short mm) 40 57 // si mm == CMemoryMapping, elements d'une ligne suivant X (consecutif) … … 44 61 else return (default_memory_mapping); 45 62 } 46 47 void BaseArray::UpdateMemoryMapping(short mm, uint_4 & nx, uint_4 & ny) 48 { 63 short BaseArray::SelectVectorType(short vt) 64 { 65 if ((vt == ColumnVector) || (vt == RowVector)) return(vt); 66 else return(default_vector_type); 67 } 68 69 void BaseArray::UpdateMemoryMapping(short mm) 70 { 71 short vt = default_vector_type; 49 72 if ( (mm != CMemoryMapping) && (mm != FortranMemoryMapping) ) mm = default_memory_mapping; 50 73 if (mm == CMemoryMapping) { 51 marowi_ = veceli_ = 1; macoli_ = 0; 52 uint_4 nr = nx; 53 nx = ny; ny = nr; 54 } 55 else { 56 marowi_ = veceli_ = 0; macoli_ = 1; 57 } 74 marowi_ = 1; macoli_ = 0; 75 } 76 else { 77 marowi_ = 0; macoli_ = 1; 78 } 79 80 if ( (ndim_ == 2) && ((size_[0] == 1) || (size_[1] == 1)) ) { 81 // Choix automatique Vecteur ligne ou colonne 82 if ( size_[macoli_] == 1) veceli_ = marowi_; 83 else veceli_ = macoli_; 84 } 85 else veceli_ = (vt == ColumnVector ) ? marowi_ : macoli_; 86 ck_memo_vt_ = true; // Check MemMapping and VectorType for CompareSize 58 87 } 59 88 60 89 void BaseArray::UpdateMemoryMapping(BaseArray const & a, short mm) 61 90 { 62 if (mm == SameMemoryMapping) 91 short vt = default_vector_type; 92 if (mm == SameMemoryMapping) { 63 93 mm = ((a.marowi_ == 1) ? CMemoryMapping : FortranMemoryMapping); 94 vt = (a.marowi_ == a.veceli_) ? ColumnVector : RowVector; 95 } 96 else if (mm == AutoMemoryMapping) mm = default_memory_mapping; 97 64 98 if ( (mm != CMemoryMapping) && (mm != FortranMemoryMapping) ) mm = default_memory_mapping; 65 99 if (mm == CMemoryMapping) { 66 marowi_ = veceli_ = 1; macoli_ = 0; 67 } 68 else { 69 marowi_ = veceli_ = 0; macoli_ = 1; 70 } 71 } 72 100 marowi_ = 1; macoli_ = 0; 101 } 102 else { 103 marowi_ = 0; macoli_ = 1; 104 } 105 if ( (ndim_ == 2) && ((size_[0] == 1) || (size_[1] == 1)) ) { 106 // Choix automatique Vecteur ligne ou colonne 107 if ( size_[macoli_] == 1) veceli_ = marowi_; 108 else veceli_ = marowi_; 109 } 110 else veceli_ = (vt == ColumnVector ) ? marowi_ : macoli_; 111 ck_memo_vt_ = true; // Check MemMapping and VectorType for CompareSize 112 } 113 114 void BaseArray::SetMemoryMapping(short mm) 115 { 116 if (mm == SameMemoryMapping) return; 117 if (mm == AutoMemoryMapping) mm = default_memory_mapping; 118 if ( (mm != CMemoryMapping) && (mm != FortranMemoryMapping) ) return; 119 short vt = (marowi_ == veceli_) ? ColumnVector : RowVector; 120 if (mm == CMemoryMapping) { 121 marowi_ = 1; macoli_ = 0; 122 } 123 else { 124 marowi_ = 0; macoli_ = 1; 125 } 126 if ( (ndim_ == 2) && ((size_[0] == 1) || (size_[1] == 1)) ) { 127 // Choix automatique Vecteur ligne ou colonne 128 if ( size_[macoli_] == 1) veceli_ = marowi_; 129 else veceli_ = macoli_; 130 } 131 else veceli_ = (vt == ColumnVector ) ? marowi_ : macoli_; 132 ck_memo_vt_ = true; // Check MemMapping and VectorType for CompareSize 133 } 134 135 void BaseArray::SetVectorType(short vt) 136 { 137 if (vt == SameVectorType) return; 138 if (vt == AutoVectorType) vt = default_vector_type; 139 if ( (ndim_ == 2) && ((size_[0] == 1) || (size_[1] == 1)) ) { 140 // Choix automatique Vecteur ligne ou colonne 141 if ( size_[macoli_] == 1) veceli_ = marowi_; 142 else veceli_ = macoli_; 143 } 144 else veceli_ = (vt == ColumnVector ) ? marowi_ : macoli_; 145 ck_memo_vt_ = true; // Check MemMapping and VectorType for CompareSize 146 } 73 147 74 148 // ------------------------------------------------------- … … 87 161 moystep_ = 0; 88 162 offset_ = 0; 89 // Default for matrices : Lines = Y , Columns = X, Default Vectore= ColumnVector 90 macoli_ = 0; 91 veceli_ = marowi_ = 1; 163 // Default for matrices : Memory organisation and Vector type 164 if (default_memory_mapping == CMemoryMapping) { 165 marowi_ = 1; macoli_ = 0; 166 } 167 else { 168 marowi_ = 0; macoli_ = 1; 169 } 170 veceli_ = (default_vector_type == ColumnVector ) ? marowi_ : macoli_; 171 ck_memo_vt_ = false; // Default : Don't Check MemMapping and VectorType for CompareSize 92 172 } 93 173 … … 103 183 for(int k=0; k<ndim_; k++) 104 184 if (size_[k] != a.size_[k]) return(false); 105 if ( (macoli_ != a.macoli_) || (marowi_ != a.marowi_) || 106 (veceli_ != a.veceli_) ) return(false); 185 // $CHECK$ Reza doit-on verifier ca 186 if (ck_memo_vt_ && a.ck_memo_vt_) 187 if ( (macoli_ != a.macoli_) || (marowi_ != a.marowi_) || 188 (veceli_ != a.veceli_) ) return(false); 107 189 return(true); 108 190 } … … 166 248 167 249 // Acces lineaire aux elements .... Calcul d'offset 250 // -------------------------------------------------- 251 // Position de l'element 0 du vecteur i selon l'axe ka 252 // -------------------------------------------------- 253 uint_8 BaseArray::Offset(uint_4 ka, uint_8 i) const 254 { 255 256 if ( (ndim_ < 1) || (i == 0) ) return(offset_); 257 //#ifdef SO_BOUNDCHECKING 258 if (ka >= ndim_) 259 throw RangeCheckError("BaseArray::Offset(uint_4 ka, uint_8 i) Axe KA Error"); 260 if ( i*size_[ka] >= totsize_ ) 261 throw RangeCheckError("BaseArray::Offset(uint_4 ka, uint_8 i) Index Error"); 262 //#endif 263 uint_4 idx[BASEARRAY_MAXNDIMS]; 264 int k; 265 uint_8 rest = i; 266 idx[ka] = 0; 267 for(k=0; k<ndim_; k++) { 268 if (k == ka) continue; 269 idx[k] = rest%size_[k]; rest /= size_[k]; 270 } 271 uint_8 off = offset_; 272 for(k=0; k<ndim_; k++) off += idx[k]*step_[k]; 273 return (off); 274 } 168 275 169 276 uint_8 BaseArray::Offset(uint_8 ip) const 170 277 { 171 if (ip == 0) return(offset_); 172 uint_4 idx[BASEARRAY_MAXNDIMS]; 173 int k; 174 uint_8 rest = ip; 175 for(k=0; k<ndim_; k++) { idx[k] = rest%size_[k]; rest /= size_[k]; } 176 uint_8 off = offset_; 177 for(k=0; k<ndim_; k++) off += idx[k]*step_[k]; 178 return (off); 278 if ( (ndim_ < 1) || (ip == 0) ) return(offset_); 279 //#ifdef SO_BOUNDCHECKING 280 if (ip >= totsize_) 281 throw RangeCheckError("BaseArray::Offset(uint_8 ip) Out of range index ip"); 282 //#endif 283 284 uint_4 idx[BASEARRAY_MAXNDIMS]; 285 int k; 286 uint_8 rest = ip; 287 for(k=0; k<ndim_; k++) { 288 idx[k] = rest%size_[k]; rest /= size_[k]; 289 } 290 //#ifdef SO_BOUNDCHECKING 291 if (rest != 0) 292 throw PError("BaseArray::Offset(uint_8 ip) GUG !!! rest != 0"); 293 //#endif 294 // if (rest != 0) cerr << " BUG ---- BaseArray::Offset( " << ip << " )" << rest << endl; 295 // cerr << " DBG-Offset( " << ip << ")" ; 296 // for(k=0; k<ndim_; k++) cerr << idx[k] << "," ; 297 // cerr << " ZZZZ " << endl; 298 uint_8 off = offset_; 299 for(k=0; k<ndim_; k++) off += idx[k]*step_[k]; 300 return (off); 179 301 } 180 302 … … 186 308 void BaseArray::Show(ostream& os, bool si) const 187 309 { 188 os << " TArray< " << DataType() << " > NDim= " << ndim_ 189 << "(" << typeid(*this).name() << " )" << endl; 190 os << "TotSize=" << totsize_ << " Size(X*Y*...)= " ; 310 os << "\n--- " << InfoString() ; 311 os << " ND=" << ndim_ << " SizeX*Y*...= " ; 191 312 for(int k=0; k<ndim_; k++) { 192 313 os << size_[k]; 193 if (k<ndim_-1) os << " x "; 194 } 195 os << endl; 196 os << " Step(X Y ...)= " ; 197 for(int k=0; k<ndim_; k++) os << step_[k] << " " ; 198 os << " Offset= " << offset_ << "\n " << endl; 199 if (si && (mInfo != NULL)) os << (*mInfo) << endl; 314 if (k<ndim_-1) os << "x"; 315 } 316 os << " ---" << endl; 317 if (prt_lev_ > 0) { 318 os << " TotSize= " << totsize_ << " Step(X Y ...)=" ; 319 for(int k=0; k<ndim_; k++) os << step_[k] << " " ; 320 os << " Offset= " << offset_ << endl; 321 } 322 if (prt_lev_ > 1) { 323 os << " MemoryMapping=" << GetMemoryMapping() << " VecType= " << GetVectorType() 324 << " RowsKA= " << RowsKA() << " ColsKA= " << ColsKA() 325 << " VectKA=" << VectKA() << endl; 326 } 327 if (!si && (prt_lev_ < 2)) return; 328 if (mInfo != NULL) os << (*mInfo) << endl; 200 329 201 330 } 202 331 332 string BaseArray::InfoString() const 333 { 334 string rs = "BaseArray Type= "; 335 rs += typeid(*this).name() ; 336 return rs; 337 } 203 338 204 339 DVList& BaseArray::Info() … … 238 373 } 239 374 offset_ = offset; 240 // Default for matrices : Lines = Y , Columns = X 241 macoli_ = 0; 242 marowi_ = veceli_ = 1; 375 // Default for matrices : Memory organisation and Vector type 376 if (default_memory_mapping == CMemoryMapping) { 377 marowi_ = 1; macoli_ = 0; 378 } 379 else { 380 marowi_ = 0; macoli_ = 1; 381 } 382 veceli_ = (default_vector_type == ColumnVector ) ? marowi_ : macoli_; 383 ck_memo_vt_ = false; // Default : Don't Check MemMapping and VectorType for CompareSize 243 384 // Update OK 244 385 ndim_ = ndim; … … 280 421 minstep_ = minstep; 281 422 offset_ = offset; 282 // Default for matrices : Lines = Y , Columns = X 283 macoli_ = 0; 284 marowi_ = veceli_ = 1; 423 // Default for matrices : Memory organisation and Vector type 424 if (default_memory_mapping == CMemoryMapping) { 425 marowi_ = 1; macoli_ = 0; 426 } 427 else { 428 marowi_ = 0; macoli_ = 1; 429 } 430 veceli_ = (default_vector_type == ColumnVector ) ? marowi_ : macoli_; 431 ck_memo_vt_ = false; // Default : Don't Check MemMapping and VectorType for CompareSize 285 432 // Update OK 286 433 ndim_ = ndim; … … 323 470 marowi_ = a.marowi_; 324 471 veceli_ = a.veceli_; 472 ck_memo_vt_ = a.ck_memo_vt_; 325 473 // Update OK 326 474 ndim_ = a.ndim_;
Note:
See TracChangeset
for help on using the changeset viewer.