Changeset 785 for XIOS/trunk/src/node/domain.cpp
- Timestamp:
- 11/12/15 16:33:18 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/domain.cpp
r784 r785 332 332 else // unstructured domain 333 333 { 334 int globalDomainSize = ni_glo * nj_glo;335 if (globalDomainSize <= nbLocalDomain)336 {337 for (int idx = 0; idx < nbLocalDomain; ++idx)334 if (this->i_index.isEmpty()) 335 { 336 int globalDomainSize = ni_glo * nj_glo; 337 if (globalDomainSize <= nbLocalDomain) 338 338 { 339 if (rankOnDomain < globalDomainSize)339 for (int idx = 0; idx < nbLocalDomain; ++idx) 340 340 { 341 int iIdx = rankOnDomain % ni_glo; 342 int jIdx = rankOnDomain / ni_glo; 343 ibegin.setValue(iIdx); jbegin.setValue(jIdx); 344 ni.setValue(1); nj.setValue(1); 341 if (rankOnDomain < globalDomainSize) 342 { 343 int iIdx = rankOnDomain % ni_glo; 344 int jIdx = rankOnDomain / ni_glo; 345 ibegin.setValue(iIdx); jbegin.setValue(jIdx); 346 ni.setValue(1); nj.setValue(1); 347 } 348 else 349 { 350 ibegin.setValue(0); jbegin.setValue(0); 351 ni.setValue(0); nj.setValue(0); 352 } 345 353 } 346 else 354 } 355 else 356 { 357 float njGlo = nj_glo.getValue(); 358 float niGlo = ni_glo.getValue(); 359 std::vector<int> ibeginVec(nbLocalDomain,0); 360 std::vector<int> niVec(nbLocalDomain); 361 for (int i = 1; i < nbLocalDomain; ++i) 347 362 { 348 ibegin.setValue(0); jbegin.setValue(0); 349 ni.setValue(0); nj.setValue(0); 363 int range = ni_glo / nbLocalDomain; 364 if (i < (ni_glo%nbLocalDomain)) ++range; 365 niVec[i-1] = range; 366 ibeginVec[i] = ibeginVec[i-1] + niVec[i-1]; 350 367 } 368 niVec[nbLocalDomain-1] = ni_glo - ibeginVec[nbLocalDomain-1]; 369 370 int iIdx = rankOnDomain % nbLocalDomain; 371 ibegin.setValue(ibeginVec[iIdx]); 372 jbegin.setValue(0); 373 ni.setValue(niVec[iIdx]); 374 nj.setValue(1); 351 375 } 352 376 } 353 377 else 354 378 { 355 float njGlo = nj_glo.getValue(); 356 float niGlo = ni_glo.getValue(); 357 std::vector<int> ibeginVec(nbLocalDomain,0); 358 std::vector<int> niVec(nbLocalDomain); 359 for (int i = 1; i < nbLocalDomain; ++i) 360 { 361 int range = ni_glo / nbLocalDomain; 362 if (i < (ni_glo%nbLocalDomain)) ++range; 363 niVec[i-1] = range; 364 ibeginVec[i] = ibeginVec[i-1] + niVec[i-1]; 365 } 366 niVec[nbLocalDomain-1] = ni_glo - ibeginVec[nbLocalDomain-1]; 367 368 int iIdx = rankOnDomain % nbLocalDomain; 369 ibegin.setValue(ibeginVec[iIdx]); 379 ibegin.setValue(this->i_index(0)); 370 380 jbegin.setValue(0); 371 ni.setValue( niVec[iIdx]);381 ni.setValue(this->i_index.numElements()); 372 382 nj.setValue(1); 373 383 } 374 384 } 385 386 checkDomain(); 375 387 } 376 388
Note: See TracChangeset
for help on using the changeset viewer.