Upload
morgaine-gillet
View
105
Download
1
Embed Size (px)
Citation preview
Page 1
Interface CWIPI
Thierry Morel Formation OpenPALM avril 2012
Page 2
Fonctionnalités
• Échanges de champs interpolés entre un maillage source et un maillage cible• Maillages non coïncidents• Maillages partitionnés distribués sur différents processus (une partition
par processus)
•Types de communication :• Échanges unidirectionnels synchrones• Échanges croisés synchrones• Échanges asynchrones
• Parallélisme :• Transparent pour l’utilisateur
Page 3
Maillage
• Type de maillages – Linéique : arêtes– Surfacique : triangles, quadrangles, polygones– Volumique : tétraèdres, pyramides, prismes, hexaèdres, polyèdres
• Échanges– Types de maillages identiques entre source et cible :
• Échange à travers une interface
– Types de maillages distincts entre source et cible : • Surface plongée dans un volume• Maillage 2D axisymétrique plongé dans un volume• …
Page 4
Interpolation
• Points d’interpolation– Centres cellules du maillage cible– Sommets du maillage cible– Points définis par l’utilisateur
• Méthodes – Pour les champs définis aux centres cellules du maillage source :
• Valeur de la cellule contenant le point– Pour les champs définis aux sommets du maillage source :
• Matrice d’interpolation basée sur le résultat de localisation géométrique et de calcul de coordonnées barycentriques
– Interpolation utilisateur• Possibilité de définir ses propres méthodes à partir des résultats de localisation
géométrique
Page 5
Localisation géométrique
• Résultats : – Élément du maillage source contenant le point– A défaut : Élément le plus proche parmi les éléments candidats – Point défini comme non localisé
• Tolérance géométrique– Permet de jouer sur la distance de recherche autour du point pour
augmenter le nombre d’éléments candidats – Paramètre utilisateur– Valeur > 0 (par défaut : 0.001)– Plus la valeur est grande :
• Plus le nombre de points localisés augmente• Plus l’algorithme est lent
• Points non localisés :– Liste accessible à l’utilisateur – Attention : Le champ reçu n’est défini que sur les points localisés.– Contrôle et définition des valeurs sur ces points à faire par l’utilisateur
Page 6
Post-traitement
• Visualisation– Partition de l’interface– Points non localisés– Champs envoyés– Champs reçus
• Format– Ensight, CGNS, MED
Page 7
Primitives générales
• PCW_Init– Création des communicateurs MPI liant les
application
• PCW_Finalize – Destruction de communicateurs MPI
• PCW_set_output_listing– Redirection des affichages dans un fichier
donné
Page 8
Création d’un objet de couplage
• PCW_Create_coupling – Retourne un identificateur (id)– Principaux paramètres :
• Nature du maillage : linéique, surfacique, volumique• Tolérance géométrique• Maillage mobile ou statique• Définition de la nature des champs
– Valeurs aux centres cellules – Valeurs aux sommets
• Activation des sorties graphiques
• Plusieurs objets de couplages peuvent être créés simultanément
Page 9
Définition d’un maillage
• PCW_define_mesh :– Paramètres
• Id de l’objet de couplage
• Nombre de sommets et coordonnées
• Nombre d’éléments et connectivité
• Les tableaux en entrée sont mappés en mémoire– Possibilité de partager le même maillage entre
plusieurs objets de couplage
Page 10
Connectivité
• Les éléments doivent être triés– Surfacique : triangles, quadrangles, polygones– Volumique : tétraèdre, pyramides, prismes, hexaèdres
• Deux tableaux :– connecindex : tableau d’index permettant l’accès au tableau
connec– connec : concaténation de la connectivité cellule/sommets de
l’ensemble des éléments– Exemple pour un élément ielt :
• Nombre de sommets : – n_som = connecindex[ielt+1] – connecindex[ielt]
• Connectivité de l’élément :– connec[connecidx[ielt]] … connec[connecidx[ielt] + n_som]
Page 11
Numérotation interne des éléments
Page 12
Polyèdres
• PCW_Add_polyhedra :– Connectivité cellules/faces orientée
• Pour une face de numéro numfac– Mettre numfac si la normale de la face est sortante
– Mettre - numfac si la normale de la face est entrante
• L’orientation des faces est implicitement définie par l’ordre des sommets dans la connectivité faces/sommets
– Connectivité faces/sommets
Page 13
Communications synchrones
• Primitives– PCW_Sendrecv : Échanges croisés– PCW_Send : Envoi simple– PCW_Recv : Réception simple
• En C/C++ les échanges unidirectionnels se font par PCW_Sendrecv en positionnant à NULL les champs d’envoi ou réception.
• Localisation géométrique réalisée automatiquement au premier échange
Page 14
Communications asynchrones
• Primitives– PCW_Issend : Envoi– PCW_Wait_issend : Attente de fin d’envoi – PCW_Irecv : Réception– PCW_Wait_irecv : Attente de fin de réception
• En asynchrone :– La localisation est explicite :
• Appel de PCW_Locate obligatoire
Page 15
Points non localisés
• Nombre de points non localisés– Obtenu en retour des fonctions d’échange
• Liste des point non localisés:– PCW_get_not_located_points
Page 16
Post-traitement
• Répertoire de stockage– cwipi/<nom_couplage>_<nom appli1>_<nom_appli2>
• Nom des variables– Champ source : s_<nom_var>– Champ reçu : r_<nom_var>– Localisation (si présence de points non localisés) :
location– Partitionnement : partitioning
Page 17
Fonctions avancées
• PCW_set_points_to_locate– Définition des points d’interpolation
• PCW_Set_interpolation_function– Prise en compte d’une fonction d’interpolation
utilisateur C– Prototype imposé
• PCW_Set_interpolation_function_f– Prise en compte d’une fonction d’interpolation
utilisateur Fortran– Prototype imposé
Page 18
Prototype d’une interpolation utilisateur
static void _userInterpolation(const int entities_dim, const int n_local_vertex, const int n_local_element, const int n_local_polhyedra, const int n_distant_point, const double local_coordinates[], const int local_connectivity_index[], const int local_connectivity[], const int local_polyhedra_face_index[], const int local_polyhedra_cell_to_face_connectivity[], const int local_polyhedra_face_connectivity_index[], const int local_polyhedra_face_connectivity[], const double distant_points_coordinates[], const int distant_points_location[], const float distant_points_distance[], const int distant_points_barycentric_coordinates_index[], const double distant_points_barycentric_coordinates[], const int stride, const cwipi_solver_type_t solver_type, const void *local_field, void *distant_field)
Page 19
Différence d’utilisation entre CWIPI et son interface dans Open-Palm
• Fonctions interfacées– Même nom, seul le préfixe change
• CWIPI_ → PCW_
– Moins d’arguments• Prise en charge par PrePALM
• Contrôle des couplage– Pas d’utilisation des fonctions de contrôles CWIPI
– Gestion par PrePALM