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;
}
int main(int argc, char **argv)
MEDC_EXPORT med_err MEDfileClose(med_idt fid)
Fermeture d'un fichier MED.
MEDC_EXPORT med_idt MEDfileOpen(const char *const filename, const med_access_mode accessmode)
Ouverture d'un fichier MED.
MEDC_EXPORT med_err MEDparameterCr(const med_idt fid, const char *const paramname, const med_parameter_type paramtype, const char *const description, const char *const dtunit)
Cette routine permet la création d'un paramètre numérique scalaire.
MEDC_EXPORT med_err MEDparameterValueWr(const med_idt fid, const char *const paramname, const med_int numdt, const med_int numit, const med_float dt, const unsigned char *const value)
Cette routine permet l'écriture de la valeur d'un paramètre numérique scalaire.
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;
}
MEDC_EXPORT med_err MEDparameterComputationStepInfo(const med_idt fid, const char *const paramname, const int csit, med_int *const numdt, med_int *const numit, med_float *const dt)
Cette routine permet la lecture des informations relatives à une étape de calcul du paramètre numériq...
MEDC_EXPORT med_int MEDnParameter(const med_idt fid)
Cette routine permet la lecture du nombre de paramètre numérique scalaire dans un fichier.
MEDC_EXPORT med_err MEDparameterInfo(const med_idt fid, const int paramit, char *const paramname, med_parameter_type *const paramtype, char *const description, char *const dtunit, med_int *const nstep)
Cette routine permet la lecture des informations relatives à un paramètre scalaire via un itérateur.
MEDC_EXPORT med_err MEDparameterValueRd(const med_idt fid, const char *const paramname, const med_int numdt, const med_int numit, unsigned char *const value)
Cette routine permet la lecture de la valeur d'un paramètre numérique scalaire.