190 likes | 384 Views
Interface CWIPI. Thierry Morel. Formation OpenPALM avril 2012. 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)
E N D
Interface CWIPI Thierry Morel Formation OpenPALM avril 2012
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
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 • …
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
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
Post-traitement • Visualisation • Partition de l’interface • Points non localisés • Champs envoyés • Champs reçus • Format • Ensight, CGNS, MED
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é
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
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
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]
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
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
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
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
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
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é
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)
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