Introduction Caract´eristiques Outils Exemple R´ef´erences

Introduction `aCGNS

Fortement inspir´eedu cours de Marc Poinot

Anne Cadiou

Laboratoire de M´ecaniquedes Fluides et d’Acoustique

Ateliers et s´eminaires pour l’informatique et le calcul scientifique PMCS2I - LMFA Vendredi 7 juin 2019 Introduction Caract´eristiques Outils Exemple R´ef´erences

CGNS ? CGNS : CFD General Notation System CFD : Computational Fluid Dynamics

Port´ee

• Cible les donn´eesde type m´ecanique des fluides compressibles (Navier-Stokes), • Extensible a priori `ad’autres domaines de la physique, par ajout de d´efinitionde donn´eeset de convention de stockage.

Motivation

• Fournir un standard g´en´eral,portable, auto-descriptif et extensible pour le stockage et l’analyse de donn´ees • Favoriser le partage et l’analyse de donn´eesentre sites, applications et architectures syst`emes • Eliminer´ le surcoˆutli´e`ala conversion de types de fichiers et la duplication des donn´eesen diff´erentsformats • Fournir des logiciels libre et ouverts associ´es`ace standard (GNU Lesser General Public Licence)

... standard conforme aux principes FAIR ? (Findable Accessible Interoperable Retrievable) Introduction Caract´eristiques Outils Exemple R´ef´erences

Historique

Motivation

• Prend naissance au milieu des ann´ees1990 au sein d’un consortium regroupant la NASA, Boeing et McDonnell Douglas `apartir d’un besoin de standard pour faciliter des analyses collaboratives entre les diff´erentesorganisations • Constat : les formats existants sont incomplets, difficiles `apartager entre diff´erentesplateformes, peu auto-descriptifs (e.g. PLOT3D)

Structuration

• Premiers d´eveloppements support´espar un programme AST (Advanced Subsonic Technology) de la NASA • D´eveloppements initiaux `apartir du Common File Format de McDonnell Douglas • CGNS v1.0 : mai 1998 Introduction Caract´eristiques Outils Exemple R´ef´erences

Evolution´ du projet

Naissance du consorsium

• Fin du financement AST en 1999 • Cr´eationd’un comit´ede pilotage • Regroupement de membres du monde adac´emiqueet industriel autour du projet • Le comit´ede pilotage devient officiellement un sous-comit´edu AIAA Committee on Standards, 2000

Publication du standard

• Tentative par Boeing pour faire de CGNS un standard ISO (1999-2002). Echec´ par manque de moyens. • A` l’inverse, le standard ISO AP209 a int´egr´eCGNS en 2008. Introduction Caract´eristiques Outils Exemple R´ef´erences

Diffusion

Forum • Publication d’un forum public, lieu d’expression du comit´ede pilotage • Site web http://www.cgns.org • Liste de discussion [email protected] • CGNS fait partie des bonnes pratiques recommand´eespar l’AIAA (R-101A-2005) • CGNS propose • un standard de format de donn´ees • des logiciels pour lire, ´ecrireet modifier les donn´eesdans ce format

Logiciels

• D´eveloppement de logiciels libres et gratuits associ´esau standard • Utilitaires de manipulation des donn´ees • Outils de conversion • API Python, ++, etc. • CGNS Tools : CGNSview, CGNSplot, etc. • Biblioh`equeset API avec les sources • biblioth`equeMLL (Mid-Level Library) et CGIO • impl´ementationADF (Advanced Data Format) et HDF5 () (> version 2.x.x) Introduction Caract´eristiques Outils Exemple R´ef´erences

Contenu du standard

CGNS fournit une mani`erede stocker et manipuler les donn´eesde CFD incluant • le maillage (structur´eou non) ; • les champs de vitesse, pression, etc. ; • la connectivit´eentre les noeuds du maillage ; • les conditions aux limites ; • etc. Introduction Caract´eristiques Outils Exemple R´ef´erences

Structuration

• Mod`elesde donn´ees • SGNS/SIDS (Standard Interface Data Structure) • Ensemble de conventions et de d´efinitionsassoci´eesaux donn´ees • Ind´ependant du format physique des fichiers • Mod`elede repr´esentationen arbre (ind´ependante de l’impl´ementation) • CGNS/FMM (File Mapping Manual) • CGNS/ADF (Advanced Data Format) • CGNS/HDF5 (d´efinitcomment SIDS repr´esente HDF5) • CGNS/Python • API • CGNS/MLL (impl´ementationC/ conforme aux SIDS) • S’appuie sur les mod`elesde repr´esentationen arbres CGNS est interfac´eavec le C, C++, Fortran, Python et Matlab Introduction Caract´eristiques Outils Exemple R´ef´erences

Caract´eristiques

• Structure de donn´eeshi´erarchique (permet de ne traiter qu’un morceau des donn´ees) • Poss`edeune description compl`eteet explicite des donn´ees • Suit des conventions de nommage du standard • Int`egreune documentation des donn´ees • Poss`edediff´erentsniveaux optionnels dans la structure • La base de donn´eesest auto-d´ecrite • Structuration de la base de donn´eeen arbres (fa¸conUNIX) • Les donn´eespeuvent associer plusieurs fichiers physiques par des liens Introduction Caract´eristiques Outils Exemple R´ef´erences

Fichier CGNS Organis´een un ensemble de noeuds dans une structure en arbre. Le noeud primaire est appel´e root.

Exemple d’arbre (cgns.github.io) Introduction Caract´eristiques Outils Exemple R´ef´erences

Information sur le maillage

Coordonn´eeset ´el´ements

• Traite de g´eom´etries1D, 2D ou 3D • Comprends plusieurs zones structur´eesou non-structur´ees • Syst`emede coordonn´eescart´esiennes,axi-sym´etriques,cylindriques ou sph´eriques • Poss`ede22 types d’´el´ementspr´e-d´efinis

Connectivit´es

• Conforme ou non, avec ou sans recouvrement de type chim`ere(overset) • Poss`edediff´erentespropri´et´esde connectivit´e(moyenne sur les interfaces, p´eriodicit´e) Introduction Caract´eristiques Outils Exemple R´ef´erences

Information sur les conditions aux limites

• Traite les conditions aux limites avec des identifiants pr´ed´efinis • Des conditions de Neumann ou Dirichelet peuvent ˆetresp´ecifi´eesde fa¸conglobale ou locale • Applique des conditions sur les normales, sur des zones • Int`egredes descripteurs de fonctions de paroi Introduction Caract´eristiques Outils Exemple R´ef´erences

Information sur les champs de variables physiques

Equations´ du mouvement : Navier-Stokes compressible, avec des gaz `adensit´es variables, de la thermique, de la chimie, des mod`elesde turbulence

Variables int´egr´eesaux donn´ees

• Provenant du solveur, avec des types pr´e-identifi´es • D’autres donn´eesg´en´eriquesdiscr`etes,ne faisant pas typiquement partie du solveur • Localis´eessur les fronti`eresdes cellules, les faces ou dans le volume du domaine discret, ´eventuellementsur des recouvrements, dans des zones fantˆomes

Variables d´ependantes du temps

• Traite les champs stationnaires et instationnaires • Int`egreles informations de maillage d´eformables ou mobiles • Stocke les donn´eespar zone ou par base Introduction Caract´eristiques Outils Exemple R´ef´erences

Description des donn´ees

Donn´eesphysiques

• Dimensionn´eesou non • Facteurs de conversion d’unit´es • Unit´esdimensionnelles : masse, longueur, temps, temp´erature, angle, intensit´e ´electrique,densit´e,intensit´elumineuse

Donn´eesadditionnelles

• Historique de convergence • Variables de l’´etatde r´ef´erence • Donn´eesglobales ou int´egr´ees • Donn´eesd´efiniespar l’utilisateur • Texte pour la documentation et les annotations Introduction Caract´eristiques Outils Exemple R´ef´erences cgnsview

• Visualiser et ´editerdes fichiers • G`ereles noeuds de l’arbre CGNS • Descripteurs accessibles dans le menu • Menu configurable • Ecrit´ en Tcl/Tk

(http://cgns.sourceforge.net) Introduction Caract´eristiques Outils Exemple R´ef´erences cgnsplot

• Visualiser le contenu du fichier • Affiche les zones, les ´el´ements,les connectivit´es,les conditions aux limites • Utilitaire ind´ependant ou appel´edepuis cgnsview • Ecrit´ en Tcl/Tk

(http://cgns.sourceforge.net) Introduction Caract´eristiques Outils Exemple R´ef´erences

D´emo

(http://aero-comlab.stanford.edu/vdweide/CGNSFiles) Introduction Caract´eristiques Outils Exemple R´ef´erences

Utilitaires

• cgnscalc • cgnsconvert • cgnsnames • cgnsupdate • cgnscheck • cgnsdiff • cgnsnodes • cgnsview • cgnscompress • cgnslist • cgnsplot Introduction Caract´eristiques Outils Exemple R´ef´erences cgnslist et cgnscheck Introduction Caract´eristiques Outils Exemple R´ef´erences

Exemple de maillage structur´e

(CGNS/src/Test UserGuideCode/C code) Introduction Caract´eristiques Outils Exemple R´ef´erences

Maillage Grille cart´esienne3D (21 × 17 × 9) de l’exemple (tir´ede la documentation CGNS)

Le maillage est d´efinien tout point (i, j, k) par

xijk = i − 1, i = 1, ni

yijk = j − 1, j = 1, nj

zijk = k − 1, k = 1, nk

avec ni = 21, nj = 17 et nk = 9. en C en Fortran

double x[9][17][21],y[9][17][21],z[9][17][21]; real*8 x(21,17,9),y(21,17,9),z(21,17,9) int ni,nj,nk,i,j,k; integer ni,nj,nk,i,j,k ! create gridpoints for simple example: /* create gridpoints for simple example:*/ ni=21 ni=21; nj=17 nj=17; nk=9 nk=9; do k=1,nk for (k=0; k < nk; ++k) do j=1,nj { do i=1,ni for (j=0; j < nj; ++j) x(i,j,k)=float(i-1) { y(i,j,k)=float(j-1) for (i=0; i < ni; ++i) z(i,j,k)=float(k-1) { enddo x[k][j][i]=i; enddo y[k][j][i]=j; enddo z[k][j][i]=k; } } } Introduction Caract´eristiques Outils Exemple R´ef´erences

´ecrituredu fichier en C

#include "cgnslib.h" (...) /* open CGNS file for write*/ if (cg_open("grid_c.cgns",CG_MODE_WRITE,&index_file)) cg_error_exit(); /* create base(user can give any name)*/ strcpy(basename,"Base"); icelldim=3; iphysdim=3; cg_base_write(index_file,basename,icelldim,iphysdim,&index_base); (...) /* create zone*/ cg_zone_write(index_file,index_base,zonename,*isize,CGNS_ENUMV(Structured),&index_zone); /* write grid coordinates(user must use SIDS-standard names here)*/ cg_coord_write(index_file,index_base,index_zone,CGNS_ENUMV(RealDouble),"CoordinateX", x,&index_coord); cg_coord_write(index_file,index_base,index_zone,CGNS_ENUMV(RealDouble),"CoordinateY", y,&index_coord); cg_coord_write(index_file,index_base,index_zone,CGNS_ENUMV(RealDouble),"CoordinateZ", z,&index_coord); /* close CGNS file*/ cg_close(index_file); Introduction Caract´eristiques Outils Exemple R´ef´erences

´ecrituredu fichier en Fortran

include ’cgnslib f.h’ (...) ! open CGNS file for write call cg_open_f(’grid.cgns’,CG_MODE_WRITE,index_file,ier) if (ier .ne. CG_OK) call cg_error_exit_f ! create base(user can give any name) basename=’Base’ icelldim=3 iphysdim=3 call cg_base_write_f(index_file,basename,icelldim,iphysdim, & index_base,ier) (...) ! create zone call cg_zone_write_f(index_file,index_base,zonename,isize, & Structured,index_zone,ier) ! write grid coordinates(user must use SIDS-standard names here) call cg_coord_write_f(index_file,index_base,index_zone,RealDouble, & ’CoordinateX’,x,index_coord,ier) call cg_coord_write_f(index_file,index_base,index_zone,RealDouble, & ’CoordinateY’,y,index_coord,ier) call cg_coord_write_f(index_file,index_base,index_zone,RealDouble, & ’CoordinateZ’,z,index_coord,ier) ! close CGNS file call cg_close_f(index_file,ier) Introduction Caract´eristiques Outils Exemple R´ef´erences

Fichier binaire grid.cgns

Extrait de la documentation https://cgns.github.io/CGNS docs current/user/started.html#sec:singlegrid Introduction Caract´eristiques Outils Exemple R´ef´erences lecture du fichier en C

#include "cgnslib.h" (...) /* open CGNS file for read-only*/ if (cg_open("grid_c.cgns",CG_MODE_READ,&index_file)) cg_error_exit(); /* we know there is only one base(real working code would check!)*/ index_base=1; /* we know there is only one zone(real working code would check!)*/ index_zone=1; /* get zone size(and name- although not needed here)*/ cg_zone_read(index_file,index_base,index_zone,zonename,isize[0]); /* lower range index*/ irmin[0]=1; irmin[1]=1; irmin[2]=1; /* upper range index of vertices*/ irmax[0]=isize[0][0]; irmax[1]=isize[0][1]; irmax[2]=isize[0][2]; /* read grid coordinates*/ cg_coord_read(index_file,index_base,index_zone,"CoordinateX", CGNS_ENUMV(RealSingle),irmin,irmax,x[0][0]); cg_coord_read(index_file,index_base,index_zone,"CoordinateY", CGNS_ENUMV(RealSingle),irmin,irmax,y[0][0]); cg_coord_read(index_file,index_base,index_zone,"CoordinateZ", CGNS_ENUMV(RealSingle),irmin,irmax,z[0][0]); /* close CGNS file*/ cg_close(index_file); Introduction Caract´eristiques Outils Exemple R´ef´erences lecture du fichier en Fortran

include ’cgnslib f.h’ (...) ! open CGNS file for read-only call cg_open_f(’grid.cgns’,CG_MODE_READ,index_file,ier) if (ier .ne. CG_OK) call cg_error_exit_f ! we know there is only one base(real working code would check!) index_base=1 ! we know there is only one zone(real working code would check!) index_zone=1 ! get zone size(and name- although not needed here) call cg_zone_read_f(index_file,index_base,index_zone,zonename, & isize,ier) ! lower range index irmin(1)=1 irmin(2)=1 irmin(3)=1 ! upper range index of vertices irmax(1)=isize(1,1) irmax(2)=isize(2,1) irmax(3)=isize(3,1) ! read grid coordinates call cg_coord_read_f(index_file,index_base,index_zone, & ’CoordinateX’,RealSingle,irmin,irmax,x,ier) call cg_coord_read_f(index_file,index_base,index_zone, & ’CoordinateY’,RealSingle,irmin,irmax,y,ier) call cg_coord_read_f(index_file,index_base,index_zone, & ’CoordinateZ’,RealSingle,irmin,irmax,z,ier) ! close CGNS file call cg_close_f(index_file,ier) Introduction Caract´eristiques Outils Exemple R´ef´erences

R´eutilisationdes donn´ees

Exploitation en post-traitement en C, Fortran avec CGNS/ADF ou CGNS/HDF5

Possibilit´ed’utiliser pyCGNS https://github.com/pyCGNS/pyCGNS • Impl´ementationconsistante du standard avec les objets Python • Interfa¸cageavec les codes bas´eesur un buffer m´emoire • D´efinitionpublique de l’arbre de la structure de donn´ees Introduction Caract´eristiques Outils Exemple R´ef´erences exemple avec pyCGNS

import CGNS as CGNS

a=CGNS.pyCGNS("result.cgns",MODE_MODIFY)

a.CGNS.goto(1,[(Zone_t,1)]) a.CGNS.linkwrite("GridCoordinates","grid.cgns","/Base/Zone/GridCoordinates")

a.CGNS.close() Introduction Caract´eristiques Outils Exemple R´ef´erences

Remarques

M´ethode permettant de construire une chaˆınecoh´erentede donn´ees • brutes et post-trait´ees, • d’archivage interop´erableet p´erenne, • r´eutilisable´eventuellementpar morceaux Introduction Caract´eristiques Outils Exemple R´ef´erences

R´ef´erences

• https://github.com/CGNS/ • https://github.com/CGNS doc current/