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:
IF_ALP
⇒IF_ISO_ALP
(IF_ALP
désigne le tenseur de backstress en entier)IF_ALP
⇒IF_ISO_ALP
(IF_ALP
désigne le tenseur de backstress en entier)IF_DAMAGE_11
⇒IF_DAMAGE_XX
(pour respecter les autres notations de composantes de tenseurs)IF_SIG_XX_UPPER_SIDE
⇒IF_SIG_UPPER_SIDE_XX
(idem - à des fins d'uniformisation).
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
- Modif de
apps.ale.striction2Diso
qui s'amusait à strictionner du mauvais côté. - Nettoyage des classes ALE.
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