Ignore:
Timestamp:
01/31/19 12:12:52 (5 years ago)
Author:
yushan
Message:

branch merged with trunk @1645. arch file (ep&mpi) added for ADA

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_omp/src/io/nc4_data_output.cpp

    r1601 r1646  
    5454 
    5555      void CNc4DataOutput::writeDomain_(CDomain* domain) 
     56      TRY 
    5657      { 
    5758        StdString lonName,latName ; 
     
    154155*/ 
    155156 
    156          CArray<size_t, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     157         CArray<int, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
    157158         int nbWritten = indexToWrite.numElements(); 
    158159         CArray<double,1> writtenLat, writtenLon; 
     
    166167           for (int idx = 0; idx < nbWritten; ++idx) 
    167168           { 
    168                   if (idx < domain->latvalue.numElements()) 
    169                   { 
    170                 writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
    171                 writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
    172                   } 
    173                   else 
    174                   { 
    175                 writtenLat(idx) = 0.; 
    176                 writtenLon(idx) = 0.; 
    177                   } 
     169             if (indexToWrite(idx) < 0) 
     170             { 
     171               writtenLat(idx) = -1.;   // hole 
     172               writtenLon(idx) = -1.; 
     173             } 
     174             else 
     175             { 
     176               writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     177               writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     178             } 
    178179           } 
    179           
    180180 
    181181           if (domain->hasBounds) 
     
    189189               for (int nv = 0; nv < nvertex; ++nv) 
    190190               { 
    191                  if (idx < boundslat.columns()) 
    192                  { 
     191                 if (indexToWrite(idx) < 0) 
     192                 { 
     193                   writtenBndsLat(nv, idx) = -1.;  // hole 
     194                   writtenBndsLon(nv, idx) = -1.; 
     195                 } 
     196                 else 
     197                 { 
    193198                   writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
    194199                   writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
    195                  } 
    196                  else 
    197                  { 
    198                    writtenBndsLat(nv, idx) = 0.; 
    199                    writtenBndsLon(nv, idx) = 0.; 
    200                  } 
     200                 } 
    201201               } 
    202202           } 
     
    208208           for (int idx = 0; idx < nbWritten; ++idx) 
    209209           { 
    210                   if (idx < domain->areavalue.numElements()) 
    211                 writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
     210                  if (indexToWrite(idx) < 0) 
     211              writtenArea(idx) = -1.; 
    212212                  else 
    213                 writtenArea(idx) = 0.; 
     213              writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
    214214           } 
    215215         } 
     
    426426                     std::vector<StdSize> start(2) ; 
    427427                     std::vector<StdSize> count(2) ; 
    428                      if (domain->isEmpty()) 
    429                      { 
    430                        start[0]=0 ; start[1]=0 ; 
    431                        count[0]=0 ; count[1]=0 ; 
    432                      } 
    433                      else 
     428// Comment out: it is not working for a hole 
     429//                     if (domain->isEmpty()) 
     430//                     { 
     431//                       start[0]=0 ; start[1]=0 ; 
     432//                       count[0]=0 ; count[1]=0 ; 
     433//                     } 
     434//                     else 
    434435                     { 
    435436                       start[1]=domain->ibegin; 
     
    540541         domain->addRelFile(this->filename); 
    541542      } 
     543      CATCH 
    542544 
    543545    //-------------------------------------------------------------- 
     
    875877          case (MULTI_FILE) : 
    876878          { 
     879            ERROR("CNc4DataOutput::writeDomain(domain)", 
     880            << "[ type = multiple_file ]" 
     881            << " is not yet implemented for UGRID files !"); 
    877882            break; 
    878883          } 
     
    940945         int nvertex = (domain->nvertex.isEmpty()) ? 0 : domain->nvertex; 
    941946 
    942          CArray<size_t, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     947         CArray<int, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
    943948         int nbWritten = indexToWrite.numElements(); 
    944949         CArray<double,1> writtenLat, writtenLon; 
     
    952957           for (int idx = 0; idx < nbWritten; ++idx) 
    953958           { 
    954              if (idx < domain->latvalue.numElements()) 
    955              { 
    956                writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
    957                writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
    958              } 
    959              else 
    960              { 
    961                writtenLat(idx) = 0.; 
    962                writtenLon(idx) = 0.; 
    963              } 
     959             if (indexToWrite(idx) < 0) 
     960             { 
     961               writtenLat(idx) = -1.; 
     962               writtenLon(idx) = -1.; 
     963             } 
     964             else 
     965             { 
     966               writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     967               writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     968             } 
    964969           } 
    965970         } 
     
    976981             for (int nv = 0; nv < nvertex; ++nv) 
    977982             { 
    978                if (idx < boundslat.columns()) 
     983               if (indexToWrite(idx) < 0) 
     984               { 
     985                 writtenBndsLat(nv, idx) = -1.; 
     986                 writtenBndsLon(nv, idx) = -1.; 
     987               } 
     988               else 
    979989               { 
    980990                 writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
    981991                 writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
    982                } 
    983                else 
    984                { 
    985                  writtenBndsLat(nv, idx) = 0.; 
    986                  writtenBndsLon(nv, idx) = 0.; 
    987992                } 
    988993             } 
     
    9951000           for (int idx = 0; idx < nbWritten; ++idx) 
    9961001           { 
    997                   if (idx < domain->areavalue.numElements()) 
    998                 writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
    999                   else 
    1000                 writtenArea(idx) = 0.; 
     1002             if (indexToWrite(idx) < 0) 
     1003               writtenArea(idx) = -1.; 
     1004             else 
     1005               writtenArea(idx) = domain->areavalue(indexToWrite(idx)); 
    10011006           } 
    10021007         } 
     
    12751280          SuperClassWriter::definition_end(); 
    12761281 
    1277           CArray<size_t, 1>& indexToWrite = axis->localIndexToWriteOnServer; 
     1282          CArray<int, 1>& indexToWrite = axis->localIndexToWriteOnServer; 
    12781283          int nbWritten = indexToWrite.numElements(); 
    12791284          CArray<double,1> axis_value(indexToWrite.numElements()); 
     
    12821287            for (int i = 0; i < nbWritten; i++) 
    12831288            { 
    1284               if (i < axis->value.numElements()) 
     1289              if (indexToWrite(i) < 0) 
     1290                axis_value(i) = -1;   // Some value in case of a hole 
     1291              else 
    12851292                axis_value(i) = axis->value(indexToWrite(i)); 
    1286               else 
    1287                 axis_value(i) = 0.; 
    12881293            } 
    12891294          } 
     
    12951300            for (int i = 0; i < nbWritten; i++) 
    12961301            { 
    1297               if (i < axis->label.numElements()) 
     1302              if (indexToWrite(i) < 0) 
     1303                axis_label(i) = boost::lexical_cast<string>(-1);  // Some value in case of a hole 
     1304              else 
    12981305                axis_label(i) = axis->label(indexToWrite(i)); 
    1299               else 
    1300                 axis_label(i) = boost::lexical_cast<string>(0);  // Write 0 as a label 
    13011306            } 
    13021307          } 
     
    13161321                  for (int i = 0; i < nbWritten; ++i) 
    13171322                  { 
    1318                     if (i < axis->bounds.columns()) 
     1323                    if (indexToWrite(i) < 0) 
     1324                    { 
     1325                      axis_bounds(0, i) = -1.; // Some value in case of a hole 
     1326                      axis_bounds(1, i) = -1.; 
     1327                    } 
     1328                    else 
    13191329                    { 
    13201330                      axis_bounds(0, i) = axis->bounds(0, int(indexToWrite(i))); 
    13211331                      axis_bounds(1, i) = axis->bounds(1, int(indexToWrite(i))); 
    1322                     } 
    1323                     else 
    1324                     { 
    1325                       axis_bounds(0, i) = 0.; 
    1326                       axis_bounds(1, i) = 0.; 
    1327  
    13281332                    } 
    13291333                  } 
     
    13561360                  for (int i = 0; i < nbWritten; ++i) 
    13571361                  { 
    1358                     if (i < axis->bounds.columns()) 
     1362                    if (indexToWrite(i) < 0) 
     1363                    { 
     1364                      axis_bounds(0, i) = -1.; 
     1365                      axis_bounds(1, i) = -1.; 
     1366                    } 
     1367                    else 
    13591368                    { 
    13601369                      axis_bounds(0, i) = axis->bounds(0, int(indexToWrite(i))); 
    13611370                      axis_bounds(1, i) = axis->bounds(1, int(indexToWrite(i))); 
    1362                     } 
    1363                     else 
    1364                     { 
    1365                       axis_bounds(0, i) = 0.; 
    1366                       axis_bounds(1, i) = 0.; 
    13671371                    } 
    13681372                  } 
Note: See TracChangeset for help on using the changeset viewer.