Table of Contents

Commit 2008-10-24

Modifs

ALE - Génération des problèmes de convection

Grâce aux derniers développements de ces dernières années, il est possible maintenant de générer plus facilement les problèmes de convection de ALE. J'ai donc remis les routines au goût du jour. Un gros problème actuellement est la lenteur de l'ALE. J'aimerais donc arriver à de bonnes perfs pour pouvoir montrer que l'ALE peut être utile pour économiser du temps de calcul sans bidouiller mes résultats comme l'avait fait récemment mon dernier stagiaire Arcelor.

Un truc assez simple est de diminuer le nombre de grandeurs convectées. Et ceci peut se faire de 2 manières:

Meilleur typage des ''InternalFields''

Depuis l'écriture initiale des routines, les matériaux anciennement 2D & 3D ont été fusionnés pour n'être plus que 3D. Il en résulte une convection de toutes les grandeurs même en 2D. Autrement dit, en 2D on convecte $\sigma_{xz}$. L'air de rien, ça fait, pour ce genre de tenseur, 1 valeur sur 2 qui ne sert à rien! On peut donc s'attendre à un bon gain CPU en supprimant ces convections de zéros.

Pour y arriver, il faut savoir déterminer de manière dynamique si une grandeur est 3D ou pas. Pour ce faire, on peut utiliser les nouvelles classes dérivées de BaseID<T> dont dérivent les InternalFieldIDs. On a besoin de savoir le type d'une grandeur donnée. Par exemple, pour $\sigma_{xz}$, savoir que c'est la composante 1,3 d'un tenseur 3×3 symétrique. Ce genre d'info existe déjà au niveau des NatureIDs. On peut savoir par exemple que TY est la composante 2 d'un Vect3 dont l'identifiant est TXTYTZ. J'ai donc d'abord voulu templatiser NatureID pour instancier une nouvelle hiérarchie de classes relatives aux InternalFieldIDs et puis, je me suis demandé si ça valait vraiment la peine de garder la séparation entre les dénominations des grandeurs aux points de Gauss et les grandeurs DB. Ma conclusion est que cette distinction n'a pas raison d'être: elle provoque même des ambiguïtes (la température est dénommée TO aux noeuds et IF_TEMP aux points de Gauss par exemple).

J'ai donc fusionné les NatureID, InternalFieldID et TdFieldID pour ne conserver que des NatureID.

En pratique, ça veut dire que les InternalFieldID et TdFieldID sont maintenant des ScalarNatureID.

Au niveau des noms des champs, j'ai dû modifier certaines grandeurs:

seuls TX,TY, TZ, RX, RY et RZ ne suivent pas la convention. (TX devrait être TXTYTZ_X mais ça me semble un peu long).

Il serait possible aussi de lier les tenseurs et leur déviateur et leur trace (autrement dit si on a un id qui vaut par exemple IF_SIG pouvoir faire id.getTraceID() pour récupérer IF_DEV_SIG de manière générique). C'est pas fait vu que j'en ai pas besoin.

Pour ce qui est des noms, j'ai laissé le préfixe IF_. Je sais pas s'il vaut meiux le garder ou non…

Pour l'ALE, je peux maintenant savoir si une composante d'un tenseur est 3D ou pas et donc décider automatiquement de la convecter ou pas. Dans la version actuelle, le 2D axisym est traité comme le 3D vu que $\sigma_{zz}$ doit être convecté (ou, au minimum recalculé à l'aide des autres composantes du déviateur des contraintes et de la pression).

Choix utilisateur

Parmi les grandeurs convectées, il existe des grandeurs qui ne sont pas toujours nécessaires. Par exemple, on peut décider de convecter le tenseur de transformation totale F qui permettra de recalculer les défos. Si on n'a pas besoin des défos, il est inutile de transférer ce tenseur puisqu'il ne sert pas au calcul des forces.

Dans d'autres cas, certaines grandeurs sont retournées par le matériaux IF_GRAIN_SIZE mais ne sont pas calculée (parce que le matériau est par exemple un simple “stupidmaterial” qui n'a pas de taille de grain comme variable interne).

On peut aussi parfois vouloir négliger un transfert de données (transfert des vitesses nodales par exemple) pour retrouver des résultats de la thèse de JPP.

Pour les 3 cas précédents, il est plus difficile de mettre en place une procédure automatique. J'ai donc ajouté une commande qui permet d'ignorer explicitement un champ. Par exemple:

region = ale.getConvectionStep().getRegion( interaction )
region.disable(IF_GRAIN_SIZE)

désactive le transfert des pierrepolades du matériau de l'interaction interaction.

Divers

Projet

Fichiers ajoutés/supprimés

mtKernel/InternalFieldID.cpp	deleted
mtKernel/InternalFieldIDList.cpp	deleted
mtKernel/InternalFieldIDs.cpp	deleted
mtKernel/TdFieldIDs.cpp	deleted
mtKernel/InternalFieldID.h	deleted
mtKernel/InternalFieldIDList.h	deleted
mtKernel/InternalFieldIDs.h	deleted
mtKernel/TdFieldIDs.h	deleted

Romain BOMAN 2008/10/24 10:08