Changeset 1004 for XIOS/trunk/src/transformation
- Timestamp:
- 11/25/16 14:12:15 (7 years ago)
- Location:
- XIOS/trunk/src/transformation
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp
r982 r1004 48 48 49 49 CDomainAlgorithmInterpolate::CDomainAlgorithmInterpolate(CDomain* domainDestination, CDomain* domainSource, CInterpolateDomain* interpDomain) 50 : CDomainAlgorithmTransformation(domainDestination, domainSource), interpDomain_(interpDomain), writeToFile_(false) 51 { 50 : CDomainAlgorithmTransformation(domainDestination, domainSource), interpDomain_(interpDomain), writeToFile_(false), readFromFile_(false) 51 { 52 CContext* context = CContext::getCurrent(); 52 53 interpDomain_->checkValid(domainSource); 53 if ((CInterpolateDomain::mode_attr::write == interpDomain_->mode) && 54 (!interpDomain_->file.isEmpty())) 55 writeToFile_ = true; 54 fileToReadWrite_ = "xios_interpolation_weights_"; 55 56 if (interpDomain_->weight_filename.isEmpty()) 57 { 58 fileToReadWrite_ += context->getId() + "_" + 59 domainSource->getDomainOutputName() + "_" + 60 domainDestination->getDomainOutputName() + ".nc"; 61 } 62 else 63 fileToReadWrite_ = interpDomain_->weight_filename; 64 65 ifstream f(fileToReadWrite_.c_str()); 66 switch (interpDomain_->mode) 67 { 68 case CInterpolateDomain::mode_attr::read: 69 readFromFile_ = true; 70 break; 71 case CInterpolateDomain::mode_attr::compute: 72 readFromFile_ = false; 73 break; 74 case CInterpolateDomain::mode_attr::read_or_compute: 75 if (!f.good()) 76 readFromFile_ = false; 77 else 78 readFromFile_ = true; 79 break; 80 default: 81 break; 82 } 83 84 writeToFile_ = interpDomain_->write_weight; 85 56 86 } 57 87 … … 354 384 } 355 385 356 if (writeToFile_ )386 if (writeToFile_ && !readFromFile_) 357 387 writeRemapInfo(interpMapValue); 358 388 exchangeRemapInfo(interpMapValue); … … 439 469 void CDomainAlgorithmInterpolate::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs) 440 470 { 441 if ( CInterpolateDomain::mode_attr::read == interpDomain_->mode)471 if (readFromFile_ && !writeToFile_) 442 472 readRemapInfo(); 443 473 else … … 448 478 449 479 void CDomainAlgorithmInterpolate::writeRemapInfo(std::map<int,std::vector<std::pair<int,double> > >& interpMapValue) 450 { 451 std::string filename = interpDomain_->file.getValue(); 452 writeInterpolationInfo(filename, interpMapValue); 480 { 481 writeInterpolationInfo(fileToReadWrite_, interpMapValue); 453 482 } 454 483 455 484 void CDomainAlgorithmInterpolate::readRemapInfo() 456 { 457 std::string filename = interpDomain_->file.getValue(); 485 { 458 486 std::map<int,std::vector<std::pair<int,double> > > interpMapValue; 459 readInterpolationInfo(file name, interpMapValue);487 readInterpolationInfo(fileToReadWrite_, interpMapValue); 460 488 461 489 exchangeRemapInfo(interpMapValue); -
XIOS/trunk/src/transformation/domain_algorithm_interpolate.hpp
r982 r1004 48 48 CInterpolateDomain* interpDomain_; 49 49 bool writeToFile_; 50 bool readFromFile_; 51 StdString fileToReadWrite_; 50 52 51 53 // class WriteNetCdf;
Note: See TracChangeset
for help on using the changeset viewer.