Ignore:
Timestamp:
10/12/20 11:26:40 (4 years ago)
Author:
ymipsl
Message:

Rewrite file writing filter.
YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/io
Files:
2 edited

Legend:

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

    r1959 r1961  
    17131713        } 
    17141714 
    1715         if (compressedOutput && grid->isCompressible()) 
     1715        while (!dimIdList.empty()) 
    17161716        { 
    1717           dims.push_back(grid->getId() + "_points"); 
    1718           field->setUseCompressedOutput(); 
    1719         } 
    1720         else 
    1721         { 
    1722           while (!dimIdList.empty()) 
    1723           { 
    1724             dims.push_back(dimIdList.back()); 
    1725             dimIdList.pop_back(); 
    1726           } 
     1717          dims.push_back(dimIdList.back()); 
     1718          dimIdList.pop_back(); 
    17271719        } 
    17281720 
     
    20702062      //--------------------------------------------------------------- 
    20712063 
    2072       void CNc4DataOutput::writeFieldData_ (CField*  field, const CArray<double,1>& data) 
     2064      int CNc4DataOutput::writeFieldData_ (CField*  field, const CArray<double,1>& data, const CDate& lastWrite, 
     2065                                           const CDate& currentWrite, int nstep) 
    20732066      { 
    20742067        CContext* context = CContext::getCurrent(); 
    20752068        CGrid* grid = field->getGrid(); 
    2076         CArray<double,1> dataIn(data.copy()) ; 
    2077  
    2078         if (field->getNStep()<1)  
     2069        
     2070        if (nstep<1)  
    20792071        { 
    2080           return; 
     2072          return nstep; 
    20812073        } 
    20822074         
     
    20842076          if (SuperClass::type == MULTI_FILE || !isCollective) 
    20852077          { 
    2086             return; 
     2078            return nstep; 
    20872079          } 
    20882080 
     
    21092101            factorUnit=context->getCalendar()->getDayLengthInSeconds() ; 
    21102102            else factorUnit=1 ; 
    2111             field->resetNStep(getRecordFromTime(field->last_Write_srv,factorUnit) + 1); 
     2103            nstep = getRecordFromTime(field->last_Write_srv,factorUnit) + 1; 
    21122104          } 
    21132105 
     
    21282120        if (wtime) 
    21292121        { 
    2130           Time lastWrite = field->last_Write_srv; 
    2131           Time lastLastWrite = field->lastlast_Write_srv; 
    2132  
    21332122           
    21342123          if (field->hasTimeInstant) 
    21352124          { 
    2136             time_data(0) = time_data_bound(1) = lastWrite; 
    2137             time_data_bound(0) = time_data_bound(1) = lastWrite; 
     2125            time_data(0) = time_data_bound(1) = (Time) lastWrite; 
     2126            time_data_bound(0) = time_data_bound(1) = (Time) currentWrite; 
    21382127            if (timeCounterType==instant) 
    21392128            { 
     
    21472136          else if (field->hasTimeCentered) 
    21482137          { 
    2149             time_data(0) = (lastWrite + lastLastWrite) / 2; 
    2150             time_data_bound(0) = lastLastWrite; 
    2151             time_data_bound(1) = lastWrite; 
     2138            time_data(0) = ((Time)currentWrite + (Time)lastWrite) / 2; 
     2139            time_data_bound(0) = (Time)lastWrite; 
     2140            time_data_bound(1) = (Time)currentWrite; 
    21522141            if (timeCounterType==centered) 
    21532142            { 
     
    21622151          if (timeCounterType==record) 
    21632152          { 
    2164             time_counter(0) = field->getNStep() - 1; 
    2165             time_counter_bound(0) = time_counter_bound(1) = field->getNStep() - 1; 
     2153            time_counter(0) = nstep - 1; 
     2154            time_counter_bound(0) = time_counter_bound(1) = nstep - 1; 
    21662155            wtimeCounter=true ; 
    21672156          } 
     
    21792168         bool isRoot = (context->intraCommRank_ == 0); 
    21802169 
    2181          if (!field->scale_factor.isEmpty() || !field->add_offset.isEmpty()) 
    2182          { 
    2183            double scaleFactor = 1.0; 
    2184            double addOffset = 0.0; 
    2185            if (!field->scale_factor.isEmpty()) scaleFactor = field->scale_factor; 
    2186            if (!field->add_offset.isEmpty()) addOffset = field->add_offset; 
    2187            field->scaleFactorAddOffset(dataIn, scaleFactor, addOffset); 
    2188          } 
    2189  
    21902170         try 
    21912171         { 
    2192            size_t writtenSize; 
    2193            if (field->getUseCompressedOutput()) 
    2194              writtenSize = grid->getNumberWrittenIndexes(); 
    2195            else 
    2196              writtenSize = grid->getWrittenDataSize(); 
    2197  
    2198            CArray<double,1> fieldData(writtenSize); 
    2199            if (!field->default_value.isEmpty()) fieldData = field->default_value; 
    2200  
    2201            if (field->getUseCompressedOutput()) fieldData.reference(dataIn) ; 
    2202              // field->outputCompressedField(dataIn, fieldData); 
    2203            else 
    2204            { 
    2205              //field->outputField(dataIn, fieldData); 
    2206              if (!field->default_value.isEmpty()) field->getGrid()->getWorkflowToFullConnector()->transfer(dataIn, fieldData, (double)field->default_value ) ; 
    2207              else field->getGrid()->getWorkflowToFullConnector()->transfer(dataIn, fieldData ) ; 
    2208            } 
    2209  
    2210            if (!field->prec.isEmpty() && field->prec == 2) fieldData = round(fieldData); 
    2211  
    22122172           switch (SuperClass::type) 
    22132173           { 
     
    22152175              { 
    22162176                 CTimer::get("Files : writing data").resume(); 
    2217                  SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep() - 1); 
     2177                 SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1); 
    22182178                 CTimer::get("Files : writing data").suspend(); 
    22192179                 if (wtime) 
     
    22222182                   if ( wtimeData) 
    22232183                   { 
    2224                        SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot); 
    2225                        SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot); 
     2184                       SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); 
     2185                       SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); 
    22262186                  } 
    22272187                   if (wtimeCounter) 
    22282188                   { 
    2229                      SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1,isRoot); 
    2230                      if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot); 
     2189                     SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); 
     2190                     if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); 
    22312191                   } 
    22322192                   CTimer::get("Files : writing time axis").suspend(); 
     
    23162276                    } 
    23172277                  } 
    2318               } 
     2278                } 
    23192279                else 
    23202280                { 
     
    23682328 
    23692329                CTimer::get("Files : writing data").resume(); 
    2370                 SuperClassWriter::writeData(fieldData, fieldid, isCollective, field->getNStep() - 1, &start, &count); 
     2330                SuperClassWriter::writeData(data, fieldid, isCollective, nstep - 1, &start, &count); 
    23712331                CTimer::get("Files : writing data").suspend(); 
    23722332 
     
    23762336                   if ( wtimeData) 
    23772337                   { 
    2378                      SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, field->getNStep() - 1, isRoot); 
    2379                      SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, field->getNStep() - 1, isRoot); 
     2338                     SuperClassWriter::writeTimeAxisData(time_data, timeAxisId, isCollective, nstep - 1, isRoot); 
     2339                     SuperClassWriter::writeTimeAxisDataBounds(time_data_bound, timeAxisBoundId, isCollective, nstep - 1, isRoot); 
    23802340                   } 
    23812341                   if (wtimeCounter) 
    23822342                   { 
    2383                      SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1,isRoot); 
    2384                      if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot); 
     2343                     SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, nstep - 1,isRoot); 
     2344                     if (timeCounterType!=record) SuperClassWriter::writeTimeAxisDataBounds(time_counter_bound, timeBoundId, isCollective, nstep - 1, isRoot); 
    23852345 
    23862346                   } 
     
    23912351              } 
    23922352            } 
     2353            return nstep ; 
    23932354         } 
    23942355         catch (CNetCdfException& e) 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_output.hpp

    r1882 r1961  
    5656            virtual void writeAttribute_(CVariable* var); 
    5757            virtual void writeAttribute_(CVariable* var, const string& fieldId); 
    58             virtual void writeFieldData_(CField* field, const CArray<double,1>& data); 
     58            virtual int  writeFieldData_(CField* field, const CArray<double,1>& data, const CDate& lastWrite, const CDate& currentWrite, int nstep); 
    5959            virtual void writeFile_     (CFile* file); 
    6060            virtual void closeFile_     (void); 
Note: See TracChangeset for help on using the changeset viewer.