Changeset 5977


Ignore:
Timestamp:
11/10/21 15:26:34 (2 years ago)
Author:
ymipsl
Message:

Better management when writing slice of ensemble

YM

Location:
CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/XIOS/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/XIOS/src/config/axis_attribute.conf

    r5501 r5977  
    1414DECLARE_ATTRIBUTE(int,       n_glo) 
    1515DECLARE_ENUM2(positive, up, down) 
    16 DECLARE_ENUM4(axis_type, X, Y, Z, T) 
     16DECLARE_ENUM5(axis_type, X, Y, Z, T, E) 
    1717 
    1818DECLARE_ATTRIBUTE(StdString, dim_name) 
  • CONFIG_DEVT/IPSLCM6.5_work_ENSEMBLES/modeles/XIOS/src/io/nc4_data_output.cpp

    r5861 r5977  
    26342634                } 
    26352635 
     2636                 
    26362637                // suppose first dim is dedicated for ensemble 
    2637                 double defaultValue=field->default_value ; 
     2638                std::vector<StdString> axisList   = grid->getAxisList(); 
     2639                if (!axisList.empty()) 
     2640                { 
     2641                  CAxis* axis = CAxis::get(axisList[axisList.size() - 1]); 
     2642                  if (axis->axis_type == CAxis::axis_type_attr::E) 
     2643                  { 
     2644                    start[0] = axis->data_begin ; 
     2645                    count[0] = axis->data_n ;  
     2646                  } 
     2647                }   
    26382648                size_t slice=1 ; 
    26392649                for(int i=1 ; i<count.size() ; i++) slice=slice*count[i] ; 
    2640                  
    2641                 size_t nEnsemble=count[0] ; 
    2642                 size_t pos=0 ; 
    2643                 start[0] = 0 ; 
    2644                 count[0] = 0 ; 
    2645                 for(size_t i=0 ; i<nEnsemble ; i++) 
    2646                 { 
    2647                   bool allMissing=true ; 
    2648                   for (size_t j=0 ; j<slice ; j++,pos++) 
    2649                     if (fieldData(pos)!=defaultValue) { allMissing=false ; break;} 
    2650                   if (allMissing)  
    2651                   { 
    2652                     if (count[0]==0) start[0]++ ; 
    2653                     else break ; 
    2654                   } 
    2655                   else count[0]++ ;   
    2656                 }   
    2657  
    26582650                CArray<double,1> newData(fieldData.dataFirst()+start[0]*slice,shape(count[0]*slice),neverDeleteData) ; 
    2659                 info(0)<<"write data parameter  "<<fieldid<<"  "<<field->getNStep()<<"  start : " ; 
    2660                 for(auto it : start) info(0)<<" "<<it ; 
    2661                 info(0)<<"  count : " ;  
    2662                 for(auto it : count) info(0)<<"  "<<it ; 
    2663                 info(0)<<endl ;  
    2664                   
     2651                
     2652                ostringstream str ; 
     2653                str<<"write data parameter  "<<fieldid<<"  "<<field->getNStep()<<"  start : " ; 
     2654                for(auto it : start) str<<" "<<it ; 
     2655                str<<"  count : " ;  
     2656                for(auto it : count) str<<"  "<<it ; 
     2657                info(0)<<str.str()<<endl ;   
     2658                cout<<str.str()<<endl ; 
    26652659                CTimer::get("Files : writing data").resume(); 
     2660                double t0=CTimer::getTime(); 
    26662661                SuperClassWriter::writeData(newData, fieldid, isCollective, field->getNStep() - 1, &start, &count); 
     2662                double t1=CTimer::getTime(); 
     2663                double dataSize=1 ; 
     2664                for(auto it : count) dataSize*=it ; 
     2665                info(0)<<"Field "<<fieldid<<" : size "<<dataSize<<"  --> Bandwith "<<dataSize/(t1-t0)/(1024*1024)*4<<" Mb/s"<<endl  ; 
     2666 
    26672667                CTimer::get("Files : writing data").suspend(); 
    26682668 
Note: See TracChangeset for help on using the changeset viewer.