3. Caractéristiques du système linéaire#
Un grand nombre d’opérateurs (STAT/DYNA/THER_NON_LINE, CALC_MODES, …) requièrent la construction et la résolution de systèmes linéaires. Pour résoudre ces systèmes d’équations, on utilise des algorithmes particuliers appelés « solveurs linéaires ». Ces solveurs linéaires sont en fait omniprésents dans le déroulement des opérateurs de Code_Aster car ils sont souvent employés par les algorithmes numériques : schéma non linéaire, intégration en temps, analyse modale etc. Ils en consomment la majeure partie du temps CPU et de la mémoire.
Nombre total de noeuds (N T ) =
physiques (N p ) + Lagranges (N L ) Par défaut (INFO=1), chaque commande trace, lors de la construction de son premier système linaire, ses caractéristiques : taille \(N\) , nombre de termes non nuls \(\mathit{NNZ}\) …
Nombre de noeuds tardifs (Lagranges):N L
Taille du système (ici en 2D isoparamétrique):
N=2N P +N L
— NOMBRE TOTAL DE NOEUDS : 1705 DONT :
1364 NOEUDS « LAGRANGE «
— NOMBRE TOTAL D’EQUATIONS : 2046
— TAILLE DU PROFIL MORSE DE LA TRIANGULAIRE SUPERIEURE (FORMAT SCR): 26652
— DONC LA TAILLE DE LA MATRICE EST:
— EN SYMETRIQUE NNZ = 26652
Nombre de termes non nuls de la matrice (“Number of Non Zero terms”) dans son stockage creux.
Ici, on a donc en moyenne, environ 26652/2046≈13 termes non nuls par ligne/colonne. — EN NON SYMETRIQUE NNZ= 51016
A ce niveau du calcul, on ne sait pas encore si la matrice est symétrique ou non. Donc, on mentionne les deux tailles de stockage possible:
partie triangulaire sup.
Idem + partie triangulaire inf. moins la diagonale.
Figure 3-a : Caractéristiques du système linéaire en cours d’assemblage dans une commande Aster type STAT_NON_LINE ou THER_LINEAIRE (extrait du .mess ).
La taille du système , la proportion de Lagranges et le remplissage de la matrice renseignent indirectement sur les consommations mémoires/CPU du calcul et sur d’éventuelles difficultés de résolutions.
A grands traits, la complexité algorithmique de la construction du système linéaire est en \(\mathit{NNZ}\) tandis que sa résolution en \({N}^{\alpha}.\mathit{NNZ}\) (avec \(1<\alpha <2\) ).
L’occupation mémoire totale est elle du type [2] \(\beta .\mathrm{NNZ}\) (avec \(10<\beta <100\) ) \(\times 8\mathit{octets}\) . Cette consommation mémoire regroupe plusieurs structures de données Aste r et/ou liées à des produits externes (MATR_ASSE, NUME_DDL, matrice factorisée…). Heureusement, ces structures de données se décomposent en plusieurs segments mémoires distincts et l’algorithmique n’impose pas leur présence simultanée en mémoire RAM. On peut ainsi souvent décharger sur disque une bonne partie de ces données.
D’autre part, l’introduction de variables de type Lagranges [3] dans les matrices (matrices dites alors dualisées) dégrade leurs propriétés numériques (taille, définie-positivité, conditionnement matriciel). Cela implique donc souvent plus de traitements numériques dans les solveurs et dégrade leurs performances. Cette remarque peut d’ailleurs s’étendre à tous les éléments finis mixtes (modélisation incompressible, méthode continue en contact…).
Remarques:
L’affichage des caractéristiques du problème (figure 3.1) n’est effectué qu’une seule fois, en début de commande. En général, ces caractéristiques ne changent pas en cours de calcul. Les seules exceptions concernent l’opérateur STAT_NON_LINEavec la méthode X-FEM en grand glissement ou la méthode continue en contact. Pour celles-ci, le profil de la matrice change au fur et à mesure des itérations.
Cet affichage s’effectue très tôt dans le processus, à l’issue de la création du profil de la matrice [4] Aster. L’assemblage des termes élémentaires n’est pas encore effectué [5]_ . C’est pour cette raison qu’on ne peut statuer, a priori, sur le caractère symétrique ou non de la matrice. En pratique, elle est très souvent symétrique et, lorsque ce n’est pas le cas, on peut la symétriser via l’option SOLVEUR/SYME .