Nombre de variables trop grand dans un fichier d'historique, avec XIOS

De LMDZPedia
Aller à : navigation, rechercher


Symptôme :

terminate called after throwing an instance of 'xios::CNetCdfException'
 what():  Error when calling function nc_enddef(ncId)
NetCDF: HDF error
Unable to end define mode of this file, given its id: 65536
Program received signal SIGABRT: Process abort signal.

Ce problème peut se poser avec XIOS quand on augmente par exemple le niveau de sortie d'un fichier d'historique.

C'est un problème de netcdf4 + HDF5 en mode écriture parallèle. Pour une raison obscure, lorsqu'on tente de déclarer trop de champs avec trop de méta-données, une erreur se produit au moment de nc_enddef. C'est un problème de longue date qui combine le nombre de champs, associé à leurs tailles et au volume de méta-données, sans qu'il y ait pour autant une règle claire.

Les work-arounds :

  • mettre moins de variables par fichier : baisser le niveau ou regrouper les variables par niveau dans un même fichier
  • utiliser la version séquentielle qui fonctionne on ne sait pas trop pourquoi : avoir un seul processus ou un seul serveur XIOS ou utiliser les deux niveaux de serveur qui font des écritures séquentielles au final.
  • utiliser pnetcdf (format classique) au lieu de netcdf4+HDF5 avec XIOS.

Je sais, c'est un peu lourd, mais on n'a pas vraiment le choix que de s'adapter à cette contrainte pour le moment, qui sera peut-être levée un jour.