Interface d'un échangeur de particules. Plus de détails...
#include <arcane/core/IParticleExchanger.h>
Fonctions membres publiques | |
virtual void | build ()=0 |
virtual void | initialize (IItemFamily *item_family)=0 |
Initialize l'échangeur pour la familly item_family. | |
virtual void | beginNewExchange (Integer nb_particle)=0 |
Commence un nouvel échange de particules. | |
virtual ARCANE_DEPRECATED bool | exchangeItems (Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send, ItemGroup item_group, IFunctor *wait_functor)=0 |
Échange des particules entre sous-domaines. | |
virtual bool | exchangeItems (Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView ranks_to_send, Int32Array *new_particle_local_ids, IFunctor *wait_functor)=0 |
Échange des particules entre sous-domaines. | |
virtual void | sendItems (Integer nb_particle_finish_exchange, Int32ConstArrayView local_ids, Int32ConstArrayView sub_domains_to_send)=0 |
virtual bool | waitMessages (Integer nb_pending_particle, Int32Array *new_particle_local_ids, IFunctor *functor)=0 |
virtual void | addNewParticles (Integer nb_particle)=0 |
Ajoute nb_particle dans l'échange actuel. | |
virtual IItemFamily * | itemFamily ()=0 |
Famille associée. | |
virtual void | setVerboseLevel (Integer level)=0 |
Positionne le niveau de verbosité (0 pour aucune message) | |
virtual Integer | verboseLevel () const =0 |
Niveau de verbosité | |
virtual IAsyncParticleExchanger * | asyncParticleExchanger ()=0 |
Gestion de l'asynchronisme (retourne nullptr si fonctionnalité non disponible) | |
Interface d'un échangeur de particules.
Cette classe sert à échanger des particules entre sous-domaines en plusieurs étapes et est en général utilisée par des codes de trajectographie. Si l'on souhaite faire un échange en une fois, il faut utiliser IItemFamily::exchangeItems().
Avant tout, une instance doit être initialisée avec une famille de particules via initialize().
Pour procéder à un échange, il faut d'abord initialiser l'échange via beginNewExchange() avec comme argument le nombre de particules du sous-domaine concernées par l'échange. Il faut ensuite appeler exchangeItems() pour chaque phase d'échange de particules. A chaque appel à exchangeItems(), il faut spécifier le nombre de particules ne participant plus à l'échange. Lorsqu'il n'y a plus de particules concernée, exchangeItems() return true et l'échange est terminé. Il est possible de recommencer tout le processus via un nouvel appel à beginNewExchange().
Entre deux phases d'un échange, il est possible d'indiquer que de nouvelles particules vont participer via addNewParticles()
Définition à la ligne 60 du fichier IParticleExchanger.h.
|
inlineprotected |
Définition à la ligne 64 du fichier IParticleExchanger.h.
|
inlinevirtual |
Définition à la ligne 68 du fichier IParticleExchanger.h.
|
pure virtual |
Ajoute nb_particle dans l'échange actuel.
Cette méthode permet d'indiquer que de nouvelles particules vont participer à l'échanger, par exemple suite à leur création.
|
pure virtual |
Commence un nouvel échange de particules.
nb_particule est le nombre de particules du sous-domaine qui vont prendre part à un éventuel échange.
Cette méthode est collective et doit être appelée par tout les sous-domaines.
|
pure virtual |
Échange des particules entre sous-domaines.
Cette opération envoie les particules de la famille item_family dont les indices locaux sont donnés par la liste local_ids aux sous-domaines specifiés par sub_domains_to_send, et réceptionne de ces mêmes sous-domaines celles dont ce sous-domaine est propriétaire. Les particules envoyées sont supprimées de la famille item_family et celles recues ajoutées.
Les variables reposant sur la famille item_family sont transférées en même temps que les particules.
Cette opération est collective et bloquante.
Si new_particle_local_ids n'est pas nul, il contiendra en retour le tableau des indices locaux des nouvelles entitées.
Si wait_functor n'est pas nul, le fonctor est appelé pendant l'envoie et la réception des messages. Il est alors possible de faire des opérations. Les opérations ne doivent pas utiliser de particules, ni des variables sur les particules de la famille échangée.
a true si toutes les phases d'échange sont terminés
a false sinon
|
pure virtual |
Échange des particules entre sous-domaines.
Cette opération envoie les particules de la famille item_family dont les indices locaux sont donnés par la liste local_ids aux sous-domaines specifiés par sub_domains_to_send, et réceptionne de ces mêmes sous-domaines celles dont ce sous-domaine est propriétaire. Les particules envoyées sont supprimées de la famille item_family et celles recues ajoutées.
Les variables reposant sur la famille item_family sont transférées en même temps que les particules.
Cette opération est collective et bloquante.
Si item_group n'est pas nul, il contiendra en retour la liste des nouvelles entités.
Si wait_functor n'est pas nul, le fonctor est appelé pendant l'envoie et la réception des messages. Il est alors possible de faire des opérations. Les opérations ne doivent pas utiliser de particules, ni des variables sur les particules de la famille échangée.
a true si toutes les phases d'échange sont terminés
a false sinon