Ignore:
Timestamp:
05/11/17 18:25:20 (7 years ago)
Author:
mhnguyen
Message:

Updating two-level server.
Each client now can play the role of server: It can forward data to other clients or write data like a server.
Each client must combine all data received from other client(s) before forward them or write them on files

+) Correct some bugs of exchange data_index in domain and axis
+) Reorder some functions in context.cpp to make sure that all necessary attributes are available before computing index
+) Add the mapping index for client to write data.

Test
+) On Curie
+) test_client and test_complete
+) Mode:

  • Only one level: Correct
  • Two levels: Work if using ddt (bug)

+) Only zoom is tested but other transformations should work
+) No reading test

File:
1 edited

Legend:

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

    r1099 r1129  
    5050      void CNc4DataOutput::writeDomain_(CDomain* domain) 
    5151      { 
     52        domain->computeWrittenIndex(); 
    5253        if (domain->type == CDomain::type_attr::unstructured) 
    5354        { 
     
    5960        } 
    6061 
     62         
    6163         CContext* context = CContext::getCurrent() ; 
    6264         CContextServer* server=context->server ; 
     
    107109                             : latid; 
    108110*/ 
     111 
     112         CArray<size_t, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     113         int nbWritten = indexToWrite.numElements(); 
     114         CArray<double,1> writtenLat, writtenLon; 
     115         CArray<double,2> writtenBndsLat, writtenBndsLon; 
     116         CArray<double,1> writtenArea; 
     117 
     118         if (domain->hasLonLat) 
     119         { 
     120           writtenLat.resize(nbWritten); 
     121           writtenLon.resize(nbWritten); 
     122           for (int idx = 0; idx < nbWritten; ++idx) 
     123           { 
     124              writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     125              writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     126           } 
     127          
     128 
     129           if (domain->hasBounds) 
     130           {          
     131             int nvertex = domain->nvertex, idx; 
     132             writtenBndsLat.resize(nvertex, nbWritten); 
     133             writtenBndsLon.resize(nvertex, nbWritten); 
     134             CArray<double,2>& boundslat = domain->bounds_latvalue; 
     135             CArray<double,2>& boundslon = domain->bounds_lonvalue;    
     136             for (idx = 0; idx < nbWritten; ++idx) 
     137               for (int nv = 0; nv < nvertex; ++nv) 
     138               { 
     139                 writtenBndsLat(nv, idx) = boundslat(nv, int(indexToWrite(idx))); 
     140                 writtenBndsLon(nv, idx) = boundslon(nv, int(indexToWrite(idx))); 
     141               } 
     142           } 
     143         } 
     144 
     145         if (domain->hasArea) 
     146         { 
     147           writtenArea.resize(nbWritten);            
     148           for (int idx = 0; idx < nbWritten; ++idx) 
     149           { 
     150              writtenArea(idx) = domain->areavalue(indexToWrite(idx));                       
     151           } 
     152         } 
    109153 
    110154         try 
     
    225269                 if (domain->hasLonLat) 
    226270                 { 
     271                   // CArray<size_t, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     272                   // int nbWritten = indexToWrite.numElements(); 
     273                   // CArray<double,1> writtenLat(nbWritten), writtenLon(nbWritten); 
     274                   // for (int idx = 0; idx < nbWritten; ++idx) 
     275                   // { 
     276                   //    writtenLat(idx) = domain->latvalue(indexToWrite(idx)); 
     277                   //    writtenLon(idx) = domain->lonvalue(indexToWrite(idx)); 
     278                   // } 
    227279                   switch (domain->type) 
    228280                   { 
    229                      case CDomain::type_attr::curvilinear : 
    230                        SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0); 
    231                        SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0); 
     281                     case CDomain::type_attr::curvilinear :                        
     282                         
     283                       // SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0); 
     284                       // SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0); 
     285                       SuperClassWriter::writeData(writtenLat, latid, isCollective, 0); 
     286                       SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0); 
    232287                       break; 
    233288                     case CDomain::type_attr::rectilinear : 
    234                        CArray<double,1> lat = domain->latvalue(Range(fromStart,toEnd,domain->zoom_ni)) ; 
     289//                        CArray<double,1> lat = domain->latvalue(Range(fromStart,toEnd,domain->zoom_ni)) ; 
     290//                        SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 
     291//                        CArray<double,1> lon = domain->lonvalue(Range(0,domain->zoom_ni-1)) ; 
     292// //                       CArray<double,1> lon = domain->lonvalue(Range(0,local_size_write[1]-1)) ; 
     293//                        SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 
     294 
     295                       CArray<double,1> lat = writtenLat(Range(fromStart,toEnd,domain->zoom_ni)) ; 
    235296                       SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 
    236                        CArray<double,1> lon = domain->lonvalue(Range(0,domain->zoom_ni-1)) ; 
     297                       CArray<double,1> lon = writtenLon(Range(0,domain->zoom_ni-1)) ; 
    237298//                       CArray<double,1> lon = domain->lonvalue(Range(0,local_size_write[1]-1)) ; 
    238299                       SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 
     
    242303                   if (domain->hasBounds) 
    243304                   { 
    244                      SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0); 
    245                      SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0); 
     305                     // CArray<double,2> writtenBndsLat(nbWritten,2), writtenBndsLon(nbWritten,2); 
     306                     // for (int idx = 0; idx < nbWritten; ++idx) 
     307                     //   for (int nv = 0; nv < domain->nvertex; ++nv) 
     308                     //   { 
     309                     //     writtenBndsLat(idx) = domain->bounds_latvalue(nv, indexToWrite(idx)); 
     310                     //     writtenBndsLon(idx) = domain->bounds_lonvalue(nv, indexToWrite(idx)); 
     311                     //   } 
     312 
     313                     // SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0); 
     314                     // SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0); 
     315                     SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0); 
     316                     SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0); 
    246317                   } 
    247318                 } 
    248319 
    249320                 if (domain->hasArea) 
    250                    SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0); 
     321                 { 
     322                   // CArray<size_t, 1>& indexToWrite = domain->localIndexToWriteOnServer; 
     323                   // int nbWritten = indexToWrite.numElements(); 
     324                   // CArray<double,1> writtenArea(nbWritten); 
     325                   // for (int idx = 0; idx < nbWritten; ++idx) 
     326                   // { 
     327                   //    writtenArea(idx) = domain->areavalue(indexToWrite(idx));                       
     328                   // } 
     329 
     330                   SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0); 
     331                   // SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0); 
     332                 } 
    251333 
    252334                 SuperClassWriter::definition_start(); 
     
    334416                       start[0]=domain->zoom_jbegin-domain->global_zoom_jbegin; 
    335417                       count[1]=domain->zoom_ni ; count[0]=domain->zoom_nj ; 
    336                        // start[1]= start_write[0]; 
    337                        // start[0]= start_write[1]; 
    338                        // count[1]= count_write[0]; 
    339                        // count[0]= count_write[1]; 
    340418                     } 
    341419 
    342420                     if (domain->hasLonLat) 
    343421                     { 
    344                        SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); 
    345                        SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); 
     422                       // SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); 
     423                       // SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); 
     424                       SuperClassWriter::writeData(writtenLat, latid, isCollective, 0,&start,&count); 
     425                       SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0,&start,&count); 
    346426                     } 
    347427                     break; 
     
    357437                         start[0]=0 ; 
    358438                         count[0]=0 ; 
    359                          SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); 
    360                          SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); 
    361  
     439                         // SuperClassWriter::writeData(domain->latvalue, latid, isCollective, 0,&start,&count); 
     440                         // SuperClassWriter::writeData(domain->lonvalue, lonid, isCollective, 0,&start,&count); 
     441 
     442                         SuperClassWriter::writeData(writtenLat, latid, isCollective, 0,&start,&count); 
     443                         SuperClassWriter::writeData(writtenLon, lonid, isCollective, 0,&start,&count); 
    362444                       } 
    363445                       else 
    364                        { 
    365                          // start[0]= start_write[1]; 
    366                          // count[0]= count_write[1]; 
     446                       {  
    367447                         start[0]=domain->zoom_jbegin-domain->global_zoom_jbegin; 
    368448                         count[0]=domain->zoom_nj; 
    369                          CArray<double,1> lat = domain->latvalue(Range(fromStart,toEnd,domain->zoom_ni)) ; 
     449                         // CArray<double,1> lat = domain->latvalue(Range(fromStart,toEnd,domain->zoom_ni)); 
     450                         CArray<double,1> lat = writtenLat(Range(fromStart,toEnd,domain->zoom_ni)); 
    370451                         SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0,&start,&count); 
    371452 
    372                          // start[0]= start_write[0]; 
    373                          // count[0]= count_write[0]; 
    374453                         start[0]=domain->zoom_ibegin-domain->global_zoom_ibegin; 
    375454                         count[0]=domain->zoom_ni; 
    376                          CArray<double,1> lon=domain->lonvalue(Range(0,domain->zoom_ni-1)) ; 
     455                         // CArray<double,1> lon=domain->lonvalue(Range(0,domain->zoom_ni-1)); 
     456                         CArray<double,1> lon = writtenLon(Range(0,domain->zoom_ni-1)); 
    377457                         SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0,&start,&count); 
    378458                       } 
     
    401481                   } 
    402482 
    403                  SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0, &start, &count); 
    404                  SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0, &start, &count); 
     483                 // SuperClassWriter::writeData(domain->bounds_lonvalue, bounds_lonid, isCollective, 0, &start, &count); 
     484                 // SuperClassWriter::writeData(domain->bounds_latvalue, bounds_latid, isCollective, 0, &start, &count); 
     485                   SuperClassWriter::writeData(writtenBndsLon, bounds_lonid, isCollective, 0, &start, &count); 
     486                   SuperClassWriter::writeData(writtenBndsLat, bounds_latid, isCollective, 0, &start, &count); 
    405487                 } 
    406488 
     
    421503                     count[1] = domain->zoom_ni; 
    422504                     count[0] = domain->zoom_nj; 
    423  
    424                      // start[1]= start_write[0]; 
    425                      // start[0]= start_write[1]; 
    426                      // count[1]= count_write[0]; 
    427                      // count[0]= count_write[1]; 
    428505                   } 
    429506 
    430                    SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0, &start, &count); 
     507                   // SuperClassWriter::writeData(domain->areavalue, areaId, isCollective, 0, &start, &count); 
     508                   SuperClassWriter::writeData(writtenArea, areaId, isCollective, 0, &start, &count); 
    431509                 } 
    432510 
     
    10561134        axis->checkAttributes(); 
    10571135 
    1058         // int local_size_write  = axis->getLocalWriteSize(); 
    1059         // int global_size_write = axis->getGlobalWriteSize(); 
    1060         // int start_write = axis->getStartWriteIndex(); 
    1061         // int count_write = axis->getCountWriteIndex(); 
    1062  
    1063  
    1064         // if ((0 == local_size_write) && (MULTI_FILE == SuperClass::type)) return; 
    1065  
     1136        axis->computeWrittenIndex(); 
     1137        
    10661138        int zoom_size  = (MULTI_FILE == SuperClass::type) ? axis->zoom_n 
    10671139                                                          : axis->global_zoom_n; 
     
    11141186            SuperClassWriter::definition_end(); 
    11151187 
     1188            CArray<size_t, 1>& indexToWrite = axis->localIndexToWriteOnServer; 
     1189            int nbWritten = indexToWrite.numElements(); 
     1190            CArray<double,1> axis_value(indexToWrite.numElements()); 
     1191            for (int i = 0; i < nbWritten; i++) axis_value(i) = axis->value(indexToWrite(i)); 
     1192            CArray<double,2> axis_bounds; 
     1193 
    11161194            switch (SuperClass::type) 
    11171195            { 
    11181196              case MULTI_FILE: 
    11191197              { 
    1120                 CArray<double,1> axis_value(axis->zoom_n); 
    1121                 for (int i = 0; i < axis->zoom_n; i++) axis_value(i) = axis->value(i); 
     1198                // CArray<double,1> axis_value(axis->zoom_n); 
     1199                // for (int i = 0; i < axis->zoom_n; i++) axis_value(i) = axis->value(i); 
    11221200                SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
    11231201 
     
    11311209              case ONE_FILE: 
    11321210              { 
    1133                 CArray<double,1> axis_value(axis->zoom_n); 
    1134                 axis_value = axis->value; 
     1211                // CArray<double,1> axis_value(axis->zoom_n); 
     1212                // axis_value = axis->value; 
    11351213                std::vector<StdSize> start(1), startBounds(2) ; 
    11361214                std::vector<StdSize> count(1), countBounds(2) ; 
     
    11421220 
    11431221                if (!axis->bounds.isEmpty()) 
     1222                { 
     1223                  axis_bounds.resize(2, indexToWrite.numElements()); 
     1224                  for (int i = 0; i < nbWritten; ++i) 
     1225                  { 
     1226                    axis_bounds(0, i) = axis->bounds(0, int(indexToWrite(i))); 
     1227                    axis_bounds(1, i) = axis->bounds(1, int(indexToWrite(i))); 
     1228                  } 
    11441229                  SuperClassWriter::writeData(axis->bounds, axisBoundsId, isCollective, 0, &startBounds, &countBounds); 
     1230                } 
    11451231 
    11461232                SuperClassWriter::definition_start(); 
     
    23712457           msg.append(context->getId()); msg.append("\n"); 
    23722458           msg.append(e.what()); 
    2373            ERROR("CNc4DataOutput::writeFieldData_ (CField*  field)", << msg); 
     2459               ERROR("CNc4DataOutput::writeFieldData_ (CField*  field)", << msg); 
    23742460         } 
    23752461      } 
Note: See TracChangeset for help on using the changeset viewer.