|
◆ MEDfilterBlockOfEntityCr()
med_err MEDfilterBlockOfEntityCr |
( |
const med_idt |
fid, |
|
|
const med_int |
nentity, |
|
|
const med_int |
nvaluesperentity, |
|
|
const med_int |
nconstituentpervalue, |
|
|
const med_int |
constituentselect, |
|
|
const med_switch_mode |
switchmode, |
|
|
const med_storage_mode |
storagemode, |
|
|
const char *const |
profilename, |
|
|
const med_size |
start, |
|
|
const med_size |
stride, |
|
|
const med_size |
count, |
|
|
const med_size |
blocksize, |
|
|
const med_size |
lastblocksize, |
|
|
med_filter *const |
filter |
|
) |
| |
Crée un filtre en selectionnant par blocs les entités pour lesquelles on veut lire/écrire des valeurs. Cette sélection permet une lecture/écriture avancée vers/depuis les emplacements mémoire sélectionnés. Elle s'utilise aussi bien en mode séquentiel qu'en mode parallèle (un ou plusieurs processus).
- Paramètres
-
| fid | Identificateur du fichier. |
| nentity | Nombre d'entités de même type géométrique constituant globalement le maillage. Ce paramètre ne doit pas prendre en compte nvaluesperentity et nconstituentpervalue. |
| nvaluesperentity | Nombre de valeurs par entité. Utiliser la valeur 1 pour un filtre d'éléments de maillage. Cela peut être le nombre de points d'intégration utilisé dans un champ résultat. |
| nconstituentpervalue | Nombre de constituants par valeur. Cela peut être le nombre de coordonnées des noeuds, le nombre de noeuds d'une connectivité, le nombre de composantes d'un champ résultat. |
| constituentselect | Numéro de constituant des valeurs à filtrer (commence à 1). Le mot clé MED_ALL_CONSTITUENT permet de selectionner tous les constituants. Cela peut être le numéro de coordonnées des noeuds, le numéro de noeuds d'une connectivité, le numéro de composantes d'un champ résultat. |
| switchmode | Mode d'entrelacement utilisé pour le stockage de valeurs med_switch_mode. |
| storagemode | Indique le mode de stockage en mémoire med_storage_mode des valeurs associées au profil utilisé. |
| profilename | Nom du profil utilisé (de taille maximum MED_NAME_SIZE ) ou (MED_NO_PROFILE | MED_ALLENTITIES_PROFILE ) s'il n'y a pas de profil. |
| start | Index de départ du premier bloc. L'index est relatif à un profil. |
| stride | Ecart constant en nombre d'entités entre les blocs (en comptant à partir de l'indice de départ du bloc précédent). En particulier, écart entre start et l'index de départ du bloc suivant. |
| count | Nombre de blocs à sélectionner (0 est possible). |
| blocksize | Taille de chaque bloc en nombre d'entités. |
| lastblocksize | Taille en nombre d'entités du dernier bloc du dernier processus utilisé (inutilisé si count < 2 ). |
[in,out] | filter | Filtre sur entités (med_filter) appliqué en lecture/écriture de valeurs. La désallocation est à la charge de l'utilisateur (cf. MEDfilterClose MEDfilterDeAllocate). |
- Renvoie
- retour négatif en cas d'erreur (MED_ERR_HOWTO), Zéro sinon.
La sélection des emplacements mémoire lus/écrits s'opère dans l'espace mémoire du processus appelant. Les entités sélectionnées le sont avec toutes leurs valeurs (nvaluesperentity). Il est possible de sélectionner l'ensemble des constituants par valeur ( MED_ALL_CONSTITUENT ) ou uniquement les constituants n°constituentselect . Les constituants sont lus/écrits en mode MED_FULL_INTERLACE|MED_NO_INTERLACE (med_switch_mode). Le mode de stockage peut être MED_GLOBAL_STMODE ou MED_COMPACT_STMODE (med_storage_mode) :
- En mode MED_GLOBAL_STMODE, chacun des processus possède l'espace mémoire des valeurs associés à la totalité des entités d'un même type. Dans ce mode, il n'est pas possible d'utiliser un profil utilisateur (car la sélection ne serait plus par bloc). Les seuls profils disponibles sont MED_ALLENTITIES_PROFILE ou MED_NO_PROFILE .
- En mode MED_COMPACT_STMODE, chacun des processus possède un espace mémoire contigü pour lire/écrire les valeurs des entités selectionnées par des blocks d'index. Les blocks décrivent les parties du profil à utiliser. Autrement dit, les blocks d'index créés indiquent les numéros d'entités à selectionner dans le tableau profil. La numérotation des index commence à 1. Il est possible d'utiliser un profil utilisateur ou MED_ALLENTITIES_PROFILE. Si le profil MED_ALLENTITIES_PROFILE est utilisé, les index sont directement les numéros des entités.
- Remarques
- Le filtre créé prend en compte les paramètres nvaluesperentity et nconstituentpervalue pour sélectionner les emplacements en mémoire.
- Si count vaut 0 ou 1, lastblocksize n'est pas utilisé, le paramètre blocksize peut avoir des valeurs différentes par processus.
- Si count > 2, chaque processus sélectionne count blocks de taille blocksize. En utilisant le stride il est possible de mettre en oeuvre une sélection par block cyclique. Seul le processus de plus haut rang utilisé (dernier processus utilisé) peut définir une valeur non nulle de lastblocksize. Ce paramètre vaudra alors blocksize auquel il sera ajouté un résidu non nul. Par exemple : lastblocksize= blocksize + (nentities - blocksize*nproc*nblocks_pproc).
- Il est possible de ne pas faire participer certains processus en indiquant un count == 0. Cependant tous les processus du communicateur utilisé doivent faire appel aux même fonctions MED. Il s'agit d'opérations collectives.
- Voir également
- MEDparfileOpen
Définition à la ligne 52 du fichier MEDfilterBlockOfEntityCr.c.
|