Index: /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/config/node_type.conf	(revision 1275)
@@ -87,4 +87,8 @@
 #endif //__XIOS_CReduceDomainToScalar__
 
+#ifdef __XIOS_CTemporalSplitting__
+   DECLARE_NODE(TemporalSplitting, temporal_splitting)
+#endif //__XIOS_CTemporalSplitting__
+
 #ifdef __XIOS_CContext__
    DECLARE_NODE_PAR(Context, context)
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.cpp	(revision 1275)
@@ -27,6 +27,17 @@
       size_t inputCount = 1 + (auxInputs.empty() ? 0 : auxInputs.size());
       double defaultValue  = (hasMissingValue) ? std::numeric_limits<double>::quiet_NaN() : 0.0;
-      boost::shared_ptr<CSpatialTransformFilter> filter(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount));
-
+
+
+      const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ;
+      CGridTransformationSelector::ListAlgoType::const_iterator it  ;
+
+      bool isSpatialTemporal=false ;
+      for (it=algoList.begin();it!=algoList.end();++it)  if (it->second.first == TRANS_TEMPORAL_SPLITTING) isSpatialTemporal=true ;
+
+      boost::shared_ptr<CSpatialTransformFilter> filter ;
+      if( isSpatialTemporal) filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTemporalFilter(gc, engine, gridTransformation, defaultValue, inputCount));
+      else filter = boost::shared_ptr<CSpatialTransformFilter>(new CSpatialTransformFilter(gc, engine, defaultValue, inputCount));
+
+      
       if (!lastFilter)
         lastFilter = filter;
@@ -56,4 +67,67 @@
       onOutputReady(outputPacket);
   }
+
+
+
+
+
+  CSpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount)
+    : CSpatialTransformFilter(gc, engine, outputValue, inputSlotsCount), record(0)
+  {
+      const CGridTransformationSelector::ListAlgoType& algoList = gridTransformation->getAlgoList() ;
+      CGridTransformationSelector::ListAlgoType::const_iterator it  ;
+
+      int pos ;
+      for (it=algoList.begin();it!=algoList.end();++it) 
+        if (it->second.first == TRANS_TEMPORAL_SPLITTING)
+        {
+          pos=it->first ;
+          if (pos < algoList.size()-1)
+            ERROR("SpatialTemporalFilter::CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount))",
+                  "temporal splitting operation must be the last of whole transformation on same grid") ;
+        }
+          
+      CGrid* grid=gridTransformation->getGridDestination() ;
+
+      CAxis* axis = grid->getAxis(gridTransformation->getElementPositionInGridDst2AxisPosition().find(pos)->second) ;
+
+      nrecords = axis->index.numElements() ;
+  }
+
+
+  void CSpatialTemporalFilter::onInputReady(std::vector<CDataPacketPtr> data)
+  {
+    CSpatialTransformFilterEngine* spaceFilter = static_cast<CSpatialTransformFilterEngine*>(engine);
+    CDataPacketPtr outputPacket = spaceFilter->applyFilter(data, outputDefaultValue);
+
+    if (outputPacket)
+    {
+      size_t nelements=outputPacket->data.numElements() ;
+      if (!tmpData.numElements())
+      {
+        tmpData.resize(nelements);
+        tmpData=outputDefaultValue ;
+      }
+
+      nelements/=nrecords ;
+      size_t offset=nelements*record ;
+      for(size_t i=0;i<nelements;++i)  tmpData(i+offset) = outputPacket->data(i) ;
+    
+      record ++ ;
+      if (record==nrecords)
+      {
+        record=0 ;
+        CDataPacketPtr packet = CDataPacketPtr(new CDataPacket);
+        packet->date = data[0]->date;
+        packet->timestamp = data[0]->timestamp;
+        packet->status = data[0]->status;
+        packet->data.resize(tmpData.numElements());
+        packet->data = tmpData;
+        onOutputReady(packet);
+        tmpData.resize(0) ;
+      }
+    }
+  }
+
 
   CSpatialTransformFilterEngine::CSpatialTransformFilterEngine(CGridTransformation* gridTransformation)
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/filter/spatial_transform_filter.hpp	(revision 1275)
@@ -49,4 +49,41 @@
       double outputDefaultValue;
   }; // class CSpatialTransformFilter
+
+
+ /*!
+   * A specific spatial filter for the temporal_splitting transformation scalar -> axis. An incoming flux will be stored in an aditional dimension given by the destination axis.
+   * At each flux received, the storing index (record) is increased. When it reach the size of the axis (nrecords) a new flux is generated and the record is reset to 0
+   */
+
+ class CSpatialTemporalFilter : public CSpatialTransformFilter
+  {
+    public:
+      /*!
+       * Constructs a filter wrapping the specified spatial transformation.
+       *
+       * \param gc the associated garbage collector
+       * \param engine the engine defining the spatial transformation
+       * \param [in] gridTransformation the associated transformations
+       * \param outputValue default value of output pin
+       * \param [in] inputSlotsCount number of input, by default there is only one for field src
+       */
+      CSpatialTemporalFilter(CGarbageCollector& gc, CSpatialTransformFilterEngine* engine, CGridTransformation* gridTransformation, double outputValue, size_t inputSlotsCount = 1);
+
+
+    protected:
+      /*!
+        Overriding this function to process transformations with auxillary inputs
+      */
+      void virtual onInputReady(std::vector<CDataPacketPtr> data);
+      //! Current record in the filter
+      int record ;
+      //! Maximum number of records
+      int nrecords;
+      //! Temporary storage for output flux
+      CArray<double, 1> tmpData; 
+
+
+  }; // class CSpatialTemporalFilter
+
 
   /*!
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/generate_fortran_interface.cpp	(revision 1275)
@@ -41,9 +41,10 @@
   CReduceDomainToAxis reduceDomainToAxis;
   CExtractDomainToAxis extractDomainToAxis;
+  CTemporalSplitting temporalSplitting;
 
   CReduceAxisToScalar reduceAxisToScalar;
   CExtractAxisToScalar extractAxisToScalar;
   CReduceDomainToScalar reduceDomainToScalar;
-
+  
   ostringstream oss;
   ofstream file;
@@ -354,10 +355,22 @@
   file.close();
 
+  file.open((path+"temporal_splitting_interface_attr.F90").c_str());
+  temporalSplitting.generateFortran2003Interface(file);
+  file.close();
+
   file.open((path+"icextract_domain_to_axis_attr.cpp").c_str());
   extractDomainToAxis.generateCInterface(file);
   file.close();
 
+  file.open((path+"ictemporal_splitting_attr.cpp").c_str());
+  temporalSplitting.generateCInterface(file);
+  file.close();
+
   file.open((path+"iextract_domain_to_axis_attr.F90").c_str());
   extractDomainToAxis.generateFortranInterface(file);
+  file.close();
+
+  file.open((path+"itemporal_splitting_attr.F90").c_str());
+  temporalSplitting.generateFortranInterface(file);
   file.close();
 
@@ -394,4 +407,8 @@
   file.close();
 
+  file.open((path+"temporal_splitting_interface_attr.F90").c_str());
+  temporalSplitting.generateFortran2003Interface(file);
+  file.close();
+
   file.open((path+"icreduce_domain_to_scalar_attr.cpp").c_str());
   reduceDomainToScalar.generateCInterface(file);
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/group_factory_decl.cpp	(revision 1275)
@@ -39,3 +39,5 @@
   macro(CExtractAxisToScalarGroup)
   macro(CReduceDomainToScalarGroup)
+  macro(CTemporalSplittingGroup)
+
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/group_template_decl.cpp	(revision 1275)
@@ -28,4 +28,4 @@
   macro(ExtractAxisToScalar)
   macro(ReduceDomainToScalar)
-
+  macro(TemporalSplitting)
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/axis.cpp	(revision 1275)
@@ -52,4 +52,5 @@
      m["reduce_domain"] = TRANS_REDUCE_DOMAIN_TO_AXIS;
      m["extract_domain"] = TRANS_EXTRACT_DOMAIN_TO_AXIS;
+     m["temporal_splitting"] = TRANS_TEMPORAL_SPLITTING;
    }
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_enum.hpp	(revision 1275)
@@ -33,6 +33,6 @@
          eExpandDomain,
          eExtractAxisToScalar,
-         eReduceDomainToScalar
-
+         eReduceDomainToScalar,
+         eTemporalSplitting
       } ENodeType;
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/node_type.hpp	(revision 1275)
@@ -24,4 +24,5 @@
 #include "extract_axis_to_scalar.hpp"
 #include "reduce_domain_to_scalar.hpp"
+#include "temporal_splitting.hpp"
 
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.cpp	(revision 1275)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.cpp	(revision 1275)
@@ -0,0 +1,47 @@
+#include "temporal_splitting.hpp"
+#include "type.hpp"
+#include "axis.hpp"
+#include "domain.hpp"
+#include "scalar.hpp"
+
+namespace xios {
+
+  /// ////////////////////// DÃ©finitions ////////////////////// ///
+
+  CTemporalSplitting::CTemporalSplitting(void)
+    : CObjectTemplate<CTemporalSplitting>(), CTemporalSplittingAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CTemporalSplitting::CTemporalSplitting(const StdString & id)
+    : CObjectTemplate<CTemporalSplitting>(id), CTemporalSplittingAttributes(), CTransformation<CAxis>()
+  { /* Ne rien faire de plus */ }
+
+  CTemporalSplitting::~CTemporalSplitting(void)
+  {}
+
+  CTransformation<CAxis>* CTemporalSplitting::create(const StdString& id, xml::CXMLNode* node)
+  {
+    CTemporalSplitting* temporalSplitting = CTemporalSplittingGroup::get("temporal_splitting_definition")->createChild(id);
+    if (node) temporalSplitting->parse(*node);
+    return static_cast<CTransformation<CAxis>*>(temporalSplitting);
+  }
+
+  bool CTemporalSplitting::registerTrans()
+  {
+    return registerTransformation(TRANS_TEMPORAL_SPLITTING, CTemporalSplitting::create);
+  }
+
+  bool CTemporalSplitting::_dummyRegistered = CTemporalSplitting::registerTrans();
+
+  //----------------------------------------------------------------
+
+  StdString CTemporalSplitting::GetName(void)    { return StdString("temporal_splitting"); }
+  StdString CTemporalSplitting::GetDefName(void) { return StdString("temporal_splitting"); }
+  ENodeType CTemporalSplitting::GetType(void)    { return eTemporalSplitting; }
+
+  void CTemporalSplitting::checkValid(CAxis* axisDst, CScalar* scalarSrc)
+  {
+
+  }
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.hpp	(revision 1275)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/temporal_splitting.hpp	(revision 1275)
@@ -0,0 +1,66 @@
+#ifndef __XIOS_CTemporalSplitting__
+#define __XIOS_CTemporalSplitting__
+
+/// xios headers ///
+#include "xios_spl.hpp"
+#include "attribute_enum.hpp"
+#include "attribute_enum_impl.hpp"
+#include "attribute_array.hpp"
+#include "declare_attribute.hpp"
+#include "object_template.hpp"
+#include "group_factory.hpp"
+#include "declare_group.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+  /// ////////////////////// DÃ©clarations ////////////////////// ///
+  class CTemporalSplittingGroup;
+  class CTemporalSplittingAttributes;
+  class CTemporalSplitting;
+  class CAxis;
+  class CScalar;
+  ///--------------------------------------------------------------
+
+  // Declare/Define CFileAttribute
+  BEGIN_DECLARE_ATTRIBUTE_MAP(CTemporalSplitting)
+#include "temporal_splitting.conf"
+  END_DECLARE_ATTRIBUTE_MAP(CTemporalSplitting)
+
+  ///--------------------------------------------------------------
+  /*!
+    \class CExtractDomainToAxis
+    This class describes reduce_domain in xml file.
+  */
+  class CTemporalSplitting
+    : public CObjectTemplate<CTemporalSplitting>
+    , public CTemporalSplittingAttributes
+    , public CTransformation<CAxis>
+  {
+    public :
+      typedef CObjectTemplate<CTemporalSplitting> SuperClass;
+      typedef CTemporalSplittingAttributes SuperClassAttribute;
+
+    public :
+      /// Constructeurs ///
+      CTemporalSplitting(void);
+      explicit CTemporalSplitting(const StdString& id);
+
+      /// Destructeur ///
+      virtual ~CTemporalSplitting(void);
+
+      virtual void checkValid(CAxis* axisDst, CScalar* scalarSrc);
+
+      /// Accesseurs statiques ///
+      static StdString GetName(void);
+      static StdString GetDefName(void);
+      static ENodeType GetType(void);
+    private:
+      static bool registerTrans();
+      static CTransformation<CAxis>* create(const StdString& id, xml::CXMLNode* node);
+      static bool _dummyRegistered;
+  }; // class CTemporalSplitting
+
+  DECLARE_GROUP(CTemporalSplitting);
+} // namespace xios
+
+#endif // __XIOS_CTemporalSplitting__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/node/transformation_enum.hpp	(revision 1275)
@@ -20,4 +20,5 @@
         TRANS_EXTRACT_AXIS_TO_SCALAR = 11,
         TRANS_REDUCE_DOMAIN_TO_SCALAR = 12,
+        TRANS_TEMPORAL_SPLITTING = 13,
       } ETranformationType;
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/object_factory_decl.cpp	(revision 1275)
@@ -40,4 +40,5 @@
   macro(CExtractAxisToScalar)
   macro(CReduceDomainToScalar)
+  macro(CTemporalSplitting)
 
   macro(CFieldGroup)
@@ -62,3 +63,4 @@
   macro(CExtractAxisToScalarGroup)
   macro(CReduceDomainToScalarGroup)
+  macro(CTemporalSplittingGroup)
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/object_template_decl.cpp	(revision 1275)
@@ -27,4 +27,5 @@
   template class CObjectTemplate<CExtractAxisToScalar>;
   template class CObjectTemplate<CReduceDomainToScalar>;
+  template class CObjectTemplate<CTemporalSplitting>;
 
   template class CObjectTemplate<CContextGroup>;
@@ -49,3 +50,4 @@
   template class CObjectTemplate<CExtractAxisToScalarGroup>;
   template class CObjectTemplate<CReduceDomainToScalarGroup>;
+  template class CObjectTemplate<CTemporalSplittingGroup>;
 }
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/test/test_diurnal_cycle.f90
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/test/test_diurnal_cycle.f90	(revision 1275)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/test/test_diurnal_cycle.f90	(revision 1275)
@@ -0,0 +1,101 @@
+PROGRAM test_diurnal_cycle
+
+  USE xios
+  USE mod_wait
+  IMPLICIT NONE
+  INCLUDE "mpif.h"
+  INTEGER :: rank
+  INTEGER :: size
+  INTEGER :: ierr
+
+  CHARACTER(len=*),PARAMETER :: id="client"
+  INTEGER :: comm
+  TYPE(xios_duration) :: dtime
+  TYPE(xios_context) :: ctx_hdl
+  INTEGER,PARAMETER :: llm=10
+  DOUBLE PRECISION  :: value_glo(0:llm-1)
+  DOUBLE PRECISION,ALLOCATABLE :: axisValue(:)
+  DOUBLE PRECISION,ALLOCATABLE :: field_A(:,:)
+  INTEGER :: i,j,l,ts,nl,begin
+
+!!! MPI Initialization
+
+  CALL MPI_INIT(ierr)
+  CALL MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierr)
+  
+  IF (rank>3) THEN 
+    CALL xios_init_server
+  ELSE
+  
+  CALL init_wait
+
+!!! XIOS Initialization (get the local communicator)
+
+  CALL xios_initialize(id,return_comm=comm)
+
+  CALL MPI_COMM_RANK(comm,rank,ierr)
+  CALL MPI_COMM_SIZE(comm,size,ierr)
+
+  CALL xios_context_initialize("test",comm)
+  CALL xios_get_handle("test",ctx_hdl)
+  CALL xios_set_current_context(ctx_hdl)
+
+  nl=llm/size
+  
+  IF (rank<MOD(llm,size)) THEN 
+    nl=nl+1
+    begin=rank*nl
+  ELSE
+    begin=(nl+1)*MOD(llm,size) + nl*(rank-MOD(llm,size))
+  ENDIF
+  DO i=0,llm-1
+    value_glo(i)=i
+  ENDDO
+
+
+  IF (rank==0) THEN
+    begin=0 ; nl=6
+  ELSE IF (rank==1) THEN
+    begin=0 ; nl=6
+  ELSE IF (rank==2) THEN
+    begin=0 ; nl=6
+  ELSE IF (rank==3) THEN
+    begin=6 ; nl=4
+  ENDIF
+
+  ALLOCATE(axisValue(0:nl-1))
+  ALLOCATE(field_A(0:nl-1,0:llm-1))
+  axisValue(:)=value_glo(begin:begin+nl-1)
+  DO i=0,llm-1
+    field_A(:,i)=10*i+value_glo(begin:begin+nl-1)
+  ENDDO
+  
+  CALL xios_set_axis_attr("axis_A",n_glo=llm , begin=begin, n=nl,value=axisValue) ;
+
+  dtime%second = 3600
+  CALL xios_set_timestep(dtime)
+  CALL xios_close_context_definition()
+ 
+  DO ts=1,8
+    CALL xios_update_calendar(ts)
+    CALL xios_send_field("field_A",field_A(:,:))
+    field_A=field_A+100
+    CALL wait_us(5000) ;
+  ENDDO
+
+  CALL xios_context_finalize()
+
+  CALL MPI_COMM_FREE(comm, ierr)
+
+  CALL xios_finalize()
+  
+  ENDIF
+  
+  CALL MPI_FINALIZE(ierr)
+
+END PROGRAM test_diurnal_cycle
+
+
+
+
+
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/algo_types.hpp	(revision 1275)
@@ -20,4 +20,5 @@
 #include "axis_algorithm_transformation.hpp"
 #include "axis_algorithm_extract_domain.hpp"
+#include "axis_algorithm_temporal_splitting.hpp"
 
 #include "domain_algorithm_zoom.hpp"
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.cpp	(revision 1275)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.cpp	(revision 1275)
@@ -0,0 +1,75 @@
+/*!
+   \file axis_algorithm_temporal_splitting.cpp
+
+   \brief Algorithm to split scalar into  axis by temporal accumulation
+ */
+#include "axis_algorithm_temporal_splitting.hpp"
+#include "temporal_splitting.hpp"
+#include "axis.hpp"
+#include "scalar.hpp"
+#include "grid.hpp"
+#include "grid_transformation_factory_impl.hpp"
+
+namespace xios {
+CGenericAlgorithmTransformation* CAxisAlgorithmTemporalSplitting::create(CGrid* gridDst, CGrid* gridSrc,
+                                                                     CTransformation<CAxis>* transformation,
+                                                                     int elementPositionInGrid,
+                                                                     std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                                     std::map<int, int>& elementPositionInGridDst2DomainPosition)
+{
+  std::vector<CAxis*> axisListDestP = gridDst->getAxis();
+  std::vector<CScalar*> scalarListSrcP = gridSrc->getScalars();
+
+  CTemporalSplitting* temporalSplitting = dynamic_cast<CTemporalSplitting*> (transformation);
+  int axisDstIndex = elementPositionInGridDst2AxisPosition[elementPositionInGrid];
+  int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
+
+  return (new CAxisAlgorithmTemporalSplitting(axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting));
+}
+
+bool CAxisAlgorithmTemporalSplitting::registerTrans()
+{
+  CGridTransformationFactory<CAxis>::registerTransformation(TRANS_TEMPORAL_SPLITTING, create);
+}
+
+
+CAxisAlgorithmTemporalSplitting::CAxisAlgorithmTemporalSplitting(CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo)
+ : CAxisAlgorithmTransformation(axisDestination, scalarSource)
+{
+
+}
+
+
+CAxisAlgorithmTemporalSplitting::~CAxisAlgorithmTemporalSplitting()
+{
+}
+
+void CAxisAlgorithmTemporalSplitting::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs)
+{
+  this->transformationMapping_.resize(1);
+  this->transformationWeight_.resize(1);
+
+  TransformationIndexMap& transMap = this->transformationMapping_[0];
+  TransformationWeightMap& transWeight = this->transformationWeight_[0];
+
+  CArray<int,1>& axisDstIndex = axisDest_->index;
+
+  int nbAxisIdx = axisDstIndex.numElements();
+  for (int idxAxis = 0; idxAxis < nbAxisIdx; ++idxAxis)
+  {
+    int globalAxisIdx = axisDstIndex(idxAxis);
+    if (idxAxis==0)
+    {
+      transMap[globalAxisIdx].resize(1);
+      transWeight[globalAxisIdx].resize(1);
+      transMap[globalAxisIdx][0] = 0 ;
+      transWeight[globalAxisIdx][0] = 1.0 ;
+    }
+  }
+}
+
+}
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.hpp	(revision 1275)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_temporal_splitting.hpp	(revision 1275)
@@ -0,0 +1,52 @@
+/*!
+   \file axis_algorithm_reduce_domain.hpp
+   \author Ha NGUYEN
+   \since 23 June 2016
+   \date 23 June 2016
+
+   \brief Algorithm for reduce an axis to a axis
+ */
+#ifndef __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__
+#define __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__
+
+#include "axis_algorithm_transformation.hpp"
+#include "transformation.hpp"
+
+namespace xios {
+
+class CAxis;
+class CScalar;
+class CTemporalSplitting;
+
+
+
+/*!
+  \class CAxisAlgorithmExtractDomain
+  Extract a domain to an axis
+*/
+class CAxisAlgorithmTemporalSplitting : public CAxisAlgorithmTransformation
+{
+public:
+  CAxisAlgorithmTemporalSplitting(CAxis* axisDestination, CScalar* scalarSource, CTemporalSplitting* algo);
+
+  virtual ~CAxisAlgorithmTemporalSplitting();
+
+  static bool registerTrans();
+
+protected:
+  void computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs);
+
+private:
+  static CGenericAlgorithmTransformation* create(CGrid* gridDst, CGrid* gridSrc,
+                                                CTransformation<CAxis>* transformation,
+                                                int elementPositionInGrid,
+                                                std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridSrc2DomainPosition,
+                                                std::map<int, int>& elementPositionInGridDst2ScalarPosition,
+                                                std::map<int, int>& elementPositionInGridDst2AxisPosition,
+                                                std::map<int, int>& elementPositionInGridDst2DomainPosition);
+};
+
+}
+#endif // __XIOS_AXIS_ALGORITHM_TEMPORAL_SPLITTING_HPP__
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.cpp	(revision 1275)
@@ -19,5 +19,5 @@
 
 CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CAxis* axisSource)
- : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(axisSource), domainSrc_(0)
+ : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(axisSource), domainSrc_(0),scalarSrc_(0)
 {
   axisDestGlobalSize_ = axisDestination->n_glo.getValue();
@@ -30,5 +30,5 @@
 
 CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CDomain* domainSource)
- : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(0), domainSrc_(domainSource)
+ : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(0), domainSrc_(domainSource),scalarSrc_(0)
 {
   axisDestGlobalSize_ = axisDestination->n_glo.getValue();
@@ -40,4 +40,14 @@
 }
 
+CAxisAlgorithmTransformation::CAxisAlgorithmTransformation(CAxis* axisDestination, CScalar* scalarSource)
+ : CGenericAlgorithmTransformation(), axisDest_(axisDestination), axisSrc_(0), domainSrc_(0), scalarSrc_(scalarSource)
+{
+  axisDestGlobalSize_ = axisDestination->n_glo.getValue();
+  int niDest = axisDestination->n.getValue();
+  int ibeginDest = axisDestination->begin.getValue();
+
+  for (int idx = 0; idx < niDest; ++idx)
+    if ((axisDestination->mask)(idx)) axisDestGlobalIndex_.push_back(ibeginDest+idx);
+}
 CAxisAlgorithmTransformation::~CAxisAlgorithmTransformation()
 {
@@ -66,15 +76,21 @@
   if (2 == elementType) nIndexSize = domainSrc_->i_index.numElements();
   else if (1 == elementType) nIndexSize = axisSrc_->index.numElements();
+  else nIndexSize=1  ; //  scalar
+  
   CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank;
   globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor()));
   for (int idx = 0; idx < nIndexSize; ++idx)
   {
-    if (2 == elementType)
+    if (2 == elementType) // domain
     {
       globalIndex = domainSrc_->i_index(idx) + domainSrc_->j_index(idx) * domainSrc_->ni_glo;
     }
-    else if (1 == elementType)
+    else if (1 == elementType) // axis
     {
       globalIndex = axisSrc_->index(idx);
+    }
+    else // scalar
+    {
+      globalIndex = 0;
     }
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/axis_algorithm_transformation.hpp	(revision 1275)
@@ -17,5 +17,5 @@
 class CAxis;
 class CDomain;
-
+class CScalar;
 /*!
   \class CAxisAlgorithmTransformation
@@ -27,4 +27,5 @@
   CAxisAlgorithmTransformation(CAxis* axisDestination, CAxis* axisSource);
   CAxisAlgorithmTransformation(CAxis* axisDestination, CDomain* domainSource);
+  CAxisAlgorithmTransformation(CAxis* axisDestination, CScalar* scalarSource);
 
   virtual ~CAxisAlgorithmTransformation();
@@ -52,4 +53,8 @@
   //! Domain on grid source
   CDomain* domainSrc_;
+
+  //! Scalar on grid source
+
+  CScalar* scalarSrc_;
 };
 
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.cpp	(revision 1275)
@@ -29,4 +29,5 @@
   CAxisAlgorithmInverse::registerTrans();
   CAxisAlgorithmReduceDomain::registerTrans();
+  CAxisAlgorithmTemporalSplitting::registerTrans();
 
   //! Domain
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/transformation/grid_transformation_selector.hpp	(revision 1275)
@@ -51,4 +51,11 @@
   const std::vector<StdString>& getAuxInputs() const { return auxInputs_; }
   const std::vector<CGenericAlgorithmTransformation*>& getAlgos() const { return algoTransformation_; }
+  const std::map<int, int> getElementPositionInGridSrc2AxisPosition() const { return elementPositionInGridSrc2AxisPosition_ ;}
+  const std::map<int, int> getElementPositionInGridSrc2DomainPosition() const { return elementPositionInGridSrc2DomainPosition_ ;}
+  const std::map<int, int> getElementPositionInGridSrc2ScalarPosition() const { return elementPositionInGridSrc2ScalarPosition_ ;}
+  const std::map<int, int> getElementPositionInGridDst2AxisPosition() const { return elementPositionInGridDst2AxisPosition_ ;}
+  const std::map<int, int> getElementPositionInGridDst2DomainPosition() const { return elementPositionInGridDst2DomainPosition_ ;}
+  const std::map<int, int> getElementPositionInGridDst2ScalarPosition() const { return elementPositionInGridDst2ScalarPosition_ ;}
+
 
 protected:
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/type/type_util.hpp	(revision 1275)
@@ -48,5 +48,7 @@
     class CReduceDomainToScalar;
     class CReduceDomainToScalarGroup;
-
+    class CTemporalSplitting;
+    class CTemporalSplittingGroup;
+    
   template <typename T> inline string getStrType(void);
 
@@ -112,4 +114,6 @@
   macro(CReduceDomainToScalar)
   macro(CReduceDomainToScalarGroup)
+  macro(CTemporalSplitting)
+  macro(CTemporalSplittingGroup)
   
 #undef macro
Index: /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp
===================================================================
--- /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp	(revision 1274)
+++ /XIOS/dev/XIOS_DEV_CMIP6/src/xml_parser_decl.cpp	(revision 1275)
@@ -33,4 +33,5 @@
     macro( ExtractAxisToScalar )
     macro( ReduceDomainToScalar )
+    macro( TemporalSplitting )
   }
 }
