MED fichier

◆ MEDfieldValueAdvancedWr()

med_err MEDfieldValueAdvancedWr ( const med_idt  fid,
const char *const  fieldname,
const med_int  numdt,
const med_int  numit,
const med_float  dt,
const med_entity_type  entitype,
const med_geometry_type  geotype,
const char *const  localizationname,
const med_filter *const  filter,
const unsigned char *const  value 
)

Cette fonction permet d'écire les valeurs d'un champ définies sur des entités d'un maillage pour une étape de calcul et selon un filtre donnés.

Paramètres
fidIdentificateur du fichier.
fieldnameNom du champ, de longueur maximum MED_NAME_SIZE .
numdtNuméro de pas de temps de l'étape de calcul (MED_NO_DT si pas de numéro de pas de temps).
numitNuméro d'itération de l'étape de calcul (MED_NO_IT si pas de numéro d'itération).
dtDate du pas de temps si le numéro de pas de temps est différent de MED_NO_DT.
entitypeType d'entité (med_entity_type).
geotypeType géométrique de l'entité (med_geometry_type).
localizationnameNom de la localisation, de longueur maximum MED_NAME_SIZE .
filterFiltre sur entités (med_filter) appliqué en lecture/écriture de valeurs.
valueTableau des valeurs.
Valeurs retournées
med_errretour négatif en cas d'erreur (MED_ERR_HOWTO), Zéro sinon.

Cette fonction permet d'écrire les valeurs d'un champ définies sur des entités d'un maillage pour une étape de calcul et selon un filtre donnés. Cette fonction est une fonction dite avancée car le paramètre correspondant au filtre permet de sélectionner finement les données lues en mode séquentiel ou parallèle : avec ou sans profil, mode d'entrelacement, par blocs, etc.

Remarques
Depuis la 3.3.0 en plus des types MED_FLOAT64, MED_INT32 et MED_INT64, les types MED_FLOAT32 et MED_INT sont autorisés. Aux types med_int et med_float64 utilisés en C sont ajoutés les types med_float32, med_int32 et med_int64 (si la plateforme possède des entiers 64bits testé à la configuration).
Sur un Unix 32 bits sur architecture 64bits, il est possible d'utiliser des MED_INT64, l'étape de configuration vérifie l'existence ou définie le type C int64_t. A lecture d'un fichier < 3.3.0 avec une bibliothèque >= 3.3.0 configurée avec med_int = long :
  • Si le fichier lu contient un champ MED_INT32, les bibliothèques < 3.3.0 relisaient en se basant sur la taille 64 bits des med_int. Les tableaux étaient donc alloués en fonction de la taille du med_int, ceci n'est plus le cas pour les champs MED_INT32 ou MED_INT64.
En Fortran pour les champs MED_INT64 utiliser le type integer*8 et pour les champs MED_INT32 utiliser le type integer*4.

Avant la 3.3.0 seuls les types : MED_FLOAT64, MED_INT32 et MED_INT64 étaient autorisés dans MEDfieldCr et seuls les types med_int et med_float64 pouvaient être utilisés en C. La configuration du med_int était prédominante sur le choix du type de champ pour définir la taille du stockage à utiliser. Il faut garder à l'esprit que les étapes d'écriture et de lecture ne se font pas forcément avec la même configuration de med_int.
  • A l'écriture :
  • A la lecture :
    • si med_int = int les champs MED_INT32 sont lus en 32bits avec conversion 64->32 s'il avait été stocké en 64bits (configuration écriture med_int = long)
    • si med_int = int les champs MED_INT64 ne pouvaient pas être lu (pour prevenir la perte d'information)
    • si med_int = long les champs MED_INT32 sont lus en 64bits avec conversion 32->64 s'il avait été stocké en 32bits (configuration écriture med_int = int)
    • si med_int = long les champs MED_INT64 sont lus en 64bits
  • Des profils supplémentaires à une étape de calcul peuvent être utilisés pour définir des localisations de points d'intégration différentes pour un même couple ( med_entty_type, med_geometric_type ).
  • Ces profils supplémentaires doivent être disjoints. De plus, il n'est pas autorisé de stocker deux profils disjoints avec une même localisation ; un seul profil doit être utilisé dans ce cas (un algèbre de profils permettrait de répondre à ce usecase).

Définition à la ligne 46 du fichier MEDfieldValueAdvancedWr.c.