Ignore:
Timestamp:
11/25/16 14:12:15 (7 years ago)
Author:
mhnguyen
Message:

Some modifications of reading/writing interpolation weight from/into a file
There are 3 attributes concerning read/write weights from/into a file

  • write_weight: true/false. Default value: false
  • weight_filename.
  • mode: Default value: compute + read: read from file whose name is weight_filename + compute: compute weights + read_or_compute: if weight_filename already exists, the weights will be read from it; otherwise the weights will be computed

In mode compute and read_or_compute, if there is no weight_filename, a filename whose format
xios_interpolation_weight_nameOfContext_nameOfDomainSource_nameOfDomainDestination.nc will be used for read/write.

Test
+) On Curie
+) Work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/interpolate_domain.cpp

    r982 r1004  
    4848    } 
    4949 
    50     StdString weightFile = "interpolation_weights_" + domainSrc->getDomainOutputName(); 
     50    if (this->mode.isEmpty()) this->mode.setValue(mode_attr::compute); 
     51    if (this->write_weight.isEmpty()) this->write_weight.setValue(false); 
    5152 
    52     if (!this->mode.isEmpty()) 
    53     {  
    54       if (mode_attr::read == this->mode) 
    55       { 
    56          if (this->file.isEmpty()) 
    57          { 
     53    StdString weightFile; 
     54    switch (this->mode) 
     55    { 
     56      case mode_attr::read: 
     57        if (this->file.isEmpty()) 
     58        { 
     59          if (!this->write_weight) 
    5860            ERROR("void CInterpolateDomain::checkValid(CDomain* domainSrc)", 
    5961                 << "Read mode is activated but there is no file specified." << std::endl 
    6062                 << "Please define a correct file containing interpolation weights with option 'file'. "); 
    61          } 
    62          else 
    63          { 
    64            weightFile = this->file; 
    65            ifstream f(weightFile.c_str()); 
    66            if (!f.good()) 
    67              ERROR("void CInterpolateDomain::checkValid(CDomain* domainSrc)", 
    68                    << "Read mode is activated but file "  << weightFile << " doesn't exist." << std::endl 
    69                    << "Please check this file "); 
    70          } 
    71       } 
    72       else 
    73       { 
    74         if (file.isEmpty()) 
    75           this->file.setValue(weightFile); 
    76       }    
    77     } 
    78     else 
    79     { 
    80       if (!file.isEmpty()) // set mode read 
    81       { 
    82          weightFile = this->file; 
    83          ifstream f(weightFile.c_str()); 
    84          if (!f.good()) // file doesn't exist 
    85            this->mode.setValue(mode_attr::write); 
    86          else 
    87            this->mode.setValue(mode_attr::read); 
    88       } 
    89       else // only calculate weights() Mode set write but there is no file) 
    90       { 
    91         this->mode.setValue(mode_attr::write); 
    92       } 
     63        } 
     64        else 
     65        { 
     66          weightFile = this->file; 
     67          ifstream f(weightFile.c_str()); 
     68          if (!f.good()) 
     69            ERROR("void CInterpolateDomain::checkValid(CDomain* domainSrc)", 
     70                  << "Read mode is activated but file "  << weightFile << " doesn't exist." << std::endl 
     71                  << "Please check this file "); 
     72        } 
     73        break; 
     74      case mode_attr::compute: 
     75        break; 
     76      case mode_attr::read_or_compute: 
     77        if (!this->file.isEmpty() && !this->write_weight) 
     78        { 
     79          weightFile = this->file; 
     80          ifstream f(weightFile.c_str()); 
     81          if (!f.good()) 
     82            ERROR("void CInterpolateDomain::checkValid(CDomain* domainSrc)", 
     83                  << "read_or_compute mode is activated but file "  << weightFile << " doesn't exist." << std::endl 
     84                  << "Please check this file "); 
     85        } 
     86        break; 
     87      default: 
     88        break; 
    9389    } 
    9490 
Note: See TracChangeset for help on using the changeset viewer.