Nombre de variables trop grand dans un fichier d'historique, avec XIOS
De LMDZPedia
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.