Index: XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.env
===================================================================
--- XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.env	(revision 1481)
+++ XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.env	(revision 1482)
@@ -1,6 +1,10 @@
 module unload netcdf
 module unload hdf5
+module unload boost
+module unload blitz
 module load netcdf/4.3.3.1_hdf5_parallel
 module load gnu/4.9.1
+module load boost
+module load blitz
 export OMPI_CC=gcc
 export OMPI_CXX=g++
Index: XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.path
===================================================================
--- XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.path	(revision 1481)
+++ XIOS/dev/branch_openmp/arch/arch-X64_CURIE_GCC.path	(revision 1482)
@@ -11,4 +11,12 @@
 HDF5_LIB=""
 
+BOOST_INCDIR="-I $BOOST_INCDIR"
+BOOST_LIBDIR="-L $BOOST_LIBDIR"
+BOOST_LIB=""
+
+BLITZ_INCDIR="-I $BLITZ_INCDIR"
+BLITZ_LIBDIR="-L $BLITZ_LIBDIR"
+BLITZ_LIB=""
+
 OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
 OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
Index: XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.env
===================================================================
--- XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.env	(revision 1481)
+++ XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.env	(revision 1482)
@@ -1,9 +1,13 @@
-module unload netcdf
-module unload hdf5
 module load netcdf/4.3.3.1_hdf5_parallel
 #module unload intel
 module unload pgi
 module unload gnu
+module unload boost
+module unload blitz
 module load pgi/14.10
+module load boost
+module load blitz
+
+
 
 export OMPI_CC=pgcc
Index: XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.path
===================================================================
--- XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.path	(revision 1481)
+++ XIOS/dev/branch_openmp/arch/arch-X64_CURIE_PGI.path	(revision 1482)
@@ -11,4 +11,12 @@
 HDF5_LIB=""
 
+BOOST_INCDIR="-I $BOOST_INCDIR"
+BOOST_LIBDIR="-L $BOOST_LIBDIR"
+BOOST_LIB=""
+
+BLITZ_INCDIR="-I $BLITZ_INCDIR"
+BLITZ_LIBDIR="-L $BLITZ_LIBDIR"
+BLITZ_LIB=""
+
 OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
 OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
Index: XIOS/dev/branch_openmp/bld.cfg
===================================================================
--- XIOS/dev/branch_openmp/bld.cfg	(revision 1481)
+++ XIOS/dev/branch_openmp/bld.cfg	(revision 1482)
@@ -33,5 +33,5 @@
 bld::target libxios.a 
 #bld::target generate_fortran_interface.exe 
-#bld::target xios_server.exe 
+bld::target xios_server.exe 
 #bld::target test_regular.exe
 #bld::target test_expand_domain.exe
Index: XIOS/dev/branch_openmp/extern/ep_dev/ep_type.hpp
===================================================================
--- XIOS/dev/branch_openmp/extern/ep_dev/ep_type.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/extern/ep_dev/ep_type.hpp	(revision 1482)
@@ -184,5 +184,5 @@
   struct BUFFER
   {
-    void * void_buffer[12];
+    void * void_buffer[16];
   };
 
Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.cpp	(revision 1482)
@@ -25,4 +25,5 @@
 ::MPI_Datatype MPI_UNSIGNED_CHAR_STD = MPI_UNSIGNED_CHAR;
 ::MPI_Datatype MPI_UINT64_T_STD = MPI_UINT64_T;
+::MPI_Datatype MPI_LONG_LONG_INT_STD = MPI_LONG_LONG_INT;
 
 #undef MPI_INT
@@ -34,4 +35,5 @@
 #undef MPI_UNSIGNED_CHAR
 #undef MPI_UINT64_T
+#undef MPI_LONG_LONG_INT
 
 
@@ -57,4 +59,5 @@
 extern ::MPI_Datatype MPI_UNSIGNED_CHAR_STD;
 extern ::MPI_Datatype MPI_UINT64_T_STD;
+extern ::MPI_Datatype MPI_LONG_LONG_INT_STD;
 
 
@@ -79,4 +82,5 @@
 ep_lib::MPI_Datatype MPI_UNSIGNED_CHAR = &MPI_UNSIGNED_CHAR_STD;
 ep_lib::MPI_Datatype MPI_UINT64_T = &MPI_UINT64_T_STD;
+ep_lib::MPI_Datatype MPI_LONG_LONG_INT = &MPI_LONG_LONG_INT_STD;
 
 
Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_declaration.hpp	(revision 1482)
@@ -10,4 +10,5 @@
 #undef MPI_UNSIGNED_CHAR
 #undef MPI_UINT64_T
+#undef MPI_LONG_LONG_INT
 
 #undef MPI_SUM
@@ -31,4 +32,5 @@
 extern ep_lib::MPI_Datatype MPI_UNSIGNED_CHAR;
 extern ep_lib::MPI_Datatype MPI_UINT64_T;
+extern ep_lib::MPI_Datatype MPI_LONG_LONG_INT;
 
 extern ep_lib::MPI_Op MPI_SUM;
Index: XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp
===================================================================
--- XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/extern/src_ep_dev/ep_reduce.cpp	(revision 1482)
@@ -130,4 +130,11 @@
             reduce_max<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
         }
+        
+        else if(datatype == MPI_LONG_LONG_INT)
+        {
+          assert(datasize == sizeof(long long));
+          for(int i=1; i<num_ep; i++)
+            reduce_max<long long>(static_cast<long long*>(comm.my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);
+        }
 
         else printf("datatype Error\n");
@@ -185,4 +192,11 @@
             reduce_min<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
         }
+        
+        else if(datatype == MPI_LONG_LONG_INT)
+        {
+          assert(datasize == sizeof(long long));
+          for(int i=1; i<num_ep; i++)
+            reduce_min<long long>(static_cast<long long*>(comm.my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);
+        }
 
         else printf("datatype Error\n");
@@ -240,4 +254,11 @@
           for(int i=1; i<num_ep; i++)
             reduce_sum<uint64_t>(static_cast<uint64_t*>(comm.my_buffer->void_buffer[i]), static_cast<uint64_t*>(recvbuf), count);
+        }
+        
+        else if(datatype ==MPI_LONG_LONG_INT)
+        {
+          assert(datasize == sizeof(long long));
+          for(int i=1; i<num_ep; i++)
+            reduce_sum<long long>(static_cast<long long*>(comm.my_buffer->void_buffer[i]), static_cast<long long*>(recvbuf), count);
         }
 
Index: XIOS/dev/branch_openmp/src/attribute_template.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/attribute_template.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/attribute_template.hpp	(revision 1482)
@@ -52,4 +52,5 @@
             void set(const CAttributeTemplate& attr) ;
             void reset(void) ;
+            void checkEmpty(void) const;
 
             void setInheritedValue(const CAttributeTemplate& attr );
Index: XIOS/dev/branch_openmp/src/attribute_template_impl.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/attribute_template_impl.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/attribute_template_impl.hpp	(revision 1482)
@@ -69,34 +69,26 @@
 
       template <class T>
-         T CAttributeTemplate<T>::getValue(void) const
+      void CAttributeTemplate<T>::checkEmpty(void) const
+      {
+        if (CType<T>::empty)
+        {
+          StdString msg("On checking attribute with id=");
+          msg.append(this->getId());
+          msg.append(" : ");
+          msg.append("data is not initialized\n");
+          ERROR("template <typename T> void CType<T>::checkEmpty(void) const", << msg);
+        }
+      }
+      
+      template <class T>
+      T CAttributeTemplate<T>::getValue(void) const
       {
         return CType<T>::get() ;
-/*
-        if (SuperClass::isEmpty())
-        {
-           ERROR("T CAttributeTemplate<T>::getValue(void) const",
-                 << "[ id = " << this->getId() << "]"
-                 << " L'attribut est requis mais n'est pas dÃ©fini !");
-         }
-        return (SuperClass::getValue<T>());
-*/
-      }
-
-/*
-      template <class T>
-         T* CAttributeTemplate<T>::getRef(void)
-      {
-         if (SuperClass::isEmpty())
-         {
-            ERROR("T CAttributeTemplate<T>::getValue(void) const",
-                  << "[ id = " << this->getId() << "]"
-                  << " L'attribut est requis mais n'est pas dÃ©fini !");
-          }
-         return (SuperClass::getRef<T>());
-      }
-*/
-
-      template <class T>
-         void CAttributeTemplate<T>::setValue(const T & value)
+      }
+
+
+
+      template <class T>
+      void CAttributeTemplate<T>::setValue(const T & value)
       {
          CType<T>::set(value) ;
Index: XIOS/dev/branch_openmp/src/calendar_util.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/calendar_util.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/calendar_util.cpp	(revision 1482)
@@ -130,7 +130,7 @@
     {
       // TODO :: VÃ©rifier que les deux dates (dt0 et dt1) ont une rÃ©fÃ©rence vers le mÃªme calendrier.
-      CDuration dur =
-      { dt0.getYear() - dt1.getYear(), dt0.getMonth()  - dt1.getMonth() , dt0.getDay()   - dt1.getDay(),
-        dt0.getHour() - dt1.getHour(), dt0.getMinute() - dt1.getMinute(), dt0.getSecond() - dt1.getSecond() };
+      CDuration dur( dt0.getYear() - dt1.getYear(), dt0.getMonth()  - dt1.getMonth() , dt0.getDay()   - dt1.getDay(),
+      dt0.getHour() - dt1.getHour(), dt0.getMinute() - dt1.getMinute(), dt0.getSecond() - dt1.getSecond() );
+
       return (dur.resolve(dt0.getRelCalendar()));
     }
Index: XIOS/dev/branch_openmp/src/context_client.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/context_client.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/context_client.cpp	(revision 1482)
@@ -107,5 +107,6 @@
         typeId_in=event.getTypeId() ;
         classId_in=event.getClassId() ;
-        MPI_Allreduce(&timeLine,&timeLine_out, 1, MPI_UINT64_T, MPI_SUM, intraComm) ;
+        //MPI_Allreduce(&timeLine,&timeLine_out, 1, MPI_UINT64_T, MPI_SUM, intraComm) ;
+        MPI_Allreduce(&timeLine,&timeLine_out, 1, MPI_LONG_LONG_INT, MPI_SUM, intraComm) ;
         MPI_Allreduce(&typeId_in,&typeId, 1, MPI_INT, MPI_SUM, intraComm) ;
         MPI_Allreduce(&classId_in,&classId, 1, MPI_INT, MPI_SUM, intraComm) ;
@@ -343,5 +344,5 @@
      for (std::map<int,StdSize>::const_iterator it = mapSize.begin(), ite = mapSize.end(); it != ite; ++it)
      {
-       double ratio = double(it->second) / maxEventSize.at(it->first);
+       double ratio = double(it->second) / maxEventSizes[it->first];
        if (ratio < minBufferSizeEventSizeRatio) minBufferSizeEventSizeRatio = ratio;
      }
Index: XIOS/dev/branch_openmp/src/duration.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/duration.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/duration.cpp	(revision 1482)
@@ -7,15 +7,22 @@
 {
       /// ////////////////////// DÃ©finitions ////////////////////// ///
-      const CDuration Year     = { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
-                      Month    = { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
-                      Week     = { 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 0.0 },
-                      Day      = { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 },
-                      Hour     = { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 },
-                      Minute   = { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 },
-                      Second   = { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 },
-                      TimeStep = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 },
-                      NoneDu   = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
+                      
+      const CDuration Year     ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 );
+      const CDuration Month    ( 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 );
+      const CDuration Week     ( 0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 0.0 );
+      const CDuration Day      ( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 );
+      const CDuration Hour     ( 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 );
+      const CDuration Minute   ( 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 );
+      const CDuration Second   ( 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 );
+      const CDuration TimeStep ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 );
+      const CDuration NoneDu   ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 );
 
       ///---------------------------------------------------------------
+
+      CDuration::CDuration(double y, double m, double d, double h, double min, double s, double ts) :
+      year(y), month(m), day(d), hour(h), minute(min), second(s), timestep(ts)
+      {
+      }
+
 
       CDuration& CDuration::operator=(const CDuration& duration)
Index: XIOS/dev/branch_openmp/src/duration.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/duration.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/duration.hpp	(revision 1482)
@@ -20,4 +20,6 @@
 
          public:
+            CDuration(double year=0.0, double month=0.0, double day=0.0, double hour=0.0, double minute=0.0, double second=0.0, double timestep=0.0);
+            
             /// OpÃ©rateurs ///
             CDuration& operator=(const CDuration& duration);
Index: XIOS/dev/branch_openmp/src/filter/file_writer_filter.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/filter/file_writer_filter.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/filter/file_writer_filter.cpp	(revision 1482)
@@ -29,5 +29,5 @@
       for (size_t idx = 0; idx < nbData; ++idx)
       {
-        if (NumTraits<double>::isnan(dataArray(idx)))
+        if (NumTraits<double>::isNan(dataArray(idx)))
           dataArray(idx) = missingValue;
       }
Index: XIOS/dev/branch_openmp/src/filter/spatial_transform_filter.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/filter/spatial_transform_filter.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/filter/spatial_transform_filter.cpp	(revision 1482)
@@ -204,5 +204,5 @@
     bool ignoreMissingValue = false; 
     double defaultValue = std::numeric_limits<double>::quiet_NaN();
-    if (0 != dataDest.numElements()) ignoreMissingValue = NumTraits<double>::isnan(dataDest(0));
+    if (0 != dataDest.numElements()) ignoreMissingValue = NumTraits<double>::isNan(dataDest(0));
 
     const std::list<CGridTransformation::SendingIndexGridSourceMap>& listLocalIndexSend = gridTransformation->getLocalIndexToSendFromGridSource();
Index: XIOS/dev/branch_openmp/src/filter/store_filter.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/filter/store_filter.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/filter/store_filter.cpp	(revision 1482)
@@ -93,5 +93,5 @@
       for (size_t idx = 0; idx < nbData; ++idx)
       {
-        if (NumTraits<double>::isnan(packet->data(idx)))
+        if (NumTraits<double>::isNan(packet->data(idx)))
           packet->data(idx) = missingValue;
       }
Index: XIOS/dev/branch_openmp/src/filter/temporal_filter.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/filter/temporal_filter.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/filter/temporal_filter.cpp	(revision 1482)
@@ -17,11 +17,12 @@
     , samplingOffset(samplingOffset)
     , opFreq(opFreq)
-    , offsetMonth({0, this->samplingOffset.month, 0, 0, 0, 0, 0})
-    , offsetAllButMonth({this->samplingOffset.year, 0 , this->samplingOffset.day,
-                       this->samplingOffset.hour, this->samplingOffset.minute,
-                       this->samplingOffset.second, this->samplingOffset.timestep})
+    , offsetMonth(0, this->samplingOffset.month, 0, 0, 0, 0, 0)
+    , offsetAllButMonth(this->samplingOffset.year, 0 , this->samplingOffset.day,
+                        this->samplingOffset.hour, this->samplingOffset.minute,
+                        this->samplingOffset.second, this->samplingOffset.timestep)
     , initDate(initDate)
     , nextSamplingDate(initDate + (this->samplingOffset + initDate.getRelCalendar().getTimeStep()))
     , nbOperationDates(1)
+    , nbSamplingDates(0)
 //    , nextOperationDate(initDate + opFreq + this->samplingOffset)
     , isFirstOperation(true)
@@ -48,4 +49,5 @@
       if (usePacket)
       {
+        nbSamplingDates ++;
         if (!copyLess)
         {
@@ -56,5 +58,5 @@
         }
 
-        nextSamplingDate = nextSamplingDate + samplingFreq;
+        nextSamplingDate = ((initDate + offsetMonth) + nbSamplingDates * samplingFreq) + offsetAllButMonth + initDate.getRelCalendar().getTimeStep();
       }
 
Index: XIOS/dev/branch_openmp/src/filter/temporal_filter.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/filter/temporal_filter.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/filter/temporal_filter.hpp	(revision 1482)
@@ -67,4 +67,5 @@
       CDate nextSamplingDate; //!< The date of the next sampling
       int nbOperationDates; //!< The number of times an operation is performed
+      int nbSamplingDates;
 //      CDate nextOperationDate; //!< The date of the next operation
       bool isFirstOperation; //!< True before the first operation was been computed
Index: XIOS/dev/branch_openmp/src/functor/accumulate.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/functor/accumulate.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/functor/accumulate.cpp	(revision 1482)
@@ -34,7 +34,7 @@
             double* out=_doutput.dataFirst();
             for (i=0; i<n; ++i,++in,++out) 
-              if (!NumTraits<double>::isnan(*in))
+              if (!NumTraits<double>::isNan(*in))
               {
-                if(!NumTraits<double>::isnan(*out)) *out  += *in;
+                if(!NumTraits<double>::isNan(*out)) *out  += *in;
                 else *out=*in ;
               }
Index: XIOS/dev/branch_openmp/src/functor/average.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/functor/average.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/functor/average.cpp	(revision 1482)
@@ -43,5 +43,5 @@
             int* nc=nbcalls.dataFirst() ;
             for (i=0; i<n; ++i,++nc,++in) 
-              if (!NumTraits<double>::isnan(*in)) (*nc) ++;
+              if (!NumTraits<double>::isNan(*in)) (*nc) ++;
           }
         }
@@ -55,5 +55,5 @@
             int* nc=nbcalls.dataFirst() ;
             for (i=0; i<n; ++i,++in,++out,++nc) 
-              if (!NumTraits<double>::isnan(*in)) 
+              if (!NumTraits<double>::isNan(*in)) 
               {
                 if (*nc != 0) (*out)  += *in;
Index: XIOS/dev/branch_openmp/src/functor/maximum.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/functor/maximum.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/functor/maximum.cpp	(revision 1482)
@@ -34,7 +34,7 @@
            { 
              for (; it1 != end1; it1++, it++) 
-               if (!NumTraits<double>::isnan(*it1))
+               if (!NumTraits<double>::isNan(*it1))
                {
-                 if (!NumTraits<double>::isnan(*it)) *it = std::max(*it1, *it);
+                 if (!NumTraits<double>::isNan(*it)) *it = std::max(*it1, *it);
                  else *it=*it1 ;  
                }
Index: XIOS/dev/branch_openmp/src/functor/minimum.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/functor/minimum.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/functor/minimum.cpp	(revision 1482)
@@ -36,7 +36,7 @@
           { 
             for (; it1 != end1; it1++, it++) 
-              if (!NumTraits<double>::isnan(*it1))
+              if (!NumTraits<double>::isNan(*it1))
               {
-                if (!NumTraits<double>::isnan(*it)) *it = std::min(*it1, *it);
+                if (!NumTraits<double>::isNan(*it)) *it = std::min(*it1, *it);
                 else *it=*it1 ;
               }
Index: XIOS/dev/branch_openmp/src/interface/c/icdate.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icdate.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/interface/c/icdate.cpp	(revision 1482)
@@ -70,7 +70,6 @@
                                    date_c.year, date_c.month, date_c.day,
                                    date_c.hour, date_c.minute, date_c.second);
-    xios::CDuration dur = { dur_c.year, dur_c.month, dur_c.day,
-                            dur_c.hour, dur_c.minute, dur_c.second,
-                            dur_c.timestep };
+
+    xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     xios::CDate res = date + dur;
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
@@ -82,7 +81,5 @@
                                    date_c.year, date_c.month, date_c.day,
                                    date_c.hour, date_c.minute, date_c.second);
-    xios::CDuration dur = { dur_c.year, dur_c.month, dur_c.day,
-                            dur_c.hour, dur_c.minute, dur_c.second,
-                            dur_c.timestep };
+    xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     xios::CDate res = date - dur;
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
Index: XIOS/dev/branch_openmp/src/interface/c/icduration.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icduration.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/interface/c/icduration.cpp	(revision 1482)
@@ -7,8 +7,5 @@
   void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)
   {
-    xios::CDuration dur = { dur_c.year, dur_c.month, dur_c.day,
-                            dur_c.hour, dur_c.minute, dur_c.second,
-                            dur_c.timestep };
-
+    xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     if (!string_copy(dur.toString(), str, str_size))
       ERROR("void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)", << "Input string is too short");
@@ -28,10 +25,6 @@
   cxios_duration cxios_duration_add(cxios_duration dur1_c, cxios_duration dur2_c)
   {
-    xios::CDuration dur1 = { dur1_c.year, dur1_c.month, dur1_c.day,
-                             dur1_c.hour, dur1_c.minute, dur1_c.second,
-                             dur1_c.timestep };
-    xios::CDuration dur2 = { dur2_c.year, dur2_c.month, dur2_c.day,
-                             dur2_c.hour, dur2_c.minute, dur2_c.second,
-                             dur2_c.timestep };
+    xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
+    xios::CDuration dur2( dur2_c.year, dur2_c.month, dur2_c.day, dur2_c.hour, dur2_c.minute, dur2_c.second, dur2_c.timestep );
     xios::CDuration res = dur1 + dur2;
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
@@ -40,10 +33,6 @@
   cxios_duration cxios_duration_sub(cxios_duration dur1_c, cxios_duration dur2_c)
   {
-    xios::CDuration dur1 = { dur1_c.year, dur1_c.month, dur1_c.day,
-                             dur1_c.hour, dur1_c.minute, dur1_c.second,
-                             dur1_c.timestep };
-    xios::CDuration dur2 = { dur2_c.year, dur2_c.month, dur2_c.day,
-                             dur2_c.hour, dur2_c.minute, dur2_c.second,
-                             dur2_c.timestep };
+    xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
+    xios::CDuration dur2( dur2_c.year, dur2_c.month, dur2_c.day, dur2_c.hour, dur2_c.minute, dur2_c.second, dur2_c.timestep );
     xios::CDuration res = dur1 - dur2;
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
@@ -52,7 +41,5 @@
   cxios_duration cxios_duration_mult(double val, cxios_duration dur_c)
   {
-    xios::CDuration dur = { dur_c.year, dur_c.month, dur_c.day,
-                            dur_c.hour, dur_c.minute, dur_c.second,
-                            dur_c.timestep };
+    xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     xios::CDuration res = val * dur;
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
@@ -61,7 +48,5 @@
   cxios_duration cxios_duration_neg(cxios_duration dur_c)
   {
-    xios::CDuration dur = { dur_c.year, dur_c.month, dur_c.day,
-                            dur_c.hour, dur_c.minute, dur_c.second,
-                            dur_c.timestep };
+    xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     xios::CDuration res = -dur;
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
@@ -70,10 +55,6 @@
   bool cxios_duration_eq(cxios_duration dur1_c, cxios_duration dur2_c)
   {
-    xios::CDuration dur1 = { dur1_c.year, dur1_c.month, dur1_c.day,
-                             dur1_c.hour, dur1_c.minute, dur1_c.second,
-                             dur1_c.timestep };
-    xios::CDuration dur2 = { dur2_c.year, dur2_c.month, dur2_c.day,
-                             dur2_c.hour, dur2_c.minute, dur2_c.second,
-                             dur2_c.timestep };
+    xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
+    xios::CDuration dur2( dur2_c.year, dur2_c.month, dur2_c.day, dur2_c.hour, dur2_c.minute, dur2_c.second, dur2_c.timestep );
     return (dur1 == dur2);
   }
@@ -81,10 +62,6 @@
   bool cxios_duration_neq(cxios_duration dur1_c, cxios_duration dur2_c)
   {
-    xios::CDuration dur1 = { dur1_c.year, dur1_c.month, dur1_c.day,
-                             dur1_c.hour, dur1_c.minute, dur1_c.second,
-                             dur1_c.timestep };
-    xios::CDuration dur2 = { dur2_c.year, dur2_c.month, dur2_c.day,
-                             dur2_c.hour, dur2_c.minute, dur2_c.second,
-                             dur2_c.timestep };
+    xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
+    xios::CDuration dur2( dur2_c.year, dur2_c.month, dur2_c.day, dur2_c.hour, dur2_c.minute, dur2_c.second, dur2_c.timestep );
     return (dur1 != dur2);
   }
Index: XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp	(revision 1482)
@@ -189,5 +189,6 @@
 */
 
-    if (!SuperClassWriter::isRectilinear(fieldId))
+    //if (!SuperClassWriter::isRectilinear(fieldId))
+    if (true)
     {
       for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it)
@@ -471,5 +472,6 @@
     itMapNj = itMapNi; ++itMapNj;
 
-    if (this->isRectilinear(fieldId) || this->isCurvilinear(fieldId))
+    if (CDomain::type_attr::rectilinear == domain->type || CDomain::type_attr::curvilinear == domain->type ||
+        this->isRectilinear(fieldId) || this->isCurvilinear(fieldId))
     {
       if (!domain->nj_glo.isEmpty() && (domain->nj_glo != itMapNj->second))
@@ -495,5 +497,5 @@
       domain->ni_glo.setValue(itMapNi->second);
     }
-    else if (this->isUnstructured(fieldId))
+    else if (CDomain::type_attr::unstructured == domain->type|| this->isUnstructured(fieldId))
     {
       domain->nj_glo.setValue(1);
Index: XIOS/dev/branch_openmp/src/node/field.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/field.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/node/field.cpp	(revision 1482)
@@ -224,5 +224,9 @@
     CArray<double,1> recv_data_tmp(recvDataSrv.numElements());    
     const CDate& currDate = context->getCalendar()->getCurrentDate();
-    const CDate opeDate   = (last_operation_srv + context->getCalendar()->getTimeStep()) +freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep();
+    CDuration offsetAllButMonth (freq_offset.getValue().year, 0 , freq_offset.getValue().day,
+                                   freq_offset.getValue().hour, freq_offset.getValue().minute,
+                                   freq_offset.getValue().second, freq_offset.getValue().timestep);
+    const CDate opeDate   = (last_operation_srv - offsetAllButMonth + context->getCalendar()->getTimeStep())
+                              + freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep() + offsetAllButMonth;
 
     if (opeDate <= currDate)
@@ -251,5 +255,9 @@
 
     const CDate& currDate = context->getCalendar()->getCurrentDate();
-    const CDate opeDate = (last_operation_srv + context->getCalendar()->getTimeStep()) + freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep();
+    CDuration offsetAllButMonth (freq_offset.getValue().year, 0 , freq_offset.getValue().day,
+                                   freq_offset.getValue().hour, freq_offset.getValue().minute,
+                                   freq_offset.getValue().second, freq_offset.getValue().timestep);
+    const CDate opeDate   = (last_operation_srv - offsetAllButMonth + context->getCalendar()->getTimeStep())
+                              + freq_op + freq_operation_srv - freq_op - context->getCalendar()->getTimeStep() + offsetAllButMonth;
     const CDate writeDate = last_Write_srv + freq_write_srv;
 
Index: XIOS/dev/branch_openmp/src/parse_expr/operator_expr.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/parse_expr/operator_expr.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/parse_expr/operator_expr.hpp	(revision 1482)
@@ -7,4 +7,5 @@
 #include "exception.hpp"
 #include "array_new.hpp"
+#include "utils.hpp"
 
 using namespace std;
@@ -253,10 +254,27 @@
     static inline double div_ss(double x, double y)   { return x / y; }
     static inline double pow_ss(double x, double y)   { return std::pow(x,y); }
-    static inline double eq_ss(double x, double y)    { return x == y; }
+    static inline double eq_ss(double x, double y) // specific check for NaN
+    {
+       bool xNan=NumTraits<double>::isNan(x) ;
+       bool yNan=NumTraits<double>::isNan(y) ;
+       if (xNan && yNan) return true ;
+       else if (xNan) return false ;
+       else if (yNan) return false ;
+       else return x == y;
+    }
+
     static inline double lt_ss(double x, double y)    { return x < y; }
     static inline double gt_ss(double x, double y)    { return x > y; }
     static inline double le_ss(double x, double y)    { return x <= y; }
     static inline double ge_ss(double x, double y)    { return x >= y; }
-    static inline double ne_ss(double x, double y)    { return x != y; }
+    static inline double ne_ss(double x, double y) // specific check for NaN
+    {
+       bool xNan=NumTraits<double>::isNan(x) ;
+       bool yNan=NumTraits<double>::isNan(y) ;
+       if (xNan && yNan) return false ;
+       else if (xNan) return true ;
+       else if (yNan) return true ;      
+       else return x != y;
+    }
 
     static inline CArray<double,1> neg_f(const CArray<double,1>& x)   { return Array<double,1>(-x); }
@@ -286,10 +304,33 @@
     static inline CArray<double,1> div_fs(const CArray<double,1>& x, double y)   { return Array<double,1>(x / y); }
     static inline CArray<double,1> pow_fs(const CArray<double,1>& x, double y)   { return Array<double,1>(pow(x,y)); }
-    static inline CArray<double,1> eq_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x == y); }
+    static inline CArray<double,1> eq_fs(const CArray<double,1>& x, double y) // specific check for NaN
+    {
+      if (NumTraits<double>::isNan(y))
+      {
+        CArray<double,1> ret(x.numElements()) ;
+        Array<double,1>::const_iterator itx=x.begin(),itxe=x.end();
+        Array<double,1>::iterator itret=ret.begin() ;
+        for(;itx!=itxe;++itx,++itret) *itret=NumTraits<double>::isNan(*itx) ;
+        return ret ;
+      }
+      else return Array<double,1>(x == y); 
+    }
+
     static inline CArray<double,1> lt_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x < y); }
     static inline CArray<double,1> gt_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x > y); }
     static inline CArray<double,1> le_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x <= y); }
     static inline CArray<double,1> ge_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x >= y); }
-    static inline CArray<double,1> ne_fs(const CArray<double,1>& x, double y)    { return Array<double,1>(x != y); }
+    static  inline CArray<double,1> ne_fs(const CArray<double,1>& x, double y) // specific check for NaN
+    {
+      if (NumTraits<double>::isNan(y))
+      {
+        CArray<double,1> ret(x.numElements()) ;
+        Array<double,1>::const_iterator itx=x.begin(),itxe=x.end();
+        Array<double,1>::iterator itret=ret.begin() ;
+        for(;itx!=itxe;++itx,++itret) *itret = !NumTraits<double>::isNan(*itx) ;
+        return ret ;
+      }
+      else return Array<double,1>(x != y); 
+    }
 
     static inline CArray<double,1> add_sf(double x, const CArray<double,1>& y)   { return Array<double,1>(x + y); }
@@ -297,10 +338,34 @@
     static inline CArray<double,1> mult_sf(double x, const CArray<double,1>& y)  { return Array<double,1>(x * y); }
     static inline CArray<double,1> div_sf(double x, const CArray<double,1>& y)   { return Array<double,1>(x / y); }
-    static inline CArray<double,1> eq_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x == y); }
+    static inline CArray<double,1> eq_sf(double x, const CArray<double,1>& y) // specific check for NaN
+    {
+      if (NumTraits<double>::isNan(x))
+      {
+        CArray<double,1> ret(y.numElements()) ;
+        Array<double,1>::const_iterator ity=y.begin(),itye=y.end();
+        Array<double,1>::iterator itret=ret.begin() ;
+        for(;ity!=itye;++ity,++itret) *itret=NumTraits<double>::isNan(*ity) ;
+        return ret ;
+      }
+      else return Array<double,1>(x == y); 
+    }
+
     static inline CArray<double,1> lt_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x < y); }
     static inline CArray<double,1> gt_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x > y); }
     static inline CArray<double,1> le_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x <= y); }
     static inline CArray<double,1> ge_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x >= y); }
-    static inline CArray<double,1> ne_sf(double x, const CArray<double,1>& y)    { return Array<double,1>(x != y); }
+    static inline CArray<double,1> ne_sf(double x, const CArray<double,1>& y) // specific check for NaN
+    {
+      if (NumTraits<double>::isNan(x))
+      {
+        CArray<double,1> ret(y.numElements()) ;
+        Array<double,1>::const_iterator ity=y.begin(),itye=y.end();
+        Array<double,1>::iterator itret=ret.begin() ;
+        for(;ity!=itye;++ity,++itret) *itret=!NumTraits<double>::isNan(*ity) ;
+        return ret ;
+      }
+      else return Array<double,1>(x != y);
+    }
+
 
 
Index: XIOS/dev/branch_openmp/src/transformation/Functions/average_reduction.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/Functions/average_reduction.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/Functions/average_reduction.cpp	(revision 1482)
@@ -47,5 +47,5 @@
       currentlocalIndex = localIndex[idx].first;
       currentWeight     = localIndex[idx].second;
-      if (!NumTraits<double>::isnan(*(dataInput + idx)))
+      if (!NumTraits<double>::isNan(*(dataInput + idx)))
       {
         if (flagInitial[currentlocalIndex])
Index: XIOS/dev/branch_openmp/src/transformation/Functions/max_reduction.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/Functions/max_reduction.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/Functions/max_reduction.cpp	(revision 1482)
@@ -41,5 +41,5 @@
     {
       currentlocalIndex = localIndex[idx].first;      
-      if (!NumTraits<double>::isnan(*(dataInput + idx)))
+      if (!NumTraits<double>::isNan(*(dataInput + idx)))
       {
         if (flagInitial[currentlocalIndex])
Index: XIOS/dev/branch_openmp/src/transformation/Functions/min_reduction.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/Functions/min_reduction.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/Functions/min_reduction.cpp	(revision 1482)
@@ -41,5 +41,5 @@
     {
       currentlocalIndex = localIndex[idx].first;
-      if (!NumTraits<double>::isnan(*(dataInput + idx)))
+      if (!NumTraits<double>::isNan(*(dataInput + idx)))
       {
         if (flagInitial[currentlocalIndex])
Index: XIOS/dev/branch_openmp/src/transformation/Functions/sum_reduction.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/Functions/sum_reduction.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/Functions/sum_reduction.cpp	(revision 1482)
@@ -43,5 +43,5 @@
     {
       currentlocalIndex = localIndex[idx].first;   
-      if (!NumTraits<double>::isnan(*(dataInput + idx)))
+      if (!NumTraits<double>::isNan(*(dataInput + idx)))
       {   
         if (flagInitial[currentlocalIndex])
Index: XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.cpp	(revision 1482)
@@ -916,30 +916,29 @@
        renormalizationFactor=1 ;
      }
+     
+    if (firstPass)
+    {
+      allMissing.resize(dataOut.numElements()) ;
+      allMissing=true ;
+    }
 
     for (int idx = 0; idx < nbLocalIndex; ++idx)
     {
-      if (NumTraits<double>::isnan(*(dataInput + idx)))
+      if (NumTraits<double>::isNan(*(dataInput + idx)))
       {
-        flagInitial[localIndex[idx].first] = false;
+        allMissing(localIndex[idx].first) = allMissing(localIndex[idx].first) && true;
         if (renormalize) renormalizationFactor(localIndex[idx].first)-=localIndex[idx].second ;
       }
       else
       {
-        dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second;
-        flagInitial[localIndex[idx].first] = true; // Reset flag to indicate not all data source are nan
+        dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second;   
       }
     }
 
-    // If all data source are nan then data destination must be nan
+  }
+  else
+  {
     for (int idx = 0; idx < nbLocalIndex; ++idx)
     {
-      if (!flagInitial[localIndex[idx].first])
-        dataOut(localIndex[idx].first) = defaultValue;
-    }
-  }
-  else
-  {
-    for (int idx = 0; idx < nbLocalIndex; ++idx)
-    {
       dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second;
     }
@@ -949,10 +948,21 @@
 void CDomainAlgorithmInterpolate::updateData(CArray<double,1>& dataOut)
 {
-  if (detectMissingValue && renormalize)
-  {
-    if (renormalizationFactor.numElements()>0) dataOut/=renormalizationFactor ; // In some case, process doesn't received any data for interpolation (mask)
-                                                                                // so renormalizationFactor is not initialized
-  }
-}
-
-}
+  if (detectMissingValue)
+  {
+    double defaultValue = std::numeric_limits<double>::quiet_NaN();
+    size_t nbIndex=dataOut.numElements() ; 
+
+    for (int idx = 0; idx < nbIndex; ++idx)
+    {
+      if (allMissing(idx)) dataOut(idx) = defaultValue; // If all data source are nan then data destination must be nan
+    }
+    
+    if (renormalize)
+    {
+      if (renormalizationFactor.numElements()>0) dataOut/=renormalizationFactor ; // In some case, process doesn't received any data for interpolation (mask)
+                                                                                 // so renormalizationFactor is not initialized
+    }    
+  }
+}
+
+}
Index: XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/domain_algorithm_interpolate.hpp	(revision 1482)
@@ -55,4 +55,5 @@
 private:
   CArray<double,1> renormalizationFactor ;
+  CArray<bool,1> allMissing ;
   bool detectMissingValue ;
   bool renormalize ;
Index: XIOS/dev/branch_openmp/src/transformation/generic_algorithm_transformation.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/transformation/generic_algorithm_transformation.cpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/transformation/generic_algorithm_transformation.cpp	(revision 1482)
@@ -37,24 +37,17 @@
   int nbLocalIndex = localIndex.size();   
   double defaultValue = std::numeric_limits<double>::quiet_NaN();
+  
   if (ignoreMissingValue)
   {
+    if (firstPass) dataOut=defaultValue ;
+ 
     for (int idx = 0; idx < nbLocalIndex; ++idx)
     {
-      if (NumTraits<double>::isnan(*(dataInput + idx)))
-      {
-        flagInitial[localIndex[idx].first] = false;
-      }
-      else
-      {
-        dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second;
-        flagInitial[localIndex[idx].first] = true; // Reset flag to indicate not all data source are nan
-      }
-    }
-
-    // If all data source are nan then data destination must be nan
-    for (int idx = 0; idx < nbLocalIndex; ++idx)
-    {
-      if (!flagInitial[localIndex[idx].first])
-        dataOut(localIndex[idx].first) = defaultValue;
+      if (! NumTraits<double>::isNan(*(dataInput + idx)))
+      {
+        if (flagInitial[localIndex[idx].first]) dataOut(localIndex[idx].first) = *(dataInput + idx) * localIndex[idx].second;
+        else dataOut(localIndex[idx].first) += *(dataInput + idx) * localIndex[idx].second;
+        flagInitial[localIndex[idx].first] = false; // Reset flag to indicate not all data source are nan
+      }
     }
   }
Index: XIOS/dev/branch_openmp/src/type/type.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/type/type.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/type/type.hpp	(revision 1482)
@@ -47,5 +47,5 @@
 
     void allocate(void) ;
-    void checkEmpty(void) const;
+    virtual void checkEmpty(void) const {return _checkEmpty();};
 
     T* ptrValue ;
@@ -63,4 +63,5 @@
     void _reset(void) ;
     bool _isEmpty() const ;
+    void _checkEmpty(void) const;
     size_t _size(void) const ;
 
Index: XIOS/dev/branch_openmp/src/type/type_impl.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/type/type_impl.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/type/type_impl.hpp	(revision 1482)
@@ -87,6 +87,6 @@
   T& CType<T>::get(void)
   {
-    checkEmpty();
-   return *ptrValue ;
+    this->checkEmpty();
+    return *ptrValue ;
   }
 
@@ -94,5 +94,5 @@
   const T& CType<T>::get(void) const
   {
-    checkEmpty();
+    this->checkEmpty();
     return *ptrValue ;
   }
@@ -122,6 +122,6 @@
    CType<T>::operator T&()
    {
-    checkEmpty();
-    return *ptrValue ;
+     this->checkEmpty();
+     return *ptrValue ;
    }
 
@@ -129,6 +129,6 @@
    CType<T>::operator const T&() const
    {
-    checkEmpty();
-    return *ptrValue ;
+     this->checkEmpty();
+     return *ptrValue ;
    }
 
@@ -136,5 +136,5 @@
    CType<T>* CType<T>::_clone(void) const
    {
-     checkEmpty();
+     this->checkEmpty();
      return new CType(*this) ;
    }
@@ -165,5 +165,5 @@
   {
     ostringstream oss;
-    checkEmpty();
+    this->checkEmpty();
     oss<<*ptrValue ;
     return oss.str() ;
@@ -173,5 +173,5 @@
   bool CType<T>::_toBuffer(CBufferOut& buffer) const
   {
-    checkEmpty();
+    this->checkEmpty();
     return buffer.put(*ptrValue) ;
   }
@@ -206,5 +206,5 @@
 
   template <typename T>
-  void CType<T>::checkEmpty(void) const
+  void CType<T>::_checkEmpty(void) const
   {
     if (empty) ERROR("template <typename T> void CType<T>::checkEmpty(void) const", << "Data is not initialized") ;
Index: XIOS/dev/branch_openmp/src/utils.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/utils.hpp	(revision 1481)
+++ XIOS/dev/branch_openmp/src/utils.hpp	(revision 1482)
@@ -257,5 +257,5 @@
     return 1e-12;
   }
-  static inline bool isnan(const Scalar& v) {
+  static inline bool isNan(const Scalar& v) {
     return (v != v);
   }
Index: XIOS/dev/branch_openmp/src/xios_server.f90
===================================================================
--- XIOS/dev/branch_openmp/src/xios_server.f90	(revision 1481)
+++ XIOS/dev/branch_openmp/src/xios_server.f90	(revision 1482)
@@ -4,6 +4,8 @@
   INCLUDE "mpif.h"
   INTEGER :: ierr
-  
+
+    
     CALL xios_init_server
+    
 
   END PROGRAM server_main
