ABAQUS

Code éléments finis pour le calcul de structure.

La licence du code est de type commercial, il faut donc au préalable bénéficier de l'accès au serveur de licence pour effectuer les calculs, et dans ce cadre faire une demande auprès des administrateurs

Soumission par un script

Il est possible de lancer le code en utilisant un script de soumission si on souhaite avoir plus de possibilités concernant la gestion des paramètres de PBS :
Le script d'exemple permettant de lancer le code : run_abaqus.pbs: source:scripts/run_abaqus.pbs (voir https://forge.univ-poitiers.fr/projects/mesocentre-spin-git/repository/changes/scripts/run_abaqus.pbs?rev=master)

Pour lancer la commande :

[homer@thor]$ qsub run_abaqus.pbs
64120.thor

gestion des restart

  • prévoir d'écrire les données de restart dans un premier calcul :
    dans le fichier inp, il faut avoir la ligne *restart,write,frequency=X avec X différent de 0, et correspondant à la fréquence d'écriture des fichiers. On peut ajouter à la ligne le mot clé overlay pour écraser pour chaque incrément les fichiers.
  • utiliser un 2nd fichier avec pour seul ligne :
    *restart, read
    

Ce cas le plus simple permet de repartir du dernier instant du précédent calcul afin de continuer la simulation précédente. Voir la documentation abaqus pour les différentes possibilités supplémentaires (choix de l'incrément, ajout d'un nouveau step, conditions limites...).

Mettre cette ligne pour effectuer le calcul avec le restart (il faut utiliser le même nombre de processeur que le calcul précédent):

abaqus job=new oldjob=old  cpus=$NPCU interactive # > logfile 2>&1 

Gestion de la mémoire

La quantité de mémoire utilisée par abaqus doit être ajustée en fonction des calculs réalisées
(nombre de degrés de liberté, taille du maillage, nombre de variables internes) et de l’estimation
qu’abaqus réalise lors de la vérification du modèle (mot cla datacheck avec la commande
abaqus). Cette estimation est donnée dans le fichier .dat :

P R O B L E M S I Z E
NUMBER OF ELEMENTS IS 604992
NUMBER OF NODES IS 627901
NUMBER OF NODES DEFINED BY THE USER 627901
TOTAL NUMBER OF VARIABLES IN THE MODEL 1883701
(DEGREES OF FREEDOM PLUS ANY LAGRANGE MULTIPLIER VARIABLES)
....

M E M O R Y E S T I M A T E
PROCESS      FLOATING PT              MINIMUM  MEMORY     MEMORY TO
                   OPERATIONS               REQUIRED                    MINIMIZE I/O
                   PER ITERATION            (MBYTES)                     (MBYTES)
   1              5.25E+13                   5002                              45360
   2              3.51E+13                   4658                              37702
   3              3.16E+13                   4626                              35677
...
THE ANALYSIS HAS BEEN COMPLETED

Il est indiqué la taille minimale nécessaire au calcul (ici au moins 4Go sont nécessaires sur chaque
noeuds de calcul), et la taille nécessaire pour stocker le problème complètement en mémoire et ne pas
faire d'écriture disques (ici environ 35 Go pour chaque de calcul). Il faut donc s’assurer que le calcul
dispose d’assez de mémoire par processeur sur les noeuds de calcul.

A titre d’exemple, pour un calcul 3D avec des cubes uniformes, si le maillage est affiné d’un facteur
2 dans les 3 directions, dans le cas d’une méthode implicite, le temps de calcul est proportionnel
au carré du nombre de degré de liberté, soit dans notre cas de (2^3)^2. L’espace disque/mémoire
augmente de la même manière. l’augmentation du temps de calcul pour une méthode explicite sera
de 2^3 par l’augmentation du nombre d’éléments, et d’un facteur 2 par la diminution du pas de temps
lié à la plus petite dimension de l'élément fini, soit un facteur 2^4 au total.

calcul du nombre de jetons de licences

Abaqus calcul le nombre de jetons de licences utilisés pour un calcul en fonction du nombre de cpu (coeurs) : J = 5N^0.422
Lors de l'utilisation de la ligne de commande la ressource abq_lic est automatiquement ajoutée.
Dans le cas de la soumission par script, il est recommandé de renseigner cette variable en ayant calculé le nombre de jetons dans le fichier #PBS -l abq_lic=J
Un script permet de calculer le nombre de licences :

[homer@thor]$ which abaqus_licensing.py
/sw/tools/bin/abaqus_licensing.py
[homer@thor]$ abaqus_licensing.py -h
usage: abaqus_licensing.py [-h] [--proc PROC]

optional arguments:
  -h, --help            show this help message and exit
  --proc PROC, -p PROC  calculate number of tokens in function of requested
                        processors
[homer@thor]$ abaqus_licensing.py -p 160
42

Code d’erreur d’abaqus

Si abaqus plante en ne donnant aucun message d’erreur de convergence ou de problème dans le
préprocesseur, il génère un signal dans le fichier de sortie (*.log normalement ou *.oxxxx sur le
cluster) du type :


Abaqus Error: The executable standard.exe aborted with system error "Termination signal" (signal 9)."
Please check the .dat, .msg, and .sta files for error messages if the files
exist. If there are no error messages and you cannot resolve the problem,
please run the command "abaqus job=support information=support" to report and
save your system information. Use the same command to run Abaqus that you
used when the problem occurred. Please contact your local Simulia support
office and send them the input file, the file support.log which you just
created, the executable name, and the error code.
Abaqus /Analysis exited with errors

Les codes d’erreur peuvent être interprété en fonction du chiffre donne (cf la doc abaqus) :

  • 2 : SIGINT - The application received a keyboard interrupt. This signal is usually handle by terminating.
  • 4 : SIGILL - An Illegal Instruction was made.
  • 6 : SIGABORT - An unexpected error condition has caused the program to terminate itself.
    On rare occasions this error code may be thrown when the computer has run out of disk space.
    In this situation it is more often the case that a proper error message will be delivered.
  • 8 : SIGFPE - Floating point exception ; the code has attempted an invalid floating point operation.
  • 9 : SIGKILL - External job kill ; the operating system or the user has killed the job. This signal
    cannot be handled by the application, and no core dump will occur.
  • 7 or 10 : SIGBUS - Bus error ; sometimes caused by writing past the end of a local array in a
    user subroutine.
  • 11 : SIGSEGV - Segmentation fault or Illegal memory reference ; an error in which the program is
    attempting to access memory not allocated to it.
  • 13 : SIGPIPE - An error caused by an attempt to write to a pipe with no one to read it.
  • 15 : SIGTERM - The application recieved an external request to terminate.