• Aucun résultat trouvé

3.2 Couplage CAPTN

3.2.2 Gestion des paraboles

Modification de l’octaèdre

Afin de faire croître chaque octaèdre, il faut calculer à chaque sommet une vitesse

vtip. On attribue donc une parabole à chaque sommet qui a pour but de représenter la

croissance de l’enveloppe dans la direction principale de croissance h1 0i, comme illustré par la figure 3.5 (a). Chaque octaèdre se voit donc attribuer, en plus des données déjà stockées1, un rayon de courbure ρ et une vitesse v

tip pour chaque parabole. On a

donc à priori, pour les enveloppes de croissance décrites jusqu’ici, 4 couples ρ et vtip

supplémentaires à conserver (6 en 3D). La description de la morphologie d’une parabole nécessite uniquement : le centre de l’octaèdre, la longueur L de la branche (notée R dans [Car12]) et son rayon de courbure. Auparavant, les vitesses n’étaient pas stockées car elles n’étaient pas nécessaires au calcul, seule la vitesse maximale de toutes les branches était conservée. Les vitesses maximales étaient alors utilisées pour calculer le micro pas de temps (sous-discrétisation du temps pour l’automate cellulaire). Il n’était donc pas nécessaire de conserver la vitesse de chaque pointe. Avec le PTN, la vitesse

1longueurs des branches L, coordonnées du centre, vitesse, aires pour le calcul de la

apparaît de façon explicite dans le calcul du « Flux Intensity Factor » (équation 2.6) qui permet de calculer le rayon de courbure et la vitesse au pas de temps suivant (équations 2.7 et 2.8).

Gestion de la germination

Lorsqu’un grain germe, la taille de l’octaèdre initial est très petite. Il n’est pas non plus garanti que la taille de maille locale du maillage PTN soit adaptée à la représentation de ses paraboles, ni ne permet une intégration. Dans ce cas, aucune parabole n’est associée à l’octaèdre et aucune mémoire n’est pour l’instant réservée. La croissance des directions h1 0i de l’octaèdre se fait alors en utilisant la formule d’Ivantsov (équation 2.9) couplée au critère de stabilité marginale (équation 2.1). La température utilisée est interpolée au centre de la cellule comme c’est le cas dans la méthodologie CA originelle (section 3.1.2). Lorsque la longueur de la branche la plus longue de l’octaèdre (à cette étape elles devraient toutes avoir la même vitesse) est d’au moins dix fois la taille de maille minimale locale, des paraboles sont créées pour chaque sommet de l’octaèdre. Cela permet de s’assurer que l’on arrivera a suivre ces paraboles sur le maillage PTN puisqu’au moins quelques nœuds éléments finis seront contenus dans l’une d’elles. Afin d’initialiser les valeurs de rayons de courbures et de vitesses, les valeurs provenant du calcul d’Ivantsov sont utilisées. Ce sont les seules ayant un sens physique qui sont à disposition à ce moment dans le modèle proposé. Création d’un nouvel octaèdre lors de la capture

Lorsqu’un octaèdre qui a des paraboles actives capture une cellule voisine, celui-ci initialise un nouvel octaèdre (section 3.1.3). L’objectif étant de poursuivre la croissance d’un grain dans ses directions h1 0i, il faut aussi permettre cette continuité pour les paraboles. Pour cela, on identifie la branche de l’octaèdre capturant la cellule. La parabole associée est alors copiée puis assignée à l’intégralité des branches du nouvel octaèdre, indépendamment de leur taille. Ceci est illustré par la figure 3.5 (b). Ce qui n’est pas un problème car la parabole de l’octaèdre captureur est à priori bien représentée et le maillage PTN localement adapté (section 2.3.2).

Modification de la morphologie des paraboles

Au cours de la croissance, une parabole peut avoir un rayon de courbure très grand. Ce rayon de courbure peut devenir trop grand comparativement à la longueur des branches adjacentes, à la taille des cellules ou simplement la longueur de la branche. Dans ce cas, on peut avoir des problèmes géométriques et rien n’assure que ce rayon de courbure soit réellement physique. Ainsi, comme dans la section 2.3.1, si la vitesse d’une parabole devient quasi nulle car elle est en interaction solutale avec le bord ou une autre parabole, son rayon va devenir très grand. Pour pallier les problèmes de représentation que cela peut poser, on peut choisir d’imposer un cylindre pour tronquer la parabole (section 2.3.1). Pour l’instant, et malgré de nombreuses tentatives, aucune paramétrisation automatique (fonction des paramètres physiques et numériques) de ce rayon de cylindre satisfaisante n’a pu être trouvée et il est ajusté en dur dans le code pour chaque simulation et sa valeur est précisée pour chaque simulation. Le choix peut être éclairé par l’étude de l’influence de rcyl sur les résultats présentée section 2.3.3 et

figure 2.14. 62

(a) [1 0] [1 0] [0 1] [0 1] 1 (b) [1 0] [1 0] [0 1] [0 1] [0 1] [0 1] 1 (c) [1 0] [1 0] [0 1] [0 1] [0 1] [0 1] L[1 0] > 5ρ[1 0] (d) Créée et active

Créée mais inactive

Non créée (ρ → ∞)

1

Figure 3.5 – Illustration de la gestion des paraboles dans le couplage automate cellulaire - Parabolic Thick Needle.

(a) Chaque sommet de l’octaèdre se voit attribuer une parabole.

(b) Lors de la capture de la cellule centrale (verte) par la gauche (rouge), la parabole verte de la direction de capture [1 0] est créée et active. Les paraboles dans les directions adjacentes [0 1] et [0 1] sont créées mais non actives (pas de croissance, pas de condition de Dirichlet). La direction opposée à la direction de capture, ici [1 0], ne créée pas de parabole et ne sera jamais active.

(c) Lorsque la direction principale de l’octaèdre [1 0] atteint une longueur suffisante, les directions de croissances [0 1] et [0 1] sont activées. Les longueurs des branches [0 1] et [0 1] sont alors telles que les pointes se trouvent sur la parabole de la direction principale [1 0] dans cette situation.

Modification de la taille du domaine d’intégration

La taille du domaine d’intégration est imposée par un paramètre numérique a pré- senté au chapitre 2. Dans les différentes études de sensibilités effectuées, la branche dendritique considérée était toujours très grande devant la taille du domaine d’inté- gration (L >> a). Comme les paraboles sont à présent associées à des branches d’oc- taèdres, leur longueur est limitée. Il faut donc également majorer la taille du domaine d’intégration pour qu’elle conserve un sens physique. Pour cela, on impose simplement que la valeur effective maximale de a associée à une parabole soit égale à la longueur de la branche L. Le paramètre du modèle a est fixe pour une simulation mais la va- leur effectivement utilisée pour définir le cercle d’intégration est elle dépendante de la branche d’octaèdre concernée (et potentiellement bien plus faible que celle souhaitée initialement).

Désactivation de paraboles

Assez rapidement, le nombre de paraboles présentes dans le calcul va être grand. Ceci pose avant tout des problèmes numériques car le temps de calcul augmente, no- tamment parce que la complexité de l’algorithme de croissance dépendra du nombre de paraboles. Il est certain que, parmi ces paraboles, toutes ne sont pas utiles au calcul. Les critères pour désactiver des paraboles de la liste à considérer pour les calculs sont : Critère sur la longueur maximale d’une parabole Une direction h1 0i d’un octaèdre ayant capturé toutes ses cellules voisines possibles n’est plus utile au calcul. La croissance du grain dans ces directions est assurée car lors de la capture, cette direction de croissance est conservée. Analyser cette situation au cas par cas au cours de la simulation est au mieux complexe, au pire coûteux. On choisit donc d’utiliser une estimation géométrique de la longueur maximale qu’une pointe doit avoir pour capturer les cellules voisines : 2√2lCA(deux diagonales de cellules). Toutes les paraboles

ayant une longueur supérieure ou égale à cette dernière ne sont plus considérées dans les calculs de cinétique (section 3.2.3) mais sont toujours utilisées pour appliquer la condition de Dirichlet (section 3.2.4). Elles sont donc statiques dans la suite du calcul. Pointe croissant dans le solide Considérons la capture d’une cellule par une pointe de direction [1 0]. Dans le nouvel octaèdre créé, la pointe de direction opposée ([1 0]) est créée sur une branche déjà existante (celle qui a permis la capture), et va donc croître dans le solide comme représenté par la figure 3.5 (b) en trait discontinu vert. Pour éviter tout calcul inutile, cette pointe de direction [1 0] se voit attribuer un rayon de courbure de −∞ (en pratique la valeur maximale représentée par un double en C++ multipliée par -1) et une vitesse nulle. Tout calcul (de croissance ou la condition de Dirichlet) concernant cette parabole sera ensuite évité. Mais la mémoire est quand même allouée pour stocker un rayon de courbure et une vitesse bien que ces valeurs ne soient pas utilisées.

Branches secondaires La formation de branches secondaires derrière la branche primaire ne se produit qu’à partir d’une distance suffisante pour que le front solide soit déstabilisé (section 1.2.3 et [Cou05a ; Mel12]). Pour traduire ce phénomène, lors de la capture d’une cellule par la direction [1 0] d’un octaèdre, les paraboles adjacentes ([0 1] et [0 1]) ne sont pas activées, figure 3.5 (b) en traits pointillés verts. Cela est 64

fait simplement en leur attribuant un rayon de courbure valant − ρ[1 0] et une vitesse

nulle. Tant que les rayons de courbure sont négatifs, aucun calcul de croissance n’est effectué et elles ne sont pas considérées dans le calcul (que ce soit pour la croissance ou la condition de Dirichlet).

Ces pointes de directions [0 1] et [0 1] sont par la suite réactivées et réintégrées dans le calcul, figure 3.5 (c). Cela est simplement fait en changeant le signe du rayon de courbure et la vitesse initiale étant conservée nulle avant d’être recalculée au pas de temps suivant. Les longueurs des branches sont telles que les pointes se trouvent sur la branche parabolique principale au moment auquel la réactivation à lieu (ρt peut être différent du rayon de courbure au moment où la capture avait eu lieu ρcapt), sans

modifier les directions [0 1] et [0 1] de croissance, figure 3.5 (c). Elles sont ensuite traitées comme des paraboles quelconques et donc, leur vitesse sera calculée. C’est le champ de concentration en soluté qui permettra ou non leur croissance. La réactivation se produit quand la direction principale [1 0] atteint une longueur suffisante. Cette longueur est soit 5ρ[1 0], soit la longueur maximale possible d’une branche de parabole au cours

de la simulation (2√2lCA). Ceci permet également de ne pas gêner la croissance des

directions primaires par la création prématurée de secondaires.

3.2.3 Calcul des morphologies et des vitesses des paraboles

La croissance des octaèdres nécessite de calculer, pour chaque sommet auquel est associé une parabole active (ρ > 0) son « Flux Intensity Factor » (équation 2.6). L’approche « naïve » utilisée section 2.3 n’est plus employée car coûteuse. Elle est aussi complexe à mettre en place pour un grand nombre de paraboles. En effet, repé- rer chaque zone d’intégration à l’aide soit d’un booléen soit d’une level-set n’est pas envisageable. Sachant que ces zones peuvent se superposer, il faudrait un nombre de champs important, qu’il faudrait optimiser et transporter par la suite (level-set). Algorithme de calcul

Connaissant l’intégralité des paraboles actives et les champs éléments finis (com- position wt+∆t, champ d’appartenance aux paraboles δt

∈ parabole et température Tt+∆t,

ligne 1 de l’algorithme 1), on va parcourir l’ensemble des éléments (ligne 2). Pour chaque élément i, on cherche d’abord à savoir si celui-ci contient du liquide ou non. Cela est facilement fait en évaluant si aucun des nœuds de cet élément n’a servi à imposer une condition de Dirichlet au pas de temps précédent (champ d’appartenance aux paraboles δt

∈ parabole non nul). Si l’élément ne contient pas de liquide du tout, on

s’intéresse directement à l’élément suivant (ligne 4). Pour chaque parabole j, on calcule la distance de la pointe de la parabole aux nœuds de l’élément i. Si aucun nœud n’est dans la zone d’intégration de la parabole j, c’est à dire que la distance du nœud à la pointe de la parabole est supérieure au rayon du cercle d’intégration, alors on passe à la parabole suivante. Sinon, on vérifie s’il y a au moins un nœud de l’élément i qui est liquide (ligne 15). Ceci est fait en calculant les coordonnées du nœud dans le repère associé à la parabole puis en regardant s’il est contenu dans la parabole (dans le repère de la parabole, son équation s’écrit simplement y2+2ρ(x−L) = 0) ou non (ligne 13). Si

aucun nœud de cet élément i n’est liquide pour cette parabole, on passe à la parabole suivante. Ce test est redondant avec le test de la ligne 4 dans sa version actuelle. Mais une simple modification permettait dans les premiers stades du développement infor- matique de ce couplage de sélectionner ou non les éléments intersectés par la parabole. 65

Avec la condition actuelle ils sont sélectionnés. Si la condition était « tous les nœuds ne sont pas liquides », ces éléments intersectés par la parabole ne seraient pas inclus dans l’intégration. À partir de la ligne 17, il faut mener une intégration sur cet élément i pour la parabole j. Le gradient de composition de cet élément est alors calculé si ce n’était pas déjà fait. Il faut ensuite simplement distinguer si l’élément est sur le bord de la zone d’intégration (Γ ) ou dans la surface (Σ). La distinction est faite en regar- dant s’il existe des points d’intersection entre le cercle d’intégration de la parabole j et l’élément i. On calcule ensuite la contribution à l’intégrale déjà présentée auparavant (équation 2.6) mais modifiée pour simplifier l’implémentation :

F0 = 1 4√a(1 − k) w−1 ls Z Γ ∇w· n ΓdΓ +ZZ Σ 1 Dl vtip· ∇w dΣ  = √1 d0F (3.2)

La contribution de l’élément i à ce « Flux Intensity Factor » modifié (F0

ij) est ajou- tée à la contribution déjà calculée pour la parabole j (F0

j), ligne 32. On passe ensuite à la parabole suivante (indice j) puis à l’élément suivant (indice i). Une fois cela terminé, il suffit pour chaque pointe de finir le calcul du « Flux Intensity Factor » et d’en déduire les nouveaux rayons de courbures et les nouvelles vitesses. Pour cela, la température de chaque pointe de parabole est interpolée à l’aide d’un localisateur logarithmique qui permet de trouver l’élément du maillage PTN2. On peut donc finaliser le calcul des

différentes grandeurs physiques (composition interfaciale dans le liquide à l’équilibre thermodynamique wls et distance capillaire d

0) pour enfin calculer les nouveaux rayons

de courbure (ligne 41) et les nouvelles vitesses de pointes (ligne 42). Discussion de l’algorithme

La stratégie employée n’est pas optimale, notamment pour localiser les éléments sur lesquels il faut mener une intégration pour une parabole donnée. Elle est cependant satisfaisante comme démonstration de faisabilité de la méthode. Il est assez évident que la complexité est fonction de m × n avec m le nombre d’éléments et n le nombre de paraboles.

Stratégies d’amélioration du calcul déjà mis en œuvre Les stratégies d’amélio- rations les plus évidentes pour diminuer le temps de calcul sont de limiter le nombre de maille éléments finis et de diminuer le nombre de paraboles. La stratégie de diminution du nombre d’éléments a déjà été présentée 2.3.2. Il en est de même pour la réduction du nombre de paraboles (section 3.2.2).

Stratégies potentielle d’amélioration du calcul Il est possible d’optimiser les opérations faites au sein de l’algorithme. La difficulté principale, et le cœur de la méthodologie, est de localiser les éléments sur lesquels des calculs doivent être menés. Stratégie rapide L’algorithme actuel est naïf puisqu’on parcourt les éléments un par un, mais peut déjà être amélioré sans en changer le fonctionnement général. L’étape de calcul coûteuse qui est faite pour tous les éléments, indépendamment de la présence ou non d’une parabole, est le calcul de distance des nœuds à la parabole j (ligne 8). Cela peut être modifié en évitant de calculer une distance, même si on évite déjà dans l’implémentation actuelle le calcul d’une racine carrée. En comparant simplement les 66 2d’une cellule.Attention, il n’est plus question d’interpolation d’un champ de température au centre

1 Entrées : wt+∆t, Tt+∆t, δ∈ parabolet , paraboles 2 pour chaque élément i faire

3 si tous les nœuds de l’élément i sont solides ie δt

∈ parabole = 1 alors

4 itération suivante

5

6 pour chaque parabole j faire

7 pour chaque nœud k de l’élément i faire

8 d[k] ← distance du nœud k au sommet de la parabole j

9

10 si un nœud dans la zone d’intégration ie ∃k, d [k] 6 Rinteg parabole j alors 11 Mj→lab← changement de repère : de la parabole j au laboratoire

12 pour chaque nœud k de l’élément i faire

13 f[k] ← yrepère parabole j2 + 2ρj(xrepère parabole j − Lj)

14 si aucun nœud n’est liquide ie ∀k, f [k] < 0 alors

15 itération suivante

16

17 À partir d’ici, il faut mener des calculs d’intégration

18

19 si ∇wt+∆t n’a pas encore été calculé pour l’élément i alors

20 calcul de ∇wt+∆t

21 si au moins un nœud est hors de la zone d’intégration alors

22 il faut mener une intégration sur le contour Γ

23 nΓ normale au contour Γ

24 Calcul de la longueur de l’arc de cercle Γ

25 Fij0 ← ∇wt+∆t· nΓdΓ/(4√a)

26 sinon

27 il faut mener une intégration sur l’aire Σ

28 si l’aire de l’élément i n’a jamais été calculée alors

29 Ai ← aire de l’élément i ie dΣ 30 Fij0 ← ∇wt+∆t· Mj→labvtiptAi/  Dl4√a 31 32 Fj0 ← Fj0 + Fij0 33

34 pour chaque parabole j faire

35 Localisation de l’élément contenant la pointe de parabole j 36 Interpolation de Tjt+∆t, la température de la pointe j 37

38 wlsj ← (Tjt+∆t− TM)/m composition de l’interface solide/liquide (parabole

j)

39 d0j ← distance capillaire de la pointe j, fonction de wlsj

40 Fj0 ← −Fj0/(1 − k) wls 41 ρtj+δt←  d0j 2F0 2 j 1/3 42 vtiptj+δt← Dl 4σF0 4 j d0j 1/3 Algorithme 1 – Calcul de ρt+δt et v tipt+δt 67

valeurs des coordonnées (x, y) d’un nœud par rapport aux coordonnées de la pointe de la parabole, on peut estimer la distance du nœud à la pointe (et on dessine ainsi un carré ou un rectangle au lieu d’un cercle). On trie ainsi une grande partie des nœuds (donc des éléments) sans calcul supplémentaire. Les éléments ainsi retenus sont ensuite ré-analysés par la suite pour voir s’ils sont dans le cercle d’intégration ou non.

Cette simple amélioration concernerait un grand nombre d’éléments car pour une parabole, le nombre d’élément contenu dans la zone d’intégration par rapport au nombre total d’éléments est bien sûr minoritaire.

Stratégie avancée Une meilleure optimisation serait l’utilisation d’un algorithme de localisation utilisant un parcours d’arbres [Ber16]. Un tel algorithme (octree) est déjà utilisé pour trouver directement l’élément contenant la pointe et interpoler la tempéra- ture (ligne 41) car cet algorithme était déjà disponible dans le logiciel de calcul utilisé. Il ne permet cependant pas de retourner, pour l’instant, un ensemble d’éléments contenus dans une boîte (disque ou quadrilatère). Ajouter une fonctionnalité à l’outil existant ou développer un nouvel outil diminuerait considérablement le nombre d’opérations (com- plexité d’un parcours d’arbre en nlog(n) + O(n) [Ber16]) et donc le temps de calcul. Mais cela nécessiterait un travail numérique et de développement plus important.

3.2.4 Algorithme Dirichlet

Afin de calculer le champ de composition il faut, à partir de la liste des paraboles, déduire un champ nodal δ∈ parabole sur lequel une condition de Dirichlet sera appliquée.

Il faut également un champ nodal de composition tel que tous les nœuds d’une pa- rabole (et son cylindre associé) aient la même valeur wls, les pointes étant supposées

isosolutales et sans effet de courbure sur l’équilibre thermodynamique (voir chapitre 2). Algorithme de Dirichlet

L’algorithme utilisé est assez similaire à celui utilisé pour la croissance dans la mesure où il est, lui aussi, naïf et réutilise des fonctionnalités de l’autre méthodologie. Il nécessite aussi de connaître le champ élément finis nodal de température Tt+δt et toutes les paraboles (ligne 1 de l’algorithme 2). Les champs δt+δt

∈ parabole (présence d’une

parabole) et wt+δt (composition à imposer) sont mis à jour pour imposer la condition de Dirichlet au prochain pas de temps.

On recherche dans un premier temps les nœuds du maillage PTN sur lesquels il faut modifier ces champs. Pour cela, on parcourt tous les éléments i, et toutes les paraboles j. On cherche ensuite à savoir si chaque nœud de l’élément est contenu dans un disque de centre donné par le milieu de la branche parabolique (N sur la figure 3.6) et de rayon donné par q2ρjLj+ L2j/4 (figure 3.6), ligne 7, avec Lj et ρj respectivement la longueur et le rayon de courbure de la branche parabolique j. Cela est fait encore une fois à l’aide de calculs de distances (ligne 6). Puis, si un nœud est contenu dans ce disque, on calcule ses coordonnées dans le repère de la parabole pour vérifier s’il est à l’intérieur ou non (ligne 13). Si c’est le cas, le nœud est alors marqué en modifiant le champ nodal δt+δt

∈ parabole (ligne 15). Comme précédemment, on

repère ensuite la température de chaque pointe de parabole à l’aide d’un localisateur (ligne 18). Au début des développements, l’utilisation d’un localisateur n’était pas possible. C’est pour cela qu’on recherchait d’abord les éléments contenus dans un cercle, 68

cela évitait de chercher l’élément contenant la pointe (en calculant les coordonnées isoparamétriques de la pointe) parmi tous les éléments du domaine car ceci est très coûteux numériquement. À présent, l’algorithme pourrait être épuré. Enfin, tous les nœuds k du domaine sont parcourus. Si le champ nodal d’appartenance δt+δt

∈ parabole

associé au nœud k est non nul, l’indice de la parabole associée est identifié. À l’aide de