# Gibiane

Gibiane est un langage de programmation développé par le Commissariat à l’énergie atomique et aux énergies alternatives (CEA) au début des années 80 sur la base du langage Fortran 77. Ce langage est la base des codes de calcul neutronique déterministes APOLLO2 et CRONOS2. Il est également le code de base du logiciel de calcul par éléments finis Cast3M, également développé par le CEA.
Gibiane est un langage de haut niveau qui est interprété et orienté objet destiné au calcul éléments finis, agissant comme interface textuelle entre l'utilisateur et le code de calcul. Sa syntaxe a la particularité d'être exprimée en français. Soumis à diverses évolutions depuis sa création, Gibiane est aujourd'hui conforme à l'approche orientée objet de la normalisation UML.
L'objectif initial de la création de Gibiane est de supprimer la phase de programmation demandant à l'utilisateur un savoir-faire extérieur à son domaine d'activité pour qu'il se concentre sur la spécification du problème particulier à résoudre.

## Syntaxe

Les instructions élémentaires en Gibiane prennent la forme :
Chaque instruction se termine par un point-virgule « ; ».
Il est possible d'ajouter des lignes de commentaire en ajoutant le caractère étoile « * » en début de ligne.
Les commandes sont lues et exécutées ligne à ligne. La fin du programme est indiqué par la commande :
Gibiane est insensible à la casse des caractères, l'interpréteur remplaçant les minuscules par des majuscules. Les guillemets encadrant des caractères marquent la définition d’une chaîne de caractères à prendre sans modification.

### Priorité d'exécution

L’exécution des commandes s'effectue de gauche à droite. Ainsi la commande :
retourne la valeur X = 64.
Il est possible de préciser l’ordre d’exécution des commandes à l’aide de parenthèses.
retourne alors la valeur X = 43.
Il peut y avoir autant de parenthèses emboitées que nécessaires, la règle étant d’exécuter d’abord les parenthèses en commençant à chaque fois par la plus interne qui se trouve le plus à gauche.

### Limitations

* Le nom d’un objet ne peut pas faire plus de 24 caractères.
* L’instruction est lue et exécutée de gauche à droite sans notion de hiérarchie entre opérateurs.

## Opérateurs de base
### Opérateurs logiques de comparaison

L’opérateur « SI » permet, suivant la valeur d'un objet de type LOGIQUE d’exécuter une séquence une commandes ou une autre. Ainsi dans l'exemple ci dessous, lorsque « A » est égale à « B » la suite de commandes 1 s'exécute, sinon c'est la suite de commande 2 qui s'exécute.

### Boucles d'exécution répétitive

L’opérateur « REPETER » permet de définir une séquence de commandes à exécuter autant de fois que nécessaire. Dans l'exemple ci-dessous la suite de commande est répétée NFOIS.
L'opérateur « SI » peut être utilisé à l'intérieur d'une boucle « REPETER ».
A l’intérieur d’une séquence REPETER l’opérateur ITERER permet de créer des exceptions dans la boucle d'exécution en sautant la partie finale de la séquence.
produit les résultats :

## Principaux objets

* ENTIER : Nombre entier
* FLOTTANT : Nombre réel
* LISTENTI : Liste de nombres entiers
* LISTREEL : Liste de nombres réels
* MOT : Mot
* LOGIQUE : Objet logique
* LISTMOTS : Liste de mots
* TABLE : Groupe d'objets indexés par objets
* EVOLUTION : Représentation d'une fonction numérique
* NUAGE : Ensemble d'éléments

## Programmes utilisant Gibiane

* CAST3M, logiciel de calcul par la méthode des éléments finis pour la mécanique des structures et des fluides notamment utilisé dans le secteur de l’énergie nucléaire
* APOLLO2, un code de calcul spectral multigroupe à deux dimensions résolvant l’équation du transport des neutrons
* CRONOS2, un code de calcul à 3 dimensions utilisé pour la conception et l’expertise des cœurs des réacteurs nucléaires
* FLICA4, dédié aux calculs d’écoulements diphasiques pour des régimes aussi bien stationnaires que transitoires, pour rendre compte du comportement thermohydraulique des cœurs de réacteurs nucléaires
* ISAS (Integrated safety analysis code system), un programme pour les analyses de séquences accidentelles