Ignore:
Timestamp:
01/04/17 17:09:50 (7 years ago)
Author:
mhnguyen
Message:

Fixing Bug: Writing interpolation weights of masked domain causes error

+) If domain is masked, some processes can have no interpolation weight at all,
which can cause writing problem if we use the collective mode.
By changing to independent mode, this problem is solved.
+) Remove redundant attribute of interpolate_domain.

Test
+) On Curie
+) Work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/transformation/domain_algorithm_interpolate.cpp

    r1004 r1014  
    681681                                                                const StdSize size) 
    682682{ 
    683   CONetCDF4::addDimension(name, size);   
     683  return CONetCDF4::addDimension(name, size);   
    684684} 
    685685 
     
    687687                                                               const std::vector<StdString>& dim) 
    688688{ 
    689   CONetCDF4::addVariable(name, type, dim); 
     689  return CONetCDF4::addVariable(name, type, dim); 
     690} 
     691 
     692void CDomainAlgorithmInterpolate::WriteNetCdf::endDefinition() 
     693{ 
     694  CONetCDF4::definition_end(); 
    690695} 
    691696 
     
    751756  MPI_Scan(&localNbWeight, &startIndex, 1, MPI_LONG, MPI_SUM, client->intraComm); 
    752757   
     758  if (0 == globalNbWeight) 
     759  { 
     760    info << "There is no interpolation weights calculated between " 
     761         << "domain source: " << domainSrc_->getDomainOutputName() 
     762         << " and domain destination: " << domainDest_->getDomainOutputName() 
     763         << std::endl; 
     764    return; 
     765  } 
     766 
    753767  std::vector<StdSize> start(1, startIndex - localNbWeight); 
    754768  std::vector<StdSize> count(1, localNbWeight); 
    755  
    756   WriteNetCdf netCdfWriter(filename, client->intraComm); 
    757  
    758   // netCdfWriter = CONetCDF4(filename, false, false, true, client->intraComm, false); 
     769   
     770  WriteNetCdf netCdfWriter(filename, client->intraComm);   
    759771 
    760772  // Define some dimensions 
     
    770782  netCdfWriter.addVariableWrite("weight", NC_DOUBLE, dims); 
    771783 
     784  // End of definition 
     785  netCdfWriter.endDefinition(); 
     786 
    772787  // // Write variables 
    773   netCdfWriter.writeDataIndex(src_idx, "src_idx", true, 0, &start, &count); 
    774   netCdfWriter.writeDataIndex(dst_idx, "dst_idx", true, 0, &start, &count); 
    775   netCdfWriter.writeDataIndex(weights, "weight", true, 0, &start, &count); 
     788  if (0 != localNbWeight) 
     789  { 
     790    netCdfWriter.writeDataIndex(src_idx, "src_idx", false, 0, &start, &count); 
     791    netCdfWriter.writeDataIndex(dst_idx, "dst_idx", false, 0, &start, &count); 
     792    netCdfWriter.writeDataIndex(weights, "weight", false, 0, &start, &count); 
     793  } 
    776794 
    777795  netCdfWriter.closeFile(); 
Note: See TracChangeset for help on using the changeset viewer.