Index: /XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml
===================================================================
--- /XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml (revision 1490)
+++ /XIOS/dev/branch_openmp/inputs/COMPLETE/context_atmosphere.xml (revision 1491)
@@ -12,5 +12,5 @@
-
+
Index: /XIOS/dev/branch_openmp/src/config/file_attribute.conf
===================================================================
--- /XIOS/dev/branch_openmp/src/config/file_attribute.conf (revision 1490)
+++ /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 1490)
+++ /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 1490)
+++ /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 1490)
+++ /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 1490)
+++ /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 1490)
+++ /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 \""<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 \""<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 1490)
+++ /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 1490)
+++ /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(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
- else data_in = boost::shared_ptr(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(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
- else data_in = boost::shared_ptr(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(new CNc4DataInput(oss.str(), readComm, multifile, isCollective));
+ //else data_in = boost::shared_ptr(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(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention));
+ else
+ data_in = boost::shared_ptr(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 1490)
+++ /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)