====== 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'' 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 3x3 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 --- //[[r_boman@yahoo.fr|Romain BOMAN]] 2008/10/24 10:08//