Utilisation par le développeur ============================== Dans la programmation, on évite d'utiliser des macros de très bas niveau. Par exemple, en C, on n'utilise jamais ASTER_INT_SIZE (le nombre d'octets utilisés pour un entier) mais le type associé. Et pour ce type, on n'utilise pas ASTERC_FORTRAN_INT mais le nom «interne»: INTEGER. De même en fortran, on n'utilise pas directement ASTER_INT_SIZE, mais les valeurs définies dans aster_types.h. Types à utiliser en C --------------------- On inclut le fichier d'entête général aster.h (qui inclus aster_depend.h). On a alors accès aux types pré-cités: INTEGER, INTEGER4, DOUBLE, REAL4, STRING_SIZE. Types à utiliser en Fortran --------------------------- On inclut le fichier d'entête aster_types.h qui définit: * aster_int_kind * aster_int ainsi que des fonctions de conversion to_aster_int. Des types et fonctions de conversion similaires sont définis: med_int, mpi_int, mumps_int, blas_int et donc to_mpi_int, etc. On prend soin d'utiliser ces types dans les fonctions qui échangent des données avec des bibliothèques externes. Gestion d'erreur et d'exception en C ------------------------------------ En fortran, on dispose de la macro ASSERT qui vérifie une condition et arrête en erreur quand celle-ci n'est pas vérifiée en indiquant le lieu dans le source. Pour émettre un message d'erreur en C, on utilise la macro MYABORT qui permet de lever une exception pour arrêter proprement le calcul. On émule dans le code C le mécanisme d'exception en s'appuyant sur les fonctions système setjmp et longjmp. L'écriture est simplifiée par l'utilisation des macros: try, except, exceptAll, endTry. Ainsi que raiseException et raiseExceptionString pour lever une exception. Voir le module aster_exceptions.c pour un exemple. Macros utilitaires en fortran ----------------------------- * ASSERT(condition): émet un message d'erreur si la condition n'est pas vérifiée en indiquant le nom du fichier et la ligne de code où la vérification a été faite. * TO_STRING(code): remplace code par une chaîne de caractères, utilisable dans d'autres macros (exemple dans ASSERT).