Index: XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml
===================================================================
--- XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml	(revision 1482)
+++ XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml	(revision 1491)
@@ -12,5 +12,5 @@
       <field field_ref="field_A_atm" />
     </file>
-    <file id="output_atmosphere_zoom" name="output_atmosphere_zoom">
+    <file id="output_atmosphere_zoom" name="output_atmosphere_zoom" >
       <field field_ref="field_A_atm_zoom" name="field_A_atm_zoom" />
     </file>
Index: XIOS/dev/branch_openmp/src/config/file_attribute.conf
===================================================================
--- XIOS/dev/branch_openmp/src/config/file_attribute.conf	(revision 1482)
+++ XIOS/dev/branch_openmp/src/config/file_attribute.conf	(revision 1491)
@@ -21,4 +21,5 @@
 DECLARE_ATTRIBUTE(bool,      append)
 DECLARE_ENUM2(mode,          read, write)
+DECLARE_ATTRIBUTE(bool,      read_metadata_par)
 DECLARE_ENUM7(time_counter,  centered, instant, record, exclusive, centered_exclusive, instant_exclusive, none)
 DECLARE_ATTRIBUTE(StdString, time_counter_name)
Index: XIOS/dev/branch_openmp/src/io/inetcdf4.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/io/inetcdf4.cpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/io/inetcdf4.cpp	(revision 1491)
@@ -7,5 +7,7 @@
 namespace xios
 {
-  CINetCDF4::CINetCDF4(const StdString& filename, const ep_lib::MPI_Comm* comm /*= NULL*/, bool multifile /*= true*/, const StdString& timeCounterName /*= "time_counter"*/)
+  //CINetCDF4::CINetCDF4(const StdString& filename, const ep_lib::MPI_Comm* comm /*= NULL*/, bool multifile /*= true*/, const StdString& timeCounterName /*= "time_counter"*/)
+  CINetCDF4::CINetCDF4(const StdString& filename, const ep_lib::MPI_Comm* comm /*= NULL*/, bool multifile /*= true*/,
+                       bool readMetaDataPar /*= false*/, const StdString& timeCounterName /*= "time_counter"*/)
   {
     // Don't use parallel mode if there is only one process
@@ -17,5 +19,6 @@
         comm = NULL;
     }
-    mpi = comm && !multifile;
+    //mpi = comm && !multifile;
+    mpi = comm && !multifile && readMetaDataPar;
     ep_lib::MPI_Info info_null;
 
Index: XIOS/dev/branch_openmp/src/io/inetcdf4.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/io/inetcdf4.hpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/io/inetcdf4.hpp	(revision 1491)
@@ -23,5 +23,6 @@
       /// Constructors ///
       CINetCDF4(const StdString& filename, const ep_lib::MPI_Comm* comm = NULL, bool multifile = true,
-                const StdString& timeCounterName = "time_counter");
+                bool readMetaDataPar = false, const StdString& timeCounterName = "time_counter");
+                //const StdString& timeCounterName = "time_counter");
       CINetCDF4(const CINetCDF4& inetcdf4);       // Not implemented.
       CINetCDF4(const CINetCDF4* const inetcdf4); // Not implemented.
Index: XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp	(revision 1491)
@@ -10,10 +10,14 @@
 namespace xios
 {
-  CNc4DataInput::CNc4DataInput(const StdString& filename, ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/, const StdString& timeCounterName /*= "time_counter"*/)
+  //CNc4DataInput::CNc4DataInput(const StdString& filename, ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/, const StdString& timeCounterName /*= "time_counter"*/)
+  CNc4DataInput::CNc4DataInput(const StdString& filename, ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/,
+                               bool readMetaDataPar /*= false*/, bool ugridConvention /*= false*/, const StdString& timeCounterName /*= "time_counter"*/)
     : SuperClass()
-    , SuperClassWriter(filename, &comm_file, multifile, timeCounterName)
+    , SuperClassWriter(filename, &comm_file, multifile, readMetaDataPar, timeCounterName)
+    //, SuperClassWriter(filename, &comm_file, multifile, timeCounterName)
     , comm_file(comm_file)
     , filename(filename)
     , isCollective(isCollective)
+    , ugridConvention(ugridConvention)
     , readMetaDataDomains_(), readValueDomains_()
     , readMetaDataAxis_(), readValueAxis_()
@@ -422,5 +426,13 @@
       StdString boundsLonName = this->getBoundsId(lonName);
 
-      int nbVertex = this->getNbVertex(fieldId);
+      if (ugridConvention && domain->nvertex.isEmpty())
+      {
+        ERROR("void CNc4DataInput::readDomainAttributeValueFromFile(...)",
+          << " Attribute nvertex must be specified for domain " << domain->getDomainOutputName()
+          << " read from UGRID file " << this->filename << " ."<< std::endl);
+      }
+//      int nbVertex = this->getNbVertex(fieldId);
+      int nbVertex = (ugridConvention) ? domain->nvertex : this->getNbVertex(fieldId);
+      
       if (!domain->nvertex.isEmpty() && (domain->nvertex != nbVertex))
       {
Index: XIOS/dev/branch_openmp/src/io/nc4_data_input.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/io/nc4_data_input.hpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/io/nc4_data_input.hpp	(revision 1491)
@@ -25,5 +25,6 @@
     /// Constructors ///
     CNc4DataInput(const StdString& filename, ep_lib::MPI_Comm comm_file, bool multifile, bool isCollective = true,
-                  const StdString& timeCounterName = "time_counter");
+                  bool readMetaDataPar = false, bool ugridConvention = false, const StdString& timeCounterName = "time_counter");
+                  //const StdString& timeCounterName = "time_counter");
     CNc4DataInput(const CNc4DataInput& dataInput);       // Not implemented.
     CNc4DataInput(const CNc4DataInput* const dataInput); // Not implemented.
@@ -74,4 +75,5 @@
     const StdString filename;
     bool isCollective;
+    bool ugridConvention;
   }; // class CNc4DataInput
 
Index: XIOS/dev/branch_openmp/src/node/context.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/context.cpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/node/context.cpp	(revision 1491)
@@ -891,4 +891,10 @@
             if (allFiles[i]->enabled.getValue()) // Si l'attribut 'enabled' est fixÃ© Ã  vrai.
             {
+              if (allFiles[i]->output_freq.isEmpty())
+              {
+                 ERROR("CContext::findEnabledFiles()",
+                     << "Mandatory attribute output_freq must be defined for file \""<<allFiles[i]->getFileOutputName()
+                     <<" \".")
+              }
               if ((initDate + allFiles[i]->output_freq.getValue()) < (initDate + this->getCalendar()->getTimeStep()))
               {
@@ -903,4 +909,10 @@
          else
          {
+           if (allFiles[i]->output_freq.isEmpty())
+           {
+              ERROR("CContext::findEnabledFiles()",
+                  << "Mandatory attribute output_freq must be defined for file \""<<allFiles[i]->getFileOutputName()
+                  <<" \".")
+           }
            if ( (initDate + allFiles[i]->output_freq.getValue()) < (initDate + this->getCalendar()->getTimeStep()))
            {
Index: XIOS/dev/branch_openmp/src/node/domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/domain.cpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/node/domain.cpp	(revision 1491)
@@ -1510,6 +1510,7 @@
          ERROR("CDomain::checkBounds(void)",
                << "Since 'bounds_lat_2d' is defined, 'latvalue_2d' must be defined too." << std::endl);
-
-       hasBounds = true;
+      
+       // In case of reading UGRID bounds values are not required
+       hasBounds = (!bounds_lat_1d.isEmpty() || !bounds_lat_2d.isEmpty() );
      }
      else if (hasBoundValues)
Index: XIOS/dev/branch_openmp/src/node/file.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/file.cpp	(revision 1482)
+++ XIOS/dev/branch_openmp/src/node/file.cpp	(revision 1491)
@@ -657,15 +657,17 @@
 
       bool isCollective = par_access.isEmpty() || par_access == par_access_attr::collective;
-      #ifdef _usingEP
-        if (isOpen) data_out->closeFile();
-        if (time_counter_name.isEmpty()) data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
-        else data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, time_counter_name));
-        isOpen = true;
-      #elif _usingMPI
-        if (isOpen) data_out->closeFile();
-        if (time_counter_name.isEmpty()) data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
-        else data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, time_counter_name));
-        isOpen = true;
-      #endif
+      bool  readMetaDataPar = true;
+      if (!context->hasServer) readMetaDataPar = (read_metadata_par.isEmpty()) ? false : read_metadata_par;
+      
+      if (isOpen) data_out->closeFile();
+      //if (time_counter_name.isEmpty()) data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
+      //else data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, time_counter_name));
+      bool ugridConvention = !convention.isEmpty() ? (convention == convention_attr::UGRID) : false;
+      if (time_counter_name.isEmpty())
+        data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention));
+      else
+        data_in = boost::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention, time_counter_name));
+
+      isOpen = true;
     }
   }
Index: XIOS/dev/branch_openmp/src/test/test_remap_omp.f90
===================================================================
--- XIOS/dev/branch_openmp/src/test/test_remap_omp.f90	(revision 1482)
+++ XIOS/dev/branch_openmp/src/test/test_remap_omp.f90	(revision 1491)
@@ -144,5 +144,5 @@
   ENDDO
 
-  print*, "ID = ", rank, "src_ni = ", "src_nvertex = ", src_nvertex, "src_ni_glo = ", src_ni_glo
+  print*, "ID = ", rank, "src_ni = ", src_ni, "src_nvertex = ", src_nvertex, "src_ni_glo = ", src_ni_glo
 
   ierr=NF90_OPEN(dst_file, NF90_NOWRITE, ncid)
@@ -228,7 +228,4 @@
   
   DO ts=1,1
-    CALL xios_recv_field("src_field_regular", tmp_field_0)
-    !CALL xios_recv_field("src_field_curvilinear", tmp_field_1)
-    !CALL xios_recv_field("src_field_unstructured", tmp_field_2)
     CALL xios_recv_field("src_field_regular", tmp_field_0)
     !CALL xios_recv_field("src_field_curvilinear", tmp_field_1)
