Créer un paramètre numérique
L'écriture de paramètres numériques dans un fichier MED est optionnelle : un fichier MED peut en contenir de 0 à plusieurs. Le mode d'écriture pour chaque paramètre consiste à créer le paramètre dont le type peut être entier ou réel comme pour les champs de résultats. La création d'un paramètre numérique se fait via la routine MEDparameterCr / mprcre. Il est possible ensuite d'écrire des valeurs pour un paramètre selon plusieurs séquences de calcul avec la routine MEDparameterValueWr / mprrvw mprivw.
#define MESGERR 1
#ifdef DEF_LECT_ECR
#define MODE_ACCES MED_ACC_RDWR
#elif DEF_LECT_AJOUT
#define MODE_ACCES MED_ACC_RDEXT
#else
#define MODE_ACCES MED_ACC_CREAT
#endif
int main (
int argc,
char **argv)
{
MESSAGE(
"Erreur a la creation du fichier test21.med");
return -1;
}
MESSAGE(
"Erreur a la creation d'une variable scalaire enti�re");
return -1;
}
printf("Creation d'une variable scalaire entiere \n");
MESSAGE(
"Erreur a l'ecriture d'une valeur entiere");
return -1;
}
printf("Ecriture d'une valeur entiere sans pas de temps \n");
MESSAGE(
"Erreur a l'ecriture d'une valeur entiere");
return -1;
}
printf("Ecriture d'une valeur entiere avec pas de temps \n");
MESSAGE(
"Erreur a la creation d'une variable scalaire flottante");
return -1;
}
printf("Creation d'une variable scalaire flottante \n");
MESSAGE(
"Erreur a l'ecriture d'une valeur flottante");
return -1;
}
printf("Ecriture d'une valeur reelle avec pas de temps et numero d'ordre \n");
MESSAGE(
"Erreur a la fermeture du fichier");
return -1;
}
return 0;
}
Lire un paramètre numérique
Le mode de lecture des paramètres numériques se calque sur celui des champs et des maillages. L'accès aux paramètres stockés dans un fichier peut se faire via deux approches possibles : accès par le nom ou via un itérateur. La routine MEDparameterInfoByName / mprpin permet de lire les informations relatives à un paramètre dont on connaît le nom. Les informations lues correspondent à celles écrites par la routine MEDparameterCr / mprcre.
Si on utilise l'approche itérative, il est tout d'abord nécessaire de lire le nombre de paramètre dans le fichier avec la routine MEDnParameter / mprnpr, avant d'itérer sur tous ces paramètres. La routine MEDparameterInfo / mprpri permet de récupérer les informations relative à chaque paramètre dont le nombre de séquence de calcul (au même titre que MEDparameterInfoByName / mprpin). Il s'agit ensuite d'itérer sur chaque séquence de calcul afin d'une part de récupérer les informations relatives à cette séquence avec la routine MEDparameterComputationStepInfo / mprcsi et d'autre part de lire la valeur du paramètre avec la routine MEDparameterValueRd / mprrvr mprivr.
Le cas d'utilisation suivant donne une approche générique pour lire tous les paramètres numériques d'un fichier MED.
#define MESGERR 1
#ifdef DEF_LECT_ECR
#define MODE_ACCES MED_ACC_RDWR
#elif DEF_LECT_AJOUT
#define MODE_ACCES MED_ACC_RDEXT
#else
#define MODE_ACCES MED_ACC_CREAT
#endif
int main (
int argc,
char **argv)
{
MESSAGE(
"Erreur a l'ouverture du fichier test21.med");
return -1;
}
if (n < 0) {
MESSAGE(
"Erreur a la lecture du nombre de variable scalaire");
return -1;
}
printf(
"Nombre de variables scalaires dans test21.med = "IFORMAT"\n",n);
for (i=1;i<=n;i++) {
if (
MEDparameterInfo(fid, i, nom_scalaire, &type, description, dt_unit, &npdt) < 0) {
MESSAGE(
"Erreur a la lecture des infos sur la variable d'indice : ");
return -1;
}
printf(
"- Scalaire n°"IFORMAT" de nom %s \n",i,nom_scalaire);
printf(" Type flottant. \n");
else
printf(" Type entier. \n");
printf(" Description associee : [%s] \n",description);
printf(
" Nombre de pas de temps : "IFORMAT" \n",npdt);
for (j=1;j<=npdt;j++) {
MESSAGE(
"Erreur a la lecture des informations sur le pas de temps d'indice :");
return -1;
}
printf(
" Valeur n°"IFORMAT" : \n",j);
printf(" - Aucun de pas de temps \n");
else
printf(
" - Pas de de temps de numero "IFORMAT" de valeur %f [%s] \n",numdt,dt,dt_unit);
printf(" - Aucun numero d'ordre \n");
else
printf(
" - Numero d'ordre : "IFORMAT" \n",numo);
MESSAGE(
"Erreur a la lecture de la valeur flottante : ");
return -1;
}
printf(" - Valeur : %f \n",valr);
} else {
MESSAGE(
"Erreur a la lecture de la valeur entiere : ");
return -1;
}
printf(
" - Valeur : "IFORMAT" \n",vali);
}
}
}
MESSAGE(
"Erreur a la fermeture du fichier ");
return -1;
}
return 0;
}