Salome HOME
[EDF27816] : Get rid of SALOME session for 3 last tests (YacsLoader, YacsLoader_Swig...
[modules/yacs.git] / doc / compInterne.rst
index 107b22b0a29fb3b30530a945bf4001fcd934cd9e..97720ce26eb7c3c1a35f35b4661170a7e6a64ac8 100644 (file)
@@ -1,79 +1,56 @@
 
 .. _seccompinterne:
 
-Mise sous forme d'objet interne
+Defining an internal object
 ===============================
 
-.. index:: single: objet interne
+.. index:: single: internal object
 
-Dans la suite de ce document, on supposera qu'un **objet interne** est un
-**objet C++ ou python**   qui fournit une première interface au code initial.
-Suivant la forme du code initial (binaire exécutable, librairie statique  ou
-dynamique, fichiers sources f77, C, C++ ou python), cet objet aura  différentes
-formes et la communication objet interne --- code initial  sera différente.
+In the remainder of this document, it is assumed that an **internal object** is a **C++ or python object** that provides a 
+first interface to the initial code.  The form of this object and communication between the internal object and the 
+initial code will be different depending on the form of the initial code (executable binary, static or dynamic library, 
+f77, C, C++ or python source files).
 
-
-Méthodes et attributs de l'objet
+Object methods and attributes
 --------------------------------
+In each case, the services and the internal state of the internal object will have to be defined.  In particular:
 
-Dans chaque cas, il faudra définir les services et l'état interne   de l'objet
-interne. En particulier :
-
-* choisir les différents services de cet objet
-
-* pour chaque service, définir les données d'entrée et de sortie
-
-* pour chaque entrée et chaque sortie, définir le type de la donnée  et
-  éventuellement les pré-conditions et post-conditions associées  (par exemple,
-  donnée d'entrée positive)
-
-* définir l'état interne de l'objet et éventuellement sa valeur  avant et après
-  l'appel aux différents services
-
-Les **services** seront implémentés sous forme de **méthodes publiques**  et
-l'**état interne** sous forme d'**attributs**.    Si le concepteur de l'objet
-désire permettre à l'utilisateur d'accéder  en lecture/écriture aux attributs,
-il doit fournir des services accédant  à ces attributs.
-
-
-Routines fortran77/fonctions C/classes C++
-------------------------------------------
-
-
-Principe
-^^^^^^^^
-
-Dans le cas de routines fortran77, de fonctions C et de classes C++,
-l'intégrateur ajoutera simplement une enveloppe C++ autour de ces fonctions
-(voir figure :ref:`Objet interne C++ <figobjetinterne>`), pour obtenir l'objet interne.    Chaque
-méthode de l'objet
+* choose the different services of this object
+* for each service, define input and output data
+* for each input and each output, define the data type and possibly associated pre-conditions and post-conditions (for example positive input data)
+* define the internal state of the object and possibly its value before and after the call to different services.
 
-* extrait, si nécessaire, l'information des paramètres d'entrée,
+**Services** will be implemented in the form of **public methods** and the **internal state** will be implemented in the form of **attributes**.  
+If the designer of the object allows the user to access the attributes in read and write, he must provide services to access these attributes.
 
-* appelle la ou les routines internes concernées,
+Fortran77 routines / C functions / C++ classes 
+--------------------------------------------------
+Principle
+^^^^^^^^^^^
+In the case of Fortran77 routines, C functions and C++ classes, the integrator will simply add a C++ envelope around 
+these functions (see figure :ref:`C++ internal object<figobjetinterne>`), to obtain the internal object.  
+Each method in the object:
 
-* met en forme les résultats de ces routines internes dans  les paramètres de
-  sortie.
+- extracts information from the input parameters if necessary
+- calls the internal routine(s) concerned,
+- formats the results of these internal routines in the output parameters.
 
 .. _figobjetinterne:
 
 
 .. image:: images/objintcpp.png
-   :width: 54ex
    :align: center
 
-.. centered::
-   Objet interne C++
+.. centered:: C++ internal object
 
 
 .. _exemple1:
 
-Exemple 1
+Example 1
 ^^^^^^^^^
 
-Soient les routines fortran f77 suivantes effectuant des calculs d'algèbre
-linéaire sur des tableaux unidimensionnels de flottants :
 
+Consider the following f77 fortran routines performing linear algebra calculations on one dimensional floating tables:
 
 ``addvec.f``
 
@@ -86,23 +63,23 @@ linéaire sur des tableaux unidimensionnels de flottants :
 .. include:: ./exemples/exemple1/prdscl.f
    :literal:
 
-ainsi qu'une classe C++ simulant un type vecteur (très) rudimentaire :
+and a C++ class simulating a (very) rudimentary vector type:
 
 .. _vecteur.hxx:
 
 
-``vecteur.hxx (interface C++)``
+``vecteur.hxx (C++ interface)``
 
 .. include:: ./exemples/exemple1/exec2/vecteur.hxx
    :literal:
 
 
-``vecteur.cxx (implémentation C++)``
+``vecteur.cxx (C++ implementation)``
 
 .. include:: ./exemples/exemple1/exec2/vecteur.cxx
    :literal:
 
-L'objet interne (i.e. la classe C++) dans l'exemple est :
+The internal object (i.e. the C++ class) in the example is:
 
 
 ``alglin.hxx``
@@ -116,81 +93,61 @@ L'objet interne (i.e. la classe C++) dans l'exemple est :
 .. include:: ./exemples/exemple1/exec2/alglin.cxx
    :literal:
 
-**Remarques**
+**Notes**:
 
-  #. Le choix des méthodes, du passage des paramètres et de leur type, est  laissé
-     libre à l'intégrateur (conformément aux souhaits des utilisateurs  de l'objet).
-     La correspondance entre les paramètres de l'objet interne  et ceux des routines
-     du code initial est réalisée par l'implémentation (fichier  ``alglin.cxx``, ci-
-     avant).
+#. The integrator chooses methods, parameter transfers and parameter types (in accordance with the requirements of object users).  
+   The correspondence between parameters of the internal object and parameters of routines in the initial code is organised 
+   by the implementation (file ``alglin.cxx``, above).
+#. In particular, if MED structures [MED]_ are transferred as input arguments, the C++ implementation file will be required to extract 
+   and format information to be transferred to internal calculation routines (in the form of simple and scalar tables for internal 
+   fortran routines).  For output arguments in the MED format, the implementation will introduce the results of internal routines 
+   into the MED objects to be returned.
 
-  #. En particulier, si des structures MED [MED]_ sont passées en argument
-     d'entrée,   le fichier d'implémentation C++, sera chargé d'extraire et mettre en
-     forme les informations à passer aux routines de calcul internes  (sous forme de
-     tableaux simples et scalaires pour les routines  fortran internes).    Pour les
-     arguments de sortie au format MED, les résultats des routines  internes seront
-     introduites par l'implémentation dans les objets MED  à retourner.
+Note the following in the above example:
 
-Dans l'exemple ci-avant, remarquer :
-
-* la declaration ``extern "C"`` devant les prototypes en C++   des fonctions
-  fortran,
-
-* le caractère "underscore" ajouté au nom C++ des fonctions  fortran,
-
-* le mode de passage des arguments, la règle étant : sauf exceptions  (longueur
-  des chaînes de caractères), on passe des pointeurs. Pour les  arguments
-  scalaires, on passe l'adresse de ces scalaires; pour des  arguments pointeurs
-  (tableaux), on passe les pointeurs tels quels.
-
-L'objet interne  peut maintenant être utilisé dans un code C++ :
+* the ``“C” extern`` declaration in front of C++ prototypes of fortran functions
+* the “underscore” character added to the C++ name of fortran functions
+* the mode of transferring arguments, the rule being that pointers will be transferred apart from exceptions (length of 
+  character strings).  For scalar arguments, the addresses of the scalar arguments will be transferred;  for pointer 
+  arguments (tables), the pointers will be transferred as is.
 
+The internal object can now be used in a C++ code:
 
 .. include:: ./exemples/exemple1/exec2/main_extraits.cxx
    :literal:
 
 
-Références
+References
 ^^^^^^^^^^
+The C / fortran77 encapsulation in a C++ code follows the standard procedure (formats of reals / integers, 
+routine names, transfer of arguments).  For example, further information on this subject is given in [ForCpp]_ or [ForCpp2]_.
 
-L'encapsulation C/fortran77 dans un code C++ suit la procédure standard
-(formats des réels/entiers, nom des routines, passage des arguments).  A ce
-sujet, on pourra consulter, par exemple,   [ForCpp]_ ou [ForCpp2]_.
-
-
-Fonctions/Classes Python
+Python function/classes
 ------------------------
-
-
-Principe
-^^^^^^^^
-
-Le principe d'encapsulation de fonctions/classes python dans un   objet interne
-(python) est le même que dans le cas précédent.
+Principle
+^^^^^^^^^^
+The principle of encapsulation of python functions / classes in an internal object (python) is the same as in the previous case
 
   .. _figobjetinterne2:
 
 
   .. image:: images/objintpy.png
-     :width: 54ex
      :align: center
 
-  .. centered::
-     Objet interne python
+  .. centered:: Python internal object
 
 
-Exemple 2
+Example 2
 ^^^^^^^^^
 
-Un exemple similaire au précédent part de fonctions python à encapsuler :
-
+An example similar to the previous example starts from Python functions to be encapsulated:
 
 ``func.py``
 
 .. include:: ./exemples/exemple2/func.py
    :literal:
 
-Il est facile d'intégrer ces fonctions dans une classe python :
+It is easy to integrate these functions into a python class:
 
 
 ``compo.py``
@@ -198,139 +155,100 @@ Il est facile d'intégrer ces fonctions dans une classe python :
 .. include:: ./exemples/exemple2/compo.py
    :literal:
 
-**Remarque**
-  En fait, il n'est même pas nécessaire d'enrober les fonctions python de
-  ``func.py``, mais c'est plus "propre" (en particulier si  l'objet possède un
-  état interne).    Le script ci-après permet d'utiliser l'objet interne python
-  depuis un interpréteur python :
+**Note**:  
+  In fact, it is not even necessary to embed python functions of ``func.py``, but it is “cleaner” (particularly if 
+  the object has an internal state).  The following script uses the Python internal object from a python interpreter:
 
 .. include:: ./exemples/exemple2/exmpl.py
    :literal:
 
 
-Code initial sous forme d'exécutables
--------------------------------------
-
-
-Principe
-^^^^^^^^
-
-Ce cas se rencontre lorsqu'on ne dispose pas des sources du code interne  (ou
-lorsqu'on ne désire pas intégrer ces sources dans l'architecture  interne).
-On supposera que le code est sous forme d'un binaire exécutable par  le système
-d'exploitation.    Les communications avec le code peuvent se faire,
-
-1. en entrée, soit :
-
-   * par un ou plusieurs fichiers,
-   * par la ligne de commande,
-   * en répondant au clavier à des questions du code
+Initial code in the form of executables
+--------------------------------------------
+Principle
+^^^^^^^^^^
+This case occurs when there are no internal code sources (or when it is not required to integrate these sources 
+into the internal architecture).  It will be assumed that the code is in the form of a binary that can be executed 
+by the operating system.  Communications can be made with the code.
 
-2. en sortie, soit :
+1. In  input, either:
 
-   * par un ou plusieurs fichiers,
-   * à l'affichage écran.
+  - by one or several files,
+  - by the command line,
+  - using the keyboard to answer questions from the code 
 
-La communication avec les exécutables se fait à l'aide des commandes
-(disponibles en C++ et en python) :
+2. In output, either:
 
-* ``system`` : lancer un exécutable avec lequel on communique en entrée via
-  fichiers ou la ligne de commande, en sortie, via fichiers;
+  - by one or several files,
+  - on-screen display.
 
-* ``popen`` : mêmes fonctionnalités que le cas précédent, avec en plus la
-  possibilité de   récupérer la sortie standard (écran) de l'exécutable.
+Communication with executables is made using commands (available in C++ and in python):
 
-Les commandes ci-dessus sont rangées par ordre de complexité croissante (on
-conseille d'utiliser  autant que possible ``system``).
+- ``system``:  start an executable with which input communications are made through files or the command line, and 
+  output communications are made through files,
+- ``popen``:  same functions as the previous case, also with the possibility of retrieving the standard output (screen) 
+  for the executable.
 
+The above commands are stored in order of increasing complexity (it is recommended that ``system`` should be used as much as possible).
 
-Exemple 3 : Objet interne python, connecté à des exécutables externes.    
+Example 3:  Python internal object connected to external executables
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+It is required to use a “System” object that has 5 services:
 
+- ``cd``, that starts from a path (character string) and sets a current directory,
+- ``cp``, that starts from 2 file names, and copies the first file onto the second in the current directory,
+- ``touch``, that starts from a file name and updates the date of the file if there is one, and otherwise creates it,
+- ``rm``, that starts from a file name and destroys the file in the current directory,
+- ``dir``, that lists the files contained in the current directory.
 
-On désire utiliser
-un objet "Systeme" qui possède 5 services :
-
-* ``cd``, qui, à partir d'un chemin (chaîne de caractères), positionne  un
-  répertoire courant,
-
-* ``cp``, qui, à partir de 2 noms de fichiers, copie le premier  fichier sur le
-  second dans le répertoire courant;
-
-* ``touch``, qui, à partir d'un nom de fichier, met à jour la  date du fichier
-  s'il existe, le crée sinon;
-
-* ``rm``, qui, à partir d'un nom de fichier, détruit le fichier   dans le
-  répertoire courant;
-
-* ``dir``, qui liste les fichiers contenus dans le répertoire courant.
-
-L'état interne de l'objet sera constitué du nom du répertoire courant  dans
-lequel travailleront les services de l'objet  (qui est positionné  par le
-service ``cd``).    
-
-En python, la classe de l'objet pourrait s'écrire :
+The internal state of the object will be composed of the name of the current directory in which the services of the 
+object (that is set by the ``cd`` service) will work.
 
+In Python, the object class could be written:
 
 ``systeme.py``
 
 .. include:: ./exemples/exemple3/systeme.py
    :literal:
 
-et son utilisation depuis l'interpréteur python :
+and its use from the python interpreter:
 
 
 .. include:: ./exemples/exemple3/use.py
    :literal:
 
+**Notes**
 
-**Remarques**
-
-  #. Ceci est donné à titre d'exemple, python possède en standard  tout ce qu'il
-     faut pour rendre ces services, sans passer par des commandes  systèmes
-     (``system`` et ``popen``).
-
-  #. L'exemple illustre le passage d'arguments d'entrées par la ligne   de
-     commandes (noms passés en argument) et la "capture" des sorties écran  des
-     exécutables extérieurs (``system`` ne permet pas de récupérer simplement  la
-     sortie standard de la commande unix ``ls``, on utilise ``popen`` dans ce cas).
-
+#. This is given as an example, Python has everything necessary in the standard version to perform these services, without 
+   the use of system commands (``system`` and ``popen``).
+#. The example illustrates transfer of input arguments through the command line (names transferred as arguments) and the “capture” of 
+   screen outputs from external executables (``system`` that cannot simply recover the standard output from the unix command ``ls``, and 
+   in this case ``popen`` is used).
 
 .. _exemple4:
 
-Exemple 4 : Objet interne connecté à un exécutable externe.    
+Example 4:  Internal object connected to an external executable
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Cet exemple montre une
-interface (très) partielle d'un exécutable binaire *FreeFem* [FreeFem]_ sous la
-forme d'un objet C++. L'interface donne  accès à la définition d'une géométrie
-2D par sa frontière ainsi que la  résolution approchée d'une équation simple
-(convection forcée) sur cette géométrie.    Les différentes méthodes de l'objet
-interne sont :
-
-* une méthode qui enregistre la géométrie du domaine,
-
-* une méthode qui enregistre le champs de vitesse convectante,
+This example shows a (very) partial interface of a binary executable *FreeFem* [FreeFem]_ in the form of a C++ object.  
+The interface provides access to the definition of a 2D geometry through its boundary, and the approximate resolution of a 
+simple equation (forced convection) on this geometry.  The different methods of the internal object are:
 
-* la méthode de calcul qui reçoit la condition initiale (sous   forme analytique
-  --- chaîne de caractères), le pas de temps et le nombre  de pas de temps.
+- a method that records the geometry of the domain,
+- a method that records the convecting velocity fields,
+- the calculation method that receives the initial condition (in analytic form – character string), the time step and the number of time steps.
 
-L'état interne de l'objet est constitué de la géométrie et du champs  de
-vitesse.    La méthode de calcul crée un fichier à partir de ses paramètres et
-de  l'état interne, puis lance une boucle de calcul (par un appel système).
-Les résultats du calcul ne sont pas récupérés par l'objet.
+The internal state of the object is composed of the geometry and the velocity field.  
+The calculation method creates a file starting from its parameters and the internal state, and then starts a calculation 
+loop (by a system call).  The object does not recover the calculation results.
 
-**Remarques**
+**Comments**
 
-  #. Une encapsulation complète de FreeFem demanderait un effort beaucoup  plus
-     important, ceci n'est qu'un exemple.
+#. A complete encapsulation of FreeFem would require far too much effort, this is simply an example.
+#. We do not retrieve a result in the C++ object in this example (the change is only displayed by the FreeFem internal graphic 
+   engine).  If it was required to do so, it would be necessary to read the file produced by the external code after the system 
+   call, and transfer the results in a form that could be understood by the User of the internal object.
 
-  #. On ne récupère pas ici de résultat dans l'objet C++ (l'évolution  est
-     seulement visualisée par le moteur graphique interne de FreeFem).  Si on
-     désirait le faire, il faudrait après  l'appel système, relire le fichier produit
-     par le code externe, et  renvoyer les résultats sous forme compréhensible par
-     l'utilisateur  de l'objet interne
-
-Deux versions (C++ et python) sont listées ci-après.
+Two versions (C++ and python) are listed below.
 
 .. _freefem.hxx:
 
@@ -352,9 +270,7 @@ Deux versions (C++ et python) sont listées ci-après.
 .. include:: ./exemples/exemple4/FreeFem.py
    :literal:
 
-L'utilisation depuis un code C++ ou un interpréteur python est similaire  dans
-les 2 versions :
-
+Use from a C++ code or a python interpreter is similar in the 2 versions:
 
 ``version C++``