Créer des séquences de calcul dans un champ de résultats
Lire un champ de résultats avec des séquences de calcul
La routine \ref MEDfieldCr / \ref mfdcre permet de créer un champ de résultat dans un fichier MED. Un champ est identifié par son nom qui est une chaîne de \ref MED_NAME_SIZE caractères. Un champ de résultat est constitué d'une ou plusieurs composantes scalaires. A un champ est associé un type et les valeurs correspondant aux différentes composantes sont toutes du même type qui peut être \ref MED_FLOAT64 (réel), \ref MED_INT (entier). Chaque composante se voit attribuer un nom et une unité. Les valeurs du champ sont associée aux entités d'un seul maillage.
La routine \ref MEDfieldValueWr / \ref mfdrvw \ref mfdivw permet d'écrire dans un champ des valeurs correspondant à un résultat portant sur un type d'entité géométrique d'un maillage donné. Si le champ porte sur plusieurs types d'entité, il faut donc appeler cette routine autant de fois qu'il y a de types différents. Les valeurs du champ peuvent porter sur les noeuds, les éléments, les points de Gauss des éléments, les noeuds par élément. Nous ne traitons dans un premier temps que les champs aux noeuds et aux éléments.
Le cas d'utilisation suivant permet de créer un champ Température à une composante. Les résultats de ce champ portent sur les noeuds et les éléments du maillage. A noter que le maillage se trouvant dans un fichier différent de celui du champ, il est possible d'indiquer le nom et le chemin d'accès au fichier contenant le maillage en créant un lien avec la routine \ref MEDlinkWr / \ref mlnliw. Le lien porte alors le nom du maillage.
\include UsesCase_MEDfield_1.c
Comme pour les maillages, l'accès aux champs stockés dans un fichier se fait via deux approches possibles : accès par le nom ou via un itérateur. La routine \ref MEDfieldInfoByName / \ref mfdfin permet de lire les informations relatives à un champ dont on connaît le nom. Les informations lues correspondent à celles écrites par la routine \ref MEDfieldCr / \ref mfdcre.
Il est ensuite nécessaire pour chaque type d'entité présent dans le maillage de connaître le nombre de valeurs à lire avec la routine \ref MEDfieldnValue / \ref mfdnva. Le nombre de valeurs ainsi obtenu, permet de calculer la zône mémoire à allouer en vue de lire ces données (à savoir le nombre de valeurs * nombre de composantes du champ). Enfin la routine \ref MEDfieldValueRd / \ref mfdrvr \ref mfdivr permet de lire les valeurs associées à un type d'entité donné.
Le cas d'utilisation suivant montre comment lire les données du champ écrites dans le cas d'utilisation précédent.
\include UsesCase_MEDfield_2.c
Une approche plus générique dans la lecture d'un champ est donnée dans l'exemple suivant. La routine \ref MEDnField / \ref mfdnfd va lire le nombre de champ dans le fichier. Il s'agit ensuite d'itérer sur ces champs. La routine \ref MEDfieldInfo / \ref mfdfdi permet de lire les informations relatives à un champ à partir d'un itérateur. La routine \ref MEDfieldnComponent / \ref mfdnfc permet de récupérer le nombre de composante du champ en vue de dimensionner la taille des paramètres utiles à la routine MEDfieldInfo.
Une fois les informations générales du champ connues, il est nécessaire pour chaque type d'entité présent dans le maillage de connaître le nombre de valeurs à lire avec la routine \ref MEDfieldnValue / \ref mfdnva. Le nombre de valeurs ainsi obtenu, permet de calculer la zône mémoire à allouer en vue de lire ces données (à savoir le nombre de valeurs * nombre de composantes du champ). Enfin la routine \ref MEDfieldValueRd / \ref mfdrvr \ref mfdivr permet de lire les valeurs associées à un type d'entité donné. Pour les mailles et le cas échéant les faces et les arêtes, il est possible d'itérer sur le nombre de type géométrique pré-défini dans le modèle. Par exemple pour les mailles, cette valeur est fixée par le paramètre constant \ref MED_N_CELL_FIXED_GEO.
\include UsesCase_MEDfield_3.c
Une séquence de calcul correspond à une date (pas de temps) et/ou une étape itérative (numéro d'ordre). Les valeurs d'un champ peuvent porter sur une séquence de calcul autre que la séquence initiale (\ref MED_NO_DT, \ref MED_NO_IT) utilisée par défaut. La définition de la séquence de calcul se fait lors de la l'écriture des valeurs du champ avec la routine \ref MEDfieldValueWr / \ref mfdrvw \ref mfdivw qui prend en paramètres le pas de temps et le numéro d'ordre.
Il est possible de référencer l'étape d'évolution d'un maillage à laquelle l'étape de calcul correspond le cas échéant avec la routine \ref MEDfieldComputingStepMeshWr / \ref mfdcmw. Par défaut les valeurs du champ se rapportent au maillage initial (MED_NO_DT, MED_NO_IT).
\include UsesCase_MEDfield_4.c
A la lecture, le nombre de séquence de calcul du champ peut est récupéré par les routines \ref MEDfieldInfoByName / \ref mfdfin et \ref MEDfieldInfo / \ref mfdfdi. Il s'agit ensuite d'itérer sur ce nombre de séquence afin de lire les valeurs portant sur les entités du maillage. La routine \ref MEDfieldComputingStepMeshInfo / \ref mfdcmi permet de récupérer les informations relatives à la séquence de calcul (pas de temps et numéro d'ordre), ainsi que l'étape d'évolution du maillage correspondante. La routine \ref MEDfieldComputingStepInfo / \ref mfdcsi permet de récupérer les informations relatives à la séquence de calcul sans se préoccuper du maillage dans le cas d'un maillage non évolutif.
\include UsesCase_MEDfield_5.c
Le cas d'utilisation suivant fournit une approche générique pour lire les valeurs portant sur les mailles du maillage pour toutes les séquences de calcul de tous les champs d'un fichier MED.
\include UsesCase_MEDfield_6.c