Interface d'un échangeur de particules. Plus de détails...
#include <arcane/core/IParticleExchanger.h>
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.
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.
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |
Gestion de l'asynchronisme (retourne nullptr si fonctionnalité non disponible)
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
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.
Implémenté dans Arcane::mesh::BasicParticleExchanger, Arcane::mesh::AsyncParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
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
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
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
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |
Initialize l'échangeur pour la familly item_family.
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |
Famille associée.
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |
Positionne le niveau de verbosité (0 pour aucune message)
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |
Niveau de verbosité
Implémenté dans Arcane::mesh::AsyncParticleExchanger, Arcane::mesh::BasicParticleExchanger, et Arcane::mesh::NonBlockingParticleExchanger.
|
pure virtual |