<-----/|\------>  ./Help/File_Index
***************************************************************
***************************************************************
********* DOC DISPONIBLE EN LIGNE (cliquez la ligne) **********
********************************* (AEGIS et CETERM) ***********
***************************************************************

Dernieres Nouveautes dans:
$ZOOM/Help/Users/Proc/Proc_et_Derivateur                   PROC
$ZOOM/Help/Versions_futures/Futura_is_pro
$ZOOM/Help/Known_bugs

A l'affiche:
$ZOOM/Help/Users/Langages_tours_de_mains/Procedure_re_entrante NEW
zoom/Help/Users/General/Librairies_additionnelles              NEW

$ZOOM/Help/Users/00_New_User_Environment_Installation
$ZOOM/Help/Users/Graphics_and_post_treatment/Borel_util New VIZU
$ZOOM/Help/Users/Graphics_and_post_treatment/Gains_in_VIZU
$ZOOM/Help/Users/Graphics_and_post_treatment/Maps       New VIZU
$ZOOM/Help/Users/General/Execution_sur_Site_distant

                   Les codes de Nature : (prière de compléter)
$ZOOM/Help/Users/Proc/Proc_Nature.list                    PROC
$ZOOM/Help/Users/Proc/Tr_Grasp        (Liste de macros)   PROC
$ZOOM/Help/Users/Proc/Tr_flag_bits    (D_Mx,K_Tr bits)    PROC
$ZOOM/Help/Users/Proc/Cell_Grasp      (Liste de macros)   PROC

$ZOOM/Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study 
$ZOOM/Help/Users/Zinit/Tours_de_mains/Identification_Fit
$ZOOM/Help/Users/Ker_features/D_loop_simple

$ZOOM/Help/Users/Zinit/ZDL/Zdl.html                      ZINIT

$ZOOM/Help/Users/Combined_Facilities/Bank_desc.complete
$ZOOM/Help/Users/Combined_Facilities/Bank_desc.short
$ZOOM/Help/Users/Combined_Facilities/Print_levels    PROC ZINIT

$ZOOM/Help/Users/Proc/Vizu_Entry                     PROC New VIZU
$ZOOM/Help/Users/Proc/Easy_printing_facilities
$ZOOM/Help/Users/Proc/Proc_Getting_Started/Zget_start
$ZOOM/Help/Users/Proc/Vizualisation_of_parameters
$ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc *PROC*

$ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ
$ZOOM/Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93
$ZOOM/Help/Users/Upgrades/SkipRead_Loops             PROC
$ZOOM/Help/Users/Upgrades/Upgrading_Symbols_04_93    PROC

                                                     VIZU kumacs : y voir
$ZOOM/Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/tslice.kumac

$ZOOM/Help/Programmers/Ker/Ker_Subroutines_CMZTree
$ZOOM/Help/Programmers/Ker/Status_bits
$ZOOM/Help/Programmers/Ker/D_Loop
$ZOOM/Help/Programmers/Ker/K_Tr_and_D_Loop
$ZOOM/Help/Programmers/Ker/D_flag_et_appel_des_Tr
$ZOOM/Help/Programmers/Macros_comprehension_des/Chemins_banks
$ZOOM/Help/Programmers/Mortran/mtn_errors_list

$ZOOM/Help/Programmers/Upgrades/Installation

$ZOOM/Help/Suggestions
$ZOOM/Help/Versions_futures/Versions_prochaines 
$ZOOM/Help/Versions_futures/pre_Futura_is_pro
$ZOOM/Help/Versions_futures/Futura 

$ZOOM/Help/Users/General/Mortran_manual
$ZOOM/Help/Users/General/Mortran_standard_Macros

$ZOOM/Help/Users/Graphics_and_post_treatment/Gains_Systematiques

***************************************************************
*********** Cette liste n'est pas exhaustive > y aller ! ******
*********** ( sous Apollo,on peut faire:  dir ... ) ***********
***************************************************************

<-----/|\------>  ./Help/File_Index.bak
***************************************************************
***************************************************************
********* DOC DISPONIBLE EN LIGNE (cliquez la ligne) **********
********************************* (AEGIS et CETERM) ***********
***************************************************************

Dernieres Nouveautes dans:
/zoom/Help/Users/Proc/Proc_et_Derivateur                   PROC
/zoom/Help/Versions_futures/Futura_is_pro
/zoom/Help/Known_bugs

A l'affiche:
/zoom/Help/Users/Langages_tours_de_mains/Procedure_re_entrante NEW
zoom/Help/Users/General/Librairies_additionnelles              NEW

/zoom/Help/Users/00_New_User_Environment_Installation
/zoom/Help/Users/Graphics_and_post_treatment/Borel_util New VIZU
/zoom/Help/Users/Graphics_and_post_treatment/Gains_in_VIZU
/zoom/Help/Users/Graphics_and_post_treatment/Maps       New VIZU
/zoom/Help/Users/General/Execution_sur_Site_distant

                   Les codes de Nature : (prière de compléter)
/zoom/Help/Users/Proc/Proc_Nature.list                    PROC
/zoom/Help/Users/Proc/Tr_Grasp        (Liste de macros)   PROC
/zoom/Help/Users/Proc/Tr_flag_bits    (D_Mx,K_Tr bits)    PROC
/zoom/Help/Users/Proc/Cell_Grasp      (Liste de macros)   PROC

/zoom/Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study 
/zoom/Help/Users/Zinit/Tours_de_mains/Identification_Fit
/zoom/Help/Users/Ker_features/D_loop_simple

/zoom/Help/Users/Zinit/ZDL/Zdl.html                      ZINIT

/zoom/Help/Users/Combined_Facilities/Bank_desc.complete
/zoom/Help/Users/Combined_Facilities/Bank_desc.short
/zoom/Help/Users/Combined_Facilities/Print_levels    PROC ZINIT

/zoom/Help/Users/Proc/Vizu_Entry                     PROC New VIZU
/zoom/Help/Users/Proc/Easy_printing_facilities
/zoom/Help/Users/Proc/Proc_Getting_Started/Zget_start
/zoom/Help/Users/Proc/Vizualisation_of_parameters
/zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc *PROC*

/zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ
/zoom/Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93
/zoom/Help/Users/Upgrades/SkipRead_Loops             PROC
/zoom/Help/Users/Upgrades/Upgrading_Symbols_04_93    PROC

                                                     VIZU kumacs : y voir
/zoom/Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/tslice.kumac

/zoom/Help/Programmers/Ker/Ker_Subroutines_CMZTree
/zoom/Help/Programmers/Ker/Status_bits
/zoom/Help/Programmers/Ker/D_Loop
/zoom/Help/Programmers/Ker/K_Tr_and_D_Loop
/zoom/Help/Programmers/Ker/D_flag_et_appel_des_Tr
/zoom/Help/Programmers/Macros_comprehension_des/Chemins_banks
/zoom/Help/Programmers/Mortran/mtn_errors_list

/zoom/Help/Programmers/Upgrades/Installation

/zoom/Help/Suggestions
/zoom/Help/Versions_futures/Versions_prochaines 
/zoom/Help/Versions_futures/pre_Futura_is_pro
/zoom/Help/Versions_futures/Futura 

/zoom/Help/Users/General/Mortran_manual
/zoom/Help/Users/General/Mortran_standard_Macros

/zoom/Help/Users/Graphics_and_post_treatment/Gains_Systematiques

***************************************************************
*********** Cette liste n'est pas exhaustive > y aller ! ******
*********** ( sous Apollo,on peut faire:  dir ... ) ***********
***************************************************************

<-----/|\------>  ./Help/File_Index.bak1
***************************************************************
***************************************************************
********* DOC DISPONIBLE EN LIGNE (cliquez la ligne) **********
********************************* (AEGIS et CETERM) ***********
***************************************************************

Dernieres Nouveautes dans:
/zoom/Help/Versions_futures/Futura_is_pro
/zoom/Help/Known_bugs

A l'affiche:
/zoom/Help/Users/Langages_tours_de_mains/Procedure_re_entrante NEW

/zoom/Help/Users/00_New_User_Environment_Installation
/zoom/Help/Users/Graphics_and_post_treatment/Borel_util New VIZU
/zoom/Help/Users/Graphics_and_post_treatment/Gains_in_VIZU
/zoom/Help/Users/Graphics_and_post_treatment/Maps       New VIZU
/zoom/Help/Users/General/Execution_sur_Site_distant

                   Les codes de Nature : (prière de compléter)
/zoom/Help/Users/Proc/Proc_Nature.list                    PROC
/zoom/Help/Users/Proc/Tr_Grasp        (Liste de macros)   PROC
/zoom/Help/Users/Proc/Tr_flag_bits    (D_Mx,K_Tr bits)    PROC
/zoom/Help/Users/Proc/Cell_Grasp      (Liste de macros)   PROC

/zoom/Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study 
/zoom/Help/Users/Zinit/Tours_de_mains/Identification_Fit
/zoom/Help/Users/Ker_features/D_loop_simple

/zoom/Help/Users/Zinit/ZDL/Zdl.html                      ZINIT

/zoom/Help/Users/Combined_Facilities/Bank_desc.complete
/zoom/Help/Users/Combined_Facilities/Bank_desc.short
/zoom/Help/Users/Combined_Facilities/Print_levels    PROC ZINIT

/zoom/Help/Users/Proc/Vizu_Entry                     PROC New VIZU
/zoom/Help/Users/Proc/Easy_printing_facilities
/zoom/Help/Users/Proc/Proc_Getting_Started/Zget_start
/zoom/Help/Users/Proc/Vizualisation_of_parameters
/zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc PROC

/zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ
/zoom/Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93
/zoom/Help/Users/Upgrades/SkipRead_Loops             PROC
/zoom/Help/Users/Upgrades/Upgrading_Symbols_04_93    PROC

                                                     VIZU kumacs : y voir
/zoom/Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/tslice.kumac

/zoom/Help/Programmers/Ker/Ker_Subroutines_CMZTree
/zoom/Help/Programmers/Ker/Status_bits
/zoom/Help/Programmers/Ker/D_Loop
/zoom/Help/Programmers/Ker/K_Tr_and_D_Loop
/zoom/Help/Programmers/Ker/D_flag_et_appel_des_Tr
/zoom/Help/Programmers/Macros_comprehension_des/Chemins_banks
/zoom/Help/Programmers/Mortran/mtn_errors_list

/zoom/Help/Programmers/Upgrades/Installation

/zoom/Help/Suggestions
/zoom/Help/Versions_futures/Versions_prochaines 
/zoom/Help/Versions_futures/pre_Futura_is_pro
/zoom/Help/Versions_futures/Futura 

/zoom/Help/Users/General/Mortran_manual
/zoom/Help/Users/General/Mortran_standard_Macros

/zoom/Help/Users/Graphics_and_post_treatment/Gains_Systematiques

***************************************************************
*********** Cette liste n'est pas exhaustive > y aller ! ******
*********** ( sous Apollo,on peut faire:  dir ... ) ***********
***************************************************************

<-----/|\------>  ./Help/Gains_in_Vizu.proposal
###################################################################
###################################################################
########## Cogitations pour les Gains dans VIZU ###################
###################################################################
###################################################################

[Remarque sur le développement : penser aux analyses à t en dT !!!]
[Penser aussi a l'intérêt d'utiliser les n-tuples]

Menus :
+++++++
L'intégration des Gains systématiques à-la-stb nous fait
 envisager une modification des menus VIZU/Zeus/Matrix :

Menu sous Zeus : Matrix[Help : produces a pad with matrix info : list of Tr.]
suivants :       Matrix  :
                 Matrix/Definition : Keywrds : status : restart or iterate
                                               list of raw to keep
                                                       col
                                               triplet  First Inc, Inc, Nbr of INc
                                               submatrix : sub cplg 
!!! Rq Faut-il imaginer une sous matrice construite par des moyennes de coefs ?

                 Matrix/Analysis :
                                /Algebraic    : eig, normalisation diag a 1,+tard RouthHurwitz...?
                                /Gains        : Sub-List of component[s]
                                              : time dependance : dtime,time,hist,inc
                                              : type :SubGains,OneVersusList,Hierarchical,Cumul
cf end of Help for progression.

MXMX :
++++++
Voir aussi comment recuperer l'info sur la liste des TR sous Zeus dans VIZU.
Ainsi que le reperage des K_Tr => Mx-I pour gain de precision.
La passe-t-on en binaire ? OZMX.Zeus, OZMD.Zeus.

Options nouvelles souhaitées :
++++++++++++++++++++++++++++++ 

I - Timbres postes format .   List of comp. to output. Mx (Time, hist, dTime, ITime)
          |-------------------------|
          | \                       |
          |   \                     | ==> Gains (cad sous matrices de gains) 
          |     \                   |
          |       \                 |     pour les Tr choisis.
          |         \               |
          |           \             |
          |             \           |
          |               \         |
     J->  |    [ ]          \       |                                           [SubG]
          |                   \     |
          |                     \   |
          |---------------------- \ |
            ^    I
            L-> sous-gains, cad gains de la sous matrice (List of comp. to output)
   => on a ainsi l'accroissement des gains dus a l'elimination.

II - gains d'un Tr versus les autres de la liste (dans l'ordre de la liste (Monitoring List)).
     (Hovmuller plot en Time ou dTime)                                          [OneVList]

III- une liste de couples de Tr ordonnés en fonction du gain des couples
     1D (listes de chaque instant du default)  ou 2D(?). cf PAW facilities.     [Hierarch]

IV-  Sous gains cumules en éliminant un à un chaque  nouveau Tr de la liste
     ex : gain entre (7.2) quand on elimine ceux de la liste 1-8.14.6
     Hovmuller plot en time ou dTime.
    Rq inversement, couplages du couple.                                        [Cumul]

jeudi 19/01/1995
===============(Al1)
=========== Provisionnal KUIP Tree Menu for Futura ==========
>MENU Matrix                                                  
>GUIDANCE                                                   
Zeus coupling matrix package
The Zeus coupling matrix.
 results from  152 transfer interfaces.
 (then produces Tr info pad)
General keywords :
 List of components to KEEP => kept in square Mx.
 List of * to OUTPUT => cols or raws to plot.
         [Raw to output]=space => same as list above.
>COMMAND Definition
>GUIDANCE
Definition of root matrix for subsequent analyses.
It may re-define a new root from preceding one(Iterate)
or from ker output file Mx(Restart).
.
The components ordinal are always the one of the Zeus_Mx original
matrix (defined in ZINIT).
.
ex of valid list : 1-3.6.12-10 := 1.2.3.6.12.11.10
.
Raw to output=space => same as column list.
>PARAMETERS
STATS 'Restart from file or Iterate' C D='Restart' R='Restart,Iterate'
NCLIS 'List of Components to keep' C D='1-5'         => goes to root Mx for subsequent
NRLIS 'List of Raws to output' C D='1-5'     (local graphic)                treatment.
SRTMX 'Matrix' C D='SUB' R='SUB,CPLG'          if SUB, vizu prints Attention SUB Matrix analysis
INCNB   'Start Inc #'   I D=1                                   
INCST   'Inc Step'   I D=1                                      
NBINC   '# of Inc (Max=100)'   I D=0
SrtOPT 'Option(local)' C D='(t)' R='(t),histo,(it)'                    
>ACTION SORTMX

>MENU Analysis
>GUIDANCE
Provided types of analysis. References.

>COMMAND Algebraic
>GUIDANCE                                                   
.
The components ordinal are the one of the Zeus_Mx original
matrix (defined from ZINIT).
.
ex of valid list : 1-3.6.12-10 := 1.2.3.6.12.11.10
.
Raw to output=space => same as column list.
.
Rq : the root Mx is changed only from ../Definition.
>PARAMETERS                                                 
NCLIS 'List of Components to analyse' C D='1-5' 
NRLIS 'List of Raws to output' C D='1-5'                        
SRTMX 'Matrix' C D='SUB' R='SUB,CPLG,EIG-SUB,EIG-CPLG'          
SrtOPT 'Option' C D='(t)' R='(t),histo,(it)'                    
>ACTION SORTMX                                              

>COMMAND Gains
>GUIDANCE
ex of valid list : 1-3.6.12-10 := 1.2.3.6.12.11.10
.
Raw to output=space => same as column list.

Rq : the root Mx is changed only from ../Definition.
>PARAMETERS                                                 
NCLIS 'Monitoring List of Components' C D='1-5' 
NRLIS 'List of Raws to output' C D='1-5'                        
SRTMX 'Matrix' C D='SubG' R='SubG,OneVList,Hierarch,Cumul'          
SrtOPT 'Option' C D='(t)' R='(t),histo,(it)'                    
>ACTION SORTMX                                              

===========================================================
====   Avancement des Travaux pour VIZU Futura ============
===========================================================

Premiere phase : (Meme Kuip Tree Menu)
  1.1) Meme traitement preFut mais en utilisant Zebra.
       sources PAW /cern/pro/src/cmz +> paw.cmz
  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.

Deuxieme phase : (New Kuip Tree Menu)
  2.1) Definition et Algebraic action routines
  2.2) Gains. Options progressivement.

Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.

<-----/|\------>  ./Help/Historique_Devlpmt
****************************************************************************
****************************************************************************
******** Pour connaitre les developpements d'une version a l'autre *********
****************************************************************************
****************************************************************************
(le meta symbole | invite a cliquer le groupement lui succedant).
                  +++++++++++++++++++
                  +++++++ ZDL +++++++
                  +++++++++++++++++++
Resume from call Oresume et Ogain.
                  +++++++++++++++++++
                  ++++ ZBM & alias ++
                  +++++++++++++++++++
SV_Nb
    read thru CX(LCX) (JCx=1,*)
    < 
      Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 cf description complete a la fin de :
|  $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
Z_Pr_lvl(n,LLL)
Z_Pr/blabla/:...;
Dérivateur
                  +++++++++++++++++++
                  ++++ Macros génés +
                  +++++++++++++++++++
if
Dérivateur
                  +++++++++++++++++++
                  +++++ Utilities +++
                  +++++++++++++++++++
O_Eta_Eta OAlpha et G0Fact
                  +++++++++++++++++++
                  +++ Installations +
                  +++++++++++++++++++
liste
                  +++++++++++++++++++
                  ++++++ VIZU +++++++
                  +++++++++++++++++++
vendredi 06/01/1995
==================(Al1) already in dev.
 VIZU : includes dTime vector along with Time.
        ( rec len management has been changed )
        Allows thru /ZEUS/DEFAULT to change the sery of input data files
        OZDAT and OZPAR with the only mod of 'Z' in names.
        [ OZOUT.MP has to be kept. ]
        New Help in Matrix command to specify valid list formats);
        (Propagated to pro).
Rq : An additionnal flag header on data files makes VIZU to stay retro-compatible.
     ( But no possibility of Resume from a different version )
$ZOOM.dir/Help/Users/Proc/Vizu_Entry (lundi 31/07/1995)

KUIP tree menu incorporant les menus futurs pour |  Gains_in_Vizu.proposal
                  +++++++++++++++++++
                  +++++++ TEF +++++++
                  +++++++++++++++++++
             * Les PseudoK_Tr dependent d'autres transferts, sans
               reciprocite : on les appelle en dernier dans la D_loop.
              [Set Pseudo1_K_Tr flag; ou Set K1_Tr flag;
               Set Pseudo2_K_Tr flag; ou Set K2_Tr flag;]
Amelioration de l'algorithme des Matrices D
                  +++++++++++++++++++
                  +++++++ KER +++++++
                  +++++++++++++++++++
 IMPORTANT : Si vous utilisez des transferts cumules, ajouter dans le
 Zinit_Entry  Set Cumulated_Tr flag;  ou 
              Set Cum_Tr flag;

 Modifs Ker :* A la fin du step advance, apres impressions,
               Fiz = Fi+dFi pour les non Cumulated_Tr;
               (consequence : meilleur dev before entering D_loop)
               Pour les Pseudo_Cell Tr [ set Pseudo_Cell flag; ou
               set Ps_Cl flag; ] Fi=Fiz=Fi+dFi;
 KER : Provisional new Entry in Tr processors as : D_Entry.
       F_Entry will be used to computes Fi [and parameters].
       D_Entry to determine D_Mx for the D_loop
       T_Entry will then be devoted to Ct_SV matrices only.
       Rqs : Another D_Mx can then be computed in the T_Entry.
             A tentative to grasp Ct_SV within the T_Entry sequence results
             in an execution error.
 !!! It is recommended to User to include slowly a dummy D_entry in Tr procs.

jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''              .(cf | Pre_Futura)
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.
 cf | $ZOOM/Help/Versions_futures/Versions_prochaines 

New macro used locally in Ker :
  Deck OTRDA                           
    &'ELEMENTARY(#)'='(LQ(#1-0_(#1.FM).Nxt_lvl_Ad).LE.0)' => if Elementary(LFM)<
    &';UNDER #(#)<'=';FROM #1(#2)<'                             Pour tenter JYG.
    &'DOWN(#)'='LQ(#1-0_(#1.FM).Nxt_lvl_Ad)' (not included in ZBMKEEP)
  Deck OPDFI                           
    &'NEXT(#)'='LQ((#1)+ONX)'              pour pvr ecrire Next(@Fiz(0)) par ex.

===========================================================
====   Avancement des Travaux pour VIZU Futura ============ 1995
===========================================================

Premiere phase : (Meme Kuip Tree Menu)
  1.1) Meme traitement preFut mais en utilisant Zebra.
       sources PAW /cern/pro/src/cmz +> paw.cmz
  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.
                                                           23/3/98 :
Deuxieme phase : (New Kuip Tree Menu)                      (etat des lieux a faire)
  2.1) Definition et Algebraic action routines                      Al1
  2.2) Gains. Options progressivement.

Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.

vendredi 11/10/1996 (Futura)
=================(Al1)
 Partie Bug for Futura :
OIXFAD,OCIC abondent les IF de la liste des LTr
ONTRIX - appele par OFRAME - parcourt l'arbre des IN (emule de ZOOM 3) et
en deduit la permutation IF / Up IX (ou IN).

Changement officiel : Bug est denommé : clubberred connections

Rq : les MZPUSH coutent tres cher : on declenche le Declubbering lourd par
Zinit : OZPLVL(10) = 2;


jeudi 14/11/1996
==============(Al1)
 Flag dans /ITER/ kerTFD qui prendra les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futura
 de la navette. cf $ZOOM/Help/Versions_futures/Futura  <

Mardi 31/12/1996
===============(Al1)
 Bug for retrieving Lo_Diag_Tr in OPDFI et OT2HLZ
(did not point on Tr component)
=> mac : Grasp Array Fi_Diag(LTR) [must be preceded by a Grasp Fi]
 cf $ZOOM/Help/Versions_futures/Versions_prochaines
lundi 30/12/1996
===============(Al1)
 ORESUME : implementation de IO2JO * JOFROZ; Le composantes gelées des Tr
ne sont pas initialisees par ORESUME. (Modifs de Conditions Limites)
En fait des que IO2JO on gele toutes les composantes, car les S_Entries ne
sont appellé qu'apres ORESUME. Les composantes non-gelées doivent de toute
manière etre calculées alors.

jeudi 30/01/1997
===============(Al1)
OT2CMF addition de >Fortran Call okutil, qui genere un menu zoom_util
cf vizu

************************************************************************
*************  Nouveaux C-Plug Name et Code ****************************
************************************************* {mardi 21/01/1997 Al1}
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactees
  cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< dans 'FUTURA adds'

************************************************************************
*************  Nouvelle declaration des Description banks **************
******************* Var_linked ***************************************** 
********************************************** {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV,Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir acces a ses composantes designees par
un indice supplementaire ex : Fi_Proc_TV(k/kCx) donee la valeur de la i eme
composante du Fi_TV linké sur Fi_Proc_TV(2); les verifications standard de
bornes d'indice sont effectuees sur k;

 cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED paragraph 

jeudi 17/04/1997
===============(Al1)
beginning variable mesh treatment : MAPCL => MAPPLE T=TEXT
vendredi 26/09/1997 : LOWLIB/OZVARIT etend le map initial le mieux ppossible
et fait les interpolations (pour le moment lineaires)
LOWLIB/OZVAPIT = OZMAPIT mais en modifiant les arguments.
il faut en faire autant avec OZFLECHIT et standardiser OZVAPIT en remplacement
de OZMAPIT. Compiles OK. Ker OT2CMF ok.
rentrer MAPPLE => MAPCL et debugger.
************************************************************************
************* Variable Mesh Facilities and maps ************************
********************************************** {Lundi 27/10/1997 Al1}
cf $ZOOM/Help/Users/Graphics_and_post_treatment/Maps <<< 

lundi 28/07/1997
===============(Al1)
 debug de la refonte MTN : IF ELSEIF avec liste = con1,cond2 etc
 ajout de  Z_Pr_Error_Cl(LCL):'BlaBla';

 option .eq.Face-* implementee dans le SKIP THRU< standard - comme les /.

jeudi 29/01/1998
===============(Al1)
 z_pr, z_pad etc dans ZDL.

mercredi 05/08/1998
===============(Al1)
Futura feature pour la connection directe de Transfert a Transferts.
Name Tr as: Conv; ou Heat(1); recup par Get Tr Conv;
ATTENTION : comme pour les objets, ces symboles sont case sensiive;
OCRE : creation de routines pour gerer le Name Tr as: xxx; et get Tr xxx;
 avec les mac correspondantes. Test dans hamb/zinit. Help a jour.
vendredi 14/08/1998
=================(Al1 pour Futura))
Connections directes TR a TR.
OGCXTV est apelle de OGV lui meme de Zinit; C'est la routine qui cree les TV
a partir de la table TPG et fait les liens des CX sous la CXT table. On ajoute
un test sur les TV exclusivement connectes aux IODITR CX qui sont alors flagges.
mercredi 17/02/1999
=================(Al1)
Vizu : Borel_fit dans Zoom_util et Help.






************************************************************************
************* D E B U G G I N G ****************************************
************************************************************************
lundi 26/08/1996
===============(Al1)
 Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
Mardi 31/12/1996
===============(Al1)
 Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
Mardi 31/12/96
============(Al1)
 OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
Grasp Array Fi_Diag(LTR);
lundi 16/11/1998
==============(Al1)
 OILUN initialisation de OHTITLE pour eviter nul char si pas rempli.vendredi 18/12/1998
=================(Al1)
 petit bug dans OCIC DeClub : on avait 2 fos le meme tr dans certains cas.
Bug dans OIXFAD ? : les grosses structures (ameth, yves) donnent des
 IX_Tr not in upper IX   Oui bug :
mercredi 23/12/1998
=================(Al1)
Bug in OIXFAD de l'origine : on ne recode en tet de routine que les Tr de la
meme face (que LF); or quand on cree une nouvelle IX, on recherche les Tr de
la IN root qui codent aux memes Ctts, alors que les hors Fc ont gardes leur
ancien codes; il n'y avait pas de consequence, car on fait ensuite un scanning
des fc/fm, sauf pour ONTRIX qui s'en trouvait recuperer ces extras TR.
Correction : les extras Tr gardent forcement une IQ(LIT2+3) non nulle.

lundi 11/01/1999
=================(Ribs)
Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)



************************************************************************
************* Re0ecriture de routines de ker ***************************
************************************************************************
mardi 13/08/1996
===============(Al1)
 EOLE : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

mercredi 14/08/1996
==================(al1)
 EOLES : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

lundi 19/08/1996
===============(Al1)
 EOLEF &EOLMAX completed. (hamb test).
 ORES done.

lundi 16/11/1998
===============(Al1)
 OCWRK et OCMX re-ecrits. Test dans hamb/zinit.
  OK       Ok.

mercredi 25/11/1998
=================(Al1)
 OGAUS re-ecrit avec tous link et data precomp. Test Zinit.
mercredi 25/11/1998
=================(Al1)
 OCMXTR en ZBM0. Test dans Hamb ok.

Decembre 1999
============(Al1)
l'exos pro/gicc montre que des transferts bloques peuvent avoir des dFi non nuls.
L'origine en est le pivoting dans LUDCMR; On a modifie la gestion du pivoting, qui est
choisie quand OZPLVL(11) > 4 cf print_level. Le pivoting est bloque pour les tr dont
la ligne amont est nulle; test effectues dans gicc et cpl3, semble ok, mais a assurer.

Janvier 2000
==========(Al1)
vieux bug  de Zinit corrige, cf < Known_bugs

Mars 2000
========(Al1)
nouvelles macros pour definir des variables de transfert = matrices, avec les Ct et les D
corespondantes (a trois indices) cf gicc.
(attention, les macros Define ne sont que dans gicc, mais les complementaires (de arykeep)
sont seult dans pro/.../mac)
<-----/|\------>  ./Help/Historique_Devlpmt.bak
****************************************************************************
****************************************************************************
******** Pour connaitre les developpements d'une version a l'autre *********
****************************************************************************
****************************************************************************
(le meta symbole | invite a cliquer le groupement lui succedant).
                  +++++++++++++++++++
                  +++++++ ZDL +++++++
                  +++++++++++++++++++
Resume from call Oresume et Ogain.
                  +++++++++++++++++++
                  ++++ ZBM & alias ++
                  +++++++++++++++++++
SV_Nb
    read thru CX(LCX) (JCx=1,*)
    < 
      Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 cf description complete a la fin de :
|  /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
Z_Pr_lvl(n,LLL)
Z_Pr/blabla/:...;
Dérivateur
                  +++++++++++++++++++
                  ++++ Macros génés +
                  +++++++++++++++++++
if
Dérivateur
                  +++++++++++++++++++
                  +++++ Utilities +++
                  +++++++++++++++++++
O_Eta_Eta OAlpha et G0Fact
                  +++++++++++++++++++
                  +++ Installations +
                  +++++++++++++++++++
liste
                  +++++++++++++++++++
                  ++++++ VIZU +++++++
                  +++++++++++++++++++
vendredi 06/01/1995
==================(Al1) already in dev.
 VIZU : includes dTime vector along with Time.
        ( rec len management has been changed )
        Allows thru /ZEUS/DEFAULT to change the sery of input data files
        OZDAT and OZPAR with the only mod of 'Z' in names.
        [ OZOUT.MP has to be kept. ]
        New Help in Matrix command to specify valid list formats);
        (Propagated to pro).
Rq : An additionnal flag header on data files makes VIZU to stay retro-compatible.
     ( But no possibility of Resume from a different version )
/zoom.dir/Help/Users/Proc/Vizu_Entry (lundi 31/07/1995)

KUIP tree menu incorporant les menus futurs pour |  Gains_in_Vizu.proposal
                  +++++++++++++++++++
                  +++++++ TEF +++++++
                  +++++++++++++++++++
             * Les PseudoK_Tr dependent d'autres transferts, sans
               reciprocite : on les appelle en dernier dans la D_loop.
              [Set Pseudo1_K_Tr flag; ou Set K1_Tr flag;
               Set Pseudo2_K_Tr flag; ou Set K2_Tr flag;]
Amelioration de l'algorithme des Matrices D
                  +++++++++++++++++++
                  +++++++ KER +++++++
                  +++++++++++++++++++
 IMPORTANT : Si vous utilisez des transferts cumules, ajouter dans le
 Zinit_Entry  Set Cumulated_Tr flag;  ou 
              Set Cum_Tr flag;

 Modifs Ker :* A la fin du step advance, apres impressions,
               Fiz = Fi+dFi pour les non Cumulated_Tr;
               (consequence : meilleur dev before entering D_loop)
               Pour les Pseudo_Cell Tr [ set Pseudo_Cell flag; ou
               set Ps_Cl flag; ] Fi=Fiz=Fi+dFi;
 KER : Provisional new Entry in Tr processors as : D_Entry.
       F_Entry will be used to computes Fi [and parameters].
       D_Entry to determine D_Mx for the D_loop
       T_Entry will then be devoted to Ct_SV matrices only.
       Rqs : Another D_Mx can then be computed in the T_Entry.
             A tentative to grasp Ct_SV within the T_Entry sequence results
             in an execution error.
 !!! It is recommended to User to include slowly a dummy D_entry in Tr procs.

jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''              .(cf | Pre_Futura)
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.
 cf | /zoom/Help/Versions_futures/Versions_prochaines 

New macro used locally in Ker :
  Deck OTRDA                           
    &'ELEMENTARY(#)'='(LQ(#1-0_(#1.FM).Nxt_lvl_Ad).LE.0)' => if Elementary(LFM)<
    &';UNDER #(#)<'=';FROM #1(#2)<'                             Pour tenter JYG.
    &'DOWN(#)'='LQ(#1-0_(#1.FM).Nxt_lvl_Ad)' (not included in ZBMKEEP)
  Deck OPDFI                           
    &'NEXT(#)'='LQ((#1)+ONX)'              pour pvr ecrire Next(@Fiz(0)) par ex.

===========================================================
====   Avancement des Travaux pour VIZU Futura ============ 1995
===========================================================

Premiere phase : (Meme Kuip Tree Menu)
  1.1) Meme traitement preFut mais en utilisant Zebra.
       sources PAW /cern/pro/src/cmz +> paw.cmz
  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.
                                                           23/3/98 :
Deuxieme phase : (New Kuip Tree Menu)                      (etat des lieux a faire)
  2.1) Definition et Algebraic action routines                      Al1
  2.2) Gains. Options progressivement.

Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.

vendredi 11/10/1996 (Futura)
=================(Al1)
 Partie Bug for Futura :
OIXFAD,OCIC abondent les IF de la liste des LTr
ONTRIX - appele par OFRAME - parcourt l'arbre des IN (emule de ZOOM 3) et
en deduit la permutation IF / Up IX (ou IN).

Changement officiel : Bug est denommé : clubberred connections

Rq : les MZPUSH coutent tres cher : on declenche le Declubbering lourd par
Zinit : OZPLVL(10) = 2;


jeudi 14/11/1996
==============(Al1)
 Flag dans /ITER/ kerTFD qui prendra les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futura
 de la navette. cf /zoom/Help/Versions_futures/Futura  <

Mardi 31/12/1996
===============(Al1)
 Bug for retrieving Lo_Diag_Tr in OPDFI et OT2HLZ
(did not point on Tr component)
=> mac : Grasp Array Fi_Diag(LTR) [must be preceded by a Grasp Fi]
 cf /zoom/Help/Versions_futures/Versions_prochaines
lundi 30/12/1996
===============(Al1)
 ORESUME : implementation de IO2JO * JOFROZ; Le composantes gelées des Tr
ne sont pas initialisees par ORESUME. (Modifs de Conditions Limites)
En fait des que IO2JO on gele toutes les composantes, car les S_Entries ne
sont appellé qu'apres ORESUME. Les composantes non-gelées doivent de toute
manière etre calculées alors.

jeudi 30/01/1997
===============(Al1)
OT2CMF addition de >Fortran Call okutil, qui genere un menu zoom_util
cf vizu

************************************************************************
*************  Nouveaux C-Plug Name et Code ****************************
************************************************* {mardi 21/01/1997 Al1}
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactees
  cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< dans 'FUTURA adds'

************************************************************************
*************  Nouvelle declaration des Description banks **************
******************* Var_linked ***************************************** 
********************************************** {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV,Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir acces a ses composantes designees par
un indice supplementaire ex : Fi_Proc_TV(k/kCx) donee la valeur de la i eme
composante du Fi_TV linké sur Fi_Proc_TV(2); les verifications standard de
bornes d'indice sont effectuees sur k;

 cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED paragraph 

jeudi 17/04/1997
===============(Al1)
beginning variable mesh treatment : MAPCL => MAPPLE T=TEXT
vendredi 26/09/1997 : LOWLIB/OZVARIT etend le map initial le mieux ppossible
et fait les interpolations (pour le moment lineaires)
LOWLIB/OZVAPIT = OZMAPIT mais en modifiant les arguments.
il faut en faire autant avec OZFLECHIT et standardiser OZVAPIT en remplacement
de OZMAPIT. Compiles OK. Ker OT2CMF ok.
rentrer MAPPLE => MAPCL et debugger.
************************************************************************
************* Variable Mesh Facilities and maps ************************
********************************************** {Lundi 27/10/1997 Al1}
cf /zoom/Help/Users/Graphics_and_post_treatment/Maps <<< 

lundi 28/07/1997
===============(Al1)
 debug de la refonte MTN : IF ELSEIF avec liste = con1,cond2 etc
 ajout de  Z_Pr_Error_Cl(LCL):'BlaBla';

 option .eq.Face-* implementee dans le SKIP THRU< standard - comme les /.

jeudi 29/01/1998
===============(Al1)
 z_pr, z_pad etc dans ZDL.

mercredi 05/08/1998
===============(Al1)
Futura feature pour la connection directe de Transfert a Transferts.
Name Tr as: Conv; ou Heat(1); recup par Get Tr Conv;
ATTENTION : comme pour les objets, ces symboles sont case sensiive;
OCRE : creation de routines pour gerer le Name Tr as: xxx; et get Tr xxx;
 avec les mac correspondantes. Test dans hamb/zinit. Help a jour.
vendredi 14/08/1998
=================(Al1 pour Futura))
Connections directes TR a TR.
OGCXTV est apelle de OGV lui meme de Zinit; C'est la routine qui cree les TV
a partir de la table TPG et fait les liens des CX sous la CXT table. On ajoute
un test sur les TV exclusivement connectes aux IODITR CX qui sont alors flagges.
mercredi 17/02/1999
=================(Al1)
Vizu : Borel_fit dans Zoom_util et Help.






************************************************************************
************* D E B U G G I N G ****************************************
************************************************************************
lundi 26/08/1996
===============(Al1)
 Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
Mardi 31/12/1996
===============(Al1)
 Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
Mardi 31/12/96
============(Al1)
 OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
Grasp Array Fi_Diag(LTR);
lundi 16/11/1998
==============(Al1)
 OILUN initialisation de OHTITLE pour eviter nul char si pas rempli.vendredi 18/12/1998
=================(Al1)
 petit bug dans OCIC DeClub : on avait 2 fos le meme tr dans certains cas.
Bug dans OIXFAD ? : les grosses structures (ameth, yves) donnent des
 IX_Tr not in upper IX   Oui bug :
mercredi 23/12/1998
=================(Al1)
Bug in OIXFAD de l'origine : on ne recode en tet de routine que les Tr de la
meme face (que LF); or quand on cree une nouvelle IX, on recherche les Tr de
la IN root qui codent aux memes Ctts, alors que les hors Fc ont gardes leur
ancien codes; il n'y avait pas de consequence, car on fait ensuite un scanning
des fc/fm, sauf pour ONTRIX qui s'en trouvait recuperer ces extras TR.
Correction : les extras Tr gardent forcement une IQ(LIT2+3) non nulle.

lundi 11/01/1999
=================(Ribs)
Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)



************************************************************************
************* Re0ecriture de routines de ker ***************************
************************************************************************
mardi 13/08/1996
===============(Al1)
 EOLE : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

mercredi 14/08/1996
==================(al1)
 EOLES : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

lundi 19/08/1996
===============(Al1)
 EOLEF &EOLMAX completed. (hamb test).
 ORES done.

lundi 16/11/1998
===============(Al1)
 OCWRK et OCMX re-ecrits. Test dans hamb/zinit.
  OK       Ok.

mercredi 25/11/1998
=================(Al1)
 OGAUS re-ecrit avec tous link et data precomp. Test Zinit.
mercredi 25/11/1998
=================(Al1)
 OCMXTR en ZBM0. Test dans Hamb ok.

Decembre 1999
============(Al1)
l'exos pro/gicc montre que des transferts bloques peuvent avoir des dFi non nuls.
L'origine en est le pivoting dans LUDCMR; On a modifie la gestion du pivoting, qui est
choisie quand OZPLVL(11) > 4 cf print_level. Le pivoting est bloque pour les tr dont
la ligne amont est nulle; test effectues dans gicc et cpl3, semble ok, mais a assurer.

Janvier 2000
==========(Al1)
vieux bug  de Zinit corrige, cf < Known_bugs

Mars 2000
========(Al1)
nouvelles macros pour definir des variables de transfert = matrices, avec les Ct et les D
corespondantes (a trois indices) cf gicc.
(attention, les macros Define ne sont que dans gicc, mais les complementaires (de arykeep)
sont seult dans pro/.../mac)
<-----/|\------>  ./Help/Historique_Devlpmt.bak1
****************************************************************************
****************************************************************************
******** Pour connaitre les developpements d'une version a l'autre *********
****************************************************************************
****************************************************************************
(le meta symbole | invite a cliquer le groupement lui succedant).
                  +++++++++++++++++++
                  +++++++ ZDL +++++++
                  +++++++++++++++++++
Resume from call Oresume et Ogain.
                  +++++++++++++++++++
                  ++++ ZBM & alias ++
                  +++++++++++++++++++
SV_Nb
    read thru CX(LCX) (JCx=1,*)
    < 
      Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 cf description complete a la fin de :
|  /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
Z_Pr_lvl(n,LLL)
Z_Pr/blabla/:...;
Dérivateur
                  +++++++++++++++++++
                  ++++ Macros génés +
                  +++++++++++++++++++
if
Dérivateur
                  +++++++++++++++++++
                  +++++ Utilities +++
                  +++++++++++++++++++
O_Eta_Eta OAlpha et G0Fact
                  +++++++++++++++++++
                  +++ Installations +
                  +++++++++++++++++++
liste
                  +++++++++++++++++++
                  ++++++ VIZU +++++++
                  +++++++++++++++++++
vendredi 06/01/1995
==================(Al1) already in dev.
 VIZU : includes dTime vector along with Time.
        ( rec len management has been changed )
        Allows thru /ZEUS/DEFAULT to change the sery of input data files
        OZDAT and OZPAR with the only mod of 'Z' in names.
        [ OZOUT.MP has to be kept. ]
        New Help in Matrix command to specify valid list formats);
        (Propagated to pro).
Rq : An additionnal flag header on data files makes VIZU to stay retro-compatible.
     ( But no possibility of Resume from a different version )
/zoom.dir/Help/Users/Proc/Vizu_Entry (lundi 31/07/1995)

KUIP tree menu incorporant les menus futurs pour |  Gains_in_Vizu.proposal
                  +++++++++++++++++++
                  +++++++ TEF +++++++
                  +++++++++++++++++++
             * Les PseudoK_Tr dependent d'autres transferts, sans
               reciprocite : on les appelle en dernier dans la D_loop.
              [Set Pseudo1_K_Tr flag; ou Set K1_Tr flag;
               Set Pseudo2_K_Tr flag; ou Set K2_Tr flag;]
Amelioration de l'algorithme des Matrices D
                  +++++++++++++++++++
                  +++++++ KER +++++++
                  +++++++++++++++++++
 IMPORTANT : Si vous utilisez des transferts cumules, ajouter dans le
 Zinit_Entry  Set Cumulated_Tr flag;  ou 
              Set Cum_Tr flag;

 Modifs Ker :* A la fin du step advance, apres impressions,
               Fiz = Fi+dFi pour les non Cumulated_Tr;
               (consequence : meilleur dev before entering D_loop)
               Pour les Pseudo_Cell Tr [ set Pseudo_Cell flag; ou
               set Ps_Cl flag; ] Fi=Fiz=Fi+dFi;
 KER : Provisional new Entry in Tr processors as : D_Entry.
       F_Entry will be used to computes Fi [and parameters].
       D_Entry to determine D_Mx for the D_loop
       T_Entry will then be devoted to Ct_SV matrices only.
       Rqs : Another D_Mx can then be computed in the T_Entry.
             A tentative to grasp Ct_SV within the T_Entry sequence results
             in an execution error.
 !!! It is recommended to User to include slowly a dummy D_entry in Tr procs.

jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''              .(cf | Pre_Futura)
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.
 cf | /zoom/Help/Versions_futures/Versions_prochaines 

New macro used locally in Ker :
  Deck OTRDA                           
    &'ELEMENTARY(#)'='(LQ(#1-0_(#1.FM).Nxt_lvl_Ad).LE.0)' => if Elementary(LFM)<
    &';UNDER #(#)<'=';FROM #1(#2)<'                             Pour tenter JYG.
    &'DOWN(#)'='LQ(#1-0_(#1.FM).Nxt_lvl_Ad)' (not included in ZBMKEEP)
  Deck OPDFI                           
    &'NEXT(#)'='LQ((#1)+ONX)'              pour pvr ecrire Next(@Fiz(0)) par ex.

===========================================================
====   Avancement des Travaux pour VIZU Futura ============ 1995
===========================================================

Premiere phase : (Meme Kuip Tree Menu)
  1.1) Meme traitement preFut mais en utilisant Zebra.
       sources PAW /cern/pro/src/cmz +> paw.cmz
  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.
                                                           23/3/98 :
Deuxieme phase : (New Kuip Tree Menu)                      (etat des lieux a faire)
  2.1) Definition et Algebraic action routines                      Al1
  2.2) Gains. Options progressivement.

Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.

vendredi 11/10/1996 (Futura)
=================(Al1)
 Partie Bug for Futura :
OIXFAD,OCIC abondent les IF de la liste des LTr
ONTRIX - appele par OFRAME - parcourt l'arbre des IN (emule de ZOOM 3) et
en deduit la permutation IF / Up IX (ou IN).

Changement officiel : Bug est denommé : clubberred connections

Rq : les MZPUSH coutent tres cher : on declenche le Declubbering lourd par
Zinit : OZPLVL(10) = 2;


jeudi 14/11/1996
==============(Al1)
 Flag dans /ITER/ kerTFD qui prendra les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futura
 de la navette. cf /zoom/Help/Versions_futures/Futura  <

Mardi 31/12/1996
===============(Al1)
 Bug for retrieving Lo_Diag_Tr in OPDFI et OT2HLZ
(did not point on Tr component)
=> mac : Grasp Array Fi_Diag(LTR) [must be preceded by a Grasp Fi]
 cf /zoom/Help/Versions_futures/Versions_prochaines
lundi 30/12/1996
===============(Al1)
 ORESUME : implementation de IO2JO * JOFROZ; Le composantes gelées des Tr
ne sont pas initialisees par ORESUME. (Modifs de Conditions Limites)
En fait des que IO2JO on gele toutes les composantes, car les S_Entries ne
sont appellé qu'apres ORESUME. Les composantes non-gelées doivent de toute
manière etre calculées alors.

jeudi 30/01/1997
===============(Al1)
OT2CMF addition de >Fortran Call okutil, qui genere un menu zoom_util
cf vizu

************************************************************************
*************  Nouveaux C-Plug Name et Code ****************************
************************************************* {mardi 21/01/1997 Al1}
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactees
  cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< dans 'FUTURA adds'

************************************************************************
*************  Nouvelle declaration des Description banks **************
******************* Var_linked ***************************************** 
********************************************** {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV,Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir acces a ses composantes designees par
un indice supplementaire ex : Fi_Proc_TV(k/kCx) donee la valeur de la i eme
composante du Fi_TV linké sur Fi_Proc_TV(2); les verifications standard de
bornes d'indice sont effectuees sur k;

 cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED paragraph 

jeudi 17/04/1997
===============(Al1)
beginning variable mesh treatment : MAPCL => MAPPLE T=TEXT
vendredi 26/09/1997 : LOWLIB/OZVARIT etend le map initial le mieux ppossible
et fait les interpolations (pour le moment lineaires)
LOWLIB/OZVAPIT = OZMAPIT mais en modifiant les arguments.
il faut en faire autant avec OZFLECHIT et standardiser OZVAPIT en remplacement
de OZMAPIT. Compiles OK. Ker OT2CMF ok.
rentrer MAPPLE => MAPCL et debugger.
************************************************************************
************* Variable Mesh Facilities and maps ************************
********************************************** {Lundi 27/10/1997 Al1}
cf /zoom/Help/Users/Graphics_and_post_treatment/Maps <<< 

lundi 28/07/1997
===============(Al1)
 debug de la refonte MTN : IF ELSEIF avec liste = con1,cond2 etc
 ajout de  Z_Pr_Error_Cl(LCL):'BlaBla';

 option .eq.Face-* implementee dans le SKIP THRU< standard - comme les /.

jeudi 29/01/1998
===============(Al1)
 z_pr, z_pad etc dans ZDL.

mercredi 05/08/1998
===============(Al1)
Futura feature pour la connection directe de Transfert a Transferts.
Name Tr as: Conv; ou Heat(1); recup par Get Tr Conv;
ATTENTION : comme pour les objets, ces symboles sont case sensiive;
OCRE : creation de routines pour gerer le Name Tr as: xxx; et get Tr xxx;
 avec les mac correspondantes. Test dans hamb/zinit. Help a jour.
vendredi 14/08/1998
=================(Al1 pour Futura))
Connections directes TR a TR.
OGCXTV est apelle de OGV lui meme de Zinit; C'est la routine qui cree les TV
a partir de la table TPG et fait les liens des CX sous la CXT table. On ajoute
un test sur les TV exclusivement connectes aux IODITR CX qui sont alors flagges.
mercredi 17/02/1999
=================(Al1)
Vizu : Borel_fit dans Zoom_util et Help.






************************************************************************
************* D E B U G G I N G ****************************************
************************************************************************
lundi 26/08/1996
===============(Al1)
 Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
Mardi 31/12/1996
===============(Al1)
 Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
Mardi 31/12/96
============(Al1)
 OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
Grasp Array Fi_Diag(LTR);
lundi 16/11/1998
==============(Al1)
 OILUN initialisation de OHTITLE pour eviter nul char si pas rempli.vendredi 18/12/1998
=================(Al1)
 petit bug dans OCIC DeClub : on avait 2 fos le meme tr dans certains cas.
Bug dans OIXFAD ? : les grosses structures (ameth, yves) donnent des
 IX_Tr not in upper IX   Oui bug :
mercredi 23/12/1998
=================(Al1)
Bug in OIXFAD de l'origine : on ne recode en tet de routine que les Tr de la
meme face (que LF); or quand on cree une nouvelle IX, on recherche les Tr de
la IN root qui codent aux memes Ctts, alors que les hors Fc ont gardes leur
ancien codes; il n'y avait pas de consequence, car on fait ensuite un scanning
des fc/fm, sauf pour ONTRIX qui s'en trouvait recuperer ces extras TR.
Correction : les extras Tr gardent forcement une IQ(LIT2+3) non nulle.

lundi 11/01/1999
=================(Ribs)
Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)



************************************************************************
************* Re0ecriture de routines de ker ***************************
************************************************************************
mardi 13/08/1996
===============(Al1)
 EOLE : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

mercredi 14/08/1996
==================(al1)
 EOLES : re-ecrit en ZBM_ker.
(test hamb/zinit identical)

lundi 19/08/1996
===============(Al1)
 EOLEF &EOLMAX completed. (hamb test).
 ORES done.

lundi 16/11/1998
===============(Al1)
 OCWRK et OCMX re-ecrits. Test dans hamb/zinit.
  OK       Ok.

mercredi 25/11/1998
=================(Al1)
 OGAUS re-ecrit avec tous link et data precomp. Test Zinit.
mercredi 25/11/1998
=================(Al1)
 OCMXTR en ZBM0. Test dans Hamb ok.
<-----/|\------>  ./Help/Known_bugs
ZINIT
=====
la macro fill_fi n'herite pas correctement des limites dans certains cas
( repare dans macros, Al1 03/01/00)

***Janvier 2000bug quand on a une erreur du type :
 t-plug1:11 thru ... (au lieu de 1 thru 11, bornes correctes =>
 !!!!! ZFATAL called from MZLIFT  
              called from MZBOOK  
 
 !!!!! ZFATAL reached from MZLIFT    for Case=  1
 
          IQUEST(11) =  19994781          131189D
          IQUEST(12) =        -3         FFFFFFFD
          IQUEST(13) = *********         54504720   TPG 
          IQUEST(14) =         3                3
          IQUEST(15) =         2                2
          IQUEST(16) =        -2         FFFFFFFE
          IQUEST(17) =         0                0
 
          Current Store number =  0  (JQDIVI=19)
  *******************
  *** Zoom ZAbend ***
  *******************
1ZEBRA SYSTEM Post-Mortem from ZPOSTM.
 
 /QUEST/
              1            2     19994735     19999983     19899983       100000      2500000   1179795789
      538976288            0            0            0   1414547232            3            2           -2
              0            0            0            0            0            0            0            0
              0            0            0            0            0            0            0            0
              0            0            0            0            0            0            0            0
              1            2      131186F      1312CEF      12FA64F        186A0       2625A0     4652414D
       20202020            0            0            0     54504720            3            2     FFFFFFFE
              0            0            0            0            0            0            0            0
              0            0            0            0            0            0            0            0
              0            0            0            0            0            0            0            0
 
 Last Bank Lifted - COMMON /MZCL/LFW,LS,NIO,ID,NL,NS,ND,IOCH(1)
    19994735  19994737   0  TPG        3       2      -2            0 hex
        131186F      1311871            0     54504720            3            2     FFFFFFFE            0
 
 Last Bank analysed - COMMON /MZCN/LFW,LS,NIO,ID,NL,NS,ND
    19994859  19994861   0  TD         1       1       8
        13118EB      13118ED            0     54442020            1            1            8

***** TRACEQ:  In-Line Trace-Back  *****

Called from "zpostm" line 54
Called from "zabend" line 83
Called from "zfatal" line 111
Called from "mzlift" line 397
Called from "mzbook" line 73
Called from "mqbook" line 70
Called from "octpg" line 103
Called from "zinit" line 1113
Called from "opp" line 146
Called from "PM_$CALL" line 176
Called from "pgm_$load_run" line 885

===========================================================Al1 jeudi 06/04/2000
Bug dans Zinit : freeze xx(ii); ne gelait pas l'objet. macros de zdlkeep bug
(melange d'adresse LZS et LZE, corrige en pro et dev)
Rq : freeze obj-I marche.
========================================================Al1 vendredi 21/04/2000
Bug proc : link machin to Fi_TV(i); ne marche pas quand i>1, de meme
pour Fiz_TV et Eta_SV                                   Repare version pro seulement !!!!!
                                                        *** cf test gicc avant dev ***
Feature associee : on peut trouver avantage a linker une array_linked
sur un TV ou un SV. C'est un peu trompeur, car ce lien qui conserve l'adresse
du debut d'un tableau sera utilise avec un indice, certes, mais il a pour
reference le vecteur TR, le seul qui soit dans les banks Zebra, alors que
l'on voudrait qu'il y pointe en utilisant la liste des variables du TV (ou SV).
On a donc definit un bit qui marque - des Zinit - les plugs dont la liste
indique des variables consecutives. Si on utilise une array_linked sur
un tel plug, tout va bien.
Sinon, c'est signale par Zoom : LINK WARNING.
Waring, car on peut quand meme utiliser cette facilite en explicitant
la variable de la liste, comme dans cet exemple.
***
array_linked
     Fi_CI, : real in class CD;
dasn le S_entry : 
    Link Fi_CI to Fi_Tv(1);
utilisation :
   Do i = 1,N_tot
   <   kCI = 0_(Ltv.tv).Cx_Tr_Var_Nb(i)-0_(Ltv.tv).Cx_Tr_Var_Nb(1)+1;
       Z_Pr: Fi_CI(kCI);
   >
explication : Fi_CI pointe sur la premier # de la liste du plug :
7,12,17,22 par exemple
le vecteur de reference restant TR, il faut pointer sur
Fi_CI(1)  <-> Fi_TR(7)
Fi_CI(6)  <-> Fi_TR(12)
Fi_CI(11) <-> Fi_TR(17)
Fi_CI(16) <-> Fi_TR(22)
***
===============================================================================
lundi 08/05/2000 Al1
ZDLKEEP/$ZDLTRI bug dans : under#-#=#,#<
on allait sous une famille au-dela' de #4 => ***error no fm machin
pas de consequence sinon le diagnosic.
Bug repare pro et dev.
===============================================================================
mardi 11/06/2002  BUG IN VIZU
em mode restart, des MX CPLG ont une derniere valeur(it ou t) en 10-38 ... StepHalgatte
et pb dans initialisation d'inversion ligne en CPLG
===============================================================================
mardi 06/08/2002 pb lie aux TR multiply cx to same cell.  Stephane Halgatte
la Ct est cree pour la 2eme connection, mais elle est vide (ndata=0)
=========================================================================
lundi 28/04/2003 un bug de type clubbered CX dans IAM de Stephane :
concerne deux transferts a une extremite connectes a une meme cellule,
mais crees non consecutivement dans zinit, mis sous Zeus.
On obtiend qu'ils sont consecutifs dans la IN de Zeus, mais pas dans
la matrice. Il suffit de le creer consecutivement pour que pb disparaisse.
questions : 1/ pourquoi OFRAME ne traite pas correctement ?
2/ pourquoi OZPlvl(10) ne detecte pas de pb.
3/ voir comment DOPLUG reagit ?
=========================================================================

<-----/|\------>  ./Help/Log_book_develpt
Decembre 2000
==========(Al1)
Macros PDL : permettant de gérer des transferts rangés sous une forme matricielle
et donc de calculer des tenseurs dérivés;
Juin 2000
======(Al1)
var_linked : un diagnostic est donné pour une cx sur un plug
NON conformé par une liste de composantes consécutives.
(dans ce cas, passer en link_var, ou alors donner en argument
le numéro des composantes - en soustrayant la première, cf gicc/proc/cepri )


jeudi 10/08/2000
=============(Al1)
petites améliorations macros : (penser aussi à les utiliser)
Print_CL_ID(LCL), TR_ID(LTR) ...
SV_CL_ID(LSV) et TV_TR_ID(LTR) pour mettre dans une liste print*
de même avec CL_ID(LCL) et TR_ID(LTR);
<-----/|\------>  ./Help/Log_book_develpt.bak
jeudi 10/08/2000
=============(Al1)
peties ameliorations macros : (penser aussi a les utiliser)
Print_CL_ID(LCL) ...
SV_CL_ID(LSV) et TV_TR_ID(LTR) pour mettre dans une liste print*
<-----/|\------>  ./Help/Mail_for_newzee
Salut Vincent,

J' ai termine mes tests et pour moi Zoom est operationel chez toi.

En gros ce qu' il faut faire (mais je crois que tu sais deja :-)

  1) creer un directory user_data dans son HOME_DIR

  2) Une fois pour toutes on ajoutera les lignes suivantes dans 
     le fichier .profile (Bourne,Korn shells)

           CERN=~robert/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=~robert/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN ~robert/cern
           setenv CERN_VER pro
           setenv ZOOM ~robert/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

    3) creer un directory par exo contenant :
           
           le fichier exo.cmz
           le fichier cmzlogon.kumac
           le fichier selseq.kumac

       Example pour faire un test avec hamb

           mkdir hamb
           cd hamb
           cp $ZOOM/$ZOOM_VER/pro/exos/hamb/hamb.cmz hamb.cmz
           cp $ZOOM/$ZOOM_VER/pro/exos/hamb/cmzlogon.kumac cmzlogon.kumac
           cp $ZOOM/$ZOOM_VER/pro/exos/hamb/selseq.kumac selseq.kumac



    4) Executer cmz dans ce directory :

            [exec] mod proc
          
         repondre aux questions stupides...

            [exec] mod [zinit]

         repondre aux questions stupides...

       sortir de cmz (ou aller dans une autre fenetre)

            cd zinit
            run exo         ( run hamb )
            make_vizu
            vizu



Tu pourras utilement aller jetter un oeil dans les Help 
en particulier :

   zoom/Help/Users/00_New_User_Environment_Installation
   zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ
   zoom/Help/Programmers/Upgrades/Installation

Pour utiliser les commandes print mprint ... sous CMZ
il te faudra peut etre modifier les fichiers qui sont sous :
cern/cmz/cmzmac

les lignes sont :
*-- replace the following line by your print command
she lp  [PRG_NAME].tmpcmz
    ^
    |_____________     j' ai mis lp ( pour imprimer du texte)
                       a remplacer eventuellement


De meme dans vizu pour pouvoir cliquer "laser" ( en haut a gauche)
pour imprimer une courbe voir dans :

cern/pawmacs

et modifier les fichiers postxxxxx.kumac

*-- replace the following line by your print command
she lp -dps paw_all.ps
    ^
    |_____________     j' ai mis lp -dps ( pour imprimer du postscript)
                       a remplacer eventuellement


Enfin pour avoir les doc du CERN sur CMZ, PAW etc...

La page d'accueil de la CERNLIB.
http://asdwww.cern.ch/pl/

CMZ documentation
http://asdwww.cern.ch/cmz/index.html


-----------------------------------------------------------------


Arbre de Zoom
-------------

zoom/Help                             Comme son nom l'indique
zoom/cmzmacs                          Les kumacs CMZ pour les exos (utilisateurs)
zoom/kumacs                           Les kumacs pour vizu
zoom/user_data                        Les templates files de CMZ
zoom/zoom_1.24_00                     La version pro
zoom/zoom_1.24_00/bin                 Les shells diverses
zoom/zoom_1.24_00/exe                 Mortran ( + vizu sur apollo)
zoom/zoom_1.24_00/exos                La fameuse cellule de Hambourg ! + un modele
zoom/zoom_1.24_00/lib                 Les librairies ker mtn et vizu
zoom/zoom_1.24_00/mac                 Les macros mtn 
zoom/zoom_1.24_00/out                 Les sorties d' installation
zoom/zoom_1.24_00/src                 Les sources
zoom/zoom_1.24_00/src/car             Les .car            (vide pour les non developpeurs du noyau)
zoom/zoom_1.24_00/src/cfs             Les sources fortran :
zoom/zoom_1.24_00/src/cfs/ker                             pour ker
zoom/zoom_1.24_00/src/cfs/mtn                                  mtn
zoom/zoom_1.24_00/src/cfs/vizu                                 vizu
zoom/zoom_1.24_00/src/cmz             Les cmz files :
zoom/zoom_1.24_00/src/cmz/ker                             pour ker
zoom/zoom_1.24_00/src/cmz/mac                                  mac
zoom/zoom_1.24_00/src/cmz/mtn                                  mtn
zoom/zoom_1.24_00/src/cmz/vizu                                 vizu


(developpeurs du noyau)

NOTA : les directory sous cmz contiennent chacun un cmzlogon.kumac qui charge 
       automatiquement le fichier concerne ( ker mac mtn vizu ) et annule les 
       macros de cmzmacs pour ne pas qu'il y ait conflit avec celles des dits 
       fichiers (elles ont les meme noms)

       i.e. Si on est sous zoom/pro/src/cmz/vizu par exemple et que l'on fait 
       cmz vizu est charge avec ses kumacs.

       si l'on est n'importe ou ailleurs ( un exo ) cmz herite des kumacs 
       du directory zoom/cmzmacs


        Si l'on fait de l'installatiom a distance on trouve egalement sur la 
        machine source les informations de la machine cible avec des noms du
        style : zoom/zoom_1.24_00/src/cfs/ker_ibm_l7 qui contiendra les source
        pour ibm ( apres un exec mod ibm l7)


<-----/|\------>  ./Help/Ordre_du_jour_permanent
D_loop, Fi+dFi, IDIAG, K_Tr, ZConv  cf Version future.


TRANSFERTS
==========
   Pouvoir donner un nom. D_Mx direct entre deux transferts.
   Nouvel arbre.
   SPEAR et TOOUCH.
   OKCt. ( Verif calcul des Ct_SV)

KER
===
   Re-ecrure en Mortran:
                   0_level : -2 => OFMIU...
                   1_level : -2 => DO WHILE...
                   2_level : -2 => ZBM.ker
   Parcourt d arbre, lev re-entrance parallelisme.
   (Repertorier les 3-4 types existants.)
                   

   Numerique
   --------- : Emboitement temporel, Gradients conjugues
               Version Double precision.

   Le Bug.

   A-1B et Ct : Beaucoup de zeros.
   ---------- 
   Re-ecriture du MX package sous LinPack?(pb de convention line*column)

LANGUAGES.
=========
   ZDL etant declare OK (ou quoi?), re-ecriture en pensant 
en particulier aux diagnostics.
   Extension de longueur des noms d objets.
     Pb particulier des mesh 2 et 3D (i:j) conserve dans icode.

   PDl_o => PDL1    TV-CX-SV a redefinir; repertorier les cas.

   Derivateur.

   Pb des codes/nature/...

   Statut du PRECOMP.

   Divers : macro Keep Insensible_Tr Grasp array Fi_ins (test pseudo-couplages)

VIZU
====
   Ajouter dTime. (fait)
   Sortie de valeurs moyennes.
   Re-ecriture de Z_Mx. Prevoir Gains.
                 En particulier, utiliser l'info IDIAG pour les zero Diag.
           Prevoir un nouveau menu. Traitement recurrent de Mx sous Zebra.

COUPLAGES
=========
   Stabilite.

TEF
===
   URGENT : se mettre d'accord sur un formalisme (signes en particulier).

   Macros-couplages (CHI2 Tr).

   Modeles adjoints et sensibilite aux valeurs initiales.


MANUELS et HELP
==============
<-----/|\------>  ./Help/Programmers/Arborescence_sous_zoom
  Echange d' info arborescentes: depuis la reunion de mars 91, ou nous avions
defini l arbre (en fonction des conventions CERN) la structure a change, en suivant
le cern. Elle est actuellement la suivante :
sous $ZOOM/$ZOOM_VER/ , on trouve :
src  car  mac  lib  exe  util  bol  exos

bol est un fourre-tout local (boite a outil logiciel...) qui nous sert a ascii-ser
les binary files OZDAT... etc produites par io_c.

sous util, on a un certain flou : a ala fois tout ce qui sert a fabriquer
la io_c.lib, et qui pourrait donc se ranger sous la structure standard, plus les recipes,
bref, des librairies autonomes, servant a zoom, mais que l on a place la'
pour les transports vers d autres sites...

pour ce qui est clair, j espere :

sous lib, io_c.lib, ker., vizu.,mtn.,recipes., ( et meme proc et patankar) .lib

sous exe : kerin.ix, mtn.exe, vise.ix, on un gain1.ix d'Olivier, il devrait y avoir
un precde.exe (si ca marchait encore...)

sous mac : toutes les macros files pour leur utilisation par &u ...
(En passant, on a en particulier un ary_ker et un zbm_ker, que l on fabrique en
parallele de ary et zbm pour les processeurs, qui devraient etre de plus en plus
differents entre leur version ker et proc)         .mac

=============================

sour src (convention cern toutes les sources, sous trois formes): 3 dir:
    cfs   cmz   car

sous car : ker, kercde, mac (pour leur utilisation par +seq), precde, patankar, et
meme un vieux couple (obsolete) de exo et proc    .car
     (j'y reviendrais plus tard)

sous cmz : ker, kercde, mac, vizu, mtn ( et meme patankar dans sa version pour zoom)

sous cfs (compile files ? ou c, fortran, sources files) :
 ker ker_hp, ker_ibm, mtn, vizu, (patankar)
[ C'est a partir de ces sources que robert envoie les differentes versions
machines dependantes.]

 Apres discussion avec JYG (Robert etant off today), voila ce que l on pourrait imaginer:

on considere le dir "car" (==pam) comme la derniere version commune (pam) Le7_Ramses.
(frequence d upgrade de l ordre de l annee?)
on a un dir 'mod' dans lequel,
    1- a chaque update general chez nous, on fabrique un deck de
corrections faisant passer de la pam a la version la plus recente. (Ou, si c est possible
et necessaire, un deck incremental de corrections...?), avec de nombreux commentaires
explicatifs, cela va sans dire. (frequence un a deux mois)
( pour nous, ca correspond a un dev2pro, donc teste' en dev et balance' subrepticement
aux utilisateurs avec un mail annonciateur)
    2- chez vous, mettons qu un utilisateur content de ses modifs et voulant les partager
demande a JLB l autorisation de les mettre dans le /mod, en plus bien sur des modifs
explicitement faites pour tout le monde

Cela permettrait a la fois les echanges sans douleur et laisserait a chaque labo ses
methodes favorites de travail

============================================ pour Ramses
La descro precedente concerne $ZOOM/pro
le dir /cmz est vide et pointe sur disque optique.
le car aussi, sauf pour kercde et mac (pour les +seq de macros et les autres).
Pour /mod, la shell ==ver+ de /dev fabrique une version pour dev2pro avec un
patch de modifs / version de base == celle de /pro, que l on range dans /pro/mod en
incrementant. C est la aussi que l on range les decks provenants de Toulouse (et d'ailleurs),
pour les inclure dans /dev, et se ramener au pb precedent...
<-----/|\------>  ./Help/Programmers/Arborescence_sous_zoom.bak
  Echange d' info arborescentes: depuis la reunion de mars 91, ou nous avions
defini l arbre (en fonction des conventions CERN) la structure a change, en suivant
le cern. Elle est actuellement la suivante :
sous /zoom/zoom_ver/ , on trouve :
src  car  mac  lib  exe  util  bol  exos

bol est un fourre-tout local (boite a outil logiciel...) qui nous sert a ascii-ser
les binary files OZDAT... etc produites par io_c.

sous util, on a un certain flou : a ala fois tout ce qui sert a fabriquer
la io_c.lib, et qui pourrait donc se ranger sous la structure standard, plus les recipes,
bref, des librairies autonomes, servant a zoom, mais que l on a place la'
pour les transports vers d autres sites...

pour ce qui est clair, j espere :

sous lib, io_c.lib, ker., vizu.,mtn.,recipes., ( et meme proc et patankar) .lib

sous exe : kerin.ix, mtn.exe, vise.ix, on un gain1.ix d'Olivier, il devrait y avoir
un precde.exe (si ca marchait encore...)

sous mac : toutes les macros files pour leur utilisation par &u ...
(En passant, on a en particulier un ary_ker et un zbm_ker, que l on fabrique en
parallele de ary et zbm pour les processeurs, qui devraient etre de plus en plus
differents entre leur version ker et proc)         .mac

=============================

sour src (convention cern toutes les sources, sous trois formes): 3 dir:
    cfs   cmz   car

sous car : ker, kercde, mac (pour leur utilisation par +seq), precde, patankar, et
meme un vieux couple (obsolete) de exo et proc    .car
     (j'y reviendrais plus tard)

sous cmz : ker, kercde, mac, vizu, mtn ( et meme patankar dans sa version pour zoom)

sous cfs (compile files ? ou c, fortran, sources files) :
 ker ker_hp, ker_ibm, mtn, vizu, (patankar)
[ C'est a partir de ces sources que robert envoie les differentes versions
machines dependantes.]

 Apres discussion avec JYG (Robert etant off today), voila ce que l on pourrait imaginer:

on considere le dir "car" (==pam) comme la derniere version commune (pam) Le7_Ramses.
(frequence d upgrade de l ordre de l annee?)
on a un dir 'mod' dans lequel,
    1- a chaque update general chez nous, on fabrique un deck de
corrections faisant passer de la pam a la version la plus recente. (Ou, si c est possible
et necessaire, un deck incremental de corrections...?), avec de nombreux commentaires
explicatifs, cela va sans dire. (frequence un a deux mois)
( pour nous, ca correspond a un dev2pro, donc teste' en dev et balance' subrepticement
aux utilisateurs avec un mail annonciateur)
    2- chez vous, mettons qu un utilisateur content de ses modifs et voulant les partager
demande a JLB l autorisation de les mettre dans le /mod, en plus bien sur des modifs
explicitement faites pour tout le monde

Cela permettrait a la fois les echanges sans douleur et laisserait a chaque labo ses
methodes favorites de travail

============================================ pour Ramses
La descro precedente concerne /zoom/pro
le dir /cmz est vide et pointe sur disque optique.
le car aussi, sauf pour kercde et mac (pour les +seq de macros et les autres).
Pour /mod, la shell ==ver+ de /dev fabrique une version pour dev2pro avec un
patch de modifs / version de base == celle de /pro, que l on range dans /pro/mod en
incrementant. C est la aussi que l on range les decks provenants de Toulouse (et d'ailleurs),
pour les inclure dans /dev, et se ramener au pb precedent...
<-----/|\------>  ./Help/Programmers/Ker/Call_to_Zebra_Wipe_and_Garbage
*********************************************************************
******* Zebra usage in Ker ******************************************
*********************************************************************


    Deck OGAUS                           
      CALL MZDROP(0,LMXBU,' ');


    Deck ZABEND                          
      !!CALL MZINQS(IXSTOR);
      CALL MZINQD(NOFRAM);
        CALL MZINQD(NOZMX);  print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOFRAM); print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOMXT);  print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOAB);   print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOKEEP); print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOWEZ);  print 1000,(iquest(i),i=1,10);
        CALL MZINQD(NOSAV);  print 1000,(iquest(i),i=1,10);
     1   0   OPP                             
     8   1      MQINIT                          
Deck MQINIT                          
            CALL MZEBRA(-1);
            CALL MZSTOR(IXSTOR,'//',' ',IFENCE,LQ(1),LZ1,SPACE(1),
            CALL MZNEED(0,NW,' ');
            CALL MZLOGL(IXSTOR,LogLvl);
            CALL MZDIV(IXSTOR,NOZMX  ,'ZMX ',    500,  100 000,'RL');
            CALL MZDIV(IXSTOR,NOFRAM,'FRAM' ,  NSIZE,LENWORK/4,'RL');
            CALL MZDIV(IXSTOR,NOMXT ,'MXT ' ,100 000,LENWORK/4,'RL');
            CALL MZDIV(IXSTOR,NOAB  ,'A_1B' , 20 000,LENWORK/4,'RL');
            CALL MZXREF(NOFRAM,IXCO,'.');
            CALL MZDIV(IXSTOR,NOKEEP,'KEEP' ,  1 000,  100 000,'RL');
            CALL MZDIV(IXSTOR,NOWEZ ,'WEZ ' ,  1 000,  100 000,'RS');
            CALL MZDIV(IXSTOR,NOSAV ,'SAVE' ,    100,   10 000,'RS');

    16   1      GOSETT                          
    17   1      GOSETC                          
    18   1      IOMX                            
Deck IOMX                            
      CALL MZLINT(0,'/ZMXC/',LBEG,LZMX1,LAZT);
    19   2         MZLINT                          
    20   2         MQZERO                          
    21   3            MZLIFT                          
    22   1      ZINIT                           
Deck OFRAME                          
      call mzlint(0,'/local/',local,lfm,dernier);
      CALL MZDROP(0,LFRM,'.');
Deck ONUMA                           
        CALL MQZERO(LOMG,LFMG,OFMMG,MV);
        CALL MQZERO(LDETA,LFMG,OFMGA,MV);  "::> next de Gamma"
        CALL MQZERO(LGAM,LFMG,OFMGA,MV);        " "
        CALL MQZERO(LETA,LFMG,OFMET,MV);
         CALL MQZERO(LDIAG,LFMG,OFMFI,MV); "::> next de FiZ"
        CALL MQZERO(LFIZ,LFMG,OFMFI,MV);   "::> next de Fi"
        CALL MQZERO(LFI,LFMG,OFMFI,MV);         " "
        CALL MQBOOK(LDL,LFMG,OFMDL,'DELT',1,1,MDELTND);
        CALL MQBOOK(LDL,LFMG,OFMDL,'DELT',1,1,MDELTND);
    23   1      MQGARB1                         
    24   2         MZIXCO                          
    25   2         MZGARB                          
    26   1      ZOOM                            
Deck ZOOM                            
      CALL MQGARB;
..?
      ix=MZIXCO(21,22,0,0); call MZGARB(IX,0);
        CALL MZLOGL(IXSTOR,LogLvl);
           CALL MZLOGL(IXSTOR,LogLvl);
       CALL MZWIPE(1);
    27   2         MZIXCO                          
    28   2         MZGARB                          
    29   2         DZSTOR                          
    30   2         OCLRNM                          
    31   3            SBIT1                           
    32   3            MZDROP                          
    33   2         OKVA                            
    34   3            MZDROP                          
    35   2         OIFM                            
    36   3            MQLIFT                          
    38   2         OICLTR                          
    39   3            OYCLTR                          
    40   4               MQLIFT                           ===> 36
    41   4               UCOPY                           
    42   4               GOCL2                           
    43   4               OCAB                            
    44   5                  MQZERO                           ===> 20
    45   4               GOTR2                           
    46   4               OCNI2                           
    47   5                  MQLIFT                           ===> 36
    48   5                  UCOPY                           
    49   5                  GOTR2                           
    50   5                  GOCL2                           
    51   5                  OCAB                            
    52   6                     MQZERO                           ===> 20
    53   3            OFI2FIZ                         
    54   4               MQLIFT                           ===> 36
    56   4               OCNI3                           
    57   5                  MQLIFT                           ===> 36
    58   5                  UCOPY                           
    59   2         OA2MXT                          
    60   3            MQLIFT                           ===> 36
    62   3            SBIT0                           
    63   3            OF2MXT                          
    64   4               MQWORK                          
    66   4               MQLOW                           
    68   4               VZERO                           
    69   4               MQLIFT                           ===> 36
    70   4               OCITB                           
    71   5                  MQZERO                           ===> 20
    72   4               ZSHUNT                          
    73   4               ZPRESS                          
    74   4               SBIT1                           
    75   3            OTYPMX                          
    76   3            SBIT1                           
    78   2         ORESUME                         
    84   2         MQGARB                          
    86   2         ZSTEER                          
    87   2         MZLOGL                          
    88   2         OKDETA                          
    89   3            SBIT1                           
    90   2         OSTART                          
    91   3            UCOPY                           
    92   3            GOCL3                           
    93   2         OTRDA                           
    94   3            MQLIFT                           ===> 36
    97   3            OTRND                           
    98   4               GOTR                            
   100   3            OTRD                            
   101   4               GOTR                            
   102   3            OCCT                            
   103   4               MQZERO                           ===> 20
   106   2         OPTAU                           
   107   2         DZVERI                          
   108   2         OUPEQ                           
   109   3            MQLIFT                           ===> 36
   111   3            OEQ                             
Deck OEQ                             
      CALL MQLIFT(LZSAVE,KSAVE,+ONX,MSAVE);
      CALL MQWORK(DFIRST,DLAST);
   112   4               MQLIFT                           ===> 36
   114   4               MQWORK                           ===> 64
   115   4               OCWRK                           
   116   5                  MQLIFT                           ===> 36
   117   5                  QTOPSY                          
   119   4               OMXZER                          
   120   5                  QTOUCH                          
   121   6                     MZFLAG                          
   122   5                  ZPRESS                          
   123   4               OCMX                            
Deck OCMX                            
      CALL MQLIFT(LMX,KMX,JBIAS,MMX);
      CALL MQZERO(LMX,KMX,JBIAS,MMX);
   124   5                  MQLIFT                           ===> 36
   125   5                  MXUTY                           
   126   5                  MQZERO                           ===> 20
   127   4               VSUB                            
   128   4               VZERO                           
   129   4               OA2CDX                          
   130   5                  OF2CDX                          
   131   6                     MQLIFT                           ===> 36
   132   5                  OC2CDX                          
   133   6                     MQLIFT                           ===> 36
   134   6                     QTOPSY                           ===> 117
   135   5                  OT2CDX                          
   136   4               OA2P                            
   137   5                  OMXT2P                          
   138   6                     MQLIFT                           ===> 36
   139   5                  OSV2P                           
   140   6                     MQLIFT                           ===> 36
   141   5                  OTV2P                           
   142   4               OCMXTR                          
   143   5                  MQLIFT                           ===> 36
   144   4               EOLEF                           
   145   5                  OIX2RX                          
   146   6                     MQLIFT                           ===> 36
   147   6                     SBIT0                           
   148   5                  OMXAR                           
   149   6                     OMXAG                           
   150   7                        VADD                            
   151   5                  VADD                            
   152   5                  OAXG2C                          
   153   6                     QTOUCH                           ===> 120
   154   6                     VZERO                           
   155   6                     ZPRESS                          
   156   6                     MQCOPY                          
   157   6                     UCOPY                           
   158   6                     ZSHUNT                          
   159   6                     MQZERO                           ===> 20
   160   5                  ORRES                           
   161   5                  OMXCDL                          
   162   6                     MXNAD                           
   163   5                  OMXCGX                          
   164   6                     OMXER                           
   165   7                        OMXG                            
   167   4               OEQS                            
   168   5                  OIC2RX                          
   169   6                     MQLIFT                           ===> 36
   171   5                  OMXAD                           
   172   6                     OMXAG                            ===> 149
   174   4               QTOUCH                           ===> 120
   175   3            DZSTOR                          
   176   3            EOLMAX                          
   177   4               OLRES                           
   178   3            ODMXTA                          
   179   2         ODNEQ                           
Deck ODNEQ                           
      CALL MQWORK(DFIRST,DFIRST);
   180   3            MQWORK                           ===> 64
   181   3            OE2DXF                          
   182   4               UCOPY                           
   183   3            ODLF                            
   184   4               MXNAD                           
   185   4               EOLMAX                           ===> 176
   186   3            VADD                            
   187   2         ORESET                          
Deck ORESET                          
      CALL MZWIPE(NOMX);
   188   3            MZWIPE                          
   190   3            QPURGE                          
   191   4               ZPRESS                          
   192   3            QSHUNT                          
   194   2         MOVUP                           
   195   3            MQLIFT                           ===> 36
   197   3            GOCL                            
   198   3            OAB2TR                          
   199   4               VSCALE                          
   200   3            GOTR                            
   201   3            OCNCTI                          
   202   4               MQLIFT                           ===> 36
   204   4               MQZERO                           ===> 20
   206   4               GOTR                            
   207   4               GOCL                            
   208   4               OAB2TR                           ===> 198
   209   3            EOLE                            
Deck EOLE                            
      CALL MZWIPE(NOWEZ);
Deck EOLE                            
      CALL MQLIFT(LZSAVE,KSAVE,+ONX,MSAVE);
      CALL MQWORK(DFIRST,DLAST);
   210   4               MQLIFT                           ===> 36
   212   4               MQWORK                           ===> 64
   213   4               OCWRK                            ===> 115
Deck OCWRK                           
      CALL MQLIFT(LWEZ,0,0,MWEZ);
      CALL MQLIFT(LWCST,LWEZ,-2,MWCST);
      CALL MQLIFT(LWCST,LWEZ,-2,MWCST);
"-  PREPARE OMTX CALL-BANK : LRDXT = STR LINK; LCDXT, LPAIR = REF LINK;"
   214   4               OMXZER                           ===> 119
!   Reset ZMX call-bank structure : set to zero 1st call-bank  .
!   (address = LZMX) link and data words.                      .
+CDE,Q,ZPERMQ,Z.
+CDE,OX.
 CALL QTOUCH(IQDROP,LZMX,'.   ');
DO I=-2,OX_S,-1
<  CALL ZPRESS(0,LQ(LZMX+I));
   LQ(LZMX+I+OX_S)=0;
>
DO I=1,OX_D
<  IQ(LZMX+I) = 0;
>
"-    LIFT ALL MX BANKS"
   215   4               OCMX                             ===> 123
Deck OCMX                            
      CALL MQLIFT(LMX,KMX,JBIAS,MMX);
      CALL MQZERO(LMX,KMX,JBIAS,MMX);
"-    SET DELTA(F) TO -OMEGA AND DELTA(X) TO ZERO"
"-    CREATE COLUMN CROSS TABLES FOR ALL CONSTITUENTS OF LFM:"
   217   4               OA2CDX                           ===> 129
"-    CREATE PAIR-BANKS FOR ALL CONSTITUENTS OF LFM :"
   218   4               OA2P                             ===> 136
"-    CREATE C(XG) TABLES FOR ALL SUB-FAMILIES OF LFM :"
   219   4               OCMXTR                          
   220   5                  MQLIFT                           ===> 36
   221   4               EOLEF                            ===> 144
   222   4               EOLES                           
   223   5                  OIC2RX                           ===> 168
   224   5                  OMXCAG                          
   225   6                     OMXGV                           
   226   5                  OEL2D                           
   227   6                     MQLOW                           
   231   5                  OMXAD                           
   232   6                     OMXAG                            ===> 149
   233   5                  OMXCAB                          
   234   6                     ZMXG1                           
   235   5                  SBIT1                           
   236   4               EOLET                           
"-    KILL WORKING BANK"
   237   4               MZWIPE                          
   238   3            DZSTOR                          
   239   3            EOLMAX                           ===> 176
   240   3            ODMXTA                          
   241   3            DZSPMX                          
   243   2         MOVDN                           
Deck MOVDN                           
      CALL MQWORK(DFIRST,DFIRST);
    Deck ZOOM                            
   244   3            MQWORK                           ===> 64
   245   3            OE2DXF                           ===> 181
   246   3            ODLF                             ===> 183
   247   2         OPDETA                          
   248   3            ODETA                           
   250   4               MXNAD2                          
   251   4               VADD                            
   252   2         OPETA                           
   253   2         OW2PAW                          
   265   2         MZWIPE                          
   266   2         QEND                            
*******************************************************************
*****  Save environment sequences and Restore *********************
*******************************************************************
"-    SAVE LZS POINTERS"
KSAVE=LZSAVE;
LZSAVE=LQ(KSAVE+ONX);
IF LZSAVE.LE.0
< CALL MQLIFT(LZSAVE,KSAVE,+ONX,MSAVE);
  LQ(LZSAVE-2)=KSAVE;
>
CALL UCOPY(LZSUP,LQ(LZSAVE-NWSAVE-2),NWSAVE);
LZSUP=LZSDN;
 {}{}{}{}{}{}{}{}}{}{}{}{}
"-    RESET UPPER ENVIRONMENT"
:RETURN: LZSDN=LZSUP;
         CALL UCOPY(LQ(LZSAVE-NWSAVE-2),LZSUP,NWSAVE);
         LZSAVE=LQ(LZSAVE-2);
 RETURN;
;
"=============================================================== "
(Help en developpement)
<-----/|\------>  ./Help/Programmers/Ker/D_Loop
************************************************************************************************************
************************************************************************************************************
********************  SOLVE TRANSFER EQUATION : Fi = f(Fi) *************************************************
************************************************************************************************************
************************************************************************************************************

Numeriquement : Fi = f(Fiz);
*************
          Fi + dFi = f(Fiz) + [df/dFi]dFi  -->   ( I - [] )dFi = f(Fiz) - Fi;

Algorithme :                                                                                        PRINTs
**********                                                                                          ======
      Initialisation :
                       La valeur de Fiz_0 est celle de la sortie du pas précédent.
                       Appel des Tr auxquels peuvent etre sensibles les D_Tr (=> Fi_0 ).
                       (seuls ces derniers Tr bénéficient d'un Fi=>Fiz)
                       Appel des D_Tr.
                                      Fi_0 = f( Fiz_0);  D_Mx_0=...                      'Before entering'
                                      Cumul des DEV: +(Fi-Fiz)^2.

                           Test convergence > Oui => OUT, Non => Non

                        Calcul UP des Dij_1Puis DWN des dFii; dFizi = dFiz(i-1)


    >>>>>>>>>>>>>>     Appel des D_Tr.
    ^                                  Fii = f(Fiz_i);  D_Mxi = [df/dFiz]_i+1;         'Current iteration'
    ^                                  Cumul des DEV: +(Fi-Fiz)_i^2.
    ^
 (i=i+1)                     Test convergence >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Oui > OUT
    ^                  > Non
    ^
    ^                   Calcul UP des Djk, Puis DWN des dFi_i;
    ^                                               Fiz_i+1 = Fiz_i + dFi_i;
    ^
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<---------------- Test nItMax  >'After No convergence'


  :OUT:
                                                                                       'After convergence'

 Rq : 1) On a noté D_Tr les Tr qui sont flaggés !
         ( Des non flaggé peuvent tres bien posséder des matrices D )

      2) Le grasp Fiz des D_Tr proc est la seule manière d'obtenir des résultats indépendants
         de la structure, car celle ci induit un ordre de leur appel difficilement contrôlable;

      3) Il peut être utile de décider de faire  "COPY ARRAY Fi in Fiz(LTR);" dans certain D_Tr
         pour accélérer la convergence.

************************************************************************************************************
************************************************************************************************************
************************************************************************************************************

Code :  (Extraits de ZOOM)
****

  SOLVE=.TRUE.; NITER=0;
  CALL OSTART(LZ);" Call K_Entry for Cells et                                copy Fiz > Fi.
Appel des GOTR non D_flaggés connectes aux cellules ayant des D_flagged Tr.
  CALL OTRDA(0,DEV,NTR);(=>OTRND qui fait Fi=>Fiz);
Appel des D_flagged Tr.                                                     Fi = f(Fiz) et D.
  CALL OTRDA(1,DEV,NTR);                                                   (Dev : + (Fiz-Fi)^2)
     < Print*,'  TR before entering D_loop'; CALL OPTAU(LZ,0,1) >
    GO TO :first iter:;
"=================================================================="
:D_loop:;
  CALL OTRDA(1,DEV,NTR);   D Tr                                             Fi = f(Fiz) et D.
  < print*,'  Result of current iteration';                                 Dev : + (Fiz-Fi)^2
    CALL OPTAU(LZ,0,1);
  >
:first iter:;CONTINUE;
;
"  next iteration ===================="
  print*,' NITER,DEV,TOL*NTR:',NITER,'/(',NITMAX,')',DEV,TOL*NTR;

IF DEV.gt.TOL*NTR .OR. NITER.le.NITMIN
<
" **************"
  CALL OUPEQ;                                                             D Up till max
" **************"                                                         dFi dwnwrd compute
  CALL ODNEQ(LZ);                                                         Fiz: + dFi
" **************"
  CALL ORESET;
" **************"
;
  NITER=NITER+1;
;
" ***************"
  CALL OSTART(LZ);                                                       (copy Fiz=>Fi pour frozen Tr)
" ***************"
;
  IF NITER.LT.NITMAX
  <  GOTO :D_loop:;
  >ELSE
  < 
                < print*,'  *********************************';
                  print*,'  Result after no convergence/itmax';
                  print*,'  *********************************';
                  CALL OPTAU(LZ,0,1);
                >
;
    ZIOK=' NoK ';
    print*,'NoK NITER,DEV,TOL*NTR:',NITER,'/(',NITMAX,')',DEV,TOL*NTR;
    print*,'    for IStep #:',ISTEP;
    GOTO :Step advance:;
  >
;
>
"  End of D_Mx iterations ========================================="
< print*,'  ************************';
  print*,'  Result after convergence';
  CALL OPTAU(LZ,0,1);
  print*,'  ************************';
>
ZIOK=' oK ';
print*,'Ok NITER,DEV,TOL*NTR:',NITER,'/(',NITMAX,')',DEV,TOL*NTR;
print*,'    for IStep #:',ISTEP;
" "
;
"============="
:Step advance:;
 SOLVE=.FALSE.;
"============="
<-----/|\------>  ./Help/Programmers/Ker/D_flag_et_appel_des_Tr
*******************************************************************************
*******************************************************************************
Concerne le calcul des D_Mx et des Ct_SV pour les processeurs qui ont les deux.
*******************************************************************************
*******************************************************************************

Avant utilisation des F_Entry
=============================
A l entrée de la D_loop, un seul appel aux Tr connectés aux IODMX Cl.
(ils seront appellés dans le Step_Advance=> Ils peuvent donc ne pas calculer leur Ct_SV).

Dans la D_loop: 
               Appel des IODMX_Tr    Si Convergence > Step advance sans OSTART
                                                     (Conséquence : ces IODMX_Tr
                                                      ne seront pas ré-appellés)
                                     Si non         > Itération, qui IQDROP les Ct.

                                     Si abanbon, ils auront été OSTARTés avant abandon,
                                                 et seront donc ré-appellés dans le step_Ad.


   ==> Donc, il faut impérativement calculer D ET les Ct_SVs en cours de D_loop.


===================================================================================
===========================
 Proposition pour l avenir:
===========================

             Création d un flag ZO_SENT = .True. lors de l appel des S_Entry,
                                          .False. après;

             En cours de D_loop F_entry sont appellés, avec refus des Ct_SV;

             En cours de Step_Advance, tous les T_Entrys sont appellés.

    Conséquence pour la programmation des Processeurs:

             S_entries : font leur environnement, et finissent au F_Entry si l on
    désire calculer une D_Mx variable, ou calculent seuls la D_Mx si invariante,
    auquel cas le F_Entry est bidon.

             D_Entrys ne calculent QUE les D_Mx variables.

             F_Entrys ne calculent QUE les Fi et les paramètres.

             T_Entrys ne calculent QUE les Ct_SV (variables ou pas).

   On propose d utiliser un OZPLVL(x) pour réclamer ce dernier algorithme, et rester
rétro_compatibles..



CRITIQUES ET SUGGESTIONS:
=========================

vendredi 09/09/1994 (Al1, apres rales Antonionesques et discus/JYG):
===================

   Beaucoup de choses a revoir pour l appel des transferts, pensés dans l état
actuel hors problématique D_Loop;

   En complément Ct et D Entrys, prévoir :

        * Calcul des Mx et des Fi pas forcément au même endroit.
        * évaluer l intérêt des classes de Tr pour hiérarchiser l'appel
          des Tr dans la D_Loop, de manière semblable auX OINI S_Entry;
          (de fait, c'est déja partiellement fait, puisque les no D_Tr sont
          traités à part, ainsi que les K_Tr);

 exemple de pb actuels :
         Les pseudo K_Tr dependent d autres tr sans reciprocite => ils devraient
        etre appelles apres (independament de leur situation dans l arbre;
         Macros transferts : On aimerait pouvoir utiliser l info disponible apres
 elimination sous_abre pour formuler leur equation => satus bit IOFMTR ? (Ils
 sont en fait des modèles attachés à leur famille (ce qui est touchant).
         Concernant le bit IODMX : on constate qu il existe des Tr SANS IODMX flag
 qui calculent une D_Mx : exemple (from Antonio) : TENERG
 Il s'agit  d'une équation de cellule, mais conectée a d'autres cellules (U,V) de par
 le schéma en grilles décalées, et de D_Mx sur les autres T_energ; (Appellons les 
 Pseudo_Cell TR); Ils ont donc à faire Fi+dFi, ce que Ker pourrait faire au meme moment que Eta+dEta.
 Rq : Actuellement, ce transfert est appellé deux fois :
                en tête de la D_loop -de par la connectivité- et dans la step_ad, d ou un test
              IF ZSOLVE .and. NITER.eq.0 (pour etre sùr...)
 On propose un flag par composante pour analogie FiZ+dFi de IOCUML : IOPSCL (Pseudo_Cell Tr)        
 POur ces pseudo_Cell, il NE faut PAS utiliser leur D_Mx dans la D_loop, car on veut que leur
 dFi restent nuls pour les D_Mx Tr.
<-----/|\------>  ./Help/Programmers/Ker/Gestion_des_Fi_et_Fiz
(help en developpement)

A la sortie de Zinit

Au stade des S_Entry

Dans la D_loop

Dans la Step_Advance
<-----/|\------>  ./Help/Programmers/Ker/Help_Programming/Save_Environment_Sequence
*************************************************************************
*************************************************************************
************** Sequence saving Zebra pointers environment ***************
******************* locally defined in the Tree *************************
*************************************************************************
*************************************************************************
**************************************( Vendredi 12/08/1994 Al1 )********

In Entrance of Routine :

"- =========================================="
"-    SAVE LZS POINTERS"
"- =========================================="
KSAVE=LZSAVE;
LZSAVE=LQ(KSAVE+ONX);
IF LZSAVE.LE.0
< CALL MQLIFT(LZSAVE,KSAVE,+ONX,MSAVE);
  LQ(LZSAVE-2)=KSAVE;
>
CALL UCOPY(LZSUP,LQ(LZSAVE-NWSAVE-2),NWSAVE);
LZSUP=LZSDN;
"============================================"

 At End of Routine :

"=============================================================== "
"-    RESET UPPER ENVIRONMENT"
"-    ======================="
         LZSDN=LZSUP;
         CALL UCOPY(LQ(LZSAVE-NWSAVE-2),LZSUP,NWSAVE);
         LZSAVE=LQ(LZSAVE-2);
"=============================================================== "
 RETURN;
*******************************************************************
   SEquence parameters initoalised in OCRE/OIFM :
"---------------------------------------------------------------------"
"-    THIS SUBROUTINE CREATES A LINEAR STRUCTURE IN WHICH THE FAMILY"
"-    POINTERS WILL BE SAVED WHEN NECESSARY (IN GENERAL AT PROCESSOR"
"-    ENTRY). THE START ADDRESS OF THIS STRUCTURE WILL BE KEPT IN"
"-    LQPRIV(3) (=LQ(35))."
    Bank names are 'ZSV '; Division NOSAV;
    Common /ZSAVE/ dans +seq,Z.
"---------------------------------------------------------------------"
*******************************************************************
  Used in Routines : 
     OCNCTA(Lev a Obsoleter),OCnCtI,Movup,OEq,OTrDA,OUpEq,OCnI2,
     OYClTr,OCnI3,OFi2FiZ,OIFm,Eole,OA2Mxt;

*******************************************************************

 The length of pointers zone -now fixed- should be precised case by case.

 Should give a portable re-entrance facility.
<-----/|\------>  ./Help/Programmers/Ker/Help_Programming/Tree_Movements
***************************************************************************
***************** Exemples de parcourt d'arbre ****************************
********************** dans le noyau **************************************
***************************************************************************
***************************************************************************
****************************************** (vendredi 12/08/1994 Al1) ******

 I===============I
 I Modèle OSTART I   ( et variante re-entrante DOPLUG)
 I===============I

LFMG=LFMF;
;
!==========
:Re-Enter:;
!==========
FROM FM(LFMG)
<
     * * *

   S_O_SKIP(LSO)
   < "Case_S_O(LSO)is_elementary"
     "< 
         < * * *
!=========   CALL OSTART(LWSO);  ==== if re-entrance
             ;continue;" necessaire pour vider Mtn stack-adress"
&F
             LFMG=LSO
&M
             GOTO :Re-Enter:;
         >
     "> end ESO"
   >"End SO"
   GOTO :Next:;
>
;
" "
:RETURN: RETURN;
;
"=============================== "
"-- Tree re-entrance managing -- "
"  ( of the form -> SO or FM )   "
"=============================== "
"- Look for next SO at same Level"
:Next:  ;
       KFMG =NEXT(LFMG);
       IF (KFMG.EQ.0) THEN; GOTO :Up n Next:;
       ELSEIF (LQ(KFMG-IQ(KFMG+9)).EQ.0) THEN;
                                      LFMG=UP(KFMG); LSO=KFMG;GOTO :ESO:;
       ELSE; LFMG=KFMG;  GOTO :Re-enter:;
       ENDIF;
" "
:Up n Next:;
       KFMG=UP(LFMG); IN FM(KFMG);
       IF (..DEPTH.EQ.IDEPTH)  THEN; GOTO :RETURN:;
       ELSE;  LFMG=KFMG;  GOTO :Next:;
       ENDIF;
"=============================== "
END;

***************************************************************************
***************************************************************************

 I===============I
 I Modèle ODTODR I       (Une version émulant la rentrance par procedures)
 I===============I           La plus tordue...

LFMF=LWFMF;
;
FROM FM(LFMF)                                 "Do not process root elementary"
<  * * *
   SKIP THRU IN(LIN)
   <  * * *
      READ THRU FC(LFC) (IFA=1,NFMDN)
      < GET FM(LFMUP);
        * * *

                    AT LFC EXECUTE LIST_TERMINAL_TRs;

              SKIP THRU IF(LIF)
              < IEV=1; LIX(IEV)=LIF;
                EXECUTE LIST_TR_IX;
              >
            >
        "> esac"
      >
    [kINinFI:+(LIN).Nb_Var];
   >
>
;
RETURN;
PROCEDURE LIST_TR_IX
<:Next list TR IX:                                   <<<< pseudo re-entrance ***
  LIX=LIX(IEV);
  FROM IX(LIX)
  < "print*,' >>IX lvl :',IEV,(IQ(LIX+I),I=1,5);"
     * * *
    kIXinFc(IEV)=(LIX).L_Var_in_Fc;
!   READ THRU FC(LFCW) (IW=1,NFCW)
    IW=1; KFAC(IEV)=IW;
   :Next Face:IW=KFAC(IEV);" print*,' lowest face, Nb',IW;"
    WHILE IW.LE.(LIX).Nb_Cx_Fc_Lo
    < LFCW=LQ(LIX+OIXFC-IW+1); LFMUPW=@LFCW@FC@FM@;
     "Case_FM(LFMUPW)is_elementary"
     "<  When_Yes"          In FM(LFMUPW); IF LQ(LFMUPW-..Nxt_lvl_Ad).EQ.0
                 AT LFCW EXECUTE LIST_TERMINAL_TRs;

           LIFW=@LFCW@FC@IF@; LIX(IEV)=LIFW;
           GOTO :Next list TR IX:;

     "> esac"
     [KFAC(IEV):+1]; IW=KFAC(IEV);
    >
  >
  IF IEV.GT.1
  < EXECUTE NEXT_IX_OR_FACE;
    IF (NEWFAC) GOTO :Next Face:;                      >>>>>>>>>
    IF (NEWIX)  GOTO :Next list TR IX:;                >>>>>>>>>
  >
>
PROCEDURE NEXT_IX_OR_FACE
< :Up n next IX:
   LIXNEXT=NEXT(LIX(IEV));
   IF LIXNEXT.LE.0
   < NEWIX=.FALSE.;
     IEV=IEV-1; IF IEV.LE.0 < RETURN_FROM_PROCEDURE; >
     [KFAC(IEV):+1]; IW=KFAC(IEV); LIX=LIX(IEV);
     IF IW.LE.IQ(LIX+5)         "(LIX).Nb_Cx_Fc_Lo"
     < NEWFAC=.TRUE.; LFCW=LQ(LIX+OIXFC-IW+1);
     >ELSE
     < NEWFAC=.FALSE.;
       GOTO :Up n next IX:;
     >
   >ELSE
   < NEWFAC=.FALSE.; NEWIX=.TRUE.;
     LIX(IEV)=LIXNEXT;
   >
>

***************************************************************************
***************************************************************************

 I===============I
 I Modèle MOVDN  I       (La version la plus nulle)
 I===============I

"-    START AT LEVEL 1    ( F-FAMILY )"
 KFMG=LFMF;
" "
"-    PROCESS THAT FAMILY "
" "
:TREATMENT:;
 LFMG=KFMG;
FROM FM(LFMG)
< POINT ON (LFMG);
  DTHFMG=..DEPTH; IEV=DTHFMG-DTHFMF+1;
"  ------------------------------------------------------------"
  IF (IEV.GT.NBLEVP)  GOTO :UP N NEXT FM:;
"  ------------------------------------------------------------"
" "
  IF (..NB_OUT_VAR.EQ.0) GOTO :DIVE TO FM:;
" "
"       PROCESS THE FM. ONLY."
    LFMUP=UP(LFMG);
    IF (LQ(LFMG-..Nxt_lvl_Ad).NE.0) THEN;
      * * *
      GOTO :DIVE TO FM:;
    ELSE;
      GOTO :NEXT FM:;
    ENDIF;
" "
>;
"==================================================== "
"-    LOOK FOR NEXT LEVEL"
:DIVE TO FM:;
             KFMG=LQ(LFMG-0_(LFMG.FM).Nxt_lvl_Ad);
       IF ( KFMG.EQ.0 ) THEN; GOTO :UP N NEXT FM:;
         ELSEIF (LQ(KFMG-0_(KFMG.FM).Nxt_lvl_Ad).EQ.0)THEN;
                                          LFMG=KFMG; GOTO :NEXT FM:;
         ELSE ;LFMG=KFMG;GOTO :TREATMENT:;
       ENDIF;
"-    LOOK FOR NEXT FAM AT SAME LEVEL"
:NEXT FM:  ;
             KFMG =NEXT(LFMG);
       IF (KFMG.EQ.0) THEN;GOTO :UP N NEXT FM:;
         ELSEIF (LQ(KFMG-0_(KFMG.FM).Nxt_lvl_Ad).EQ.0) THEN;
                                           LFMG=KFMG;GOTO :NEXT FM:;
         ELSE; LFMG=KFMG;  GOTO :TREATMENT:;
       ENDIF;
" "
:UP N NEXT FM:;
             KFMG=UP(LFMG);IN FM(KFMG);
       IF (..DEPTH.EQ.DTHFMF)  THEN; GOTO :RETURN:;
       ELSE;  LFMG=KFMG;  GOTO :NEXT FM:;
       ENDIF;
"==================================================== "
" "
" "
:RETURN: RETURN;END;

***************************************************************************
***************************************************************************
<-----/|\------>  ./Help/Programmers/Ker/K_Tr_and_D_Loop
*******************************************************************************
*********************** K_Transferts et Navette ZOOM **************************
*******************************************************************************

Définition d' un vrai K_Tr (cad flag:=IOKTR)
============================================
   A zéro sur la diagonale de D, voit d'autres Tr.
   Aucun autre Tr n'en dépend.

Initialisation sequence(OCNI,...) Fi2FiZ ...
=======================
flag Ker : KTRANS, OTRD et OTRND

Variantes IOK2TR et IOK3TR


Author:
Al1 vendredi 03/06/1994 (en développement)

Diagonales a zero:
==================
*** Deck ONUMA                           
      DATA NAMEV /'FI  ','OMG ','ETA ','GAM ','FIZ ','DETA','DIAG'/;
         CALL MQZERO(LDIAG,LFMG,-7,MV);
         <I=1,MV(4);IQ(LDIAG+I)=1;> "Default for diagonal elements"

*** Deck ONCO                            
!  modif 04/01/93 flag 0 > -1 for K_A_TR
!  modif 28/06/93 copy FizT dans Fi egalement.
 ...
CALL COOLTR(LTR); " freeze transfers connected to frozen cells"
 ...
      LDIAGT=LQ(LFIZT-1);
 ...
         IPDIAG=LQ(LFIZ+ONX)+IQ(LTR+4);    " Attention, un next a FIZ !!!"
 ...
IF (LDIAGT.GT.0)
<  IF JBIT(IQ(LTR),IOFROZ).EQ.1            " Non frozen TR"
   < CALL UCOPY(Q(LDIAGT+1),Q(IPDIAG+1),NTV);
;
!   Set 0 flag to -1 for K_A_TR
     IF JBIT(IQ(LTR),IOKTR).EQ.1      "K or A _TR"
      .or. JBIT(IQ(LTR),IOK3TR).EQ.1  "or K2_TR"
     <
       < I=1,NTV;IF IQ(IPDIAG+I).EQ.0 < IQ(IPDIAG+I)=-1 >; >
     >
   >
   CALL SBIT1(IQ(LDIAGT),IQDROP);
>


*** Deck COOLTR                          
      KATR=JBIT(IQ(LTR),IOKTR).EQ.1; "KATR is true for K-tr and A-tr "

   ---------- find de OFRAME ----

    Deck OTRD                            
        IF JBIT(IQ(LTR),IOKTR).EQ.1 .or. JBIT(IQ(LTR),IOK3TR)


   ---- MX package -------------

*** Deck OF2MXT                          
LDIAG=LQ(LQ(LQ(LFMF-7)+ONX)+ONX);
 ...
"FILL MXR BANKS"
" "
"-    COUNT INTERFACES COUPLED TO IF1"
NCF=0;
DO 110 I=1,NTIN;
IF (IQ(LBF+I).NE.0) NCF=NCF+1;
110  ;
CONTINUE;
NCX=0;
DO 120 I=1,NTIX;
IF (IQ(LBX+I).NE.0) NCX=NCX+1;
120  ;
CONTINUE;
IF(NCF.EQ.0) GO TO 200;
   IF(IQ(LIF1+1).EQ.-1) "Check that one is dealing with AFF"
   <  IDFST=IQ(LIF1+2);NDIAG=0;
      <  J=1,IQ(LIF1+4);IF (IQ(LDIAG+J+IDFST).LE.0) NDIAG=NDIAG+1;
      >
   >
MMXR(2)=NCF+4;
MMXR(4)=NCF+NDIAG+4;
CALL MQLIFT(LMXR,KMXRF,JBIASF,MMXR);
KMXRF=LMXR;JBIASF=ONX;
" Fill diag-part"                     Transforms 0,-1 of IniDiag to
   IF (IQ(LIF1+1).EQ.-1)                         +J,-J table :
   <  IPDIAG=LMXR+NCF+4; IQ(IPDIAG)=NDIAG;
      IF (NDIAG.EQ.0) GO TO 205;
      <   J=1,IQ(LIF1+4);
          IF (IQ(LDIAG+J+IDFST).EQ.0)  <IPDIAG=IPDIAG+1; IQ(IPDIAG)= J;>
          IF (IQ(LDIAG+J+IDFST).EQ.-1) <IPDIAG=IPDIAG+1; IQ(IPDIAG)=-J;>
      >
   >
205;CONTINUE;


*** Deck OCMX                            
! modif 04/01/93  K_A_TR diag treatment
NDIAG=IQ(LMXR+NCB+4);
 ...
IF(NDIAG.GT.0)
<
   NR=IQ(IPSZR+JR);
   <  JJ=1,NDIAG;
      IF SOLVE            " keep 1. on diag for K_A_TR"
      < J=IQ(LMXR+NCB+4+JJ);
        IF J.GT.0 < Q(LMX+J+(J-1)*NR)=0. >
      >ELSE
      < J=IABS(IQ(LMXR+NCB+4+JJ));Q(LMX+J+(J-1)*NR)=0.;
      >
!
   >
>

**********************************************************************************
**********************************************************************************
********  Exemples d'objets non standard *****************************************
**********************************************************************************
**********************************************************************************
From AHR :
++++++++++
TKTURB et TDISSI sont des cellules decalees et sont connectees a des cellules
d'une part, directement entre elles d'autres part. (Raison : non multiplication
des processeurs et objets sur systeme maille)
   Ce sont des Pseudo_Cell, sans D_flag.

Sachant (du ZINIT) qu elles sont appellees au debut de la D_loop, elles font :

  if Solve et nIter.eq.0 => zero les D_Mx (car on veut que leur dFi=0 dans la D_loop
                                               car d'autres transferts en dependent)
                            Fi = Fiz + dFi
  dans la step_Advance (.not.Solve)
                         => calcul des D_Mx et Omega.

conclusion : pour les Pseudo_Cells, il faudra,
              dans la step_adv, apres Fiz=Fi+dFi standard, ajouter Fi=Fiz.
              ne pas les appeler au debut de la D_loop
              ne pas utiliser leur D_Mx dans icelle.

From AHR :
++++++++++
 Regroupement souhaite de plusieurs transferts ensembles. Ils sont aux memes points,
ont les memes connections et doivent etre calcules dans un ordre determine.
Pourrait-on definir un macro transfert, qui serait vu de zinit /Ker comme un seul
et qui sous-traiterait ? Pb a rapprocher de l'appel des K_Tr par leur cellules,
et pourquoi pas de l'appel de ses transferts par les familles.
<-----/|\------>  ./Help/Programmers/Ker/Ker_Matrices_and_Topology
****************************************************************************************************************************************************
****************************************************************************************************************************************************
******* TEF Ker Matrices and IN IX IC Fc topics ********************************************************* Up transfer of components'location *******
****************************************************************************************************************************************************
**************************************************************************************************************************** (*mardi 20/08/1996 Al1)


                                           <-- H Fm -I----------------->X<-- G --->X<- F --->
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - ICI - X - I - - I
         .           ,                     I    ICIC .         .         X   CIC   X   C     I
         .           ,                     I    ICIC .         .         X   ICI   X   I     I
         .   Cl1     ,                     I    ICIC .         .         X   CIC   X   C     I
         .           ,                     I     Fc  .         .         X    FC   X   Fc    I
         I - - - - - I - - - - - I         X=========I - - - - I - - - - X=========X=========I
         .           ,           ,         I         .         .         X         X         I
         .           ,           ,         I         .         .         X         X         I
         .           ,    Cl2    ,         I         .         .         X         X         I
         .           ,           ,         I         .         .         X         X         I                          Dli,Dlx
         .           ,           ,         I         .         .         X         X         I                 LFmUp----Fi
         I           I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I                  I         ^
         .                       ,         I         .         .         X         X         I                  I           \
         .                       ,  Cl3    I         .         .         X         X         I                 IN             \
         .                       ,         I         .         .         X         X         I               ======             \
         .                       ,         I         .         .         X         X         I             Fc1     Fc2            \
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X           ------  ------             \
         .           |           .         I         .                   X         X         I             IC                         \
         ICICICIC    |           .         I         .                   X         X         I             . (LIC).LTr_in+Fi            \
    H    ICICICIC  Fc|           .         I   IN1   .  [D_Mx]s          X         X         I             .                              \
         ICICICIC    |           .         I         .                   X         X         I             -> SV->CX.CX,                    \   
         I - - - - - I - - - - - I - - - - I - - - - I - - - - I         X - - - - X - - - - I                     .    (LCX).LFi_in_IF==IC   \ 
         ,           .           .         I         .         .         X         X         I                      TV                         :
         .           .           .         I         .         .         X         X         I                       .                         :         
    H    .           .           .         I         .  IN2    .         X         X         I                        TV (LTR).LTr_in_Fi--------
         .           .           .         I         .         .         X         X         I
         I - - - - - I - - - - - I - - - - X         I - - - - I - - - - X - - - - X - - - - I
         .           .           .         I                   .         X         X         I
         .           .           .         I                   .         X         X         I
    H    .           .           .         I                   .  IN3    X         X         I
         .           .           .         I                   .         X         X         I
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
         .           |           .         I         .         .         X         X         I
         ICICICIC    |.....................I......................IX..Fc X  I N    X         I
    G    ICICICIC Fc |           .         I         .         .         X         X         I
         .           |           .         I         .         .         X         X         I
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
         .           .           .         I         .         .         X         X         I
    F    .           .           .         I         .         .         X         X         I
         ICICICIC Fc |.....................I......................IX..Fc X ..IX..FcX  I N    I
         .           .           .         I         .         .         X         X         I
         X - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I


Debugging of Cx Order for Futura version
========================================
de meme que la Ct * ABt_TV utilise la TV liste pour situer la BMx dans la IF*IF
on informe les IX des composantes de la FcUp a pourvoir (en conservant le ofset du LIF, ou du
moins un certain ofset hors portee du Bug. Pas d'info==toutes les composantes repliquees.
(Donc, si permutation identique, comme avant)

Mx structure seen from base of tree
===================================
               SVs ---> Cxs --->                   X        X           X
         I - - - - - I - - - - - I - - - - X   X -TV -X  X -TV -X    X -TV -X 
         .           ,                     I   I      I  I      I    I      I 
         .           ,                     I   I  AB1 I  I  AB2 I    I  AB3 I 
         .   Cl1     ,                     I   I      I  I      I    I      I 
         .           ,                     I   I Cx1  I  I      I    I      I 
         I - - - - - I - - - - - I         X   X - - -X  X X X XX    X X X XX 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I      I 
         .    v      ,    Cl2    ,         I   I  AB4 I 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I Cx2  I 
         I    v      I - - - - - I - - - - X   X X X XX 
         .    v                  ,         I
         .    v                  ,  Cl3    I
         .    v                  ,         I     |(LCX1).LFi_in_IF
         .    v                  ,         I     |               
         X X XvX X X   X X X X X X X X X X X     |               
         I      Cx I TV                          |               
         I         I                             V               
   Fi_IC1I      Cx I TV---- (LCX.)LFi_in_IF -->  .
         I         I
         I      Cx I TV
         X X X X X X
              v
              v
              v
         X X XvX X X  
         I         I
         I         I
   Fi_IC2I         I
         I         I
         X X X X X X
























<-----/|\------>  ./Help/Programmers/Ker/Ker_Subroutines_CMZTree
     1   0   OPP                             
     2   1      OBLDDAT                         
     3   2         UHTOC                           
     4   2         GETSCH                          
     5   2         CALDAT                          
     6   1      OBKDAT                          
     7   1      ALAR                            
     8   1      MQINIT                          
     9   2         MZEBRA                          
    10   2         MZSTOR                          
    11   2         MZNEED                          
    12   2         MZLOGL                          
    13   2         MZDIV                           
    14   2         MZIXCO                          
    15   2         MZXREF                          
    16   1      GOSETT                          
    17   1      GOSETC                          
    18   1      IOMX                            
    19   2         MZLINT                          
    20   2         MQZERO                          
    21   3            MZLIFT                          
    22   1      ZINIT                           
    23   1      MQGARB1                         
    24   2         MZIXCO                          
    25   2         MZGARB                          
    26   1      ZOOM                            
    27   2         MZIXCO                          
    28   2         MZGARB                          
    29   2         DZSTOR                          
    30   2         OCLRNM                          
    31   3            SBIT1                           
    32   3            MZDROP                          
    33   2         OKVA                            
    34   3            MZDROP                          
    35   2         OIFM                            
    36   3            MQLIFT                          
    37   4               MZLIFT                          
    38   2         OICLTR                          
    39   3            OYCLTR                          
    40   4               MQLIFT                           ===> 36
    41   4               UCOPY                           
    42   4               GOCL2                           
    43   4               OCAB                            
    44   5                  MQZERO                           ===> 20
    45   4               GOTR2                           
    46   4               OCNI2                           
    47   5                  MQLIFT                           ===> 36
    48   5                  UCOPY                           
    49   5                  GOTR2                           
    50   5                  GOCL2                           
    51   5                  OCAB                            
    52   6                     MQZERO                           ===> 20
    53   3            OFI2FIZ                         
    54   4               MQLIFT                           ===> 36
    55   4               UCOPY                           
    56   4               OCNI3                           
    57   5                  MQLIFT                           ===> 36
    58   5                  UCOPY                           
    59   2         OA2MXT                          
    60   3            MQLIFT                           ===> 36
    61   3            UCOPY                           
    62   3            SBIT0                           
    63   3            OF2MXT                          
    64   4               MQWORK                          
    65   5                  MZWORK                          
    66   4               MQLOW                           
    67   5                  MQLIFT                           ===> 36
    68   4               VZERO                           
    69   4               MQLIFT                           ===> 36
    70   4               OCITB                           
    71   5                  MQZERO                           ===> 20
    72   4               ZSHUNT                          
    73   4               ZPRESS                          
    74   4               SBIT1                           
    75   3            OTYPMX                          
    76   3            SBIT1                           
    77   2         TIMED                           
    78   2         ORESUME                         
    79   3            C_OPEN_OLD                      
    80   3            C_READ                          
    81   3            C_POS_COURANT                   
    82   3            C_POS_ABSO                      
    83   3            C_CLOSE                         
    84   2         MQGARB                          
    85   3            MZGARB                          
    86   2         ZSTEER                          
    87   2         MZLOGL                          
    88   2         OKDETA                          
    89   3            SBIT1                           
    90   2         OSTART                          
    91   3            UCOPY                           
    92   3            GOCL3                           
    93   2         OTRDA                           
    94   3            MQLIFT                           ===> 36
    95   3            UCOPY                           
    96   3            SBIT0                           
    97   3            OTRND                           
    98   4               GOTR                            
    99   4               UCOPY                           
   100   3            OTRD                            
   101   4               GOTR                            
   102   3            OCCT                            
   103   4               MQZERO                           ===> 20
   104   4               SBIT0                           
   105   3            SBIT1                           
   106   2         OPTAU                           
   107   2         DZVERI                          
   108   2         OUPEQ                           
   109   3            MQLIFT                           ===> 36
   110   3            UCOPY                           
   111   3            OEQ                             
   112   4               MQLIFT                           ===> 36
   113   4               UCOPY                           
   114   4               MQWORK                           ===> 64
   115   4               OCWRK                           
   116   5                  MQLIFT                           ===> 36
   117   5                  QTOPSY                          
   118   6                     ZTOPSY                          
   119   4               OMXZER                          
   120   5                  QTOUCH                          
   121   6                     MZFLAG                          
   122   5                  ZPRESS                          
   123   4               OCMX                            
   124   5                  MQLIFT                           ===> 36
   125   5                  MXUTY                           
   126   5                  MQZERO                           ===> 20
   127   4               VSUB                            
   128   4               VZERO                           
   129   4               OA2CDX                          
   130   5                  OF2CDX                          
   131   6                     MQLIFT                           ===> 36
   132   5                  OC2CDX                          
   133   6                     MQLIFT                           ===> 36
   134   6                     QTOPSY                           ===> 117
   135   5                  OT2CDX                          
   136   4               OA2P                            
   137   5                  OMXT2P                          
   138   6                     MQLIFT                           ===> 36
   139   5                  OSV2P                           
   140   6                     MQLIFT                           ===> 36
   141   5                  OTV2P                           
   142   4               OCMXTR                          
   143   5                  MQLIFT                           ===> 36
   144   4               EOLEF                           
   145   5                  OIX2RX                          
   146   6                     MQLIFT                           ===> 36
   147   6                     SBIT0                           
   148   5                  OMXAR                           
   149   6                     OMXAG                           
   150   7                        VADD                            
   151   5                  VADD                            
   152   5                  OAXG2C                          
   153   6                     QTOUCH                           ===> 120
   154   6                     VZERO                           
   155   6                     ZPRESS                          
   156   6                     MQCOPY                          
   157   6                     UCOPY                           
   158   6                     ZSHUNT                          
   159   6                     MQZERO                           ===> 20
   160   5                  ORRES                           
   161   5                  OMXCDL                          
   162   6                     MXNAD                           
   163   5                  OMXCGX                          
   164   6                     OMXER                           
   165   7                        OMXG                            
   166   5                  SBIT1                           
   167   4               OEQS                            
   168   5                  OIC2RX                          
   169   6                     MQLIFT                           ===> 36
   170   6                     SBIT0                           
   171   5                  OMXAD                           
   172   6                     OMXAG                            ===> 149
   173   5                  SBIT1                           
   174   4               QTOUCH                           ===> 120
   175   3            DZSTOR                          
   176   3            EOLMAX                          
   177   4               OLRES                           
   178   3            ODMXTA                          
   179   2         ODNEQ                           
   180   3            MQWORK                           ===> 64
   181   3            OE2DXF                          
   182   4               UCOPY                           
   183   3            ODLF                            
   184   4               MXNAD                           
   185   4               EOLMAX                           ===> 176
   186   3            VADD                            
   187   2         ORESET                          
   188   3            MZWIPE                          
   189   3            SBIT1                           
   190   3            QPURGE                          
   191   4               ZPRESS                          
   192   3            QSHUNT                          
   193   4               ZSHUNT                          
   194   2         MOVUP                           
   195   3            MQLIFT                           ===> 36
   196   3            UCOPY                           
   197   3            GOCL                            
   198   3            OAB2TR                          
   199   4               VSCALE                          
   200   3            GOTR                            
   201   3            OCNCTI                          
   202   4               MQLIFT                           ===> 36
   203   4               UCOPY                           
   204   4               MQZERO                           ===> 20
   205   4               SBIT0                           
   206   4               GOTR                            
   207   4               GOCL                            
   208   4               OAB2TR                           ===> 198
   209   3            EOLE                            
   210   4               MQLIFT                           ===> 36
   211   4               UCOPY                           
   212   4               MQWORK                           ===> 64
   213   4               OCWRK                            ===> 115
   214   4               OMXZER                           ===> 119
   215   4               OCMX                             ===> 123
   216   4               VZERO                           
   217   4               OA2CDX                           ===> 129
   218   4               OA2P                             ===> 136
   219   4               OCMXTR                          
   220   5                  MQLIFT                           ===> 36
   221   4               EOLEF                            ===> 144
   222   4               EOLES                           
   223   5                  OIC2RX                           ===> 168
   224   5                  OMXCAG                          
   225   6                     OMXGV                           
   226   5                  OEL2D                           
   227   6                     MQLOW                           
   228   7                        MQLIFT                           ===> 36
   229   6                     SBIT1                           
   230   6                     VZERO                           
   231   5                  OMXAD                           
   232   6                     OMXAG                            ===> 149
   233   5                  OMXCAB                          
   234   6                     ZMXG1                           
   235   5                  SBIT1                           
   236   4               EOLET                           
   237   4               MZWIPE                          
   238   3            DZSTOR                          
   239   3            EOLMAX                           ===> 176
   240   3            ODMXTA                          
   241   3            DZSPMX                          
   242   4               OPSCMX                          
   243   2         MOVDN                           
   244   3            MQWORK                           ===> 64
   245   3            OE2DXF                           ===> 181
   246   3            ODLF                             ===> 183
   247   2         OPDETA                          
   248   3            ODETA                           
   249   4               UCOPY                           
   250   4               MXNAD2                          
   251   4               VADD                            
   252   2         OPETA                           
   253   2         OW2PAW                          
   254   3            C_WRITE                         
   255   3            OMAPIT                          
   256   3            C_OPEN_NEW                      
   257   3            C_WRITE_RC                      
   258   3            UCOPY                           
   259   3            C_CLOSE                         
   260   3            OT2CMF                          
   261   4               DATIMH                          
   262   3            OSK2HP                          
   263   4               VBLANK                          
   264   2         TIMEL                           
   265   2         MZWIPE                          
   266   2         QEND                            
   267   3            MZEND                           
   268   1      C_CLOSE                         
<-----/|\------>  ./Help/Programmers/Ker/Matrix_Computation -> Tef_Mx_Structure
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Circulation_de_l_info_entre_Bks
*****************************************************************************
*****************************************************************************
*** Dans l'ordre des appels dans EOLE/OEQ Pair, Tab, etc Bks ****************
*****************************************************************************
*****************************************************************************


  CALL MQWORK(DFIRST,DLAST);
! ***************************************************************************
  CALL OCWRK(LFM);
! ***************************************************************************
! ................ Creation des Working Banks WEZ\_|WCst> pour Fm\_|SO>
! ................     (LFm).Nb_Ctt > WEZ(1)
! ................         Elementary SO WCst(1)=No du Plugs
! ................         Fm                    (LMXT2).Nb_BRows
! ................     Commentaires ther is one Pair Bk / Plug
! ................                          one Pair Bk / AH(gx)
! ................    
! ................    
! ................    
;
! - PREPARE OMTX CALL-BANK : LRDXT = STR LINK; LCDXT, LPAIR = REF LINK;
! ***************************************************************************
  CALL OMXZER;
! ***************************************************************************
! ................  Reset ZMX call-bank structure : set to zero 1st call-bank
! ................  (address = LZMX) link and data words.
! ................
! ................  IQ(LZMX+1)=12; IQ(LZMX+2)=3;  IQ(LZMX+3)=14;
! ................  -12 => Pair ; -3 => RDXT; -14 => CDXT (or pointer IP(CDXTE)
! ................ cf ZMX Call-bank for OMTX package; LZMX eq LQUSER(4); cf IOMX  
! ................
;
! -  LIFT ALL MX BANKS
! ***************************************************************************
  CALL OCMX(LFM);
! ***************************************************************************
! ................     EOLE Matrix (LMX) Creation under Fm                        
! ................     scan MXT-MXR tables and build MX banks                     
! ................                  Fm                                            
! ................                    \_ MxT                                      
! ................                         \_ MxR -> MxR ->                       
! ................             creation>       |_ Mx->Mx->                        
! ................            (using SC & SR Size Bks)                            
! ................     with special Mx Diag treatment for D_loop K_A_Tr           
! ................ ************************************************************   
! ................ TEF : les quatres matrices (f-f),(f-x),(x-f), et (x-x)         
! ................   correspondent aux 4 MXT Bks; pour chaque matrice, on a       
! ................   autant de MxR que d'interfaces, chaque Bligne a son MxR bk
! ................   decoupee par autant de Mx que de Mx [IFi,IFj] connectante.
! ................    
! ................    
! ................    
! ................    
;
UNDER FM(LFM)
<
  GET DL(LDL); GET MG(LOMG);
  CALL UCOPY((LOMG).Omega(1),(LDL).Delta(1),(LFm).Nb_Int_Var);
  LDL = LQ(LDL+ONX);
  CALL VZERO((LDL).Delta(1),(LFm).Nb_Out_Var);
;
! ===========================================================================
  CALL OA2CDX(LFm);- CREATE COLUMN CROSS TABLES FOR ALL CONSTITUENTS OF LFm:
                         (Rq : R or CDXTB CDXTE, B for Bloc, E for Element)
   Ici, Column puisque ces Blocs seront a droite dans les multiplications
! ................                      (cf > Cross_Ref_Tbles_General )
! ................    WCst
! ................        \_CDXF \_ pour les [INi,INj]    (Col duplication Cross Ref Tbles)
! ................     \_CDXT  pour les [INi,IXj] (a partir de FF (First Fc Cx to an IX)
! ................
! ................   puis, sous CDXf/t
! ................                \_ un CDXTB par Lo bloc et une chaine de
!.................                       CDXTE par Up bloc concerne
! ................  Ensuite, l'info est traitee differemment suivant Fm ou Cl  
! ................  =======================================Carte des Bks=========
((((((((((
Vocabulaire : IU et une IN ou IC superieure; LTM = Lo True matrix, UTM upper one.
SM est une Stored matrix, dont les blocs peuvent etre dupliques pour constituer une TM (True matrix)
))))))))))
! ................ CALL OC2CDX(LCl);   Une seule CDXTB pour les A-1Bt Cx/IN's_Up, une Cx/IX's_Up
! ................ =================(la matrice A-1Bt est en un seul bloc/bank, structuree par Fc/IC)
! ................  CDXTB(1)= 1;                            LTM BCol # La A-1Bt complete=unique----
                    CDXTB(2)=NROW;            AB transposed # Rows of LSM bloc = Sum{(Fc).NbVar}  |
! ................  CDXTB(3)=(LCL).Nb_St_Var;      ''       # Cols             = dimEta ........../
! ................  CDXTB(4)=NF;            # USM BCols over which this b will span == les IF_Up
! ................  puis /  (IU).Int_Nb;                      / UTM BCol #
! ................      <   0; (unused)   par face==USM bloc <  # rows of USM b
! ................       \  (IU).Nb_Var;                      \ # cols '' '' ''
! ................    
! ................   et, pour chaque face : (cad, pour chaque bloc du dessus concerne par la A-1Bt)
! ................   CDXTE(1)=(Fc).Nb_Int;  # Cols group in LSM(=IC) which are duplicated 1 time in USM
! ................   CDXTE(2)=(IU).Int_Nb;                   USM col bloc #
! ................   puis /  (IC).LTr_in_Cl;                    LSM Col bloc # (location of IC col group)
! ................       <   (IC).Nb_Tr_Var;    par IC          # Cols
! ................        \  (IC).LTr_in_Fc;                    USM Col # (location)
! ................    
! ................ CALL OF2CDX(LFmg);  a partir de la FF, un couple CDXTB-\CDXTE par IX_low
! ................ =================  
! ................  CDXTB(1)=(IX).Int_Nb;                   LTM BCol #  (Lo bloc)      
! ................  CDXTB(2)=0; (unused)                    # Rows of LSM bloc (IX_low)
! ................  CDXTB(3)=(IX).Nb_Var;                   # Cols            
! ................  CDXTB(4)=1;             # USM BCols over which this b will span (one IU <->FcUp)                          
! ................   CDXTB(5)=(IU).Int_Nb;            one USM bloc: UTM BCol #   (Up bloc)
! ................   CDXTB(6)=0; (unused)                       # rows of USM b 
! ................   CDXTB(7)=(IU).Nb_Var;                      # cols '' '' '' 
! ................    
! ................  CDXTE(1)=1;               # Cols group in LSM which are duplicated 1 time in USM    
! ................  CDXTE(2)=(IU).Int_Nb;                    USM col bloc #
! ................   CDXTE(3)=0;                                LSM Col bloc # (0_location)
! ................   CDXTE(4)=(IX).Nb_Var;                      # Cols
! ................   CDXTE(5)=(IX).L_Var_in_Fc;                 USM Col bloc # (location)
((((Rq : les notions SM et TM, respectivement Stored et True Matrix, se confondent ici puisque l'on
n'utilise pas de duplication d'un bloc d'une SM dans plusieurs blocs de la TM))))
;
"-    CREATE PAIRING TABLES FOR ALL THE CONSTITUENTS OF"
"-    THE FAMILY, TO PREPARE THE COMPUTATION OF :"
"-   . (CXG)*(AGX')"
C'est dans ce produit que l'EV eliminé peut etre represente differemment entre les colonnes de CXG
et les lignes de AGX, en fait n'est utilise que pour Ct_SV . pairing(SV=>Eta) . A-1B
! ==================================================================================
  CALL OA2P(LFm);
!    CREATE PAIRING TABLES FOR ALL THE CONSTITUENTS OF THE FAMILY,
!    TO PREPARE THE COMPUTATION OF : (CXG)*(AGX').
! ................  Pair(LPAIR) Bank : Nbr of groups (== segments)
! ................      /    -         IC  0_ptr on Ct column
! ................ 4-plet    -         JSV 0_ptr on expanded col Mx
! ................ /group    -         len group
! ................      \    -         1. Weight : Ct_SV_ip(j).ABjk * Weight
! ===========================================================================
! ................   CALL OSV2P(LCl); 
! ................   ================ 
! ................ Creation of the Pairing Bank between Ct_SV and AB Mx.
! ................  ( Complex pairing as Ct is structured already, not A-1B)
! ................  allows for the Ct_SV_p(i),j . AB_j,k product computation.
! ................ (il s'agit de la segmentation d'une liste de nombres naturels par
! ................ groupe de series naturelles)
! ................ Toute l'info provient du SV Bank.
!---------------------------------------------------------------------------
! ................    
! ................  PAIR(1)=NGR;                           Nber of Pairs/Segment
! ................  Pour chaque segment :  
! ................  | PAIR(+1)=IC;                 0_pointer on first segment prob.lower
! ................ _| PAIR(+2)=JSV;                 0_pointer on second segment prob.upper
! ................  | PAIR(+3)=IC-ICPREV;                  length of segment
! ................  | PAIR(+4)=1.;                Weight(WGHT) for special Finite Volume
exemple C-Plug # : 2,3,4,6,8,9; trois groupes : 2a4, 6a6, 8a9; NGR=3
pair(1 a 4)= 0,1,3,1.; qui dit que les 3 col a partir de la premiere de la Ct sont en
                        correspondance avec les trois lignes de la A-1B a partir de la 2eme.
pair(5 a 8)= 3,5,1,1.;                          etc
pair(9 a13)= 4,7,2,1.;
! ................    
!---------------------------------------------------------------------------
! ................    
! ................   CALL OMXT2P(LFm);
! ................   ================= 
!................. SUB-FAMILIES PAIR-BANKS CREATION :
!................. ONE PAIR-BANK PER BLOCK ROW OF AH(GX)
!- ??? a verifier: construction de AH(GX) line /line particulier"
          L 'info ne vient que du Size Bk; pour le CxBug, on utilisera les listes de Tr #,
          actuellement dans IX/IC
! ----------------------------------------------------------------------------------------------------
! ................    
! ................  Pour chaque BRow :  
! ................  PAIR(1)=1;                                Nber of Pairs
! ................  Un seul segment (hors CxBug)
! ................  | PAIR(2)=0;                 0_pointer on first segment prob.lower
! ................ _| PAIR(3)=0;                 0_pointer on second segment prob.upper
! ................  | PAIR(4)=IQ(IPSIZE+IROW);                length of segment
! ................  | PAIR(5)=1.;                Weight(WGHT) for special Finite Volume 
                  ces blocs sont donc inutiles actuellement.
! ===========================================================================
  CALL OCMXTR(LFm);
! CREATE C(XG) TABLES FOR ALL SUB-FAMILIES OF LFm :
!   Creates the MXTR and MXR banks used to support the C(XG) matrix structure.
!            == [x_g] triplet Mx for one IF bloc.
!   Lift one-only MxTRow under LWCst of each constituent, then
!   only one BRow for nIN BCols. Link Csize & Rsize on MxT.
! ===========================================================================
! ................  CREATE C(XG) TABLES FOR ALL SUB-FAMILIES OF LFm :
! ................    
! ................     TYPE=2 FOR C(XG) == [x_g]
! ................    0_(LMXT2.MT).Type = 2;                      sous forme de BCols
! ................    0_(LMXT2.MT).Nb_St_BRows = 1;
! ................    and link CSize and BSize Bks
! ................    
! ................    0_(LMXR.RT).BRow_Nb_TM  = 1;                        1 B Col
! ................    0_(LMXR.RT).Nb_St_BCols = 0_(LFMG.Fm).Nb_In_Int;    les IX 
! ................    
! ................   exemple si LFm est une Cellule   : les Ct avec BRows = ICs ??? pas Bcols !
;
! -  FAMILY VARIABLE TYPE :
  ITVF=(LFm).Nxt_lvl_Ad;
;
!-    GET TABLES; TWO AT A TIME; LOOP WILL PROCEED SIMULTANEOUSLY WITH
!-    ONE LINE OF EACH.
  LMXTF=LQ(LFm+OFMMT);   LMXTX=LQ(LMXTF+ONX);
;
  GET DL(LDL);  "Get Delta IN"
;
  SKIP THRU IN(LIF)
  <
    Execute Constituents_Elimination;
!   ---------------------------------
  >"End IN == ROW pair 1"
;
! -  GET NEXT TABLES' PAIR :
;
  LMXTF=LQ(LMXTX+ONX);   LMXTX=LQ(LMXTF+ONX);
  LDL = LQ(LDL+ONX);  "Get Delta IX"
;
  SKIP THRU Fc(LF1)
  < SKIP THRU IF(LIF)
    <
      Execute Constituents_Elimination;
!     ---------------------------------
    >;"End IX == ROW pair 2"
  >;"End Fc"
;
>"End from FM"
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Cross_Ref_Tbles_General
  **********************************************************************************************  
 ************************************************************************************************ 
************* Les Cross Reference Tables dans leur generalite ************************************
*************** et leur application par OC2CDX et OF2CDX *****************************************
 ************************************************************************************************ 
  *********************************************************************************************   

Les Cross Reference Tables decrivent la facon de distribuer des matrices par blocs (eventuellement
sous-structures) dans des blocs plus vastes (mono blocs); elles sont utilisees pour faire la
correspondance entre les partitions des transferts externes d'une famille en ix et celles des
transferts (de dimension au moins egale) de la famille mere (en IN, IX). Dans l'elimination de
cette famille inferieure (g), les matrices [g] et [g,g/,x], seront a droite dans les produits
triplets; les tables decrivent la correspondance colonne a colonne avec celles des matrices de la
famille mere (f) que l'on va calculer : [f,g,f] et [f,g_x,f_x] (cf > Eole )

On a, sous chaque constituant (Fm ou Cl) a eliminer :
une WCST bank sous laquelle :
       2 Duplication tables : CDXF et CDXT (par ex pour les 2 BRows (MT bks)

sous une CDXT(ou F) :

               Une CDXTB par Lo bloc
                        (1) Numero du Lo bloc
                        (2) # lignes
                        (3) # colonnes
                        (4) # de Up bloc (=n)ou il va etre distribue
                        / +1  Up bloc #
                    n: <  +2  # lignes
                        \ +3  # colonnes

              et pour chaque Up bloc concerne par le Lo :
                    Une CDXTE par Up blo (ou les Up dupliques) :
                            (1) # lo col group (=m) allant au-dessus (r fois)
                            (2) Up bloc numero (ou r_liste des)
                           /  +1 Col location in Lo
                       m  <   +2 # colonnes
                           \  +3 Col loc in Up  (r fois)
                r etant donne dans la CDXT


**************************************************************************************************
******** Application pour l'elimination d'une famille (OF2CDX)************************************
**************************************************************************************************
               Pour chaque bloc (IN,IX) de la famille mere, on doit recuperer des sous-blocs (IX)
               de chaque fille a travers une face :

Transferts vus
par la Fm g     |-ix-|----ix2----|          |------ix----|           |-ix-|--ix--|---ix--| ...
faces d'une Fmg:|----^--fc-------|          |-----Fc-----|           |---------Fc--------| ...
                     |_(ix2).L_Var_in_Fc                             (First Face Cx to an IX)

Transferts de   <------IN--------><---IN---><-----IN-----><...>||<..><---------IX--------><...>
la Fm f

               Une CDXTB par Lo bloc : ix
                        (1) Numero du Lo bloc = (ix).Int_Nb
                        (2) # lignes          = 0 (unused)
                        (3) # colonnes        = (ix).Nb_Var  dim Fi_ix
                        (4) # de Up bloc      = 1 : IN ou IX
                        / +1  Up bloc #            = (IU).Int_Nb  IU==IN ou IX
                    1: <  +2  # lignes             = 0 (unused)
                        \ +3  # colonnes           = (IU).Nb_Var  dim Fi_IU
                                                             
              et pour le IU bloc concerne par le ix :
                    Une CDXTE
                            (1) # lo col group  = 1 (pas de sous-partition des ix)
                            (2) Up bloc numero  = (IU).Int_Nb
                           /  +1 Col location in Lo = 0 (le debut du bloc)
                       n  <   +2 # colonnes         = (ix).Nb_Var
                           \  +3 Col loc in Up      = (ix).L_Var_in_Fc

**************************************************************************************************
******** Application pour l'elimination d'une cellule (OC2CDX)************************************
**************************************************************************************************
               La A-1Bt est en un seul bloc (bank), et va etre distribuee sur les IN & IX de la
               Famille mere. Il s'agit de la forme de A-1B au 28/01/99.

                   \ . . . . . . . ts les Tr Cx . . ./
              \    +-----x----x---------------x------+
              .    |     |    |               |      |
              .    |     |    |               |      |
         Eta  .    |     |    |   A-1B ou B   |      |      (elle est rangee transposee)
              .    |     |    |               |      |
              /    +-----x----x---------------x------+
         Cl          ic    ic        ic          ic
                   < - - Fc- ->< - - Fc- - - >|<- Fc->
         . . . . . . . . . . ... . . . . . . . . . . . . . . . . .
                   .          . .              .   \
                   .          .   .              .    \
                   .          .     .              .     \
         Fm        .          .      .               .      \
                   .          .       .                .       \
                   <--IN------>< . . . ><------IN-------> . . . <---IX--> . . .

             => une seule CDXTB pour les Fc Cx IN_Up, une pour les IX_up (les 2 MT blocs de Fm_Up)
                        (1) = 1 numero du bloc unique (arbitraire)
                        (2) # lignes n =  Sum{(Fc).NbVar} dimension totale des Fi de la Face
                        (3) # colonnes = DimEta, cad qu'on la decrit transposee !
                        (4) # de Up bloc ou il va etre distribue = Nbre de Faces = Nbre de IU
                        / +1  Up bloc #  = Numero de la IF_Up
                    n: <  +2  # lignes   = 0 (unused)
                        \ +3  # colonnes = (IU).NbVar

              et pour chaque Up bloc concerne par le Lo, cad pour chaque face Fc:
                    Une CDXTE :
                            (1) # lo col group allant au-dessus = (Fc).Nb_Int = nbre de IC
                            (2) IF_Up #
                           /  +1 Col location in Lo = (IC).LTr_in_Cl
                       n  <   +2 # colonnes         = (IC).Nb_Tr_Var
                           \  +3 Col loc in Up      = (IC).LTr_in_Fc

 On constate ainsi que la structure de la A-1Bt vue par le noyau n'est structuree que par ses IC,
Cell Interface, dont chacun n'a qu'une SV (C-Plug) correspondante. En ce qui concerne les TV (T-plug)
par ou sont connectes les transferts ils n'apparaissent pas dans cette structure. Pour l'heure, donc,
le passage ABt_TV a ABt_IC est directement effectue dans le processeur de cellule, via la position
de la IC [(IC).LTr_in_Cl)], celle du Fi dans la IC [(CX).LFi_in_IF] et la composante de Fi dans la
TV liste.

{{{ Futura : cf > Cross_Ref_Tbles_General.Futura }}}

==================================================================================================
Remarque : on a essentiellement decrit des structures par colonnes, les matrices decrites se
trouvant a droite dans les produits matriciels; pour les matrices multiplicandes a gauche, on aura
une description par lignes et les memes tables seront RDXTB et RDXTE (R==Raw) sous RDXF ou RDXT.
Du fait de la symetrie des matrices zoom par blocs, ces tables sont identiques table a table a deux
differences pret : echange de ligne et colonnes, et la structure de la Ct qui n'est pas symetrique
a celle de A-1B, ce qui plaide pour deux ameliorations *Futura*:
- l'une c'est l'echange de l'info ligne/col entre R et C tables, qui eviterait la duplication de la
  structure C en R, alors que la structure MT\_RT est unique, puisqu'on utilise la meme pour les
  matrices mutiplicande a gauche (pointeurs sur les memes tables)
- l'autre consiste au traitement hors ce cadre des Ct*A-1B.
==================================================================================================

**************************************************************************************************
************* Chainage entre Bank ZEBRA **********************************************************
**************************************************************************************************

    Constituant (fm ou Cl)
           \
            \_ WCst                Arbre ZEBRA cree juste avant l'elimination pour les constituants
                 \ \_ |CDXTF>                                             d'une famille.
                  \       \__|CDXTE>
                   \
                    \_ |CDXTB>
                           \__|CDXTE>
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Cross_Ref_Tbles_General.Futura
**************************************************************************************************
************ Examen de la pertinence des Cross Refernce Tables pour la Ct.A-1B *********Futura?***
********************  O B S O L E T E  ***********  O B S O L E T E  *****************************

On retiend la forme ABt_TV, cad un bloc par TV; c'est insispensable si l'on veut pouvoir connecter
un transfert a une cellule a travers plusieurs TV, car les macros ne doivent pas faire le cumul,
c'est au noyau de le faire a partir de blocs matriciels nuls.

En conservant l'idee des Cross Reference Tables(CRT), on a alors une CDXTB par bloc TV, et si le nbre de lignes
de la ABt_TV est dimFi, il n'y a pas de sous-structure, mais comme un Tr Fi n'est pas vue par cette CRT
structure, on est bien conduit a l'abandonner pour traiter de la Cecroisamoinsunbisation.
Pour concretiser cette ABt_TV de dimFi, on va l'ecrire ABt_TR.
Pour tenter de sauver les CRT, il faudrait rassembler les ABt_TR par IC, et en conservant la
possibilite qu'un transfert soit plusieurs fois connecte a une SV (IC), la CDXTB ferait la repartition
de la sous-structure avec cumul sur les memes colonnes du transfert en question, donc ca marche.
un transfert peut ainsi etre concerne plusieurs fois dans une IC, et dans plusieurs IC. Par contre,
comment rassembler les TV par IC, sachant qu'un TV peut etre connecte a differents SV(IC)? Il suffit
d'associer la ABt_TV a la IC de la SV connectee a la TV.

Cela ne resoud cependant pas le pb de compression, si l'on ne veut ranger que les composantes du TV,
ce qui deviend d'autant plus indispensable que l'on a multiplie le nombre d'occurences d'un transfert
dans des blocs ABt_TV et IC differents. Les pairing banks ne concernent pas ce type de probleme, car
ils ne concernent que les vecteurs qui vont etre elimines par la multiplication, comme la formule :
Ct_SV * pairing * A-1B l'indique. Il faudrait des lors sous-structurer un bloc ABt_IC directement
en elements, ce qui donnerait :

            une CDXTB par IC
                        (1) = numero de la IC
                        (2) # lignes n =  Sum{(TV).Nb_Var} dimension totale des TV de la IC
                        (3) # colonnes = DimEta, [ou dimSV pour ABt_SV_TV]
                        (4) # de Up bloc ou il va etre distribue = 1, la IC etant sous une seule Face
                        / +1  Up bloc #  = Numero de la IU
                    1: <  +2  # lignes   = 0 (unused)
                        \ +3  # colonnes = (IU).NbVar

              et pour cette IU bloc concernee par la IC,
                    Une seule CDXTE :
                            (1) # lo col allant au-dessus =Sum{(TV).Nb_Var} =n
                            (2) IU #
                           /  +1 Col location in Lo = k de 1 a n
                       n  <   +2 # colonnes         = 1 seule
                           \  +3 Col loc in Up      = (IC).LTr_in_Fc + (TV).LTr_in_IC + (TV).Tr_var_Nb(k)


ce qui semble lourd, mais faisable.

**************************************************************************************************
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Cross_Ref_Tbles_General.Futura.bak
**************************************************************************************************
************ Examen de la pertinence des Cross Refernce Tables pour la Ct.A-1B *********Futura?***
**************************************************************************************************

On retiend la forme ABt_TV, cad un bloc par TV; c'est insispensable si l'on veut pouvoir connecter
un transfert a une cellule a travers plusieurs TV, car les macros ne doivent pas faire le cumul,
c'est au noyau de le faire a partir de blocs matriciels nuls.

En conservant l'idee des Cross Reference Tables(CRT), on a alors une CDXTB par bloc TV, et si le nbre de lignes
de la ABt_TV est dimFi, il n'y a pas de sous-structure, mais comme un Tr Fi n'est pas vue par cette CRT
structure, on est bien conduit a l'abandonner pour traiter de la Cecroisamoinsunbisation.
Pour concretiser cette ABt_TV de dimFi, on va l'ecrire ABt_TR.
Pour tenter de sauver les CRT, il faudrait rassembler les ABt_TR par IC, et en conservant la
possibilite qu'un transfert soit plusieurs fois connecte a une SV (IC), la CDXTB ferait la repartition
de la sous-structure avec cumul sur les memes colonnes du transfert en question, donc ca marche.
un transfert peut ainsi etre concerne plusieurs fois dans une IC, et dans plusieurs IC. Par contre,
comment rassembler les TV par IC, sachant qu'un TV peut etre connecte a differents SV(IC)? Il suffit
d'associer la ABt_TV a la IC de la SV connectee a la TV.

Cela ne resoud cependant pas le pb de compression, si l'on ne veut ranger que les composantes du TV,
ce qui deviend d'autant plus indispensable que l'on a multiplie le nombre d'occurences d'un transfert
dans des blocs ABt_TV et IC differents. Les pairing banks ne concernent pas ce type de probleme, car
ils ne concernent que les vecteurs qui vont etre elimines par la multiplication, comme la formule :
Ct_SV * pairing * A-1B l'indique. Il faudrait des lors sous-structurer un bloc ABt_IC directement
en elements, ce qui donnerait :

            une CDXTB par IC
                        (1) = numero de la IC
                        (2) # lignes n =  Sum{(TV).Nb_Var} dimension totale des TV de la IC
                        (3) # colonnes = DimEta, [ou dimSV pour ABt_SV_TV]
                        (4) # de Up bloc ou il va etre distribue = 1, la IC etant sous une seule Face
                        / +1  Up bloc #  = Numero de la IU
                    1: <  +2  # lignes   = 0 (unused)
                        \ +3  # colonnes = (IU).NbVar

              et pour cette IU bloc concernee par la IC,
                    Une seule CDXTE :
                            (1) # lo col allant au-dessus =Sum{(TV).Nb_Var} =n
                            (2) IU #
                           /  +1 Col location in Lo = k de 1 a n
                       n  <   +2 # colonnes         = 1 seule
                           \  +3 Col loc in Up      = (IC).LTr_in_Fc + (TV).LTr_in_IC + (TV).Tr_var_Nb(k)


ce qui semble lourd, mais faisable.

**************************************************************************************************
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Cross_Ref_Tbles_General.bak
  **********************************************************************************************  
 ************************************************************************************************ 
************* Les Cross Reference Tables dans leur generalite ************************************
*************** et leur application par OC2CDX et OF2CDX *****************************************
 ************************************************************************************************ 
  *********************************************************************************************   

Les Cross Reference Tables decrivent la facon de distribuer des matrices par blocs (eventuellement
sous-structures) dans des blocs plus vastes (mono blocs); elles sont utilisees pour faire la
correspondance entre les partitions des transferts externes d'une famille en ix et celles des
transferts (de dimension au moins egale) de la famille mere (en IN, IX). Dans l'elimination de
cette famille inferieure (g), les matrices [g] et [g,g/,x], seront a droite dans les produits
triplets; les tables decrivent la correspondance colonne a colonne avec celles des matrices de la
famille mere (f) que l'on va calculer : [f,g,f] et [f,g_x,f_x] (cf > Eole )

On a, sous chaque constituant (Fm ou Cl) a eliminer :
une WCST bank sous laquelle :
       2 Duplication tables : CDXF et CDXT (par ex pour les 2 BRows (MT bks)

sous une CDXT(ou F) :

               Une CDXTB par Lo bloc
                        (1) Numero du Lo bloc
                        (2) # lignes
                        (3) # colonnes
                        (4) # de Up bloc (=n)ou il va etre distribue
                        / +1  Up bloc #
                    n: <  +2  # lignes
                        \ +3  # colonnes

              et pour chaque Up bloc concerne par le Lo :
                    Une CDXTE par Up blo (ou les Up dupliques) :
                            (1) # lo col group (=m) allant au-dessus (r fois)
                            (2) Up bloc numero (ou r_liste des)
                           /  +1 Col location in Lo
                       m  <   +2 # colonnes
                           \  +3 Col loc in Up  (r fois)
                r etant donne dans la CDXT


**************************************************************************************************
******** Application pour l'elimination d'une famille (OF2CDX)************************************
**************************************************************************************************
               Pour chaque bloc (IN,IX) de la famille mere, on doit recuperer des sous-blocs (IX)
               de chaque fille a travers une face :

Transferts vus
par la Fm g     |-ix-|----ix2----|          |------ix----|           |-ix-|--ix--|---ix--| ...
faces d'une Fmg:|----^--fc-------|          |-----Fc-----|           |---------Fc--------| ...
                     |_(ix2).L_Var_in_Fc                             (First Face Cx to an IX)

Transferts de   <------IN--------><---IN---><-----IN-----><...>||<..><---------IX--------><...>
la Fm f

               Une CDXTB par Lo bloc : ix
                        (1) Numero du Lo bloc = (ix).Int_Nb
                        (2) # lignes          = 0 (unused)
                        (3) # colonnes        = (ix).Nb_Var  dim Fi_ix
                        (4) # de Up bloc      = 1 : IN ou IX
                        / +1  Up bloc #            = (IU).Int_Nb  IU==IN ou IX
                    1: <  +2  # lignes             = 0 (unused)
                        \ +3  # colonnes           = (IU).Nb_Var  dim Fi_IU
                                                             
              et pour le IU bloc concerne par le ix :
                    Une CDXTE
                            (1) # lo col group  = 1 (pas de sous-partition des ix)
                            (2) Up bloc numero  = (IU).Int_Nb
                           /  +1 Col location in Lo = 0 (le debut du bloc)
                       n  <   +2 # colonnes         = (ix).Nb_Var
                           \  +3 Col loc in Up      = (ix).L_Var_in_Fc

**************************************************************************************************
******** Application pour l'elimination d'une cellule (OC2CDX)************************************
**************************************************************************************************
               La A-1Bt est en un seul bloc (bank), et va etre distribuee sur les IN & IX de la
               Famille mere. Il s'agit de la forme de A-1B au 28/01/99.

                   \ . . . . . . . ts les Tr Cx . . ./
              \    +-----x----x---------------x------+
              .    |     |    |               |      |
              .    |     |    |               |      |
         Eta  .    |     |    |   A-1B ou B   |      |      (elle est rangee transposee)
              .    |     |    |               |      |
              /    +-----x----x---------------x------+
         Cl          ic    ic        ic          ic
                   < - - Fc- ->< - - Fc- - - >|<- Fc->
         . . . . . . . . . . ... . . . . . . . . . . . . . . . . .
                   .          . .              .   \
                   .          .   .              .    \
                   .          .     .              .     \
         Fm        .          .      .               .      \
                   .          .       .                .       \
                   <--IN------>< . . . ><------IN-------> . . . <---IX--> . . .

             => une seule CDXTB pour les Fc Cx IN_Up, une pour les IX_up (les 2 MT blocs de Fm_Up)
                        (1) = 1 numero du bloc unique (arbitraire)
                        (2) # lignes n =  Sum{(Fc).NbVar} dimension totale des Fi de la Face
                        (3) # colonnes = DimEta, cad qu'on la decrit transposee !
                        (4) # de Up bloc ou il va etre distribue = Nbre de Faces = Nbre de IU
                        / +1  Up bloc #  = Numero de la IF_Up
                    n: <  +2  # lignes   = 0 (unused)
                        \ +3  # colonnes = (IU).NbVar

              et pour chaque Up bloc concerne par le Lo, cad pour chaque face Fc:
                    Une CDXTE :
                            (1) # lo col group allant au-dessus = (Fc).Nb_Int = nbre de IC
                            (2) IF_Up #
                           /  +1 Col location in Lo = (IC).LTr_in_Cl
                       n  <   +2 # colonnes         = (IC).Nb_Tr_Var
                           \  +3 Col loc in Up      = (IC).LTr_in_Fc

 On constate ainsi que la structure de la A-1Bt vue par le noyau n'est structuree que par ses IC,
Cell Interface, dont chacun n'a qu'une SV (C-Plug) correspondante. En ce qui concerne les TV (T-plug)
par ou sont connectes les transferts ils n'apparaissent pas dans cette structure. Pour l'heure, donc,
le passage ABt_TV a ABt_IC est directement effectue dans le processeur de cellule, via la position
de la IC [(IC).LTr_in_Cl)], celle du Fi dans la IC [(CX).LFi_in_IF] et la composante de Fi dans la
TV liste.

{{{ Futura : cf > Cross_Ref_Tbles_General.Futura }}}

==================================================================================================
Remarque : on a essentiellement decrit des structures par colonnes, les matrices decrites se
trouvant a droite dans les produits matriciels; pour les matrices multiplicandes a gauche, on aura
une description par lignes et les memes tables seront RDXTB et RDXTE (R==Raw) sous RDXF ou RDXT.
Du fait de la symetrie des matrices zoom par blocs, ces tables sont identiques table a table a deux
differences pret : echange de ligne et colonnes, et la structure de la Ct qui n'est pas symetrique
a celle de A-1B, ce qui plaide pour deux ameliorations *Futura*:
- l'une c'est l'echange de l'info ligne/col entre R et C tables, qui eviterait la duplication de la
  structure C en R, alors que la structure MT\_RT est unique, puisqu'on utilise la meme pour les
  matrices mutiplicande a gauche (pointeurs sur les memes tables)
- l'autre consiste au traitement hors ce cadre des Ct*A-1B.
==================================================================================================

**************************************************************************************************
************* Chainage entre Bank ZEBRA **********************************************************
**************************************************************************************************

    Constituant (fm ou Cl)
           \
            \_ WCst                Arbre ZEBRA cree juste avant l'elimination pour les constituants
                 \ \_ |CDXTF>                                             d'une famille.
                  \       \__|CDXTE>
                   \
                    \_ |CDXTB>
                           \__|CDXTE>
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/CtAB.product.hlp
SUBROUTINE OMXCAB(LMXC,LMXAB,LMXRAH);
! . ___. __ . __ . _  _   ......................................
!     / |  | |  | | \/ |  KERNEL                    LESETH - LMD
!    /  |  | |  | |    |  SUBROUTINE OMXCAB                    .
!   /__ |__| |__| |    |  Written by LESETH & RAMSES           .
!                                                              .
!   Compute the Ct*AB product for one Ct block (corresponding  .
!    to one given Cell interface) and for the whole AB matrix. .
!    The output is stored in the corresponding row of the      .
!    coupling matrix.                                          .
!   Input : LMXC = Ct matrix bank address                      .
!           LMXAB = AB matrix bank address                     .
!           LMXRAH = coupling matrix row bank address          .
!
!           Call-bank :                                        .
!            OXCAB_PAIR (+0 or +OX_S) : PAIR                   .
!            OXCAB_CDX (+0 or +OX_S) : CDXT                    .
!            OXCAB_RDX (+0 or +OX_S) : RDXT                    .
!                      --------------                          .
!            2 : Switch to PAIR (= OXCAB_PAIR or OXCAB_PAIR+OX_S)
!            2 : Switch to RDXT (= OXCAB_RDX or OXCAB_RDX+OX_S).
!            3 : Switch to CDXT (= OXCAB_CDX or OXCAB_CDX+OX_S).
!
!    Use : OMXG call bank                                      .
!                                                              .
!   Modified by Jean_Yves GRANDPEIX, 12/08/94, 10:30           .
!...............................................................
!
"-    GET CALL-BANK ADDRESS"
LZMX1=LQ(LZMX1+ONX);
LZMX2=LQ(LZMX1+ONX);

"-    GET OUTPUT MATRIX CTBR."
IPCTBR=@(LMXRAH.RT).CR+2;             AH pointeur
"-    GET PAIR,RDXTE,CDXTE ADDRESSES"
LQ(LZMX2+OXG_PAIR)=LQ(LZMX1-IQ(LZMX1+1));
LRDXT=LQ(LZMX1-IQ(LZMX1+2));                                          from OIC2RX :
LCDXT=LQ(LZMX1-IQ(LZMX1+3));

"-                                                          STORE # C+  COLUMNS IN LZMX2+2"
LRDXTB=LQ(LRDXT+OXRBX);
IQ(LZMX2+2)=IQ(LRDXTB+3);               2nd Call Bk (2)= k range 0_(LSV.SV).Nb_St_Var;
"-    MULTIPLICATION SIGN"                                projete par PAIRing dans (LCL).Nb_St_Var
IQ(LZMX2+5)=IQ(LZMX1+4);                            (5)= sign for mult.
"-    MULTIPLICITY=1"
IQ(LZMX2+1)=1;                                      (1)= 1
"-    STORE POINTER TO RDXTE"
LRDXTE=LQ(LRDXTB+OBXEX);
LQ(LZMX2+OXG_RDX)=LRDXTE+2;
"-                                                          STORE # (AB)+ COLUMNS"
LCDXTB=LQ(LCDXT+OXCXB);                                               from OC2CDX :
IQ(LZMX2+3)=IQ(LCDXTB+3);                           (3) ABt # cols => B # rows   (LCL).Nb_St_Var; 

"-    LOOP ON AH-BLOCKS (THERE IS ONE CDXTE PER AH-BLOCK, done by OC2RX)"
JAH=0;                                  qui donne, par IC, d'ou il est dans Low, ou il va dans Up
DONEXT LCDXTE=LQ(LCDXTB+OXBXE)
<  JAH = JAH+1;
   IQ(LZMX2+4)=IQ(LCDXTB+4+3*JAH); "  STORE # AH COLUMNS"  (4)= # AH cols
   "-    GET AH-BLOCK:"
   NUCOL=IQ(IPCTBR+IQ(LCDXTE+2));
   LMXAH = @(LMXRAH.RT).MX(NUCOL);              Le bloc MX des elements de chaque AH bloc
   " "
   "-    LOOP ON B-GROUPS"                      un B group = un IC du AH bloc
   NUGR=IQ(LCDXTE+1);
   IPCDTE=LCDXTE+2;
   DO IGR=1,NUGR
   <  LQ(LZMX2+OXG_CDX)=IPCDTE;"    STORE POINTER TO CDXTE"
   " "CALL ZMXG1(LMXC,LMXAB,LMXAH);
   " "IPCDTE=IPCDTE+3;
   >    "    END LOOP ON B-GROUPS"
   " "
>    " End loop on AH blocks"


"-    RESET CALL-BANK ADDRESS"
LZMX1=LQ(LZMX1+OX_PREV);
RETURN;
END;
SUBROUTINE OMXG(LMXA,LMXB,LMXC);
! . ___. __ . __ . _  _   ......................................
!     / |  | |  | | \/ |  KERNEL                    LESETH - LMD
!    /  |  | |  | |    |  SUBROUTINE OMXG                      .
!   /__ |__| |__| |    |  Written by LESETH & RAMSES           .
!                                                              .
!   Multiply one group of rows of A by one group of columns of .
!   B (entry point OMXG) or of B transposed (entry point OMXG1).
!   (and add the result to C).                                 .
!   Input : LMXA = Mx-bank of A matrix                         .
!           LMXB = Mx-bank of B matrix                         .
!           LMXC = Mx-bank of C matrix                         .
!                                                              .
!           Call-bank :                                        .
!            OXGV_PAIR : Pair bank address (Ref link)          .
!            OXAD_RDX : pointer into RDXTE bank                .
!            OXAD_CDX : pointer into CDXTE bank                .
!                      --------------                          .
!            1 : Multiplicity                                  .
!            2 : # columns of A                                .
!     OMXG -> 3 : # columns of B (= # rows of C)               .
!    OMXG1 -> 3 : # rows of B (= # rows of C)                  .
!            4 : # columns of C                                .
!            5 : multiplication sign (GE.0 -> +; LT.0 -> -)    .
!                                                              .       exemple de la Ct*t_ABt
!   Modified by Jean_Yves GRANDPEIX, 12/08/94, 10:30           .
!...............................................................                 X---I---I
                                         C(i,j) = A(k,i)*B(j,k)       P        E |
"-    GET CALL-BANK ADDRESS"                                            ai     t | B=AB
LZMX1=LQ(LZMX1+ONX);                                                       r   a |     CDXTB
"-    #  COLUMNS"                               from :                   SV      -       | 
NCA=IQ(LZMX1+2); k range 0_(LSV.SV).Nb_St_Var; RDXTB    Low left      X----k>---I         \ IC
NCB=IQ(LZMX1+3);      (LCL).Nb_St_Var;         CDXTB    Low right     | IC                 CDXTE
NCC=IQ(LZMX1+4); (4)= # AH cols                CDXTB    Up            -    A=Ct              \     
JMPRB=NCB;                               B(j,k) = B(j+(k-1)*JmpRB)    |        RDXTB          [AH BRow]
JMPCB=1;                                                              | IC        \_IC RDXTE_/
GO TO :START:;                                                        X
ENTRY ZMXG1(LMXA,LMXB,LMXC); =====================================
"-    GET CALL-BANK ADDRESS"
LZMX1=LQ(LZMX1+ONX);
+SELF,IF=PROMXG.
ISWMXG=1;                               C(i,j) = A(k,i)*t_Bt(j,k)
+SELF.                                                  Bt(k,j)
"-    # COLUMNS OR ROWS"
NCA=IQ(LZMX1+2);NRB=IQ(LZMX1+3);NCC=IQ(LZMX1+4);

Increment pour changer de col / ligne de B = t_Bt
JMPRB=1;  (on passe d'une ligne de B a une autre en passant d'une col de Bt a une autre)
JMPCB=NRB;                              Bt(j,k) = Bt(j+(k-1)*JmpRBt)
                                      t_Bt      == B(k+(j-1)*JmpCB)

:START: ;             "<================================== START"
+SELF,IF=PRZMXG0.
ISWPRT=0;
+SELF,IF=PRZMXG1.
ISWPRT=1;
+SELF,IF=PRZMXG2.
ISWPRT=ISWMXG;
+SELF.

"-    GET PAIR,RDXTE,CDXTE ADDRESSES"   Set by OIC2RX cf >> OIC2RX.hlp
LPAIR=LQ(LZMX1+OXG_PAIR);               ==============================
IPRDXT=LQ(LZMX1+OXG_RDX);   = pointe sur RDXTE(2)
IPCDXT=LQ(LZMX1+OXG_CDX);            et  CDXTE(2)
"-    ROWS AND COLUMNS 0_LOCATIONS"
IRA=IQ(IPRDXT+1);RDXTE(3)           =0  Bloc 0_location in low (Ct) BRow                left
ICB=IQ(IPCDXT+1);CDXTE(3)                                      AB BRow  (IC).LTr_in_Cl; right
IRC=IQ(IPRDXT+3);RDXTE(5)              Row loc in Up    0_(LIC.IC).LTr_in_Fc;           left
ICC=IQ(IPCDXT+3);CDXTE(5)              Col loc in Up   (IC).LTr_in_Fc;                  right
"-    GROUP SIZES"
NGA=IQ(IPRDXT+2);RDXTE(4)       Nb of rows of A Brow    0_(LIC.IC).Nb_Tr_Var;           left
NGB=IQ(IPCDXT+2);CDXTE(4)       Nb of columns of B Bcol (IC).Nb_Tr_Var                  right

"-    POINTERS TO BEGINNINGS OF MATRICES"
IPC1=LMXC+IRC*NCC+ICC;
IPB1=LMXB+ICB*JMPCB;
IPA1=LMXA+IRA*NCA;


"-    SCAN SV_list Segments OF (A(Ct)-COLUMNS, B(AB)-ROWS)"
NG=IQ(LPAIR+1); Nbre de segments = serie naturelles d'entiers cf OSV2P in \
IPP1=LPAIR+1;                                             >  Circulation_de_l_info_entre_Bks
IPPMAX=IPP1+(NG-1)*4;
"-    SWITCH ACCORDING TO MULTIPLICATION SIGN"
IF (IQ(LZMX1+5).LE.-1) GO TO :NEGATIVE MULTIPLY:;

"-    POSITIVE MULTIPLY"
DO IP=IPP1,IPPMAX,4      scan quadriplets of all segments
<  ICA=IQ(IP+1);         < A(ICA+k,i)
   IRB=IQ(IP+2);                     * B(j,IRB+k) 
   NGAB=IQ(IP+3);                                 k=0,NGAB-1
   WGHT=Q(IP+4);
   " "
   "-    POINTERS TO BEGINNINGS OF GROUPS"
   IPGA=IPA1+ICA;               A =>Q(IPGA+ICA+k)
   IPGB=IPB1+IRB*JMPRB+1;       B =>Q(IPGB+(IRB+k)*JmpRB)
   " "
   "-    MATRIX MULTIPLY"
   IPRLST=IPGA+(NGA-1)*NCA;     last row of A
   IPRC=IPC1;
   DO IPRA=IPGA,IPRLST,NCA      loop on beginnings of rows of A
   <  IPAFST=IPRA+1;            < first value
   " "IPALST=IPRA+NCA;            & last of A row : 
   " "IPCFST=IPRC+1;              first
   " "IPCLST=IPRC+NGB;                 and last of C col
   " "IPRB=IPGB;                  first on B col
   " "DO IPA=IPAFST,IPALST        loop on A line #i items (k=1,NCA)
   " "<  A=Q(IPA)*WGHT;           < A(k,i)*Wght
   " "   IPB=IPRB;                  (j,k) de B
   " "   DO IPC=IPCFST,IPCLST       loop on C col #i items (j=1,NGB)
   " "   <  Q(IPC)=Q(IPC)+A*Q(IPB); <    C(i,j) = + A(k,i)*B(j,k)
   " "   " "IPB=IPB+JMPCB;             (j+1,k) of B and (i,j+1) of C
   " "   >                          >
   " "   IPRB=IPRB+JMPRB;          (j,k+1) of B and (k+1,i) of A
   " ">                           >
   " "IPRC=IPRC+NCC;             (i,j+1) of C  and (1,i) of A
   >                            >
> "END OF GROUP-SCANNING"  >
!
GO TO :RETURN:;
!
:NEGATIVE MULTIPLY:;                  "<===========NEGATIVE MULTIPLY"

DO IP=IPP1,IPPMAX,4
<  ICA=IQ(IP+1);
   IRB=IQ(IP+2);
   NGAB=IQ(IP+3);
   WGHT=-Q(IP+4);
   " "
   "-    POINTERS TO BEGINNINGS OF GROUPS"
   IPGA=IPA1+ICA;
   IPGB=IPB1+IRB*JMPRB+1;
   " "
   "-    MATRIX MULTIPLY"
   IPRLST=IPGA+(NGA-1)*NCA;
   IPRC=IPC1;
   DO IPRA=IPGA,IPRLST,NCA
   <  IPAFST=IPRA+1;
   " "IPALST=IPRA+NCA;
   " "IPCFST=IPRC+1;
   " "IPCLST=IPRC+NGB;
   " "IPRB=IPGB;
   " "DO IPA=IPAFST,IPALST
   " "<  A=Q(IPA)*WGHT;
   " "   IPB=IPRB;
   " "   DO IPC=IPCFST,IPCLST
   " "   <  Q(IPC)=Q(IPC)+A*Q(IPB);
   " "   " "IPB=IPB+JMPCB;
   " "   >
   " "   IPRB=IPRB+JMPRB;
   " ">
+SELF,IF=PROMXG.
   " "IF (ISWPRT.EQ.ISWMXG)
   " "PRINT *,' Q(IPC) APRES ',(Q(IPC),IPC=IPCFST,IPCLST);
+SELF.
   " " IPRC=IPRC+NCC;
   >
   " "
>
"-    END OF GROUP-SCANNING"

:RETURN: ;                     "<==========RETURN"


"-    RESET CALL-BANK ADDRESS"
LZMX1=LQ(LZMX1+OX_PREV);
RETURN;
END;
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Ct_A-1B_product
************************************************************************
************************************************************************
*************  Ct A-1Bt_TV product for Futura **************************
************************************************************************
************************************************* {mardi 20/08/1996 Al1}

La ABt_TV desdt placee sous son TV.
La TV.liste permet de la permuter dans la IC=Fc
Pour chaque IC~Ct on la compacte via le SV.Liste. avant de multiplier.
Puis on expand dans la IF*IF'.

cf "Deck,OMXCNAB for proposal.

              SV
             .    .
           IC      CX...
           .             .
           .               .
          SVliste          TVliste
          -------          --------
          I     I          I       I
    Fi_IC I     I      Eta I  ABt  I
          I Ct  I          I-------I
          I     I      .            
          I-----I     .              
                     .               On somme, pour chaque TV Cx
                    .                la IC_Ct.AB_TV
          TVliste  TV    TV          et IC_D_TV       meme expansion
          -------------------  
          I     I     I     I      
    Fi_IC I     I     I     I      
          I  D  I  D  I  D  I      
          I     I     I     I  
          I-----I-----I-----I  

Remarque : Si l'expansion se fait en conformite avec une IN,  
           on cree des col/lignes en plus pour conserver la connexite      
           sinon, on garde l'information sur l'ordre des Tr dans chaque IX.

Proposition de macros :
  Grasp New_Array ABt_TV (LCL,LTV) for (LCX);    ABt_TV(i,j) = 
  ou (i,j) Eta #, Fi_TV # comme d'habitude;
  Grasp New_Array ABt_SV_TV (LCL/LSV,LTV) for (LCX);    ABt_SV_TV(k,j) = 

! Compacted AB Matrix : Status Flag  IOABSV
&'GRASP NEW_ARRAY ABt_SV_TV(#/#,#)FOR(#)'=   "(LCL/LSV,LTV) FOR (LCX)"           DEV Al1 
'CHK_NAME_BK CL(#1);CHK_NAME_BK SV(#2);CHK_NAME_BK TV(#3);CHK_NAME_BK CX(#4);    02/01/97
 CHK_ADRES_BK(#2,@CL@SV@,#1);CHK_ADRES_BK(#4,@CX@TV@,#3);
! verif que le SV est bien flaggé :
IF (JBIT(IQ(#2),IOABSV).ne.1) write(OLUPR,*)
 ''*** ERROR: SV was not flagged to allow AB_SV (lost of efficiency only)'';
 LO_ABt_TV=@#3@TV@AB@;DBK^AB(LO_ABt_TV);
 ARRAY ABt_SV_TV(0_(#2.SV).Nb_St_Var,0_(#2.TV).Nb_Tr_Var)IN(LO_ABt_TV).AB_Mx
 CALL SBIT1(IQ(LO_ABt_TV),IOABSV)';
;
  ou (k,j) Eta_SV #, Fi_TV # pour les cas restreind; => Flag in AB Status Bank
!!! il faut alors tester les new array ABt_TV qui seraient sur un SV non flaggé !!!

  Call OCNAB(LCL);  Cree la AB sous le TV. ATTENTION, les ranger dans le eme ordre que
                                           les Cx de la table du TV
==> il faut flagger les SV qui seront systematiquement porteurs d'une ABt_SV_TV !!!
  Dump : compatible ancienne et nouvelle AB_Mx (remplace ODETBC(LCL))
  call ODEABC(LCL); " New Dump A-1B and connected C+"

  De meme, on pourrait prevoir Dt_TV_TV et Ct_TV_SV pour les matrices creuses.

************************************************************************
*** Digression induite sur LE Bug **************************************
************************************************************************

Illustration du bug croisé :

   IN1     [a,b]            [c,d]         IN2
           *****IX1        ******IX2
          --\-\---Fc       -/-/--Fc
            a\ b\        c/ d/ 
              \   \     /   /
            ***\****\*/****/***
            *  |     X     |  * IN  (4 Tr A,B,C,D)
            ***|****/*\****|***
               |   /    \   \
              a| c/      b\ d\
             --|-/--Fc     -\-|--Fc
              *****IX3     *****IX4
             [a,b,c]       [b,c,d]
   IN3                                    IN4
I I I I I I I I I I I I I I I I I I I I X a b c d X
I         I                             X 1 1     I
I    in1  I                             X 1 1     I
I         I  peuplement par elim.       X 1 1     I
I         I                             X 1 1     I
I I I I I I I I I I I                   X X X X X X
I         I         I                   X     2 2 I
I         I         I                   X     2 2 I
I         I    in2  I                   X     2 2 I
I         I         I                   X     2 2 I
I         I I I I I I I I I I I         X X X X X X
I                   I         I         X 3 3 3   I
I                   I    in3  I         X 3 3 3   I      Version des IX IN_conformés
I                   I         I         X 3 3 3   I
I                   I         I         X 3 3 3   I
I                   I I I I I I I I I I X X X X X X
I                             I         X   4 4 4 I      sion on garde l'info IX3=[a.c]
I                             I   in4   X   4 4 4 I                           IX4=[b,d]
I                             I         X   4 4 4 I
I                             I         X   4 4 4 I
X X X X X X X X X X X X X X X X X X X X X X X X X X
I 1 1 1 1 I         I 3 3 3 3 I         X         I
I 1 1 1 1 I         I 3 3 3 3 I 4 4 4 4 X         I
I         I 2 2 2 2 I 3 3 3 3 I 4 4 4 4 X  I N    I
I         I 2 2 2 2 I         I 4 4 4 4 X         I
X I I I I I I I I I I I I I I I I I I I X I I I I I

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Ct_AB.short

               SVs ---> Cxs --->                   X        X           X
         I - - - - - I - - - - - I - - - - X   X -TV -X  X -TV -X    X -TV -X 
         .           ,                     I   I      I  I      I    I      I 
         .           ,                     I   I  AB1 I  I  AB2 I    I  AB3 I 
         .   Cl1     ,                     I   I      I  I      I    I      I 
         .           ,                     I   I Cx1  I  I      I    I      I 
         I - - - - - I - - - - - I         X   X - - -X  X X X XX    X X X XX 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I      I 
         .    v      ,    Cl2    ,         I   I  AB4 I 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I Cx2  I 
         I    v      I - - - - - I - - - - X   X X X XX 
         .    v                  ,         I
         .    v                  ,  Cl3    I
         .    v                  ,         I     |(LCX1).LFi_in_IF
         .    v                  ,         I     |                         2 BRows : [ff] et [fx]
         X X XvX X X   X X X X X X X X X X X   - |- - - - - - - - - - - - - -CDXTB(1)=1
         I      Cx I TV                        I |                          I     (2)=
         I         I                           I V                          I     (3)=(LCL).Nb_St_Var    
   Fi_IC1I      Cx I TV----(LCX.).LFi_in_IF -->I .                          I     (4)=nFc
         I         I                           I                            I      +1 =(Fc).IC_Nb
         I      Cx I TV                        I                            I      +2 =0
         X X X X X X                           I                            I      +3 =(Fc).Nb_Var
              v                                I                            I
              v                                I                            I
              v                                I                            I
         X X XvX X X                           I                            I
         I         I                           I                            I
         I         I                           I                            I
   Fi_IC2I         I                           I                            I
         I         I                           I                            I
         X X X X X X                           -  - - - - - - - - - - - - - - 

                                              [ff                   ] [fx              ]
                                              [ < IN1 > < IN2 >     ] [ < IX1> ...
                                                 Fc/Cl    Fc/Cl          Fc/Cl
                                              CDXTBf                  CDXTBx
                                              \_ CDXTE -> CDXTE->...]   \_ CDXTE ->... ]

 CDXTE(1)=(Fc).Nb_Int;    # Cols group in LSM which are duplicated 1 time in USM 
 CDXTE(2)=(IU).Int_Nb;                   USM col bloc #                          
 puis /  (IC).LTr_in_Cl;                       LowStoredMx Col bloc # (source location)         
     <   (IC).Nb_Tr_Var;    par IC             # Cols                            
      \  (IC).LTr_in_Fc;                       UpStoredMx Col bloc # (target location)        

Ces Cross Tables, vues de Fm, sont créées par OC2CDX pour chaque cellule. Elles representent
un plongement de l'EV des Tr vus de la Cl a celui des Tr vus par Fm.
Pour une Cl, l'EV Fm est partitionne par Fc sur la Cl; puis par IC sous une Fc, mais attention,
dans le cas ou un Tr serait plusieurs fois connecte a une Cl via plusieurs SV(=>xIC), des IC
differentes pourraient comprendre une composante commune. Ceci est a verifier !

La partie : (LCX1).LFi_in_IF, n'est vue/exploitee qu'a l'elimination de la Cl, cad par un
appel a OIC2RX, qui fera des Row Cross tables
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Ct_AB.short.bak

               SVs ---> Cxs --->                   X        X           X
         I - - - - - I - - - - - I - - - - X   X -TV -X  X -TV -X    X -TV -X 
         .           ,                     I   I      I  I      I    I      I 
         .           ,                     I   I  AB1 I  I  AB2 I    I  AB3 I 
         .   Cl1     ,                     I   I      I  I      I    I      I 
         .           ,                     I   I Cx1  I  I      I    I      I 
         I - - - - - I - - - - - I         X   X - - -X  X X X XX    X X X XX 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I      I 
         .    v      ,    Cl2    ,         I   I  AB4 I 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I Cx2  I 
         I    v      I - - - - - I - - - - X   X X X XX 
         .    v                  ,         I
         .    v                  ,  Cl3    I
         .    v                  ,         I     |(LCX1).LFi_in_IF
         .    v                  ,         I     |                         2 BRows : [ff] et [fx]
         X X XvX X X   X X X X X X X X X X X   - |- - - - - - - - - - - - - -CDXTB(1)=1
         I      Cx I TV                        I |                          I     (2)=
         I         I                           I V                          I     (3)=(LCL).Nb_St_Var    
   Fi_IC1I      Cx I TV---- (LCX.)LFi_in_IF -->I .                          I     (4)=nFc
         I         I                           I                            I      +1 =(Fc).IC_Nb
         I      Cx I TV                        I                            I      +2 =0
         X X X X X X                           I                            I      +3 =(Fc).Nb_Var
              v                                I                            I
              v                                I                            I
              v                                I                            I
         X X XvX X X                           I                            I
         I         I                           I                            I
         I         I                           I                            I
   Fi_IC2I         I                           I                            I
         I         I                           I                            I
         X X X X X X                           -  - - - - - - - - - - - - - - 

                                              [ff                   ] [fx              ]
                                              [ < IN1 > < IN2 >     ] [ < IX1> ...
                                                 Fc/Cl    Fc/Cl          Fc/Cl
                                              CDXTBf                  CDXTBx
                                              \_ CDXTE -> CDXTE->...]   \_ CDXTE ->... ]

 CDXTE(1)=(Fc).Nb_Int;    # Cols group in LSM which are duplicated 1 time in USM 
 CDXTE(2)=(IU).Int_Nb;                   USM col bloc #                          
 puis /  (IC).LTr_in_Cl;                       LowStoredMx Col bloc # (source location)         
     <   (IC).Nb_Tr_Var;    par IC             # Cols                            
      \  (IC).LTr_in_Fc;                       UpStoredMx Col bloc # (target location)        

Ces Cross Tables, vues de Fm, sont créées par OC2CDX pour chaque cellule. Elles representent
un plongement de l'EV des Tr vus de la Cl a celui des Tr vus par Fm.
Pour une Cl, l'EV Fm est partitionne par Fc sur la Cl; puis par IC sous une Fc, mais attention,
dans le cas ou un Tr serait plusieurs fois connecte a une Cl via plusieurs SV(=>xIC), des IC
differentes pourraient comprendre une composante commune. Ceci est a verifier !

La partie : (LCX1).LFi_in_IF, n'est vue/exploitee qu'a l'elimination de la Cl, cad par un
appel a OIC2RX, qui fera des Row Cross tables
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Eole
********************************************************************************
***********************  EOLE  *************************************************
*******  Calculs effectués en correspondance avec les triplets *****************
********************************************************************************
********************************************************************************

Notations triplet ASCII : g/ se lit g barre (g souligné)
                          [g]' se lit [g]**-1
                          x est à comprendre comme Tr externes d'une Fm;
                      (quand il y a ambiguité, on notera x_f pour référer la Fm)
Autres notations :
BRow et Bcol désignent un Bloc de lignes ou de colonnes. Attention , une BRow est
décrite en ses composantes qui sont des Bcol, et vice versa un bloc colonnes est
décrit par ses sous-blocs de lignes.
SO = Structure Object, Famille ou Cellule (le ZOOM dual est repoussé)

***************************
***** PRINCIPE ************
***************************
 On veut éliminer les objets (g) d'une famille f; pour chaque objet g, on a déjà éffectué
cette opération et on dispose donc des quatre matrices (d'influence) :
(g g/ g), (g g/ x), (x g/ g), (x g/ x)
ainsi que les vecteurs (insensibles) :
|g g/> et |x g/>
on peut déjà remarquer que la partie "x" de l'EV du sous arbre de g est, vue du sous-arbre
de f, separé en f et x_f : {x_g} = {f} (+) {x_f}; ainsi :
|x_g g/> est distribué dans |f g/> (+) |x_f g/>

Premières formules d'élimination :
----------------------------------

(f f/ f) = Sum_g (f g f)
(f f/ x) = Sum_g (f g x)
;
(f g f) = (f g/ f) - Sum_g (f g/ g).[g]'.(g g/ f)
(f g x) = (f g/ x) - Sum_g (f g/ g).[g]'.(g g/ x)
;
|f f/> = |f.> - Sum_g |f g>
;
|f g> = |f g/> - Sum_g (f g/ g).[g]'.|g g/>
;

On calcule les deux matrices Brow par Brow, chaque BRow correspondant à une IN
de f connectant aux autres IN, puis IX.
  On commence par ajouter à (f f/ f) et (f f/ x) les matrices
                            (f g/ f) et (f g/ x)

  ensuite, si g comporte des Transferts internes, on ajoute les sommes de produits.

On passe ensuite aux matrices réciproques :
------------------------------------------
(x f/ f) = Sum_g (x g f)
(x f/ x) = Sum_g (x g x)
;
(x g f) = (x g/ f) - Sum_g (x g/ g).[g]'.(g g/ f)
(x g x) = (x g/ x) - Sum_g (x g/ g).[g]'.(g g/ x)
;
Chaque BRow de celles-ci est associée a une IX; on boucle donc sur les Fc\_IX->
de f, selon un schéma identique au précédent.

Ici, pour suivre de plus près l'algorithme de ker, on doit innover par rapport
à la presentation triplet du TEF, pour prendre en compte l'incidence partielle,
sur le vecteur insensible des transferts supérieurs à f dans son sous-arbre,
des éliminations d'objets inférieurs aux SO (g) déja effectuées. En effet, ker
utilise un vecteur x_Delta consécutif à Delta
Nous proposons :
|x f/> = Sum_g |x_f g>
avec
|x_f g> = |x_f g/> - (x g/ g).[g]'.|g g/>
;
Dans ces formules, |x_f g/> donnent les influences partielles sur
Fi_x insensible des éliminations des SO de g, le produit y ajoutant l'effet de
l'élimination de g. Dans l'élimination, |x f/> sera initialisé à zero.
On rappelle que dans le sous-arbre de f, |x_g g> comporte une partie recouvrant
|f g>, suivie du complément recouvrant |x_f g; attention, car par construction
des interfaces, la restriction de |x_g g> a |f g> sera associée à une IN de f,
alors que le complément de |x_g g> recouvrant x_f g> sera associé à une IX de
la famille f !.

***************************
***** ALGORITHME **********
***************************

On va inverser certaines opérations pour plus de clarté :
- d'abord les calculs à effectuer
- ensuite l'information nécessaire aux opérations partielles
  - changement d'Espaces Vectoriels (EV)
  - appariement de sous-EV

+----------------+
| Les opérations |
+----------------+

Initialisation de |f f/> = |f.>
   GET DL(LDL); GET MG(LOMG);
  CALL UCOPY((LOMG).Omega(1),(LDL).Delta(1),(LFm).Nb_Int_Var);

et de |x f/> =  0
   LDL = LQ(LDL+ONX);
  CALL VZERO((LDL).Delta(1),(LFm).Nb_Out_Var);

***** (f g f) = (f g/ f) - Sum_g (f g/ g).[g]'.(g g/ f) ******************
***** (f g x) = (f g/ x) - Sum_g (f g/ g).[g]'.(g g/ x) ******************
;
  SKIP THRU IN(LIF)
  <
    Execute Constituents_Elimination;
!   ---------------------------------
  >"End IN == BRow pair"

***** (x g f) = (x g/ f) - Sum_g (x g/ g).[g]'.(g g/ f) ******************
***** (x g x) = (x g/ x) - Sum_g (x g/ g).[g]'.(g g/ x) ******************
;
  SKIP THRU Fc(LF1)
  < SKIP THRU IF(LIF)
    <
      Execute Constituents_Elimination;
!     ---------------------------------
    >;"End IX == ROW pair 2"
  >;"End Fc"
;


**************************************************************************
********* Elimination des Constituants ***********************************
************* sous une IN ou IX (==IU) ***********************************
**************************************************************************

Boucle sur Fc de la IU \_Fm:g
-----------------------------
Call EOLEF
  On décrit le cas d'une entrée par IN, cad du calcul du couple
  (f g f) (f g x) pour une BCol correspondant à la IX.

  Boucle sur les IX de g sous la Face entrante
  > On met à jour les deux matrices :
  >  (f g f) = (f g f) + (f g/ f)               CALL OMXAR(LMXRXX,LMXRF);
  >  (f g x) = (f g x) + (f g/ x)               CALL OMXAR(LMXRXX,LMXRX);
  >
  >  |f f/> = |f f/> + |f g/>, où |f g/> hérite d'une partie de |x_g g/>
  >  de dimension (LIX).Nb_Var) :
  >               IPDL = IPDLUP + (LIX).L_Var_in_Fc;
  >               IPDLX = LDLXG + (LIX).L_Var_in_DL;
  >               CALL VADD(Q(IPDL+1),Q(IPDLX+1),Q(IPDL+1),(LIX).Nb_Var);
  >
  > Si g possède des Transferts internes, il faut les éliminer :
  >   IF 0_(LFmg.FM).Nb_Int_Var .GT.0
  >   alors :
  >   
  >      Calcul de  C = (f g/ g).[g]**-1          CALL ORRES(LFMG,LMXTC);
  >
  >      Calcul de |f g> et cumul dans |f f/> :
  >            |f f/> = |f f/> - C.|g g/>
  >                                         CALL OMXCDL(LMXTC,LDLG,IPDL);
  >
  >      Calcul du couple C.(g g/ f)     CALL OMXCGX(LMXRC,LMXTGX,LMXRF);
  >                    et C.(g g/ x)     CALL OMXCGX(LMXRC,LMXTGX,LMXRX);

  
  On effectue de la même manière les calculs du couple réciproque si on
  entre par une IX. Remarquons que la partie de |x_g g> qui ne recouvre pas
  |f f/> mais |x f/> correspond à une entrée par les IX.

Cas ou g est une cellule
------------------------
Call EOLES
  g est maintenant une cellule: a, g/ est remplacé par le point du triplet, et
  les matrices sont alors :
    U{Ct} = (f.a) <+> (x.a), A-1B = [a]'.(a.f) <+> [a]'.(a.x_f)
  (où on aura compris l'union des Ct et des sommes <+> d'EV )
  et les vecteurs :
    [a]'|a .> = dEta,dec
    |f f/> = |f .> - Sum_a (f.a).[a]'.|a.> = Omega - Sum_a Ct.dEta,dec

  (On entre ici encore par une IN de F pour l'exemple).

  GET AB(LAB); LGAM=LQ(LCL+OCLGA)+(LCL).In_ET; GET D(LDL);

  Boucle sur les IC de la Face
  >  GET Ct(LC);
  > 
  >  Calcul de (f.a).[a]'.|a.> = - Ct.dEta,dec et ajout à |f f/> :
  >                                           CALL OMXCAG(LC,LGAM,IPDL);
  >
  >  S'il existe une matrice D, on la distribue dans 
  >     (f a f) = (f a f) + (f . f)                CALL OMXAD(LD,LMXRF);
  >  et (f a x) = (f a x) + (f . x)                CALL OMXAD(LD,LMXRX);
  >
  >  Là, on supposes que la cellule a des variables internes (!) et donc :
  >    (f f/ f) = (f f/ f) - (f.a).[a]'.(a.f) CALL OMXCAB(LC,LAB,LMXRF);
  >    (f f/ x) = (f f/ x) - (f.a).[a]'.(a.x) CALL OMXCAB(LC,LAB,LMXRX);
  >  pour une BCol correspondant à la IC

Remarque de développement(!) : les transferts directement connectés le sont
par un SO vide (.); on peut donc ajouter dans EOLES le même test sur
l'existence de variables internes, ce qui permet de créer un objet (.) qui
serait une cellule sans variables d'état ni Ct ni A-1B(Bk vide), ni dEta,dec,
caractérisé par (LCL).Nb_St_Var = 0. Cet objet devrait quand même avoir des
Fc\_IC avec des Bk SV vides.


+----------------------------------------+
| Les Manipulations d'Espaces Vectoriels |
+----------------------------------------+

Comme il s'agit d'une manipulation universelle de matrices par Blocs rassemblés
par BRow ou BCol, l'aventure est déclinée dans > MX_structures .

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Guide
***************************************************************************
*********** Guide de Lecture du Mx Help ***********************************             Etat d'avancement
***************************************************************************

> Eole donne le principe de l'elimination                                               termine => en test
> MX_structures pose le probleme de la gestion des matrices                             a relire
> Cross_Ref_Tbles_General precise la generalite des Tables utilisees                    termine => en test
> Circulation_de_l_info_entre_Bks enchaine les operations                               en relecture

et, en se rapprochant du code lui-meme :
> Mx_Structure_d_une_BRow ou comment passer des blocs a une vraie matrice               a revoir
> OIC2RX.hlp comment on fabrique les tables des matrices multiplicandes a gauche        a revoir
> CtAB.product.hlp application a l'elimination d'une cellule                            a revoir

     a faire : schema complet des infos utilisees pour la Ct(p)A-1B                     a faire
               et propositions nouveau code                                             cf Pro_Gemini/?*
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Guide.bak
***************************************************************************
*********** Guide de Lecture du Mx Help ***********************************             Etat d'avancement
***************************************************************************

> Eole donne le principe de l'elimination                                               termine => en test
> MX_structures pose le probleme de la gestion des matrices                             a relire
> Cross_Ref_Tbles_General precise la generalite des Tables utilisees                    termine => en test
> Circulation_de_l_info_entre_Bks enchaine les operations                               en relecture

et, en se rapprochant du code lui-meme :
> Mx_Structure_d_une_BRow ou comment passer des blocs a une vraie matrice               a revoir
> OIC2RX.hlp comment on fabrique les tables des matrices multiplicandes a gauche        a revoir
> CtAB.product.hlp application a l'elimination d'une cellule                            a revoir

     a faire : schema complet des infos utilisees pour la Ct(p)A-1B                     a faire
               et propositions nouveau code                                             a faire
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/MX_structures
**************************************************************************************************
**************************************************************************************************
******* TEF Ker Matrices and IN IX IC Fc topics **************************************************
**************************************************************************************************
**************************************************************************************************
 Pour fixer les idées, on considère l'état de la matrice des influences du SLT correspondant au
sous-arbre de la Fm F, après élimination des objets inférieurs à la Fm G; on suppose que pour cet
exemple arbitraire, on a obtenu :

         < --------------- G Fm ---------->X<- F Fm ------------------- >X<-- X_F-->X<- X_F-->
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X -   - - I
         .           ,           .         I         .         .         X         X         I
         .           ,           .         I         .         .         X         X         I
    Ga   .   INa     ,           .  INc,a Fc  IX1,a  .  IX2,a  .       FcX  IXx,a  X         I
         .           ,           .         I         .         .         X         X         I
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I
         .           .           .         I         .         .         X         X         I
         .           .           .         I         .         .         X         X         I
    Gb   .           .    INb    .         I         .         .  IX3,b Fc         X  IXx,b  I
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I    
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    Gc   .   INa,c   .           .  INc    I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X    
         .           |           .         I         .         .         X         X         I    
         .           |           .         I         .         .         X         X         I    
    F1   .   IXa,1   |           .       FcI   IN1   .         .         X         X         I    
         .           |           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - I - - - - I - - - - I - - - - X - - - - X - - - - I    
         ,           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    F2   .   IXa,2   .           .       FcI         .  IN2    .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I    
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    F3   .           .   IXb,3   .       FcI         .         .  IN3    X         X         I    
         .           .           .         I         .         .         X         X         I    
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X    
         .           |           .         I         .         .         X         X         I
         I           |           .         I         .         .        Fc  I N    X         I
    X_F  I  IXa,x    |           .        Fc         .         .         X         X         I
         .           |           .         I         .         .         X         X         I
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
         .           .           .         I         .         .         X         X         I
    X_F  .           .           .         I         .         .         X         X         I
         .           |   IXb,x   .        Fc         .         .         X         X         I
         .           .           .         I         .         .         X         X         I
         X - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I

En réalité, ls sous arbre est ici representé en 2D : en ne considérant que les liens par ligne,
chaque IN de F, sous la IN1 - cad vers la gauche, on traverse une Face de G pour atteindre une
IX de G. On a noté x_F les deux familles vers la droite de F, qui ne seront pas distinguées dans
l'élimination de G que l'on va étudier; on voit que pour simplifier, on a supposé l'existence
d'un seul constituant G de F. On a supposé également que les éliminations déjà faites n'avaient
pas couplé de IN de F ([f] reste diagonale par bloc).
Nous  allons décrire une opération élémentaire d'élimination de G, effectuée dans EOLE et EOLEF
(ou OEQ, OEQF de la D_loop). La méthode est une complémentation de Schur par bloc, // LU decomposition,
qui calcule des opération du type :

                 [IN1] = [IN1] - (IN1,IXa)*(INa)**-1*(IXa,IN1)

avec la notation (row_wise) des matrices dans ZOOM : IXa,1 Bcol # a, Brow # 1, et où l'on note
[X] une matrice dans l'EV de F, (X) dans celui de G. (IN1,IXa) est le bloc donnant l'influence
sur dFi,IN1 d'une perturbation de Fi,IXa, etc. En court, on notera IXa,1 pour (IN1,IXa), l'ordre
a,1 etant renverse pour respecter la convention matricielle de ker (Colonne,Ligne).

Si vous êtes d'accord avec ce qui précède, vous ^etes tombes dans un piège, car cette forme
d'élimination n'est correcte que lorque [g] est diagonale par blocs [IN]. En réalité, il faut
lire [INa]**-1 comme une sous-matrice de [g]**-1; on effectue en fait l'opération précédente en plongeant
les matrices dans la base de G

                 [IN1] = [IN1] - (IN1,IXa)*(g)**-1*(IN1,IXa)

(ceci est préparé dans la routine OAXG2C, au moment de l'élimination, qui crée une SM structure identique
à celle de [g] - la Bligne (IN1,IX...) à créer étant de structure identique à celle de la matrice carrée [g],
en y plaçant délicatement le bloc (IN1,IXa); ajoutons que la SM décrivant [g] sera elle même expansée
dans sa TM pour inversion dans OGAUS en appelant OMBNCH cf >> Mx_Structure_d_une_BRow ).

Représentation des Matrices par leur structure en Blocs
-------------------------------------------------------
Considérons maintenant la représentation dans ker des matrices de G, au nombre de 4, correspondant à la
notation triplet :
1ère : [g], qui comprend l'ensemble des (INi,j), donnent l'influence des IN,j sur les IN,i de G;
2ème : à droite de [g] : (g g/ x) donnent l'influence des IX,n sur les IN,m de G;
3ème : sous [g] : (x g/ g) donnent l'influence des IN,m sur les IX,n de G.
4ème et dernière, non representée sur le schéma : (x g/ x) reprend les influences de transferts tous
externes à G, qui proviennent de l'élimination d'objets inférieurs. Elles seraient SOUS les IN de F et
au-delà vers la diagonale de droite.

Ces quatre blocs sont décrits par quatre structures de Banks(Bk) ZEBRA, sous le Bk Fm de G, par
quatre Bk racine dits MXT Bk (Matrix Table). La description choisie est faite par Bloc Lignes (BRows).
Ainsi, [g] est constituée de 3 Brows Ga, Gb, Gc.

Chaque Brow est décrite par une table MXRT (Matrix Row Table) qui donne la succession des Blocs non
vides, ici : INa et INa,1, chacun correspondant finalement à un Bk MX pour ranger le bloc matrice.
Il en est de même des trois autres blocs. Cette description des blocs non vides est appellé SM (Stored Matrix)

On peut noter que la structure des tables donnant les blocs non vides est connue dès que l'arbre ZOOM
est connu pour un problème décrit dans ZINIT; on en trouvera l'explication dans l'analyse de la connectique
de ZOOM au moyen des hyper-graphes (cf manuel de l'EcoDynalique Hiérarchisée).
Ainsi, les Bk Tables (MXT et MXRT) sont définitivement construites après OFRAME.

Rangement de l'information :
----------------------------
Dans MXT, on a le nombre et la liste des numéros de BLignes : pour [g], on a 3 IN (a,b,c) numérotées (1,2,3)
dans G. De même pour les IX numérotées dans chaque famille indépendemment.
Pour chaque BLigne, on donne de la même facon le nombre et la liste des blocs; pour la BLigne Gc, on a deux blocs
numérotés (1,3).
Pour reconstituer la matrice complète (dite TM = True Matrix, par opposition a SM = Stored Matrix), on a les
informations suivantes :

1/Les dimensions sont décrites dans deux Bk RSize et CSize, chaînés sous la Table MXT. Ils donnent, chacun :

- le nombre total de variables (dimension de chacune des quatres matrices triplet)
- le nombre complet d'interfaces (IN ou IX)
- la liste des dimensions de chaque interface, vide ou pas du fait de la connectique.
(dans le cas d'une matrice carree, comme [g], on a un seul Size, et les deux adresses y pointent).

2/Chaque BLigne est à ranger dans la TM au bloc # donné dans le RT bank, et on a sous chaque RT bank un CTBR
bank (Reverse Table) donnant la liste des numéros de blocs de la SM dans l'ordre des blocs
de la TM (=0 pour un bloc vide).

3/Comme on peut le voir sur le schéma, on prend en compte le fait qu'une BLigne - de [g] par exemple] - se 
prolonge naturellement par son complément pour (g g/ x), ce qui correspond au concept de transferts externes
à une famille donnée dans le sous arbre ZOOM de la famille; c'est ce que décrit une SM en réalité.

Ainsi, ces 4(+1) Bks fournissent la structure des blocs et les dimensions de chaque matrice d'influence de G,
indépendemment de toute autre matrice du problème. On peut toucher du doigt ces changements d'EV en consultant
>> $ZOOM/dev/src/cmz/ker/Developpements_en_cours/Mx_package.hlp/Mx_Structure_d_une_BRow qui commente la
subroutine OMBNCH qui passe d'une SM a une TM. Voir aussi un resume de SM dans :
>> $ZOOM/Help/Programmers/Ker/Tef_Mx_Structure

Pour effectuer l'élimination, on devra donc utiliser deux telles structures: pour G, que l'on élimine, et
pour F, pour calculer et ranger ses quatre matrices.

Cross Reference  Banks
----------------------
 De plus, il faut établir une correspondance entre les rangements et numérotation de chaque famille; ceci se fait,
au moment de l'élimination seulement, par les Bks dits de cross-reference, qui vont rassembler ces informations
de correspondance en répondant à ce genre de questions :
quand on élimine l'INa de G, quels Blocs IN/IX de F seront-t-ils concernés ? Cette question est traitée
simplement grâce à la connectique du TEF; voici comment on procède.
On considère une BLigne de [f] par exemple; par construction, sous chaque IN, on trouve, en traversant une
face de G, l'ensemble des IX connectées à cette IN; c'est ce que l'on a noté dans le schéma.
En considérant la portion du sous-graphe adjoint concerné, quand on élimine une IN de G, chaque objet de G
connectant une IN à chaque IX aura pour effet de modifier des blocs de la matrice [f] de la B Ligne correspondant
à cette IN de F. Matriciellement, on aura, par exemple lors de l'élimination de l'INa de [g], un bloc IXa,1 et
trois blocs IX1,a IX3,a et IXx,a qui vont influencer des blocs de la B Ligne IN1; ces blocs non vides correspondent
à l'existence d'objets de G qui connectent ces Interfaces à IN1. L'algorithme en découle :
pour la BLigne IN1, on balaie les IX de G sous la face par où pénètre la IN; on met à jour le bloc [IN] de
la (f g f) des blocs correspondant à la IX de la matrice (f g/ f). De plus, si g possède des transferts
internes, on complète par une élimination de type :  - (IXa,1)*[g]**-1*(IX1,a)
Remarque : en fait, si l'objet de g auquel la IX est connectée n'est pas lui même connecté à une IN de g, le
bloc (IX.IN) correspondant est nul, mais il est non vide du fait de la connectique.

Autre remarque : le lien entre l'EV d'une ligne d'un IX bloc et celui d'une colonne de la BRow est fait
par un pairing bank, mais son utilisation est alors - et pour le moment - triviale, car les deux EV
sont supposés identiques (ce d'où procède le Clubbered Connections BUG de ZOOM); on décrira donc ces tables
pour la structure terminale ci-dessous.

          ****************************************************************************************
          *********** Cas particulier de la structure terminale de l'arbre ZOOM ******************
          ****************************************************************************************

On peut faire l'analogie IC/IX et SV/IN, à ceci près que les SV n'effectuent pas une partition
des Etats de la cellule, puisqu'il peut y avoir répétition. On retiend donc CL/IN, avec le
découpage en sous-ensembles non disjoints des SV. Mais on est par contre dans le cas où la famille
englobant les cellules est diagonale par bloc. Ceci dit, dans la mesure ou on a des familles non
terminales qui peuvent contenir des cellules, la structure associée aux matrices Ct et A-1B devra
se couler dans le moule, avec une procédure d'élimination particulière aux cellules (EOLES).
Comme le rangement des matrices est particulier aux cellules et diffère de celui des familles, celà
peut justifier de l'existence d'un intermédiaire entre le rangement et les subroutines d'élimination
par le biais des Cross Reference banks et des Call Bank du MX-Package (ZMX bank)
cf << Cross_Reference .


               SVs ---> Cxs --->                   X        X           X
         I - - - - - I - - - - - I - - - - X   X -TV -X  X -TV -X    X -TV -X 
         .           ,                     I   I      I  I      I    I      I 
         .           ,                     I   I  AB1 I  I  AB2 I    I  AB3 I 
         .   Cl1     ,                     I   I      I  I      I    I      I 
         .           ,                     I   I Cx1  I  I      I    I      I 
         I - - - - - I - - - - - I         X   X - - -X  X X X XX    X X X XX 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I      I 
         .    v      ,    Cl2    ,         I   I  AB4 I 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I Cx2  I 
         I    v      I - - - - - I - - - - X   X X X XX 
         .    v                  ,         I
         .    v                  ,  Cl3    I
         .    v                  ,         I     |(LCX1).LFi_in_IF
         .    v                  ,         I     |               
         X X XvX X X   X X X X X X X X X X X     |               
         I      Cx I TV                          |               
         I         I                             V               
   Fi_IC1I      Cx I TV---- (LCX.)LFi_in_IF -->  .
         I         I
         I      Cx I TV
         X X X X X X
              v
              v
              v
         X X XvX X X  
         I         I
         I         I
   Fi_IC2I         I
         I         I
         X X X X X X


On peut continuer les analogies :
- une Ct_IC avec une [IX.IN] de g
- une AB_TV avec une [IN.IX]
- une A eventuelle avec une [IN]
Le problème, rappelons-le, tant ce surdècoupage en SV et TV, qui est inèvitable car il confère
aux processeurs toute leur puissance.

Structure des Matrices terminales
---------------------------------
Par rapport à ce qui precede, on a des differences :
- comme on vient de le voir, dúes au sur-dècoupage en SV et TV, donc structurelles;
- les matrices sont calculèes par les processeurs;
- d'origine historiques, aujourd'hui plus ou moins a remettre en cause, en pensant au solveur Adjoint etc;

La A-1B (stockee sous forme transposee)
---------------------------------------

                   < ---- dim = Nbre de composantes du vecteur d'Etat ------- >
T    F  I  / Cx1  X                                                           X dim Fi
R    a  C <  Cx2  X                                                           X
A    c  1  \ Cx3  X _________________________________________________________ X
N    e  I  /      X                                                           X
S    1  C <  Cx   I                                                           I
F       2  \      I                                                           I
E                 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
R    F  I  /      I                                                           I
T    a  C <  Cx   I                                                           I
S    c  1  \      X__________________________________________________________ X
     e  I  /      I                                                           I
     2  C <  Cx   X                                                           X
        2  \      I                                                           I
                  X-----------------------------------------------------------X

On retrouve sous forme transposee une BLigne generale, les faces de la cellules etant ordonnees :
les premieres sont sous des IN de la famille englobante, les suivantes sous des IX. La difference,
c'est que l'inversion de A (elimination des objets=etats de la cellule) est faite dans les processeurs).
Les IC - comme toute IX - partitionnent bien l'ensemble des transferts connectes a cette cellule.
Le surdecoupage en SV intervient par le fait qu'une IC pointe sur une SV (un C-Plug), et est sectionnee
en Cx (Connection Bk) pointant sur chacun un TV (un T-Plug) de Transfert. Ceci correspond au fait (TEF)
qu'un morceau de A-1B - ABt_TV(x,x) en PDL - donne l'influence d'un TV sur les etats; une BLigne Cxi
devrait ainsi logiquement  avoir la dimension dimEtat x dimTV. A la difference des matrices de familles, des
Cx differentes peuvent etre connectees a un meme transfert; ces Cx sont alors par construction sous
une meme IC. Les IC partitionnent les transferts, mais avec repetition possible au sein d'une meme IC.
Le fait qu'une IC n'est connectee qu'a une SV donne l'analogie: SV cellule / constituant de famille, mais
avec la restriction des recouvrements possibles de SV.

Pour des raisons historiques, la Cx a actuellement (ZOOM23) la dimension dimEtat x dimFi. Elle est rangee
sous le bank CL (Cellule).

La Ct
-----
Sa structure reste tres differente des [IX,IN] des familles :
-d'une part, un transfert est deja lui meme un bout de IN (ou IX);
-ensuite, il est decoupe en TV sous-ensembles non disjoints des composantes du Tr;
Un bloc elementaire est constitue veritablement par le morceau Ct_SV du PDL, de dimension:
dimSV x dimFi.
Ou est-il range ? Il concerne un transfert, et est donc associe a une IC; par ailleurs, il est lie a une SV, donc,
tres logiquement, on doit le  ranger sous une IC. Maintenant, sous cette IC, on a eventuellement plusieurs
transferts, pouvant de plus etre repetes : comme pour la A-1B, on utilise les Cx pour structurer la Ct; ce sera
la Cx utilisee pour acceder au SV du bloc elementaire Ct_SV.
L'information relative a l'algebre est alors :
celle de la SV, qui donne le nombre de colonnes (LSV).Nb_St_Var
celle du Cx, qui situe le sous EV du transfert dans celui de la IC, (LCX).L_Fi_in_IC,
le nombre de lignes pour chaque Cx BLigne etant la dimension du transfert

I                 < - dim = Nbre de composantes du C-PLug - >
I          /      I                                          I  \
I Une     <  Cx1  I                                          I   | dim Fi
I          \      X__________________________________________X  /
I   IC     /      I                                          I
I         <  Cx2  X                                          X
I          \      I                                          I
I                 X------------------------------------------X

Operation d'elimination d'une Cellule
-------------------------------------
On part d'une IN par exemple de la famille, on entre par une (seule) face de la Cellule, on balaie les IC,
et sous chaque IC, les Cx; la, on recupere un bloc Ct_SV. L'information (LCX).L_FI_in_IC donne le pointeur
sur la ligne de la BLigne [IN],[IN,IX] de F (schema terminal ci-dessus).
On doit effectuer tous les produits Ct_SV*{BLigne des AB).
 Pour un produit Ct_IC par une BLigne  AB, on construit, sous le WCst Cellule, deux Cx Tables :
 CDXTB decrivant les blocs de la Bligne et autant de CDXTE que de IC, donnant les lines entre les
elements de AB_IC et leur position (# col) dans les AH (OC2CDX)
De son cote, chaque Ct_IC donnera lieu a une description de meme type dans RDXTB RDXTE(IC), fait dans la boucle
des produits (par IC : OC2RX), juste avant d'appeler OMXCAB qui effectue Ct_IC * [AB BRow]
Ces produits combinent donc les Cx Tables R et C :  Ct_IC(RDXTE) * [AB BRow (CDXTE)], chainees dans le
call bank ZMX dont les data donnent les vraies dimensions des MX blocs des elements des 3 matrices (pour
l'adressage Fortran d'un element)
Enfin, on passe de la numerotation SV.liste - # cols de la Ct - a Cl.Eta - # lignes de la AB - par les
Pairing Bks, qui decoupent la SV.liste par segment de suite naturelle d'entiers (OSV2P). Au dessus, pour AH,
on ne voit plus que des IN,IX. On peut dire en bref que l'on associe au passage d'une face un changement de
point de vue (d'Espace Vectoriel) en faisant deux operations :
- l'elimination de Eta avec sa structure fine des SV;
- la "relaxation" des IC en IF_Up (ou regroupement ou coalescence);
*************** Featuring ******************
Rq concernant LE bug : c'est RDXTB\_RDXTE> qui realise le "Pairing" entre la numerotation IC vers IN,IX;
par construction, on recree pour chaque Ct_IC une Cx Structure deja existante en CDXTB\_CDXTE> , mais
noyee dans la AB Mx; il faudrait chercher a symetriser tout c,a, avec deux autres preoccupations :
- la possibilite du surdecoupage de Ct_TV_SV, et de ABt_SV_TV
- la renumerotation de IC a IFUp (LE Bug)

La matrice D
------------


<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/MX_structures.bak
**************************************************************************************************
**************************************************************************************************
******* TEF Ker Matrices and IN IX IC Fc topics **************************************************
**************************************************************************************************
**************************************************************************************************
 Pour fixer les idées, on considère l'état de la matrice des influences du SLT correspondant au
sous-arbre de la Fm F, après élimination des objets inférieurs à la Fm G; on suppose que pour cet
exemple arbitraire, on a obtenu :

         < --------------- G Fm ---------->X<- F Fm ------------------- >X<-- X_F-->X<- X_F-->
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X -   - - I
         .           ,           .         I         .         .         X         X         I
         .           ,           .         I         .         .         X         X         I
    Ga   .   INa     ,           .  INc,a Fc  IX1,a  .  IX2,a  .       FcX  IXx,a  X         I
         .           ,           .         I         .         .         X         X         I
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I
         .           .           .         I         .         .         X         X         I
         .           .           .         I         .         .         X         X         I
    Gb   .           .    INb    .         I         .         .  IX3,b Fc         X  IXx,b  I
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I    
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    Gc   .   INa,c   .           .  INc    I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X    
         .           |           .         I         .         .         X         X         I    
         .           |           .         I         .         .         X         X         I    
    F1   .   IXa,1   |           .       FcI   IN1   .         .         X         X         I    
         .           |           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - I - - - - I - - - - I - - - - X - - - - X - - - - I    
         ,           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    F2   .   IXa,2   .           .       FcI         .  IN2    .         X         X         I    
         .           .           .         I         .         .         X         X         I    
         I - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I    
         .           .           .         I         .         .         X         X         I    
         .           .           .         I         .         .         X         X         I    
    F3   .           .   IXb,3   .       FcI         .         .  IN3    X         X         I    
         .           .           .         I         .         .         X         X         I    
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X    
         .           |           .         I         .         .         X         X         I
         I           |           .         I         .         .        Fc  I N    X         I
    X_F  I  IXa,x    |           .        Fc         .         .         X         X         I
         .           |           .         I         .         .         X         X         I
         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
         .           .           .         I         .         .         X         X         I
    X_F  .           .           .         I         .         .         X         X         I
         .           |   IXb,x   .        Fc         .         .         X         X         I
         .           .           .         I         .         .         X         X         I
         X - - - - - I - - - - - I - - - - X - - - - I - - - - I - - - - X - - - - X - - - - I

En réalité, ls sous arbre est ici representé en 2D : en ne considérant que les liens par ligne,
chaque IN de F, sous la IN1 - cad vers la gauche, on traverse une Face de G pour atteindre une
IX de G. On a noté x_F les deux familles vers la droite de F, qui ne seront pas distinguées dans
l'élimination de G que l'on va étudier; on voit que pour simplifier, on a supposé l'existence
d'un seul constituant G de F. On a supposé également que les éliminations déjà faites n'avaient
pas couplé de IN de F ([f] reste diagonale par bloc).
Nous  allons décrire une opération élémentaire d'élimination de G, effectuée dans EOLE et EOLEF
(ou OEQ, OEQF de la D_loop). La méthode est une complémentation de Schur par bloc, // LU decomposition,
qui calcule des opération du type :

                 [IN1] = [IN1] - (IN1,IXa)*(INa)**-1*(IXa,IN1)

avec la notation (row_wise) des matrices dans ZOOM : IXa,1 Bcol # a, Brow # 1, et où l'on note
[X] une matrice dans l'EV de F, (X) dans celui de G. (IN1,IXa) est le bloc donnant l'influence
sur dFi,IN1 d'une perturbation de Fi,IXa, etc. En court, on notera IXa,1 pour (IN1,IXa), l'ordre
a,1 etant renverse pour respecter la convention matricielle de ker (Colonne,Ligne).

Si vous êtes d'accord avec ce qui précède, vous ^etes tombes dans un piège, car cette forme
d'élimination n'est correcte que lorque [g] est diagonale par blocs [IN]. En réalité, il faut
lire [INa]**-1 comme une sous-matrice de [g]**-1; on effectue en fait l'opération précédente en plongeant
les matrices dans la base de G

                 [IN1] = [IN1] - (IN1,IXa)*(g)**-1*(IN1,IXa)

(ceci est préparé dans la routine OAXG2C, au moment de l'élimination, qui crée une SM structure identique
à celle de [g] - la Bligne (IN1,IX...) à créer étant de structure identique à celle de la matrice carrée [g],
en y plaçant délicatement le bloc (IN1,IXa); ajoutons que la SM décrivant [g] sera elle même expansée
dans sa TM pour inversion dans OGAUS en appelant OMBNCH cf >> Mx_Structure_d_une_BRow ).

Représentation des Matrices par leur structure en Blocs
-------------------------------------------------------
Considérons maintenant la représentation dans ker des matrices de G, au nombre de 4, correspondant à la
notation triplet :
1ère : [g], qui comprend l'ensemble des (INi,j), donnent l'influence des IN,j sur les IN,i de G;
2ème : à droite de [g] : (g g/ x) donnent l'influence des IX,n sur les IN,m de G;
3ème : sous [g] : (x g/ g) donnent l'influence des IN,m sur les IX,n de G.
4ème et dernière, non representée sur le schéma : (x g/ x) reprend les influences de transferts tous
externes à G, qui proviennent de l'élimination d'objets inférieurs. Elles seraient SOUS les IN de F et
au-delà vers la diagonale de droite.

Ces quatre blocs sont décrits par quatre structures de Banks(Bk) ZEBRA, sous le Bk Fm de G, par
quatre Bk racine dits MXT Bk (Matrix Table). La description choisie est faite par Bloc Lignes (BRows).
Ainsi, [g] est constituée de 3 Brows Ga, Gb, Gc.

Chaque Brow est décrite par une table MXRT (Matrix Row Table) qui donne la succession des Blocs non
vides, ici : INa et INa,1, chacun correspondant finalement à un Bk MX pour ranger le bloc matrice.
Il en est de même des trois autres blocs. Cette description des blocs non vides est appellé SM (Stored Matrix)

On peut noter que la structure des tables donnant les blocs non vides est connue dès que l'arbre ZOOM
est connu pour un problème décrit dans ZINIT; on en trouvera l'explication dans l'analyse de la connectique
de ZOOM au moyen des hyper-graphes (cf manuel de l'EcoDynalique Hiérarchisée).
Ainsi, les Bk Tables (MXT et MXRT) sont définitivement construites après OFRAME.

Rangement de l'information :
----------------------------
Dans MXT, on a le nombre et la liste des numéros de BLignes : pour [g], on a 3 IN (a,b,c) numérotées (1,2,3)
dans G. De même pour les IX numérotées dans chaque famille indépendemment.
Pour chaque BLigne, on donne de la même facon le nombre et la liste des blocs; pour la BLigne Gc, on a deux blocs
numérotés (1,3).
Pour reconstituer la matrice complète (dite TM = True Matrix, par opposition a SM = Stored Matrix), on a les
informations suivantes :

1/Les dimensions sont décrites dans deux Bk RSize et CSize, chaînés sous la Table MXT. Ils donnent, chacun :

- le nombre total de variables (dimension de chacune des quatres matrices triplet)
- le nombre complet d'interfaces (IN ou IX)
- la liste des dimensions de chaque interface, vide ou pas du fait de la connectique.
(dans le cas d'une matrice carree, comme [g], on a un seul Size, et les deux adresses y pointent).

2/Chaque BLigne est à ranger dans la TM au bloc # donné dans le RT bank, et on a sous chaque RT bank un CTBR
bank (Reverse Table) donnant la liste des numéros de blocs de la SM dans l'ordre des blocs
de la TM (=0 pour un bloc vide).

3/Comme on peut le voir sur le schéma, on prend en compte le fait qu'une BLigne - de [g] par exemple] - se 
prolonge naturellement par son complément pour (g g/ x), ce qui correspond au concept de transferts externes
à une famille donnée dans le sous arbre ZOOM de la famille; c'est ce que décrit une SM en réalité.

Ainsi, ces 4(+1) Bks fournissent la structure des blocs et les dimensions de chaque matrice d'influence de G,
indépendemment de toute autre matrice du problème. On peut toucher du doigt ces changements d'EV en consultant
>> /zoom/dev/src/cmz/ker/Developpements_en_cours/Mx_package.hlp/Mx_Structure_d_une_BRow qui commente la
subroutine OMBNCH qui passe d'une SM a une TM. Voir aussi un resume de SM dans :
>> /zoom/Help/Programmers/Ker/Tef_Mx_Structure

Pour effectuer l'élimination, on devra donc utiliser deux telles structures: pour G, que l'on élimine, et
pour F, pour calculer et ranger ses quatre matrices.

Cross Reference  Banks
----------------------
 De plus, il faut établir une correspondance entre les rangements et numérotation de chaque famille; ceci se fait,
au moment de l'élimination seulement, par les Bks dits de cross-reference, qui vont rassembler ces informations
de correspondance en répondant à ce genre de questions :
quand on élimine l'INa de G, quels Blocs IN/IX de F seront-t-ils concernés ? Cette question est traitée
simplement grâce à la connectique du TEF; voici comment on procède.
On considère une BLigne de [f] par exemple; par construction, sous chaque IN, on trouve, en traversant une
face de G, l'ensemble des IX connectées à cette IN; c'est ce que l'on a noté dans le schéma.
En considérant la portion du sous-graphe adjoint concerné, quand on élimine une IN de G, chaque objet de G
connectant une IN à chaque IX aura pour effet de modifier des blocs de la matrice [f] de la B Ligne correspondant
à cette IN de F. Matriciellement, on aura, par exemple lors de l'élimination de l'INa de [g], un bloc IXa,1 et
trois blocs IX1,a IX3,a et IXx,a qui vont influencer des blocs de la B Ligne IN1; ces blocs non vides correspondent
à l'existence d'objets de G qui connectent ces Interfaces à IN1. L'algorithme en découle :
pour la BLigne IN1, on balaie les IX de G sous la face par où pénètre la IN; on met à jour le bloc [IN] de
la (f g f) des blocs correspondant à la IX de la matrice (f g/ f). De plus, si g possède des transferts
internes, on complète par une élimination de type :  - (IXa,1)*[g]**-1*(IX1,a)
Remarque : en fait, si l'objet de g auquel la IX est connectée n'est pas lui même connecté à une IN de g, le
bloc (IX.IN) correspondant est nul, mais il est non vide du fait de la connectique.

Autre remarque : le lien entre l'EV d'une ligne d'un IX bloc et celui d'une colonne de la BRow est fait
par un pairing bank, mais son utilisation est alors - et pour le moment - triviale, car les deux EV
sont supposés identiques (ce d'où procède le Clubbered Connections BUG de ZOOM); on décrira donc ces tables
pour la structure terminale ci-dessous.

          ****************************************************************************************
          *********** Cas particulier de la structure terminale de l'arbre ZOOM ******************
          ****************************************************************************************

On peut faire l'analogie IC/IX et SV/IN, à ceci près que les SV n'effectuent pas une partition
des Etats de la cellule, puisqu'il peut y avoir répétition. On retiend donc CL/IN, avec le
découpage en sous-ensembles non disjoints des SV. Mais on est par contre dans le cas où la famille
englobant les cellules est diagonale par bloc. Ceci dit, dans la mesure ou on a des familles non
terminales qui peuvent contenir des cellules, la structure associée aux matrices Ct et A-1B devra
se couler dans le moule, avec une procédure d'élimination particulière aux cellules (EOLES).
Comme le rangement des matrices est particulier aux cellules et diffère de celui des familles, celà
peut justifier de l'existence d'un intermédiaire entre le rangement et les subroutines d'élimination
par le biais des Cross Reference banks et des Call Bank du MX-Package (ZMX bank)
cf << Cross_Reference .


               SVs ---> Cxs --->                   X        X           X
         I - - - - - I - - - - - I - - - - X   X -TV -X  X -TV -X    X -TV -X 
         .           ,                     I   I      I  I      I    I      I 
         .           ,                     I   I  AB1 I  I  AB2 I    I  AB3 I 
         .   Cl1     ,                     I   I      I  I      I    I      I 
         .           ,                     I   I Cx1  I  I      I    I      I 
         I - - - - - I - - - - - I         X   X - - -X  X X X XX    X X X XX 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I      I 
         .    v      ,    Cl2    ,         I   I  AB4 I 
         .    v      ,           ,         I   I      I 
         .    v      ,           ,         I   I Cx2  I 
         I    v      I - - - - - I - - - - X   X X X XX 
         .    v                  ,         I
         .    v                  ,  Cl3    I
         .    v                  ,         I     |(LCX1).LFi_in_IF
         .    v                  ,         I     |               
         X X XvX X X   X X X X X X X X X X X     |               
         I      Cx I TV                          |               
         I         I                             V               
   Fi_IC1I      Cx I TV---- (LCX.)LFi_in_IF -->  .
         I         I
         I      Cx I TV
         X X X X X X
              v
              v
              v
         X X XvX X X  
         I         I
         I         I
   Fi_IC2I         I
         I         I
         X X X X X X


On peut continuer les analogies :
- une Ct_IC avec une [IX.IN] de g
- une AB_TV avec une [IN.IX]
- une A eventuelle avec une [IN]
Le problème, rappelons-le, tant ce surdècoupage en SV et TV, qui est inèvitable car il confère
aux processeurs toute leur puissance.

Structure des Matrices terminales
---------------------------------
Par rapport à ce qui precede, on a des differences :
- comme on vient de le voir, dúes au sur-dècoupage en SV et TV, donc structurelles;
- les matrices sont calculèes par les processeurs;
- d'origine historiques, aujourd'hui plus ou moins a remettre en cause, en pensant au solveur Adjoint etc;

La A-1B (stockee sous forme transposee)
---------------------------------------

                   < ---- dim = Nbre de composantes du vecteur d'Etat ------- >
T    F  I  / Cx1  X                                                           X dim Fi
R    a  C <  Cx2  X                                                           X
A    c  1  \ Cx3  X _________________________________________________________ X
N    e  I  /      X                                                           X
S    1  C <  Cx   I                                                           I
F       2  \      I                                                           I
E                 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
R    F  I  /      I                                                           I
T    a  C <  Cx   I                                                           I
S    c  1  \      X__________________________________________________________ X
     e  I  /      I                                                           I
     2  C <  Cx   X                                                           X
        2  \      I                                                           I
                  X-----------------------------------------------------------X

On retrouve sous forme transposee une BLigne generale, les faces de la cellules etant ordonnees :
les premieres sont sous des IN de la famille englobante, les suivantes sous des IX. La difference,
c'est que l'inversion de A (elimination des objets=etats de la cellule) est faite dans les processeurs).
Les IC - comme toute IX - partitionnent bien l'ensemble des transferts connectes a cette cellule.
Le surdecoupage en SV intervient par le fait qu'une IC pointe sur une SV (un C-Plug), et est sectionnee
en Cx (Connection Bk) pointant sur chacun un TV (un T-Plug) de Transfert. Ceci correspond au fait (TEF)
qu'un morceau de A-1B - ABt_TV(x,x) en PDL - donne l'influence d'un TV sur les etats; une BLigne Cxi
devrait ainsi logiquement  avoir la dimension dimEtat x dimTV. A la difference des matrices de familles, des
Cx differentes peuvent etre connectees a un meme transfert; ces Cx sont alors par construction sous
une meme IC. Les IC partitionnent les transferts, mais avec repetition possible au sein d'une meme IC.
Le fait qu'une IC n'est connectee qu'a une SV donne l'analogie: SV cellule / constituant de famille, mais
avec la restriction des recouvrements possibles de SV.

Pour des raisons historiques, la Cx a actuellement (ZOOM23) la dimension dimEtat x dimFi. Elle est rangee
sous le bank CL (Cellule).

La Ct
-----
Sa structure reste tres differente des [IX,IN] des familles :
-d'une part, un transfert est deja lui meme un bout de IN (ou IX);
-ensuite, il est decoupe en TV sous-ensembles non disjoints des composantes du Tr;
Un bloc elementaire est constitue veritablement par le morceau Ct_SV du PDL, de dimension:
dimSV x dimFi.
Ou est-il range ? Il concerne un transfert, et est donc associe a une IC; par ailleurs, il est lie a une SV, donc,
tres logiquement, on doit le  ranger sous une IC. Maintenant, sous cette IC, on a eventuellement plusieurs
transferts, pouvant de plus etre repetes : comme pour la A-1B, on utilise les Cx pour structurer la Ct; ce sera
la Cx utilisee pour acceder au SV du bloc elementaire Ct_SV.
L'information relative a l'algebre est alors :
celle de la SV, qui donne le nombre de colonnes (LSV).Nb_St_Var
celle du Cx, qui situe le sous EV du transfert dans celui de la IC, (LCX).L_Fi_in_IC,
le nombre de lignes pour chaque Cx BLigne etant la dimension du transfert

I                 < - dim = Nbre de composantes du C-PLug - >
I          /      I                                          I  \
I Une     <  Cx1  I                                          I   | dim Fi
I          \      X__________________________________________X  /
I   IC     /      I                                          I
I         <  Cx2  X                                          X
I          \      I                                          I
I                 X------------------------------------------X

Operation d'elimination d'une Cellule
-------------------------------------
On part d'une IN par exemple de la famille, on entre par une (seule) face de la Cellule, on balaie les IC,
et sous chaque IC, les Cx; la, on recupere un bloc Ct_SV. L'information (LCX).L_FI_in_IC donne le pointeur
sur la ligne de la BLigne [IN],[IN,IX] de F (schema terminal ci-dessus).
On doit effectuer tous les produits Ct_SV*{BLigne des AB).
 Pour un produit Ct_IC par une BLigne  AB, on construit, sous le WCst Cellule, deux Cx Tables :
 CDXTB decrivant les blocs de la Bligne et autant de CDXTE que de IC, donnant les lines entre les
elements de AB_IC et leur position (# col) dans les AH (OC2CDX)
De son cote, chaque Ct_IC donnera lieu a une description de meme type dans RDXTB RDXTE(IC), fait dans la boucle
des produits (par IC : OC2RX), juste avant d'appeler OMXCAB qui effectue Ct_IC * [AB BRow]
Ces produits combinent donc les Cx Tables R et C :  Ct_IC(RDXTE) * [AB BRow (CDXTE)], chainees dans le
call bank ZMX dont les data donnent les vraies dimensions des MX blocs des elements des 3 matrices (pour
l'adressage Fortran d'un element)
Enfin, on passe de la numerotation SV.liste - # cols de la Ct - a Cl.Eta - # lignes de la AB - par les
Pairing Bks, qui decoupent la SV.liste par segment de suite naturelle d'entiers (OSV2P). Au dessus, pour AH,
on ne voit plus que des IN,IX. On peut dire en bref que l'on associe au passage d'une face un changement de
point de vue (d'Espace Vectoriel) en faisant deux operations :
- l'elimination de Eta avec sa structure fine des SV;
- la "relaxation" des IC en IF_Up (ou regroupement ou coalescence);
*************** Featuring ******************
Rq concernant LE bug : c'est RDXTB\_RDXTE> qui realise le "Pairing" entre la numerotation IC vers IN,IX;
par construction, on recree pour chaque Ct_IC une Cx Structure deja existante en CDXTB\_CDXTE> , mais
noyee dans la AB Mx; il faudrait chercher a symetriser tout c,a, avec deux autres preoccupations :
- la possibilite du surdecoupage de Ct_TV_SV, et de ABt_SV_TV
- la renumerotation de IC a IFUp (LE Bug)

La matrice D
------------


<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Mx_Structure_d_une_BRow
*******************************************************************************
*******************************************************************************
******* Structure Matricielle par blocs ligne (ou colonne) ********************
*******************************************************************************
*******************************************************************************
Le plus précis exigeant un langage adapté, le mieux est de décrire la routine
de ker qui passe de la répresentation par blocs (SM) à la bonne vieille
représentation pleine de zéros (TM). On prend l'option d'une SM par BLigne pour
les commentaires; c'est semblable pour la description par colonnes.
On donne ici la description complète d'une matrice carrée par sa SM, ce qui
englobe les descriptions plus partielles (une seule BLigne par exemple)

SUBROUTINE OMBNCH(KMXBU,JMXBU,LMXBU);
!...............................................................
!   Bunch a matrix stored in the standard MXT-MXR-MX structure;.
!   the bunched matrix is stored in a single matrix bank linked.
!   in LQ(KMXBU-JMXBU).
!                                                              .
!   Input : KMXBU = address of the bank to which the bunched   .
!                   matrix bank will be linked                 .
!           JMXBU = offset of this link                        .
!           LMXT  = address of the input MXT; found in COMMON  .
!                                                              .
!   Output : LMXBU = Bunched matrix address                    .
!                                                              .
!   Variables : NSZR = TOTAL NUMBER OF ROWS                    .
!               NSZC = TOTAL NUMBER OF COLUMNS                 .
!               NCT = # OF BLOCK-COLUMNS                       .
!               NRT = # OF BLOCK-ROWS                          .
!...............................................................
DIMENSION MMXBU(4);
DATA MMXBU/'MXBU',1,1,0/;
                             ****  Info Globale  : MXT et Size ****
NBLOC=IQ(LMXT+2);           Numero de la BLigne (une IN ou une IX)
LSZR = @(LMXT.MT).SR;       Les deux Size Banks donnent :
LSZC = @(LMXT.MT).SC;
NRT=IQ(LSZR+2);                  le nombre de BLignes (=1)
NCT=IQ(LSZC+2);                       "       Bcol (= # IF)
NSZR=IQ(LSZR+1);                 Nbre de lignes de la matrice complete (TM)
NSZC=IQ(LSZC+1);                   "     colonnes       "       "
Ainsi, les banks Size decrivent la matrice expansee (dite TM = True Matrix), cad
l'ensemble des IF (IN ou IX) ordonnees, meme vide du fait de la connectique.

"---------CREATION du MXBU'Bank d'accueil de la matrice
MMXBU(4)=NSZC*NSZR;    Dimension de la matrice, pour reservation d'un bank
NODVKE=NODV;           de la division MX
NODV=NOMX;
CALL MQZERO(LMXBU,KMXBU,JMXBU,MMXBU);
NODV=NODVKE;                *** Info dans les BRow tables chainees ***
LMXR = @(LMXT.MT).RT(1);     decrivant chaque Bloc (correspondant a une IF)
  Les MXR Banks donnent la liste des blocs (BCol) non vides corespondant chacun
  a un couple d'IFi,IFj non vide du fait de la connectique.
MR=1;                     
MSZ=0;        TM 0 pointeur sur l'element de matrice expansee de la BLigne courante
 ISZ=0;       TM 0 pointeur de l'element de matrice expansee de la BLigne suivante

DO IR=1,NRT               Boucle sur les BLignes de la matrice expanse
<  NR=IQ(LSZR+2+IR);        Nbre de lignes de la IReme BLigne
   ISZ=ISZ+NR*NSZC;         Fin de derniere ligne de la nouvelle BLigne expansee
   IF(IR.EQ.IQ(LMXR+2)"=NUMR")     La BLigne correspond a une BLigne non vide
   <  M=1;
   " "MR=MR+1;
   " "DO  IC=1,NCT            Boucle sur les BCol de la BLigne expansee
   " "<  NC=IQ(LSZC+2+IC);      Nbre de colonnes du bloc BCol (meme vide)
   " "   NUMC=IQ(LMXR+3+M);     Numero du bloc a copier
   " "   IF(NUMC. EQ .IC)       Copie d'un bloc non vide
   " "   <  LMX = @(LMXR.RT).MX(M);  le bloc matrice qui contiend les valeurs
   " "   " "M=M+1;
   " "   " "L=MSZ;               Copie d'un bloc de dim NC*NR,  (NUMC,NUMR) dans [IC,JR]
   " "   " "DO JR=1,NR           du bank LMX, ligne par ligne  >>>>>>>>>
   " "   " "<  NDEB=NC*(JR-1)+1;                                        `
   " "   " "   NFIN=NC*JR;                                              `
   " "   " "   DO JC=NDEB,NFIN "--WRITE A ROW of Bloc"                   `
   " "   " "   <  L=L+1;                                                `
   " "   " "   " "Q(LMXBU+L)=Q(LMX+JC);   Element de matrice IFi.IFj(JC,JR)`
   " "   " "   >                                                        `
   " "   " "   L=NSZC*JR+MSZ;    ligne suivante de la matrice expansee                                       `
   " "   " "   "-----NEXT ROW"                                          `
   " "   " ">                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<`
   " "   >
   " "   MSZ=MSZ+NC;        0 pointeur sur la colonne de la BLigne expansee
   " ">
   " "MSZ=ISZ;              TM pointeur sur le debut de la suivante
   " "LMXR=LQ(LMXR+ONX);   "NEXT BLOCK-ROW"  la suivante de celle que l'on a recopie
   >                       (y a pas de bug, car on n'utilise OMBNCH que pour les [g]
   ELSE                     matrix, dont la SM a les memes BRow que la TM).
   <  MSZ=ISZ;
   >
>
RETURN;
END;

**************************************** Features ******************************
Il vaudrait mieux boucler sur la structure MT~RT~MX et remplir les blocs de la TM
non vides en utilisant les inverse table donnant la position de chaque (Blocs) dans
la [TM]. Reste a donner le TM pointeur correspondant a un bloc non vide.

Feature : ces pointeurs pourraient etre ranges soit dans les Size,
soit dans la CTBR reverse table.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Mx_pairing_et_crossT
in OEQS
=======
!-GET PAIRING BANK : LQ(LZMX-12)==>PAIR
 LQ(LZMX-12)=LQ(LWCST+OWKPR+1-NSVIC);
;
!-    CREATE ROW CROSS TABLES
 CALL OIC2RX (LIC,LZMX,IQ(LZMX+2));
 LRDXTE=LQ(LQ(LQ(LZMX-IQ(LZMX+2))-2)-2);
(avant OMXAD)

PAIRING routines
===============
   Patch   //KER/OTBL
****************
*   Deck OA2P  *  Called by OEQ and EOLE                        
****************
"----------------------------------------------------------------"
"-    CREATE PAIRING TABLES FOR ALL THE CONSTITUENTS OF"
"-    THE FAMILY, TO PREPARE THE COMPUTATION OF :"
"-   . (CXG)X(AGX')"
"---------------------------------------------------------------"
" "
FROM FM(LFM)
<
"-    INTERNAL VARIABLE TYPE"
!ITVF=IQ(LFM+9);
   S_O_SKIP(LSO)
   < "Case_S_O(LSO)is_elementary"
     "<  When_Yes"                     In FM(LSO); IF LQ(LSO-..Nxt_lvl_Ad).EQ.0
         < "Case_SO (LSO) is"
           "<  When_CL"                                     IF @LSO@CL@SV@.NE.0
               < CALL OSV2P(LSO);
!                ================
               >
              "When_TR"                                                  ELSE
               < Print*,' ZOOM_dual not yet implemented';
                 CALL OTV2P(LSO);
!                ================
           ">" >
         >
        "When_Fm"                                                        ELSE
         <  CALL OMXT2P(LSO);
!           ================
         >
     "> esac"
   >"End S_O_Skip"
>"End Fm"
;
RETURN;
    Deck OSV2P                           
"*****************************************************************"
"   THIS SUBROUTINE CREATES THE PAIRING BANK OF CT COLUMNS       *"
"   WITH (A**(-1))B ROWS.                                        *"
"   ( Ct_SV is structured already, not A-1B, but Featured to be  *"
"*****************************************************************"
    Deck OT2PB                           
      "-    CREATE BLOCK PAIRING BANK FROM MATRIX TABLES,"
    Deck OMXT2P
"------------------------------------------------------------------"
"-        SUB-FAMILIES PAIR-BANKS CREATION :"
"-    ONE PAIR-BANK PER BLOCK ROW OF AH(GX)"
"- ??? a verifier: construction de AH(GX) line /line particukier"
"-----------------------------------------------------------------"
;
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/OIC2RX.hlp
SUBROUTINE OIC2RX (LIC,KR,JR);                                               SUBROUTINE OIX2RX (LIX,KR,JR);                                 
"--------------------------------------------------------------------        CREATE ROW CROSS TABLE FOR THE PRODUCT OF A GIVEN  ROW OF C(XG)
"-    CREATE ROW CROSS TABLE FOR THE PRODUCT OF A GIVEN C+ (CELL"            (EXTERNAL INTERFACE LIX) BY AH(GX).                             
"-    INTERFACE LIC) BY A**(-1)*B."                                          THERE IS ONLY ONE RDXT, ONE RDXTB, ONE RDXTE.                   
"-    THERE IS ONLY ONE RDXT, ONE RDXTB, ONE RDXTE."                         IQ(LRDXTB+3) (=# COL OF C-BLOCK) IS SUPPOSED TO BE FILLED LATER 
"-    IF LQ(KR-JR) IS NOT ZERO THE 3 BANKS ARE ASSUMED TO EXIST, BUT"        BEFORE EACH CALL TO OMXER).                                     
"-     MARKED FOR DROP; IN THAT CASE BITS IQDROP ARE RESET TO 0."            IF LQ(KR-JR) IS NOT ZERO THE 3 BANKS ARE ASSUMED TO EXIST, BUT  
"-------------------------------------------------------------------         TO BE MARKED FOR DROP; IN THAT CASE BITS IQDROP ARE RESET TO 0. 
DIMENSION MCDXT(4),MCDXTB(4),MCDXTE(4);                                      
DATA MCDXT/'DXT ',2,2,1/;  "::>CDXT(XC) or XF(XI) Bk"
DATA MCDXTB/'DXTB',2,2,7/; "::>CDXB(XB) Bk"
DATA MCDXTE/'DXTE',1,1,5/; "::>CDXE(XB) Bk"
;
NODVKE=NODV;
NODV=NOWEZ;
;
IF LQ(KR-JR).GT.0
< LT=LQ(KR-JR);
  CALL SBIT0(IQ(LT),IQDROP);
  LTB=LQ(LT+OXCXB);
  CALL SBIT0(IQ(LTB),IQDROP);
  LTE=LQ(LTB+OXBXE);
  CALL SBIT0(IQ(LTE),IQDROP);
>ELSE                                                                                    idem
< CALL MQLIFT(LT,KR,-JR,MCDXT);
  CALL MQLIFT(LTB,LT,OXCXB,MCDXTB);
  CALL MQLIFT(LTE,LTB,OXBXE,MCDXTE);
>;
 IQ(LT+1)=1;
 IQ(LTB+4)=1;             CtAB will span on 1 BRow of Up               r
 IQ(LTB+7)=0;
 IQ(LTE+1)=1;
 IQ(LTE+3)=0;                                                                  ----------------------------------------------------
" "
LSV = LQ(LIC+OICSV);            SV related to this IC
LF  = LQ(LIC+OICFA);                                 belonging to Fc            LF=LQ(LIX+OIXFA);             
LIF = LQ(LF+OFAIU);                                       under IFUp            LIF=LQ(LF+OFAIU);             
" "                                                                             ;                             
"-    RDXTB"   (B=Bloc)                                                         !-    RDXTB                   
IQ(LTB+1) = 0_(LIC.IC).Int_Nb;       Low BRow Nb                                IQ(LTB+1)=0_(LIX.IX).Int_Nb;  
IQ(LTB+2) = 0_(LIC.IC).Nb_Tr_Var;    # Rows of low B                   n        IQ(LTB+2)=0_(LIX.IX).Nb_Var;  
IQ(LTB+3) = 0_(LSV.SV).Nb_St_Var;    # Cols " "                                 IQ(LTB+3)=0; filled later                 
       4    1                       will span on 1 Brow of Up                          4 =1
IQ(LTB+5) = 0_(LIF.IF).Int_Nb;       Upper BRow Nb (1 BR only)        \         IQ(LTB+5)=0_(LIF.IU).Int_Nb;
IQ(LTB+6) = 0_(LIF.IF).Nb_Var;       # Rows of Up                      n        IQ(LTB+6)=0_(LIF.IU).Nb_Var;
       7    0                        # Cols                           /                7 =0
" "
"-    RDXTE"   (E=Element)                                                      !-    RDXTE                 
       1  = 1                        # BRows of Low                                    1 =1
IQ(LTE+2) = 0_(LIF.IF).Int_Nb;       Upper BRow Nb (1 BR only)                  IQ(LTE+2)=0_(LIF.IU).Int_Nb;      
       3  = 0                        Bloc 0_location in low (Ct) BRow  \               3 =0                       
IQ(LTE+4) = 0_(LIC.IC).Nb_Tr_Var;    # Cols                             r       IQ(LTE+4)=0_(LIX.IX).Nb_Var;      
IQ(LTE+5) = 0_(LIC.IC).LTr_in_Fc;    starting from Col # in Up         /        IQ(LTE+5)=0_(LIX.IX).L_Var_in_Fc; 
" "
NODV=NODVKE;
" "
RETURN;
END;
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/OIC2RX.hlp.bak
SUBROUTINE OIC2RX (LIC,KR,JR);                                               SUBROUTINE OIX2RX (LIX,KR,JR);                                 
"--------------------------------------------------------------------        CREATE ROW CROSS TABLE FOR THE PRODUCT OF A GIVEN  ROW OF C(XG)
"-    CREATE ROW CROSS TABLE FOR THE PRODUCT OF A GIVEN C+ (CELL"            (EXTERNAL INTERFACE LIX) BY AH(GX).                             
"-    INTERFACE LIC) BY A**(-1)*B."                                          THERE IS ONLY ONE RDXT, ONE RDXTB, ONE RDXTE.                   
"-    THERE IS ONLY ONE RDXT, ONE RDXTB, ONE RDXTE."                         IQ(LRDXTB+3) (=# COL OF C-BLOCK) IS SUPPOSED TO BE FILLED LATER 
"-    IF LQ(KR-JR) IS NOT ZERO THE 3 BANKS ARE ASSUMED TO EXIST, BUT"        BEFORE EACH CALL TO OMXER).                                     
"-     MARKED FOR DROP; IN THAT CASE BITS IQDROP ARE RESET TO 0."            IF LQ(KR-JR) IS NOT ZERO THE 3 BANKS ARE ASSUMED TO EXIST, BUT  
"-------------------------------------------------------------------         TO BE MARKED FOR DROP; IN THAT CASE BITS IQDROP ARE RESET TO 0. 
DIMENSION MCDXT(4),MCDXTB(4),MCDXTE(4);                                      
DATA MCDXT/'DXT ',2,2,1/;  "::>CDXT(XC) or XF(XI) Bk"
DATA MCDXTB/'DXTB',2,2,7/; "::>CDXB(XB) Bk"
DATA MCDXTE/'DXTE',1,1,5/; "::>CDXE(XB) Bk"
;
NODVKE=NODV;
NODV=NOWEZ;
;
IF LQ(KR-JR).GT.0
< LT=LQ(KR-JR);
  CALL SBIT0(IQ(LT),IQDROP);
  LTB=LQ(LT+OXCXB);
  CALL SBIT0(IQ(LTB),IQDROP);
  LTE=LQ(LTB+OXBXE);
  CALL SBIT0(IQ(LTE),IQDROP);
>ELSE                                                                                    idem
< CALL MQLIFT(LT,KR,-JR,MCDXT);
  CALL MQLIFT(LTB,LT,OXCXB,MCDXTB);
  CALL MQLIFT(LTE,LTB,OXBXE,MCDXTE);
>;
 IQ(LT+1)=1;
 IQ(LTB+4)=1;             CtAB will span on 1 BRow of Up
 IQ(LTB+7)=0;
 IQ(LTE+1)=1;
 IQ(LTE+3)=0;                                                                  ----------------------------------------------------
" "
LSV = LQ(LIC+OICSV);            SV related to this IC
LF  = LQ(LIC+OICFA);                                 belonging to Fc            LF=LQ(LIX+OIXFA);             
LIF = LQ(LF+OFAIU);                                       under IFUp            LIF=LQ(LF+OFAIU);             
" "                                                                             ;                             
"-    RDXTB"   (B=Bloc)                                                         !-    RDXTB                   
IQ(LTB+1) = 0_(LIC.IC).Int_Nb;       Low BRow Nb                                IQ(LTB+1)=0_(LIX.IX).Int_Nb;  
IQ(LTB+2) = 0_(LIC.IC).Nb_Tr_Var;    # Rows of low B                            IQ(LTB+2)=0_(LIX.IX).Nb_Var;  
IQ(LTB+3) = 0_(LSV.SV).Nb_St_Var;    # Cols " "                                 IQ(LTB+3)=0; filled later                 
       4    1                       will span on 1 Brow of Up                          4 =1
IQ(LTB+5) = 0_(LIF.IF).Int_Nb;       Upper BRow Nb (1 BR only)                  IQ(LTB+5)=0_(LIF.IU).Int_Nb;
IQ(LTB+6) = 0_(LIF.IF).Nb_Var;       # Rows of Up                               IQ(LTB+6)=0_(LIF.IU).Nb_Var;
       7    0                        # Cols                                            7 =0
" "
"-    RDXTE"   (E=Element)                                                      !-    RDXTE                 
       1  = 1                        # BRows of Low                                    1 =1
IQ(LTE+2) = 0_(LIF.IF).Int_Nb;       Upper BRow Nb (1 BR only)                  IQ(LTE+2)=0_(LIF.IU).Int_Nb;      
       3  = 0                        Bloc 0_location in low (Ct) BRow                  3 =0                       
IQ(LTE+4) = 0_(LIC.IC).Nb_Tr_Var;    # Cols                                     IQ(LTE+4)=0_(LIX.IX).Nb_Var;      
IQ(LTE+5) = 0_(LIC.IC).LTr_in_Fc;    starting from Col # in Up                  IQ(LTE+5)=0_(LIX.IX).L_Var_in_Fc; 
" "
NODV=NODVKE;
" "
RETURN;
END;
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/CtABnew
**************************************************************************
****   Compte-Rendu (partielle) reunion 25-26 Juin 99  *******************
**************************************************************************
****   Apres Tarbes amendements; pour la mult, cf CtABnew.Tarbes  ********
****   Apres Paris amendements;(21/08/00(*********************************
**************************************************************************
Apres de nombreuses evoquations/discussions sur un nouveau traitement des
Ct A-1B, depuis Juillet 96, il semble se degager une proposition acceptable.

La nouvelle structure Zebra devait repondre a de nouvelles exigences :

1/ permettre de ranger les matrices A et B, pour les calculs de sensib
   et de l'adjoint.
2/ etre assez souple pour accompagner les developpements :
   - rangement de A,B et/ou A-1B et/ou CtA-1B
   - accepter des variantes de calcul stockage
   - gestion des matrices sur deux pas de temps et nouveaux vecteurs
   - essais de parallelisation
3/ tolerer qu'un Tr puisse etre multiplement connecte a la meme cellule
   via plusieurs C-Plugs.

Le nouveau calcul de CtA-1B devait servir de banc-test pour une refonte du
  Mx_Package, en assurant

1/ une meilleure lisibilite/simplicite
2/ l'appel aux librairies (optimisees) d'algebre lineaire (LINPACK...)
3/ une separation de taches claires en preparation de la parallelisation
4/ l'appropriation du code par la collaboration Zoom-ker de facon a promouvoir
   une collaboration equitable pour les developpements du noyau envisages.


La structure Zebra :
====================
  .....                              Nouvelle regle : une IC reste attachee a
  | Cl  >                            une seule SV, mais les IC ne sont plus une
  ``|`|                              partition des Tr de la Face, cad qu'un Tr
    |  \_ | D |->| CtAB' |(*)        peut aparaitre x fois, s'il est x connecte
    |                                a la Cl via x SV
   .....
   | F  >
   ''|''
     |
   .......     ......
   | IC1 |  -> | IC2 |   Dimensions : D = U{IC} * U{IC'}, comme CtAB' ???
   |''||''     ''''''
   |  | \_ | Ct_SV |                  Ct_SV = SV * U{IC}
   |  |
   |   \_ | Bt_TV |                   Bt_TV = SV * U{IC'}
   |
    \__ | ABt_TV |                    ABt_TV = Eta * U{IC'}

notations : U{.} == union des .
            IC' == IC restreinte a l'union des TV connectes a la SV correspondante
           le bloc marque (*) est rangement de calculs de ker

Remarque : La ABt actuelle est constituee de la somme directe des Eta*IC blocs
ci-dessus; on peut ajouter que la regle nouvelle des IC fonctionne deja', ce qui
decoule :
1/ de la structure de la ABt en IC, qui semble dupliquer ce transfert
2/ du calcul de la dim de la ABt via les IC pour avoir les Tr connectes.
3/ du calcul de dEta egalement via les IC

On peut aussi prevoir des variantes compactees de ABt_TV,  Bt_TV, D, et CtAB :
ABt_SV_TV ( = SV * TV), Bt_TV* (= SV * TV), D_TV_TV (= TV * TV), CtAB_TV_TV (=idem)
remplies par les processeurs.
Il reste le pb de la D_TV a preciser

Une nouvelle procedure d'elimination :
======================================
* Separation des taches :

une devise, une seule : Extraction, Multiplication, Ventilation, lors de l'elimination
d'une cellule.
- Extraction : on extrait de la ABt_UTV les colonnes des USV de la Ct_USV
               en constituant une ABt' et une Ct' volatiles.
- Operation : calcul de Ct_SV' * ABt'
- Ventilation : utilisation de Tables pour rangement dans les matrices de la FmUp

* procedure(s) d'elimination possible(s) :
  Dans EOLEF, cad elimination des objets d'une famille, on appelle une SOELIM, qui fait
  une boucle sur les Cl en calculant la CtAB - structuree par les ICi*ICj (ou pourquoi
  pas par Blignes, voire par blocs ICi*ICj ?). Ceci pourra s'etendre aux sous-familles
  EOLES, qui traitait de l'elimination d'un SO, voit son role reduit a la ventilation.
Remarque : en ce qui concerne LE Bug, il est alors clairement lie a cette operation, et
a elle seule.

Preparation de la refonte :
===========================
Premiere etape : dans la nouvelle structure Zebra, on effectue les memes
calculs qu'auparavant a partir de la ABt_TV; ce qui n'empeche pas de preparer la suite.

------------------
Taches a repartir :
------------------

precompilateur - en fait USBanks etc : description des nouveaux blocs.(!)
PROC : macros pour rangement de A, Bt_TV, ABt_TV, Ct_SV, D_TV
  et preparer les variantes ABt_SV_TV, Ct_TV_SV, D_TV_TV pour les matrices plus compactes.
       (ceci a la demande explicite de l'U par le choix des macros grasp specifiques)
ker : -macros du ZBM pour les nouvelles matrices (!)
      -OFRAME et ONUMA pour nouvelles tables (!)
      -dump routines(!)
      -CtA-1B par la devise triple(!)   cf ...Tarbes
      -EOLE et EOLES algorithme(!)
      -nouvelles tables(!) pour ventilation
      -penser a la systematisation au Mx-package
      -attaque/test de Mx lin packages(!) essais dans mini-ker ?
      -repertorier les routines ou interviend la convention de rangement des matrices
       (ligne,colonne,pour envisager un chgt eventuel)
      -procedure d'elimination generale : traitement par [IN,IX] BLignes, ou globale ?
       (cf ...Tarbes, le choix du traitement de CtAB_TV complet)
      -traitement par ker de la COOO, cad d'un SO sans variables.
      -traitement du T-Probe, cad CtAB rectangulaires.
       ( c'est ok, cf ...Tarbes CtAB_TV)
      -algorithmes pour : LU decomp de A, sensibilites, adjoint, Cellule calculant sa
       CtAB, resolution par gradients conjugues(!)      mini_ker ?

(!) : taches de la premiere etape a se repartir

Questions en suspend ou en plus :
=================================
- est-ce un bon moment pour re-envisager le nouvel arbre des Transferts ?
- pourquoi exclure un TR x connected a la meme Cl via la meme SV ?
 (cad x ABt_TV enchainees sous une IC dans l'ordre des CX de la SV.)
 ==> apres Tarbes, c,a devrait aller ?)
- nouvelles macros permettant la co-existence ou pas.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/CtABnew.Tarbes
Post-Tarbes précisions amendees par Paris-Aout
==============================================

Pour éviter les CtAB creuses - du genre peigne-connexions, on conserve seulement les blocs
TV des ABt, dans une AB';

 Ct_U{IC} . AB'/U{TV}     la AB' obtenue par extraction de U{SV}=Eta'

                                  => CtAB' rangee sous la cellule

////////////////////////////////////////////////////////////////////////////////////////////
                                                                                          //
Multiplication            .... A-1B'  ........                                            //
==============                                                                            //
                              f1     f2   f3                                              //
                         I<-------><----><-->I                                            //
                         |.IC1.IC2.     .    |  sous chaque IC = EV_sum des TV c'tés      //
                         |TVTVTVTV.     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |  Eta'                                      //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |TV|  | ||     .    |                                            //
                         I<-|--|-|><----><-->I                                            //
  <.SV1.>    <  .SV3.  >                                                                  //
      <.SV2.>                       *Extraction                                           //
 I<---<->--->----------I                1/ Cumul des Ct_SV => Ct'                         //
 |///////              |IC1                                                               //
 |.....................|     f1         2/ Cumul des ABt_TV                               //
 |    \\\\\\\          |IC2                                                               //
 |    \\\\\\\          |                  et Extraction des lignes <-> Eta'  => AB'       //
 |---------------------|                                                                  //
 |           //////////|     f2     *Multiplication                                       //
 |           //////////|                4/ Call Mx Mult lib                               //
 I---------------------I                                                                  //
 <     Eta'            >                   => CtAB'                                       //
 ....... Ct' ...........                                                                  //
                                                                                          //
 <-Eta'=Union des SV--->            *Ventilation                                          //
                                        5/ dans le bloc superieur                         //
                                                                                          //
///////////////////////////////////////////////////////////////////////////////////////////
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/CtABnew.Tarbes.bak
Post-Tarbes préisions
======================

Pour éviter les CtAB creuses - du genre peigne-connexions, on conserve seulement les blocs
TV des ABt, cad les ABt_TV.

 Ct_IC(i)_SV(i) . [ABt_IC(j)/U{TV}]'     la []' obtenue par extraction de U{SV}<-> Ct_i

                                  => CtAB'_i,j    = un bloc ICixICj

On envisage de rassembler tous les morceaux avant la multiplication :

////////////////////////////////////////////////////////////////////////////////////////////
                                                                                          //
Multiplication            .... A-1B'  ........                                            //
==============                                                                            //
                              f1     f2   f3                                              //
                         I<-------><----><-->I                                            //
                         |.IC1.IC2.     .    |  sous chaque IC = EV_sum des TV c'ted      //
                         |TVTVTVTV.     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |        .     .    |                                            //
                         |TV|  | ||     .    |                                            //
                         I<-|--|-|><----><-->I                                            //
  <.SV1.>                                                                                 //
      <.SV2.>                       *Extraction                                           //
 I<---<->--->----------I                1/ Cumul des Ct_SV => bloc Ct'                    //
 |////XXX\\\\          |IC1                                                               //
 |.....................|     f1         2/ Cumul des ABt_TV                               //
 |                     |IC2                                                               //
 |                     |                3/ Extraction des lignes <-> Eta'                 //
 |---------------------|                                                                  //
 |                     |     f2     *Multiplication                                       //
 |                     |                4/ Call Mx Mult lib                               //
 I---------------------I                                                                  //
 ....... Ct' ...........                   => CtAB_TV                                     //
                                                                                          //
 <-Eta'=Union des SV--->            *Ventilation                                          //
                                        5/ dans le bloc superieur                         //
                                                                                          //
///////////////////////////////////////////////////////////////////////////////////////////


question : qu'est-ce qui empeche de remplir des D_TV ?
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/CtABnew.bak
**************************************************************************
****   Compte-Rendu (partielle) reunion 25-26 Juin 99  *******************
**************************************************************************
****   Apres Tarbes amendements; pour la mult, cf CtABnew.Tarbes  ********
**************************************************************************
Apres de nombreuses evoquations/discussions sur un nouveau traitement des
Ct A-1B, depuis Juillet 96, il semble se degager une proposition acceptable.

La nouvelle structure Zebra devait repondre a de nouvelles exigences :

1/ permettre de ranger les matrices A et B, pour les calculs de sensib
   et de l'adjoint.
2/ etre assez souple pour accompagner les developpements :
   - rangement de A,B et/ou A-1B et/ou CtA-1B
   - accepter des variantes de calcul stockage
   - gestion des matrices sur deux pas de temps et nouveaux vecteurs
   - essais de parallelisation
3/ tolerer qu'un Tr puisse etre multiplement connecte a la meme cellule
   via plusieurs C-Plugs.

Le nouveau calcul de CtA-1B devait servir de banc-test pour une refonte du
  Mx_Package, en assurant

1/ une meilleure lisibilite/simplicite
2/ l'appel aux librairies (optimisees) d'algebre lineaire (LINPACK...)
3/ une separation de taches claires en preparation de la parallelisation
4/ l'appropriation du code par la collaboration Zoom-ker de facon a promouvoir
   une collaboration equitable pour les developpements du noyau envisages.


La structure Zebra :
====================
  .....                              Nouvelle regle : une IC reste attachee a
  | Cl  >                            une seule SV, mais les IC ne sont plus une
  ``|`|                              partition des Tr de la Face, cad qu'un Tr
    |  \_ | D |->| CtAB |(*)         peut aparaitre x fois, s'il est x connecte
    |                                a la Cl via x SV
   .....
   | F  >
   ''|''
     |
   .......     ......
   | IC1 |  -> | IC2 |               Dimensions :    D = UFi * UFi, comme CtAB
   |'|||''     ''''''
   | || \_ | Ct_SV >               Ct_SV = SV * IC
   | ||
   | | \_ | Bt_TV >                Bt_TV = SV * IC
   | |
   |  \__ | ABt_SV_IC >(*)            ABt_SV_TV = SV * IC
   |
    \__ | ABt_TV >                 ABt_TV = Eta * IC

{les blocs marques (*) sont des rangements de calculs de ker}
Remarque : La ABt actuelle est constituee de la somme directe des Eta*IC blocs
ci-dessus; on peut ajouter que la regle nouvelle des IC semble deja fonctionner, ce
qui reste a verifier (cf taches), mais qui peut se comprendre 
1/ de par la structure de la ABt en IC, qui semble dupliquer ce transfert
2/ du calcul de la dim de la ABt via les IC pour avoir les Tr connectes.
3/ du calcul de dEta egalement via les IC

On peut aussi prevoir des variantes compactees de ABt_TV,  Bt_TV, D, et CtAB :
ABt_SV_TV ( = SV * TV), Bt_TV* (= SV * TV), D_TV_TV (= TV * TV), CtAB_TV_TV (=idem)
remplies par les processeurs.
Il reste quelques pb concernant cette structure :
- comme on a des choix possibles, il faut pouvoir reconnaitre qu'une matrice est unique
  ou rangee x fois sous des formes differentes.
- quels sont les blocs uniques / chaines ?
  sachant que l'on peut avoir x Tr dans une IC - cad qui sont dans une meme IF de la FmUp
  et connectes a cette Cl sur la meme SV, on a des chaines de :
  Bt_TV, ABt_SV_TV, ABt_TV, Ct_SV. Si c'est exact, on les ordonne - comme auparavant -
  dans l'ordre des CX de la SV.

Une nouvelle procedure d'elimination :
======================================
* Separation des taches :

une devise, une seule : Extraction, Multiplication, Ventilation.
- Extraction : on extrait de chaque ABt_TV les colonnes de la SV de la Ct_SV
- Operation : calcul de Ct_SV * ABt_SV_IC, rangement sous la Cl
- Ventilation : utilisation des CX Tables pour rangement dans les matrices de la FmUp

* procedure(s) d'elimination possible(s) :
  Dans EOLEF, cad elimination des objets d'une famille, on appelle une SOELIM, qui fait
  une boucle sur les Cl en calculant la CtAB - structuree par les ICi*ICj (ou pourquoi
  pas par Blignes, voire par blocs ICi*ICj ?). Ceci pourra s'etendre aux sous-familles
  EOLES, qui traitait de l'elimination d'un SO, voit son role reduit a la ventilation.
Remarque : en ce qui concerne LE Bug, il est alors clairement lie a cette operation, et
a elle seule.

Preparation de la refonte :
===========================
Premiere etape : dans la nouvelle structure Zebra, on effectue les memes
calculs qu'auparavant a partir de la ABt_TV; ce qui n'empeche pas de preparer la suite.

------------------
Taches a repartir :
------------------

precompilateur - en fait USBanks etc : description des nouveaux blocs.(!)
PROC : macros pour rangement de A, Bt_TV, ABt_TV, Ct_AB, D
       (penser a la possibilite/interet de D_TV)
  et preparer les variantes ABt_SV_TV, Ct_TV_SV, D_TV_TV pour les matrices plus compactes.
       (ceci a la demande explicite de l'U par le choix des macros grasp)
ker : -macros du ZBM pour les nouvelles matrices
      -verification de OFRAME et ODETA pour la nouvelle regle concernant les IC et le
       pb des Tr x connected.(!)
      -dump routines(!)
      -CtA-1B par la devise triple(!)   cf ...Tarbes
      -EOLE et EOLES algorithme(!)
      -nouvelles CX tables(!)           pour ventilation
      -penser a la systematisation au Mx-package
      -attaque/test de Mx lin packages(!) essais dans mini-ker ?
      -repertorier les routines ou interviend la convention de rangement des matrices
       (ligne,colonne,pour envisager un chgt eventuel)
      -procedure d'elimination generale : traitement par [IN,IX] BLignes, ou globale ?
       (cf ...Tarbes, le choix du traitement de CtAB_TV complet)
      -traitement par ker de la COOO, cad d'un SO sans variables.
      -traitement du T-Probe, cad CtAB rectangulaires.
       ( c'est ok, cf ...Tarbes CtAB_TV)
      -algorithmes pour : LU decomp de A, sensibilites, adjoint, Cellule calculant sa
       CtAB, resolution par gradients conjugues(!)      mini_ker ?

(!) : taches de la premiere etape a se repartir

Questions en suspend ou en plus :
=================================
- est-ce un bon moment pour re-envisager le nouvel arbre des Transferts ?
- pourquoi exclure un TR x connected a la meme Cl via la meme SV ?
 (cad x ABt_TV enchainees sous une IC dans l'ordre des CX de la SV.)
 ==> apres Tarbes, c,a devrait aller ?)
- nouvelles macros permettant la co-existence ou pas.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extr_Op_Vent_Toulouse
******************************************************************************************
************* E l i m i n a t i o n  d' u n e   C e l l u l e  ***************************
******************************************************************************************
 On part des blocs rangés sous les IC, et on fabrique la CtAB' permettant
d'effectuer l'élimination de la Cellule.
  .....                    
  | Cl  >                  
  ``|`|                    
    |  \_ | D |->| CtAB' |
    |                      
   .....                   
   | F  >                  
   ''|''                   
     |                     
   .......     ......      
   | IC1 |  -> | IC2 |     
   |'''|''     ''''''      
   |    \_ | Ct_SV |       
   |                       
    \__ | ABt_TV |         

en suivant un triple schéma : extraction, opération, ventilation

Préliminaires, format des blocs de départ et notations
======================================================

Restriction sur le vecteur d'Etat de la cellule
...............................................
On introduit un vecteur Eta' (fortran EtaP) qui rassemble l'ensemble des composantes de Eta
connectées à un plug (SV); il y correspond la notion d'un bord (edge) de la cellule.
On note Eta' = U{SV} union des SV. Ces composantes ordonnées en ordre croissant
correspondent aux colonnes (resp. ligne) des matrices intermédiaires de l'extraction :
Ct' (resp. AB'). Le bank SV devra fournir cette information.

Restriction sur les interfaces (IC)
...................................
On introduit de même une IC' (ICP) qui rassemble les composantes des transferts connectés
à une SV ayant une influence sur Eta. Ceci exclue donc les T-Probes; pour les autres (TV),
on note IC' = U{TV} union des TV connectés à cette SV. Cette union ne comporte pas de
composantes répétées dans la mesure où on impose qu'un transfert plusieurs fois connecté
à une cellule ne puisse l'être que via des SV différentes. De manière abstraite, on aura
quand même des IC', mais de dimension nulle, qui rassemble des T-Probes - comme les
T-Probes sont des TV de dimension nulle.
Attention, une IC' est une liste de composantes de transferts dans l'ordre de leur liste
telle quelle est donnée dans les TV. A chaque item de cette liste correspond une colonne
de AB', matrice construite lors de l'extraction de ABt_TV

Restriction de la matrice D
...........................
On n'a pas encore traité du problème de l'extraction de D' à ajouter à la CtAB'

Remarque :  on envisage d'introduire une autre catégorie de transfert de type paramètre;
..........  ces derniers sont nécessaires pour les études de sensibilité paramétriques.
Dans la mesure ou ils n'interviennent pas directement dans les résultats de simulation,
on envisage de les ranger sous des faces spécifiues. Pour les paramètres de cellules, ils
sont à inclure dans les IC'; par contre, ils sont nons réactifs et n'ont pas lieu
d'apparaitre dans les lignes de la Ct'. Leur prise en compte dans la navette reste à définir.

******************************************************************************************
************* E x t r a c t i o n   ******************************************************
******************************************************************************************
-----------
 PARTIE Ct
-----------
 On part des blocs Ct_SV de cette SV/IC; dimension : dimEta_SV x U Tr{IC}.
pedago : une IC représente en effet un sous-ensemble des transferts connectés à cette SV;
ce sous-ensemble (face de la cellule) est structuré par des règles externes (IN,IX).

 On fabrique une Ct' pour la cellule, de dimension dimEta' x U Tr{IC}.
pedago : cette matrice représente donc l'influence directe des composantes de Eta' sur
l'ensemble des transferts connectés via l'ensemble des SV de la cellule (Influence des
bords sur l'extérieur).

Rq: il peut y avoir des composantes de Tr répétées, à travers x IC.

  <.SV1.>    <  .SV3.  >       Under Cl                                                   
      <.SV2.>                  < loop on : Fc                                             
 I<---<->--->----------I         <                                                        
 |///////              |IC1        loop on : IC                                           
 |.....................|    f1     <                                                      
 |    \\\\\\\          |IC2          acces a un bloc Ct_SV                                
 |    \\\\\\\          |             loop on : lignes de Ct_SV                            
 |---------------------|             <                                                    
 |           //////////|    f2        loop on : composantes de la ligne                  
 |           //////////|               < passage de # col(Eta_SV) a # col(Eta') de Ct'  
 I---------------------I                 copie/somme(*)
 <     Eta'            >               >
 ....... Ct' ...........             >
                                   >
 <-Eta'=Union des SV--->         >
        ordonnee               >
(*) copie avec somme après raz pour laisser aux utilisateurs la possibilité d'appliquer
un proceseur de transfert ajoutant des contributions en provenance de plusieurs cellules
dans des conditions ou ces cellules sont en realité la même : il faut bien alors sommer
les composantes de Ct :
   dPhi_j = Sum_i [ Ct(i,j)*dEta_SV_i ] = cas particliuer = Sum_i [ Ct(i,j) ]*dEta_SV

explicitation cf ./Extract_CtP

-----------
 PARTIE AB
-----------
 On part de banks ABt_TV de dimension dimEta x dimIC'
(avec IC' ==  U TV <-o-> IC comme on l'a définit ci-dessus).
pedago : [A]^-1 fait en effet réagir l'ensemble des composantes de Eta à l'environnement
définit par les seules composantes des tr connectés se présentant à la cellule dans des TV.
On n'a ainsi pas besoin de "voir" les T-Probes.

 On fabrique une AB' (non transposée, mais voir (*)), couplant toutes les composantes de la cellule
sensibles (Eta') à l'environnement (U TV); ce bloc est uniquement destiné au calcul
du produit Ct.A-1B. dimension = dim U IC' x dim Eta'

Rq: a priori, il ne devrait pas y avoir de composantes de Tr répétées, car un Tr
multiplement connecté à une cellule doit l'être via différents SV.
(et on a une seule SV par IC)

  .... A-1B'  ........        Under Cl                                                        
                              < loop on : Fc                                                  
       f1     f2   f3           <                                                             
  I<-------><----><-->I           loop on : IC                                                
  |.IC1.IC2.     .    |           <                                                           
  |TVTVTVTV.     .    |             acces a un bloc ABt_TV                                    
  |        .     .    |             loop on : lignes de ABt_TV                                
  |        .     .    |             <                                                         
  |        .     .    |  Eta'         loop on : composantes de la ligne                       
  |        .     .    |               < passage/extraction # col (Eta)
  |        .     .    |                  a # ligne (Eta') de AB'                                                
  |        .     .    |                 copie/somme (**)                                           
  |TV|  | ||     .    |               >                                                         
  I<-|--|-|><----><-->I             >                                                           
   IC1' IC2'                      >
dans le désordre des listes     >                                                             
des TV                        >                                                               

En ce qui concerne la descente de la navette, le calcul de AB.dFi est peu coûteux, et
on utilisera directement les blocs ABt_TV.

(*) rien n'empêche cependant, pour des raisons d'optimisation, de la prendre transposée,
car les bibliothèques de l'algèbre linéaires permettent tout aussi bien de la manipuler.
(**) somme à partir d'une raz car rien n'interdit à un utilisateur de répéter une
composante de Eta dans des SV différentes, voire dans la même SV.

explicitation : cf ./Extract_ABP

-----------
 PARTIE D
-----------

On pourrait partir de blocs D_TV rangés sous chaque IC de dimension dim{IC'}*dim{IC}.
L'extraction {de D', de même dimensions que CtAB') consisterait donc simplement à
botteler ces blocs.

Remarques générales sur l'extraction :
--------------------------------------
1/ tant pour D' que pour les autres, on pourra envisager différentes formes comtractées
de matrice, selon notre nouvelle philosophie :
traiter spécifiquement chaque cas particulier au mieux de ses intérêts.
2/ le nouveau bank ABt_TV est déjà contracté par rapport à l'actuel :
 non seulement la ABt_TV contiend les T-Probes, mais le vecteur transfert complet chaque
fois qu'il apparait dans une IC ! Pour un transfert radiatif de type PNE, la cellule
se satisfait d'une seule composante, alors qu'elle voyait les mille et comme on a une
cellule par composante de ce transfert (aux bords près) on stockait dimEta * 999*1000 zéros.
En ce qui concerne la D_TV, si seuls d'autres transferts sont interdépendants via cette
cellule, elle ne devrait pas être concernée par ce transfert millepattes. Celà reste à
préciser.

******************************************************************************************
************* P R O D U I T  *************************************************************
******************************************************************************************

Le résultat CtAB' = Ct' x AB', de dimension dim U{IC'} x dim U{IC}, est rangé
sous la cellule. Selon la proposition ci-dessous, ce bank pourrait comporter la
somme avec D'.
Exemple avec :
      SUBROUTINE SGEMM ( OA, OB, M, N, K, ALPHA, A, LDA,   B, LDB,  BETA, C, LDC )

                        'n'               Alpha*[A]   (*) [B]    (+) Beta*[C];
                        't'ou'c'          Alpha*[A]_t (*)
                            't'                       (*) [B]_t  (+) Beta*[C];

                       Op(A) : M rows as [C]     [A] real A(LDA,*)
                       Op(B)   N cols as [C]     [B] real B(LDB,*)  [C} real C(LDC,*)
                       Op(A)   K cols as OpB rows
      CALL SGEMM ( 'n','n', dim(IC), dim{IC'}, dimEta', -1., Ct',-, AB',-, 1., D',-)
mais vérifier rangement / convention

******************************************************************************************
************* V e n t i l a t i o n ******************************************************
******************************************************************************************

Le problème consiste à ranger par blocs la CtAB' d'une cellule dans les matrices de
la famille englobante. Ces matrices sont au nombre de 4, correspondant a 4 bk Fm-|MXT>,
dans l'ordre : (f_f), (f_x), (x_f), (x_x)
pedago :
Chacune est structurée par les interfaces (IN,IX). On va donc utiliser cette structure,
qui est également connue pour les CtAB', pour le rangement/ventilation;
à un bloc terminal <-o-> un bk MX, les MX d'une rangée chaînés sous un bk MXR (row) de MXT.
(c'est ce passage de la structure IC de la cellule a la structure IN,IX de la famille
qui définit la ventilation, et qui était décrite par les cross-reference tables CDXTB,
CDXTE... de la version actuelle)

Les interfaces sont numerotées dans la famille, mais il y a des blocs INixINj vides; et
parmi ceus qui sont présents, la cellule n'aura à en remplir qu'une partie : on a donc
besoin d'une numérotation des blocs à remplir vus de la cellules, et d'une table de
passage de cette numérotation à celle de la famille.
De plus, les colonnes de CtAB' sont structurées en IC', cad les composantes des Tr,
avec possible répétition, constituant les TV connectant la cellule à son environnement.
Il faut donc une table donnant la position des colonnes de IC' dans le bloc IN.IN d'arrivée.
(ou IN.IX etc, on explicite seulement le rangement dans la première matrice (f_f) de la Fm)


  Sous la famille :
! boucles dans la structure par blocs
  loop on : Blignes de CtAB'
  <
! identification du MXR cible (une Bligne <-o-> une IN)
     passage # IN{Cl} bloc de CtAB' a # IN{Fm}<-o->MXR           Table
     loop on Blocs de la Bligne
     <  id du MX bk cible                                        Table
! boucles sur les composantes scalaires
        loop on : lignes d'un bloc INj x INi
        < passage # ligne CtAB' a IN.IN                          Table
          loop on composantes
          < passage # col CtAB' a IN.IN                          Table
            copie/somme
          >
        >
      >
   >
            Fc 1        Fc2        Fc3               Fc1/Cl
          IC1' IC2'    IC3'  IC4'  IC5'...        IC1  |         IC2
         I - - - - - I - - - - - I - - - - X       |   |          |colonne m
         .IC1        ,           ,         I       |   |          |   .
    Fc1  .           ,           ,         I       |   |          |   .    t
         .           ,           ,         I       |   |          |   .    a
         .IC2        ,                     I       |   |          |   .    b
         I - - - - - I - - - - - I - - - - X     ( Table ICi -> INj ) .    l
         .IC3        ,           ,         I       |   | j=NBCR(i)|   .    e
         .           ,           ,         I       |   |          |   .
    Fc2  .IC4        ,    Cl2    ,         I       |   |          |   .    m
         .           ,           ,         I       |   |          |   .    i
         .           ,           ,         I      //   |          |   .    V
         I - - - - - I - - - - - I - - - - X     //|   V          |   .    n=IC(m)
         .IC5        ,           ,         I    // V Fci/Fm       V   .
    Fc3  .           ,           ,  Cl3    I   //IN1      IN2     IN3 .
         .           ,           ,         I  //       .        .     .
         .           ,           ,         I //        .        .     V      pour rappel seult :
         X X X X X X I X X X X X I X X X X X / - |- - -.- - - - . - - n - - -CDXTB(1)=1
                                           //  I       .        .           I     (2)=
                                          //   I       .        .           I     (3)=(LCL).Nb_St_Var
      IC1  ----------------------------- //>IN1I       .        .           I     (4)=nFc
                                        //     I . . . . . . . ... . . . . .I      +1 =(Fc).IC_Nb
                                       //      I       .        .           I      +2 =0
                                            IN2I       .        .           I      +3 =(Fc).Nb_Var
                                               I       .        .           I
                                               I . . . . . . . . . . . . . .I
                                               I       .        .           I  
      IC2 ------ 3 = NBCR(2) ------------- >IN3I       .        .           I  
          ligne k..........................>   l       .        .     X     I   <-- scalaire cible
                   table k->l=IR(k)            I       .        .           I          (n,l)
                                               -  - - - - - - - - - - - - - -  
                                                                <----------->
                                                                  ISIZE(kFa)

La même table sert à passer de la numérotation interne à la Cl (ICi->INj
à celle des INj IXj de la Fm, par ligne ou par colonnes blocs (table NBCR(i).
Par contre, les colonnes ne comportant pas les T-Probes, il faut deux tables
scalaires de passage : la première pour passer des TV-listes à sa colonne de IFup
                       la deuxième pour tenir compte des transferts non-ordonnés
                       par cette IFup (LeBug)

explicitation, cf < ./Vent_CtABP

!!!*****************************************************************************************
On a deux logiques de parcourt des blocs de CtAB' qui s'opposent : la plus naturelle vue du
rangement actuel des natrice privilégie le parcourt des MX d'une BRow (cf boucles ci-dessus),
alors que la dissymétrie ligne colonnes de CtAB' favorise le parcourt colonne par colonne.
Il serait peut-être bien d'expliciter la première voie, alors que l'on explicite la seconde.
*****************************************************************************************!!!

Remarque concernant la conservation de la matrice du problème couplant tous les transferts;
...........................................................................................
La notion de IX est complètement liée à l'arbre ZOOM. Elle rassemble en réalité des
sous-ensembles de IN qui seules constituent les blocs de la matrice "Somme des CtAB".
Dans le cas où on veut exporter cette matrice, ou l'utiliser complète pour d'autres méthodes
de résolution que l'algorithme emboité présent, il faudra prévoir une ventilation
complémentaire.

******************************************************************************************
************* A n a l y s e  / Objectifs initiaux ****************************************
******************************************************************************************

 Par rapport aux objectifs, on a éliminé les lignes de zéros de la ABt_TV stokée;
après l'extraction, le produit matriciel est standard (plus de pairing banks pour apparier les lignes
de l'un des opérandes aux colonnes de l'autre);
enfin, la ventilation fait appel à des tables fixes et échappe ainsi à la création
à chaque élimination des cross-reference tables, abandonnant ainsi leur encription salace,
voire dévergondée (banks CTX,CTXB,CTXE et idem r0ws).
Les tables de rangement permettent l'existence de Tr ou IC nons consécutifs sous
une IN (ou IX), et Le Bug n'a plus l'occasion de s'exprimer.

 Dans les traitements ci-dessus, on n'a pas envisagé les cas particuliers, comme les
matrices compactées (Ct_TV_SV et ABt_SV_TV); en ajoutant dans les boucles intérieures
l'exploration de la sous-structure IC/Cx/TV des Fc, on peut exploiter sans changement
de méthode ces cas particuliers, tenir compte des composantes bien rangées etc.
 Le stokage de la matrice D pouttait suivre les mêmes conventions : une D_TV de dim {IC'}x{IC}
sous chaque IC; il suffirait de botteler(*) pour obtenir D' de dim identique au résultat de CtAB';
on effecturait alors la somme D'+CtAB'dans la partie "opération".

********* PERSPECTIVES *************
Enfin (jyg dixit) ce schéma d'Extraction a ce grand avantage de concrètiser la structure IN.IX
d'un sous-arbre; la ventilation correspond alors à un changement d'espace vectoriel lié à l'inclusion
de ce sous-arbre dans un sous-arbre supérieur : pourquoi donc ne pas le systématiser lors
de l'élimination des familles ? On peut en effet faire un // entre les triple-opérations :

Cl   [A]    ABt_TV   AB'     Ct_SV     Ct'      D_TV      D'  - CtAB'   ventilation->4MXT-MXR-MX
            EtaxIC'         ICxEta'             IC'xIC                  IC->Fc->IFup

Fm   [f]            (f-x)             (x-f)             (x-x) - (xfx)       id     ->4MXT-MXR-MX
    INxIN   INxIX            IXxIN              IX-IX                   IX->Fc->IFup

sauf qu'actuellement, les 4 matrices de base ne sont pas concretisées; l'idée à étudier est donc
de les bâtir pour effectuer une "opération de Schur"=(x-x)-(x-x)[f]-1(f-x) avant de ventiler.
Cette opération est bien súr massivement parallelisable, en amputant l'arbre complet d'un niveau.

(*) botteler (des radis) : en Anglais "to bunch"; "to bunch one's skirt" : retrousser sa jupe.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extr_Op_Vent_Toulouse.bak
******************************************************************************************
************* E l i m i n a t i o n  d' u n e   C e l l u l e  ***************************
******************************************************************************************
 On part des blocs rangés sous les IC, et on fabrique la CtAB' permettant
d'effectuer l'élimination de la Cellule.
  .....                    
  | Cl  >                  
  ``|`|                    
    |  \_ | D |->| CtAB' |
    |                      
   .....                   
   | F  >                  
   ''|''                   
     |                     
   .......     ......      
   | IC1 |  -> | IC2 |     
   |'''|''     ''''''      
   |    \_ | Ct_SV |       
   |                       
    \__ | ABt_TV |         

en suivant un triple schéma : extraction, opération, ventilation

Préliminaires, format des blocs de départ et notations
======================================================

Restriction sur le vecteur d'Etat de la cellule
...............................................
On introduit un vecteur Eta' (fortran EtaP) qui rassemble l'ensemble des composantes de Eta
connectées à un plug (SV); il y correspond la notion d'un bord (edge) de la cellule.
On note Eta' = U{SV} union des SV. Ces composantes ordonnées en ordre croissant
correspondent aux colonnes (resp. ligne) des matrices intermédiaires de l'extraction :
Ct' (resp. AB'). Le bank SV devra fournir cette information.

Restriction sur les interfaces (IC)
...................................
On introduit de même une IC' (ICP) qui rassemble les composantes des transferts connectés
à une SV ayant une influence sur Eta. Ceci exclue donc les T-Probes; pour les autres (TV),
on note IC' = U{TV} union des TV connectés à cette SV. Cette union ne comporte pas de
composantes répétées dans la mesure où on impose qu'un transfert plusieurs fois connecté
à une cellule ne puisse l'être que via des SV différentes. De manière abstraite, on aura
quand même des IC', mais de dimension nulle, qui rassemble des T-Probes - comme les
T-Probes sont des TV de dimension nulle.
Attention, une IC' est une liste de composantes de transferts dans l'ordre de leur liste
telle quelle est donnée dans les TV. A chaque item de cette liste correspond une colonne
de AB', matrice construite lors de l'extraction de ABt_TV

Restriction de la matrice D
...........................
On n'a pas encore traité du problème de l'extraction de D' à ajouter à la CtAB'

Remarque :  on envisage d'introduire une autre catégorie de transfert de type paramètre;
..........  ces derniers sont nécessaires pour les études de sensibilité paramétriques.
Dans la mesure ou ils n'interviennent pas directement dans les résultats de simulation,
on envisage de les ranger sous des faces spécifiues. Pour les paramètres de cellules, ils
sont à inclure dans les IC'; par contre, ils sont nons réactifs et n'ont pas lieu
d'apparaitre dans les lignes de la Ct'. Leur prise en compte dans la navette reste à définir.

******************************************************************************************
************* E x t r a c t i o n   ******************************************************
******************************************************************************************
-----------
 PARTIE Ct
-----------
 On part des blocs Ct_SV de cette SV/IC; dimension : dimEta_SV x U Tr{IC}.
pedago : une IC représente en effet un sous-ensemble des transferts connectés à cette SV;
ce sous-ensemble (face de la cellule) est structuré par des règles externes (IN,IX).

 On fabrique une Ct' pour la cellule, de dimension dimEta' x U Tr{IC}.
pedago : cette matrice représente donc l'influence directe des composantes de Eta' sur
l'ensemble des transferts connectés via l'ensemble des SV de la cellule (Influence des
bords sur l'extérieur).

Rq: il peut y avoir des composantes de Tr répétées, à travers x IC.

  <.SV1.>    <  .SV3.  >       Under Cl                                                   
      <.SV2.>                  < loop on : Fc                                             
 I<---<->--->----------I         <                                                        
 |///////              |IC1        loop on : IC                                           
 |.....................|    f1     <                                                      
 |    \\\\\\\          |IC2          acces a un bloc Ct_SV                                
 |    \\\\\\\          |             loop on : lignes de Ct_SV                            
 |---------------------|             <                                                    
 |           //////////|    f2        loop on : composantes de la ligne                  
 |           //////////|               < passage de # col(Eta_SV) a # col(Eta') de Ct'  
 I---------------------I                 copie/somme(*)
 <     Eta'            >               >
 ....... Ct' ...........             >
                                   >
 <-Eta'=Union des SV--->         >
        ordonnee               >
(*) copie avec somme après raz pour laisser aux utilisateurs la possibilité d'appliquer
un proceseur de transfert ajoutant des contributions en provenance de plusieurs cellules
dans des conditions ou ces cellules sont en realité la même : il faut bien alors sommer
les composantes de Ct :
   dPhi_j = Sum_i [ Ct(i,j)*dEta_SV_i ] = cas particliuer = Sum_i [ Ct(i,j) ]*dEta_SV

explicitation cf ./Extract_CtP

-----------
 PARTIE AB
-----------
 On part de banks ABt_TV de dimension dimEta x dimIC'
(avec IC' ==  U TV <-o-> IC comme on l'a définit ci-dessus).
pedago : [A]^-1 fait en effet réagir l'ensemble des composantes de Eta à l'environnement
définit par les seules composantes des tr connectés se présentant à la cellule dans des TV.
On n'a ainsi pas besoin de "voir" les T-Probes.

 On fabrique une AB' (non transposée, mais voir (*)), couplant toutes les composantes de la cellule
sensibles (Eta') à l'environnement (U TV); ce bloc est uniquement destiné au calcul
du produit Ct.A-1B. dimension = dim U IC' x dim Eta'

Rq: a priori, il ne devrait pas y avoir de composantes de Tr répétées, car un Tr
multiplement connecté à une cellule doit l'être via différents SV.
(et on a une seule SV par IC)

  .... A-1B'  ........        Under Cl                                                        
                              < loop on : Fc                                                  
       f1     f2   f3           <                                                             
  I<-------><----><-->I           loop on : IC                                                
  |.IC1.IC2.     .    |           <                                                           
  |TVTVTVTV.     .    |             acces a un bloc ABt_TV                                    
  |        .     .    |             loop on : lignes de ABt_TV                                
  |        .     .    |             <                                                         
  |        .     .    |  Eta'         loop on : composantes de la ligne                       
  |        .     .    |               < passage/extraction # col (Eta)
  |        .     .    |                  a # ligne (Eta') de AB'                                                
  |        .     .    |                 copie/somme (**)                                           
  |TV|  | ||     .    |               >                                                         
  I<-|--|-|><----><-->I             >                                                           
   IC1' IC2'                      >
dans le désordre des listes     >                                                             
des TV                        >                                                               

En ce qui concerne la descente de la navette, le calcul de AB.dFi est peu coûteux, et
on utilisera directement les blocs ABt_TV.

(*) rien n'empêche cependant, pour des raisons d'optimisation, de la prendre transposée,
car les bibliothèques de l'algèbre linéaires permettent tout aussi bien de la manipuler.
(**) somme à partir d'une raz car rien n'interdit à un utilisateur de répéter une
composante de Eta dans des SV différentes, voire dans la même SV.

explicitation : cf ./Extract_ABP

-----------
 PARTIE D
-----------

On pourrait partir de blocs D_TV rangés sous chaque IC de dimension dim{IC'}*dim{IC}.
L'extraction {de D', de même dimensions que CtAB') consisterait donc simplement à
botteler ces blocs.

Remarques générales sur l'extraction :
--------------------------------------
1/ tant pour D' que pour les autres, on pourra envisager différentes formes comtractées
de matrice, selon notre nouvelle philosophie :
traiter spécifiquement chaque cas particulier au mieux de ses intérêts.
2/ le nouveau bank ABt_TV est déjà contracté par rapport à l'actuel :
 non seulement la ABt_TV contiend les T-Probes, mais le vecteur transfert complet chaque
fois qu'il apparait dans une IC ! Pour un transfert radiatif de type PNE, la cellule
se satisfait d'une seule composante, alors qu'elle voyait les mille et comme on a une
cellule par composante de ce transfert (aux bords près) on stockait dimEta * 999*1000 zéros.
En ce qui concerne la D_TV, si seuls d'autres transferts sont interdépendants via cette
cellule, elle ne devrait pas être concernée par ce transfert millepattes. Celà reste à
préciser.

******************************************************************************************
************* P R O D U I T  *************************************************************
******************************************************************************************

Le résultat CtAB' = Ct' x AB', de dimension dim U{IC'} x dim U{IC}, est rangé
sous la cellule. Selon la proposition ci-dessous, ce bank pourrait comporter la
somme avec D'.
Exemple avec :
      SUBROUTINE SGEMM ( OA, OB, M, N, K, ALPHA, A, LDA,   B, LDB,  BETA, C, LDC )

                        'n'               Alpha*[A]   (*) [B]    (+) Beta*[C];
                        't'ou'c'          Alpha*[A]_t (*)
                            't'                       (*) [B]_t  (+) Beta*[C];

                       Op(A) : M rows as [C]     [A] real A(LDA,*)
                       Op(B)   N cols as [C]     [B] real B(LDB,*)  [C} real C(LDC,*)
                       Op(A)   K cols as OpB rows
      CALL SGEMM ( 'n','n', dim(IC), dim{IC'}, dimEta', -1., Ct',-, AB',-, 1., D',-)
mais vérifier rangement / convention

******************************************************************************************
************* V e n t i l a t i o n ******************************************************
******************************************************************************************

Le problème consiste à ranger par blocs la CtAB' d'une cellule dans les matrices de
la famille englobante. Ces matrices sont au nombre de 4, correspondant a 4 bk Fm-|MXT>,
dans l'ordre : (f_f), (f_x), (x_f), (x_x)
pedago :
Chacune est structurée par les interfaces (IN,IX). On va donc utiliser cette structure,
qui est également connue pour les CtAB', pour le rangement/ventilation;
à un bloc terminal <-o-> un bk MX, les MX d'une rangée chaînés sous un bk MXR (row) de MXT.
(c'est ce passage de la structure IC de la cellule a la structure IN,IX de la famille
qui définit la ventilation, et qui était décrite par les cross-reference tables CDXTB,
CDXTE... de la version actuelle)

Les interfaces sont numerotées dans la famille, mais il y a des blocs INixINj vides; et
parmi ceus qui sont présents, la cellule n'aura à en remplir qu'une partie : on a donc
besoin d'une numérotation des blocs à remplir vus de la cellules, et d'une table de
passage de cette numérotation à celle de la famille.
De plus, les colonnes de CtAB' sont structurées en IC', cad les composantes des Tr,
avec possible répétition, constituant les TV connectant la cellule à son environnement.
Il faut donc une table donnant la position des colonnes de IC' dans le bloc IN.IN d'arrivée.
(ou IN.IX etc, on explicite seulement le rangement dans la première matrice (f_f) de la Fm)


  Sous la famille :
! boucles dans la structure par blocs
  loop on : Blignes de CtAB'
  <
! identification du MXR cible (une Bligne <-o-> une IN)
     passage # IN{Cl} bloc de CtAB' a # IN{Fm}<-o->MXR           Table
     loop on Blocs de la Bligne
     <  id du MX bk cible                                        Table
! boucles sur les composantes scalaires
        loop on : lignes d'un bloc INj x INi
        < passage # ligne CtAB' a IN.IN                          Table
          loop on composantes
          < passage # col CtAB' a IN.IN                          Table
            copie/somme
          >
        >
      >
   >
            Fc 1        Fc2        Fc3               Fc1/Cl
          IC1' IC2'    IC3'  IC4'  IC5'...        IC1  |         IC2
         I - - - - - I - - - - - I - - - - X       |   |          |colonne m
         .IC1        ,           ,         I       |   |          |   .
    Fc1  .           ,           ,         I       |   |          |   .    t
         .           ,           ,         I       |   |          |   .    a
         .IC2        ,                     I       |   |          |   .    b
         I - - - - - I - - - - - I - - - - X     ( Table ICi -> INj ) .    l
         .IC3        ,           ,         I       |   | j=NBCR(i)|   .    e
         .           ,           ,         I       |   |          |   .
    Fc2  .IC4        ,    Cl2    ,         I       |   |          |   .    m
         .           ,           ,         I       |   |          |   .    i
         .           ,           ,         I      //   |          |   .    V
         I - - - - - I - - - - - I - - - - X     //|   V          |   .    n=IC(m)
         .IC5        ,           ,         I    // V Fci/Fm       V   .
    Fc3  .           ,           ,  Cl3    I   //IN1      IN2     IN3 .
         .           ,           ,         I  //       .        .     .
         .           ,           ,         I //        .        .     V      pour rappel seult :
         X X X X X X I X X X X X I X X X X X / - |- - -.- - - - . - - n - - -CDXTB(1)=1
                                           //  I       .        .           I     (2)=
                                          //   I       .        .           I     (3)=(LCL).Nb_St_Var
      IC1  ----------------------------- //>IN1I       .        .           I     (4)=nFc
                                        //     I . . . . . . . ... . . . . .I      +1 =(Fc).IC_Nb
                                       //      I       .        .           I      +2 =0
                                            IN2I       .        .           I      +3 =(Fc).Nb_Var
                                               I       .        .           I
                                               I . . . . . . . . . . . . . .I
                                               I       .        .           I  
      IC2 ------ 3 = NBCR(2) ------------- >IN3I       .        .           I  
          ligne k..........................>   l       .        .     X     I   <-- scalaire cible
                   table k->l=IR(k)            I       .        .           I          (n,l)
                                               -  - - - - - - - - - - - - - -  
                                                                <----------->
                                                                  ISIZE(kFa)

La même table sert à passer de la numérotation interne à la Cl (ICi->INj
à celle des INj IXj de la Fm, par ligne ou par colonnes blocs (table NBCR(i).
Par contre, les colonnes ne comportant pas les T-Probes, il faut deux tables
scalaires de passage : la première pour passer des TV-listes à sa colonne de IFup
                       la deuxième pour tenir compte des transferts non-ordonnés
                       par cette IFup (LeBug)

explicitation, cf < ./Vent_CtABP

!!!*****************************************************************************************
On a deux logiques de parcourt des blocs de CtAB' qui s'opposent : la plus naturelle vue du
rangement actuel des natrice privilégie le parcourt des MX d'une BRow (cf boucles ci-dessus),
alors que la dissymétrie ligne colonnes de CtAB' favorise le parcourt colonne par colonne.
Il serait peut-être bien d'expliciter la première voie, alors que l'on explicite la seconde.
*****************************************************************************************!!!

Remarque concernant la conservation de la matrice du problème couplant tous les transferts;
...........................................................................................
La notion de IX est complètement liée à l'arbre ZOOM. Elle rassemble en réalité des
sous-ensembles de IN qui seules constituent les blocs de la matrice "Somme des CtAB".
Dans le cas où on veut exporter cette matrice, ou l'utiliser complète pour d'autres méthodes
de résolution que l'algorithme emboité présent, il faudra prévoir une ventilation
complémentaire.

******************************************************************************************
************* A n a l y s e  / Objectifs initiaux ****************************************
******************************************************************************************

 Par rapport aux objectifs, on a éliminé les lignes de zéros de la ABt_TV stokée;
après l'extraction, le produit matriciel est standard (plus de pairing banks pour apparier les lignes
de l'un des opérandes aux colonnes de l'autre);
enfin, la ventilation fait appel à des tables fixes et échappe ainsi à la création
à chaque élimination des cross-reference tables, abandonnant ainsi leur encription salace,
voire dévergondée (banks CTX,CTXB,CTXE et idem r0ws).
Les tables de rangement permettent l'existence de Tr ou IC nons consécutifs sous
une IN (ou IX), et Le Bug n'a plus l'occasion de s'exprimer.

 Dans les traitements ci-dessus, on n'a pas envisagé les cas particuliers, comme les
matrices compactées (Ct_TV_SV et ABt_SV_TV); en ajoutant dans les boucles intérieures
l'exploration de la sous-structure IC/Cx/TV des Fc, on peut exploiter sans changement
de méthode ces cas particuliers, tenir compte des composantes bien rangées etc.
 Le stokage de la matrice D pouttait suivre les mêmes conventions : une D_TV de dim {IC'}x{IC}
sous chaque IC; il suffirait de botteler(*) pour obtenir D' de dim identique au résultat de CtAB';
on effecturait alors la somme D'+CtAB'dans la partie "opération".

********* PERSPECTIVES *************
Enfin (jyg dixit) ce schema d'Extraction a ce grand avantage de concretiser la structure IN.IX
d'un sous-arbre; la ventilation corespond alors a un changement d'espace vectoriel lie a l'inclusion
de ce sous-arbre dans un sous-arbre superieur : pourquoi donc ne pas le systematiser lors
de l'elimination des familles ?

(*) botteler (des radis) : en Anglais "to bunch"; "to bunch one's skirt" : retrousser sa jupe.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extract_ABP
*********************************************************************
****** Extraction de la matrice A-1B' a partir des ABt_TV ***********
*********************************************************************

Subroutine OABPX(LCL)

Under CL(LCL)
< icol = 0; NEtaP = # rows in AB' ; NbTrVarP = # cols AB'
  Loop on Fc
  <
    Loop on IC
    <  NbTVP = (LIC).Nb_Cx_Tr_Var;
       Get ABt_TV;
!    Loop on columns to extract from ABt_TV
       do j=1,NEtaP
       <  jcol = IEtaP(j);  table inverse de ISVP 
!      Copy of extracted columns
          do i=1,NbTVP  ou call Vadd ...
          < [ABP(icol+i,j) : + ABt_TV(jcol,i) ];   (*)
            Q(LABP+icol+i+(j-1)*NbTrVarP) =...
          >
       >
    >
    icol = icol + NbTVP;
  >
>
;

Tables :
IEtaP(j) donne la colonne de ABt_TV à extraire (inverse de ISVP)
NEtaP    (LCL)...
NbTrVarP mme que nsizctp =(LCL).Nb_Cx_Tr_VarP
  Cl
  |Fc>                                                      [AB']
  IC1 -> IC2 etc
                                                     .IC'1 . IC'2.IC'3 .   
  |-----------------------------|     ^              |     |     |     |  ^
  |                        X    |TV1  |              |     |     |     |  |
  |------------------------X----|     |             E|     |     |     |  |N
  |                        X    |TV2  |IC1'=U{TV}   t|     |     |     |  |E
  |   ABt_TV               X    |     |NbTVP     j->a|XXXXX|     |     |  |t
  |------------------------X----|     |         /   '|     |     |     |  |a
  |------------------------X----|TV3  |        /     |     |     |     |  |P
  <--------- Eta ----------X---->     v       /      |     |     |     |  |
                            \________________/       |     |     |     |  |
                               extraction            ._____|_____|_____|  v
                               IEtaP(j)               NbTVP1...2....3

(*)Ceci ne marche que si on a bien une "matrice" mortran [AB'].

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extract_ABP.bak
*********************************************************************
****** Extraction de la matrice A-1B' a partir des ABt_TV ***********
*********************************************************************

Subroutine OABPX(LCL)

Under CL(LCL)
< icol = 0; NEtaP = ; "# cols in AB' "
  Loop on Fc
  <
    Loop on IC
    <  NbTVP = (LIC)....;
       Get ABt_TV;
!    Loop on columnss ABt_TV
       do j=1,NEtaP
       <  jcol = IEtaP(j);  table inverse de ISVP 
!      Loop on extracted columns
          do i=1,NEtaP  ou call Vadd ...
          < [ABP(icol+i,j) : + ABt_TV(jcol,i) ]
          >
       >
    >
    icol = icol + NbTVP;
  >
>
;

Tables :
NbTrVarP mme que nsizctp
IEtaP(j) donne la colonne de ABt_TV a cumuler (inverse de ISVP)
NEtaP    (LCL)...

  IC1 -> IC2 etc
                                                     .IC'1 . IC'2.IC'3 .   
  |-----------------------------|     ^              |     |     |     |  ^
  |                             |TV1  |              |     |     |     |  |
  |-----------------------------|     |             E|     |     |     |  |N
  |                             |TV2  |IC1'=U{TV}   t|     |     |     |  |E
  |   ABt_TV                    |     |NbTVP     -> a|    A B '  |     |  |t
  |-----------------------------|     |         /   '|     |     |     |  |a
  |-----------------------------|TV3  |        /     |     |     |     |  |P
  <--------- Eta --------------->     v       /      |     |     |     |  |
                            \________________/       |     |     |     |  |
                               extraction            ._____|_____|_____|  v
                                                      NbTVP1...2....3

Ceci ne marche que si on a bien une "matrice" mortran ABP.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extract_CtP
*********************************************************************
****** Extraction de la matrice Ct' a partir des Ct_SV **************
*********************************************************************
Subroutine OCTPX(LCL)
Under Cl(LCL)
< jrow = 0; Raz CtP; nszctp= ...; (from Cl bank)
  Loop on Fc
  <
    Loop on IC
    < Get Ct_SV; get SV; qui fournit NSV et (LIC). table ISVP et Nb_Tr_Var (# Cx tr var)
!   Loop on rows of Ct_SV
      do j = 1,NbTrVar
      <
!     Loop on columns
        do i = 1,NSV
        < Icol = ISVP(i);
          [ CtP(icol,jrow+j) : + Ct_SV(i,j) ];
        >
      >
      jrow = jrow + nsizctp;
    >
  >
> 


Tables :
nsizctp from Cell bank = somme(Nbre de composantes de chaque IC'=UTV)
ISVP(i) from C-Plug bank

Note : en exercice, on pourra apeller une routine du commerce pour le
cumul, car il s'agit d'un simple bottelage avec cumul.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extract_CtP.bak
*********************************************************************
****** Extraction de la matrice Ct' a partir des Ct_SV **************
*********************************************************************
Subroutine OCTPX(LCL)
Under Cl(LCL)
< jrow = 0; Raz CtP; nszctp= ...; (from Cl bank)
  Loop on IC
  < Get Ct_SV; get SV qui fournit NSV; table ISVP et Nb_Tr_Var (Cx tr var #)
! Loop on a row of Ct_SV
    do j = 1,NbTrVar
    <
!   Loop on columns
      do i = 1,NSV
      < Icol = ISVP(i);
        [ P(i,j) : + t_SV(icol,jrow+j)
      >
    >
    jrow = jrow + nsizctp;
  >
> 


Tables :
nsizctp from Cell bank = somme(Nbre de composantes de chaque IC'=UTV)
ISVP(i) from C-Plug bank

Note : en exercice, on pourra apeller une routine du commerce pour le
cumul, car il s'agit d'un simple bottelage.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extraction_Operation_Ventilation
******************************************************************************************
************* E l i m i n a t i o n  d' u n e   C e l l u l e  ***************************
******************************************************************************************
 On part des blocs rangés sous les IC, et on fabrique la CtAB' permettant
d'effectuer l'élimination de la Cellule.
  .....                    
  | Cl  >                  
  ``|`|                    
    |  \_ | D |->| CtAB' |
    |                      
   .....                   
   | F  >                  
   ''|''                   
     |                     
   .......     ......      
   | IC1 |  -> | IC2 |     
   |'''|''     ''''''      
   |    \_ | Ct_SV |       
   |                       
    \__ | ABt_TV |         

en suivant un triple schéma : extraction, opération, ventilation


******************************************************************************************
************* E x t r a c t i o n   ******************************************************
******************************************************************************************

PARTIE Ct
 On part des blocs Ct_SV de cette SV/IC; dimension : dimEta_SV x U Tr{IC}.
 On fabrique une Ct' pour la cellule, de dimension dimEta' x U Tr{IC}.

Rq: il peut y avoir des composantes de Tr répétées, à travers x IC.

  <.SV1.>    <  .SV3.  >       Under Cl                                                   
      <.SV2.>                  < loop on : Fc                                             
 I<---<->--->----------I         <                                                        
 |///////              |IC1        loop on : IC                                           
 |.....................|    f1     <                                                      
 |    \\\\\\\          |IC2          acces a un bloc Ct_SV                                
 |    \\\\\\\          |             loop on : lignes de Ct_SV                            
 |---------------------|             <                                                    
 |           //////////|    f2        loop on : composantes de la ligne                  
 |           //////////|               < passage de # col(Eta_SV) a # col(Eta') de Ct'  
 I---------------------I                 copie                                            
 <     Eta'            >               >                                                  
 ....... Ct' ...........             >                                                    
                                   >                                                      
 <-Eta'=Union des SV--->         >                                                        
                               >                                                          

PARTIE AB
 On part de banks ABt_TV de dimension dimEta x dimIC'
avec IC' ==  U TV <-o-> IC;
 On fabrique une AB' (non transposée), couplant toutes les composantes de la cellule
sensibles (Eta') à l'environnement (U TV); ce bloc est uniquement destiné au calcul
du produit Ct.A-1B. dimension = dim U IC' x dim Eta'

Rq: a priori, il ne devrait pas y avoir de composantes de Tr répétées, car un Tr
multiplement connecté à une cellule doit l'être via différents SV.
(et on a une seule SV par IC)

  .... A-1B'  ........        Under Cl                                                        
                              < loop on : Fc                                                  
       f1     f2   f3           <                                                             
  I<-------><----><-->I           loop on : IC                                                
  |.IC1.IC2.     .    |           <                                                           
  |TVTVTVTV.     .    |             acces a un bloc ABt_TV                                    
  |        .     .    |             loop on : lignes de ABt_TV                                
  |        .     .    |             <                                                         
  |        .     .    |  Eta'         loop on : composantes de la ligne                       
  |        .     .    |               < passage/extraction # col (Eta)
  |        .     .    |                  a # ligne (Eta') de AB'                                                
  |        .     .    |                 copie                                                       
  |TV|  | ||     .    |               >                                                         
  I<-|--|-|><----><-->I             >                                                           
   IC1' IC2'                      >
                                >                                                             
                              >                                                               

En ce qui concerne la descente de la navette, le calcul de AB.dFi est peu couteux, et
on utilise directement les blocs ABt_TV.

******************************************************************************************
************* P R O D U I T  *************************************************************
******************************************************************************************

Le résultat CtAB' = Ct' x AB', de dimension dim U{IC'} x dim U{IC}, est rangé
sous la cellule. Selon la proposition ci-dessous, ce bank pourrait comporter la
somme avec D'.
Exemple avec :
      SUBROUTINE SGEMM ( OA, OB, M, N, K, ALPHA, A, LDA,   B, LDB,  BETA, C, LDC )

                        'n'               Alpha*[A]   (*) [B]    (+) Beta*[C];
                        't'ou'c'          Alpha*[A]_t (*)
                            't'                       (*) [B]_t  (+) Beta*[C];

                       Op(A) : M rows as [C]     [A] real A(LDA,*)
                       Op(B)   N cols as [C]     [B] real B(LDB,*)  [C} real C(LDC,*)
                       Op(A)   K cols as OpB rows
      CALL SGEMM ( 'n','n', dim(IC), dim{IC'}, dimEta', -1., Ct',-, AB',-, 1., D',-)
mais verifier rangement / convention
******************************************************************************************
************* V e n t i l a t i o n ******************************************************
******************************************************************************************

Le problème consiste à ranger chaque CtAB' d'une cellule dans les matrices de la famille
englobante. Ces matrices sont au nombre de 4, correspondant a 4 bk Fm-|MT>, dans l'ordre :
(f_f), (f_x), (x_f), (x_x)
Chacune est structurée par les interfaces (IN,IX). On va donc utiliser cette structure,
qui est également connue pour les CtAB', pour le rangement/ventilation;
 un bloc => un bk MX, les MX d'une rangée chaînés sous un bk MXR de MXT.

Les interfaces sont numerotées dans la famille, mais il y a des blocs INixINj vides; on
a donc besoin d'une numérotation des blocs non vides vus de la cellules, et d'une table de
passage de cette numérotation à celle de la famille. De plus, les colonnes de CtAB'
sont structurées en IC', cad les composantes des Tr, avec possible répétition, constituant
les TV connectant la cellule à son environnement. Il faut donc une table donnant la
position des colonnes de IC' dans le bloc IN.IN d'arrivée.
(ou IN.IX etc, on explicite seulement le rangement dans la première matrice (f_f) de la Fm)

  Sous la famille, à l'élimination d'une cellule :
! boucles dans la structure par blocs
  loop on : Blignes de CtAB'
  <
! identification du MXR cible (une Bligne <-o-> une IN)
     passage # IN{Cl} bloc de CtAB' a # IN{Fm}<-o->MXR           Table
     loop on Blocs de la Bligne
     <  id du MX bk cible                                        Table
! boucles sur les composantes scalaires
        loop on : lignes d'un bloc INj x INi
        < passage # ligne CtAB' a IN.IN                          Table
          loop on composantes
          < passage # col CtAB' a IN.IN                          Table
            copie
          >
        >
      >
   >
            Fc 1        Fc2        Fc3               Fc1/Cl
          IC1' IC2'    IC3'  IC4'  IC5'...        IC1  |         IC2
         I - - - - - I - - - - - I - - - - X       |   |          |colonne m
         .IC1        ,           ,         I       |   |          |   .
    Fc1  .           ,           ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
         .IC2        ,                     I       |   |          |   .
         I - - - - - I - - - - - I - - - - X     ( Table ICi -> INj ) .
         .IC3        ,           ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
    Fc2  .IC4        ,    Cl2    ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
         .           ,           ,         I      //   |          |   .
         I - - - - - I - - - - - I - - - - X     //|   V          |   .
         .IC5        ,           ,         I    // V Fci/Fm       V   .
    Fc3  .           ,           ,  Cl3    I   //IN1      IN2     IN3 .
         .           ,           ,         I  //       .        .     .
         .           ,           ,         I //        .        .     V    2 BRows : [ff] et [fx]
         X X X X X X I X X X X X I X X X X X / - |- - -.- - - - . - - - - - -CDXTB(1)=1
                                           //  I       .        .     n     I     (2)=
                                          //   I       .        .           I     (3)=(LCL).Nb_St_Var
      IC1  ----------------------------- //>IN1I       .        .           I     (4)=nFc
                                        //     I . . . . . . . ... . . . . .I      +1 =(Fc).IC_Nb
                                       //      I       .        .           I      +2 =0
                                            IN2I       .        .           I      +3 =(Fc).Nb_Var
                                               I       .        .           I
                                               I . . . . . . . . . . . . . .I
                                               I       .        .           I
      IC2 -------------------------------- >IN3I       .        .           I
          ligne k..........................>l  I       .        .           I
                                               I       .        .           I
                                               -  - - - - - - - - - - - - - - 

La même table sert à passer de la numérotation interne à la Cl (ICi)
à celle des INj IXj de la Fm, par ligne ou par colonnes blocs.
Par contre, les colonnes ne comportant pas les T-Probes, il faut deux tables
scalaires de passage.

******************************************************************************************
************* A n a l y s e  *************************************************************
******************************************************************************************
 Par rapport aux objectifs, on a éliminé les lignes de zéros de la ABt_TV stokée;
après l'extraction, le produit matriciel est standard (plus de pairing banks);
enfin, la ventilation fait appel à des tables fixes et échappe ainsi à la création
à chaque calcul des cross reference tables, abandonnant ainsi leur encription salace,
voire dévergondée (banks CTX,CTXB,CTXE).
 Les tables de rangement permettent l'existence de Tr ou IC nons consécutifs sous
une IN (ou IX), et Le Bug n'a plus l'occasion de s'exprimer.
 Dans les traitements ci-dessus, on n'a pas envisagé les cas particuliers, comme les
matrices compactées (Ct_TV_SV et ABt_SV_TV); en ajoutant dans les boucles intérieures
l'exploration de la sous-structure IC/Cx/TV des IN, on peut exploiter sans changement
de méthode ces cas particuliers, tenir compte des composantes bien rangées etc.
 Le stokage de la matrice D pouttait suivre les memes conventions : une D_TV de dim {IC'}x{IC}
sous chaque IC; il suffirait de botteler(*) pour obtenir D' de dim identique au résultat de CtAB';
on effecturait alors la somme D'+CtAB'dans la partie "operation".

(*) botteler (des radis) : en Anglais "to bunch"; "to bunch one's skirt" : retrousser sa jupe.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Extraction_Operation_Ventilation.bak
******************************************************************************************
************* E l i m i n a t i o n  d' u n e   C e l l u l e  ***************************
******************************************************************************************
 On part des blocs rangés sous les IC, et on fabrique la CtAB' permettant
d'effectuer l'élimination de la Cellule.
  .....                    
  | Cl  >                  
  ``|`|                    
    |  \_ | D |->| CtAB' |
    |                      
   .....                   
   | F  >                  
   ''|''                   
     |                     
   .......     ......      
   | IC1 |  -> | IC2 |     
   |'''|''     ''''''      
   |    \_ | Ct_SV |       
   |                       
    \__ | ABt_TV |         

en suivant un triple schéma : extraction, opération, ventilation


******************************************************************************************
************* E x t r a c t i o n   ******************************************************
******************************************************************************************

PARTIE Ct
 On part des blocs Ct_SV de cette SV/IC; dimension : dimEta_SV x U Tr{IC}.
 On fabrique une Ct' pour la cellule, de dimension dimEta' x U Tr{IC}.

Rq: il peut y avoir des composantes de Tr répétées, à travers x IC.

  <.SV1.>    <  .SV3.  >       Under Cl                                                   
      <.SV2.>                  < loop on : Fc                                             
 I<---<->--->----------I         <                                                        
 |///////              |IC1        loop on : IC                                           
 |.....................|    f1     <                                                      
 |    \\\\\\\          |IC2          acces a un bloc Ct_SV                                
 |    \\\\\\\          |             loop on : lignes de Ct_SV                            
 |---------------------|             <                                                    
 |           //////////|    f2        loop on : composantes de la ligne                  
 |           //////////|               < passage de # col(Eta_SV) a # col(Eta') de Ct'  
 I---------------------I                 copie                                            
 <     Eta'            >               >                                                  
 ....... Ct' ...........             >                                                    
                                   >                                                      
 <-Eta'=Union des SV--->         >                                                        
                               >                                                          

PARTIE AB
 On part de banks ABt_TV de dimension dimEta x dimIC'
avec IC' ==  U TV <-o-> IC;
 On fabrique une AB' (non transposée), couplant toutes les composantes de la cellule
sensibles (Eta') à l'environnement (U TV); ce bloc est uniquement destiné au calcul
du produit Ct.A-1B. dimension = dim U IC' x dim Eta'

Rq: a priori, il ne devrait pas y avoir de composantes de Tr répétées, car un Tr
multiplement connecté à une cellule doit l'être via différents SV.
(et on a une seule SV par IC)

  .... A-1B'  ........        Under Cl                                                        
                              < loop on : Fc                                                  
       f1     f2   f3           <                                                             
  I<-------><----><-->I           loop on : IC                                                
  |.IC1.IC2.     .    |           <                                                           
  |TVTVTVTV.     .    |             acces a un bloc ABt_TV                                    
  |        .     .    |             loop on : lignes de ABt_TV                                
  |        .     .    |             <                                                         
  |        .     .    |  Eta'         loop on : composantes de la ligne                       
  |        .     .    |               < passage/extraction # col (Eta)
  |        .     .    |                  a # ligne (Eta') de AB'                                                
  |        .     .    |                 copie                                                       
  |TV|  | ||     .    |               >                                                         
  I<-|--|-|><----><-->I             >                                                           
   IC1' IC2'                      >
                                >                                                             
                              >                                                               

En ce qui concerne la descente de la navette, le calcul de AB.dFi est peu couteux, et
on utilise directement les blocs ABt_TV.

******************************************************************************************
************* P R O D U I T  *************************************************************
******************************************************************************************

Le résultat CtAB' = Ct' x AB', de dimension dim U{IC'} x dim U{IC}, est rangé
sous la cellule. Selon la proposition ci-dessous, ce bank pourrait comporter la
somme avec D'.

******************************************************************************************
************* V e n t i l a t i o n ******************************************************
******************************************************************************************

Le problème consiste à ranger chaque CtAB' d'une cellule dans les matrices de la famille
englobante. Ces matrices sont au nombre de 4, correspondant a 4 bk Fm-|MT>, dans l'ordre :
(f_f), (f_x), (x_f), (x_x)
Chacune est structurée par les interfaces (IN,IX). On va donc utiliser cette structure,
qui est également connue pour les CtAB', pour le rangement/ventilation;
 un bloc => un bk MX, les MX d'une rangée chaînés sous un bk MXR de MXT.

Les interfaces sont numerotées dans la famille, mais il y a des blocs INixINj vides; on
a donc besoin d'une numérotation des blocs non vides vus de la cellules, et d'une table de
passage de cette numérotation à celle de la famille. De plus, les colonnes de CtAB'
sont structurées en IC', cad les composantes des Tr, avec possible répétition, constituant
les TV connectant la cellule à son environnement. Il faut donc une table donnant la
position des colonnes de IC' dans le bloc IN.IN d'arrivée.
(ou IN.IX etc, on explicite seulement le rangement dans la première matrice (f_f) de la Fm)

  Sous la famille, à l'élimination d'une cellule :
! boucles dans la structure par blocs
  loop on : Blignes de CtAB'
  <
! identification du MXR cible (une Bligne <-o-> une IN)
     passage # IN{Cl} bloc de CtAB' a # IN{Fm}<-o->MXR           Table
     loop on Blocs de la Bligne
     <  id du MX bk cible                                        Table
! boucles sur les composantes scalaires
        loop on : lignes d'un bloc INj x INi
        < passage # ligne CtAB' a IN.IN                          Table
          loop on composantes
          < passage # col CtAB' a IN.IN                          Table
            copie
          >
        >
      >
   >
            Fc 1        Fc2        Fc3               Fc1/Cl
          IC1' IC2'    IC3'  IC4'  IC5'...        IC1  |         IC2
         I - - - - - I - - - - - I - - - - X       |   |          |colonne m
         .IC1        ,           ,         I       |   |          |   .
    Fc1  .           ,           ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
         .IC2        ,                     I       |   |          |   .
         I - - - - - I - - - - - I - - - - X     ( Table ICi -> INj ) .
         .IC3        ,           ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
    Fc2  .IC4        ,    Cl2    ,         I       |   |          |   .
         .           ,           ,         I       |   |          |   .
         .           ,           ,         I      //   |          |   .
         I - - - - - I - - - - - I - - - - X     //|   V          |   .
         .IC5        ,           ,         I    // V Fci/Fm       V   .
    Fc3  .           ,           ,  Cl3    I   //IN1      IN2     IN3 .
         .           ,           ,         I  //       .        .     .
         .           ,           ,         I //        .        .     V    2 BRows : [ff] et [fx]
         X X X X X X I X X X X X I X X X X X / - |- - -.- - - - . - - - - - -CDXTB(1)=1
                                           //  I       .        .     n     I     (2)=
                                          //   I       .        .           I     (3)=(LCL).Nb_St_Var
      IC1  ----------------------------- //>IN1I       .        .           I     (4)=nFc
                                        //     I . . . . . . . ... . . . . .I      +1 =(Fc).IC_Nb
                                       //      I       .        .           I      +2 =0
                                            IN2I       .        .           I      +3 =(Fc).Nb_Var
                                               I       .        .           I
                                               I . . . . . . . . . . . . . .I
                                               I       .        .           I
      IC2 -------------------------------- >IN3I       .        .           I
          ligne k..........................>l  I       .        .           I
                                               I       .        .           I
                                               -  - - - - - - - - - - - - - - 

La même table sert à passer de la numérotation interne à la Cl (ICi)
à celle des INj IXj de la Fm, par ligne ou par colonnes blocs.
Par contre, les colonnes ne comportant pas les T-Probes, il faut deux tables
scalaires de passage.

******************************************************************************************
************* A n a l y s e  *************************************************************
******************************************************************************************
 Par rapport aux objectifs, on a éliminé les lignes de zéros de la ABt_TV stokée;
après l'extraction, le produit matriciel est standard (plus de pairing banks);
enfin, la ventilation fait appel à des tables fixes et échappe ainsi à la création
à chaque calcul des cross reference tables, abandonnant ainsi leur encription salace,
voire dévergondée (banks CTX,CTXB,CTXE).
 Les tables de rangement permettent l'existence de Tr ou IC nons consécutifs sous
une IN (ou IX), et Le Bug n'a plus l'occasion de s'exprimer.
 Dans les traitements ci-dessus, on n'a pas envisagé les cas particuliers, comme les
matrices compactées (Ct_TV_SV et ABt_SV_TV); en ajoutant dans les boucles intérieures
l'exploration de la sous-structure IC/Cx/TV des IN, on peut exploiter sans changement
de méthode ces cas particuliers, tenir compte des composantes bien rangées etc.
 Le stokage de la matrice D pouttait suivre les memes conventions : une D_TV de dim {IC'}x{IC}
sous chaque IC; il suffirait de botteler(*) pour obtenir D' de dim identique au résultat de CtAB';
on effecturait alors la somme D'+CtAB'dans la partie "operation".

(*) botteler (des radis) : en Anglais "to bunch"; "to bunch one's skirt" : retrousser sa jupe.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/SOELIM
**********************************************************************************
****** Brouillon de la routine d'extraction/preparation de la grande CtAB' *******
****************************(cas d'etude en // aux calculs par IC)****************


       [A].[A-1]    -> f -> IC -> [ABt_TV]t     0 (hors T-probes)
    I                    --    ----    ------   .  -----
      I                  ||    |  |    |    |   .  |   |
        I                ||    |  |    |    |   .  |   |
          I              ||    |  |    |    |   .  |   |
            I            ||    |  |    |    |   .  |   |
              I          ||    |  |    |    |   .  |   |
                I        ||    |  |    |    |   .  |   |
                  I      --    ----    ------   .  -----  =>U(IC restreintes a UTV)
 .
 v   SV
 f  -xx------------
 .  |xx-----------|              lift Ct_UIC et ABt';
 v     SV'
    --xxxxx--------              Under CL(LCL)
IC  | xxxxx       |              <  loop f/IC
    |-xxxxx-------|                 < grasp Ct_SV et rangement Ct_UIC;
 .                                    Under SV
 v        SV"                         < loop Cx/TV
    -----x-xx------                     < grasp ABt_TV et rangement ABt';
Ct_TV    x xx     |                     >
    |    x xx     |                   >
    |----x-xx-----|                 >
                                  >;
    ----x----------
    |---x---------|               Information dim et banks :
                                  --------------------------
    -----x---------                dim commune : USV = dim edge de A    manque
    |    x        |                    Ct_UIC  : dim (UIC) ->(CL).Nb_Cx_Tr_Var
    |----x--------|                    ABt'    : dim (UTV)              manque
                                       
      <-USV->                      


            ce que l'on a :        (IC).Nb_Tr_Var (IC).Nb_Cx_St_Var
                                   (SV).Nb_St_Var
                                   (IC).LTr_in_Fc
                                   (CX).LFi_in_IF (CX).Nb_Var
                                                  (IC).Cg_SV_Nb
                                                  (IC).Nb_Tr'       new
                                                  (IC).Tr_List(#)   new

 Remarque : pour contrer l'effet peigne_TR, il faut ne conserver que UTV dans la ABt'
=====================================================================================
========= Programmation symbolique : cas des grandes matrices =======================
=====================================================================================
               Under CL(LCL)
               < ! first loop to grab parts of ABt' = restreinte a ses composantes de edge
                 ! info : dim USV, liste ordonnee des composantes
                 ! de meme, les UTV (hors T-Probes) dans l'ordre des IC - partition avec repetition des Phi_Tr
                 loop f/IC
                 < get SV(IC); loop CX/TV
                               < ABt'_TV(i,j) = . + ABt_TV(k,l)
                                 ou' j = [f]_0 + [IC]_0 + UTV_list(l), ou l= Phi #
                                     i = USV_list(k) k = Eta #
! ca veut dire que IC fournirait UTV_list(#), la CL USV_list(#)

! on peut dans la meme boucle recuperer les bouts de la Ct'
                                 Ct'(i,j) = . + Ct_TV(k,l)
                                     i = [f]_0 + [IC]_0 + k, ou k= Phi #
                                     j = USV_list(l) l = Eta #
                               >
                 >
!  produit Ct'AB' range sous la CL
                 lift Ct'AB'((CL).Nc_Cx_Tr_Var,U(IC<=UTV)
!  Ventilation :
                 il faut concatener les IC des memes Tr, et garder l'info IC_list(Tr) Tr_list(UTV) !

=====================================================================================
========= Programmation symbolique : cas des bouts et calcul par IC =================
=====================================================================================
                sous chaque IC, on extrairait ABt_SV_IC'(cad dans la UTV_list)
                une boucle sur SV pour Ct_SV*ABt_SV_IC' donne CTAB_IC_IC' : non, il reste les Ct_IC1*ABt_SV2_IC'i
           => dans tous les cas, il faut construire la grande ABt'[USV,U(IC=UTV)]
              par contre, on peut sous chaque IC calculer le produit [UCt_SV]*ABt' => Bligne [ICi,UIC']
              et ventiler dans la CtAB'

**************************************************************************************
differences d'info / avant :
      ABt_TV = dim Eta *  dim U[f/IC/Cx/Fi]]

      Ct_SV  = dim Phi *  dim C-PLug


<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/SOELIM.bak
**********************************************************************************
****** Brouillon de la routine d'extraction/preparation de la grande CtAB' *******
****************************(cas d'etude en // aux calculs par IC)****************


       [A].[A-1]    -> f -> IC -> [ABt_TV]t     0 (hors T-probes)
    I                    --    ----    ------   .  -----
      I                  ||    |  |    |    |   .  |   |
        I                ||    |  |    |    |   .  |   |
          I              ||    |  |    |    |   .  |   |
            I            ||    |  |    |    |   .  |   |
              I          ||    |  |    |    |   .  |   |
                I        ||    |  |    |    |   .  |   |
                  I      --    ----    ------   .  -----  =>U(IC restreintes a UTV)
 .
 v   SV
 f  -xx------------
 .  |xx-----------|              lift Ct_UIC et ABt';
 v     SV'
    --xxxxx--------              Under CL(LCL)
IC  | xxxxx       |              <  loop f/IC
    |-xxxxx-------|                 < grasp Ct_SV et rangement Ct_UIC;
 .                                    Under SV
 v        SV"                         < loop Cx/TV
    -----x-xx------                     < grasp ABt_TV et rangement ABt';
Ct_TV    x xx     |                     >
    |    x xx     |                   >
    |----x-xx-----|                 >
                                  >;
    ----x----------
    |---x---------|               Information dim et banks :
                                  --------------------------
    -----x---------                dim commune : USV = dim edge de A    manque
    |    x        |                    Ct_UIC  : dim (UIC) ->(CL).Nb_Cx_Tr_Var
    |----x--------|                    ABt'    : dim (UTV)              manque
                                       
      <-USV->                      


            ce que l'on a :        (IC).Nb_Tr_Var (IC).Nb_Cx_St_Var
                                   (SV).Nb_St_Var
                                   (IC).LTr_in_Fc
                                   (CX).LFi_in_IF (CX).Nb_Var
                                                  (IC).Cg_SV_Nb
                                                  (IC).Nb_Tr'       new
                                                  (IC).Tr_List(#)   new

 Remarque : pour contrer l'effet peigne_TR, il faut ne conserver que UTV dans la ABt'
=====================================================================================
========= Programmation symbolique : cas des grandes matrices =======================
=====================================================================================
               Under CL(LCL)
               < ! first loop to grab parts of ABt' = restreinte a ses composantes de edge
                 ! info : dim USV, liste ordonnee des composantes
                 ! de meme, les UTV (hors T-Probes) dans l'ordre des IC - partition avec repetition des Phi_Tr
                 loop f/IC
                 < get SV(IC); loop CX/TV
                               < ABt'_TV(i,j) = . + ABt_TV(k,l)
                                 ou' j = [f]_0 + [IC]_0 + UTV_list(l), ou l= Phi #
                                     i = USV_list(k) k = Eta #
! ca veut dire que IC fournirait UTV_list(#), la CL USV_list(#)

! on peut dans la meme boucle recuperer les bouts de la Ct'
                                 Ct'(i,j) = . + Ct_TV(k,l)
                                     i = [f]_0 + [IC]_0 + k, ou k= Phi #
                                     j = USV_list(l) l = Eta #
                               >
                 >
!  produit Ct'AB' range sous la CL
                 lift Ct'AB'((CL).Nc_Cx_Tr_Var,U(IC<=UTV)
!  Ventilation :
                 il faut concatener les IC des memes Tr, et garder l'info IC_list(Tr) Tr_list(UTV) !

=====================================================================================
========= Programmation symbolique : cas des bouts et calcul par IC =================
=====================================================================================
                sous chaque IC, on extrairait ABt_SV_IC'(cad dans la UTV_list)
                une boucle sur SV pour Ct_SV*ABt_SV_IC' donne CTAB_IC_IC' : non, il reste les Ct_IC1*ABt_SV2_IC'i
           => dans tous les cas, il faut construire la grande ABt'[USV,U(IC=UTV)]
              par contre, on peut sous chaque IC calculer le produit [UCt_SV]*ABt' => Bligne [ICi,UIC']
              et ventiler dans la CtAB'





<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Taches_a_repartir
*************************************************************************
******* Des Taches a se repartir - Phase 1 : reglages et essais prelim **
*************************************************************************


Les nouveaux banks du ZBM et leurs macros (ABt_TV, Ct_SV et D_TV)

Les tables : OFRAME/ONUMCL et leur situation

Extraction :
OABPX               a expliciter/optimiser
OCTPX                     ''
ODPX                a faire

Opération :
OCTABP              bibliotheque a choisir explicitement

MOVUP new :
avec structure des variantes de la résolution
(relaxation emboitée ou non, décomposition LU, gradients conjugués
et autres bonbons).   a etudier

Ventilation :
  explicitation exaustives des solutions 1.a 1.b et 2 ...

Les vecteurs CtA-1Gamma etc               a faire

DUMP routines                             a faire
PrClTrCx, ODchoses ...

Avec en tête la comptabilité vers les développements futurs des
sensibilités en avant systématiques et du modèle adjoint.

Traitement des Pi_Transferts : gestion jusqu'a ViZu des transferts parametres

Et peut-être moins important : possible analogie avec traitement des familles.

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Taches_a_repartir.bak
*************************************************************************
******* Des Taches a se repartir - Phase 1 : reglages et essais prelim **
*************************************************************************


Les nouveaux banks du ZBM et leurs macros (ABt_TV, Ct_SV et D_TV)

Les tables : OFRAME/ONUMCL et leur situation

Extraction :
OABPX
OCTPX
ODPX

Opération :
OCTABP

MOVUP new :
avec structure des variantes de la résolution
(relaxation emboitée ou non, décomposition LU, gradients conjugués
et autres bonbons).

Ventilation :
  explicitation exaustives des solutions 1.a 1.b et 2 ...

Les vecteurs CtA-1Gamma etc

DUMP routines
PrClTrCx, ODchoses ...

Avec en tête la comptabilité vers les développements futurs des
sensibilités en avant systématiques et du modèle adjoint.

Et peut-être moins important : possible analogie avec traitement des familles.
<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Vent_CtABP
******************************************************************************
********* Ventilation d'une CtAB' construite sous une Cellule ****************
******************************************************************************

Solution dans le cas ou on décide d'un "mur" (jyg dixit) à franchir entre
la structure ZOOM (l'arbre des Fm-IN-IX et Cl) et l'algèbre matricielle.
En ce sens, on conserve donc le principe du développement du Mx_Package actuel.
Il n'est pas interdit de traiter l'exercice en exploitant au contraire l'arbre
ZOOM, et on se propose de répartir ce genre d'exercice entre les membres de
la secte et de confronter les résultats à la prochaine réunion.

donc : SOLUTION 1
      ************
Principe : on suppose construit un ensemble de tables résumant la structure
d'emboîtement de la navette visible de la cellule. Cette option se justifie par
un souci d'optimisation de la ventilation - appellée à chaque pas de temps, et
dans la mesure où cette opération ne permet pas la parallèlisation, puisqu'il
y a cumul dans les blocs d'arrivée, des transferts pouvant être couplés via
différentes cellules.

Choix des boucles : on a des sous-colonnes correspondant à des transferts, pour
lesquelles on peut grouper une copie/accumulation; on parcourt donc la matrice
source colonne par colonne, regroupées en IC' sous des Fc. Chaque face de la
cellule est la trace d'une interface supérieure (IFup==IN ou IX) de la famille.
La conséquence du balayage est que pour chaque colonne de CtAB', on passe d'une
matrice MXT non pas à sa voisine(next) mais à la suivante(next(next)) :
 (passage de [f] a [xf] ou de [fx] a [xx], d'où une solution avec ce balayage =

**************
 SOLUTION 1.a
**************

! Loop following Cell's Faces (Horizontal)
  do IFa = 1, NFa
  < 
    IFup = NBCR()IFa);                    "get Upper Fm-interface"
    if (nszc(IFa).eq.0) next;             " skip T-Probes IC"
!  Loop on columns of matrix              "columns of one IC'"
    do i=izero,izero + nszc(IFa)
    <
      jzero = 1;
!    Loop on Cell's faces (Vertical)
      do JFa = 1, NFa
      < JFup = NBCR(JFa);
!     Select one from the 4 Fm matrices, then BRow and target MX bank
        LMXT = LTBMT(kmt)    ;
        LMXR = LQ(LMXT-2-JFa);
        LMX  = LQ(LMXR-2-IFa);
        IPCtABP =    ;                    "0_pointer to scalar sub column of CtAB'"
        IPCMX = LMX + IC(i);              "                    sub row of target  "
!      Inner loop on scalar of sub-column of CtAB'
        if IR(j).gt.0
        < do j = jzero, jzero + nszr(JFa)
          <
            [Q(IPCMX + ISIZE(IFa)*(IR(j)-1)) : + Q(IPCtABP + i + NTVP*(j-1)) ];
          >
        >else                             "cas d'une serie de composantes consecutives"
        < 
          CALL VADD IC to MX 
        >
        jzero = jzero + nszr(JFa);
      >
    >
    izero = izero + nszc(IFa);
  >
;

Les Tables
==========                                                            correspondance schema :
de la cellule :
NFF2IX  : first Cl face connected to an IX of Fm
          (pour définir la MXT cible)
NBCR(kFa) : numéro du bloc (C ou R) IFup cible (dans la # de la Fm)     IC'i->INj et ICi->INj
NSZC(iFa) : largeur des IC' (nulle pour les bottes de T-Probes)         dim IC'
NSZR(jFa) : hauteur des IC                                              dim IC

de chaque IC :
IC(i)     : # de la colonne cible dans l'interface IFup (Horizontale)    m->n
IR(j)     : # de la ligne cible    . . .                (Verticale)      k->l

Il faut par ailleurs avoir localement la structure des banks MXT,MXR,MX
ainsi que les dimensions :
LTMXT(4)  : adresses des 4 MXT banks
ISIZE(kFa) : nbre de colonnes du MX cible <-o-> dim Fc(ou IFup)

<-----/|\------>  ./Help/Programmers/Ker/Mx_Package/Pro_Gemini/Vent_CtABP.bak
******************************************************************************
********* Ventilation d'une CtAB' construite sous une Cellule ****************
******************************************************************************

Solution dans le cas ou on décide d'un "mur" (jyg dixit) à franchir entre
la structure ZOOM (l'arbre des Fm-IN-IX et Cl) et l'algèbre matricielle.
En ce sens, on conserve donc le principe du développement du Mx_Package actuel.
Il n'est pas interdit de traiter l'exercice en exploitant au contraire l'arbre
ZOOM, et on se propose de répartir ce genre d'exercice entre les membres de
la secte et de confronter les résultats à la prochaine réunion.

donc : SOLUTION 1
      ************
Principe : on suppose construit un ensemble de tables résumant la structure
d'emboîtement de la navette visible de la cellule. Cette option se justifie par
un souci d'optimisation de la ventilation - appellée à chaque pas de temps, et
dans la mesure où cette opération ne permet pas la parallèlisation, puisqu'il
y a cumul dans les blocs d'arrivée, des transferts pouvant être couplés via
différentes cellules.

Choix des boucles : on a des sous-colonnes correspondant à des transferts, pour
lesquelles on peut grouper une copie/accumulation; on parcourt donc la matrice
source colonne par colonne, regroupées en IC' sous des Fc. Chaque face de la
cellule est la trace d'une interface supérieure (IFup==IN ou IX) de la famille.
La conséquence du balayage est que pour chaque colonne de CtAB', on passe d'une
matrice MXT non pas à sa voisine(next) mais à la suivante(next(next)) :
 (passage de [f] a [xf] ou de [fx] a [xx], d'où une solution avec ce balayage =

**************
 SOLUTION 1.a
**************

! Loop following Cell's Faces (Horizontal)
  do IFa = 1, NFa
  < 
    IFup = NBCR()IFa);                    "get Upper Fm-interface"
    if (nszc(IFa).eq.0) next;             " skip T-Probes IC"
!  Loop on columns of matrix              "columns of one IC'"
    do i=izero,izero + nszc(IFa)
    <
      jzero = 1;
!    Loop on Cell's faces (Vertical)
      do JFa = 1, NFa
      < JFup = NBCR(JFa);
!     Select one from the 4 Fm matrices, then BRow and target MX bank
        LMXT = LTBMT(kmt)    ;
        LMXR = LQ(LMXT-2-JFa);
        LMX  = LQ(LMXR-2-IFa);
        IPCtABP =    ;                    "0_pointer to scalar sub column of CtAB'"
        IPCMX = LMX + IC(i);              "                    sub row of target  "
!      Inner loop on scalar of sub-column of CtAB'
        if IR(j).gt.0
        < do j = jzero, jzero + nszr(JFa)
          <
            [Q(IPCMX + ISIZE(IFa)*(IR(j)-1)) : + Q(IPCtABP + i + NTVP*(j-1)) ];
          >
        >else                             "cas d'une serie de composantes consecutives"
        < 
          CALL VADD IC to MX 
        >
        jzero = jzero + nszr(JFa);
      >
    >
    izero = izero + nszc(IFa);
  >
;

Les Tables
==========                                                            correspondance schema :
de la cellule :
NFF2IX  : first Cl face connected to an IX of Fm
          (pour définir la MXT cible)
NBCR(kFa) : numéro du bloc (C ou R) IFup cible (dans la # de la Fm)     IC'i->INj et ICi->INj
NSZC(iFa) : largeur des IC' (nulle pour les bottes de T-Probes)         dim IC'
NSZR(jFa) : hauteur des IC                                              dim IC

de chaque IC :
IC(i)     : # de la colonne cible dans l'interface IFup (Horizontale)    m->n
IR(j)     : # de la ligne cible    . . .                (Verticale)      k->l

Il faut par ailleurs avoir localement la structure des banks MXT,MXR,MX
ainsi que les dimensions :
LTMXT(4)  : adresses des 4 MXT banks
ISIZE(kFa) : nbre de colonnes du MX cible <-o-> dim Fc(ou IFup)


<-----/|\------>  ./Help/Programmers/Ker/Status_bits
***********************************************************************************************************
***********************************************************************************************************
********************  STATUS BITS SYMBOL ******************************************************************
***********************************************************************************************************
***********************************************************************************************************
C     ZOOM  status bits (cf $Q sequence in kercde)
=======================
  IOFROZ   =  1  :    Zinit frozen Cl or Tr is Zero.
  IODMX    =  2  :    D_Mx flag for Tr. Set in Tr proc (Ker sets Cells)
  IOKTR    =  3  ;    True K_Transfer flag. Set in TR proc.
                      a True k_Tr is such : 1) One Cx Cell only.       2) Zero Diag.
                                            3) None other Tr may depend on him (meaningless dFi in D_loop)
  IOSTDY   =  4  ;    Steady. Set in Proc.
  IOUSTY   =  5  ;
  IOMAP    =  6  ;    Utilisé par OW2PAW pour les objets mappés.
  IOK2TR   =  7  ;    Pseudo K_Tr type 1 : No Null_Diag; May have D_Mx on other Tr       
                                          (but no foreign D_Mx on him);
  IOK3TR   =  8  ;    Pseudo K_Tr type 2 : Null_Diag; May have D_Mx on other Tr       
                                          (but no foreign D_Mx on him);flaggé KTRANS.
  IOFXTR   = 10  ;    Set to 1 in Zinit if NOT frozen Tr (if n-TR => 0)
  IOPITR   = 11  ;    Set to 1 in Zinit if Pi (parameter) TR (Create P-Tr)
  =============
  IOABSG   =  1  ;    True signed A-1B_TV matrix (not ker-defined from convention).
* Zinit entered flag for ZPrint(LXX),Zpaw(LXX),et run.lis outputs.
  IOZPRI   = 14  ;   ZPRINT(LXX).
  IOZPAW   = 15  ;    (Unused yet)
  IOPRNT   = 16  ;
=======================
C     ZEBRA status bits
=======================
  IQDROP   = 25  ;    Drop flag Zebra banks. (Ker)
  IQMARK   = 26  ;
  IQCRIT   = 27  ;
  IQSVSX   = 28  ;

=====================================================================
C  status bits for TEF Variables (Fi,Eta) components characterisation
=====================================================================
  Proposition for PROXIMA (a la place de INIDIAG)

  IOZERO   =     :      Diag a zero vrai;
  IOKZRO   =     :      Diag a 1 dans la D_loop, zero dans la Step_Ad (K_Tr);
  IOFROZ   =     :      Composante gelée;
  IOCUML   =     :      Flux cumulé;
                        ( Faut-il un champ nature complet ?);
jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''              .(cf Pre_Futura)
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.

Help Under development (Al1 Vendredi 09/09/1994)


=====================================================(Al1 jeudi 28/11/1996)

prevoir les flags pour le rangement optionnel des matrices Ct et A-1B
<-----/|\------>  ./Help/Programmers/Ker/Tef_Mx_Structure
**********************************************************************
**********************************************************************
************   Structure Matricelle dans ZOOM ************************
****************( JYG Al1 mardi 13/09/1994 )**************************
**********************************************************************
**********************************************************************
[Vocabulaire Bligne=Brow= un block ligne]
==============
AU NIVEAU Fm =
==============
**  STRUCTURE GENERALE:

     4 "Stored" Mx dans l'ordre :

         [f]   (f,_,¶)  (¶,_,f)  (¶,_,¶)

auxquelles correspondent 4 Bk MXT
   ------
   | MXT >
   -----\   ----
         \-| MXR > Décrit la structure d'une Bligne.
            ----\   ----
                 \-| MX  > Contient une sous matrice (IF*IF), valeurs:
                    ----   rangées par ligne.
                
**  DETAIL DES BLignes:

* Pour  [f] et  (f,_,¶)

   >>>   face 1  >... face i  >* ffx  fx2 >.. fxj
      |  """ """     """ """   * """  """     """
   IN |  IN1 IN2     IN  IN    * IX   IX      IX
      |                        *
         ---                          ---
          ^                            ^
          |                            |
       au couple IN,IN             et a IN,IX
       <::> une MX                 <::> une MX
      ici, ¢ [f]                  ici, ¢ (f,_,¶)

* Pour   (¶,_,f) et (¶,_,¶)

   >>>   face 1  >... face i  >* ffx  fx2 >.. fxj
      |  """ """     """ """   * """  """     """
   IX |  IN1 IN2     IN  IN    * IX   IX      IX
      |                        *
         ---                          ---
          ^                            ^
          |                            |
       au couple IX,IN             et a IX,IX
       <::> une MX                 <::> une MX
      ici, ¢ (¶,_,f)              ici, ¢ (¶,_,¶)


**  REGLE MX ZOOM:

 Une matrice stokée correspond donc toujours à un couple d'interfaces.

**********************************************************************
**********************************************************************
************  Calculs Matriciels dans ZOOM ***************************
****************( JYG Al1 mardi 13/09/1994 )**************************
**********************************************************************
**********************************************************************

(cf dir : Mx_Package )

EOLE fait des calculs de type :
           SUMi { [IFj,INi] * [INi]^-1 * [INi,IFk] }

  en parcourant deux MXT à la fois :
 Premier couple [f] et  (f,_,¶), deuxième (¶,_,f) et (¶,_,¶) .
<-----/|\------>  ./Help/Programmers/Ker/Tef_Mx_Structure.bak
**********************************************************************
**********************************************************************
************   Structure Matricelle dans ZOOM ************************
****************( JYG Al1 mardi 13/09/1994 )**************************
**********************************************************************
**********************************************************************
[Vocabulaire Bligne=Brow= un block ligne]
==============
AU NIVEAU Fm =
==============
**  STRUCTURE GENERALE:

     4 "Stored" Mx dans l'ordre :

         [f]   (f,_,¶)  (¶,_,f)  (¶,_,¶)

auxquelles correspondent 4 Bk MXT
   ------
   | MXT >
   -----\   ----
         \-| MXR > Décrit la structure d'une Bligne.
            ----\   ----
                 \-| MX  > Contient une sous matrice (IF*IF), valeurs:
                    ----   rangées par ligne.
                
**  DETAIL DES BLignes:

* Pour  [f] et  (f,_,¶)

   >>>   face 1  >... face i  >* ffx  fx2 >.. fxj
      |  """ """     """ """   * """  """     """
   IN |  IN1 IN2     IN  IN    * IX   IX      IX
      |                        *
         ---                          ---
          ^                            ^
          |                            |
       au couple IN,IN             et a IN,IX
       <::> une MX                 <::> une MX
      ici, ¢ [f]                  ici, ¢ (f,_,¶)

* Pour   (¶,_,f) et (¶,_,¶)

   >>>   face 1  >... face i  >* ffx  fx2 >.. fxj
      |  """ """     """ """   * """  """     """
   IX |  IN1 IN2     IN  IN    * IX   IX      IX
      |                        *
         ---                          ---
          ^                            ^
          |                            |
       au couple IX,IN             et a IX,IX
       <::> une MX                 <::> une MX
      ici, ¢ (¶,_,f)              ici, ¢ (¶,_,¶)


**  REGLE MX ZOOM:

 Une matrice stokée correspond donc toujours à un couple d'interfaces.

**********************************************************************
**********************************************************************
************  Calculs Matriciels dans ZOOM ***************************
****************( JYG Al1 mardi 13/09/1994 )**************************
**********************************************************************
**********************************************************************

(under development)

EOLE fait des calculs de type :
           SUMi { [IFj,INi] * [INi]^-1 * [INi,IFk] }

  en parcourant deux MXT à la fois :
 Premier couple [f] et  (f,_,¶), deuxième (¶,_,f) et (¶,_,¶) .
<-----/|\------>  ./Help/Programmers/Macros_comprehension_des/Chemins_banks
===========================================
====== CHEMINEMENT DANS LES BLOCKS ========
===========================================

( TOUTANKAMON , juillet 89,  octobre 89)
===========================================


* Derniere liste des macros, dans l'ordre
===========================================

&'@(#@#)@'='#1'
&'@((#@#)@#)@'='LQ(@(#1@#2)@-O#2#3)'
&'@(#@#(#))@'='@(#1@#2-#3+1)@'
&'@((#@#(#))@#)@'='LQ(@(#1@#2-#3+1)@-O#2#4)'
&'@(#@NX)@'='LQ(#1-ONX)'
&'@((#@#)@NX)@'='LQ(@(#1@#2)@-ONX)'
&'@#@#@'='@(#1@#2)@'

Pour tout les blocks on crée une macro
&'@#@LONG@'='@#1@SHORT@'
et le cas échéant, lorsque l'on pointe sur un tableau de pointeur
&'@#@LONG(#)@'='@#1@SHORT(#2)@'
Par exemple:
&'@#@NEXT@'='@#1@NX@'
&'@#@CPLUG@'='@#1@SV@'
et bien que cela n'existe pas
&'@#@CPLUG(#)@'='@#1@SV(#2)@'


* Changement de nom : nom long--> nom court
===========================================
(3 octobre 89)

  Avant d'emboiter les différentes étapes du chemin, on
convertit, le cas échéant, le nom long de chacune de ces
étapes par son nom court:
&'@#@LONG@'='@#1@SHORT@'
  Par exemple avec la macro suivante
&'@#@CPLUG@'='@#1@SV@'
on a :
LCX2=@LSV2@CPLUG@CX@;    qui donne :
 PATTERN        @#@CPLUG@
 PARAMETER 1    LSV2
 PATTERN        @LSV2@CPLUG@
 REPLACEMENT    @LSV2@SV@
de même, dans le cas d'un tableau de pointeur la macro suivante :
&'@#@CPLUG(#)@'='@#1@SV(#2)@'
avec
LCL=@LCX@CX@CPLUG(I)@CL@; donne
 PATTERN        @#@CPLUG(#)@
 PARAMETER 1    (LCX@CX)
 PARAMETER 2    I
 PATTERN        @(LCX@CX)@CPLUG(I)@
 REPLACEMENT    @(LCX@CX)@SV(I)@


* Macro d'ouverture :
===========================================
(juillet 89)

&'@#@#@'='@(#1@#2)@'
  On encadre le chemin a analyser par des parenthèses afin de créer
des niveaux d'emboitement qui seront utilisés pour l'analyse. A un niveau
de parenthèse, on devra faire corresspondre un LQ ( x1 - x2)
 @LTR@TR@TV@; donne    @((LTR@TR)@TV)@
 @LCX@CX@SV(I)@CL@; donne @(((LCX@CX)@SV(I))@CL)@

* Macro standard de calcul d'adresse
===========================================
(juillet 89)

&'@((#@#)@#)@'='LQ(@(#1@#2)@-O#2#3)'
  L'analyse standard s'effectue sur trois arguments:
l'adresse de départ, le bank From, le bank To. On descend d'un niveau
d'emboitement à chaque appel de cette macro.
  On remplace le chemin du niveau analysé
@((xx@from)@to)@ par LQ(@(xx@from)@ - O_from_to)
  L'argument #2 (block FROM) doit forcément n'être composé que du nom
court du block FROM.
  Les deux premiers caractères de l'argument #3 (block TO) doivent
obligatoirement être le nom court du block TO. Les caractères suivant
peuvent contenir des opérations a effectuer sur le nombre O_from_to
(cf. par exemple la macro pour étapes avec argument à la fin du chemin)


* Macro standard de fermeture
===========================================
(juillet 89)

&'@(#@#)@'='#1'
  On remplace ce qui reste, qui ne peut plus être analysé. Le
premier argument est forcément l'adresse de départ (que l'on garde).
Le second est le From du niveau d'analyse précédent (que l'on supprime).

* Exemple standard de chemin ==> exemple 1
===========================================


===========================================
=========== Cas particuliers ==============
===========================================


= Un des blocks-étapes du chemin possède un argument entre parenthèses
===========================================

* L'argument est à la fin du chemin (cela correspond au block TO)
(juillet 89)
&'@(#@#(#))@'='@(#1@#2-#3+1)@'
La nouvelle chaîne obtenue est ensuite analysée par la macro
standard de calcul d'adresse.
ex: LCX=@LTV@TV@CX(J)@ donnera finalement LCX=LQ(LTV-OTVCX-J+1)

* L'argument est au milieu du chemin (cela correspond au block FROM)
(juillet 89)
&'@((#@#(#))@#)@'='LQ(@(#1@#2-#3+1)@-O#2#4)'
 On n'utilise pas la macro standard de calcul d'adresse qui ne permet pas
d'avoir autre chose que le nom court por le block FROM. On en fait une
spécifique.
 Cette macro achéve l'analyse pour ce niveau d'emboitement des étapes.
ex : LCL=@LCX@CX@SV(I)@CL@ donne  LCL=LQ(LQ(LCX-OCXSV-I+1)-OSVCL)

* il n'y a pas d'argument au début du chemin, c.a.d. pour l'adresse
du block FROM initialé.

= Un des blocks-etapde est le next du précédent
===========================================

On se restreind au cas ou le next est à la fin du chemin
* Cas standard
(juillet 89)
&'@((#@#)@NX)@'='LQ(@(#1@#2)@-ONX)'
  Cette macro ne fait qu'ignorer le FROM. On n'a pas en effet O_FROM_TO
mais uniquemnt O_TO
IPFIZ=@LTR2@TR@FI@NX@+IQ(LTR2+4) donne  IPFIZ=LQ(LQ(LTR2-OTRFI)-ONX)+IQ(LTR2+4)

* Lorsque l'on ne précise pas le From du next.Ceci ne peut arriver que lorsque
l'on ferme la macro. Le premier argument est l'adresse du block de départ
(2 octobre 89)
&'@(#@NX)@'='LQ(#1-ONX)'
LSV2=@LSV2@NX@ donne LSV2=LQ(LSV2-ONX)



==================================================================================
==========  CHEMINEMENT DANS LES BLOCKS : EXEMPLE 1 (CAS STANDARD)  ==============
==================================================================================

**** ENTREE ****

&'@(#@#)@'='#1'
&'@((#@#)@#)@'='LQ(@(#1@#2)@-O#2#3)'
&'@#@#@'='@(#1@#2)@'
&'@#@CPLUG@'='@#1@SV@'

&T
LCX2=@LSV2@CPLUG@CX@;
LCD=@LCX@CX@CPLUG@CL@CD@;


1********** MACROS 27.03.1980        ********** MACRO PROCESSOR MP2 - VERSION 2.2 MP2A

            &'@(#@#)@'='#1'
            &'@((#@#)@#)@'='LQ(@(#1@#2)@-O#2#3)'
            &'@#@#@'='@(#1@#2)@'
            &'@#@CPLUG@'='@#1@SV@'

            &T
  0         LCX2=@LSV2@CPLUG@CX@;
 PATTERN        @#@CPLUG@ ------------|
 PARAMETER 1    LSV2                  |
 PATTERN        @LSV2@CPLUG@          |
 REPLACEMENT    @LSV2@SV@             |
 PATTERN        @#@CPLUG@             |
 PARAMETER 1    LSV2                  |
 PATTERN        @#@#@                 |   macro d'ouverture
 PARAMETER 1    LSV2                  \_ (emboitement des block-etapes,
 PARAMETER 2    SV                    /   changement des noms longs)
 PATTERN        @LSV2@SV@             |
 REPLACEMENT    @(LSV2@SV)@           |
 PATTERN        @#@CPLUG@             |
 PARAMETER 1    (LSV2@SV)             |
 PATTERN        @#@#@                 |
 PARAMETER 1    (LSV2@SV)             |
 PARAMETER 2    CX                    |
 PATTERN        @(LSV2@SV)@CX@        |
 REPLACEMENT    @((LSV2@SV)@CX)@ -----|
 PATTERN        @#@CPLUG@
 PARAMETER 1    ((LSV2@SV)@CX)
 PATTERN        @#@#@
 PARAMETER 1    ((LSV2@SV)@CX)
 PATTERN        @((#@#)@#)@ ------------|
 PARAMETER 1    LSV2                    |  
 PARAMETER 2    SV                      |\ macro de calcul
 PARAMETER 3    CX                      |/  d'adresse
 PATTERN        @((LSV2@SV)@CX)@        |
 REPLACEMENT    LQ(@(LSV2@SV)@-OSVCX)---|
 PATTERN        @#@CPLUG@
 PARAMETER 1    (LSV2@SV)
 PATTERN        @#@#@
 PARAMETER 1    (LSV2@SV)
 PATTERN        @(#@#)@ ----------------|
 PARAMETER 1    LSV2                    | macro de
 PARAMETER 2    SV                      | fermeture
 PATTERN        @(LSV2@SV)@             |
 REPLACEMENT    LSV2 -------------------|
 ****       LCX2=LQ(LSV2-OSVCX)
  0         LCD=@LCX@CX@CPLUG@CL@CD@;
 PATTERN        @#@CPLUG@ --------------------|
 PARAMETER 1    LCX                           |
 PATTERN        @#@#@                         |
 PARAMETER 1    LCX                           |
 PARAMETER 2    CX                            |
 PATTERN        @LCX@CX@                      |  macro d'ouverture
 REPLACEMENT    @(LCX@CX)@                    |
 PATTERN        @#@CPLUG@                     |
 PARAMETER 1    (LCX@CX)                      |
 PATTERN        @(LCX@CX)@CPLUG@              |
 REPLACEMENT    @(LCX@CX)@SV@                 |
 PATTERN        @#@CPLUG@                     |
 PARAMETER 1    (LCX@CX)                      |
 PATTERN        @#@#@                         |
 PARAMETER 1    (LCX@CX)                      |
 PARAMETER 2    SV                            |
 PATTERN        @(LCX@CX)@SV@                 |
 REPLACEMENT    @((LCX@CX)@SV)@               |
 PATTERN        @#@CPLUG@                     |
 PARAMETER 1    ((LCX@CX)@SV)                 |
 PATTERN        @#@#@                         |
 PARAMETER 1    ((LCX@CX)@SV)                 |
 PARAMETER 2    CL                            |
 PATTERN        @((LCX@CX)@SV)@CL@            |  macro d'ouverture
 REPLACEMENT    @(((LCX@CX)@SV)@CL)@          |
 PATTERN        @#@CPLUG@                     |
 PARAMETER 1    (((LCX@CX)@SV)@CL)            |
 PATTERN        @#@#@                         |
 PARAMETER 1    (((LCX@CX)@SV)@CL)            |
 PARAMETER 2    CD                            |
 PATTERN        @(((LCX@CX)@SV)@CL)@CD@       |
 REPLACEMENT    @((((LCX@CX)@SV)@CL)@CD)@-----|
 PATTERN        @#@CPLUG@
 PARAMETER 1    ((((LCX@CX)@SV)@CL)@CD)
 PATTERN        @#@#@
 PARAMETER 1    ((((LCX@CX)@SV)@CL)@CD)
 PATTERN        @((#@#)@#)@ -----------------------|
 PARAMETER 1    ((LCX@CX)@SV)                      |
 PARAMETER 2    CL                                 |
 PARAMETER 3    CD                                 |
 PATTERN        @((((LCX@CX)@SV)@CL)@CD)@          |
 REPLACEMENT    LQ(@(((LCX@CX)@SV)@CL)@-OCLCD)     |
 PATTERN        @#@CPLUG@                          |
 PARAMETER 1    (((LCX@CX)@SV)@CL)                 |
 PATTERN        @#@#@                              |
 PARAMETER 1    (((LCX@CX)@SV)@CL)                 |
 PATTERN        @((#@#)@#)@                        |   calcul
 PARAMETER 1    (LCX@CX)                           |  d'adresse
 PARAMETER 2    SV                                 |
 PARAMETER 3    CL                                 |
 PATTERN        @(((LCX@CX)@SV)@CL)@               |
 REPLACEMENT    LQ(@((LCX@CX)@SV)@-OSVCL)          |
 PATTERN        @#@CPLUG@                          |
 PARAMETER 1    ((LCX@CX)@SV)                      |
 PATTERN        @#@#@                              |
 PARAMETER 1    ((LCX@CX)@SV)                      |
 PATTERN        @((#@#)@#)@                        |
 PARAMETER 1    LCX                                |
 PARAMETER 2    CX                                 |
 PARAMETER 3    SV                                 |
 PATTERN        @((LCX@CX)@SV)@                    |
 REPLACEMENT    LQ(@(LCX@CX)@-OCXSV) --------------|
 PATTERN        @#@CPLUG@
 PARAMETER 1    (LCX@CX)
 PATTERN        @#@#@
 PARAMETER 1    (LCX@CX)
 PATTERN        @(#@#)@ --------|
 PARAMETER 1    LCX             | macro de
 PARAMETER 2    CX              | fermeture
 PATTERN        @(LCX@CX)@      |
 REPLACEMENT    LCX   ----------|
 ****       LCD=LQ(LQ(LQ(LCX-OCXSV)-OSVCL)-OCLCD)

**** SORTIE ****

      LCX2=LQ(LSV2-OSVCX)
      LCD=LQ(LQ(LQ(LCX-OCXSV)-OSVCL)-OCLCD)

<-----/|\------>  ./Help/Programmers/Macros_comprehension_des/Stack_and_MTN_Block
===========================================
====== Stack Used in MTN Block ============
===========================================

( From James COOK et al.)
=========================

IF,ELSE,ELSIF
=============
UNTIL,WHILE
===========
DO
==  #L5S1
 Stacks : 4  To Next adress et type de fin;
          5  Exit from adress
FOR
=== #L4S1
 Stacks : 4  To Next adress et type de fin;
          5  Exit from adress
          9  Bypass test from entry
<-----/|\------>  ./Help/Programmers/Macros_comprehension_des/Stack_and_ZBM_Block
===========================================
====== Stack Usage and ZBM  BLOCKS ========
===========================================

(Al1,jeudi 13/10/1994)
======================

FROM
====
 Stacks : 5  Exit from (Sauf pour le premier)
          6  Location type (@$L[S6]@$T[6]@)
 Type de fin de block :                                     ^
 $8$ ::> $K[5]  killing macro bank;                         ^
         [5] adresse sortie.
;;
SKIP THRU
=========
 Stacks : 4  To Next adress et type de fin;
          5  Exit from adress
          6  Location type (@$L[S6]@$T[6]@) et adresse loop <
 Type de fin de block :                                     ^
 $7$ ::> $K[5]  killing macro bank;                         ^
         $[4]$  next adress next instruction and GOTO [6]---^
         [5] adresse sortie.
;
DONEXT
======
 Stacks : 4  To Next adress et type de fin;
          5  Exit from adress
          6  Adresse loop                                   <
 Type de fin de block :                                     ^
 $7$ ::> $K[5]  killing macro bank;                         ^
         $[4]$  next adress next instruction and GOTO [6]---^
         [5] adresse sortie.
;
READ THRU
=========
 Stacks : 4  To Next adress et type de fin;
          5  Exit from adress
          6  Location type (@$L[S6]@$T[6]@)
                                       (adresse loop du DO) <
          et les stacks du DO loop.
 Type de fin de block :                                     ^
 $9$ ::> $K[5]  killing macro bank;                         ^
         $[4]$  next adress next instruction and GOTO [6]---^
         [5] adresse sortie.
;
Compound SKIP THRU/../../..<
============================
 Memes Stack que les individuelles.
 Type de fin de block : $X$, generee et tuee par >;
 $X$ Depile les trois autres, et pour chacune:
     ::> $K[5]  killing macro bank;
         $[4]$  next adress next instruction and GOTO [6]
         [5] adresse sortie.
 Termine en se tuant.
;
===========================================
====== More on ZBM loops instruction ======
===========================================

(Al1,jeudi 13/10/1994)
======================
 On rappelle ici qu un objet est associe univoquement a un bank, et
lui meme a son adresse (Ladr). Le symbole (Ladr) est donc le symbole
d' un objet au sens de ZBM.
Objet vide : toute classe possede un objet vide.
Le symbole de l'objet vide est (0), cad adresse nulle.

 Tout symbole de type (Ladr).Symbole est un attribu instancie de l'objet,
definit par sa classe (et donc via le PRECOMP ou un Declare bank;
******************A METTRE ET COMPLETER AILLEURS ***************
 Dans ZBM, les objets sont relies par des arcs definits a partir des
meta-arcs entre classes par Local Valid Chains :
ainsi : [~CL~SV~CX~TV~TR~] definit une meta chaine entre classes.
On parcourt une chaine grace a :
  une amorce = un objet et sa classe
  une chaine instanciee de type @Classe@classe@classe de l objet terminal@
  exemple @LCL@CL@SV@CX@ est l adresse de l objet de classe CX en aval de LCL
dans la chaine.
Hyper-arcs :
 Un meta arc comme ~CL~SV~ est instancie par un ou plusieurs ojets de la
classe SV. Ils sont dits appartenir a une "structure lineaire". (ST)
Dans ZBM, seuls les objets de meme classe peuvent appartenir a une ST.
On interdit reciproquement tout meta-arc reliant immediatement des classes
de meme nom.
Ainsi, LSV=@LCL@CL@SV@ donne acces au premier objet instancie d une SV.
On peut parcourir une ST par Next(LSV).
La fin d'une ST est marquee parl'objet vide.
*****************************************************************

Location type
-------------
&';DTL^#(#)'=' &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'' &''$L#C''=''#2''
 &''($L#C)''=''(#2)'';'
              Associe l'adresse symbolique a $L[6] (adresse dans le stack)
              Associe la classe symbolique a $T[6] (bk name dans le stack)

Object(=Bank) instanciation from class (=Bank name and related PRECOMP symbols)
-------------------------------------------------------------------------------
&'DBK^#(#)'=' &''(#2).''=''0_(#2.#1).'' '
               Memoire de la classe de l objet : (Lad).

Special instanciation for Variable dimension ref links table
------------------------------------------------------------
&'DCL^#(#)'=' &''(#1).VR.''=''0_(#2.#1).'' '


<-----/|\------>  ./Help/Programmers/Macros_comprehension_des/Tours_de_mains
Gestion de listes
=================
macros de base : &'#M ...';
  a faire ... a partir de goto (l1,l2,..),I; de Procedure.
                          declare banks.
                          liste de verifs.

Verifications de formes non elementaires ( solution dite spaghetti).
========================================(Al1 from JYG 16/05/1995)
 L'idee est de traiter cette forme comme appartenant a un bloc logique <>;
 L'expension de la forme suivant la sequence est faite classiquement en
construisant en // la liste des verifs a faire, attachée a >;
<; => goto :label: premiere verif.
      :debut: forme expansée;
      exit;
>; => :label: verif 1;
              ...
       goto :debut:;
[exemple : dérivateur].

Generation de macros exclusivements valides dans un bloc.
=========================================================
macros de base : &'#K ...';
<-----/|\------>  ./Help/Programmers/Mortran/Control_commands_for_the_Translator
***********************************************************************
***********************************************************************
****  Control Commands &X, and #X in pattern or replacement ***********
***********************************************************************
***********************************************************************

Commands
========
&A Annotation : Writes source statement as comments in the Fortran file;

&A0           : Suppress it;

&C Capital    : Input Mortran text written in capital letters in Fortran file;

&C0           : Conserve lower case letters.

&D Macro Definition Trace : Prints out all already booked Macros.

&E Eject      : New page ???

&F Fortran    : No translation (>< is &M);

&H Hollerith  : Transform '...' in nH... (!!! Carefull for blank management)

&H0           : Suppress translation;

&In Indentation (n=1,...,9) : Indent with n*m where m is the nesting level;

&I0           : Suppress.

&L List       : Write source statements, including macro definitions and
                control statements, into the list file;

&M Mortran    : Translate text;

&N - &L0 No List;

&Q Quote      Close each comment string still open at end of line;???

&Q0

&Rn Rewind (n=1,...,5,8,9)   (3=4=...=9) Rewind the file with lunit n

&S  Suppress () matching checking;

&T &Tn Trace (n=1,...9) : Trace macro translation with level up to 3;

&T0           : Suppress;

&Un Input Unit (n=1,...5,8,9) : Stack the lunit for the current input file
                and switch input lunit to n. If stack full, generates error
                message : "input unit stack overflow";

&& End of File Indicator : Every time this control statement is read or a
                system E-O-F is set, a lunit is unstacked from the input units
                stack and input is switched to it;


Operators
=========
#I     Increment : Increment the label register and load its content into the
                   Accumulator;

#C     Convert   : [A] converted into a five digits decimal number and output
                   the five corresponding characters into the replaced text in
                   the expansion buffer;

#O     Output    : Store [A] into the next word of the replaced text in the
                   expansion buffer;

#Sn    Stack   (n=1,...,9) : Stack [A] on stack n. (If full, "stack overflow");

#Un    Unstack (n=1,...,9) : Unstack a word on stack n ::> A. (If empty,
                    "stack underflow");

#An    Add     (n=1,...,9) : Add immediately to [A] the one digit "n" ::> A;

#Lc    Load      : Load immediately the character c in A;

#P     Parameter : Load the first word of the first parameter into A;
                   ( Parameters are initially character strings, stored one
                   character per word. If macros are nested, a character might
                   be replaced by a binary number. This is for exemple the case
                   during the translation of user defined satement labels. The
                   binary number must be converted to decimal (by #C) before it
                   can be output;

#N     No Rescan : The replacement text before #N will not be res-scanned;

#B     Octal     : Convert the first parameter from Octal to binary and ::> A;

#H     Hexdecimal: Convert the first parameter from hexa to binary and ::> A;

#Z     String    : Pack the first parameter, which is supposed to be a short
                   string of 6-bit characters in internal representation
                   and ::> A;

#E     End       : Check all stack empty. If not "unclosed block".
                   Reset all stack pointers. Write a msg on warning and errors,
                   

#E1    Error 1(Warning) : Generates a Warning commented in the Fortran file;

#E2    Error 2(Error)   : Generates a compilation error with comment.

#T     Title     : Transfer the first parameter up to an eventual left ) or
                   up to a maximum of 24 characters to a title buffer for
                   printing in the header line on top of the next page;

#*     Fortran Comment in Fortran file  ???


Macro-directives
================

Macro Killing
-------------
&'#Kpattern'         ::> kills &'pattern'=...

Macro Concatenation
-------------------
** Left concatenation:

&'#Mpattern'='pat2'  ::> transform &'pattern' in &'pat2pattern'
&'#C..' as &'#M..' but kills previous macro.

** Right concatenation(Rear):

&'#Rpattern'='pat2'  ::> transform &'pattern' in &'patternpat2'

Parameters specification
------------------------

&' aaa#bbb'    : Match #1 with character separating aaa from bbb

&'aaa###bbb'   : Match #1 with the first of the characters separating aaa
                 from bbb, and #2 with the others;

&'aaa#bbb#ccc#;' : Match #1,#2 (and so on) with successive separations
<-----/|\------>  ./Help/Programmers/Mortran/Mortan_MP2_Description_in_short
C
C     ********************
C     ** SUBROUTINE OUT **
C     ********************
C
C     15/2/90
C
C     1)Principales fonctions :
C     =========================
C     - transfert les caracteres contenus dans "l'expansion buffer"
C       (tableau X),a partir de la case 1 et jusqu'a rencontrer un nul caracter,
C       dans "l'output buffer" (tableau BOUT). BOUT contiend une ligne a
C       imprimer, de longueur POUT. Cette ligne est imprimee par la routine
C       WRITE (routine appelee par OUT), qui initialise egalement les 6 premiers
C       caracters de BOUT a blanc.
C     - concatene les instrunctions MORTARN le cas echeant 
C     - lors du premier appel a OUT, on retiend les macro qui existent alors.
C
C
C     2) Principales variables globales utilisees
C     ===========================================
C     X    : tableau d'entre (inchange)
C     BOUT : tableau de sortie (modifie). En partie initialise par WRITE
C     POUT : pointeur dans BOUT. Est egale a la longueur de la ligne a
C            imprimer. (modifie) Initialise a 6 par WRITE
C     pour l'initialisation seulement
C     M    : Tableau des macro (inchange)
C     MI   : Tableau de sauvegarde des pointeurs sur les macros (modifie)
C     FSP  : Premiere place libre pour les macro (inchange)
C     FSPB : Sauvegarde de la valeur de FSB (modifie)
C
C     3) Variables locales
C     ====================
C     OP : pointeur courant dans X
C     T : caractere courant traite. En generale lu dans X et ecrit dans BOUT
C     FFLAG : flag permettant de diagnostiquer le premier appel a OUT. Vrai
C             lors du premier appel, faux ensuite.
C     STNST : flag utilise pour la generation d'instruction CONTINUE. Vrai
C             lorsque une etiquette vient d'etre transferee dans BOUT ou
C             lors de la concatenation de ligne MORTRAN. Faux lorsque une
C             instruction vient d'etre transferee.
C      CONT : contined la chaine de caracter CONTINUE, en MORTRAN-code
C      SKFL : non utilise
C      LPOUT: pointe sur la case de BOUT ou sera mis le prochain caracter
C             lors d'une concatenation d'instructions MORTRAN  
C     
C     4) Quelques details croustillants:
C     ==================================
C     - on commence a partir de la case 1 de X et on s'arrete au premier
C     caracter nul. 
C     - les blancs et les ; en debut de X ne sont pas pris en compte
C     - les chaines de caracters entre ' sont convertis en format holerith
C     - le caracter ^ n'est pas transmis a BOUT (peut donc etre utilisee en
C       separateur a l'interieur d'une variable)
C     - si une instruction MORTRAN a un $ avant le ; cette instruction est
C       concatenne avec la suivante , c.a.d. qu'elles sont ecrites sur la meme
C       ligne. Le pointeur LPOUT contiend la position du prochain caracter a
C       ecrire dans BOUT.Le flag STNST est mis a true (Why ?)
C     - Lors du premier appel a OUT (diagnostiquer grace a FFLAG), on remplit
C       la table MI en recopiant les 63 premiers nombre de la table M; on
C       conserve ainsi dans MI les pointeurs sur les macros qui seront
C       conservees apres un END MORTRAN.
C     - gestions des etiquettes :
C         = on reconnait une etiquette comme etant une instruction MORTRAN
C         commencant par une chiffre
C         = l'etiquette se termine par un ;
C         = l'etiquette est mise dans les 6 premieres cases de BOUT,
C         initialisees a blanc par WRITE
C         = le flag STNST (STatus New STatement ?) sert a gerer les instrucions
C         continue :
C           + apres avoir ecrit une etiquette dans BOUT, STNST est true
C           + quand on ecrit une instruction FORTRAN, on met STNST a false
C           + donc quand on doit ecrire un etiquette et que STNST est true, on
C           genere une instruction CONTINUE
C           + STNST est egalement mis a true lors de la concatenation
C           d'instructions MORTRAN
C         
C
C     *********************
C     ** SUBROUTINE READ **
C     *********************
C
C     15/2/90
C
C     1)Principales fonctions :
C     =========================
C     - Sous programme qui lit simplement une ligne, et passe pas mal de
C     temps a essayer de l'ecrire.
C     - Les caracteres lus sont ranges, codes en ASCII, dans le buffer
C     CARD (la fin du buffer est a blanc).
C     - Les caracteres lus sont converti en codage interne est range dans
C     le buffer BIN. Apres le dernier caractere lu, on met le cractere
C     NUL. PIN, le pointeur de BIN, est mis a zero.
C     - Les lignes FORTRAN (comprises entre &F et &M, ainsi que ces 2
C     instructions) sont traitees completement localement. Elles sont
C     ecrites telle que dans le fichier de sortie, et sont affichees telle
C     le cas echeant.
C
C     2) Principales variables globales utilisees
C     ===========================================
C     -PFLAG : (Print FLAG) vrai si la ligne venant d'etre lue ne doit
C     plus etre imprimee. A l'exterieur de READ, n'est modifie (et
C     utilise) que dans CCA (&N ou &N0)
C     -LINE : IN : numero dans la page de la derniere ligne affiche
C            OUT : modifie
C     - MLINE : IN : nombre max de lignes dans la page
C              OUT : inchange
C     - NL : IN : Nested Level de la ligne en court
C           OUT : inchange
C     - LNL : IN : Last Nested Level; NL de la ligne precedemment affichee
C            OUT : modifie; NL de la ligne venant d'etre affichee
C     - CARD : IN : ligne precedemment lue (ASCII)
C             OUT : ligne venant d'etre lue (ASCII)
C     - CSI : IN : caractere de ligne suite (ASCII)
C            OUT : inchange
C     - BIN : IN : non utilise
C            OUT : ligne lue, convertie en codage interne MORTRAN. Apres
C                  le dernier caractere lu, il y a le caractere NUL
C     - PIN : IN : non utilise
C            OUT : PIN=0
C     - IND : IN : nombre de blancs generes pour chaque niveaux
C                  d'indentation
C            OUT : inchange
C     - B   : Buffer temporaire de travail
C             IN : non utilise
C            OUT : modifie si on fait de l'indentation
C     - IFLAG, INU, LFLAG, AFLAG, TFLAG : utilises mais inchanges
C
C     3) Variables locales
C     ====================
C     - PIM : pointe sur le dernier caractere non blanc
C     
C     4) Quelques details croustillants:
C     ==================================
C     - En generale la ligne lue est affiche juste avant de lire la
C     ligne suivante, donc apres traitement, sauf lorsque l'on est en mode
C     trace; dans ce cas, la ligne lue est affichee juste apres lecture,
C     avant le traitement. La variable PFLAG est utilise pour gerer ca.
C     Si on affiche en generale la ligne apres traitement(et non juste
C     apres lecture) c'est probably pour gerer les Nested Level.
C     - &F et &M, ainsi que les lignes comprises entre les deux, sont
C     traitees localement; elles ne sont pas transmises a l'input
C     buffer BIN.
C     - Pour les lignes qui sont des "ordres" MORTRAN (qui commencent
C     par & mais pas par &'), on rajoute un ; a la fin
C     - Quand la fin de fichier est rencontree, on met &&; dans BIN
C
C     **********************
C     ** SUBROUTINE WRITE **
C     **********************
C
C     12/3/90
C
C     1)Principales fonctions :
C     =========================
C     Ecrit dans le fichier de sortie (unite logique OUTU) la ligne de
C     caracteres ranges dans BOUT et de longueur POUT. Si on est en
C     mode TRACE, on affiche en plus cette ligne precedee de ****.
C
C     2) Principales variables globales utilisees
C     ===========================================
C     BOUT : IN : tableau de caracteres a enregistres dans le fichier de
C                 sortie, represente en codage inetrene MORTRAN
C           OUT : les 6 premiers caracteres a blancs
C     POUT : IN : nbre de caracteres de BOUT a enregistrer
C           OUT : inchange
C     OUTU : IN : unite logique de sortie
C            OUT : inchange
C     TFLAG, OTAB : utilise mais inchange
C
C     3) Variables locales
C     ====================
C     
C     4) Quelques details croustillants:
C     ==================================
C         
C
C     ********************
C     ** SUBROUTINE XIN **
C     ********************
C
C     12/3/90
C
C     1)Principales fonctions :
C     =========================
C     Lecture d'une instruction MORTRAN :
C     - Sous programme lisant des caracteres dans l'Input Buffer (BIN),
C     a partir de l'adresse PIN et jusqu'a rencontrer un (;) , et les
C     ecrivants dans l'Expansion Buffer (X) avec un traitement eventuel.
C     Si la ligne courante (contenue dans BIN) ne contiend pas de (;)
C     on va lire la ligne suivante
C     - On gere le Nesting Level (NL)
C     - on supprime les blancs avant ou apres un caracter special
C     - Lorsque l'on est a l'exterieur d'une chaine de carateres, on ne
C     laisse qu'un blanc entre 2 mots
C     -les commentaires sont supprimes
C
C     2) Principales variables globales utilisees
C     ===========================================
C     BIN : IN : contiend les caracteres de la ligne venant d'etre lue,
C                en codage interne MORTRAN
C          OUT : non modifie
C     PIN : Input buffer Pointer (dans BIN) (mis a 0 lors de l'appel a
C           READ, initilaise a 72 au debut de MP2)
C           IN : pointe sur le dernier caracter lu lors du precedent
C                appel a XIN
C          OUT : pointe sur le dernier caracter lu (un ;)
C     X : expansion Buffer
C           IN :
C          OUT : contiend l'instruction MORTRAN lu, a partir d'une
C                adresse fixe dans X (XPBREF). Le dernier caracter lu
C                est suivi par un NUL
C     NL : Nesting Level
C           IN : avant de lire l'instruction
C          OUT : apres l'avoir lu 
C     CSI : IN : uqelconque, non interprete
C          OUT :caracter suite utilise par READ lors de l'impression
C           des lignes lu
C           = blanc : pas de caracter suite
C           = S (variable SCH) : lorsqu'une chaine de caracter se
C           poursuit sur la ligne suivante
C           = * (variable CCH) : lorsqu'un commentaire se poursuit...
C     QFLAG : IN: =true : on termine le commentaire a la fin de la ligne
C                 =false (valeur par defaut) : On attend un desusieme
C                 double cote pour fermer le commentaire
C            OUT : non modifie
C           
C     3) Variables locales
C     ====================
C     
C     4) Quelques details croustillants:
C     ==================================
C     - Niveau d'emboitement : le Nesting Level (NL) est gere lors de la
C     rencontre d'un < ou d'un > .
C     - Les commentaires sont supprimes (non transmis au buffer X).
C     Suivant la valeur de QFLAG, le commantaire se termine soit a la
C     fin de la ligne, soit quand on ferme les doubles cotes
C     - les chaines de caracteres (expression compri entre ') ne sont
C     pas du tout interpreter par XIN (transmis directement au buffer X)
C     - A l'exterieur des commentaires et des chaines de caracteres, on
C     ne garde qu'un blanc entre deux mots, sauf si ce blanc est entoure
C     d'au moin un caracter special : cette unique blanc est alors
C     supprime.
C
C
C     **********************
C     ** SUBROUTINE XXXXX **
C     **********************
C
C     12/3/90
C
C     1)Principales fonctions :
C     =========================
C
C
C     2) Principales variables globales utilisees
C     ===========================================
C
C     3) Variables locales
C     ====================
C     
C     4) Quelques details croustillants:
C     ==================================
C         

<-----/|\------>  ./Help/Programmers/Mortran/mtn_errors_list

 ***  MTN ERROR  ***          
 UNCLOSED COMMENT STRING

 ***  MTN ERROR  ***          
 UNCLOSED QUOTED STRING 

 ***  MTN ERROR  ***          
 Unable to close an unopen MTN block 

 ***  MTN ERROR  ***          
 UNCLOSED MTN BLOCK 
 STACK POINTERS :     1    0    0    1    1    0    0    0    0
 (SHOULD BE ALL ZEROES) 


<-----/|\------>  ./Help/Programmers/Upgrades/Installation
**************************************************************************
***************************  Installation ********************************
********************  Robert FRANCHISSEUR (1996/02/06) *******************
**************************************************************************

(en cours de modifs) Version 1.24/00


INTRODUCTION
------------

Le logiciel ZOOM ( Zone Optimal Organize Modelling) est constitué d' un noyau 
(kernel) appelé KER, d' un ensemble de 'processeurs' et d' un 'zinit' ecrits 
par l' utilisateur pour décrire son problème et d' un programme de visualisation 
des résultats appelé VIZU (Visualisation Interface for Zoom User).

Dans ce qui suit le terme ZOOM poura représenter aussi bien l'ensemble du logiciel
que le noyau.


Cette notice est destinée à familiariser le "novice" à une installation
et à une utilisation rapide et simple de ZOOM. La convivialité de ce logiciel
faisant qu' il est beaucoup plus facile à utiliser qu' à décrire dans cette notice.

Les logiciels ZOOM et VIZU ont été portés sur les machines suivantes :

 +--------------------+--------------+---------------+
 | Machine            | O.S.         |   Release     |
 +--------------------+--------------+---------------+
 | UNIVAC 11xx        | EXEC 8       |               |
 | HP/Apollo DNxxxx   | Domain/OS    |   10.4.1.1    |
 | HP/Apollo 4xxxt    | Domain/OS    |   10.4.1.2    |
 | HP 9000/7xx        | HP-UX        |   A.09.01     |
 | BULL SPS7          |              |               |
 | BULL DPX2000       | AIX          |   3.2         |
 | SUN Spark          | SunOS        |   4.1_PSR_A   |
 | SUN Spark          | SunOS        |   4.1.3_U1 1  |
 | CRAY Y-MP          | unicos       |   8.0.3.1     |
 | CRAY C9x           | sn4607       |   7.C.3 7.C.4 |
 | IBM RS6000         | AIX          |   3.2         |
 | IBM SP2            | AIX          |   3.2         |
 | DEC Alpha          | OSF1         |   2.0         |
 | SUN Spark          | Solaris      |   5.5.1       |
 | SUN Spark          | Solaris      |   5.6         |
 | Clone P.C.         | Linux        |   2.0.32      |
 +--------------------+--------------+---------------+


L'outil de développement choisi est CMZ ( Code Management system using Zebra) [1]
conçu et développé au CERN. Ce choix permet d'obtenir une grande cohérence 
entre toutes les "interfaces utilisateur" depuis la phase de développement et 
de gestion de versions jusqu' à la visualisation des résultats puisqu' elles sont
toutes basées sur le même langage KUIP (Kit for a User Interface Package) [2].
Ce langage permet d' écrire des macros (kumac) qui constituent l'ensemble des
commandes vues par l' utilisateur qui se retrouve ainsi toujours dans le même environnement.

Par ailleurs, à l' intérieur de CMZ, il n' existe aucune différence dans la syntaxe
des commandes que ce soit pour installer le noyau (KER), VIZU ou lancer l'execution 
d' une simulation.




CONFIGURATION NECESSAIRE
------------------------

Dans ce qui suit nous distingueront deux niveaux distincts d 'installation que nous nomerons
"développeur" ( permettant le developpement du noyau lui-même) et "utilisateur".

La machine sur laquelle l' installation doit être faite doit posséder un compilateur FORTRAN
les librairies 'X Window System' (X11R4 ou +)* et être raccordée au réseau Internet via TCP/IP.

* 'X Window System' est une marque déposée du "Massachusetts Institute of Technology".


Une autorisation du CERN doit être obtenue afin d' obtenir et utiliser leurs libraries.
Pour se faire il faut se connecter au CERN récupérer le fichier cernlib.registration ,
le remplir et le renvoyer par e-mail à cernlib@cernvm.cern.ch à l' aide de la procédure 
suivante :

     ftp asisftp.cern.ch
     (IP address 128.141.202.89,  userid ftp or anonymous)
     ftp> get cernlib.registration
     ftp> quit

Voir en annexe 1 les différents copyrights du CERN.


Espace disque necessaire :                                 1998/05/13

        Librairies CERN :         environ   40 Mo          60 Mo

        ZOOM 
                "Utilisateur"     environ   12 Mo          18 Mo
                "Développeur"     environ   22 Mo          ?

                auquels on ajoutera environ 5 Mo pour l' installation proprement dite.


        Projet UTILISATEUR 
                Suivant la complexité du projet étudié et la quantité de résultats souhaités
                de 2 Mo ( Cellule de Hambourg) à 100 Mo ( Convection naturelle en cavité)


PROCEDURE D' INSTALLATION
-------------------------


        Il suffit de transférer à l' aide de ftp l' arborescence de ZOOM pour la machine
        désirée dans le directory d' accueil :

           cd /directory

           ftp> binary
           ftp> cd /pub/zoom_server
           ftp> get unpack_zip_machine  bin/unpack_zip
           ftp> get gunzip_machine  bin/gunzip
           ftp> mget README*
           ftp> get zoom_x.y_zz_machine.tar.gz zoom.tar.gz
           ftp> quit
           
           où x.y_zz   est le numero de version
           où machine peut être :

           apo :       Apollo m68k running SR10.x
           hpx :       Hewlett-Packard 9000 Series 700 running HP-UX 9.x 
           sun :       Sun SPARCstation running Sun OS 4.1.x
           ibm :       Ibm station running  AIX 3.2
           sol :       Sun SPARCstation running Solaris 5.1.x
           cru :       Cray Y-MP or C9x running Unicos 8.0.3.1
           irs :       IBM RS/6000 running AIX 3.2
           lnx :       Clone P.C. running Linux 2.0.32


           unpack_zip zoom

        Suivant le niveau "développeur" ou "utilisateur" les sources du noyau et de
        VIZU seront ou non incluses.

        On trouvera l' arborescence des fichiers à l' annexe 2.

        A terme il est prévu d'installer ZOOM sur un serveur Word-Wide-Web.


UTILISATION
-----------

VOIR aussi :
> $ZOOM/Help/Users/00_New_User_Environment_Installation
> $ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ
> $ZOOM/Help/Users/General/Execution_sur_Site_distant


   "Utilisateur"

        creer un directory user_data sous son home_dir


        Une fois pour toutes on ajoutera les lignes suivantes dans le fichier .profile (Bourne,Korn shells)

           CERN=XXX/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=XXX/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN XXX/cern
           setenv CERN_VER pro
           setenv ZOOM XXX/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

        en remplacant XXX par la bonne arborescence.

        Si, de plus, on veut utiliser la procédure d' exécution à distance, il conviendra d' avoir
        un fichier $HOME/.netrc sur la machine source et un fichier $HOME/.rhosts sur la machine cible
        avec les protections ad hoc.   Le ficher .cshrc est *obligatoire* sur la machine distante.



        L' utilisateur crée un directory par projet et après s' être placé dans ce directory
        exécute cmz

        Une fois dans cet environnement il peut charger un 'canevas'  à l'aide de la commande 

                shell cp $ZOOM/pro/exos/modele.cmz .
                file modele

        Après avoir édité ses processeurs et son 'zinit' (cf. les autres manuels ZOOM [3]) il lui 
        suffira de taper les commandes :

                 exec mod proc [cpu] [site]
        et 
                 exec mod zinit [cpu] [site]

        
        les arguments optionnels [cpu] et [site] permettant une execution automatique sur 
        une machine distante ( opérationnel sur Apollo uniquement à ce jour)


        La première de ces commandes exécutera MORTRAN [4] ,la compilation Fortran et crééra 
        la librairie des processeurs.

        La seconde exécutera MORTRAN [4] ,la compilation Fortran pour le 'zinit' , l' édition
        de liens avec le noyau , lancera l' exécution du job et une fois celle ci terminée
        générera l'exécutable VIZU correspondant.

        L' utilisateur n' a plus qu' à aller dans le directory contenant son 'zinit' (et les
        fichiers de résultats de son run) et taper la commande :

                vizu

        pour visualiser ses résultats.



   "Développeur"     


        En allant dans dans le directory contenant le noyau et/ou VIZU ($ZOOM/$ZOOM_VER/src/cmz/ker ou
        $ZOOM/$ZOOM_VER/src/cmz/vizu) on exécute cmz puis

                 exec mod [cpu] [site]

        pour mettre à jour la librairie du noyau et/ou de vizu




ANNEXE 1
--------

Copyright CERN, Geneva 1992

Copyright and any other appropriate legal protection of these computer
programs and associated documentation reserved in all countries of the world.

These programs or documentation may not be reproduced and/or redistributed
to any third party by any method without prior written consent of the
Director-General of CERN or his delegate.

Permission for the scientific usage of any programs described herein is
granted apriori to those scientific institutes associated with the CERN
experimental program or with whom CERN has concluded a scientific
collaboration agreement.

Commercial utilisation requires explicit a priori permission from CERN and
will be subjected to payment of a license fee.

These statements are without prejudice to any rights that third parties
may hold in these programs.

CERN welcomes comments concerning the CERNlib software, but undertakes no
obligation for the maintenance of the programs, nor responsability for their
correctness, and accepts no liability whatsoever resulting from the use of
its programs.

Requests for information should be addressed to:


                    CERN Program Library Office
                    CERN-CN Division
                    CH-1211 Geneva 23
                    Switzerland
                    Tel.      +41 22 767 4951
                    Fax.      +41 22 767 7155
                    Bitnet:   CERNLIB@CERNVM
                    DECnet:   VXCERN::CERNLIB (node 22.190)
                    Internet: cernlib@cernvm.cern.ch

ANNEXE 2
--------
Structure des fichiers de ZOOM


zoom/Help                             Comme son nom l'indique
zoom/cmzmacs                          Les kumacs CMZ pour les exos (utilisateurs)
zoom/kumacs                           Les kumacs pour vizu
zoom/user_data                        Les templates files de CMZ
zoom/zoom_1.24_00                     La version pro
zoom/zoom_1.24_00/bin                 Les shells diverses
zoom/zoom_1.24_00/exe                 Mortran ( + vizu sur apollo)
zoom/zoom_1.24_00/exos                La fameuse cellule de Hambourg !
zoom/zoom_1.24_00/lib                 Les librairies ker mtn et vizu
zoom/zoom_1.24_00/mac                 Les macros mtn 
zoom/zoom_1.24_00/out                 Les sorties d' installation
zoom/zoom_1.24_00/src                 Les sources
zoom/zoom_1.24_00/src/car             Les .car
zoom/zoom_1.24_00/src/cfs             Les sources fortran :
zoom/zoom_1.24_00/src/cfs/ker                             pour ker
zoom/zoom_1.24_00/src/cfs/mtn                                  mtn
zoom/zoom_1.24_00/src/cfs/vizu                                 vizu
zoom/zoom_1.24_00/src/cmz             Les cmz files :
zoom/zoom_1.24_00/src/cmz/ker                             pour ker
zoom/zoom_1.24_00/src/cmz/mac                                  mac
zoom/zoom_1.24_00/src/cmz/mtn                                  mtn
zoom/zoom_1.24_00/src/cmz/vizu                                 vizu


NOTA : les directory sous cmz contiennent chacun un cmzlogon.kumac qui charge 
       automatiquement le fichier concerne ( ker mac mtn vizu ) et annule les 
       macros de cmzmacs pour ne pas qu'il y ait conflit avec celles des dits 
       fichiers (elles ont les meme noms)

       i.e. Si on est sous zoom/pro/src/cmz/vizu par exemple et que l'on fait 
       cmz vizu est charge avec ses kumacs.

       si l'on est n'importe ou ailleurs ( un exo ) cmz herite des kumacs 
       du directory zoom/cmzmacs


        Si l'on fait de l'installatiom a distance on trouve egalement sur la 
        machine source les informations de la machine cible avec des noms du
        style : zoom/zoom_1.24_00/src/cfs/ker_ibm_l7 qui contiendra les source
        pour ibm ( apres un exec mod ibm l7)



BIBLIOGRAPHIE
-------------

[1] CMZ  : Users's Guide & Reference Manual (1.48), CodeME S.A.R.L. & CERN PROGRAM LIBRARY, 1996.
[2] KUIP : Users's Guide  Reference Manual  (2.04), CERN PROGRAM LIBRARY 1102, 1993.
[3] ZOOM : Users's Manuals  & $ZOOM/Help/...
[4] MTN  : MORTRAN User's Guide , CERN, 1979.
<-----/|\------>  ./Help/Programmers/Upgrades/Installation.bak
**************************************************************************
***************************  Installation ********************************
********************  Robert FRANCHISSEUR (1996/02/06) *******************
**************************************************************************

(en cours de modifs) Version 1.24/00


INTRODUCTION
------------

Le logiciel ZOOM ( Zone Optimal Organize Modelling) est constitué d' un noyau 
(kernel) appelé KER, d' un ensemble de 'processeurs' et d' un 'zinit' ecrits 
par l' utilisateur pour décrire son problème et d' un programme de visualisation 
des résultats appelé VIZU (Visualisation Interface for Zoom User).

Dans ce qui suit le terme ZOOM poura représenter aussi bien l'ensemble du logiciel
que le noyau.


Cette notice est destinée à familiariser le "novice" à une installation
et à une utilisation rapide et simple de ZOOM. La convivialité de ce logiciel
faisant qu' il est beaucoup plus facile à utiliser qu' à décrire dans cette notice.

Les logiciels ZOOM et VIZU ont été portés sur les machines suivantes :

 +--------------------+--------------+---------------+
 | Machine            | O.S.         |   Release     |
 +--------------------+--------------+---------------+
 | UNIVAC 11xx        | EXEC 8       |               |
 | HP/Apollo DNxxxx   | Domain/OS    |   10.4.1.1    |
 | HP/Apollo 4xxxt    | Domain/OS    |   10.4.1.2    |
 | HP 9000/7xx        | HP-UX        |   A.09.01     |
 | BULL SPS7          |              |               |
 | BULL DPX2000       | AIX          |   3.2         |
 | SUN Spark          | SunOS        |   4.1_PSR_A   |
 | SUN Spark          | SunOS        |   4.1.3_U1 1  |
 | CRAY Y-MP          | unicos       |   8.0.3.1     |
 | CRAY C9x           | sn4607       |   7.C.3 7.C.4 |
 | IBM RS6000         | AIX          |   3.2         |
 | IBM SP2            | AIX          |   3.2         |
 | DEC Alpha          | OSF1         |   2.0         |
 | SUN Spark          | Solaris      |   5.5.1       |
 | SUN Spark          | Solaris      |   5.6         |
 | Clone P.C.         | Linux        |   2.0.32      |
 +--------------------+--------------+---------------+


L'outil de développement choisi est CMZ ( Code Management system using Zebra) [1]
conçu et développé au CERN. Ce choix permet d'obtenir une grande cohérence 
entre toutes les "interfaces utilisateur" depuis la phase de développement et 
de gestion de versions jusqu' à la visualisation des résultats puisqu' elles sont
toutes basées sur le même langage KUIP (Kit for a User Interface Package) [2].
Ce langage permet d' écrire des macros (kumac) qui constituent l'ensemble des
commandes vues par l' utilisateur qui se retrouve ainsi toujours dans le même environnement.

Par ailleurs, à l' intérieur de CMZ, il n' existe aucune différence dans la syntaxe
des commandes que ce soit pour installer le noyau (KER), VIZU ou lancer l'execution 
d' une simulation.




CONFIGURATION NECESSAIRE
------------------------

Dans ce qui suit nous distingueront deux niveaux distincts d 'installation que nous nomerons
"développeur" ( permettant le developpement du noyau lui-même) et "utilisateur".

La machine sur laquelle l' installation doit être faite doit posséder un compilateur FORTRAN
les librairies 'X Window System' (X11R4 ou +)* et être raccordée au réseau Internet via TCP/IP.

* 'X Window System' est une marque déposée du "Massachusetts Institute of Technology".


Une autorisation du CERN doit être obtenue afin d' obtenir et utiliser leurs libraries.
Pour se faire il faut se connecter au CERN récupérer le fichier cernlib.registration ,
le remplir et le renvoyer par e-mail à cernlib@cernvm.cern.ch à l' aide de la procédure 
suivante :

     ftp asisftp.cern.ch
     (IP address 128.141.202.89,  userid ftp or anonymous)
     ftp> get cernlib.registration
     ftp> quit

Voir en annexe 1 les différents copyrights du CERN.


Espace disque necessaire :                                 1998/05/13

        Librairies CERN :         environ   40 Mo          60 Mo

        ZOOM 
                "Utilisateur"     environ   12 Mo          18 Mo
                "Développeur"     environ   22 Mo          ?

                auquels on ajoutera environ 5 Mo pour l' installation proprement dite.


        Projet UTILISATEUR 
                Suivant la complexité du projet étudié et la quantité de résultats souhaités
                de 2 Mo ( Cellule de Hambourg) à 100 Mo ( Convection naturelle en cavité)


PROCEDURE D' INSTALLATION
-------------------------


        Il suffit de transférer à l' aide de ftp l' arborescence de ZOOM pour la machine
        désirée dans le directory d' accueil :

           cd /directory

           ftp> binary
           ftp> cd /pub/zoom_server
           ftp> get unpack_zip_machine  bin/unpack_zip
           ftp> get gunzip_machine  bin/gunzip
           ftp> mget README*
           ftp> get zoom_x.y_zz_machine.tar.gz zoom.tar.gz
           ftp> quit
           
           où x.y_zz   est le numero de version
           où machine peut être :

           apo :       Apollo m68k running SR10.x
           hpx :       Hewlett-Packard 9000 Series 700 running HP-UX 9.x 
           sun :       Sun SPARCstation running Sun OS 4.1.x
           ibm :       Ibm station running  AIX 3.2
           sol :       Sun SPARCstation running Solaris 5.1.x
           cru :       Cray Y-MP or C9x running Unicos 8.0.3.1
           irs :       IBM RS/6000 running AIX 3.2
           lnx :       Clone P.C. running Linux 2.0.32


           unpack_zip zoom

        Suivant le niveau "développeur" ou "utilisateur" les sources du noyau et de
        VIZU seront ou non incluses.

        On trouvera l' arborescence des fichiers à l' annexe 2.

        A terme il est prévu d'installer ZOOM sur un serveur Word-Wide-Web.


UTILISATION
-----------

VOIR aussi :
> /zoom/Help/Users/00_New_User_Environment_Installation
> /zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ
> /zoom/Help/Users/General/Execution_sur_Site_distant


   "Utilisateur"

        creer un directory user_data sous son home_dir


        Une fois pour toutes on ajoutera les lignes suivantes dans le fichier .profile (Bourne,Korn shells)

           CERN=XXX/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=XXX/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN XXX/cern
           setenv CERN_VER pro
           setenv ZOOM XXX/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

        en remplacant XXX par la bonne arborescence.

        Si, de plus, on veut utiliser la procédure d' exécution à distance, il conviendra d' avoir
        un fichier $HOME/.netrc sur la machine source et un fichier $HOME/.rhosts sur la machine cible
        avec les protections ad hoc.   Le ficher .cshrc est *obligatoire* sur la machine distante.



        L' utilisateur crée un directory par projet et après s' être placé dans ce directory
        exécute cmz

        Une fois dans cet environnement il peut charger un 'canevas'  à l'aide de la commande 

                shell cp /zoom/pro/exos/modele.cmz .
                file modele

        Après avoir édité ses processeurs et son 'zinit' (cf. les autres manuels ZOOM [3]) il lui 
        suffira de taper les commandes :

                 exec mod proc [cpu] [site]
        et 
                 exec mod zinit [cpu] [site]

        
        les arguments optionnels [cpu] et [site] permettant une execution automatique sur 
        une machine distante ( opérationnel sur Apollo uniquement à ce jour)


        La première de ces commandes exécutera MORTRAN [4] ,la compilation Fortran et crééra 
        la librairie des processeurs.

        La seconde exécutera MORTRAN [4] ,la compilation Fortran pour le 'zinit' , l' édition
        de liens avec le noyau , lancera l' exécution du job et une fois celle ci terminée
        générera l'exécutable VIZU correspondant.

        L' utilisateur n' a plus qu' à aller dans le directory contenant son 'zinit' (et les
        fichiers de résultats de son run) et taper la commande :

                vizu

        pour visualiser ses résultats.



   "Développeur"     


        En allant dans dans le directory contenant le noyau et/ou VIZU ($ZOOM/$ZOOM_VER/src/cmz/ker ou
        $ZOOM/$ZOOM_VER/src/cmz/vizu) on exécute cmz puis

                 exec mod [cpu] [site]

        pour mettre à jour la librairie du noyau et/ou de vizu




ANNEXE 1
--------

Copyright CERN, Geneva 1992

Copyright and any other appropriate legal protection of these computer
programs and associated documentation reserved in all countries of the world.

These programs or documentation may not be reproduced and/or redistributed
to any third party by any method without prior written consent of the
Director-General of CERN or his delegate.

Permission for the scientific usage of any programs described herein is
granted apriori to those scientific institutes associated with the CERN
experimental program or with whom CERN has concluded a scientific
collaboration agreement.

Commercial utilisation requires explicit a priori permission from CERN and
will be subjected to payment of a license fee.

These statements are without prejudice to any rights that third parties
may hold in these programs.

CERN welcomes comments concerning the CERNlib software, but undertakes no
obligation for the maintenance of the programs, nor responsability for their
correctness, and accepts no liability whatsoever resulting from the use of
its programs.

Requests for information should be addressed to:


                    CERN Program Library Office
                    CERN-CN Division
                    CH-1211 Geneva 23
                    Switzerland
                    Tel.      +41 22 767 4951
                    Fax.      +41 22 767 7155
                    Bitnet:   CERNLIB@CERNVM
                    DECnet:   VXCERN::CERNLIB (node 22.190)
                    Internet: cernlib@cernvm.cern.ch

ANNEXE 2
--------
Structure des fichiers de ZOOM


zoom/Help                             Comme son nom l'indique
zoom/cmzmacs                          Les kumacs CMZ pour les exos (utilisateurs)
zoom/kumacs                           Les kumacs pour vizu
zoom/user_data                        Les templates files de CMZ
zoom/zoom_1.24_00                     La version pro
zoom/zoom_1.24_00/bin                 Les shells diverses
zoom/zoom_1.24_00/exe                 Mortran ( + vizu sur apollo)
zoom/zoom_1.24_00/exos                La fameuse cellule de Hambourg !
zoom/zoom_1.24_00/lib                 Les librairies ker mtn et vizu
zoom/zoom_1.24_00/mac                 Les macros mtn 
zoom/zoom_1.24_00/out                 Les sorties d' installation
zoom/zoom_1.24_00/src                 Les sources
zoom/zoom_1.24_00/src/car             Les .car
zoom/zoom_1.24_00/src/cfs             Les sources fortran :
zoom/zoom_1.24_00/src/cfs/ker                             pour ker
zoom/zoom_1.24_00/src/cfs/mtn                                  mtn
zoom/zoom_1.24_00/src/cfs/vizu                                 vizu
zoom/zoom_1.24_00/src/cmz             Les cmz files :
zoom/zoom_1.24_00/src/cmz/ker                             pour ker
zoom/zoom_1.24_00/src/cmz/mac                                  mac
zoom/zoom_1.24_00/src/cmz/mtn                                  mtn
zoom/zoom_1.24_00/src/cmz/vizu                                 vizu


NOTA : les directory sous cmz contiennent chacun un cmzlogon.kumac qui charge 
       automatiquement le fichier concerne ( ker mac mtn vizu ) et annule les 
       macros de cmzmacs pour ne pas qu'il y ait conflit avec celles des dits 
       fichiers (elles ont les meme noms)

       i.e. Si on est sous zoom/pro/src/cmz/vizu par exemple et que l'on fait 
       cmz vizu est charge avec ses kumacs.

       si l'on est n'importe ou ailleurs ( un exo ) cmz herite des kumacs 
       du directory zoom/cmzmacs


        Si l'on fait de l'installatiom a distance on trouve egalement sur la 
        machine source les informations de la machine cible avec des noms du
        style : zoom/zoom_1.24_00/src/cfs/ker_ibm_l7 qui contiendra les source
        pour ibm ( apres un exec mod ibm l7)



BIBLIOGRAPHIE
-------------

[1] CMZ  : Users's Guide & Reference Manual (1.48), CodeME S.A.R.L. & CERN PROGRAM LIBRARY, 1996.
[2] KUIP : Users's Guide  Reference Manual  (2.04), CERN PROGRAM LIBRARY 1102, 1993.
[3] ZOOM : Users's Manuals  & /zoom/Help/...
[4] MTN  : MORTRAN User's Guide , CERN, 1979.
<-----/|\------>  ./Help/Programmers/Vizu/Vizu_subroutines_cmzTree
     1   0   VISU                            
     2   1      KUARGS                          
     3   1      PAWINT                          
     4   2         PFINIT                          
     5   2         VZERO                           
     6   2         BLDDAT                          
     7   3            UHTOC                           
     8   3            GETSCH                          
     9   3            CALDAT                          
    10   2         HLIMIT                          
    11   2         MZWORK                          
    12   2         KUINIT                          
    13   2         KUEXIT                          
    14   2         KUTERM                          
    15   2         KUBREK                          
    16   2         PAWDEF                          
    17   2         VECDEF                          
    18   2         HISDEF                          
    19   2         NTUDEF                          
    20   2         ZEBDEF                          
    21   2         FORDEF                          
    22   2         JUMPST                          
    23   2         JUMPX0                          
    24   2         IGINIT                          
    25   2         MZXREF                          
    26   2         SIGINT                          
    27   2         KUSIGM                          
    28   2         KUOPEN                          
    29   2         IGWKTY                          
    30   2         HPLINT                          
    31   2         HERMES                          
    32   2         IGSA                            
    33   2         ISCHH                           
    34   2         PALOGS                          
    35   2         PAWUSR                          
    36   3            OZKUIP                          
    37   3            C_OPEN_OLD_                     
    38   3            C_READ_RC_                      
    39   3            C_READ_                         
    40   3            C_CLOSE_                        
    41   3            INIFILE                         
    42   4               C_OPEN_OLD_                     
    43   4               C_POS_ABSO_                     
    44   4               CUTOL                           
    45   4               C_POS_COURANT_                  
    46   4               KUEXEC                          
    47   3            KUEXEC                          
    48   2         KUEXEC                          
    49   1      KUEXEC                          
    50   1      IGSA                            
    51   1      KUWHAG                          
    52   1      PAEXIT                          

     1   0   MAPCL                           
     2   1      KUPATH                          
     3   1      KUGETI                          
     4   1      KUGETC                          
     5   1      KUGETS                          
     6   1      C_POS_ABSO                      
     7   1      CUTOL                           
     8   1      OZMAPIT                         
     9   2         KUEXEC                          
    10   1      C_POS_COURANT_RC                
    11   1      OZFLECHIT                       
    12   2         KUEXEC                          
    13   2         HRESET                          
    14   2         HFILL                           
    15   2         VMAXA                           
    16   2         VSCALE                          
    17   2         OZARROW                         
    18   3            IZPUSH                          
    19   3            IGQWK                           
    20   3            ISELNT                          
    21   3            OZHCONV                         
    22   4               HBUG                            
    23   3            IPL                             
    24   1      KUEXEC                          

     1   0   CRECELL                         
     2   1      KUGETI                          
     3   1      KUGETC                          
     4   1      KUGETS                          
     5   1      CUTOL                           
     6   1      C_POS_ABSO                      
     7   1      C_POS_COURANT                   
     8   1      OZVECIT                         
     9   2         KUEXEC                          
    10   1      KUEXEC                          
    11   1      C_OPEN_OLD                      
    12   1      MAPINT                          
    13   2         C_POS_ABSO                      
    14   2         LINE_LEN_RC                     
    15   2         C_POS_COURANT_RC                
    16   2         C_POS_COURANT                   
    17   2         CUTOL                           
    18   2         OZMAPIT                         
    19   3            KUEXEC                          
    20   2         C_READ                          
    21   2         OZFLECHIT                       
    22   3            KUEXEC                          
    23   3            HRESET                          
    24   3            HFILL                           
    25   3            VMAXA                           
    26   3            VSCALE                          
    27   3            OZARROW                         
    28   4               IZPUSH                          
    29   4               IGQWK                           
    30   4               ISELNT                          
    31   4               OZHCONV                         
    32   5                  HBUG                            
    33   4               IPL                             
<-----/|\------>  ./Help/Programmers/Zebra/Divisions_DZstore_et_snap
Elles sont definies dans MQINIT.
       Variables standards :   NODV = current division.
                               NODVKE = NODV sauvegarde/restore in subroutines.
**********
Extraits :                     DZStore de fin de run (Hambourg 10 dTime).
**********                     DZSNAP, avant et apres OFRAME.

 MZEND.   Usage statistics for  1 dynamic stores.
 
     Store  0 //      
     -----------------
 
     Division                          Number of times
              Mode Position Max-size   Wiped User-GC Auto-GC Pushd Redcd
 
      1 QDIV1    0      207      223      12       0       0     0     0
      2 QDIV2    1 15816791     2273      10       0       0     0     0
      3 WEZ      1 15818069     1138      60       0       0     0     0
      4 SAVE     1 15818255      162       0       0       0     0     0
     15 system   1 15818655      111       0       0       0     0     0
     16 KEEP     1 15819655        0       0       0       0     0     0
     17 A_1B     1 15839655      297       0       0       0     0     0
     18 MXT      1 15939655     4144       0       0       0     0     0
     19 FRAM     1 15999655     9988       0       1       0     0     0
     20 ZMX      1 16000155      174       0       0       0     0     0
lundi, 25 avril 1994   18:56:29 

*****************************************************************************************************************************

 DZSNAP --- avant Oframe                                                                            OPTIONS : M
                                                                                                                                  
   NAME       LQSTOR NQSTRU  NQREF NQLINK LQMINR LQ2END JQDVLL JQDVSY NQFEND  LOW-1  LOW-N HIGH-1 HIGH-N SYST-1 SYST-N    END
  //      (   C87E4)    137    156    168    164 100156      4     15      4    171    170***********************************

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 1 = QDIV1                       --------------------

          -- Division contains no banks --

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 2 = QDIV2                       --------------------

          -- Division contains no banks --

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 3 = WEZ                         --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 4 = SAVE                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.16 = KEEP                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.17 = A_1B                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.18 = MXT                         --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.19 = FRAM                        --------------------                        

  TV  .     5 15993195(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    1/       2 N/U/O/@O15993212/15993992/15993989/15993195
      . LINKS         0      15993992 TR          0      15993823 CX   15993807 CX                                                
  ...
  TV  .     4 15993569(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    1/       3 N/U/O/@O       0/15994118/15994115/15993569
      . LINKS         0      15994118 TR          0      15994031 CX   15994015 CX                                                
 (LFMV.     1 15993732(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND  150/    0/      50 N/U/O/@O       0/15993793/15993792/15993732
     ** LINKS  15999547 FM   15999183 FM   15999030 FM   15995206 CL   15998325 CL                                                
 (FRM .     1 15993793(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O       0/       0/       0/0       
     ** LINKS  15993732(LFMV                                                                                                      
  CX  .     5 15993807(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O15994141/15995651/15995649/15993807
      . LINKS         0      15995651 SV   15993195 TV                                                                            
 ...
 (CXTB.     2 15993916(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15993931/15993929/15993916
     ** LINKS         0      15993893 CX   15993877 CX                                                                            
 (TPG .     3 15993931(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    3/    2/       3 N/U/O/@O15993861/15993992/15993212/       0
     ** LINKS         0      15993916(CXTB                                                                                        
  TD  .    35 15993952(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    8/    1/       8 N/U/O/@O15994086/       0/       2/15993952
      . LINKS         0      15993953 -    15993954 -    15993955 -    15993957 -    15993959 -                                   
  FI  .    39 15993971(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O15994098/       0/       7/15993971
  TR  .     4 15993992(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/       9 N/U/O/@O       0/15999547/15999543/15993992
      + LINKS         0             0      15993195 TV          0             0      15993971 FI          0                       
  CX  .     3 15994015(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O15995235/15995463/15993877/15994015
      . LINKS         0      15995463 SV   15993569 TV                                                                            
  ...
  FI  .    33 15994728(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15994803/       0/15994602/15994728
  TR  .    13 15994748(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/       9 N/U/O/@O15995440/       0/15994622/15994748
      + LINKS         0             0      15993479 TV          0             0      15994728 FI          0                       
  SV  .     4 15994771(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15994823/15994819/15994771
      . LINKS         0      15994519 CX   15994823 CL                                                                            
  CNSE.     1 15994790(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15994823/15994822/15994790
      . LINKS         0      15994771 SV                                                                                          
  ETA .    32 15994803(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15994907/       0/15994728/15994803
  CL  .     6 15994823(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O15994927/15999030/15999027/15994823
      . LINKS  15994790 CNSE        0             0      15994771 SV          0      15994803 ETA                                 
  ACON.     5 15994859(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15999378/15999373/15994859
      . LINKS         0      15994927 CL   15994823 CL                                                                            
  SV  .     4 15994875(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15994927/15994923/15994875
      . LINKS         0      15994645 CX   15994927 CL                                                                            
  ...
  CX  .     2 15997281(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15998260/15994393/15997281
      . LINKS         0      15998260 SV   15993230 TV                                                                            
 (CXTB.     2 15997304(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15997319/15997317/15997304
     ** LINKS         0      15997281 CX   15997265 CX                                                                            
 (TPG .     3 15997319(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    3/    2/       3 N/U/O/@O       0/15997368/15993230/       0
     ** LINKS         0      15997304(CXTB                                                                                        
  TD  .    11 15997336(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       1 N/U/O/@O15997424/       0/15997210/15997336
      . LINKS         0      15997337 -                                                                                           
  FI  .    12 15997348(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15997436/       0/15997222/15997348
  TR  .     1 15997368(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/       9 N/U/O/@O       0/       0/15997242/15997368
      + LINKS         0             0      15993230 TV          0             0      15997348 FI          0                       
  SV  .     4 15997391(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15997456/15997452/15997391
      . LINKS         0      15995887 CX   15997456 CL                                                                            
  CNSE.     1 15997410(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15997456/15997455/15997410
      . LINKS         0      15997391 SV                                                                                          
  CD  .    10 15997424(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    1/       1 N/U/O/@O15997518/       0/15997336/15997424
1                                                                                                            940425/1856  PAGE    8
      . LINKS         0      15997425 -                                                                                           
  ETA .    11 15997436(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15997530/       0/15997348/15997436
  CL  .    12 15997456(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O15997550/15998472/15998469/15997456
      + LINKS  15997410 CNSE        0             0      15997391 SV          0      15997436 ETA         0                       
  SV  .     4 15997485(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15997550/15997546/15997485
      . LINKS         0      15996273 CX   15997550 CL                                                                            
  CNSE.     1 15997504(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15997550/15997549/15997504
      . LINKS         0      15997485 SV                                                                                          
  ...
  CD  .     1 15998293(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    1/       1 N/U/O/@O       0/       0/15998176/15998293
      . LINKS         0      15998294 -                                                                                           
  ETA .     2 15998305(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15998557/       0/15998188/15998305
  CL  .     3 15998325(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O       0/15998472/15998208/15998325
      + LINKS  15998279 CNSE        0             0      15998260 SV          0      15998305 ETA         0                       
  CNST.     1 15998383(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998472/15998471/15998383
      + LINKS  15998724 FM          0      15998724 FM   15998325 CL   15998208 CL   15998114 CL   15998020 CL                    
  FM  .     3 15998472(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/15998724/15996228/15998472
      . LINKS  15998383 CNST        0      15997456 CL                                                                            
  CNSE.     2 15998509(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15998577/15998544/15998509
      . LINKS         0             0             0      15998525 SV                                                              
  SV  .     4 15998525(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15998577/15998573/15998525
      . LINKS         0      15993893 CX   15998577 CL                                                                            
  CNSE.     1 15998544(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O15998509/15998577/15998576/15998544
  ETA .     1 15998557(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O       0/       0/15998305/15998557
  CL  .     6 15998577(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O15998724/15999183/15999180/15998577
      . LINKS  15998544 CNSE        0             0      15998525 SV          0      15998557 ETA                                 
  CNST.     1 15998635(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998724/15998723/15998635
      . LINKS  15999183 FM          0      15999183 FM   15998472 FM   15996228 CL   15996049 CL                                  
  FM  .     5 15998724(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15998877/15999183/15998577/15998724
      . LINKS  15998635 CNST        0      15996049 CL                                                                            
  CNST.     1 15998788(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998877/15998876/15998788
      . LINKS  15999183 FM          0      15999183 FM   15995716 CL   15995622 CL   15995528 CL                                  
  FM  .     4 15998877(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15999030/15999183/15998724/15998877
      . LINKS  15998788 CNST        0      15995528 CL                                                                            
  CNST.     1 15998941(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999030/15999029/15998941
      . LINKS  15999183 FM          0      15999183 FM   15995206 CL   15995055 CL   15994927 CL   15994823 CL                    
  FM  .     3 15999030(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/15999183/15998877/15999030
1                                                                                                            940425/1856  PAGE   10
      . LINKS  15998941 CNST        0      15994823 CL
  CNST.     1 15999094(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999183/15999182/15999094
      . LINKS  15999547 FM          0             0      15999030 FM   15998877 FM   15998724 FM   15998577 CL                    
  FM  .     3 15999183(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/15999547/15999544/15999183
      . LINKS  15999094 CNST        0      15998577 CL                                                                            
  TABC.     5 15999239(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   25/   25/      10 N/U/O/@O       0/15999415/15999410/15999239
  TABC.     4 15999284(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   25/   25/      10 N/U/O/@O       0/15999415/15999411/15999284
  VAR .     3 15999325(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   21/    1/      22 N/U/O/@O       0/15999415/15999412/15999325
      + LINKS         0      15999030 FM   15998877 FM   15998724 FM   15998577 CL   15996049 CL   15995716 CL                    
  ARRA.     2 15999378(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   21/   21/      22 N/U/O/@O       0/15999415/15999413/15999378
      . LINKS         0      15998244 ACON 15996085 ACON 15995091 ACON 15994859 ACON                                              
  MTAB.     1 15999415(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    5/       0 N/U/O/@O       0/       0/       5/15999415
      . LINKS         0      15999378 ARRA 15999325 VAR  15999284 TABC 15999239 TABC                                              
  CNST.     1 15999458(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999547/15999546/15999458
      . LINKS         0             0      15999183 FM   15999183 FM                                                              
  FM  .     1 15999547(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/       0/       1/15999547
      . LINKS  15999458 CNST        0      15999183 FM   15993992 TR                                                              
  ZCL .     1 15999578(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      32 N/U/O/@O       0/       0/       0/0       
  ZTR .     1 15999620(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      26 N/U/O/@O       0/       0/       0/0       
                                                                                                                                  
 DZSNAP.   -----  Store nb. 0 = //       Division nb.20 = ZMX                         --------------------                        

  ZMX .     5 16000002(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000042/       0/16000144/16000002
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     4 16000042(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000082/       0/16000002/16000042
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     3 16000082(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000122/       0/16000042/16000082
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     2 16000122(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O       0/       0/16000082/16000122
      + LINKS         0             0             0             0             0             0             0                       
  ZMX1.     1 16000144(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    2/       2 N/U/O/@O16000002/       0/       0/0       
 
 MZLINT.  Initialize Link Area  /local/   for Store  0 NL/NS=    20     0
 SORTIE DE OFRAME
***********************************************************************************************************************************
 DZSNAP --- apres Oframe                                                                            OPTIONS : M

   NAME       LQSTOR NQSTRU  NQREF NQLINK LQMINR LQ2END JQDVLL JQDVSY NQFEND  LOW-1  LOW-N HIGH-1 HIGH-N SYST-1 SYST-N    END     
  //      (   C87E4)    137    156    168    164 100156      4     15      4    171    393***********************************     

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 1 = QDIV1                       --------------------                        

 (ADDR.     1      172(ZMX     ) SY/US/IO   40/    0/   0 NL/NS/ND    0/    0/       1 N/U/O/@O       0/       0/       0/0       
 (ADDR.     1      183(ZMX     ) SY/US/IO   40/    0/   0 NL/NS/ND    0/    0/       1 N/U/O/@O       0/       0/       0/0       
 ...
 (ADDR.     1      384(ZMX     ) SY/US/IO   40/    0/   0 NL/NS/ND    0/    0/       1 N/U/O/@O       0/       0/       0/0       

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 2 = QDIV2                       --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 3 = WEZ                         --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb. 4 = SAVE                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.16 = KEEP                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.17 = A_1B                        --------------------                        

          -- Division contains no banks --                                                                                        

 DZSNAP.   -----  Store nb. 0 = //       Division nb.18 = MXT                         --------------------                        

  IC  .     2 15938800(MXT     ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       6 N/U/O/@O       0/15990795/15990793/15938800
      . LINKS         0             0             0      15990795 FACE 15998525 SV                                                
  ...IC...
  IC  .     2 15939640(MXT     ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       6 N/U/O/@O       0/15992005/15992003/15939640
      . LINKS         0             0             0      15992005 FACE 15997485 SV                                                

 DZSNAP.   -----  Store nb. 0 = //       Division nb.19 = FRAM                        --------------------                        

  DELT.     7 15989669(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O15989682/15999547/15999541/15989669
  DELT.     6 15989682(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O       0/15999547/15989669/15989682
  FI  .     9 15989693(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O15989706/15999547/15999540/15989693
  FIZ .     8 15989706(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O15989719/15999547/15989693/15989706
  DIAG.     7 15989719(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O       0/15999547/15989706/15989719
  ETA .     8 15989732(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O       0/15999547/15999539/15989732
  GAM .    11 15989743(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O15989754/15999547/15999537/15989743
  DETA.    10 15989754(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O       0/15999547/15989743/15989754
  OMG .     9 15989765(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O       0/15999547/15999538/15989765
  SIZE.    12 15989778(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       3 N/U/O/@O       0/15999547/15999535/15989778
  ...
  SIZE.    12 15990432(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       5 N/U/O/@O       0/15998724/15990417/15990432
  DELT.     7 15990448(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       9 N/U/O/@O15990468/15998472/15998466/15990448
  DELT.     6 15990468(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       4 N/U/O/@O       0/15998472/15990448/15990468
  FI  .     9 15990483(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       9 N/U/O/@O15990503/15998472/15998465/15990483
  FIZ .     8 15990503(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       9 N/U/O/@O15990523/15998472/15990483/15990503
  DIAG.     7 15990523(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       9 N/U/O/@O       0/15998472/15990503/15990523
  ETA .     8 15990543(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/      10 N/U/O/@O       0/15998472/15998464/15990543
  GAM .    11 15990563(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      10 N/U/O/@O15990583/15998472/15998462/15990563
  DETA.    10 15990583(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      10 N/U/O/@O       0/15998472/15990563/15990583
  OMG .     9 15990603(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/       9 N/U/O/@O       0/15998472/15998463/15990603
  SIZE.    13 15990623(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/      11 N/U/O/@O15990645/15998472/15998460/15990623
  SIZE.    12 15990645(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    1/    1/       5 N/U/O/@O       0/15998472/15990623/15990645
  FACE.     4 15990665(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O       0/15995528/15991170/15990665
      . LINKS         0      15938821 IC          0      15990700 IX   15995528 CL                                                
  FACE.     5 15990683(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O       0/15995716/15991059/15990683
      . LINKS         0      15938842 IC          0      15990700 IX   15995716 CL                                                
  ...
  IX  .     2 15990849(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    1/       6 N/U/O/@O       0/15990870/15990868/15990849
      . LINKS         0      15990870 FACE 15990831 FACE 15990813 FACE 15990795 FACE                                              
  FACE.     2 15990870(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O       0/15999183/15999181/15990870
      . LINKS         0      15990849 IX          0      15990898 IN   15999183 FM                                                
 (MTAM.     2 15990885(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    2/    1/       0 N/U/O/@O       0/       0/15999415/       0
     ** LINKS         0      15990898 IN                                                                                          
  IN  .     5 15990898(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    3/    2/       6 N/U/O/@O       0/15999547/15999543/15990898
      . LINKS         0      15993992 TR   15990870 FACE                                                                          
 (MITR.     5 15990924(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   10/    1/       9 N/U/O/@O       0/15993992/15993987/15990924
     ** LINKS         0             0      15998325 CL   15990721 FACE 15995716 CL   15990683 FACE 15998577 CL                    
  FACE.     3 15990948(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O15990721/15998325/15992453/15990948
      . LINKS         0      15938905 IC          0      15990964 IX   15998325 CL                                                
  IX  .     2 15990964(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    3/    1/       6 N/U/O/@O       0/15990985/15990983/15990964
      . LINKS         0      15990985 FACE 15990948 FACE                                                                          
  ...
  IN  .    17 15991316(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       6 N/U/O/@O       0/15999183/15991384/15991316
      . LINKS         0      15994118 TR   15991299 FACE 15991281 FACE                                                            
  FACE.     2 15991337(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O15990831/15998724/15998722/15991337
      . LINKS         0      15991038 IX          0      15991384 IN   15998724 FM                                                
  FACE.     2 15991355(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O15991281/15998877/15998875/15991355
      . LINKS         0      15991112 IX          0      15991384 IN   15998877 FM                                                
 (MTAM.     2 15991370(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    2/    1/       0 N/U/O/@O       0/       0/15999415/       0
     ** LINKS         0      15991384 IN                                                                                          
  IN  .    16 15991384(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       6 N/U/O/@O15991316/15999183/15999179/15991384
      . LINKS         0      15994370 TR   15991355 FACE 15991337 FACE                                                            
 (MITR.     5 15991406(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    6/    1/       7 N/U/O/@O       0/15994118/15994113/15991406
     ** LINKS         0             0      15995055 CL   15991244 FACE 15995528 CL   15991170 FACE                                
 (MITR.     5 15991429(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    6/    1/       7 N/U/O/@O       0/15994244/15994239/15991429
     ** LINKS         0             0      15995206 CL   15991207 FACE 15995716 CL   15991133 FACE                                
 (MITR.     5 15991452(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    6/    1/       7 N/U/O/@O       0/15994370/15994365/15991452
     ** LINKS         0             0      15995622 CL   15991096 FACE 15996228 CL   15991022 FACE                                
 (MITR.     5 15991475(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    6/    1/       7 N/U/O/@O       0/15994496/15994491/15991475
     ** LINKS         0             0      15995716 CL   15991059 FACE 15998325 CL   15990948 FACE                                
  FACE.     2 15991497(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    3/       3 N/U/O/@O15991170/15995528/15995526/15991497
      . LINKS         0      15939052 IC          0      15991563 IN   15995528 CL                                                
  ...
 (MITR.     5 15992688(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    6/    1/       7 N/U/O/@O       0/15997368/15997363/15992688
     ** LINKS         0             0      15998325 CL   15992453 FACE 15998208 CL   15992435 FACE                                
 (LFMV.     2 15992855(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND  150/    0/     150 N/U/O/@O       0/15993180/15993178/15992855
     ** LINKS  15999547 FM   15999183 FM   15998577 CL   15995528 CL   15997456 CL   15996738 TR   15996612 TR                    
 (LOTH.     1 15993165(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND  150/    0/       0 N/U/O/@O       0/15993180/15993179/15993165
     ** LINKS  15999547 FM   15999183 FM   15998877 FM   15995716 CL   15998325 CL                                                
 (FRM .     1 15993180(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    5/    5/       0 N/U/O/@O       0/       0/       0/0       
     ** LINKS  15993165(LOTH 15992855(LFMV                                                                                        
  TV  .     5 15993195(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    1/       2 N/U/O/@O15993212/15993992/15993989/15993195
      . LINKS         0      15993992 TR   15989693 FI   15993823 CX   15993807 CX                                                
  ...
1                                                                                                            940425/1856  PAGE   19
  TV  .     4 15993569(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    1/       3 N/U/O/@O       0/15994118/15994115/15993569
      . LINKS         0      15994118 TR   15989822 -    15994031 CX   15994015 CX                                                
 (LFMV.     1 15993732(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND  150/    0/      50 N/U/O/@O       0/15993793/15993792/15993732
     ** LINKS  15999547 FM   15999183 FM   15999030 FM   15995206 CL   15998325 CL                                                
 (FRM .     1 15993793(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       0 N/U/O/@O       0/       0/       0/0       
     ** LINKS  15993732(LFMV                                                                                                      
  CX  .     5 15993807(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15995651/15994409/15993807
      . LINKS         0      15995651 SV   15993195 TV   15938842 IC                                                              
  CX  .     4 15993823(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15998260/15994393/15993823
      . LINKS         0      15998260 SV   15993195 TV   15938863 IC                                                              
 (CXTB.     2 15993846(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15993861/15993859/15993846
     ** LINKS         0      15993823 CX   15993807 CX                                                                            
 (TPG .     4 15993861(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    3/    2/       2 N/U/O/@O       0/15993992/15993212/       0
     ** LINKS         0      15993846(CXTB                                                                                        
  CX  .     4 15993877(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15995463/15994015/15993877
      . LINKS         0      15995463 SV   15993212 TV   15938821 IC                                                              
  CX  .     2 15993893(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15998525/15998523/15993893
      . LINKS         0      15998525 SV   15993212 TV   15938800 IC                                                              
 (CXTB.     2 15993916(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15993931/15993929/15993916
     ** LINKS         0      15993893 CX   15993877 CX                                                                            
 (TPG .     3 15993931(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    3/    2/       3 N/U/O/@O15993861/15993992/15993212/       0
     ** LINKS         0      15993916(CXTB                                                                                        
  TD  .    35 15993952(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    8/    1/       8 N/U/O/@O15994086/       0/       2/15993952
      . LINKS         0      15993953 -    15993954 -    15993955 -    15993957 -    15993959 -                                   
 (FI  .    39 15993971(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       2 N/U/O/@O15994098/       0/       7/15993971
  TR  .     4 15993992(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/       9 N/U/O/@O       0/15990898/15990896/15993992
      F LINKS         0             0      15993195 TV          0      15990924(MITR 15989693 FI   15989765 OMG                   
  CX  .     3 15994015(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O15993877/15995463/15995235/15994015
      . LINKS         0      15995463 SV   15993569 TV   15938968 IC                                                              
  ...
  CX  .     2 15994661(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       2 N/U/O/@O       0/15995107/15995105/15994661
      . LINKS         0      15995107 SV   15993479 TV   15939136 IC                                                              
 (CXTB.     2 15994684(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15994699/15994697/15994684
     ** LINKS         0      15994661 CX   15994645 CX                                                                            
 (TPG .     3 15994699(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    3/    2/       3 N/U/O/@O       0/15994748/15993479/       0
     ** LINKS         0      15994684(CXTB                                                                                        
  TD  .    29 15994716(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    1/       1 N/U/O/@O15995010/       0/15994590/15994716
      . LINKS         0      15994717 -                                                                                           
 (FI  .    33 15994728(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15994803/       0/15994602/15994728
  TR  .    13 15994748(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/       9 N/U/O/@O       0/15991713/15991711/15994748
      F LINKS         0             0      15993479 TV          0      15991758(MITR 15990132 FI   15990228 OMG                   
  SV  .     4 15994771(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15994823/15994819/15994771
      . LINKS         0      15994519 CX   15994823 CL   15990178 -                                                               
  CNSE.     1 15994790(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15994823/15994822/15994790
      . LINKS         0      15994771 SV                                                                                          
 (ETA .    32 15994803(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15994907/       0/15994728/15994803
1                                                                                                            940425/1856  PAGE   21
  CL  .     6 15994823(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O       0/15999030/15994927/15994823
      . LINKS  15994790 CNSE 15991610 FACE        0      15994771 SV          0      15990171 ETA  15990190 GAM                   
  ACON.     5 15994859(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15999378/15999373/15994859
      . LINKS         0      15994927 CL   15994823 CL                                                                            
  SV  .     4 15994875(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15994927/15994923/15994875
      . LINKS         0      15994645 CX   15994927 CL   15990177 -                                                               
  CNSE.     1 15994894(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15994927/15994926/15994894
      . LINKS         0      15994875 SV                                                                                          
  ...
  CNSE.     1 15998162(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15998208/15998207/15998162
      . LINKS         0      15998143 SV                                                                                          
  CD  .     2 15998176(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    1/       1 N/U/O/@O15998293/       0/15998082/15998176
      . LINKS         0      15998177 -                                                                                           
 (ETA .     3 15998188(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15998305/       0/15998094/15998188
  CL  .     4 15998208(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O15998114/15998472/15998325/15998208
      + LINKS  15998162 CNSE 15992435 FACE        0      15998143 SV          0      15990543 ETA  15990563 GAM                   
  ACON.     2 15998244(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   11/    1/       2 N/U/O/@O       0/15999378/15999376/15998244
1                                                                                                            940425/1856  PAGE   27
      + LINKS         0      15998325 CL   15998208 CL   15998114 CL   15998020 CL   15997926 CL   15997832 CL                    
  SV  .     4 15998260(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15998325/15998321/15998260
      . LINKS         0      15997281 CX   15998325 CL   15990543 ETA                                                             
  CNSE.     1 15998279(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15998325/15998324/15998279
      . LINKS         0      15998260 SV                                                                                          
  CD  .     1 15998293(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    1/       1 N/U/O/@O       0/       0/15998176/15998293
      . LINKS         0      15998294 -                                                                                           
 (ETA .     2 15998305(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O15998557/       0/15998188/15998305
  CL  .     3 15998325(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O15998208/15998472/15998469/15998325
      + LINKS  15998279 CNSE 15992453 FACE        0      15998260 SV          0      15990543 ETA  15990563 GAM                   
  CNST.     1 15998383(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998472/15998471/15998383
      + LINKS  15998724 FM          0      15998724 FM   15998325 CL   15998208 CL   15998114 CL   15998020 CL                    
  FM  .     3 15998472(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15996228/15998724/15998721/15998472
      + LINKS  15998383 CNST 15991891 FACE 15998325 CL   15992482 IN          0      15990448 DELT 15990483 FI                    
  CNSE.     2 15998509(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O       0/15998577/15998544/15998509
      . LINKS         0             0             0      15998525 SV                                                              
  SV  .     4 15998525(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    4/    2/       3 N/U/O/@O       0/15998577/15998573/15998525
      . LINKS         0      15993893 CX   15998577 CL   15989865 ETA                                                             
  CNSE.     1 15998544(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    6/    1/       2 N/U/O/@O15998509/15998577/15998576/15998544
 (ETA .     1 15998557(FRAM    ) SY/US/IO   40/    0/   0 NL/NS/ND    1/    1/       1 N/U/O/@O       0/       0/15998305/15998557
  CL  .     6 15998577(FRAM    ) SY/US/IO    0/ A001/   0 NL/NS/ND    9/    5/      15 N/U/O/@O       0/15999183/15998877/15998577
      + LINKS  15998544 CNSE 15990795 FACE        0      15998525 SV          0      15989865 ETA  15989877 GAM                   
  CNST.     1 15998635(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998724/15998723/15998635
      . LINKS  15999183 FM          0      15999183 FM   15998472 FM   15996228 CL   15996049 CL                                  
  FM  .     5 15998724(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15999030/15999183/15999180/15998724
      + LINKS  15998635 CNST 15991337 FACE 15998472 FM   15991920 IN          0      15990271 DELT 15990299 FI                    
  CNST.     1 15998788(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15998877/15998876/15998788
      . LINKS  15999183 FM          0      15999183 FM   15995716 CL   15995622 CL   15995528 CL                                  
  FM  .     4 15998877(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15998577/15999183/15999030/15998877
      + LINKS  15998788 CNST 15991355 FACE 15995716 CL   15991563 IN          0      15989945 DELT 15989976 FI                    
  CNST.     1 15998941(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999030/15999029/15998941
      . LINKS  15999183 FM          0      15999183 FM   15995206 CL   15995055 CL   15994927 CL   15994823 CL                    
  FM  .     3 15999030(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O15998877/15999183/15998724/15999030
      + LINKS  15998941 CNST 15991299 FACE 15995206 CL   15991713 IN          0      15990106 DELT 15990132 FI                    
  CNST.     1 15999094(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999183/15999182/15999094
      . LINKS  15999547 FM          0             0      15999030 FM   15998877 FM   15998724 FM   15998577 CL                    
  FM  .     3 15999183(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/15999547/15999544/15999183
      + LINKS  15999094 CNST 15990870 FACE 15998724 FM   15991384 IN          0      15989792 DELT 15989820 FI                    
  TABC.     5 15999239(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   25/   25/      10 N/U/O/@O       0/15999415/15999410/15999239
  TABC.     4 15999284(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   25/   25/      10 N/U/O/@O       0/15999415/15999411/15999284
  VAR .     3 15999325(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   21/    1/      22 N/U/O/@O       0/15999415/15999412/15999325
      + LINKS         0      15999030 FM   15998877 FM   15998724 FM   15998577 CL   15996049 CL   15995716 CL                    
  ARRA.     2 15999378(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   21/   21/      22 N/U/O/@O       0/15999415/15999413/15999378
      . LINKS         0      15998244 ACON 15996085 ACON 15995091 ACON 15994859 ACON                                              
  MTAB.     1 15999415(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    5/    5/       0 N/U/O/@O       0/       0/       5/15999415
      . LINKS         0      15999378 ARRA 15999325 VAR  15999284 TABC 15999239 TABC                                              
  CNST.     1 15999458(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND   33/    1/      66 N/U/O/@O       0/15999547/15999546/15999458
      . LINKS         0             0      15999183 FM   15999183 FM                                                              
  FM  .     1 15999547(FRAM    ) SY/US/IO    0/ A000/   0 NL/NS/ND   13/   12/      21 N/U/O/@O       0/       0/       1/15999547
      + LINKS  15999458 CNST        0      15999183 FM   15990898 IN          0      15989669 DELT 15989693 FI                    
  ZCL .     1 15999578(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      32 N/U/O/@O       0/       0/       0/0       
  ZTR .     1 15999620(FRAM    ) SY/US/IO    0/    0/   0 NL/NS/ND    0/    0/      26 N/U/O/@O       0/       0/       0/0       
                                                                                                                                  
 DZSNAP.   -----  Store nb. 0 = //       Division nb.20 = ZMX                         --------------------                        

1                                                                                                            940425/1856  PAGE   28
  ZMX .     5 16000002(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000042/       0/16000144/16000002
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     4 16000042(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000082/       0/16000002/16000042
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     3 16000082(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O16000122/       0/16000042/16000082
      + LINKS         0             0             0             0             0             0             0                       
  ZMX .     2 16000122(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND   20/   10/      10 N/U/O/@O       0/       0/16000082/16000122
      + LINKS         0             0             0             0             0             0             0                       
  ZMX1.     1 16000144(ZMX     ) SY/US/IO    0/    0/   0 NL/NS/ND    2/    2/       2 N/U/O/@O16000002/       0/       0/0       

<-----/|\------>  ./Help/Programmers/Zebra/kuip_Zebra.flow
+DECK,KIINIT.
*CMZ :  2.05/02 27/04/94  12.42.30  by  Alfred Nathaniel
*-- Author :    Alfred Nathaniel   25/08/92
      SUBROUTINE KIINIT(NWORDS)

      INTEGER NWORDS

*
* Create division and link area
*
      MINDIV=NWORDS
      MAXDIV=NWPAW
      CALL MZDIV(IXPAWC,IXKUIP,'KUIP Div',MINDIV,MAXDIV,'R')
      CALL MZLINK(IXPAWC,'/KCLINK/',LTOP,LCEL,LLAST)
      LLAST=0
*
* Clear the temporary vector bank addresses
*
      DO 10 I=1,MAXLVA
        LVADDR(I)=0
10    CONTINUE
      NVADD=0
      TVECFL=.TRUE.
      CALL MZLINK(IXPAWC,'/KCVADD/',LVADDR(1),LVADDR(MAXLVA),LVADDR(1))
*
* Define bank format
*
      CALL MZFORM('TOP','-I',IOCEL)
      CALL MZFORM('NAME','9H *H',IONAME)
      CALL MZFORM('PAR','*H 2H *H',IOPAR)
      CALL MZFORM('PARV','-I',IOPARV)
      CALL MZFORM('VEC','-I',IOVEC)
      CALL MZFORM('VECN','9H 1I -F',IOVECN)
*
* Create and fill Top CEL Bank
*
      NPAR=0
      NS=3
      NL=NS+1+NPAR
      ND=5
      CALL MZBOOK(IXKUIP,LTOP,LTOP,1,'TOP',NL,NS,ND,IOCEL,0)
      NDOWN=0
      NMAPAR=0
      IENBL=1
      IQ(LTOP+1)=NDOWN
      IQ(LTOP+2)=NPAR
      IQ(LTOP+3)=NMAPAR
      IQ(LTOP+4)=IENBL
      IQ(LTOP+5)=0
*
* Create and fill top LIST bank
*
      NS = 1
      NL = 1
      ND = 1
      CALL MZBOOK(IXKUIP,LLIST,LLIST,1,'TLST',NL,NS,ND,2,0)
      IQ(LLIST+1) = 0
*
* Create the root address for Vectors and the '?' vector
*
      NS=1
      NL=NS
      ND=0
      CALL MZBOOK(IXKUIP,LVEC,LVEC,1,'VEC',NL,NS,ND,IOVEC,0)
      NUMVEC=0
      LENGTH(1)=100
      LENGTH(2)=1
      LENGTH(3)=1
      CALL KUVCRE('?','R',LENGTH,LLOW,LHIGH)
<-----/|\------>  ./Help/Remue_meninges
====================================================================================
====================================================================================
============= Idees avant ecremage, elaboration, paufinage ... =====================
====================================================================================
====================================================================================

VIZU/Help
=========(Al1 16/05/95)
Prevoir un point d'entree de processeur ProForma (!) structuré, du genre :
par couche : modele, equations(?) references, environnement.
             Connections (Edge_types prevues, extensions...)
et recuperation automatique des PW bank symbols.
   => dans ot2cmf, on construit un user'help KUIPz.
 (fait dans Futura)

ZOOM/Ker
========(Al1 16/05/95)
Pour le prbleme de recherche de valeurs propres :
    |            |      |
    |  A-Lambda  |  B   |
    |------------|------|
    |            |      |   , on pourrait prevoir un rangement
    |  C+        |  D   |   semblable au traitement des diag nulles
    |            |      |   et un algorithme de recursion sur la valeur de Lambda
toutes matrices constantes : mode Lambda.
Evidemment, ça conduirait les utilisateurs a preferer la forme A, B à A-1B ...
(avec en prime un O_Eta_Eta correct).
(a etayer par Woodburry)

Matrix Handler
==============(Al1 16/05/95)
Notations :   Matrix_ A[dim1,dim2](indices en +)
              A[i,j]     A[*,j] == < A |j
              A[i,*] == | A >i    A[*,*]
              A[i,j](k) ou A[i,j]_k

              A[*,*] = B[*,*](.)C[*,*];

  Vecteurs    |x> <x| ou x[*] x_t[*]   <x|y>

( ou on impose une seule operation par instruction et la definition de toute matrice
resultat, ou on prevoit de creer les bank de travail intermediaires );
(les deux? bon, d'accord).

Lift_matrix A under (,);  Loft_matrix A; Drop_matrix A;
 Drop_work_space; ou comme pour les derivees, un bloc < > de calcul;
Rq programmer's : verif comme JYG<> : on pose les operations, avec l'entree <;
on effectue les verifs associees a >; [solution dite spaghetti]
<-----/|\------>  ./Help/Requisits
******************************************************************************
******************************************************************************
***  Ce que l'on aimerait avoir (et donc faire ou faire faire ) **************
******************************************************************************
******************************************************************************

==========================================
Un qualifieur de Plug : (Al1 & JYG Avril 96)

C-Plug Face-1:liste;

Ca a l'avantage de decoupler le numero d'une semantique variable selon les exos.
 C'EST FAIT Futura

==========================================
Feature : Al1 c'est bien plante en ecrivant :
skip thru tv(ltv)/cx(lcx) (JoCx=1,*)/tv(ltv)
<  etc
>;
En pensant (naivement) que cette boucle ne recuperait QUE ce qui etait connecte
dans Zinit a ce transfert. Or - bien sur - ls CX tombe sur un certain TV d'une 
horizontal chain et le skip la continue ...
Je serais donc pour INTERDIRE l'occurence d'un :
skip thru TV                 skip thru SV
                apres un
skip ou get CX               skip ou get CX
car l'effet (sur la creation de matrice) peut n'etre pas evident.

vendredi 05/04/1996
=================(Al1)
 Il va falloir trouver un algorithme plus fin du calcul d'espace par
division. Des Candidats ?  (MQINIT)
<-----/|\------>  ./Help/Sensitivity_proposal
###################################################################
###################################################################
########## Matrix and Sensitivity Analysis in VIZU ################
#################( proposal )######################################
###################################################################
(toujours pas commencé le 02/01/97, mais il n'y a eu aucun echo ...)

                    EN COURS DE REDACTION ( Al1, mardi 19/12/1995 )
Menus :
+++++++

Menu sous Zeus : Matrix[Help : produces a pad with matrix info : list of Tr.]
                 Rq : on aura interet a sortir du sty g et faire
                 /zeus/matrix/help qui ouvrira un widget que l'on peut conserver.
suivants :       Matrix  :
                 Matrix/Definition : Keywrds : status : restart,iterate,back,clear
                                               list of raw to keep
                                                       col
                                               triplet  First Inc, Inc, Nbr of INc
                                               submatrix : sub cplg 
!!! Rq Faut-il imaginer une sous matrice construite par des moyennes de coefs ?

                 Matrix/Analysis :
                                /Algebraic    : eig, normalisation diag a 1,+tard RouthHurwitz...?
      (jusqu'a Futura, ce module reste identique a celui de la prcedente version)
                                /Gains        : Sub-List of component[s]
                                              : time dependance : dTime,2./dtime,Ln(dTime),
                                                                           time,hist,inc
                                              : type :SubG,OneVList,Hierarchical,Cumul
                                /Sensitivity  : Sub-List of component[s]
                                              : time dependance : dTime,2./dtime,Ln(dTime),
                                                                           time,hist,inc
                                              : type :SubG,OneVList,Hierarchical,Cumul

###################################################################
      +++++++ SubG +++++++++++++++++++++++ 
###################################################################

I - Timbres postes format .  Listes ignored. Mx (Time, hist, dTime, ITime)
          |-------------------------|
          | \                       |
          |   \                     | ==> Gains (cad sous matrices de gains) 
          |     \                   |
          |       \                 |     pour les Tr choisis par /Definition.
          |         \               |
          |           \             |
          |             \           |
          |               \         |
     J->  |    [ ]          \       |                                           [SubG]
          |                   \     |
          |                     \   |
          |---------------------- \ |
            ^    I
            L-> sous-gains, cad gains de la sous matrice.
   => on a ainsi l'évolution des gains dus a l'elimination.



###################################################################
     +++++++ OneVList ++++++++++++++++++++ 
###################################################################

II - gains d'un Tr versus les autres de la liste (dans l'ordre de la liste (Monitoring List)).
     (Hovmoeller plot en Time ou dTime)                                          [OneVList]

###################################################################
     +++++++ Hierachical +++++++++++++++++
###################################################################

III- une liste de couples de Tr ordonnés en fonction du gain des couples a un instant choisi.
     (Hovmuller plot en Time ou dTime)                                          [Hierarch]
     Premiere liste : y mettre le numero de l'increment pour lequel l'ordre des gains sera determine
                      par leur hierarchie.
     Deuxieme       : 0  => toute la liste.
                      liste => liste des cardinaux retenus de la liste complete (imprimee).

###################################################################
     +++++++ Cumul +++++++++++++++++++++++ 
###################################################################

IV-  Sous gains cumules en éliminant un à un chaque  nouveau Tr de la liste
     ex : gain entre (7.2) quand on elimine ceux de la liste 1-8.14.6
     Hovmuller plot en time ou dTime.                                           [Cumul]


===========================================================
====   Avancement des Travaux pour VIZU Futura ============
===========================================================

  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.


Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.
       ( voir de l'interet d'incorporer le MDMX en standard )
<-----/|\------>  ./Help/Suggestions
   Prière de les consigner, datées ici même.

 Macro CMZ
===========
  + pouvoir forcer de compiler des decks, ou au moin des patch. Pour
aux moin deux raisons : - en cas de "plantage" ou bug
                        - vue la gestion rustique des patch "librairies"
(en plus des patch /proc et /zinit) , il est extrement penible de sortir
d'une situation dans laquelle on a repondu Y a Ok to update lib ?
exemple :
exe modif
Ok to update lib ? Y  <== funeste erreur
exe modif atmlib
 MKALL: Library oa_demo/oa_demo.lib up to date

   JLD  le 10/05/94

Reponse (non satisfaisante mais on va y reflechir !) Robert FRANCHISSEUR (1994/07/08)

il suffit dans ce cas d'effacer la librairie ( she dlf oa_demo/oa_demo.lib )
mais ca recompilera le tout ( c'est la punition pour la "funeste erreur" )

A present avec les nouvelles KUMACS on recompile en fonction de la date des .bin
ce qui resout le pb. precedent.


===========

Macros PDL-000
==============
   A partir du point d'entree R (ou S pour les TR) la division de travail
est la division standard (i.e. 2). Si l'on doit alors creer un block d'une
espece repertoriee (ayant donc sa place dans l'arbre,avec des contraintes
de division), il faut changer de division; exemple d'un appendice de TD-bank :

implicit access to bank CD(LCD);
declare class CD;
 rlink     wght                              <==== link de reference du TD vers le WGHT
                in class cd;
 local_var capa
                in class CD;
end declare class CD;
!
declare class wght;
 local_var numtv,
           weight([numtv])
                in class wght;
 link_var  flux([numtv])
                in class wght;
end declare class wght;
;
   ...................................................

   "dans le point d'entree R : creation du WGHT"

!switch to FRAM division in order to create WGHT bank in the right place
NODKE = NODV; NODV = NOFRAM;
" "SET .NUMTV FOR WGHT = NTV;
" "LIFT LWGHT OF CLASS WGHT UNDER (2,0);      <===== le WGHT est cree dans la chaine lineaire des TD
" "@LCD@CD@WGHT@ = LWGHT;
!Restore current division
NODV=NODKE;  

CONCLUSION :
----------
  Il faudrait au moins une instruction specifique pour creer les blocs description,
avec changement de division implicite. Pour les autres blocks, je ne sais pas.

   JYG le 3/06/94
=======================

PDL (0)
======

 Faire une macro 'set D-matrix flag' qui elimine ce genre de commande :
  CALL SBIT1(IQ(LTR),2); "Set D-Matrix flag"
&'Set D_Mx flag'='CALL SBIT1(IQ(LTR),IODMX);'
&'Set D_Matrix flag'='CALL SBIT1(IQ(LTR),IODMX);'
;
&'Set K_Tr flag'='CALL SBIT1(IQ(LTR),IOKTR);'
;
&'Set Pseudo1_K_Tr flag'='CALL SBIT1(IQ(LTR),IOK2TR);'
&'Set K1_Tr flag'='CALL SBIT1(IQ(LTR),IOK2TR);'
;
&'Set Pseudo2_K_Tr flag'='CALL SBIT1(IQ(LTR),IOK3TR);'
&'Set K2_Tr flag'='CALL SBIT1(IQ(LTR),IOK3TR);'
                             en DEV, OK ?(Al1)
  JYG le 3/06/94  (reponse Al1)
====================

DECLARE.mac
===========(Al1 vendredi 03/06/1994)

 Y aurait-il moyen de diagnostiquer les 
set .Machin  for Truc = ...
 quand malencontreusement il n existe pas de Var[Machin] ???


mardi 20/09/1994
===============(JYG)
  Pointeurs sur SZ Banks de MXT et MXR  : il suffit de generer :
&'@#@mt@' = '@#1@mt.#1.@'
&'+OMT.#.' = '+OMT'
&'+OMT.#.SR'='-0_(#1.MT).Nb_St_BRows-4'
 au lieu de :
&'+OMTSC'='-(MT).VR.Nb_St_BRows-4-1  '

  Pour ZBM/ker :  Macro
  DoNext LADR=LFirst < ;>; ::> Loop<LADR=LFirst; ... ;LADR=NEXT(LADR)>;


jeudi 23/01/1997
===============(Al1)
 Il serait utile de pouvoir creer des Var_Linked, pointant sur un tableau (LTab)
a l'aide d'un seul link, et donnant acces aux valeurs du tableau.
Exemple :
Var_Linked Fi_TRProcName_TV                              reserve une variable protegee ODimFi_TRProcName_TV
...
link  Fi_TRProcName_TV to Fi_TV du processeur en question              lui donne sa valeur et stocke LTab
                                                                       dans LQ(LCD-OBIASFi_TRProcName_TV)...
utilisation :
    Fi_Tr(i) => Q(LQ(OBIASFi_TRProcName_TV)+i-1)
    check array entre i=1 et ODimFi_TRProcName_TV

Var_Linked Fi_TRProcName_TV(n)                              reserve n variable protegee ODimFi_TRProcName_TV(n)
...
link  Fi_TRProcName_TV(i) to Fi_TV d'un processeur          stocke LTab  dans LQ(LCD-OBIASFi_TRProcName_TV-i+1)...
utilisation :
    Fi_Tr(i/k) => Q(LQ(OBIASFi_TRProcName_TV+k-1)+i-1)
    check array entre i=1 et ODimFi_TRProcName_TV(k) et k.le.n

jeudi 26/03/1998
==============(Al1)
de l'interet d'une variable 
TimCar(10?) equivalent dTimeNxt, TimcarC, TimcarT, ...
 dans le common /otime/ qui permettrait d'echanger de l'information entre les processeurs et
le ZSTEER pour gerer les variations de dTime.

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)
implementé le lundi 30/03/1998. pour test prelim.
Il faut prevoir un tableau des temps en // a un tableau d'identification de l'objet/proc
et donc des macros.

mardi 11/08/1998
==============(Al1)
 Ou' on retrouve un pb recurent concernant les transferts cumules.
 On rapelle que Fi est calcule, et dFi = dE = Sum_dt[Fi.dTau]
 Qu'en est-il des Tr_cum ayant une matrice D ? A verifier, mais il se pourrait que
dans la D_loop, dFi soit bien dFi, et qu'il ne devienne dE que dans la Step_Advance.
Finalement, seules les cellules sont concernees; on pourrait garder a dFi son
contenu standard et avoir dE en plus/a part ?
Il semble que a l'heure dite, Fiz des tr_cum reste nul. Pourquoi ?
On en profite pour relancer un tour de table sur les initialisations possibles de Fi :
a partir de Zinit (Fiz), des S_entry, et de Resume from. Faire l'etat des possibilites.
(Rq: ONCO remplit Fi et FIz en se debarassant de FzT de Zinit.)

vendredi 08/01/1999
=================(Al1)
En ce qui concerne la gestion du pas de temps (dTime, Time_char()), il serait judicieux
de prevoir une gestion a la sortie de la D_loop et non a la fin du pas, car alors, on est en retard.
La determination de Time_char serait faite dans les K_Entries de cellules (appeles pendant la D_loop)
et en fin de D_loop, on appellerait un point d'entree DZSTEER de Zinit. On aurait alors les contraintes
a jour avant le step_advance.
<-----/|\------>  ./Help/TexDoc -> ../TexDoc
<-----/|\------>  ./Help/Users/00_New_User_Environment_Installation
**************************************************************************     .
***************************  Installation ********************************
********************  Robert FRANCHISSEUR (1996/07/26) *******************
**************************************************************************


VOIR aussi :
> $ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ
> $ZOOM/Help/Programmers/Upgrades/Installation
> $ZOOM/Help/Users/General/Execution_sur_Site_distant

   "Utilisateur Welcomme"

        Merci d' avoir choisi ZOOM ...
        All rites reversed.



    1)  creer un directory user_data sous son home_dir


    2)  Une fois pour toutes on ajoutera les lignes suivantes dans le fichier
        .profile (Bourne,Korn shells)

           CERN=XXX/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=XXX/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN XXX/cern
           setenv CERN_VER pro
           setenv ZOOM XXX/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

        en remplacant XXX par la bonne arborescence ( souvent ~robert :-)).

        Si, de plus, on veut utiliser la procédure d' exécution à distance, il 
        conviendra d' avoir un fichier $HOME/.netrc sur la machine source et un 
        fichier $HOME/.rhosts sur la machine cible avec les protections ad hoc. 
        Le ficher .cshrc est *obligatoire* sur la machine distante.


        L' utilisateur crée un directory par projet et après s' être placé dans 
        ce directory exécute cmz

        Une fois dans cet environnement il peut charger un 'canevas'  à l'aide 
        des commandes :

                shell cp $ZOOM/pro/exos/modele.cmz .
                file modele

        Après avoir édité ses processeurs et son 'zinit' (cf. les autres manuels 
        ZOOM [3]) il lui suffira de taper les commandes :

                 exec mod proc [cpu] [site]
        et 
                 exec mod zinit [cpu] [site]

        
        les arguments optionnels [cpu] et [site] permettant une execution 
        automatique sur une machine distante ( demander gentiment a Ribs )


        La première de ces commandes exécutera MORTRAN [4] ,la compilation 
        Fortran et crééra la librairie des processeurs.

        La seconde exécutera MORTRAN [4] ,la compilation Fortran pour le 'zinit',
        l' édition de liens avec le noyau , lancera l' exécution du job et une 
        fois celle ci terminée générera l'exécutable VIZU correspondant.

        L' utilisateur n' a plus qu' à aller dans le directory contenant son 'zinit'
        (et les fichiers de résultats de son run) et taper la commande :

                vizu

        pour visualiser ses résultats.


BIBLIOGRAPHIE
-------------

[1] CMZ  : Users's Guide & Reference Manual (1.48), CodeME S.A.R.L. & CERN PROGRAM LIBRARY, 1996.
[2] KUIP : Users's Guide  Reference Manual  (2.04), CERN PROGRAM LIBRARY 1102, 1993.
[3] ZOOM : Users's Manuals  & $ZOOM/Help/...
[4] MTN  : MORTRAN User's Guide , CERN, 1979.
<-----/|\------>  ./Help/Users/00_New_User_Environment_Installation.bak
**************************************************************************     .
***************************  Installation ********************************
********************  Robert FRANCHISSEUR (1996/07/26) *******************
**************************************************************************


VOIR aussi :
> $ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ
> $ZOOM/Help/Programmers/Upgrades/Installation
> $ZOOM/Help/Users/General/Execution_sur_Site_distant

   "Utilisateur Welcomme"

        Merci d' avoir choisi ZOOM ...
        All rites reversed.



    1)  creer un directory user_data sous son home_dir


    2)  Une fois pour toutes on ajoutera les lignes suivantes dans le fichier
        .profile (Bourne,Korn shells)

           CERN=XXX/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=XXX/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN XXX/cern
           setenv CERN_VER pro
           setenv ZOOM XXX/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

        en remplacant XXX par la bonne arborescence ( souvent ~robert :-)).

        Si, de plus, on veut utiliser la procédure d' exécution à distance, il 
        conviendra d' avoir un fichier $HOME/.netrc sur la machine source et un 
        fichier $HOME/.rhosts sur la machine cible avec les protections ad hoc. 
        Le ficher .cshrc est *obligatoire* sur la machine distante.


        L' utilisateur crée un directory par projet et après s' être placé dans 
        ce directory exécute cmz

        Une fois dans cet environnement il peut charger un 'canevas'  à l'aide 
        des commandes :

                shell cp /zoom/pro/exos/modele.cmz .
                file modele

        Après avoir édité ses processeurs et son 'zinit' (cf. les autres manuels 
        ZOOM [3]) il lui suffira de taper les commandes :

                 exec mod proc [cpu] [site]
        et 
                 exec mod zinit [cpu] [site]

        
        les arguments optionnels [cpu] et [site] permettant une execution 
        automatique sur une machine distante ( demander gentiment a Ribs )


        La première de ces commandes exécutera MORTRAN [4] ,la compilation 
        Fortran et crééra la librairie des processeurs.

        La seconde exécutera MORTRAN [4] ,la compilation Fortran pour le 'zinit',
        l' édition de liens avec le noyau , lancera l' exécution du job et une 
        fois celle ci terminée générera l'exécutable VIZU correspondant.

        L' utilisateur n' a plus qu' à aller dans le directory contenant son 'zinit'
        (et les fichiers de résultats de son run) et taper la commande :

                vizu

        pour visualiser ses résultats.


BIBLIOGRAPHIE
-------------

[1] CMZ  : Users's Guide & Reference Manual (1.48), CodeME S.A.R.L. & CERN PROGRAM LIBRARY, 1996.
[2] KUIP : Users's Guide  Reference Manual  (2.04), CERN PROGRAM LIBRARY 1102, 1993.
[3] ZOOM : Users's Manuals  & /zoom/Help/...
[4] MTN  : MORTRAN User's Guide , CERN, 1979.
<-----/|\------>  ./Help/Users/00_New_User_Environment_Installation.bak1
**************************************************************************     .
***************************  Installation ********************************
********************  Robert FRANCHISSEUR (1996/07/26) *******************
**************************************************************************


VOIR aussi :
> /zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ
> /zoom/Help/Programmers/Upgrades/Installation
> /zoom/Help/Users/General/Execution_sur_Site_distant

   "Utilisateur Welcomme"

        Merci d' avoir choisi ZOOM ...
        All rites reversed.



    1)  creer un directory user_data sous son home_dir


    2)  Une fois pour toutes on ajoutera les lignes suivantes dans le fichier
        .profile (Bourne,Korn shells)

           CERN=XXX/cern   ; export CERN
           CERN_VER=pro ; export CERN_VER
           ZOOM=XXX/zoom   ; export ZOOM
           ZOOM_VER=pro ; export ZOOM_VER
           CMZSYS=$CERN/cmz/cmzsys.kumac ;export CMZSYS
           PATH=$PATH:$CERN/$CERN_VER/bin:$ZOOM/$ZOOM_VER/bin

        ou dans le fichier .cshrc (C-shell)

           setenv CERN XXX/cern
           setenv CERN_VER pro
           setenv ZOOM XXX/zoom
           setenv ZOOM_VER pro
           setenv CMZSYS $CERN/cmz/cmzsys.kumac
           set path=($path $CERN/$CERN_VER/bin $ZOOM/$ZOOM_VER/bin)

        en remplacant XXX par la bonne arborescence ( souvent ~robert :-)).

        Si, de plus, on veut utiliser la procédure d' exécution à distance, il 
        conviendra d' avoir un fichier $HOME/.netrc sur la machine source et un 
        fichier $HOME/.rhosts sur la machine cible avec les protections ad hoc. 
        Le ficher .cshrc est *obligatoire* sur la machine distante.


        L' utilisateur crée un directory par projet et après s' être placé dans 
        ce directory exécute cmz

        Une fois dans cet environnement il peut charger un 'canevas'  à l'aide 
        des commandes :

                shell cp /zoom/pro/exos/modele.cmz .
                file modele

        Après avoir édité ses processeurs et son 'zinit' (cf. les autres manuels 
        ZOOM [3]) il lui suffira de taper les commandes :

                 exec mod proc [cpu] [site]
        et 
                 exec mod zinit [cpu] [site]

        
        les arguments optionnels [cpu] et [site] permettant une execution 
        automatique sur une machine distante ( demander gentiment a Ribs )


        La première de ces commandes exécutera MORTRAN [4] ,la compilation 
        Fortran et crééra la librairie des processeurs.

        La seconde exécutera MORTRAN [4] ,la compilation Fortran pour le 'zinit',
        l' édition de liens avec le noyau , lancera l' exécution du job et une 
        fois celle ci terminée générera l'exécutable VIZU correspondant.

        L' utilisateur n' a plus qu' à aller dans le directory contenant son 'zinit'
        (et les fichiers de résultats de son run) et taper la commande :

                vizu

        pour visualiser ses résultats.


BIBLIOGRAPHIE
-------------

[1] CMZ  : Users's Guide & Reference Manual (1.48), CodeME S.A.R.L. & CERN PROGRAM LIBRARY, 1996.
[2] KUIP : Users's Guide  Reference Manual  (2.04), CERN PROGRAM LIBRARY 1102, 1993.
[3] ZOOM : Users's Manuals  & /zoom/Help/...
[4] MTN  : MORTRAN User's Guide , CERN, 1979.
<-----/|\------>  ./Help/Users/Combined_Facilities/Bank_desc.complete
     *************************
     * BANK DESCRIPTION LIST *
     *************************
 *****  On envisage de generer des Parameter pour les OXYAB.
 *****  Il faudrait prevoir un statut clair de IF
        ( et/ou pvr distinguer IC et IX )

     *********************************************************************************
     I     FM    : FM    I     CL    : CL    I     TR    : TR    I     LEV   : LV    I
     I     CPLUG : SV    I     TPLUG : TV    I     CX    : CX    I     FC2IX : FF    I
     I     FCUP  : FA    I     FC    : FC    I     IC    : IC    I     IT    : IT    I
     I     IF    : IF    I     IN    : IN    I     IX    : IX    I     IFUP  : IU    I
     I     SIZE  : SZ    I     MXT   : MT    I     MXR   : RT    I     MXRC  : RC    I
     I     MX    : MX    I     CTBR  : CR    I     RTB   : RB    I     CTB   : CB    I
     I     RDTB  : BR    I     CDTB  : BC    I     RTE   : RE    I     CTE   : CE    I
     I     RDTE  : ER    I     CDTE  : EC    I     ZMX   : ZM    I     RI    : RI    I
     I     PAIR  : PR    I     RDXT  : XR    I     CDXT  : XC    I     RDXB  : BX    I
     I     CDXB  : XB    I     RDXE  : EX    I     CDXE  : XE    I     WEZ   : WE    I
     I     WCST  : WK    I     DL    : DL    I     FI    : FI    I     ETA   : ET    I
     I     OMG   : MG    I     GAM   : GA    I     AB    : AB    I     AH    : AH    I
     I     CD    : CD    I     D     : DM    I     TD    : TD    I     CT    : CT    I
     I     B     : BM    I     RSIZE : SR    I     CSIZE : SC    I     MXRA  : RA    I
     I     CDXF  : XI    I     CDXX  : XX    I     MXTC  : CM    I     
     *********************************************************************************
1                                                                          910214
 ===========================                                                                                                 1
 I BANK # :  1  FM   (FM)  I                                                                                             FM   
 ===========================
                      Family Bank                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  FC              Face                                                                                                                             I
       -3      NI  CL              Cell . IN if structure transfer (not yet implemeted)                                                                             I
       -4      NI  IN              Internal interface bank. CL if structure transfer                                                                                I
       -5      NI  AH               A chapeau (en francais dans le texte)                                                                                           I
       -6      NI  DL              Delta vector                                                                                                                     I
       -7      NI  FI                                                                                                                                               I
       -8      NI  ETA                                                                                                                                              I
       -9      NI  OMG                                                                                                                                              I
       -10     NI  GAM                                                                                                                                              I
       -11     NI  LEV                                                                                                                                              I
       -12     NI  SIZE            Size of interfaces                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -13     NI  FC2IX           First face connecting to an IX bank                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  Nb_Int_lvls  I                      Number of internal levels this FM included                                   
 5              I  Nb_Int_Var   I                      Number of internal variables                                                 
 6              I  Nb_Out_Var   I                      Number of outgoing variables                                                 
 7              I  Min_SO_Nb    I                      Lowest Numero of Structure objects                                           
 8              I  Max_SO_Nb    I                      Highest Numero of Structure Objects                                          
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                                        
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Out_Var_Ty   I                      Outgoing variable type                                                       
 15             I  Nb_Ctt       I                      Number of constituents                                                       
 16             I  Nb_In_Int    I                      Number of internal interfaces                                                
 17             I  In_Int_Mx_Sz I                      Biggest internal interface size                                              
 18             I  Mx_Nb_Lo_Ctt I                      Biggest number of constituents in inner FMs                                  
 19             I  Dim_Eta      I                      Dimension of ETA and GAMa                                                    
 20             I  Nm_FM        I                      Family first name                                                            
 21             I  Cd_FM        I                             and code                                                              
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS : 12
 NLKR :    1                           
 NDAT :21                              
~~~~~~~~>   End of family bank (test PSTCMT)
1                                                                          910214
 ===========================                                                                                                 2
 I BANK # :  2  CL   (CL)  I                                                                                             CL   
 ===========================
                      Cell Bank when connecting transfer                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  FC                                                                                                                                               I
       -3      NI  NUL1            Zero hard                                                                                                                        I
       -4      NI  CPLUG           C-plug                                                                                                                           I
       -5      NI  AB              A or (((A)-1)B)+, next=D if it exists                                                                                            I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -6      *I  ETA             State vector of the whole cells of a family                                                                                      I
       -7      *I  GAM                                                                                                                                              I
       -8      NI  CD              Cell description bank                                                                                                            I
       -9      NI  FC2IX           First Face connecting to an IX bank                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  In_ET        I                      State variable location in ETA bank                                          
 5              I  Nb_St_Var    I                      Number of state variables                                                    
 6              I  Nb_Cx_Tr_Var I                      Number of connected transfer variables                                       
 7              I  Nm_Cl        I                      Cell first name                                                              
 8              I  Cd_Cl        I                           and code                                                                
               ============================== SUB-BANK : SO.=======================================================                 
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                                        
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Cl_Nb        I                      Cell unique number from OFRAME                                               
 15             I  N_desc       I                      Number of description words(PDL to cancel)                                   
 16             I  Data         R N_desc                Datas processor dependant                                                   
               ============================== SUB-BANK : TO.=======================================================                 
 9              I  N_desc       I                      Number of description words(PDL to cancel)                                   
 10             I  Data         R N_desc                Datas processor dependant                                                   
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    4                           
 NDAT :(CL).FS.SO.N_desc+15            (CL).FS.TO.N_desc+9             


~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 3
 I BANK # :  3  TR   (TR)  I                                                                                             TR   
 ===========================
                      Transfer Bank when connecting stansfer                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1            hard zero                                                                                                                        I
       -3      NI  TPLUG                                                                                                                                            I
       -4      NI  NUL2            Zero hard                                                                                                                        I
       -5      NI  D               D matrix                                                                                                                         I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -6      *I  FI              vector of the whole transfers of a family                                                                                        I
       -7      *I  OMG                                                                                                                                              I
       -8      NI  TD                                                                                                                                               I
       -9      NI  FMUP             Upper family                                                                                                                    I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  In_FI        I                      Transfer variable location in FI bank                                        
 5              I  Nb_Tr_Var    I                      Number of transfer variables                                                 
 6              I  Nb_Cx_St_Var I                      Number of connected transfer variables                                       
 7              I  Nb_Extr      I                      Number of extremities (gama)                                                 
 8              I  Nb_Fluxes    I                      Number of fluxes                                                             
               ============================== SUB-BANK : TO.=======================================================                 
 9              I  Nxt_lvl_Ad   I                      =JZESO=4 location of next level address                                      
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Tr_Nb        I                      Tr unique number from OFRAME                                                 
 15             I  N_desc       I                      Number of description words(PDL to cancel)                                   
 16             I  Data         R N_desc                Datas processor dependant                                                   
               ============================== SUB-BANK : SO.=======================================================                 
 9              I  N_desc       I                      Number of description words(PDL to cancel)                                   
 10             I  Data         R N_desc                Datas processor dependant                                                   
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    4                           
 NDAT :(TR).FS.TO.N_desc+15            (TR).FS.SO.N_desc+9             


~~~~~~~~> next of FI is FIZ
1                                                                          910214
 ===========================                                                                                                 4
 I BANK # :  4  LEV  (LV)  I                                                                                             LEV  
 ===========================
                    Level bank                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  FM                                                                                                                                               I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_levels    I                      Number of levels (=lambda)                                                   
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    1+(LV).FS.Nb_levels         
 NDAT :1                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 5
 I BANK # :  5  CPLUG(SV)  I                                                                                             CPLUG
 ===========================
                     State Variables Bank                                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CX                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  CL                                                                                                                                               I
       -4      NI  ETA             IPETA = LETA +IQ(LCL+4), begining of this cell vector in the ETA bank                                                            I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_St_Var    I                      Number of State Variables                                                    
 2              I  C_Plug_Nm    I                      (Self explanatory)                            ***
 3              I  C_Plug_Nb    I                      (Self explanatory)                            ***
 4              I  Cx_St_Var_Nb I Nb_St_Var            List of connected state variable numbers                                     
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    2                           
 NDAT :(SV).FS.Nb_St_Var+1             
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 6
 I BANK # :  6  TPLUG(TV)  I                                                                                             TPLUG
 ===========================
                    Transfer variables bank= T-plug                             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  TR               Transfer Bank                                                                                                                   I
       -3      NI  FI              IPFI = LFI +IQ(LTR+4), beginnig of this transfer vector in the FI bank                                                           I
       -4      NI  CX              list of connected CX's                                                                                                           I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_Cx_CX     I                      Number of connected CX's                                                     
 2              I  Nb_Tr_Var    I                      Number of transfer Variables                                                 
 3              I  Cx_Tr_Var_Nb I Nb_Tr_Var            List of connected transfer Variables numbers                                 
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    3+(TV).FS.Nb_Cx_CX          
 NDAT :(TV).FS.Nb_Tr_Var+2             
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 7
 I BANK # :  7  CX   (CX)  I                                                                                             CX   
 ===========================
                     Connection Bank                                            


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  CPLUG                                                                                                                                            I
       -3      NI  TPLUG                                                                                                                                            I
       -4      NI  IC               or IT when structure transfer                                                                                                   I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  LFI_in_IF    I                      FI variables location in IC or IT                                            
 2              I  Nb_Var       I                      Number of Variables                                                          
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    3                           
 NDAT :2                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 8
 I BANK # :  8  FC2IX(FF)  I                                                                                             FC2IX
 ===========================
                     First Face connecting to IX Bank                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX                                                                                                                               I
       -3      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  Compulsary identical to FC Bank
1                                                                          910214
 ===========================                                                                                                 9
 I BANK # :  9  FCUP (FA)  I                                                                                             FCUP 
 ===========================
                     Generic Upper Face Bank                                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX or IC or IT (dependent)                                                                                                       I
       -3      NI  IN              or Zero                                                                                                                          I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  Compulsary identical to FC Bank
1                                                                          910214
 ===========================                                                                                                10
 I BANK # : 10  FC   (FC)  I                                                                                             FC   
 ===========================
                     Face Bank                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX or IC or IT (dependent)                                                                                                       I
       -3      NI  IN              or Zero                                                                                                                          I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  IF = IX or IC or IT. This three banks must be carfully 
     *modified
1                                                                          910214
 ===========================                                                                                                11
 I BANK # : 11  IC   (IC)  I                                                                                             IC   
 ===========================
                     Cell interface bank                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  B                                                                                                                                                I
       -3      NI  CT               C-cross Matrix                                                                                                                  I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  FCUP            Upper face'                                                                                                                      I
       -5      NI  CPLUG                                                                                                                                            I
Futura : -6        Tr_List         used in OFRAME, removed after
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  LTr_in_Fc    I                      Transfer variable's location in Face                                         
 2              I  LTr_in_Cl    I                       .............. ....... ........Cell                                         
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_Tr_Var    I                      Number of transfer variables                                                 
Futura : 5         Nb_Tr                            Nunber of Cx Transfers
 6              I  Cg_SV_Nb     I                      Corresponding C-plug numbers                                                 
 7              I  Nb_Cx_St_Var I                      Number of connected State Variables                                          
Futura :           Tr_Perm_List                       or none if sub-identity
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :7+0_(LIC.IC).Nb_Tr                
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                12
 I BANK # : 12  IT   (IT)  I                                                                                             IT   
 ===========================
                     Transfer Interface Bank                                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  B                                                                                                                                                I
       -3      NI  CT                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  FCUP            Upper face                                                                                                                       I
       -5      NI  TPLUG                                                                                                                                            I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Sv_in_Fc   I                      state variable location in Face                                              
 2              I  L_Sv_in_Tr   I                      ... .... .... .... ....  ..Transfer                                          
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_St_Var    I                      Number of state variables                                                    
 5              I  Free         R                      not used                                                                     
 6              I  Nb_Cx_Tr_Var I                      number of connected transfer variables                                       
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :6                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                13
 I BANK # : 13  IF   (IF)  I                                                                                             IF   
 ===========================
                    Generic interface bank -has to be identical to IC IT        
                           and eventually IX : Has to be re thought

                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  I                      state or trabsfer variable location in Face                                  
 2              I  L_Var_in_SO  I                      ... .... .... .... ....  ..Transfer or State                                 
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_Var       I                      Number of state or transfer variables                                        
 5              I  Free         R                      not used                                                                     
 6              I  Nb_Cx_Var    I                      number of connected transfer or statevariables                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IF).FS.Delta             
 NDAT :6                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                14
 I BANK # : 14  IN   (IN)  I                                                                                             IN   
 ===========================
                    Internal interface bank : 12/5/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  TR                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Moins_1      I                      Should equal -1                                                              
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
 5              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 6              I  Bin_Code     I b                    binary code of connected constituents                                        
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IN).FS.Delta             
 NDAT :(IN).FS.b+5
~~~~~~~~> Binary code is : 1 if constituent connected,            
     *   : 0 otherwise, and b=IQ(LFM+15)/30 + 1
1                                                                          910214
 ===========================                                                                                                15
 I BANK # : 15  IX   (IX)  I                                                                                             IX   
 ===========================
                     External Interface Bank : 8/5/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  FCUP            Upper face                                                                                                                       I
       -3      NI  FC              list of deeper faces                                                                                                             I
       . . . 
Futura :           Tr_List         used in OFRAME, removed after
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  i                      Variable's location in face                                                  
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
Futura : 5         Nb_Tr                               Bunber of Cx Transfers
 6              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 7              I  Bin_Code     I b                    binary code of connected constituents                                        
         (...)
Futura : ...      Tr_Perm_List                         or none if sub-identity
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    2+(IX).FS.Delta             
 NDAT :(IX).FS.b+6+0_(LIX.IX).Nb_Tr
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                16
 I BANK # : 16  IFUP (IU)  I                                                                                             IFUP 
 ===========================
                    Generic IX = IN Bank                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  i                      Variable's location in face                                                  
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
 5              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 6              I  Bin_Code     I b                    binary code of connected constituents                                        
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IU).FS.Delta             
 NDAT :(IU).FS.b+5                     
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                17
 I BANK # : 17  SIZE (SZ)  I                                                                                             SIZE 
 ===========================
                     Size Bank : 7/11/86                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Tot_Nb_Var   I                      Total Number of variables                                                    
 2              I  Nb_Int       I                      Number of interfaces (=n)                                                    
 3              I  Int_Sz       I Nb_Int               List of the n interfaces size                                                
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SZ).FS.Nb_Int+2                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                18
 I BANK # : 18  MXT  (MT)  I                                                                                             MXT  
 ===========================
                    Matrix table : 25/8/85                                      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RTB                                                                                                                                              I
       -3      NI  CTB             =0                                                                                                                               I
       -4      NI  MXR                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  MXR             list of Row matrix table                                                                                                         I
   OUNDF       NI  RSIZE           Rows                                                                                                                             I
   OUNDF       NI  CSIZE           Columns                                                                                                                          I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Type         I                      =1                                                                           
 2              I  Nb_St_BRows  I                      NUmber of stored block rows                                                  
 3              I  BRow_Nb_IM   I Nb_St_BRows          list of block rows numbers in IM=IT                                          
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  4
 NLKR :    3+(MT).FS.Nb_St_BRows       
 NDAT :(MT).FS.Nb_St_BRows+2           
~~~~~~~~> links to CSIZE and RSIZE should be calculated by the user
1                                                                          910214
 ===========================                                                                                                19
 I BANK # : 19  MXR  (RT)  I       ??? Semble OBSOLETE see OSUTruc ???                                                                                      MXR  
 ===========================
                    Row matrix table : 22/7/85                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CTBR                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  MX              list of matrix banks                                                                                                             I
   OUNDF       NI  RTB                                                                                                                                              I
   OUNDF       NI  CTB                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
     *******    I----------      KERNEL    ----------------------------------------------------------------------------
 1   *****FAUX  I  BRow_Nb_TM   I                      Row Blocks number in IM                                                      
 2   ******     I  Nb_St_BCols  I                                                                                                   
 3              I  BCol_Nb_IM   I Nb_St_BCols          List of BColumns number in IM                                                
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    3+(RT).FS.M                 
 NDAT :(RT).FS.Nb_St_BCols+2           
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                20
 I BANK # : 20  MXRC (RC)  I        see OSUTables Faux                                                                                     MXRC 
 ===========================
                    Row matrix table for auxiliary C matrix : 7/11/86           
                    (Expantion from MXR(A)

                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CTBR                                                                                                                                             I
       -3      NI  MX                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  MX              list of matrix banks                                                                                                             I
   OUNDF       NI  NUL1            zero hard                                                                                                                        I
   OUNDF       NI  NUL2            zero hard                                                                                                                        I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_N0_Bcl    I                      NUmber of non zero BColumns(+n)                                              
 2              I  Nb_Bcl       I                      Number of Bcolumns (=m)                                                      
 3   ****       I  L_N0_Bc      l ::>(n)               list of non zero Bcols loc                                                   
 4              I  Zero         I Nb_BCols::> -n !!!    LIst of m zeros                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    3+(RC).FS.M                 
 NDAT :(RC).FS.Nb_BCols+3              
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                21
 I BANK # : 21  MX   (MX)  I                                                                                             MX   
 ===========================
                    Matrix bank 22/7/85                                         


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  M_Rows       R N_Cols*N_Row          Matrix elements stored row wise                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(MX).FS.N_Cols*N_Rows+0         
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                22
 I BANK # : 22  CTBR (CR)  I                                                                                             CTBR 
 ===========================
                    Column table, block-wise,for a Row : 25/8/85                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~> SM block column number = 0i.e. there is no SM block 
     *column correspondingto this TM block column
1                                                                          910214
 ===========================                                                                                                23
 I BANK # : 23  RTB  (RB)  I                                                                                             RTB  
 ===========================
                    Row Table, Block wise : 22/7/85                             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDTB                                                                                                                                             I
       -3      NI  RTE                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  RTE                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    1+(RB).FS.P                 
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                24
 I BANK # : 24  CTB  (CB)  I                                                                                             CTB  
 ===========================
                    Column Table, Block Wise : 22/7/85                          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDTB                                                                                                                                             I
       -3      NI  CTE                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  CTE                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    1+(CB).FS.P                 
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                25
 I BANK # : 25  RDTB (BR)  I                                                                                             RDTB 
 ===========================
                    Row Duplication Table, Block Wise : 22/7/85                 


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                26
 I BANK # : 26  CDTB (BC)  I                                                                                             CDTB 
 ===========================
                    Columnm Duplication Table, Block Wise : 22/7/85             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                27
 I BANK # : 27  RTE  (RE)  I                                                                                             RTE  
 ===========================
                    Row Table,Element Wise 22/7/85                              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDTE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                28
 I BANK # : 28  CTE  (CE)  I                                                                                             CTE  
 ===========================
                    Column Table,Element Wise 22/7/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDTE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                29
 I BANK # : 29  RDTE (ER)  I                                                                                             RDTE 
 ===========================
                    Row Duplication Table, Element Wise 22/7/85                 


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                30
 I BANK # : 30  CDTE (EC)  I                                                                                             CDTE 
 ===========================
                    Column Duplication Table, Element Wise 22/7/85              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                31
 I BANK # : 31  ZMX  (ZM)  I                                                                                             ZMX  
 ===========================
                    Call Bank for MZX package 22/7/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                32
 I BANK # : 32  RI   (RI)  I                                                                                             RI   
 ===========================
                     Row Inclusion Bank : 23/5/85                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                33
 I BANK # : 33  PAIR (PR)  I                                                                                             PAIR 
 ===========================
                    Pairing Bank : 7/11/86                                      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                34
 I BANK # : 34  RDXT (XR)  I                                                                                             RDXT 
 ===========================
                    Row Duplication Cross Table : 22/7/85                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDXB                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                35
 I BANK # : 35  CDXT (XC)  I                                                                                             CDXT 
 ===========================
                    Column Duplication Cross Table : 22/7/85                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXB                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                36
 I BANK # : 36  RDXB (BX)  I                                                                                             RDXB 
 ===========================
                     Row Duplication Cross Table - Block Wize : 7/11/86         


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDXE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                37
 I BANK # : 37  CDXB (XB)  I                                                                                             CDXB 
 ===========================
                     Column Duplication Cross Table - Block Wize : 7/11/86      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                38
 I BANK # : 38  RDXE (EX)  I                                                                                             RDXE 
 ===========================
                     Row Duplication Cross Table - Element Wize : 22/7/85       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                39
 I BANK # : 39  CDXE (XE)  I                                                                                             CDXE 
 ===========================
                     Column Duplication Cross Table - Element Wize : 22/7/85    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                40
 I BANK # : 40  WEZ  (WE)  I                                                                                             WEZ  
 ===========================
                    EZ Working Bank 17/7/89                                     


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  WCST                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  WCST                                                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(WE).FS.GAMMA             
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                41
 I BANK # : 41  WCST (WK)  I                                                                                             WCST 
 ===========================
                     Working Bank for Constituants (see WEZ) : 17/7/89          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXF            CDXT(F)                                                                                                                          I
       -3      NI  CDXX            CDXT(X)                                                                                                                          I
       -4      NI  MXT              C matrix                                                                                                                        I
       -5      NI  PAIR                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -5      NI  PAIR                                                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    1+(WK).FS.NU                
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                42
 I BANK # : 42  DL   (DL)  I                                                                                             DL   
 ===========================
                     Delta vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Delta        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(DL).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                43
 I BANK # : 43  FI   (FI)  I                                                                                             FI   
 ===========================
                    FI vector                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  FI           R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(FI).FS.Ndatas+0                
~~~~~~~~>  Bank without link, FIZ is next of FI
1                                                                          910214
 ===========================                                                                                                44
 I BANK # : 44  ETA  (ET)  I                                                                                             ETA  
 ===========================
                    ETA vector                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Eta          R Ndatas               Dimension of vector Eta                                                      
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(ET).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                45
 I BANK # : 45  OMG  (MG)  I                                                                                             OMG  
 ===========================
                     OMEGA vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Omega        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(MG).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                46
 I BANK # : 46  GAM  (GA)  I                                                                                             GAM  
 ===========================
                     GAMMA vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Gamma        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(GA).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                47
 I BANK # : 47  AB   (AB)  I                                                                                             AB   
 ===========================
                     ((A)-1 B)+ matrix                                          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  AB_Mx        R Dim                   A or AB matrix                                                              
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(AB).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                48
 I BANK # : 48  AH   (AH)  I                                                                                             AH   
 ===========================
                     Ahat matrix                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                49
 I BANK # : 49  CD   (CD)  I                                                                                             CD   
 ===========================
                    Cell description Bank                                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Idata        I -1                   Symbol in equivalence with the following                                     
 1              I  Data         R NDatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(CD).FS.NDatas+0                
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                50
 I BANK # : 50  D    (DM)  I                                                                                             D    
 ===========================
                     D matrix                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                51
 I BANK # : 51  TD   (TD)  I                                                                                             TD   
 ===========================
                    Transfer Description Block                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Idata        I -1                   Symbol in equivalence with the following                                     
 1              I  Data         R NDatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(TD).FS.NDatas+0                
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                52
 I BANK # : 52  CT   (CT)  I                                                                                             CT   
 ===========================
                     Transposed C matrix                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Ct_SV        R Dim                  Ct bloc corresponding to one CPlug                                           
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(CT).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                53
 I BANK # : 53  B    (BM)  I                                                                                             B    
 ===========================
                     B matrix                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  B_Mx         R Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(BM).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                54
 I BANK # : 54  RSIZE(SR)  I                                                                                             RSIZE
 ===========================
                     Row size bank                                              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  R_Size       I Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SR).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                55
 I BANK # : 55  CSIZE(SC)  I                                                                                             CSIZE
 ===========================
                     Column size bank                                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  cl_Size      I Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SC).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                56
 I BANK # : 56  MXRA (RA)  I                                                                                             MXRA 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                57
 I BANK # : 57  CDXF (XI)  I                                                                                             CDXF 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                58
 I BANK # : 58  CDXX (XX)  I                                                                                             CDXX 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>              [To be Taken from MXT Bk]
1                                                                          910214
 ===========================                                                                                                59
 I BANK # : 59  MXTC (CM)  I                                                                                             MXTC 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>


 STRUCTURE LINKS FOR ZOOM TREE CONSTRUCTION :

      FM   
      FC    CL    IN    AH    DL    FI    ETA   OMG   GAM   LEV   SIZE  FC2IX
      CL   
      FC    NUL1  CPLUG AB    ETA  
      TR   
      NUL1  TPLUG NUL2  D     FI   
      LEV  
      FM   
      CPLUG
      CX    CL   
      TPLUG
      TR   
      CX   
      CPLUG
      FC2IX
      IF    NUL1  IFUP 
      FCUP 
      IF    IN    IFUP 
      FC   
      IF    IN    IFUP 
      IC   
      B     CT    FCUP 
      IT   
      B     CT    FCUP 
      IF   
      NUL1  FC   
      IN   
      TR    FC   
      IX   
      FCUP 
      IFUP 
      NUL1  FC   
      SIZE 
      NUL1 
      MXT  
      RTB   CTB   MXR   RSIZE
      MXR  
      CTBR  MX   
      MXRC 
      CTBR  MX    NUL1 
      MX   
      CTBR 
      CTBR 
      CTBR 
      RTB  
      RDTB  RTE   RTE  
      CTB  
      CDTB  CTE   CTE  
      RDTB 
      CDTB 
      CDTB 
      CDTB 
      RTE  
      RDTE  CTE  
      CTE  
      CDTE  CTE  
      RDTE 
      CDTE 
      CDTE 
      CDTE 
      ZMX  
      CDTE 
      RI   
      CDTE 
      PAIR 
      CDTE 
      RDXT 
      RDXB  CTE  
      CDXT 
      CDXB  CTE  
      RDXB 
      RDXE  CTE  
      CDXB 
      CDXE  CTE  
      RDXE 
      CDXE 
      CDXE 
      CDXE 
      WEZ  
      WCST  WCST 
      WCST 
      CDXF  CDXX  MXT   PAIR  PAIR 
      DL   
      CDXF 
      FI   
      CDXF 
      ETA  
      CDXF 
      OMG  
      CDXF 
      GAM  
      CDXF 
      AB   
      CDXF 
      AH   
      CDXF 
      CD   
      CDXF 
      D    
      CDXF 
      TD   
      CDXF 
      CT   
      CDXF 
      B    
      CDXF 
      RSIZE
      CDXF 
      CSIZE
      CDXF 
      MXRA 
      CDXF 
      CDXF 
      CDXF 
      CDXX 
      CDXF 
      MXTC 
      CDXF 
<-----/|\------>  ./Help/Users/Combined_Facilities/Bank_desc.complete.Futura
     *************************
     * BANK DESCRIPTION LIST *  ATTENTION COMMENTAIRES FUTURA et modifs ???
     *************************

mardi 20/08/1996
===============(Al1)
Futura proposal to get get rid of Bug in Cx Order :
Chaque IX fournit la premutation -decalee par L_Fi_in_Fc Up - par rapport
aux composantes de la FcUp : soit via un IX TPlug, soit en data dans la IX.

commentaires anciens (95)
 *****  On envisage de generer des Parameter pour les OXYAB.
 *****  Il faudrait prevoir un statut clair de IF
        ( et/ou pvr distinguer IC et IX )

     *********************************************************************************
     I     FM    : FM    I     CL    : CL    I     TR    : TR    I     LEV   : LV    I
     I     CPLUG : SV    I     TPLUG : TV    I     CX    : CX    I     FC2IX : FF    I
     I     FCUP  : FA    I     FC    : FC    I     IC    : IC    I     IT    : IT    I
     I     IF    : IF    I     IN    : IN    I     IX    : IX    I     IFUP  : IU    I
     I     SIZE  : SZ    I     MXT   : MT    I     MXR   : RT    I     MXRC  : RC    I
     I     MX    : MX    I     CTBR  : CR    I     RTB   : RB    I     CTB   : CB    I
     I     RDTB  : BR    I     CDTB  : BC    I     RTE   : RE    I     CTE   : CE    I
     I     RDTE  : ER    I     CDTE  : EC    I     ZMX   : ZM    I     RI    : RI    I
     I     PAIR  : PR    I     RDXT  : XR    I     CDXT  : XC    I     RDXB  : BX    I
     I     CDXB  : XB    I     RDXE  : EX    I     CDXE  : XE    I     WEZ   : WE    I
     I     WCST  : WK    I     DL    : DL    I     FI    : FI    I     ETA   : ET    I
     I     OMG   : MG    I     GAM   : GA    I     AB    : AB    I     AH    : AH    I
     I     CD    : CD    I     D     : DM    I     TD    : TD    I     CT    : CT    I
     I     B     : BM    I     RSIZE : SR    I     CSIZE : SC    I     MXRA  : RA    I
     I     CDXF  : XI    I     CDXX  : XX    I     MXTC  : CM    I     
     *********************************************************************************
1                                                                          910214
 ===========================                                                                                                 1
 I BANK # :  1  FM   (FM)  I                                                                                             FM   
 ===========================
                      Family Bank                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  FC              Face                                                                                                                             I
       -3      NI  CL              Cell . IN if structure transfer (not yet implemeted)                                                                             I
       -4      NI  IN              Internal interface bank. CL if structure transfer                                                                                I
       -5      NI  AH               A chapeau (en francais dans le texte)                                                                                           I
       -6      NI  DL              Delta vector                                                                                                                     I
       -7      NI  FI                                                                                                                                               I
       -8      NI  ETA                                                                                                                                              I
       -9      NI  OMG                                                                                                                                              I
       -10     NI  GAM                                                                                                                                              I
       -11     NI  LEV                                                                                                                                              I
       -12     NI  SIZE            Size of interfaces                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -13     NI  FC2IX           First face connecting to an IX bank                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  Nb_Int_lvls  I                      Number of internal levels this FM included                                   
 5              I  Nb_Int_Var   I                      Number of internal variables                                                 
 6              I  Nb_Out_Var   I                      Number of outgoing variables                                                 
 7              I  Min_SO_Nb    I                      Lowest Numero of Structure objects                                           
 8              I  Max_SO_Nb    I                      Highest Numero of Structure Objects                                          
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                                        
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Out_Var_Ty   I                      Outgoing variable type                                                       
 15             I  Nb_Ctt       I                      Number of constituents                                                       
 16             I  Nb_In_Int    I                      Number of internal interfaces                                                
 17             I  In_Int_Mx_Sz I                      Biggest internal interface size                                              
 18             I  Mx_Nb_Lo_Ctt I                      Biggest number of constituents in inner FMs                                  
 19             I  Dim_Eta      I                      Dimension of ETA and GAMa                                                    
 20             I  Nm_FM        I                      Family first name                                                            
 21             I  Cd_FM        I                             and code                                                              
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS : 12
 NLKR :    1                           
 NDAT :21                              
~~~~~~~~>   End of family bank (test PSTCMT)
1                                                                          910214
 ===========================                                                                                                 2
 I BANK # :  2  CL   (CL)  I                                                                                             CL   
 ===========================
                      Cell Bank when connecting transfer                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  FC                                                                                                                                               I
       -3      NI  NUL1            Zero hard                                                                                                                        I
       -4      NI  CPLUG           C-plug                                                                                                                           I
       -5      NI  AB              A or (((A)-1)B)+, next=D if it exists                                                                                            I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -6      *I  ETA             State vector of the whole cells of a family                                                                                      I
       -7      *I  GAM                                                                                                                                              I
       -8      NI  CD              Cell description bank                                                                                                            I
       -9      NI  FC2IX           First Face connecting to an IX bank                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  In_ET        I                      State variable location in ETA bank                                          
 5              I  Nb_St_Var    I                      Number of state variables                                                    
 6              I  Nb_Cx_Tr_Var I                      Number of connected transfer variables                                       
 7              I  Nm_Cl        I                      Cell first name                                                              
 8              I  Cd_Cl        I                           and code                                                                
               ============================== SUB-BANK : SO.=======================================================                 
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                                        
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Cl_Nb        I                      Cell unique number from OFRAME                                               
 15             I  N_desc       I                      Number of description words(PDL to cancel)                                   
 16             I  Data         R N_desc                Datas processor dependant                                                   
               ============================== SUB-BANK : TO.=======================================================                 
 9              I  N_desc       I                      Number of description words(PDL to cancel)                                   
 10             I  Data         R N_desc                Datas processor dependant                                                   
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    4                           
 NDAT :(CL).FS.SO.N_desc+15            (CL).FS.TO.N_desc+9             


~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 3
 I BANK # :  3  TR   (TR)  I                                                                                             TR   
 ===========================
                      Transfer Bank when connecting stansfer                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1            hard zero                                                                                                                        I
       -3      NI  TPLUG                                                                                                                                            I
       -4      NI  NUL2            Zero hard                                                                                                                        I
       -5      NI  D               D matrix                                                                                                                         I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -6      *I  FI              vector of the whole transfers of a family                                                                                        I
       -7      *I  OMG                                                                                                                                              I
       -8      NI  TD                                                                                                                                               I
       -9      NI  FMUP             Upper family                                                                                                                    I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                                            
 4              I  In_FI        I                      Transfer variable location in FI bank                                        
 5              I  Nb_Tr_Var    I                      Number of transfer variables                                                 
 6              I  Nb_Cx_St_Var I                      Number of connected transfer variables                                       
 7              I  Nb_Extr      I                      Number of extremities (gama)                                                 
 8              I  Nb_Fluxes    I                      Number of fluxes                                                             
               ============================== SUB-BANK : TO.=======================================================                 
 9              I  Nxt_lvl_Ad   I                      =JZESO=4 location of next level address                                      
 10             I  Depth        I                      Depth Begining at Zeus to zero                                               
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                                           
 12             I  Nb_Ex_Int    I                      Number of external interfaces                                                
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                                              
 14             I  Tr_Nb        I                      Tr unique number from OFRAME                                                 
 15             I  N_desc       I                      Number of description words(PDL to cancel)                                   
 16             I  Data         R N_desc                Datas processor dependant                                                   
               ============================== SUB-BANK : SO.=======================================================                 
 9              I  N_desc       I                      Number of description words(PDL to cancel)       ???obsolete                            
 10             I  Data         R N_desc                Datas processor dependant                       ???                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    4                           
 NDAT :(TR).FS.TO.N_desc+15            (TR).FS.SO.N_desc+9             


~~~~~~~~> next of FI is FIZ
1                                                                          910214
 ===========================                                                                                                 4
 I BANK # :  4  LEV  (LV)  I                                                                                             LEV  
 ===========================
                    Level bank                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  FM                                                                                                                                               I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_levels    I                      Number of levels (=lambda)                                                   
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    1+(LV).FS.Nb_levels         
 NDAT :1                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 5
 I BANK # :  5  CPLUG(SV)  I                                                                                             CPLUG
 ===========================
                     State Variables Bank                                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CX                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  CL                                                                                                                                               I
       -4      NI  ETA             IPETA = LETA +IQ(LCL+4), begining of this cell vector in the ETA bank                                                            I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_St_Var    I                      Number of State Variables  ???components                                                  
 2              I  C_Plug_Nm    I                      Name of C-Plug
 3              I  C_Plug_Cd    I                      Code of C-Plug                                                                            
 4...           I  Cx_St_Var_Nb I Nb_St_Var            List of connected state variable numbers                                     
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    2                           
 NDAT :(SV).FS.Nb_St_Var+3            
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 6
 I BANK # :  6  TPLUG(TV)  I                                                                                             TPLUG
 ===========================
                    Transfer variables bank= T-plug                             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  TR               Transfer Bank                                                                                                                   I
       -3      NI  FI              IPFI = LFI +IQ(LTR+4), beginnig of this transfer vector in the FI bank                                                           I
       -4      NI  CX              list of connected CX's                                                                                                           I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_Cx_CX     I                      Number of connected CX's                                                     
 2              I  Nb_Tr_Var    I                      Number of transfer Variables  ???components                                               
 3              I  Cx_Tr_Var_Nb I Nb_Tr_Var            List of connected transfer Variables numbers                                 
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    3+(TV).FS.Nb_Cx_CX          
 NDAT :(TV).FS.Nb_Tr_Var+2             
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 7
 I BANK # :  7  CX   (CX)  I                                                                                             CX   
 ===========================
                     Connection Bank                                            


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  CPLUG                                                                                                                                            I
       -3      NI  TPLUG                                                                                                                                            I
       -4      NI  IC               or IT when structure transfer                                                                                                   I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  LFI_in_IF    I                      FI variables location in IC or IT  ???LTr !!!                                          
 2              I  Nb_Var       I                      Number of Variables                                                          
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    3                           
 NDAT :2                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                 8
 I BANK # :  8  FC2IX(FF)  I                                                                                             FC2IX
 ===========================
                     First Face connecting to IX Bank                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX                                                                                                                               I
       -3      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  Compulsary identical to FC Bank
1                                                                          910214
 ===========================                                                                                                 9
 I BANK # :  9  FCUP (FA)  I                                                                                             FCUP 
 ===========================
                     Generic Upper Face Bank                                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX or IC or IT (dependent)                                                                                                       I
       -3      NI  IN              or Zero                                                                                                                          I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  Compulsary identical to FC Bank
1                                                                          910214
 ===========================                                                                                                10
 I BANK # : 10  FC   (FC)  I                                                                                             FC   
 ===========================
                     Face Bank                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  IF              IX or IC or IT (dependent)                                                                                                       I
       -3      NI  IN              or Zero                                                                                                                          I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  IFUP            Upper interface                                                                                                                  I
       -5      NI  FMUP            Upper family                                                                                                                     I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  F_Nb         I                      Face number                                                                  
 2              I  Nb_Int       I                      Number of interfaces                                                         
 3              I  Tr_Depth     I                      Transfer's depth                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :3                               
~~~~~~~~>  IF = IX or IC or IT. This three banks must be carfully 
     *modified
1                                                                          910214
 ===========================                                                                                                11
 I BANK # : 11  IC   (IC)  I                                                                                             IC   
 ===========================
                     Cell interface bank                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
Futura -1       I  TX              permutation info from IX to FcUp (herite des TV mais peut servir a remonter l'info
       -2      NI  B                                                                                                                                                I
       -3      NI  CT               C-cross Matrix                                                                                                                  I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  FCUP            Upper face'                    ???inutile avec Up Zebra STRUCT!notREF                                                                                       I
       -5      NI  CPLUG                                                                                                                                            I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  LTr_in_Fc    I                      Transfer variable's location in Face  ???LFi_in_Fc                                       
 2              I  LTr_in_Cl    I                       .............. ....... ........Cell                                         
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_Tr_Var    I                      Number of transfer variables                                                 
 5              I  Cg_SV_Nb     I                      Corresponding C-plug numbers     ???Nbers of CPlug                                            
 6              I  Nb_Cx_St_Var I                      Number of connected State Variables                                          
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :6                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                12
 I BANK # : 12  IT   (IT)  I                                                                                             IT   
 ===========================
                     Transfer Interface Bank                                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  B                                                                                                                                                I
       -3      NI  CT                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  FCUP            Upper face                                                                                                                       I
       -5      NI  TPLUG                                                                                                                                            I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Sv_in_Fc   I                      state variable location in Face                                              
 2              I  L_Sv_in_Tr   I                      ... .... .... .... ....  ..Transfer                                          
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_St_Var    I                      Number of state variables                                                    
 5              I  Free         R                      not used                                                                     
 6              I  Nb_Cx_Tr_Var I                      number of connected transfer variables                                       
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    2                           
 NDAT :6                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                13
 I BANK # : 13  IF   (IF)  I                                                                                             IF   
 ===========================
                    Generic interface bank -has to be identical to IC IT        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  I                      state or trabsfer variable location in Face                                  
 2              I  L_Var_in_SO  I                      ... .... .... .... ....  ..Transfer or State                                 
 3              I  Int_Nb       I                      Interface number                                                             
 4              I  Nb_Var       I                      Number of state or transfer variables                                        
 5              I  Free         R                      not used                                                                     
 6              I  Nb_Cx_Var    I                      number of connected transfer or statevariables                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IF).FS.Delta             
 NDAT :6                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                14
 I BANK # : 14  IN   (IN)  I                                                                                             IN   
 ===========================
                    Internal interface bank : 12/5/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  TR                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Moins_1      I                      Should equal -1                                                              
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
 5              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 6              I  Bin_Code     I b                    binary code of connected constituents                                        
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IN).FS.Delta             
 NDAT :(IN).FS.b+5                     
~~~~~~~~> Binary code is : 1 if constituent connected,            
     *   : 0 otherwise, and b=IQ(LFM+15)/30 + 1
1                                                                          910214
 ===========================                                                                                                15
 I BANK # : 15  IX   (IX)  I                                                                                             IX   
 ===========================
                     External Interface Bank : 8/5/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
Futura -1       I  TX              permutation info from IX to FcUp    ou carrement la, en data
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  FCUP            Upper face                                                                                                                       I
       -3      NI  FC              list of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  i                      Variable's location in face                                                  
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
 5              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 6              I  Bin_Code     I b                    binary code of connected constituents                                        
 7 Futura       I  Permutation  I Nb_Var               position of IX components in Fc offet by L_Var_in_Fc
   Futura                                              or none if identity 
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    2+(IX).FS.Delta             
 NDAT :(IX).FS.b+5[+Nb_var]  Futura    
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                16
 I BANK # : 16  IFUP (IU)  I                                                                                             IFUP 
 ===========================
                    Generic IX = IN Bank                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  NUL1                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  FC              List of deeper faces                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  L_Var_in_Fc  i                      Variable's location in face                                                  
 2              I  L_Var_in_DL  I                      variable's location in DL bank                                               
 3              I  Int_Nb       I                      interface number                                                             
 4              I  Nb_Var       I                      Number of variables                                                          
 5              I  Nb_Cx_Fc_Lo  I                      number of connected faces at next level(delta)                               
 6              I  Bin_Code     I b                    binary code of connected constituents                                        
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(IU).FS.Delta             
 NDAT :(IU).FS.b+5                     
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                17
 I BANK # : 17  SIZE (SZ)  I                                                                                             SIZE 
 ===========================
                     Size Bank : 7/11/86                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Tot_Nb_Var   I                      Total Number of variables                                                    
 2              I  Nb_Int       I                      Number of interfaces (=n)                                                    
 3              I  Int_Sz       I Nb_Int               List of the n interfaces size                                                
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SZ).FS.Nb_Int+2                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                18
 I BANK # : 18  MXT  (MT)  I                                                                                             MXT  
 ===========================
                    Matrix table : 25/8/85                                      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RTB                                                                                                                                              I
       -3      NI  CTB             =0                                                                                                                               I
       -4      NI  MXR                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -4      NI  MXR             list of Row matrix table                                                                                                         I
   OUNDF       NI  RSIZE           Rows                                                                                                                             I
   OUNDF       NI  CSIZE           Columns                                                                                                                          I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Type         I                      =1                                                                           
 2              I  Nb_St_BRows  I                      NUmber of stored block rows                                                  
 3              I  BRow_Nb_IM   I Nb_St_BRows          list of block rows numbers in IM=IT                                          
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  4
 NLKR :    3+(MT).FS.Nb_St_BRows       
 NDAT :(MT).FS.Nb_St_BRows+2           
~~~~~~~~> links to CSIZE and RSIZE should be calculated by the user
1                                                                          910214
 ===========================                                                                                                19
 I BANK # : 19  MXR  (RT)  I       ??? Semble OBSOLETE see OSUTruc ???                                                                                      MXR  
 ===========================
                    Row matrix table : 22/7/85                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CTBR                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  MX              list of matrix banks                                                                                                             I
   OUNDF       NI  RTB                                                                                                                                              I
   OUNDF       NI  CTB                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
     *******    I----------      KERNEL    ----------------------------------------------------------------------------
 1   *****FAUX  I  BRow_Nb_TM   I                      Row Blocks number in IM                                                      
 2   ******     I  Nb_St_BCols  I                                                                                                   
 3              I  BCol_Nb_IM   I Nb_St_BCols          List of BColumns number in IM                                                
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    3+(RT).FS.M                 
 NDAT :(RT).FS.Nb_St_BCols+2           
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                20
 I BANK # : 20  MXRC (RC)  I        see OSUTables Faux                                                                                     MXRC 
 ===========================
                    Row matrix table for auxiliary C matrix : 7/11/86           
                    (Expantion from MXR(A)

                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CTBR                                                                                                                                             I
       -3      NI  MX                                                                                                                                               I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  MX              list of matrix banks                                                                                                             I
   OUNDF       NI  NUL1            zero hard                                                                                                                        I
   OUNDF       NI  NUL2            zero hard                                                                                                                        I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Nb_N0_Bcl    I                      NUmber of non zero BColumns(+n)                                              
 2              I  Nb_Bcl       I                      Number of Bcolumns (=m)                                                      
 3   ****       I  L_N0_Bc      l ::>(n)               list of non zero Bcols loc                                                   
 4              I  Zero         I Nb_BCols::> -n !!!    LIst of m zeros                                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    3+(RC).FS.M                 
 NDAT :(RC).FS.Nb_BCols+3              
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                21
 I BANK # : 21  MX   (MX)  I                                                                                             MX   
 ===========================
                    Matrix bank 22/7/85                                         


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  M_Rows       R N_Cols*N_Row          Matrix elements stored row wise                                             
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(MX).FS.N_Cols*N_Rows+0         
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                22
 I BANK # : 22  CTBR (CR)  I                                                                                             CTBR 
 ===========================
                    Column table, block-wise,for a Row : 25/8/85                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~> SM block column number = 0i.e. there is no SM block 
     *column correspondingto this TM block column
1                                                                          910214
 ===========================                                                                                                23
 I BANK # : 23  RTB  (RB)  I                                                                                             RTB  
 ===========================
                    Row Table, Block wise : 22/7/85                             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDTB                                                                                                                                             I
       -3      NI  RTE                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  RTE                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    1+(RB).FS.P                 
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                24
 I BANK # : 24  CTB  (CB)  I                                                                                             CTB  
 ===========================
                    Column Table, Block Wise : 22/7/85                          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDTB                                                                                                                                             I
       -3      NI  CTE                                                                                                                                              I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -3      NI  CTE                                                                                                                                              I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  3
 NLKR :    1+(CB).FS.P                 
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                25
 I BANK # : 25  RDTB (BR)  I                                                                                             RDTB 
 ===========================
                    Row Duplication Table, Block Wise : 22/7/85                 


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                26
 I BANK # : 26  CDTB (BC)  I                                                                                             CDTB 
 ===========================
                    Columnm Duplication Table, Block Wise : 22/7/85             


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                27
 I BANK # : 27  RTE  (RE)  I                                                                                             RTE  
 ===========================
                    Row Table,Element Wise 22/7/85                              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDTE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                28
 I BANK # : 28  CTE  (CE)  I                                                                                             CTE  
 ===========================
                    Column Table,Element Wise 22/7/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDTE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                29
 I BANK # : 29  RDTE (ER)  I                                                                                             RDTE 
 ===========================
                    Row Duplication Table, Element Wise 22/7/85                 


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                30
 I BANK # : 30  CDTE (EC)  I                                                                                             CDTE 
 ===========================
                    Column Duplication Table, Element Wise 22/7/85              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                31
 I BANK # : 31  ZMX  (ZM)  I                                                                                             ZMX  
 ===========================
                    Call Bank for MZX package 22/7/85                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                32
 I BANK # : 32  RI   (RI)  I                                                                                             RI   
 ===========================
                     Row Inclusion Bank : 23/5/85                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                33
 I BANK # : 33  PAIR (PR)  I                                                                                             PAIR 
 ===========================
                    Pairing Bank : 7/11/86                                      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                34
 I BANK # : 34  RDXT (XR)  I                                                                                             RDXT 
 ===========================
                    Row Duplication Cross Table : 22/7/85                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDXB                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                35
 I BANK # : 35  CDXT (XC)  I                                                                                             CDXT 
 ===========================
                    Column Duplication Cross Table : 22/7/85                    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXB                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                36
 I BANK # : 36  RDXB (BX)  I                                                                                             RDXB 
 ===========================
                     Row Duplication Cross Table - Block Wize : 7/11/86         


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  RDXE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                37
 I BANK # : 37  CDXB (XB)  I                                                                                             CDXB 
 ===========================
                     Column Duplication Cross Table - Block Wize : 7/11/86      


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXE                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                38
 I BANK # : 38  RDXE (EX)  I                                                                                             RDXE 
 ===========================
                     Row Duplication Cross Table - Element Wize : 22/7/85       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                39
 I BANK # : 39  CDXE (XE)  I                                                                                             CDXE 
 ===========================
                     Column Duplication Cross Table - Element Wize : 22/7/85    


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                40
 I BANK # : 40  WEZ  (WE)  I                                                                                             WEZ  
 ===========================
                    EZ Working Bank 17/7/89                                     


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  WCST                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -2      NI  WCST                                                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  2
 NLKR :    1+(WE).FS.GAMMA             
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                41
 I BANK # : 41  WCST (WK)  I                                                                                             WCST 
 ===========================
                     Working Bank for Constituants (see WEZ) : 17/7/89          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
       -2      NI  CDXF            CDXT(F)                                                                                                                          I
       -3      NI  CDXX            CDXT(X)                                                                                                                          I
       -4      NI  MXT              C matrix                                                                                                                        I
       -5      NI  PAIR                                                                                                                                             I
                I----------      REFERENCE ----------------------------------------------------------------------------
       -5      NI  PAIR                                                                                                                                             I
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  5
 NLKR :    1+(WK).FS.NU                
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                42
 I BANK # : 42  DL   (DL)  I                                                                                             DL   
 ===========================
                     Delta vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Delta        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(DL).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                43
 I BANK # : 43  FI   (FI)  I                                                                                             FI   
 ===========================
                    FI vector                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  FI           R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(FI).FS.Ndatas+0                
~~~~~~~~>  Bank without link, FIZ is next of FI
1                                                                          910214
 ===========================                                                                                                44
 I BANK # : 44  ETA  (ET)  I                                                                                             ETA  
 ===========================
                    ETA vector                                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Eta          R Ndatas               Dimension of vector Eta                                                      
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(ET).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                45
 I BANK # : 45  OMG  (MG)  I                                                                                             OMG  
 ===========================
                     OMEGA vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Omega        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(MG).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                46
 I BANK # : 46  GAM  (GA)  I                                                                                             GAM  
 ===========================
                     GAMMA vector                                               


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Gamma        R Ndatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(GA).FS.Ndatas+0                
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                47
 I BANK # : 47  AB   (AB)  I                                                                                             AB   
 ===========================
                     ((A)-1 B)+ matrix                                          


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  AB_Mx        R Dim                   A or AB matrix                                                              
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(AB).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                48
 I BANK # : 48  AH   (AH)  I                                                                                             AH   
 ===========================
                     Ahat matrix                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                49
 I BANK # : 49  CD   (CD)  I                                                                                             CD   
 ===========================
                    Cell description Bank                                       


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Idata        I -1                   Symbol in equivalence with the following                                     
 1              I  Data         R NDatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(CD).FS.NDatas+0                
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                50
 I BANK # : 50  D    (DM)  I                                                                                             D    
 ===========================
                     D matrix                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                51
 I BANK # : 51  TD   (TD)  I                                                                                             TD   
 ===========================
                    Transfer Description Block                                  


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Idata        I -1                   Symbol in equivalence with the following                                     
 1              I  Data         R NDatas                                                                                            
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(TD).FS.NDatas+0                
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                52
 I BANK # : 52  CT   (CT)  I                                                                                             CT   
 ===========================
                     Transposed C matrix                                        


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  Ct_SV        R Dim                  Ct bloc corresponding to one CPlug                                           
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(CT).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                53
 I BANK # : 53  B    (BM)  I                                                                                             B    
 ===========================
                     B matrix                                                   


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  B_Mx         R Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(BM).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                54
 I BANK # : 54  RSIZE(SR)  I                                                                                             RSIZE
 ===========================
                     Row size bank                                              


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  R_Size       I Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SR).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                55
 I BANK # : 55  CSIZE(SC)  I                                                                                             CSIZE
 ===========================
                     Column size bank                                           


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------
 1              I  cl_Size      I Dim                                                                                               
                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :(SC).FS.Dim+0                   
~~~~~~~~>  Bank without link
1                                                                          910214
 ===========================                                                                                                56
 I BANK # : 56  MXRA (RA)  I                                                                                             MXRA 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                57
 I BANK # : 57  CDXF (XI)  I                                                                                             CDXF 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>
1                                                                          910214
 ===========================                                                                                                58
 I BANK # : 58  CDXX (XX)  I                                                                                             CDXX 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>              [To be Taken from MXT Bk]
1                                                                          910214
 ===========================                                                                                                59
 I BANK # : 59  MXTC (CM)  I                                                                                             MXTC 
 ===========================
                                                                                


                --------------------------------------------------------------------------------------------------------
                I----------      LINKS     ----------------------------------------------------------------------------
                I----------      STRUCTURE ----------------------------------------------------------------------------
                I----------      REFERENCE ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      FIXED     ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------
                I----------      KERNEL    ----------------------------------------------------------------------------

                --------------------------------------------------------------------------------------------------------
                I----------      USER      ----------------------------------------------------------------------------
                --------------------------------------------------------------------------------------------------------

 NLKS :  1
 NLKR :    0                           
 NDAT :0                               
~~~~~~~~>


 STRUCTURE LINKS FOR ZOOM TREE CONSTRUCTION :

      FM   
      FC    CL    IN    AH    DL    FI    ETA   OMG   GAM   LEV   SIZE  FC2IX
      CL   
      FC    NUL1  CPLUG AB    ETA  
      TR   
      NUL1  TPLUG NUL2  D     FI   
      LEV  
      FM   
      CPLUG
      CX    CL   
      TPLUG
      TR   
      CX   
      CPLUG
      FC2IX
      IF    NUL1  IFUP 
      FCUP 
      IF    IN    IFUP 
      FC   
      IF    IN    IFUP 
      IC   
      B     CT    FCUP 
      IT   
      B     CT    FCUP 
      IF   
      NUL1  FC   
      IN   
      TR    FC   
      IX   
      FCUP 
      IFUP 
      NUL1  FC   
      SIZE 
      NUL1 
      MXT  
      RTB   CTB   MXR   RSIZE
      MXR  
      CTBR  MX   
      MXRC 
      CTBR  MX    NUL1 
      MX   
      CTBR 
      CTBR 
      CTBR 
      RTB  
      RDTB  RTE   RTE  
      CTB  
      CDTB  CTE   CTE  
      RDTB 
      CDTB 
      CDTB 
      CDTB 
      RTE  
      RDTE  CTE  
      CTE  
      CDTE  CTE  
      RDTE 
      CDTE 
      CDTE 
      CDTE 
      ZMX  
      CDTE 
      RI   
      CDTE 
      PAIR 
      CDTE 
      RDXT 
      RDXB  CTE  
      CDXT 
      CDXB  CTE  
      RDXB 
      RDXE  CTE  
      CDXB 
      CDXE  CTE  
      RDXE 
      CDXE 
      CDXE 
      CDXE 
      WEZ  
      WCST  WCST 
      WCST 
      CDXF  CDXX  MXT   PAIR  PAIR 
      DL   
      CDXF 
      FI   
      CDXF 
      ETA  
      CDXF 
      OMG  
      CDXF 
      GAM  
      CDXF 
      AB   
      CDXF 
      AH   
      CDXF 
      CD   
      CDXF 
      D    
      CDXF 
      TD   
      CDXF 
      CT   
      CDXF 
      B    
      CDXF 
      RSIZE
      CDXF 
      CSIZE
      CDXF 
      MXRA 
      CDXF 
      CDXF 
      CDXF 
      CDXX 
      CDXF 
      MXTC 
      CDXF 
<-----/|\------>  ./Help/Users/Combined_Facilities/Bank_desc.short

     *************************
     * BANK DESCRIPTION LIST *
     *************************


     *********************************************************************************
     I     FM    : FM    I     CL    : CL    I     TR    : TR    I     LEV   : LV    I
     I     CPLUG : SV    I     TPLUG : TV    I     CX    : CX    I     FC2IX : FF    I
     I     FCUP  : FA    I     FC    : FC    I     IC    : IC    I     IT    : IT    I
     I     IF    : IF    I     IN    : IN    I     IX    : IX    I     IFUP  : IU    I
     I     SIZE  : SZ    I     MXT   : MT    I     MXR   : RT    I     MXRC  : RC    I
     I     MX    : MX    I     CTBR  : CR    I     RTB   : RB    I     CTB   : CB    I
     I     RDTB  : BR    I     CDTB  : BC    I     RTE   : RE    I     CTE   : CE    I
     I     RDTE  : ER    I     CDTE  : EC    I     ZMX   : ZM    I     RI    : RI    I
     I     PAIR  : PR    I     RDXT  : XR    I     CDXT  : XC    I     RDXB  : BX    I
     I     CDXB  : XB    I     RDXE  : EX    I     CDXE  : XE    I     WEZ   : WE    I
     I     WCST  : WK    I     DL    : DL    I     FI    : FI    I     ETA   : ET    I
     I     OMG   : MG    I     GAM   : GA    I     AB    : AB    I     AH    : AH    I
     I     CD    : CD    I     D     : DM    I     TD    : TD    I     CT    : CT    I
     I     B     : BM    I     RSIZE : SR    I     CSIZE : SC    I     MXRA  : RA    I
     I     CDXF  : XI    I     CDXX  : XX    I     MXTC  : CM    I     
     *********************************************************************************
1                                                                          910214
 ===========================                                                                                   
 I BANK # :  1  FM   (FM)  I                                                                                   
 ===========================
                      Family Bank                                               
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
       -2      NI  FC              Face                                                                        
       -3      NI  CL              Cell . IN if structure transfer (not yet implemeted)                        
       -4      NI  IN              Internal interface bank. CL if structure transfer                           
       -5      NI  AH               A chapeau (en francais dans le texte)                                      
       -6      NI  DL              Delta vector                                                                
       -7      NI  FI                                                                                          
       -8      NI  ETA                                                                                         
       -9      NI  OMG                                                                                         
       -10     NI  GAM                                                                                         
       -11     NI  LEV                                                                                         
       -12     NI  SIZE            Size of interfaces                                                          
                I----------      REFERENCE --------------------------------------------------------------------
       -13     NI  FC2IX           First face connecting to an IX bank                                         
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                       
 4              I  Nb_Int_lvls  I                      Number of internal levels this FM included              
 5              I  Nb_Int_Var   I                      Number of internal variables                            
 6              I  Nb_Out_Var   I                      Number of outgoing variables                            
 7              I  Min_SO_Nb    I                      Lowest Numero of Structure objects                      
 8              I  Max_SO_Nb    I                      Highest Numero of Structure Objects                     
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                   
 10             I  Depth        I                      Depth Begining at Zeus to zero                          
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                      
 12             I  Nb_Ex_Int    I                      Number of external interfaces                           
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                         
 14             I  Out_Var_Ty   I                      Outgoing variable type                                  
 15             I  Nb_Ctt       I                      Number of constituents                                  
 16             I  Nb_In_Int    I                      Number of internal interfaces                           
 17             I  In_Int_Mx_Sz I                      Biggest internal interface size                         
 18             I  Mx_Nb_Lo_Ctt I                      Biggest number of constituents in inner FMs             
 19             I  Dim_Eta      I                      Dimension of ETA and GAMa                               
 20             I  Nm_FM        I                      Family first name                                       
 21             I  Cd_FM        I                             and code                                         
                -----------------------------------------------------------------------------------------------

1                                                                          910214
 ===========================                                                                                   
 I BANK # :  2  CL   (CL)  I                                                                                   
 ===========================
                      Cell Bank when connecting transfer                        
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
       -2      NI  FC                                                                                          
       -3      NI  NUL1            Zero hard                                                                   
       -4      NI  CPLUG           C-plug                                                                      
       -5      NI  AB              A or (((A)-1)B)+, next=D if it exists                                       
                I----------      REFERENCE --------------------------------------------------------------------
       -6      *I  ETA             State vector of the whole cells of a family                                 
       -7      *I  GAM                                                                                         
       -8      NI  CD              Cell description bank                                                       
       -9      NI  FC2IX           First Face connecting to an IX bank                                         
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                       
 4              I  In_ET        I                      State variable location in ETA bank                     
 5              I  Nb_St_Var    I                      Number of state variables                               
 6              I  Nb_Cx_Tr_Var I                      Number of connected transfer variables                  
 7              I  Nm_Cl        I                      Cell first name                                         
 8              I  Cd_Cl        I                           and code                                           
               ============================== SUB-BANK : SO.===================================================
 9              I  Nxt_lvl_Ad   I                      =JZESO location of next level address                   
 10             I  Depth        I                      Depth Begining at Zeus to zero                          
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                      
 12             I  Nb_Ex_Int    I                      Number of external interfaces                           
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                         
 14             I  Cl_Nb        I                      Cell unique number from OFRAME                          
 15             I  N_desc       I                      Number of description words(PDL to cancel)              
 16             I  Data         R N_desc                Datas processor dependant                              
               ============================== SUB-BANK : TO.===================================================
 9              I  N_desc       I                      Number of description words(PDL to cancel)              
 10             I  Data         R N_desc                Datas processor dependant                              
                -----------------------------------------------------------------------------------------------
                I----------      USER      --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------

1                                                                          910214
 ===========================                                                                                   
 I BANK # :  3  TR   (TR)  I                                                                                   
 ===========================
                      Transfer Bank when connecting stansfer                    
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
       -2      NI  NUL1            hard zero                                                                   
       -3      NI  TPLUG                                                                                       
       -4      NI  NUL2            Zero hard                                                                   
       -5      NI  D               D matrix                                                                    
                I----------      REFERENCE --------------------------------------------------------------------
       -6      *I  FI              vector of the whole transfers of a family                                   
       -7      *I  OMG                                                                                         
       -8      NI  TD                                                                                          
       -9      NI  FMUP             Upper family                                                               
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  Types        I 3                    O_Numero,Nature,?                                       
 4              I  In_FI        I                      Transfer variable location in FI bank                   
 5              I  Nb_Tr_Var    I                      Number of transfer variables                            
 6              I  Nb_Cx_St_Var I                      Number of connected transfer variables                  
 7              I  Nb_Extr      I                      Number of extremities (gama)                            
 8              I  Nb_Fluxes    I                      Number of fluxes                                        
               ============================== SUB-BANK : TO.===================================================
 9              I  Nxt_lvl_Ad   I                      =JZESO=4 location of next level address                 
 10             I  Depth        I                      Depth Begining at Zeus to zero                          
 11             I  FMU_Ctt_Nb   I                      Constituent number in upper family                      
 12             I  Nb_Ex_Int    I                      Number of external interfaces                           
 13             I  Ex_Int_Mx_Sz I                      biggest external interface size                         
 14             I  Tr_Nb        I                      Tr unique number from OFRAME                            
 15             I  N_desc       I                      Number of description words(PDL to cancel)              
 16             I  Data         R N_desc                Datas processor dependant                              
               ============================== SUB-BANK : SO.===================================================
 9              I  N_desc       I                      Number of description words(PDL to cancel)              
 10             I  Data         R N_desc                Datas processor dependant                              
                -----------------------------------------------------------------------------------------------
                I----------      USER      --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------

1                                                                          910214
 ===========================                                                                                   
 I BANK # :  5  CPLUG(SV)  I      *** ATTENTION MODIF MANUELLE ***                                             
 ===========================
                     State Variables Bank                                       
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
       -2      NI  CX                                                                                          
                I----------      REFERENCE --------------------------------------------------------------------
       -3      NI  CL                                                                                          
       -4      NI  ETA             IPETA = LETA +IQ(LCL+4), begining of this cell vector in the ETA bank       
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  Nb_St_Var    I                      Number of State Variables                               
 2              I  C_Plug_Nm    I                      (Self explanatory)                            ***
 3              I  C_Plug_Nb    I                      (Self explanatory)                            ***
 4              I  Cx_St_Var_Nb I Nb_St_Var            List of connected state variable numbers                
                -----------------------------------------------------------------------------------------------
                I----------      USER      --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------

 ===========================                                                                                   
 I BANK # :  6  TPLUG(TV)  I                                                                                   
 ===========================
                    Transfer variables bank= T-plug                             
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
                I----------      REFERENCE --------------------------------------------------------------------
       -2      NI  TR               Transfer Bank                                                              
       -3      NI  FI              IPFI = LFI +IQ(LTR+4), beginnig of this transfer vector in the FI bank      
       -4      NI  CX              list of connected CX's                                                      
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  Nb_Cx_CX     I                      Number of connected CX's                                
 2              I  Nb_Tr_Var    I                      Number of transfer Variables                            
 3              I  Cx_Tr_Var_Nb I Nb_Tr_Var            List of connected transfer Variables numbers            
                -----------------------------------------------------------------------------------------------
                I----------      USER      --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------

1                                                                          910214
 ===========================                                                                                   
 I BANK # :  7  CX   (CX)  I                                                                                   
 ===========================
                     Connection Bank                                            
                -----------------------------------------------------------------------------------------------
                I----------      LINKS     --------------------------------------------------------------------
                I----------      STRUCTURE --------------------------------------------------------------------
                I----------      REFERENCE --------------------------------------------------------------------
       -2      NI  CPLUG                                                                                       
       -3      NI  TPLUG                                                                                       
       -4      NI  IC               or IT when structure transfer                                              
                -----------------------------------------------------------------------------------------------
                I----------      FIXED     --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------
                I----------      KERNEL    --------------------------------------------------------------------
 1              I  LFI_in_IF    I                      FI variables location in IC or IT                       
 2              I  Nb_Var       I                      Number of Variables                                     
                -----------------------------------------------------------------------------------------------
                I----------      USER      --------------------------------------------------------------------
                -----------------------------------------------------------------------------------------------

<-----/|\------>  ./Help/Users/Combined_Facilities/Gestion_des_pas_de_temps
*****************************************************************************
*****************************************************************************
******** Gestion des pas de temps (dtime) entre Zinit et les Processeurs ****
*****************************************************************************
**************************************************************(Al1 Mai 99)***

our amener les utilisateurs à gérer leur pas de temps dans ZSteer, on a créé
un tableau Time_char(4) en common entre les processeurs et Zinit. :

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)

Exemple d'utilisation dans un exemple conducto-convectif 
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
 Nu = Viscosite/Ro_Air;
 lpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init
Time_char(1)=99999.; Time_char(2)=99999.;

puis, dans le ZSTEER :
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;
! NITER prenant la valeur du nombre d'iterations efffectuees dans la D_loop,
! le facteur /float(NITER+1) donne une regulation numerique en plus du critere
    
! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
!
! *************************************************************
! il a suffit de gerer dans un processeur judicieusement choisi
! les deux premiers Time_char :
! Zsteer info for steering dTime
DO i=1,2
< if (abs(VIS_uv(i)) .gt. 1.E-06) then;
    Time_char(i)
       = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
  endif;
>;
;
On obtiend un critère en Couran (cad assez rapidement).
Inconvenient : les vitesses sont obtenues après la D_loop, c'est donc
à ce moment qu'il faudrait effectuer ce test, alors que ZSTEER est appelé
avant. Solution future : on fait le Courant_remplissage dans un K entry
de cellule (appelés pendant la D_loop, et on appellerait un nouveau point
d'entrée : KSTEER de Zinit, juste avant le step_advance, qui utilise le
dTime.
Remarque : on peut aussi construire un critere numerique en evaluant des temps
caracteristiques de cellules a l'aide de la routine O_Eta_Eta (cf $ZOOM/TexDoc/celproc/?*)
<-----/|\------>  ./Help/Users/Combined_Facilities/Gestion_des_pas_de_temps.bak
*****************************************************************************
*****************************************************************************
******** Gestion des pas de temps (dtime) entre Zinit et les Processeurs ****
*****************************************************************************
**************************************************************(Al1 Mai 99)***

our amener les utilisateurs à gérer leur pas de temps dans ZSteer, on a créé
un tableau Time_char(4) en common entre les processeurs et Zinit. :

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)

Exemple d'utilisation dans un exemple conducto-convectif 
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
 Nu = Viscosite/Ro_Air;
 lpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init
Time_char(1)=99999.; Time_char(2)=99999.;

puis, dans le ZSTEER :
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;
! NITER prenant la valeur du nombre d'iterations efffectuees dans la D_loop,
! le facteur /float(NITER+1) donne une regulation numerique en plus du critere
    
! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
!
! *************************************************************
! il a suffit de gerer dans un processeur judicieusement choisi
! les deux premiers Time_char :
! Zsteer info for steering dTime
DO i=1,2
< if (abs(VIS_uv(i)) .gt. 1.E-06) then;
    Time_char(i)
       = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
  endif;
>;
;
On obtiend un critère en Couran (cad assez rapidement).
Inconvenient : les vitesses sont obtenues après la D_loop, c'est donc
à ce moment qu'il faudrait effectuer ce test, alors que ZSTEER est appelé
avant. Solution future : on fait le Courant_remplissage dans un K entry
de cellule (appelés pendant la D_loop, et on appellerait un nouveau point
d'entrée : KSTEER de Zinit, juste avant le step_advance, qui utilise le
dTime.
Remarque : on peut aussi construire un critere numerique en evaluant des temps
caracteristiques de cellules a l'aide de la routine O_Eta_Eta (cf /zoom/TexDoc/celproc/?*)
<-----/|\------>  ./Help/Users/Combined_Facilities/Print_levels
Voir Egalement
                $ZOOM/Help/Users/Proc/Easy_printing_facilities           PROC
                $ZOOM/Help/Users/Zinit/ZDL/Zdl.html                     ZINIT



mercredi 07/07/1993
===================(Al1)
 De Zinit, on peut définir des niveaux de diagnostics, vérifs et print_out,
en affectant des valeurs entières au tableau: OZPLVL(12).
                          (Cependant, le mot 6 gère les fichiers pour viZu)
 La valeur nulle supprime les print ou vérif.
   ( le méta signe "*" indique un ET logique avec d'autres symboles, )

          OZPLVL( ):              =: (D):=Default
                                  (=0 supprime toute sortie dans la rubrique.)

                 1  Structure info
                                  =1 (D) tree.hlp
                                  =2     interfaces  * ZPRINT(LFm)
                                  =3     Cl et Tr Cx * ZPRINT(LCl/Tr)
routines concernees: ( DOPLUG, OW2PAW, OSK2HP )

                 2  Processeurs (Géré par Users)
                                  =1 (D)
                                  =any
                     exemple: in Zinit OZPLVL(2)=3; ( Print out level 3)
                              in Processors :
                                 IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>
                                 il génère IF ZPRINT.and.k.ge.OZPLVL(2) <>

                 3  in D_loop
                                  =1 (D) Sorties à TOL ok * MxDeep * ZPRINT(LFM)
                                  =2     all-along Loop infos    id
                     ( OUPEQ, ZOOM )
note : *Mxdeep * Zprint(LFM) signifie que l'on demande un niveau de sorties qui sera effectue
pour les familles de profondeur .le. Mxdeep, que l'on aura demande d'imprimer dans zinit et
pour les pas de temps pour lesquels on a ZPRINT = .TRUE.

                 4  Step_Advance (Mx_only)
                                  =1     Scatter plot only
                                  =2 (D) Full Mx * MxDeep * ZPRINT(LFM)
                     ( MOVUP, ZOOM )

                 5  Sortie console (ou ..._batch.err)
                                  =1 (D) Step end
                                  =2     fin D_loop
                                  =3     some more, for very long jobs.
                     ( ZOOM )

                 6  Sorties pour viZu 
                                  =-1    Supprime tout
                                  =0     ne supprime que la CDFile
                           Si positif ou nul:                   >>>>>>(en développement le 16/05/94)
                                  =1[modulo10] Héra Mx only(not implemented)
                                  ( => 1 ne supprime que la MXMX )
                                  =2 (D)       MXMX full
                                  =...+10      MZMX = [MXMX]-1 (pour post-traitement à la Bianco)
                                  =...+100     MDMX(MXMX à la sortie du D_Loop)
                     ( OPSCMX,OEQU,MOVUP,DZSPMX )

                 7  Vérif info et mémoire
                                  =1     Un DZVeri par step et DZSTORE au premier step et final
                                  =2 (D) DZVeri at end of EOLMAX
                                         DZStore after Zinit
                                  =3     some more DZSTORE (Very long jobs)
                                  =9     Debug option: some more DZVERI (in ZOOM,OICLTR)
                                         (even if not.ZPRINT.)
                     ( OUPEQ, MOVUP, ZOOM )

                 8  Matrix infos
                                  =1 (D)Tridiag message * MxDeep&ZPRINT(LFM)
                                  =2    Conditionnement (not implemented)
                     ( ORES )

                 9  Choix d'une version de Ker
                                  =1 (D)Version proxima
                                  =2 Version futura (F_ et V_ entries). Tr bit flags.
                                     ( not implemented )
                     ( ONCO, ONUMA, OTRDA, OCMX, OF2MXT )

                10  Futura Clubbered Cx Bug Long Test
                                  =1 Test print
                                  =2 Debugger as it is
                                     ( not implemented )
                      ( OCIC, OFRAME, OIXFAD, ONTRIX )

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$  Les OZPLVL(11-12) sont réservées aux programmeurs du noyau.  =1 (D)   $$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

OZPLVL(11) :   Tests de gestion des pivots dans ogaus/moxequ/ludcomp :
               1 : defaut
               2 : print index de gestion des permutations de lignes
               3 : print des matrices
               4 : call LUDCOM in lieu of LUDCMR avec gestion pivots des nicénéidés
               5 : comme 4 mais moins de print
               6 : sans print
OZPLVL(12) :

    Deck ONFIC                           
      < LTRB=0;                if OZPLVL(12).eq.99 < Print_Cl_Id(LCL); >
                IF OZPLVL(12).eq.99                                      "TEST"
    Deck OA2CDX                          
      if OZPLVL(12).eq.33 .and. istep.eq.1
    Deck LOG_BOOK                        
        <<<>>>Test ::> OZPLVL(12).eq.33 fait un dzsnap pour istep.eq.2;

ADDITIONS
=========
vendredi 29/04/1994:      MDMX option.
mercredi 11/12/1996:      10 DeClubbering level
BUGS
====

SUGGESTIONS
===========
   Prière de signer et dater.


<-----/|\------>  ./Help/Users/Combined_Facilities/Print_levels.bak
Voir Egalement
                /zoom/Help/Users/Proc/Easy_printing_facilities           PROC
                /zoom/Help/Users/Zinit/ZDL/Zdl.html                     ZINIT



mercredi 07/07/1993
===================(Al1)
 De Zinit, on peut définir des niveaux de diagnostics, vérifs et print_out,
en affectant des valeurs entières au tableau: OZPLVL(12).
                          (Cependant, le mot 6 gère les fichiers pour viZu)
 La valeur nulle supprime les print ou vérif.
   ( le méta signe "*" indique un ET logique avec d'autres symboles, )

          OZPLVL( ):              =: (D):=Default
                                  (=0 supprime toute sortie dans la rubrique.)

                 1  Structure info
                                  =1 (D) tree.hlp
                                  =2     interfaces  * ZPRINT(LFm)
                                  =3     Cl et Tr Cx * ZPRINT(LCl/Tr)
routines concernees: ( DOPLUG, OW2PAW, OSK2HP )

                 2  Processeurs (Géré par Users)
                                  =1 (D)
                                  =any
                     exemple: in Zinit OZPLVL(2)=3; ( Print out level 3)
                              in Processors :
                                 IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>
                                 il génère IF ZPRINT.and.k.ge.OZPLVL(2) <>

                 3  in D_loop
                                  =1 (D) Sorties à TOL ok * MxDeep * ZPRINT(LFM)
                                  =2     all-along Loop infos    id
                     ( OUPEQ, ZOOM )
note : *Mxdeep * Zprint(LFM) signifie que l'on demande un niveau de sorties qui sera effectue
pour les familles de profondeur .le. Mxdeep, que l'on aura demande d'imprimer dans zinit et
pour les pas de temps pour lesquels on a ZPRINT = .TRUE.

                 4  Step_Advance (Mx_only)
                                  =1     Scatter plot only
                                  =2 (D) Full Mx * MxDeep * ZPRINT(LFM)
                     ( MOVUP, ZOOM )

                 5  Sortie console (ou ..._batch.err)
                                  =1 (D) Step end
                                  =2     fin D_loop
                                  =3     some more, for very long jobs.
                     ( ZOOM )

                 6  Sorties pour viZu 
                                  =-1    Supprime tout
                                  =0     ne supprime que la CDFile
                           Si positif ou nul:                   >>>>>>(en développement le 16/05/94)
                                  =1[modulo10] Héra Mx only(not implemented)
                                  ( => 1 ne supprime que la MXMX )
                                  =2 (D)       MXMX full
                                  =...+10      MZMX = [MXMX]-1 (pour post-traitement à la Bianco)
                                  =...+100     MDMX(MXMX à la sortie du D_Loop)
                     ( OPSCMX,OEQU,MOVUP,DZSPMX )

                 7  Vérif info et mémoire
                                  =1     Un DZVeri par step et DZSTORE au premier step et final
                                  =2 (D) DZVeri at end of EOLMAX
                                         DZStore after Zinit
                                  =3     some more DZSTORE (Very long jobs)
                                  =9     Debug option: some more DZVERI (in ZOOM,OICLTR)
                                         (even if not.ZPRINT.)
                     ( OUPEQ, MOVUP, ZOOM )

                 8  Matrix infos
                                  =1 (D)Tridiag message * MxDeep&ZPRINT(LFM)
                                  =2    Conditionnement (not implemented)
                     ( ORES )

                 9  Choix d'une version de Ker
                                  =1 (D)Version proxima
                                  =2 Version futura (F_ et V_ entries). Tr bit flags.
                                     ( not implemented )
                     ( ONCO, ONUMA, OTRDA, OCMX, OF2MXT )

                10  Futura Clubbered Cx Bug Long Test
                                  =1 Test print
                                  =2 Debugger as it is
                                     ( not implemented )
                      ( OCIC, OFRAME, OIXFAD, ONTRIX )

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$  Les OZPLVL(11-12) sont réservées aux programmeurs du noyau.  =1 (D)   $$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

OZPLVL(11) :   Tests de gestion des pivots dans ogaus/moxequ/ludcomp :
               1 : defaut
               2 : print index de gestion des permutations de lignes
               3 : print des matrices
               4 : call LUDCOM in lieu of LUDCMR avec gestion pivots des nicénéidés
               5 : comme 4 mais moins de print
               6 : sans print
OZPLVL(12) :

    Deck ONFIC                           
      < LTRB=0;                if OZPLVL(12).eq.99 < Print_Cl_Id(LCL); >
                IF OZPLVL(12).eq.99                                      "TEST"
    Deck OA2CDX                          
      if OZPLVL(12).eq.33 .and. istep.eq.1
    Deck LOG_BOOK                        
        <<<>>>Test ::> OZPLVL(12).eq.33 fait un dzsnap pour istep.eq.2;

ADDITIONS
=========
vendredi 29/04/1994:      MDMX option.
mercredi 11/12/1996:      10 DeClubbering level
BUGS
====

SUGGESTIONS
===========
   Prière de signer et dater.


<-----/|\------>  ./Help/Users/Combined_Facilities/Print_levels.bak1
Voir Egalement
                /zoom/Help/Users/Proc/Easy_printing_facilities           PROC
                /zoom/Help/Users/Zinit/ZDL/Zdl.html                     ZINIT



mercredi 07/07/1993
===================(Al1)
 De Zinit, on peut définir des niveaux de diagnostics, vérifs et print_out,
en affectant des valeurs entières au tableau: OZPLVL(12).
                          (Cependant, le mot 6 gère les fichiers pour viZu)
 La valeur nulle supprime les print ou vérif.
   ( le méta signe "*" indique un ET logique avec d'autres symboles, )

          OZPLVL( ):              =: (D):=Default
                                  (=0 supprime toute sortie dans la rubrique.)

                 1  Structure info
                                  =1 (D) tree.hlp
                                  =2     interfaces  * ZPRINT(LFm)
                                  =3     Cl et Tr Cx * ZPRINT(LCl/Tr)
routines concernees: ( DOPLUG, OW2PAW, OSK2HP )

                 2  Processeurs (Géré par Users)
                                  =1 (D)
                                  =any
                     exemple: in Zinit OZPLVL(2)=3; ( Print out level 3)
                              in Processors :
                                 IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>
                                 il génère IF ZPRINT.and.k.ge.OZPLVL(2) <>

                 3  in D_loop
                                  =1 (D) Sorties à TOL ok * MxDeep * ZPRINT(LFM)
                                  =2     all-along Loop infos    id
                     ( OUPEQ, ZOOM )
note : *Mxdeep * Zprint(LFM) signifie que l'on demande un niveau de sorties qui sera effectue
pour les familles de profondeur .le. Mxdeep, que l'on aura demande d'imprimer dans zinit et
pour les pas de temps pour lesquels on a ZPRINT = .TRUE.

                 4  Step_Advance (Mx_only)
                                  =1     Scatter plot only
                                  =2 (D) Full Mx * MxDeep * ZPRINT(LFM)
                     ( MOVUP, ZOOM )

                 5  Sortie console (ou ..._batch.err)
                                  =1 (D) Step end
                                  =2     fin D_loop
                                  =3     some more, for very long jobs.
                     ( ZOOM )

                 6  Sorties pour viZu 
                                  =-1    Supprime tout
                                  =0     ne supprime que la CDFile
                           Si positif ou nul:                   >>>>>>(en développement le 16/05/94)
                                  =1[modulo10] Héra Mx only(not implemented)
                                  ( => 1 ne supprime que la MXMX )
                                  =2 (D)       MXMX full
                                  =...+10      MZMX = [MXMX]-1 (pour post-traitement à la Bianco)
                                  =...+100     MDMX(MXMX à la sortie du D_Loop)
                     ( OPSCMX,OEQU,MOVUP,DZSPMX )

                 7  Vérif info et mémoire
                                  =1     Un DZVeri par step et DZSTORE au premier step et final
                                  =2 (D) DZVeri at end of EOLMAX
                                         DZStore after Zinit
                                  =3     some more DZSTORE (Very long jobs)
                                  =9     Debug option: some more DZVERI (in ZOOM,OICLTR)
                                         (even if not.ZPRINT.)
                     ( OUPEQ, MOVUP, ZOOM )

                 8  Matrix infos
                                  =1 (D)Tridiag message * MxDeep&ZPRINT(LFM)
                                  =2    Conditionnement (not implemented)
                     ( ORES )

                 9  Choix d'une version de Ker
                                  =1 (D)Version proxima
                                  =2 Version futura (F_ et V_ entries). Tr bit flags.
                                     ( not implemented )
                     ( ONCO, ONUMA, OTRDA, OCMX, OF2MXT )

                10  Futura Clubbered Cx Bug Long Test
                                  =1 Test print
                                  =2 Debugger as it is
                                     ( not implemented )
                      ( OCIC, OFRAME, OIXFAD, ONTRIX )

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$  Les OZPLVL(11-12) sont réservées aux programmeurs du noyau.  =1 (D)   $$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

OZPLVL(11) :   Tests de gestion des pivots dans ogaus/moxequ/ludcomp :
               1 : defaut
               2 : print index de gestion des permutations de lignes
               3 : print des matrices
               4 : call LUDCOM in lieu of LUDCMR avec gestion pivots des nicénéidés
               5 : comme 4 mais sans print
OZPLVL(12) :

    Deck ONFIC                           
      < LTRB=0;                if OZPLVL(12).eq.99 < Print_Cl_Id(LCL); >
                IF OZPLVL(12).eq.99                                      "TEST"
    Deck OA2CDX                          
      if OZPLVL(12).eq.33 .and. istep.eq.1
    Deck LOG_BOOK                        
        <<<>>>Test ::> OZPLVL(12).eq.33 fait un dzsnap pour istep.eq.2;

ADDITIONS
=========
vendredi 29/04/1994:      MDMX option.
mercredi 11/12/1996:      10 DeClubbering level
BUGS
====

SUGGESTIONS
===========
   Prière de signer et dater.


<-----/|\------>  ./Help/Users/Combined_Facilities/Vizu_Entry -> ../Proc/Vizu_Entry
<-----/|\------>  ./Help/Users/General/Execution_sur_Site_distant
Pour executer vos exos sur une machine d' un site distant
par exemple sur les HP700 du LMD  et/ou les machines
du L.E.S.E.T.H.

Initialisez votre environnement une bonne fois pour toutes sur la machine
distance en suivant les points du liens suivant :

> $ZOOM/Help/Users/General/Premises


1) se logger sur une machine au lmd

  lmd        ou l7 telnet machine

creer l'arborescence de vos exos avec la commande :

    cree_zoom_struct exo_name cpu_name site_name
ou  czs              exo_name cpu_name site_name

example hamb sur sun au lmd

    cree_zoom_struct hamb sun lmd


2) Ici sous cmz il suffit d'ajourter les suffixes machine [site] 
   a exec mod

exemple exec mod proc hp l7
        exec mod toto hp lmd
        exec mod proc ibm pole     pour les noeuds SP2


3) suivre les directives a ce moment

   - attendre le mail de fin de job distant avant de poursuivre

lorsque votre job est termine vous recevez en principe un mail
et il ne vous restera plus qu'a raparier les resultats par get_exo
dans le bon directory


RAPPEL  des commandes d'acces a l'ens :

changement de password ---> yppasswd

lmd              ( par defaut telnet sur messiaen )
lmd ftp          ( defaut ftp sur ella )
lmd telnet ella  ( telnet sur ella )
lmd ftp          ( defaut ftp sur ella )
lmd ftp ohana    ( ftp sur ohana )

RAPPEL  des commandes d'acces a toulouse :

l7              ( par defaut telnet sur apollo )
l7 ftp          ( defaut ftp sur apollo )
l7 telnet hp    ( telnet sur hp710 )
l7 telnet ibm   ( telnet sur ibm )
l7 ftp          ( defaut ftp sur ella )
l7 ftp ibm      ( ftp sur ibm )
l7 ftp hp       ( ftp sur hp )

POUR sortir de ftp : bye
POUR se delogger   : <ctrl>D <ctrl>D         2 fois !
<-----/|\------>  ./Help/Users/General/Execution_sur_Site_distant.bak
Pour executer vos exos sur une machine d' un site distant
par exemple sur les HP700 du LMD  et/ou les machines
du L.E.S.E.T.H.

Initialisez votre environnement une bonne fois pour toutes sur la machine
distance en suivant les points du liens suivant :

> /zoom/Help/Users/General/Premises


1) se logger sur une machine au lmd

  lmd        ou l7 telnet machine

creer l'arborescence de vos exos avec la commande :

    cree_zoom_struct exo_name cpu_name site_name
ou  czs              exo_name cpu_name site_name

example hamb sur sun au lmd

    cree_zoom_struct hamb sun lmd


2) Ici sous cmz il suffit d'ajourter les suffixes machine [site] 
   a exec mod

exemple exec mod proc hp l7
        exec mod toto hp lmd
        exec mod proc ibm pole     pour les noeuds SP2


3) suivre les directives a ce moment

   - attendre le mail de fin de job distant avant de poursuivre

lorsque votre job est termine vous recevez en principe un mail
et il ne vous restera plus qu'a raparier les resultats par get_exo
dans le bon directory


RAPPEL  des commandes d'acces a l'ens :

changement de password ---> yppasswd

lmd              ( par defaut telnet sur messiaen )
lmd ftp          ( defaut ftp sur ella )
lmd telnet ella  ( telnet sur ella )
lmd ftp          ( defaut ftp sur ella )
lmd ftp ohana    ( ftp sur ohana )

RAPPEL  des commandes d'acces a toulouse :

l7              ( par defaut telnet sur apollo )
l7 ftp          ( defaut ftp sur apollo )
l7 telnet hp    ( telnet sur hp710 )
l7 telnet ibm   ( telnet sur ibm )
l7 ftp          ( defaut ftp sur ella )
l7 ftp ibm      ( ftp sur ibm )
l7 ftp hp       ( ftp sur hp )

POUR sortir de ftp : bye
POUR se delogger   : <ctrl>D <ctrl>D         2 fois !
<-----/|\------>  ./Help/Users/General/Librairies_additionnelles
***************************************************************
***************************************************************
****** Utilisation de libraires additionnelles ****************
*******( ex Recipes dela installe, ou personnelle )************
***************************************************************
************************************************ Robert *******
                                               mardi 19/02/2002



 Pour utiliser des routines ou fonctions de librairies diverses,
il suffit de signaler à l'éditeur de liens en créant
sous le directory de la cmz file, un fichier de nom "cernlib"
dans lequel on écrit :


$CERN/$CERN_VER/bin/cernlib -lrecipes
                             (cet exemple pour utiliser les recipes)

ou encore - c'est equivalent :
                            -L suivi du path -l nom de lib     
$CERN/$CERN_VER/bin/cernlib -L/usr/local/lib -lrecipes

pour une libraire personelle, on donne tout le path :

$CERN/$CERN_VER/bin/cernlib -L/mister/... -llib_name

    ( la librairie doit etre, soit : lib_name.lib (apollo=lib partagée)
                              soit : lib_name.a   (unix)

<-----/|\------>  ./Help/Users/General/Mortran_manual
 MORTRAN USER GUIDE- DD/US/18
 ----------------------------



 22.03.1979
 Rolf Nierhaus

 Introduction.
 -------------



 Mortran is a very practical approach to "structured programming"
 especially for those who have a long history of Fortran programming
 or a large library of Fortran programs.  This has to do with the
 relationship of Mortran to Fortran.  Mortran, which seems to suggest
 "More than Fortran", was meant to be an extension of Fortran and got
 Fortran compatibility built-in at many levels. Unlike other
 "structured programming" languages, Mortran uses Fortran files and
 Fortran input-output, Fortran subroutine calls and Fortran common.
 Moreover there is a switch in the Mortran translator which allows
 the use of "in-line" Fortran.



 The main advantages of Mortran over Fortran are that Mortran is a
 language for structured programming, like Pascal, PL/I, the Algols
 and BCPL.  There are statement blocks and conditional and iteration
 statements which act on statement blocks.  The conditional statements
 are the IF, the ELSE, the ELSEIF and the UNLESS.  The iteration
 statements are the DO# the FOR, the WHILE, the UNTIL and the LOOP.
 Testing at the end of a loop is possible, and there are the NEXT and
 EXIT statements, which transfer control to the next iteration or out
 of the loop.



 Other advantages of Mortran over Fortran are that Mortran is more
 "free-field", allows statements of any length and comments to be
 anywhere.  There are multiple assignment statements and abbreviated
 input-output statements.  Conditional compilation is available, as is
 switching between different input files.



 One advantage which Mortran has not only over Fortran, but also over
 many other "structured programming" languages is its macro
 capability.  The macro replacement feature is very often used for the
 global symbolic definition of Fortran constants, but it has much
 more sophisticated applications and leaves the language somewhat
 open-ended.



 Mortran was designed and first described by James Cook of SLAC in
 1973.  Since then James Cook has written several translators for it.
 The MP2 processor, which was written at CERN in 1977, has been
 designed to be compatible with James Cook's Mortran2-processor.



 MP2 however does not use the same set of macro-definitions to
 describe the Mortran language, and extensions of it have to be
 described by a different set of macro definitions.



The differences between the processor MP2 and the Mortran2-
processor are:



 1.  MP2 is about 2 times faster.

 2.  The MP2 implementations on the CDC-machines are Update
     compatible, while the implementation on the IBM is Patchy
     compatible.



 3.   NP2 issues a message about the number of errors encountered for
      each subroutine separately.

 4.   Both with the Mortran2-processor and with MP2 it is possible to
      write the Mortran input text as comments   into   the   Fortran
      file.  With MP2 the generated code follows the input text more
      immediately and accountably than with the Mortran2-processor.



 5.   (Because of this) MP2 cannot handle macro patterns straddling
      over several statements.



 6.  While Mortran2 is written in a special implementation language

      and must be bootstrapped, MP2 is written in Fortran.



 7.  The macro trace facility is slightly extended in that MP2 can

     provide traces where macro patterns are represented with

     formal parameters and with actual parameters.

 From Fortran to Mortran.
 ------------------------



 Mortran is often called an extension of Fortran.  This is however not
 strictly true, since Mortran is really an extension of modified
 Fortran.  The modifications have nothing to do with the structured
 programming aspects of the Mortran language, but concern only the
 source card layout, which is more free field in Mortran.



 They can be expressed in 4 rules, which are really fundamental, and
 you must learn them by heart before you can start programming in
 Mortran.  These are the rules:



 1.  The Fortran convention of one statement per card with eventual
     continuations using a marker in column 6 is awkward.  In Mortran
     statements can be any length and are completely independent of
     card boundaries.  The price we have to pay for this is that each
     statement must be terminated by a semicolon.



 2.  Comments can be introduced into Fortran only by separate
     comment cards and are therefore rarely at the place where they
     would be most useful.  In Mortran comments are enclosed in
     double quotes and can be anywhere, even in the middle of
     statements.



 3.   Though in Mortran you rarely need statement labels, there is a
      replacement for Fortran statement numbers.  Fortran statement
      numbers are not free field and have no mnemonic value.  In
      Mortran statement labels can be alphabetic or numeric, are not
      restricted in length and can be anywhere on the source card.
      However they must be enclosed in colons.



 4.   The last modification concerns Hollerith character strings:
      Instead of a count followed by the character H followed by the
      string, Mortran requires the character string enclosed in
      single quotes.  This is obviously an advantage, since you don't
      have to count.   (Single quotes within quoted strings are
      represented by two successive single quotes.)



 Some Fortran Hollerith strings are accepted by the Mortran
 processor, and only strings which contain special characters which
 have special meaning in Mortran require the Mortran string format
 with single quotes. one such character is the space or blank, which
 Mortran tries to suppress subjected to certain conditions.



 By applying these 4 rules you can change any Fortran program into a
 Mortran program.

 The Mortran language.
 ---------------------



 Basic to the Mortran control structures is the concept of a block.
 A block is a sequence of statements (or one single statement)
 delimited by brackets < and >, and normally under the control of a
 conditional or an iteration statement.  It is possible to use blocks
 independent of controlling conditional or iteration statements, this
 is however not useful.



 Blocks can be nested.


 Conditional statements.
 -----------------------



 The Fortran arithmetic IF-statement with its three statement numbers
 is not considered useful in structured programming.  The Fortran
 logical IF-statement has serious drawbacks in that it controls only
 one single statement instead of a statement block.  The two devices
 available in Fortran to control blocks by a conditional statement
 are both awkward.  Either the block is made a subroutine and will
 then be printed on a different page with some overhead in parameters
 or common declarations.    Or a logical IF controlling a GO TO
 statement is used to jump over the block.  This is undesireablep not
 only because an additional statement number is required, but also
 because the     flow   of   control    is   not very transparent if
 conditional statements are  nested.



 The Mortran IF statement is :

 IF logex <block>

 logex is an expression the value of which is type logical, for
 example a relational expression like I.LT.J. There is no need to
 enclose it in parentheses. Block is any statement block   and    may
 contain many other blocks controlled by conditional or iterative
 statements.  Block can also be a single statement, this statement
 must however be enclosed in block delimiters.



 The Mortran ELSE- statement is only used in connection with the IF:

 IF logex <block1> ELSE <block2>

 If logex is true we execute block1, if it is not true, we execute
 block2, and the IF - ELSE combination is equivalent to two IF
 statements of complementary truth value:



 IF logex <block1> IF NOT.logex <block2>.

 The ELSEIF statement is equivalent to an ELSE statement and an IF
 statement in the block controlled by the ELSE.



 IF logex1 <block1> ELSEIF logex2 <block2>
 means
 If logex1 <block1> ELSE <IF logex2 <block2> >
 The merit of the ELSEIF statement is that it allows many conditions
 to be tested consecutively by an initial IF statement followed by
 ELSEIF statements without increasing the nesting level.  The last
 statement might or might not be an ELSE.



 The UNLESS statement
 UNLESS logex <block>
 is the logical converse of the IF statement and means
 IF .NOT.logex <block>






 Iteration statements.
 ---------------------



 There is only a very small difference between the Fortran
 DO-statement and the DO-statement in Mortran. In Mortran the
 statement number referring to the end of the range of the DO is
 omitted and the range of the DO is indicated by the end of block
 delimiter.  This minor modification, the omission of a statement
 number, might however represent an infinite advantage, if the
 DO-loop is part of a large program which is frequently modified.  The
 possibility of inserting a new DO-loop into an old program by
 switching to    Mortran is quite safe. If you do it in Fortran, the
 possibility of  a doubly defined statement number is really a minor
 drawback. We    have an additional statement number and with it the
 possibility to  jump into this statement, if only by mistake.        In
 Mortran the generated label of that statement is not explicitly
 available to the programmer.  The Fortran DO statement has other
 disadvantages:    The DO variable must be integer, the initial value,
 the test value and the increment must be integer variables (not
 array elements) or constants and may not be negative or zero.



 In Mortran we have another control structure, the FOR-loop, which is
 equivalent to a Do-loop not having these restrictions:



 FOR var=ex1 TO ex2 BY ex3 <block>

 The control varable var can be integer or floating-point.         The
 initial value ex1, test value ex2 and increment ex3 can be any
 expressions, positive or negative.  Moreover if the initial value is
 greater than the test value and the increment is positiv the
 controlled block will not be executed at all.  There is no rule
 against changing the value of the expressions ex1, ex2 or ex3 during
 the execution of the FOR-loop.     The   Mortran FOR statement is
 actually more general than the FOR statement in BCPL, where the
 increment is restricted to a constant-expression.



 In spite of these obvious advantages of the FOR-loop the old Do-loop
 is still maintained in Mortran since it allows the Fortran compiler
 a better optimization.



 The FOR-statement has the following alternate formes:

 FOR var=ex1 BY ex3 TO ex2 <block>

 FOR var=ex1 TO ex2 <block>

 In the last case the increment is assumed to be 1.

 The FOR-loop supposes that there is a control variable which is
 regularly incremented or decremented.       There might be cases of
 iteration, where the introduction of a control           variable    is
 unnecessary   or artificial.     Here the WHILE or UNTIL control
 structures are useful.

 WHILE logex <block>

 The logical expression logex is tested first, if it is true the
 block is executed and logex is tested again.  As soon as logex is
 false control goes to the statement following the block.



 UNTIL logex <block>

 The UNTIL loop is the logical converse of the WHILE loop.    Here
 block is executed if logex is false, and as logex becomes true,
 control passes to the statement following the block.



 It is possible to specify additional testing at the end of a block,
 as in



 WHILE logex1 <block> WHILE logex2
 WHILE logex1 <block> UNTIL logex2
 UNTIL logex1 <block> WHILE logex2
 UNTIL logex1 <block> UNTIL logex2



 If testing only at the end of a block is intended, an infinite loop
 can be specified.



 LOOP <block> WHILE logex
 LOOP <block> UNTIL logex



 All iteration structures provide for the possibility to terminate
 the current iteration or to terminate the whole iteration loop, as
 it is possible in Fortran to jump to the CONTINUE statement
 indicating the end of the range or to jump out of the DO-loop.  The
 control statements to accomplish this are NEXT and EXIT.
 Corresponding statements exist in other languages suitable for
 structured programming.  They have however not always the same names.
 For example in BCPL the the Mortran NEXT is called LOOP and the
 Mortran EXIT is called BREAK.



If iteration blocks are nested, the statements NEXT and EXIT refer
to the innermost block.  It is however possible to exit from one of
the outer blocks, or to start a new iteration of it.  To do this the
iteration  block must be labelled, that is preceeded by an
alphanumeric label enclosed in colons, for example



 :LABEL: DO I=1,IMAX,2 <... >

 Then the statement EXIT:LABEL: specifies exit from the DO-block
 LABEL, and the statement NEXT:LABEL: specifies to begin the next
 iteration in the DO-block LABEL.

 Macro definitions.
 ------------------



 The Mortran language is defined through a set of macros. By
 extending this set of macros, extensions of the language can be
 obtained.  The use of additional macro definitions is however very
 practical even for the user whose last thought would be about
 language extensions.



 Alphanumeric symbols which have been defined as macro patterns are
 replaced before the Fortran compiler sees them and can therefore be
 used even if Fortran requires numerical constants (for example in
 dimension statements or as repetition count in format statements).



 The general form of a macro definition is

 &'macro pattern text' = 'macro replacement text'

 The character & announces the definition of a macro, if it is
 followed   by a string quote. Both the pattern text and the
 replacement text are quoted strings.  Several macro definitions can
 follow each other without intervening semicolons
 (end-of-statement characters).  Blanks between macro definitions will
 be suppressed.



 The last macro definition should be terminated by a semicolon.

 Since the MP2 input processor will produce an error message
 "expansion buffer overflow" if it reads more than 2000 characters
 without an intervening semicolon, it is advisable to separate very
 large sets of macro definitions by an occasional semicolon.



After the declaration of a macro, for every occurrence of the
pattern string in the input text the replacement text will be
substituted.



 For example after the macro definition

 &'JMAX'='10'

 every time the name JMAX occurs in the input text, for example in

 DIMENSION X(JMAX);
 DO J=1,JMAX < ... >
 :L: FORMAT (JMAX I10,F12.1);



 it will be replaced by 10.  JTIAX is not a Fortran variable and will
 not be seen by the compiler.

 Some restrictions in the imput string replacement procedure derive
 from the scanning mechanism.



 MP2 scans only one statement at a time.  This statement always begins
 and ends with a semicolon, and both semicolons are available for
 matching.  A pattern however which contains a semicolon somewhere in
 the middle will never be matched.

 Spaces in the input text are suppressed according to a very simple
 rule: All spaces are suppressed except spaces within quoted strings
 and one single space between two alphanumeric characters.  Macro
 definitions contain two quoted strings, and any spaces here will not
 be suppressed.



 If the pattern of a macro definition begins with an alphanumeric
 character, it will only be matched if it occurs in the input text
 after a special character. In other words: matching        of    an
 alphanumeric string will never start in the middle of it, but only
 at its beginning.



 Macro definitions are either global or local.  They are global if the
 macro definition precedes the first Mortran         statement    which
 generates code in the Fortran file.  Macros declared later are local,
 they lose their effect as soon as an end-statement is encountered,
 liberating the space they took up in the macro buffer for local
 macros defined in the next program unit.



 If several macro definitions specify the same pattern, only the
 latest definition is used for macro expansion.



 It is possible to override a global macro definition for only one
 program unit by specifying the same macro pattern in a local macro
 definition.  As soon as an end-statement is encountered, the local
 macro is removed from the macro list and the global macro takes
 effect again.







 Macros with parameters.
 -----------------------



 The power of macro string replacement is substantially increased, if
 one allows that the pattern string contains        some  unmatched
 substrings in well defined positions.  These unmatched substrings are
 called parameters.



 In the pattern part of a macro definition the presence of a
 parameter is indicated by the character #. To reference a parameter
 in the replacement part of a macro the same character # is used
 followed by a digit from 1 to 9. #1 denotes the lst parameter, #2
 the   2nd   parameter, etc.      The    character     strings     which
 eventually  replace the formal   parameters during macro expansion
 are called  actual parameters. Both MP2 and the Mortran2-processor
 allow up to 9 parameters.



 Let's look at an example: The macro

 &';FOR#=#TO#BY#<'=';FOR#1=#2 BY#4 TO#3<'

 reduces a FOR-loop where the test value precedes the increment to a
 FOR-loop where the increment preceedes the test value.  It will for
 example replace



 ;FOR I=N+9 TO M**2 BY-3<

 by

 ;FOR I=N+9 BY-3 TO M**2<

 The four formal parameters in the macro definition are denoted by #,
 # ,# and # in the pattern part, by #1, #2, #3 and #4 in the
 replacement part.  They are replaced by the actual parameters I, N-9,
 M**2 and -3 during macro expansion.



 A macro pattern must not begin with a parameter, nor may it end with
 it. Parameters must be separated by at least one intervening
 character.



 A macro pattern may begin with a semicolon (indicating that this
 pattern must occur at the beginning of a statement), but this
 semicolon must be followed by at least one other character, before a
 parameter can be specified.  This rule is dictated by efficiency.  If
 in a macro pattern a semicolon were followed immediately by a
 parameter, a normally unsuccessful and sometimes quite lengthy scan
 for this parameter would be performed for nearly every statement.



 Actual parameters are subjected to certain conditions to          be
 acceptable to the macro processor.  They must not contain semicolons
 or block delimiters.  Parentheses must be matched, left parentheses
 must occur before right parentheses. 11 a parameter contains the
 opening quote of a string, it must contain the whole quoted string.
 If the character proceeding the parameter is alphanumeric, the
 parameter must begin with a special character - in other words: a
 parameter will not start in the middle of an alphanumeric string.











 The end of an actual parameter is signalled by a match between the
 character following the parameter in the input text and in the macro
 definition.  However the empty string is only acceptable as a
 parameter if the next character is not alphanumeric.  A space is not
 acceptable as a parameter, except if the proceeding character is the
 single quote.  However it often happens that a parameter begins with
 a space.



 It is possible to suppress all the rules to which parameters are
 normally subjected and to specify a parameter of length 1, or a
 one-character-parameter. This is indicated by two     consecutive
 #-characters in the pattern part of a macro definition.



 The sequence ### in the pattern part of a macro means a one
 character-parameter followed by a normal parameter, the sequence
 #### two one-character-parameters, etc.



 In the replacement part of a macro however two       consecutive
 #-characters have a completely different meaning: ## specifies the
 character # as replacement text.

 Operators in macros.
 --------------------



 The power of macro replacement procedures can be further increased,
 if one allows that certain operations are performed by the macro
 processor during the process of macro expansion.  These operations
 have to be specified in the macro replacement text.



 If the character # occurs in the replacement text of a macro and is
 not followed by a digit, nor by another #-character, but by an
 alphabetic character, this usually denotes an operation.



 To facilitate understanding of the available operations it is best
 to visualize them as being performed by a very small computer with a
 very   particular organization:      It has one accumulator, which
 participates in practically all operations, it has a memory of 9
 stacks, it can read from the replacement text or from the first
 parameter, it can convert from octal or hexadecimal to binary or
 from binary to decimal, and it can store into the replacement text.



 The stacks are only accessible at the top positions and only by the
 operations stack #S and unstack #U.  One special register is used
 for the generation of Fortran statement numbers.  It is called label
 register, is initialized to 10000, and there is an operator #I which
 increments it.



 The available operations are:

 #1       INCREMENT
          Increment the label register and load its contents into
          the accumulator.



 #C        CONVERT
           Convert the contents of the accumulator into a five digit
           decimal  number   and   output   the five corresponding
           characters into the replaced text in the expansion buffer.



 *O       OUTPUT
           Store the contents of the accumulator into the next word
           of the replaced text in the expansion buffer.



#Sn      (n=l, ..., 9) STACK
         Stack the contents of the accumulator on stack H.  if
         stack n is already full, an error "stack overflow" will
         occur.

*Un      (n=l,..., 9) UNSTACK
         Unstack a word from stack n and store it into the
         accumulator. If stack n is empty, an error "stack
         underflow" will occur.



 *An       (n=l,...,9) ADD
           Add immediately to the contents of the accumulator the one
           digit number n and store the result into the accumulator.



 *Lc       LOAD
           Load immediately the character c into the accumulator.

 #P       PARAMETER
          Load the first word of the first parameter into the
          accumulator. (Parameters are initially character strings,
          stored one character per word.  If macros are nested, a
          character might be replaced by a binary number.  This is
          for ememple the case during the translation of user
          defined statement labels.  The binary number must be
          converted to decimal (operator #C) before it can be
          output.)



 #N       NO RESCAN
          After the expansion of a macro, scanning for macro
          patterns continues at the beginning of the replacement
          text.   If the replacement text however contains the
          operator #N (no rescan), the replacement text before #N
          will be skipped and scanning continues at the character
          after #N.



 #B        OCTAL
           Convert the first parameter from octal to binary and load
           it into the accumulator.



 #H        HEXADECIMAL
           Convert the first parameter from hexadecimal to binary and
           load it into the accumulator.



 *Z       STRING
          Pack the first parameter, which is supposed to he a short
          string of 6-bit characters in internal representation and
          load it into the accumulator.



 #E        END
           Check that all stacks are empty.  If not write the error
           message "unclosed block".  Reset all stack pointers.  Write
           a message indicating the number of errors encountered.
           Reset the error counter.  Reset the label register to
           10000.  Reset the macro list pointers to the values they
           had before the first Fortran output         statement    was
           generated.



 #T       TITLE
          Transfer the first parameter up to an eventual left
          parenthesis or up to a maximum of 24 characters to a title
          buffer for printing in the header line on top of the next
          page.

 Macro generating macros.
 ------------------------



 This is a complicated matter and the reader is advised to skip it.
 Let's however start with a simple example and assume we have a
 program which doesn't work and we believe, if we could trace a
 variable N, we might learn what is the matter with the program.
 Now, instead of adding a write statement



 OUTPUT N;(' N SET TO'I10);
 every time the variable N changes its value, we could write a macro
 &';N=#;'=';N=#N#1;OUTPUT N;('' N SET TO''I10);'


 The first two semicolons before the N and after the # make sure that
 N=# is not some part of a larger sequence, but the whole assignment
 statement.  We cannot simply repeat ;N=#; in the replacement part of
 the macro, since this would lead to a macro expansion loop (or a
 macro  "explosion"), we do however want to rescan the actual
 parameter replacing the formal parameter #, so we put the no-rescan
 operator before the parameter ;N=#N#1;



 The quoted string ' N SET TO' of the abbreviated format statement
 appears now within the replacement part of a macro definition, which
 is a quoted string.  To denote a quote character within a quoted
 string two quotes are required - one only would signal the end of
 the string.



 Now every time our program executes an assignment statement for N,
 the value of N is printed, for example



 N SET TO      321

 if N were set to 321.  We could go one step further and indicate in
 the printout the source form of the assignment statement, which
 would be particularly useful if there were      many   assignment
 statements for N. This could be done with the following macro



 &';N=#;'='N=#N#1;OUTPUT N;('' N SET TO''I10,
 '' BY EXECUTION OF THE STATEMENT N = #1'');'



 which would for example print
 N SET TO       321 BY EXECUTION OF THE STATEMENT N = 10*J-1


 if H were set to 321 in the statement H=10*J-1.

 If this trace does not provide enough insight into our programp me
 might want to trace another variable J, and we can do this with an
 other macro



 &';J=#;'=';J=#N#1;OUTPUT J;('' J SET TO''I10,
 ''  BY EXECUTION OF THE STATEMENT J = #1'');'





 Alternatively we could write  a "macro generating macro" and add only
 a short statement requesting the trace of J. If we then needed the
 trace of again another variable practically no effort would be
 required anymore.



 Let's look at an example of a suitable macro generating macro:



 &';TRACE #;'=' &'';#1=##;''='';#1=##N##1;OUTPUT #1;

 ('''' #1 SET T0 '''' I10,
'''' BY EXECUTION OF THE STATEMENT #1 = ##1'''');'''



 The pattern part of this macro is very simple,    ';TRACE #;', and
 would for example be matched by the statement TRACE J with J as
 (first) parameter.    To understand the replacement part, let's
 rewrite it with the beginning and ending string quotes removed.  Then
 we must contract two consecutive string quotes within the string
 into one single quote:



  &';#1=##;'=';#1=##N##1;OUTPUT #1;('' #1 SET TO''I10,
 '' BY EXECUTION OF THE STATEMENT #1 = ##1'');'


 This string starts with a,space, and this space is quite essential
 for the macro processor to identify the following &-character as the
 start of a macro definition.       Since this string occurs as the
 replacement part of a macro, the meaning of #1 is: the first
 parameter, and the meaning of ## is: replacement by the character #.
 IF we now do the replacement, assuming for example that the first
 actual parameter is J, we get



 &';J=#;'=';J=#N#1;OUTPUT J;('' J SET TO''I10,
'' BY EXECUTION OF THE STATEMENT J = #1'';'



 This is exactly the trace macro for J considered before.

 So with one complicated macro generating macro and some short
 statements which match its simple pattern we can easily generate
 many additional macros of a certain complexity.




------ 2



 Mortran files and input-output units.
 -------------------------------------



 The Mortran processors produce two output files, namely the Fortran
 file to be transmitted to the Fortran compiler and a list output
 file.  There can however be more than one input file.



 These files are referred to by Fortran logical unit numbers.    MP2
 uses logical units 1 to 5 for input files, logical unit 6 for the
 Fortran file and logical unit 7 for the list output file.



 on the IBM logical units 8 and 9 are available for input files too.
 To make them available on the CDC machines would require a
 modification of the program statement in the main program of MP2.



 Initially reading of input text starts at logical unit 1. A change
 of the current input unit is specified by a control statement within
 the input text itself.  The control statement &Un switches control
 to input unit n. Before, however, the current input logical unit
 number is saved on a special stack, and when an end-of-file is read
 from unit N, control will be switched back to the unit number saved
 on the stack.  Several &Un statements can be nested, and the program
 will end only after the final end-of-file has been read from the
 first input unit, that is logical unit 1.



 It is normally impractical to use less than two input files, the
 first file containing the macro definitions and the second file the
 program.



 The control statement && can be used to indicate an end-of-file. it
 is normally redundant, since the machine dependent end-of-file
 indications are used.  There are however some examples where the
 &&-statements are practical or necessary.



 It is possible to switch control to the same input file several
 times.  One can for example keep those parts of a program which are
 subjected to frequent modifications on a separate file and transfer
 control to it at several occasions.  Consecutive parts of this file
 would be read, and it would never be rewound.  The different parts
 can then be separated by && control statements, and only one data
 set is used and only one DD statement required.



 Or one can keep lengthy common parts of several subroutines on a
 separate file, which would be rewound every time it has been read.
 Since the file is read only up to the && statement, the data set
 sequence number is not incremented and the same file is read after a
 rewind.   Reading the physical end-of-file would result in an
 incremented data set sequence number at the next attempt to read
 from this logical unit.






Mortran listing.
 ----------------



 The Mortran listing is switched on with the control statement &L and
 switched off with the control statement &N.



 The listing consists of a copy of the text read from the current
 input unit, possibly preceded by either of the characters * or S or
 by the nesting level count.  The characters * or S are printed on the
 left margin of a line if a comment string or a quoted string is not
 closed on that line.  The nesting level is printed only if it has
 changed compared to the nesting level of the previous line.       The
 printed nesting level refers always to the beginning of the line.



 Every page begins with a header line, which contains a 24 character
 field for the identification of the current text.  The standard macro
 set contains four macros which will insert the program, subroutine
 of function name or possibly the text BLOCK DATA into this field.



 The transfer mechanism fails if for example a subroutine statement
 is too long to be contained on a single line.  The following text
 could be used to obtain a proper listing:



 &N
 &'SUBROUTINE#;'='SUBROUTINE#1#N;'
 &'TITLE #;'='#T;&E;';
 TITLE SUBROUTINE SUB;
 &L
 SUBROUTINE SUB(PARAM1,PARAM2,PARAM3,PARAM4,PARAM5,PARAM6,PARAM7,
 PARAM8,PARAM9);



 The first macro switches off a global macro which would transfer the
 subroutine name into the identification field.  The second macro
 specifies in the replacement part the operation "title" #T which
 transfers the first parameter into the identification field and
 the control statement "eject page" &E.  This is an example of
 a macro which contains a control statement in the replacement text.
 Both macros are local and lose their effect after the next
 end statement, except if subroutine SUB were the first program unit
 to be compiled.



 During tracing no header line is printed.

 If automatic indentation has been specified, columns 73 to 80 of the
 input line will be printed at the right margin of the output line.
 If the input line is longer than 80 characters, character 81 and all
 following characters will not be printed.  The output line can
 receive 34 characters shifted out of column 72            during     the
 indentation process. If any character is shifted beyond column       106
 it will be lost.






 Control statements.
 -------------------



 Text read from an input file can be a program statement, a macro
 definition or a control statement.  Both macro definitions and
 control statements begin with the character &. In macro definitions
 the & is followed by a single quote, the opening character of the
 pattern string.



 In a control statement the character & is folowed by an alphabetic
 character.  The following control statements can be specified:



 &A   annotation flag:
      Write source statements as comments in the Fortran file.



 &A0 no annotation:
      Stop writing source statements as comments in the Fortran file.



 &D   macro definition trace:
      List all macro definitions stored in the macro buffer.    Macro
      definitions which are read in later will not be affected.



 &E   eject flag:
      Write the following line in the list file on a new page.



 &F   Switch to Fortran mode.



 &In (n=1,...,9) indentation:
     Precede in the list file the text of each line by a blanks,
     where m is n times the nesting level at the end of the
     preceding line.
           


 &I0 no indentation:
      Stop automatic indentation.



 &L  list:
     Write source statements, including macro definitions      and
     control statements onto the list file.



 &M   Switch to Mortran mode.

 &N   no list:
      Do not write source statements, including macro definitions and
      control statements, onto the list file.



 &Q   quote flag:
      Close each comment string still open at end of line.



 &Q0  Do not close each comment string at end of line.



 &Rn  (n=1,...,5,8,9) rewind:
      Rewind the file with the logical unit number n.





 &T   trace:
      Trace macro replacements.
      If a macro pattern is recognized up to a first parameter, the
      pattern is traced from the macro buffer, where parameters are
      indicated by #. Then the parameters are traced, and the pattern
      is traced again, this time from the expansion buffer, that is
      with the actual parameters.  The trace of the replacement part
      is restricted to what is written into the expansion buffer.  In
      addition the generated Fortran statements are written onto the
      list file.



 &T0 no trace:
      Stop tracing macro replacements.



 &Un (n=l,...,5,8,9) switch input unit:
     Stack the logical unit number for the current input file and
     switch input to logical unit number n. If the stack is full an
     error message "input unit stack overflow" is printed.



 &&  can be used as an end of file indicator. Every time this
     control statement is read or a system end-of-file indicator is
     set, a logical unit number is unstacked from the input unit
     stack and input is switched to it.








 Conditional compilation.
 ------------------------



 It is possible to switch the MP2 output procesor on and off by
 statements which match macros which specify the corresponding
 operations in the replacement text.  These operations are #G1, #G2
 and #G3.



 As long as statements which switch the output processor on and off
 are not nested, #G2 switches the output processor off, #G3 switches
 it on and #G1 does nothing.



 As soon as switching statements are nested, their action is a bit
 more complicated:

 #G1 does nothing only if the output processor is switched on.  if
     the   output processor is switched off, it increases the
     "conditional compilation level".



 #G2 too increases the conditional compilation level if the output
     processor is already switched off.  If however the output
     processor was switched on before, it will be switched off now
     and the conditional compilation level will be set to 1.



 #G3 decreases the conditional compilation level and if it falls
     below 1 the output processor is switched on.



 Let's look at a simple example and assume we have a program which we
 want to execute on the IBM as well as on the CDC.  The program reads
 from some input file and must detect an end-of-file condition.  In
 the IBM this could be done with statements like



 READ (1,END=:EOF:) X;

 while on the CDC we needed statements like

 READ (1) X;
 IF EOF(1).NE.O. <GO TO :EOF:>



 We can then write sequences like



 IBM- READ (1,END=:EOF:) X;              -END
 CDC- READ (1) X;
      IF EOF(1).NE.O. <GO TO :EOF:>      -END

 where IBM-, CDC- and -END are patterns intended to be matched.    At
 the beginning of the program we supply a set of macros by which we
 control if the generated code is for the IBM or for the CDC.





 For example the set

 &'IBM-'='#G1'
 &'CDC-'='#G2'
 &'-END'='#G3'



 would provide for the generation of code for the IBM, while the set

 &'CDC-'='#G1'
 &'IBM-'='#G2'
 &'-END'='#G3'



 would provide for the generation of code for the CDC.  When there is
 no nesting, the string '#G1' can be replaced by the empty string ''.



 For compatibility with the Mortran2-processor the following macros
 are contained in the standard set



 &'GENERATE'='#G1'
 &'HOGENERATE'='#G2'
 &'ENDGENERATE'='#G3'



 so that it possible to specify GENERATE, NOGENERATE or ENDGENERATE
 instead of #G1, #G2 and #G3.





 Mortran on the IBM.
 -------------------



 To use Mortran on the IBM you can take advantage of the following
 catalogued procedures:



 MORTMC       precompile and compile with Mortran and Fortran H
              Extended respectively
 MORTMCG      as MORTMC, plus load and execute
 MORTMCLG     as MORTMC, plus link edit and execute
 MORTMCL      as MORTMC, plus link edit
 MORTMSLG     as MORTMCLG, but with symbolic postmortem dump.



 These procedures take Mortran input from a data set with DD-name
 M.SYSIN. You must provide a DD-statement such as
  //M.SYSIN    DD DSNAME=GG.UUU.MORTPROG,DISP=SHR
 after the EXEC statement.    For example the following JCL is
 sufficient to execute a short Mortran demonstration program



 //            EXEC MORTMCG
 //M.SYSIN     DD DSHAME=CG.RON.MTNLIB(TEST1),DISP=SHR,LABEL=(,,,1N)



 More Mortran test or demonstration programs are referenced in the
 data set member CG.RON.MTNLIB#MTNT



 You might have an additional macro set for which you must provide a
 DD statement like
  //M.FT02F001 DD DSNAME=GG.UUU.MAC1,DISP=SHR
 Since the standard macros transfer control to logical unit 5, you
 need at the beginning of your program file on unit 5 the control
 statement &U2 to read the file on unit 2.



 Or you might want to replace the standard macro set with your own
 macro set, which you could do by specifying MMAC='GG.UUU.MAC2' in
 the EXEC statement.







 How to run Mortran on the CDC 7600.
 -----------------------------------



 You can attach MP2 with the control card FIND,MTNB,MTNB,ID=PULIB.
 The set of standard macros can be attached with the control card
 FIND,TAPE1,MTNMAC,ID=PULIB.  If you use only the standard macros and
 only one program file on INPUT, the following control cards are
 sufficient:



 FIND,MTNB,MTNB,ID=PULIB.
 FIND,TAPE1,MTNMAC,ID=PULIB.
 MTNB.
 FTN,I=TAPE7.



 Alternatively you could use the control card macro MTN:

 FIND,MTN,ID=PULIB.
 MTN.



 If you want to read the Mortran source from file COMPILE, specify:
 MTN,I.

 Or if you want to read the Mortran source from file ZZZZ, specify:
 MTN,I=ZZZZ.

 All other parameters on the MTN-card are transmitted to the Fortran
 compiler.



 if you don't want to use the standard macros, of if you have more
 than two input files, or if you want the listing on another file
 than OUTPUT, etc. you must use your own control cards or your own
 control card macro.  The different files used by MP2 appear on the
 program card in the following sequence: TAPE1, INPUT, OUTPUT, TAPE7,
 TAPE2, TAPE3 and TAPE4, where INPUT is equivalenced to TAPE5 and
 OUTPUT to TAPE6.  The generated Fortran is on TAPE7.



 Mortran is also available on MFB.  Here the processor is called
 MTNB6,ID=PULIB and the size of its macro storage area is slightly
 reduced.  The standard macro file is called MTNMAC6, and the
 following is a minimum set of control cards:



 ATTACH,MTNB6,MTNB6,ID=PULIB.
 ATTACH,TAPE1,MTNMAC6,ID=PULIB.
 MTNB6.
 FTN,I=TAPE7.






 Errors.
 -------



 The Mortran processors detect only a small number of errors. Other
 errors are transmitted to the Fortran compiler, which normally
 provides error messages, which you will find not very decriptive of
 the actual situation.



 The following errors are detected by MP2:

 UNCLOSED BLOCK.
 An end statement has been encountered and something is left in the
 stacks.  Probably you have opened a statement block and forgotten the
 closing bracket.  MP2 will reset the stack pointers for you to avoid
 error propagation into the following subroutines.



 UNCLOSED COMMENT STRING.
 Since this message appears at the end of your listing, you can
 easily correct the error.  More problematic are cases where, because
 of a missing comment character, the processor interpreted comment
 text as statements and statements as comment text. overflow errors
 could be the result.  In the list output, every line which contains a
 comment string which continues into the next line is printed with
 the character * at the left margin.



 UNCLOSED QU0TED STRING.
 What has been said about "unclosed comment string"s applies here
 too.  In the list output, every line which contains a quoted string
 which continues into the next line is printed with a S at the left
 margin.



 ERROR IN MACRO DEFINITION.
 This refers to a syntactical error in the macro definition.    The
 pattern string is not followed by an equal sign, or the equal sign
 is not followed by a second quoted string.  This error is detected
 when the macro is defined.



 other macro definition errors will not be immediately detected, but
 only when the macro is called, that is, when a string is read which
 matches its pattern.



 MACRO DEFINITION ERROR.  TOO MANY PARAMETERS.
 More than 9 parameters are specified in the pattern part of a macro.



 MACRO DEFINITION ERROR.  PARAMETER NOT IN PATTERN.
 If for example only 2 parameters occur in the macro definition
 pattern, it is illegal to refer to the 3rd parameter in the
 replacement text.



 MACRO DEFINITION ERROR.  ILLEGAL OPERATOR.
 In the replacement text of a macro the character # is not followed
 by any of the characters which specify a parameter, on operator or #
 as replacement text.

 MACRO DEFINITION ERROR.  ILLEGAL STACK NUMBER.
 In the replacement text of a macro either of the operators stack #S
 or unstack #U is specified.  However the characters S or U are not
 followed by any of the legal stack identifiers (digits 1 through 9).



 STACK OVERFLOW.
 The stacks are 50 words deep, and the error occurs for the first
 time when the stack pointer is at 45.  After 5 warning messages the
 processor loses control in an unpredictable way.



 STACK UNDERFLOW.
 In the replacement text of a macro an operation is specified (#U)
 which tries to retrieve something from a stack which has not been
 put there.  Since a right bracket is translated into unstack
 operations, this could for example occur, if there were a closing
 bracket without a corresponding opening bracket.



CONTROL CARD ERROR.
The character & specifies a macro definition if it is followed by a
string quote.  It specifies a control statement if it is followed by
an alphabetic character.  A control card error occurs if the
character following the & is not a string quote and not alphabetic,
of if it is alphabetic, but not one of the legal characters
specifying a control action.



 ILLEGAL INPUT UNIT.  CONTROL CARD ERROR.
 The character following the U in the control statement &U is not a
 digit.



 ERROR IN STATEMENT LABEL.
 Fortran statement numbers are transmitted to the MP2            output
 processor as five digit numeric strings followed by a semicolon.  If
 a statement begins with a numeric character, it is interpreted as a
 statement number.  An "error in statement label" occurs if the string
 is longer than five characters.



 MACRO BUFFER OVERFLOW.
 The size of the macro buffer is 7000 words on the IBM and the CDC
 7600.  It is 6000 words on the CDC front-ends.  To define the Mortran
 language less than 1500 words are needed.  Macro storage space for
 statement labels is released after each end-statement.



 PARAMETER BUFFER OVERFLOW.
 The total length of all parameters cannot exceed 700 words,
 including up to 18 pointer- and flag-words.  Another 800 words is
 available for the storage of strings which are subjected to tests,
 but fail in the end to be parameters.



 EXPANSION BUFFER OVERFLOW.
 Input text is first stored in the upper half of the expansion
 buffer.  If more than 2000 characters are read without an intervening
 semicolon, the expansion buffer overflows.









 MACRO EXPANSION LOOP.  During macro expansion text from the upper
 part of the expansion buffer is removed, and output text or
 replacement text is added to the lower part of the expansion buffer.
 Replacement text is eventually moved upwards before it is subjected
 to further matching.  If the replacement text overlaps the still
 unmatched text, an error occurs "macro expansion loop".  This error
 is produced with certainty if the replacement text of a macro
 reproduces the pattern text without specifying a no-rescan operation
 #N. It can however be indicative of a situation where             the
 replacement text is just too long to be contained in the expansion
 buffer before the remaining unmatched input text.












 The macro processor MP2.
 ------------------------



 MP2 is a Fortran program of about 1000 source statements.            it
 consists of a main program, a block data program unit and 9
 subroutines.  The main program is the macro processor.  It calls upon
 a number of service subroutines, namely
      an input processor: subroutine XIN,
      an output processor: subroutine OUT,
      3 interfaces to the I/O routines: subroutine READ, subroutine
      WRITE and subroutine NPAGE,
      a control statement analyser: subroutine CCA,
      an error-message printer: subroutine ERROR,
      and 2 tracing routines: subroutine TRACE,           which    traces
      patterns, parameters     and     replacements   when macros are
      called, and DTRACE, which traces         all   macro definitions
      stored in the macro buffer.



 The macro processor uses an internal character set of 63 characters.
 Subroutine READ converts into this character set, and subroutine
 WRITE converts back into the Fortran character representation, as do
 the   tracing    routines.   Characters 1 through 27 are special
 characters, those which are used by MP2 come first.  Characters 28
 through 53 are the letters from A to Z and characters 54 through 63
 are the digits from 0 to 9. 0 is not a character which can be
 obtained from input and is therefore widely used as flag-word.



 These characters are defined in the data statement for OTAB in the
 block data program unit.  This table is used for output conversion.
 Input conversion uses table ITAB, which is initialized by the main
 program.  The input character set may comprise up to 256 characters,
 those not defined convert into internal character 23, the question
 mark.



 Character 1 is the space or blank.  This character is distinguished
            by its suppression according to certain rules.



 Character 2 is the end of statement character (the semicolon).

        

 Character 3 is the comment character (the double quote).      The
            exclamation mark is converted into character 3 too.



 Character 4 is the string character (the single quote).

 Character 5 is the parameter and operator flag in macro definitions
             (#).



 Character 6 is the first character in macro definitions and control
             statements (&).



 Character 7 is the statement label character (the colon).

 The input processor (subroutine XIN) transfers text from the input
 buffer to the expansion buffer.  It recognizes the comment character,
 the string quote, the end of statement character and the blank.
 Text included between comment characters is not transferred at all.
 if a first comment character is immediately followed by a second
 comment character, one single comment character is transferred.
 Text included between string quotes is transferred unmodified
 regardless of blanks, end of statement characters and comment
 characters.  All other text is transferred only until an end of
 statement character is encountered.  A zero flag word is written
 behind it and subroutine XIN returns.





 Blanks are suppressed if they are adjacent to special characters

       (characters 2 through 27), one single blank is left between alpha-
       numeric characters (characters 28 through         63).

       Every time subroutine XIN needs a        new input card, it calls
       subroutine READ, which reads and prints the line, handles an
       eventual end-of-file, converts to the internal character set and
       deals with in-line Fortran.

       Subroutine XIN recognizes the following errors
            expansion buffer overflow,
            unclosed comment string, and
            unclosed quoted string.

       The output processor, subroutine OUT, transfers text from the
       expansion buffer to the output buffer. it is oriented towards the
       target language Fortran and does the formatting into statement
       numbers, continuation indicators and statement bodies.  It also
       removes string quotes and precedes each string by a character count.
       The null string is replaced by one single string quote.

       In the expansion buffer statement numbers are stored as separate
       statements.  If a statement begins with a digit, it is a statement
       number, which is stored in columns 1 through 5 of the output buffer.
       Only if there are two consecutive statement number statements, the
       the first one is output with the text CONTINUE as a statement body.

       Statement bodies are stored in columns 7 to 72 of the output buffer
       and written as soon as the buffer is full or as an end of statement
       character is encountered.  However if the last character before the
       end of statement character is a dollar, the following statement is
       written onto the same output record.

       End of statement characters are always suppressed.

       If a statement begins with a digit, but consists of more then five
       characters before the end of statement character, this is recognized
       as an "error in statement label".

       The macro processor uses three large arrays for the storage of text.
       These are M(7000) for the storage of macros, P(700) for the storage
       of actual parameters and X(4000) for the storage of text during
       expansion.

       Macro definitions are stored in lists.  There are 63 lists, one list
       for each possible first pattern character.  Many lists will stay
       empty, some lists will receive many members, for example lists for
       macro patterns starting with ; or >. The first 63 locations of the
       macro buffer M contain pointers to these lists (or a zero word if
       the list is empty).

       Each macro definition consists of three parts: a link, a pattern
       part and a replacement part.  The link is a pointer to the next macro
       definition on the list or a zero word if this is the last member.
       Both the pattern part and the replacement part are terminated by a
       zero flag word.

       Definitions which are read in later become earlier members of the
       corresponding list.  So for a given pattern only the definition read
       in latest is available for matching.

       All input is to the expansion buffer.  If the statement is a macro
       definition, it is incorporated into the corresponding list and
       stored in the macro buffer. otherwise the statement in the expansion
       buffer is compared character by character with a macro pattern in
       the macro buffer.  If the macro pattern indicates a parameter, an
       actual parameter is stored in the parameter buffer, from where it

 will he available during expansion.

 The first 9 locations of the parameter buffer P contain up to 9
 pointers to actual parameters.  Each parameter is terminated by a
 zero flag word.  The number of parameters in the pattern currently
 under expansion is held in a separate location (NP).



 If some piece of text does not match any pattern it is transferred
 to the   beginning   of the expansion buffer.      The end of the
 transferred unmatched text is pointed to by an output pointer.



 If then some piece of input text is matched by a macro pattern the
 macro replacement text is placed into the expansion buffer beginning
 at the output pointer and its end is pointed to by a replacement
 pointer.



 If during expansion a NO-RESCAN operator is encountered the output
 pointer is set to the value of the replacement pointer and the
 replaced text is thus marked for output.  Any other replacement text
 is moved in the expansion buffer to become adjacent to the still
 unscanned text.  Scanning will then continue at the beginning of the
 moved replacement text.  If during expansion the replacement text
 overwrites still unscanned text, this is a fatal error, named "macro
 expansion loop".    This error can occur however if the replacement
 text is just too long.



 For the translation of the Mortran language the following use is
 made of the different stacks:



 Stack 1 contains a block identifier:
   1   for an IF- or UNLESS-block,
   2   for an ELSEIF-block,
   3   for an ELSE-block,
   4   for a WHILE- or UNTIL-block,
   S   for a FOR- or DO-block and
   6   for a block without a control statement.



 Stacks 2 and 3 contain labels for the translation of conditional
 statements:
   stack 2 the ELSEIF-label and
   stack 3 the END-IF-label.

 Stacks 4 and 5 contain labels used in         iteration  statement
 translation, namely
   stack 4 the NEXT-label and
   stack 5 the EXIT-label.

 Stack 9 is used only for temporary storage, and stacks 6 through 8
 are not used at all.

 User defined labels are translated into macro defining macros.


<-----/|\------>  ./Help/Users/General/Mortran_standard_Macros
**************************************************************************
******************   Macro MORTRAN de base (MTN mac)  ********************
**************************************************************************
***********   Utlilisable dans ZINIT, dans les processeurs   *************
***********        et dans le noyau de ZOOM (ZOOM KER)       *************
**************************************************************************
remise a jour mai 93


 Block MORTRAN
===============
  MORTRAN possede la notion de block : c'est une séquence d'instructions
delimité par des "bracket" : < (ouverure de block) et > (fermeture). Les blocks
MORTRAN peuvent etre emboités.

 Etiquettes
============
 Plutot que de mettre des numeros d'étiquette, on peut utiliser un nom symbolique
entoure de :
Exemple :
:Label1: ......;
         if ..... go to :Label1: ;
write (6,:Format2:) i;
:Format2: format (1x,I4);

 Instructions Conditionelles
=============================

IF Logical_exp < block >

IF Logical_exp < block > ELSE < block >

IF Logical_exp < block > ELSEIF Logical_exp_2 < block > ELSE < block >

avec Logical_exp : expression logique (validité du FTN)
...   Upgrade du 6/8/93(Al1):  ...........................
   
     expression logique valide :
   IF xxx.eq.Op1,Op2,etc < ... qui est équivalent a:
                IF (xxx.eq.Op1).or.(xxx.eq.Op2) etc
     ainsi que
 IF xxx.eq.Op1,Op2,etc .and.(ou.or.)yyy.eq.Op3,Op4,etc< ...
    qui est équivalent a:
                IF ((xxx.eq.Op1).or.(xxx.eq.Op2) etc)
                    .and.(ou .or.)
                         ((yyy.eq.Op3).or.(yyy.eq.Op4)etc<
..........................................................

On peut mettre autant de ElseIf que l'on veut.
L'instruction Else n'est jamais obligatoire

 Opérations d'itérations
==========================

DO Loop_Exp < block >  ou autre écriture : <Loop_Exp; block >
---------------------                      ------------------
avec Loop_Exp : expression standard FORTRAN de boucle : Indice = min,max {,step}
Si la valeur de l'indice est modifie par l'utilisateur a l'interieur de la
boucle (chose autorisée par FORTRAN), un WARNING sera généré par MORTRAN:
** MTN WARNING DO LOOP INDEX (nn) should not be altered.

Equivalent a ce qui existe dans beaucoup de compilateur : DO .....     END DO
exemple : do i=1,5 <....>   ou  <i=1,5; ....>

Boucles DO a multiples indices:
-------------------------------
DO ((...(I=1,12,3),J=J1,J2)...) <block>;
   Un seul <> bloc pour plusieurs boucles imbriquees. Equivalent a:
   DO ...
   <   ...
      <  DO J=J1,J2
         < DO I=1,12,3
           ...
         >
      >
   ...
   >;
   c.a.d comme la regle d' indices de PRINT(((A(i,j),i=..)j=..)

WHILE Logical_exp < block >
---------------------------
avec Logical_exp : expression logique
  L'expression logique est d'abord tester. Si elle est vrai, on execute les
instructions du block, puis on refait le test. Quand le test est faux, on execute
l'instruction suivant le block.

UNTIL Logical_exp < block >
---------------------------
avec Logical_exp : expression logique
  Inverse logique de WHILE :  Si l'expression logique est fausse, on execute les
instructions du block, puis on refait le test. Quand le test est vrai, on execute
l'instruction suivant le block.

Les instructions peuvent également etre située a la fin du block.
UNTIL Logical_exp < block > UNTIL Logical_exp_2
UNTIL Logical_exp < block > WHILE Logical_exp_2
WHILE Logical_exp < block > UNTIL Logical_exp_2
WHILE Logical_exp < block > WHILE Logical_exp_2

S'il n'y a pas de test en début, on peut faire précéder le block par LOOP
LOOP < block > UNTIL Logical_exp
LOOP < block > WHILE Logical_exp

 Controle et rupture d'iteration
----------------------------------
  * itération suivante : on peut interompre l'executions des instructions contenues
dans le block et passer directement a l'itération suivante par l'instrucion NEXT; .
  * Sortie du processus d'itération : ou peut sortir du processus d'itération par
l'instruction EXIT; . On execute alors l'instruction suivant le block.
  * Si plusieurs itérations sont emboitées, les instructions NEXT et EXIT font
référence au block a l'interieur duquel elles se situent.
  * Si plusieurs itérations sont emboitées, il est possible d'appliquer les
instructions NEXT et EXIT a n'importe quel block, si on les etiquette. Par exemple,
avec
:Label: WHILE Logical_exp < block >
on peut, quelques soi le niveau d'emboitement, faire EXIT:Label: et NEXT:Label:
<-----/|\------>  ./Help/Users/General/Premises

1) copiez ce qui suit dans  ~/.netrc     *ICI*
   en remplacant your_lmd_login et xxxx par votre accompte
   au lmd

machine messiaen.ens.fr
login your_lmd_login
password xxxxx
macdef init
binary
prompt off

machine ohana.ens.fr
login your_lmd_login
password xxxxx
macdef init
binary
prompt off

machine massenet.ens.fr
login your_lmd_login
password xxxxx
macdef init
binary
prompt off

machine ella.ens.fr
login your_lmd_login
password xxxxx
macdef init
binary
prompt off

machine 130.120.88.88              IBM    L7
login your_l7_login
password xxxxx
macdef init
binary
prompt off

machine 130.120.88.82              HP     L7
login your_l7_login
password xxxxx
macdef init
binary
prompt off

machine 130.120.88.81              APOLLO L7
login your_l7_login
password xxxxx
macdef init
binary
prompt off

    Puis *SOUS UNIX* ICI  (tres *IMPORTANT* pour la securite et sinon ca ne marchera pas)

  chmod 600 ~/.netrc

copiez ce qui suit dans  ~/.rhosts   *ICI*

ella.ens.fr your_lmd_login
messiaen.ens.fr your_lmd_login
ohana.ens.fr your_lmd_login
massenet.ens.fr your_lmd_login
130.120.88.88 your_l7_login
130.120.88.82 your_l7_login
130.120.88.81 your_l7_login

  chmod 700 ~/.rhosts

Ceci permetra les transferts automatiques de fichiers.

1bis) copiez ce qui suit dans  ~/.rhosts   *SUR LES MACHINES DISTANTES*

ramses.ibp.fr your_login_ICI
ramses.ibp.fr your_login_ICI.zoom
ramses.ibp.fr your_login_ICI......      pour tous vos accompptes ici

    Puis *SOUS UNIX* LA BAS  (tres *IMPORTANT* pour la securite et sinon ca ne marchera pas)

  chmod 700 ~/.rhosts (si pas NFS) ou chmod 555 ~/.rhosts  (si NFS)

Ceci permetra l' execution automatique de vos runs.

2) lmd ftp   ou l7 ftp
   put /admin/Autres_sites.config/machine/.cshrc .cshrc
   put /admin/Autres_sites.config/.login .login
   put /admin/Autres_sites.config/.alias.cshrc .alias.cshrc 
   bye
<-----/|\------>  ./Help/Users/General/Recipes_et_zoom -> Librairies_additionnelles
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Borel_util
###################################################################
###################################################################
########## Borel Utilities in VIZU Zoom_util menu #################
###################################################################
#################################### d'après JYG ##################

==============================================================================
          EXEMPLE D'IDENTIFICATION DES MODES DANS LA TRANSFORMEE DE BOREL
==============================================================================

 But :
 ---
 Fun1        Identification d'un mode (3 paramètres)
 Fun2        Identification d'un mode double (2 pôles réels, 2 pôles complexes
         conjugués ou un pôle réel double) (4 ou 5 paramètres)

 Méthode :
 -------
 Fun1    Ajustement d'une sigmoïde (transformée de Borel d'un amortissement) sur la
      fonction considérée.
 Fun2    Ajustement d'une combinaison linéaire d'une bosse et d'une sigmoïde
         (transformées de Borel d'oscillations amorties ou de doubles exponentielles)
         sur la fonction considérée.
         La minimisation se fait par la méthode de Householder (routine OLLSQ).
 Exemple traite :
 --------------
       Coefficient de couplage [Débit -> Pl] dans l'évaporateur de la pompe.

 Principe :
 --------
-La fonction sur laquelle ont veut identifier les modes est désignée par ftsh.
  La fonction ftsh est donnée par un échantillonage :
                  ftsh_i = ftsh(y_i)  ;  1 =< i =< m
  (le fichier cpl.dat contient (tau_i, ftsh_i); il suffit de prendre y_i=Ln(tau_i) )
-Le mode va être recherche sur un segment [y1,y2]. Les valeurs de y1 et y2 sont lues
  dans le fichier input.id .

 Fun1 : On va chercher le paramètres rho du mode amorti, le poids a de la sigmoïde, et le
 terme constant c pour lesquels le Chi2 :

       Chi2 = Sum_for_y1<y_i<y2 [  (ftsh_i - a*G1(y_i) - c)**2  ]

 est minimal, avec :
       G1(y) = 1. / [1. + exp(y-rho)]       
   (G1 est une sigmoide infléchie à rho), la fonction concrete correspondante est :
       a*exp(-k*t), avec k=exp(rho)

 Fun2 : On va chercher les paramètres rho et xi du mode oscillant amorti, les poids a et b
 respectifs de la bosse et de la sigmoïde, et le terme constant c pour lesquels le Chi2 :

       Chi2 = Sum_for_y1<y_i<y2 [  (ftsh_i - a*H1(y_i) - b*H2(y_i) - c)**2  ]

est minimal, avec :
       H1(y) = .5 / [ch(y-rho) + xi]       
       H2(y) = .5 * exp(-(y-rho)) / [ch(y-rho) + xi]
   (H1 est une bosse centrée à rho; H2 est une sigmoïde infléchie à rho)

   Les relations entre A et B et les amplitudes associées aux fonctions concretes
 sont compliquées et peuvent mener à des divergences (amplitudes des fonctions
 concretes tendant vers l'infini pour xi -> 1, par exemple). Ce qui compte c'est que
 le fit en A et B est régulier.


====================================
 Utilisation des différents fichiers
====================================

 Fichier d'entrée : modes.id (et resu.id1 (2))
 ----------------

 Ce fichier permet de gérer la recherche incrémentale des modes et d'en conserver
 l'histoire.
 L'indice 1 ou 2 ou -1 -2 identifie un bloc de paramètres pour les deux types de fonctions.
 On le gère en recopiant les résultats du fichier resu.id2.
 L'indice positif indique que l'on va soustraire chacun de ces modes déjàidentifiés avant
 le nouvel  essai; négatif, il n'est pas pris en compte.

 fstappr.id1 (2)  (User's First Approximation)

   Utilise pour IFLAG = 1 pour initialiser les paramètres. 


Fichiers de sortie
------------------

 Listing : Le fit est correct quand IER=0 et que CHI2L=CHI2, cad OLLSQ est content et
 le Chi2 calculé par sa variation linéaire à partir du précédent coïncide avec le chi2
 des résidus du présent.

 covar.id1 (2)  Matrice de covariance

 residu.id1 (2) Residu par point              ==================> en faire une sortie vizu


<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Borel_util.bak
###################################################################
###################################################################
########## Borel Utilities in VIZU Zoom_util menu #################
###################################################################
#################################### d'apres JYG ##################

==============================================================================
          EXEMPLE D'IDENTIFICATION DES MODES DANS LA TRANSFORMEE DE BOREL
==============================================================================

 But :
 ---
 Fun1        Identification d'un mode (3 paramètres)
 Fun2        Identification d'un mode double (2 pôles réels, 2 pôles complexes
         conjugués ou un pôle réel double) (4 ou 5 paramètres)

 Méthode :
 -------
 Fun1    Ajustement d'une sigmoïde (transformée de Borel d'un amortissement) sur la
      fonction considérée.
 Fun2    Ajustement d'une combinaison linéaire d'une bosse et d'une sigmoïde
         (transformées de Borel d'oscillations amorties ou de doubles exponentielles)
         sur la fonction considérée.
         La minimisation se fait par la méthode de Householder (routine OLLSQ).
 Exemple traite :
 --------------
       Coefficient de couplage [Débit -> Pl] dans l'évaporateur de la pompe.

 Principe :
 --------
-La fonction sur laquelle ont veut identifier les modes est désignée par ftsh.
  La fonction ftsh est donnée par un échantillonage :
                  ftsh_i = ftsh(y_i)  ;  1 =< i =< m
  (le fichier cpl.dat contient (tau_i, ftsh_i); il suffit de prendre y_i=Ln(tau_i) )
-Le mode va être recherche sur un segment [y1,y2]. Les valeurs de y1 et y2 sont lues
  dans le fichier input.id .

 Fun1 : On va chercher le paramètres rho du mode amorti, le poids a de la sigmoïde, et le
 terme constant c pour lesquels le Chi2 :

       Chi2 = Sum_for_y1<y_i<y2 [  (ftsh_i - a*G1(y_i) - c)**2  ]

 est minimal, avec :
       G1(y) = 1. / [1. + exp(y-rho)]       
   (G1 est une sigmoide infléchie à rho), la fonction concrete correspondante est :
       a*exp(-k*t), avec k=exp(rho)

 Fun2 : On va chercher les paramètres rho et xi du mode oscillant amorti, les poids a et b
 respectifs de la bosse et de la sigmoïde, et le terme constant c pour lesquels le Chi2 :

       Chi2 = Sum_for_y1<y_i<y2 [  (ftsh_i - a*H1(y_i) - b*H2(y_i) - c)**2  ]

est minimal, avec :
       H1(y) = .5 / [ch(y-rho) + xi]       
       H2(y) = .5 * exp(-(y-rho)) / [ch(y-rho) + xi]
   (H1 est une bosse centrée à rho; H2 est une sigmoïde infléchie à rho)

   Les relations entre A et B et les amplitudes associées aux fonctions concretes
 sont compliquées et peuvent mener à des divergences (amplitudes des fonctions
 concretes tendant vers l'infini pour xi -> 1, par exemple). Ce qui compte c'est que
 le fit en A et B est régulier.


====================================
 Utilisation des différents fichiers
====================================

 Fichier d'entrée : modes.id (et resu.id1 (2))
 ----------------

 Ce fichier permet de gérer la recherche incrémentale des modes et d'en conserver
 l'histoire.
 L'indice 1 ou 2 ou -1 -2 identifie un bloc de paramètres pour les deux types de fonctions.
 On le gère en recopiant les résultats du fichier resu.id2.
 L'indice positif indique que l'on va soustraire chacun de ces modes déjàidentifiés avant
 le nouvel  essai; négatif, il n'est pas pris en compte.

 fstappr.id1 (2)  (User's First Approximation)

   Utilise pour IFLAG = 1 pour initialiser les paramètres. 


Fichiers de sortie
------------------

 Listing : Le fit est correct quand IER=0 et que CHI2L=CHI2, cad OLLSQ est content et
 le Chi2 calculé par sa variation linéaire à partir du précédent coïncide avec le chi2
 des résidus du présent.

 covar.id1 (2)  Matrice de covariance

 residu.id1 (2) Residu par point              ==================> en faire une sortie vizu


<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Gains_Systematiques
********************************************************************************************
********************************************************************************************
******************* Analyse Systématique de gains de rétraction de chaque couple ***********
******************************** de transferts sous Zeus ***********************************
********************************************************************************************
********************************************************************************************



   L analyseur systématique de gains_par_couple de Stéphane BIANCO et Jean Louis JOLY est
utilisable sur MXMX dans sa première version, léguée par Olivier FUDYM.
  Il suffit de tapper : Ogain dans le dir contenant la MXMX... et de suivre les instructions
[ 19 Mai 94 ]

  VIZU fait à présent tout ça. cf 
                      $ZOOM/Help/Users/Graphics_and_post_treatment/Mx_package
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Gains_Systematiques.bak
********************************************************************************************
********************************************************************************************
******************* Analyse Systématique de gains de rétraction de chaque couple ***********
******************************** de transferts sous Zeus ***********************************
********************************************************************************************
********************************************************************************************



   L analyseur systématique de gains_par_couple de Stéphane BIANCO et Jean Louis JOLY est
utilisable sur MXMX dans sa première version, léguée par Olivier FUDYM.
  Il suffit de tapper : Ogain dans le dir contenant la MXMX... et de suivre les instructions
[ 19 Mai 94 ]

  VIZU fait à présent tout ça. cf 
                      /zoom/Help/Users/Graphics_and_post_treatment/Mx_package
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Gains_in_VIZU -> Mx_package
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Maps
###################################################################
###################################################################
########## Map 2D 1D versus time inc and Variable Mesh ############
###################################################################
###################################################################
vendredi 20/10/1997 (Al1)

VARIABLE MESH

For 1 or 2D maps : one of or both x y coordinates can be varied.
Suppose x only is.

Declare maps same way as a non variable one in ZINIT.
Then, for map name CL01 for instance, you have to create a file CL01_X.DAT
 - usually in ZINIT - that will describe the variable mesh :

  first line :   Xlo, Xup, n   [=min, max and number of points]
  n lines    :   X(i),i=1,n coordinate of point associated to value to plot.

The variable Delta grid spacing will be computed from these.


Comments - The channel way of HBOOK is the pattern to have in mind to
---------- define gridding; thus, two kinds of grid points can be defined :

 - the ones coinciding with edges of channels
    |   |    |     |      |
    *   *    *     *      *    low and up are in the list
    |   |    |     |      |    Delta supposed half-ways
   .--     -----       ----... (=> CxTr/Cl at center of channels)
    .Lo                 Up.

 - the ones at center of channels
    |   |    |     |      |
      *   **    *     **       low and up not in the list
    |   |    |     |      |    first Delta/2 taken from low to first center
    -----    -------
    .Lo                 Up.

GRAPHICS ZEUS/MAPS/CL01 (options 'map,map-2v,var,var-2v')
In vizu, the option 'var' will check the presence of X and/or Y.DAT
files and will create an extended regular map with best Delta resolution, limited
to 200 max grid points.

var-2V does the same for 2D vector field.

Related page :
cf < $ZOOM/Help/Users/Zinit/Tours_de_mains/Variable_Mesh_Grid

exemple dans  //neptune/ubig2/users.dir/alain_suite/patan7/window_probl_lnx_l7

##########  EXTENSIONS FORESEEN ###################################

to be done : var(1:5,1:10) to zoom on a part of the map.
and for chitters : dummy var for non variable meshes giving a dense
interpolated gridding (for publication purposes ...)


<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Maps.bak
###################################################################
###################################################################
########## Map 2D 1D versus time inc and Variable Mesh ############
###################################################################
###################################################################
vendredi 20/10/1997 (Al1)

VARIABLE MESH

For 1 or 2D maps : one of or both x y coordinates can be varied.
Suppose x only is.

Declare maps same way as a non variable one in ZINIT.
Then, for map name CL01 for instance, you have to create a file CL01_X.DAT
 - usually in ZINIT - that will describe the variable mesh :

  first line :   Xlo, Xup, n   [=min, max and number of points]
  n lines    :   X(i),i=1,n coordinate of point associated to value to plot.

The variable Delta grid spacing will be computed from these.


Comments - The channel way of HBOOK is the pattern to have in mind to
---------- define gridding; thus, two kinds of grid points can be defined :

 - the ones coinciding with edges of channels
    |   |    |     |      |
    *   *    *     *      *    low and up are in the list
    |   |    |     |      |    Delta supposed half-ways
   .--     -----       ----... (=> CxTr/Cl at center of channels)
    .Lo                 Up.

 - the ones at center of channels
    |   |    |     |      |
      *   **    *     **       low and up not in the list
    |   |    |     |      |    first Delta/2 taken from low to first center
    -----    -------
    .Lo                 Up.

GRAPHICS ZEUS/MAPS/CL01 (options 'map,map-2v,var,var-2v')
In vizu, the option 'var' will check the presence of X and/or Y.DAT
files and will create an extended regular map with best Delta resolution, limited
to 200 max grid points.

var-2V does the same for 2D vector field.

Related page :
cf < /zoom/Help/Users/Zinit/Tours_de_mains/Variable_Mesh_Grid

exemple dans  //neptune/ubig2/users.dir/alain_suite/patan7/window_probl_lnx_l7

##########  EXTENSIONS FORESEEN ###################################

to be done : var(1:5,1:10) to zoom on a part of the map.
and for chitters : dummy var for non variable meshes giving a dense
interpolated gridding (for publication purposes ...)


<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Mx_package
###################################################################
###################################################################
########## Matrix Analysis and Gains dans VIZU ####################
###################################################################
###################################################################


Menus :
+++++++

Menu sous Zeus : Matrix[Help : produces a pad with matrix info : list of Tr.]
                 Rq : on aura interet a sortir du sty g et faire
                 /zeus/matrix/help qui ouvrira un widget que l'on peut conserver.
suivants :       Matrix  :
                 Matrix/Definition : Keywrds : status : restart,iterate,back,clear
                                               list of raw to keep
                                                       col
                                               triplet  First Inc, Inc, Nbr of INc
                                               submatrix : sub cplg 
!!! Rq Faut-il imaginer une sous matrice construite par des moyennes de coefs ?

                 Matrix/Analysis :
                                /Algebraic    : eig, normalisation diag a 1,+tard RouthHurwitz...?
                                /Gains        : Sub-List of component[s]
                                              : time dependance : dtime,time,hist,inc
                                              : type :SubG,OneVList,Hierarchical,Cumul

###################################################################
      +++++++ SubG +++++++++++++++++++++++ 
###################################################################

I - Timbres postes format .  Listes ignored. Mx (Time, hist, dTime, ITime)
          |-------------------------|
          | \                       |
          |   \                     | ==> Gains (cad sous matrices de gains) 
          |     \                   |
          |       \                 |     pour les Tr choisis par /Definition.
          |         \               |
          |           \             |
          |             \           |
          |               \         |
     J->  |    [ ]          \       |                                           [SubG]
          |                   \     |
          |                     \   |
          |---------------------- \ |
            ^    I
            L-> sous-gains, cad gains de la sous matrice.
   => on a ainsi l'évolution des gains dus a l'elimination.



###################################################################
     +++++++ OneVList ++++++++++++++++++++ 
###################################################################

II - gains d'un Tr versus les autres de la liste (dans l'ordre de la liste (Monitoring List)).
     (Hovmoeller plot en Time ou dTime)                                         [OneVList]

###################################################################
     +++++++ Hierachical +++++++++++++++++
###################################################################

III- une liste de couples de Tr ordonnés en fonction du gain des couples a un instant choisi.
     (Hovmuller plot en Time ou dTime)                                          [Hierarch]
     Premiere liste : y mettre le numero de l'increment pour lequel l'ordre des gains sera determine
                      par leur hierarchie.
     Deuxieme       : 0  => toute la liste.
                      liste => liste des cardinaux retenus de la liste complete (imprimee).

###################################################################
     +++++++ Cumul +++++++++++++++++++++++ 
###################################################################

IV-  Sous gains cumules en éliminant un à un chaque  nouveau Tr de la liste
     ex : gain entre (7.2) quand on elimine ceux de la liste 1-8.14.6
     Hovmuller plot en time ou dTime.                                           [Cumul]


===========================================================
====   Avancement des Travaux pour VIZU Futura ============
===========================================================

  1.2) Transmission info Tr de la Z_Mx et de leur caracteristiques
       par composantes. (IOBit et JOBit Flags).
  1.3) Traitement des O Diag components.


Troisieme phase :
  3.1) MXMX => OZMX.Zeus  Ecriture lecture en IO_C_lib.
       ( voir de l'interet d'incorporer le MDMX en standard )

<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/channel_entry_flow.kumac
macro temp vecname=plaque_flow vecname1=CL01 ansy1=17 ansy2=10 ansy3=6 ansy4=4 ansy5=2 ansx1=1 ansx2=7 ansx3=10 ansx4=13 ansx5=20 answ=x
*=========================================================== 
* DESENHA OS PERFIS LONGITUDINAIS DA VELOCIDADE A          |
* DUM ESCOAMENTO ENTRE 2 PLACAS PLANAS             (answ=x)|
*                        OU                                |
* DESENHA OS PERFIS TRANSVERSAIS DA VELOCIDADE NUM         |
* ESCOAMENTO ENTRE 2 PLACAS PLANAS                 (answ=y)|
*===========================================================
clr
set txfp -70
set xsize 12.
set ysize 9.
set ymgl 0.9    |margem inferior
set ymgu 0.5    |margem superior
set xmgl 1.4
set xmgr 0.5
set ygti 10.   |distancia do titulo superior (pos-se 10 para fazer desaparecer o titulo)
set asiz .22   |labels 
set mscf 1.7   |MARKER SCALE
opt utit 
tit '                      '
opt ndat
opt nbox |tira a caixa no desenho
set tsiz .25  |bas 
set csiz 0.28   |comments size
*if [answ] = 'y' then
*tit 'Fig.1_ Profils Transversaux U ' -u
*endif
*if [answ] = 'x' then
*tit 'Fig.2_ Profils Longitudinaux U' -u
*endif

set lwid 1.0

v/del xxx                                                
v/del yyy
v/read xxx [vecname]_X.DAT ! oc 
v/read yyy [vecname]_Y.DAT ! oc 
set dash 0.15
*---------------------------------------------------------
* corte segundo x  |
*-------------------
if [answ] = 'x' then
  y11 = [ansx1]
  y21 = [y11]
*--------------------------------------------
  y12 = [ansx2]   |caso de um segundo corte
  y22 = [y12]     |caso de um segundo corte
*--------------------------------------------
  y13 = [ansx3]
  y23 = [y13]
*--------------------------------------------
  y14 = [ansx4]
  y24 = [y14]
*--------------------------------------------
  y15 = [ansx5]
  y25 = [y15]
*--------------------------------------------
  idim =1
  x1 = 1
  x2 = $vdim(xxx)
  sigma xmin = vmin(xxx)
  sigma xmax = vmax(xxx)
  bbb = 'xxx'
endif
*----------------------------------------------------------
* corte segundo y  |
*-------------------
if [answ] = 'y' then
  idim =2
  x1 = [ansy1]
  x2 = [x1]
*----------------------------------------------
  x12 = [ansy2] 
  x22 = [x12]
*----------------------------------------------
  x13 = [ansy3] 
  x23 = [x13]
*----------------------------------------------
  x14 = [ansy4] 
  x24 = [x14]
*---------------------------------------------
  x15 = [ansy5] 
  x25 = [x15]
*---------------------------------------------
  y1 = 1
  y2 = $vdim(yyy)
*  sigma xmin = vmin(yyy)
  xmin = 0.0
  sigma xmax = vmax(yyy)
  bbb = 'yyy'
endif
*----------------------------------------------------------
len = $vdim([bbb],1)
v/cre aaa([len])
vec = [vecname1].1_v 
*-------------------------------------------------------------------
if [answ] = 'y' then
 v/cop [vec]([x1]:[x2],[y1]:[y2]) aaa                                
v/cre ccc([len])
v/cre ddd([len])
v/cre eee([len])
v/cre fff([len])
 v/cop [vec]([x12]:[x22],[y1]:[y2]) ccc 
 v/cop [vec]([x13]:[x23],[y1]:[y2]) ddd 
 v/cop [vec]([x14]:[x24],[y1]:[y2]) eee 
 v/cop [vec]([x15]:[x25],[y1]:[y2]) fff 
*vbias aaa 0.4 aaa
*vbias ccc 0.2 ccc
endif
*----------------------------------------------------------
if [answ] = 'x' then
v/cop [vec]([x1]:[x2],[y11]:[y21]) aaa                                
v/cre ccc([len])
v/cre ddd([len])
v/cre eee([len])
v/cre fff([len])
 v/cop [vec]([x1]:[x2],[y12]:[y22]) ccc 
 v/cop [vec]([x1]:[x2],[y13]:[y23]) ddd 
 v/cop [vec]([x1]:[x2],[y14]:[y24]) eee 
 v/cop [vec]([x1]:[x2],[y15]:[y25]) fff 
endif
*--------------------------------------------------------------------
* trocou-se em sigma ymin aaa por bbb (pois e' menor)
if [answ] = 'y' then
sigma ymin = vmin(aaa)
endif
if [answ] = 'x' then
ymin =0.0
endif
* sigma ymax= vmax(aaa)
 sigma ymax= vmax(aaa)+(vmax(aaa)-vmin(aaa))/10

opt ndat

if [answ] = 'y' then
  null [xmin] xmax ymin ymax
endif
if [answ] = 'x' then
  null xmin xmax [ymin] ymax
endif

 sln 1
 set mtyp 31
 gra [len] [bbb] aaa *C
*-------------------------------------------------------
  sln 13     
  set mtyp 30
  gra [len] [bbb] ccc PC
  set mtyp 29
  gra [len] [bbb] ddd PC
  set mtyp 28
  gra [len] [bbb] eee PC
  set mtyp 27
  gra [len] [bbb] fff PC

if [answ] = 'y' then

itx .53 .60 Re=u?e!.d / [n]  
itx .38 .33 u?e!=1 
 
* Escreve Labels
*----------------
set txal 0      |alinhamento do texto
v/cre xtmp(3)
v/input xtmp 0.05 0.08 0.11
xtext=0.13
*
v/cre ytmp(3)
ytext=0.6
v/input ytmp 3*[ytext]
sln 1
gra 3 xtmp ytmp 'l'
set mtyp 31
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=3.3 '

ytext=0.5
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 30
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.9 '

ytext=0.4
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 29
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.5 '

ytext=0.3
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 28
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.3 '

ytext=0.2
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 27
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.1 '

*key .08 .6 31 'Section  x=3.3 '
*key .08 .5 30 'Section  x=0.9'
*key .08 .4 29 'Section  x=0.5'
*key .08 .3 28 'Section  x=0.3'
*key .08 .2 27 'Section  x=0.1'

sln 1
set lwid 2
line 0.08 0.75 0.22 0.75   
line 0.08 0.875 0.22 0.875 
itx .10 .79 Re=20  
line 0.08 0.75 0.08 0.875
line 0.22 0.75 0.22 0.875

set lwid 10
line 0.5 0.40 0.7 0.40     |bord superior
*itx .55 0.34 q?w!= -1  
line 0.5 0.20 0.7 0.20     |bord inferior 
set lwid 2
line 0.50 0.10 0.56 0.10   |1 er demi line L-dimension
itx  0.58 0.09 L=6          |L=6
line 0.64 0.10 0.70 0.10   |2 eme demi line L-dimension
line 0.50 0.08 0.50 0.12   |end mark
line 0.70 0.08 0.70 0.12   |end mark
line 0.80 0.20 0.80 0.27   |1 er demi line H-dimension
itx  0.78 0.29 d=2         |d=2
line 0.80 0.33 0.80 0.40   |2 eme demi line H-dimension
line 0.79 0.20 0.81 0.20   |end mark
line 0.79 0.40 0.81 0.40   |end mark

sln 12
set lwid 4
line 0.50 0.30 0.75 0.30   |x axis
line 0.50 0.30 0.50 0.50   |y axis
itx  0.74 0.23 x           |X
itx  0.48 0.48 y           |Y

do i=0.5,0.7,0.01
itx [i] 0.15 /
itx [i] 0.41 /
enddo
do i=0.38,0.20,-0.025
itx 0.46 [i] "5#
enddo 
atit 'Y ' 'V?x!'
endif
*------------------------------------------------------
*-------------------------------------------------------
if [answ] = 'x' then

atit 'X ' 'V?x!'
*key 1. .50 31 'Section  Y=0.00 '
*key 1. .44 30 'Section  Y=0.30'
*key 1. .38 29 'Section  Y=0.45'
*key 1. .32 28 'Section  Y=0.60'
*key 1. .26 27 'Section  Y=0.95'

* Escreve Labels
*----------------
set txal 0      |alinhamento do texto
v/cre xtmp(3)
v/input xtmp 0.75 1.0 1.25
xtext=1.3
*
v/cre ytmp(3)
ytext=0.5
v/input ytmp 3*[ytext]
sln 1
gra 3 xtmp ytmp 'l'
set mtyp 31
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  y=0.0 '

ytext=0.4
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 30
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  y=0.30 '

ytext=0.3
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 29
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  y=0.45 '

ytext=0.2
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 28
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.6 '

ytext=0.1
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 27
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  x=0.95 '

itx 3.7 0.48 Re=u?e!.d / [n]  
itx 2.75 .28 u?e!=1  


sln 1
set lwid 10
line 3.5 0.4 4.5 0.4     |bord superior
line 3.5 0.215 4.5 0.215     |bord inferior 
set lwid 2
line 3.5 0.10 3.8 0.10     |1 er demi line L-dimension
itx  3.86 0.09 L=6         |L=6
line 4.2 0.10 4.5 0.10     |2 eme demi line L-dimension
line 3.5 0.115 3.5 0.085     |end mark
line 4.5 0.115 4.5 0.085     |end mark
line 5.0 0.4 5.0 0.35     |1 er demi line H-dimension
itx  4.9 0.29 d=2          |H=2
line 5.0 0.25 5.0 0.215     |2 eme demi line H-dimension
line 4.9 0.4 5.1 0.4   |end mark
line 4.9 0.215 5.1 0.215   |end mark
*
sln 12
set lwid 4
line 3.5 0.3075 4.8 0.3075   |x axis
line 3.5 0.3075 3.5 0.5    |y axis
itx  4.7 0.26 x            |X
itx  3.38 0.5 y           |Y
*
do i=3.5,4.45,0.05
itx [i] 0.41 /
itx [i] 0.17 /
enddo
do i=0.38,0.21,-0.027
itx 3.2 [i] "5#
enddo 

*box 2.85 5.0 0.55 0.05 
*sln 1
*line 3.35 0.55 3.35 0.05 
*line 2.85 0.48 5.0 0.48 
*
*itx 3.05 0.51   'X'
*itx 4.0 0.51   'U(X,0)'
*itx 3.5 0.44   'Ref{1}'
*itx 4.4 0.44   'ZooM'
*itx 3.0 0.40   '0.1'
*itx 3.5 0.40   '1.0055'
*itx 4.3 0.40   '1.00691'
*itx 3.0 0.36   '0.2'
*itx 3.5 0.36   '1.0223'
*itx 4.3 0.36   '1.02537'
*itx 3.0 0.32   '0.3'
*itx 3.5 0.32   '1.0494'
*itx 4.3 0.32   '1.05424'
*itx 3.0 0.28   '0.4'
*itx 3.5 0.28   '1.0849'
*itx 4.3 0.28   '1.09117'
*itx 3.0 0.24   '0.5'
*itx 3.5 0.24   '1.1258'
*itx 4.3 0.24   '1.13317'
*itx 3.0 0.20   '0.6'
*itx 3.5 0.20   '1.1693'
*itx 4.3 0.20   '1.17740'
*itx 3.0 0.16   '0.7'
*itx 3.5 0.16   '1.2125'
*itx 4.3 0.16   '1.22156'
*itx 3.0 0.12   '0.8'
*itx 3.5 0.12   '1.2535'
*itx 4.3 0.12   '1.26407'
*itx 3.0 0.08   '0.9'
*itx 3.5 0.08   '1.2911'
*itx 4.3 0.08   '1.30416'


endif

<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/fit.kumac
v/del err
v/cre err(2)
v/fit xxx aaa ! e 0 ! err
 z1 = $sigma(err(1))
 z2 = $sigma(err(2))
fun/plo exp([z1]+[z2]*x) 0.157208 0.2
*       null xmin xmax ymin ymax
gra 7 xxx aaa *
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/interpol_pressure_flow3.kumac
macro temp vecname=plaque_flow vecname1=TR03 vecname2=excpressdrop_refe vecname3=interpol_pressure_flow ansy1=1 answ=y
*====================================================================================== 
* DESENHA O EXCESS PRESS DROP PARA O PROBLEMA DAS 2 PLACAS PLANAS COM Re=20           |
* E COMPARA-O COM A REFERENCIA.                                                       |
* EXIGE : - executar Visu e o mapa da pressao : TR03                                  |
*         - o ficheiro com as coordenadas da seccao transversal :CANAL_FLOW_Y.DAT     |
*         - o ficheiro com as coordenadas da referencia :INTERPOL_PRESSURE_FLOW_Y.DAT |
*         - o ficheiro com os resultados da referencia : EXCPRESSDROP_REFE            |
*======================================================================================
clr
v/del yyy
v/del yy2
v/del yy1
v/del aaa
v/del bbb
v/del ccc
set xsize 8.
set ysize 8.
set ymgl 0.9    |margem inferior
set ymgu 0.5    |margem superior
set xmgl 1.4
set xmgr 0.5
set ygti 10.   |distancia do titulo superior (pos-se 10 para fazer desaparecer o titulo)
set asiz .22   |labels 
set mscf 3.0   |MARKER SCALE
opt utit 
tit '                      '
opt ndat
opt nbox |tira a caixa no desenho
set tsiz .25  |bas
*---------------
* Reynolds=20  |
*---------------
Re=20

vec= [vecname1].1_v
v/read yyy [vecname]_Y.DAT ! oc 
v/read yy2 [vecname3]_Y.DAT ! oc 
v/read ccc [vecname2] ! oc 
leny = $vdim(yyy,1)
leny2 = $vdim(yy2,1)
leny1=[leny]-2

v/cre aaa([leny1]) |aaa -->vecteur que va garder les pressions de la premiere cologne
v/cre yy1([leny1]) |yy1 -->vecteur que va garder les cordonnees de calcul de la pression
v/cre bbb([leny1]) |bbb -->vecteur que va garder les excess pressure drop de la premiere cologne
*---------------------------------------------------------
* passage des cordonnees qu'interessent de yyy vers yy1  |
* (toujours 1 er cologne)                                |
*---------------------------------------------------------
do i=1,[leny1]
j=[i]+1
v/cop yyy([j],1) yy1([i],1)
enddo
*---------------
* coupe sur y  |
*---------------
idim =2
x1 = [ansy1]
x2 = [x1]
y1 = 1
y2 = [leny1]
v/cop [vec]([x1]:[x2],[y1]:[y2]) aaa     |--> equivalent a ..(1:1,1:20)

*------------------------------------------------------
* bbb=aaa - longeur*6/Re                              |
* longeur=5.269075+(6-5.269075)/2-0.01/2=5.5845375    |
*    -------------------------------------            |
*    | . | . | . | . | . | . | . | . | . |            |
*    -------------------------------------            |
*      |---------- longeur ------------|              |
*    |----------------- 6 ---------------|            |
*------------------------------------------------------
BIAS=-6*5.5845375/[Re]
*BIAS=-6*6/[Re]
*BIAS=-6*5.6345375/[Re]
vbias aaa [BIAS] bbb 

ymin =0.0
xmin = 0.0
sigma xmax = vmax(yyy)
sigma ymax= vmax(bbb)+(vmax(bbb)-vmin(bbb))/10
*sigma ymax = vmax(bbb)
null [xmin] xmax [ymin] ymax

set lwid 1
set mtyp 31
sln 1
gra [leny1] yy1 bbb PC
sln 13
set mtyp 28
gra [leny2] yy2 ccc PC

*key .2 2.5 31 'Present travail '
*key .2 2.0 28 'Reference [  ]'

* Escreve Labels para o presente trabalho
*----------------------------------------
set txal 0      |alinhamento do texto
v/cre xtmp(3)
v/input xtmp 0.15 0.20 0.25
xtext=0.3
*
v/cre ytmp(3)
ytext=2.5
v/input ytmp 3*[ytext]
sln 1
gra 3 xtmp ytmp 'l'
set mtyp 31
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Present travail'

* Escreve Labels para a referencia
*----------------------------------
set txal 0      |alinhamento do texto
ytext=2.1
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 28
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Referencia "M#  "N#'

sln 1
set lwid 2
line 0.520 1.55 0.715 1.55
line 0.520 1.2 0.715 1.2
itx 0.538 1.322 Re=20  
line 0.520 1.2 0.520 1.55
line 0.715 1.2 0.715 1.55

atit 'Y ' '[D]p?e!'

<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/last.kumac
*** Begin of history file: Fri May 28 17:13:58 1999
sig x1=3
mes [x1]
mes '[x1]'
help mes
mes x1
 mes $x1
mes $[x1]
zone 1 [x1]
help sig
v/li
set x1-3
set x1=3
x2 = 3
help wait
help von
help on
help v
help verb
von
v on
help vis
ma/li
al/li
exit
*** End   of history file: Fri May 28 17:31:21 1999
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/ntuple_pipe_flow_pressure.kumac
macro temp vecname=plaque_flow vecname1=CL01 vecname2=canal_plan.dat ansy1=20 answ=y
*============================================================ 
* DESENHA OS PERFIS TEORICOS EM MEIA SECCAO DUM ESCOAMENTO  |
* COMPLETAMENTE DESENVOLVIDO NO CASO DO TUBO CIRCULAR E DAS | 
* 2 PLACAS PLANAS                                           |
*============================================================
clr

vec= [vecname1].1_v
v/del yyy
v/read yyy [vecname]_Y.DAT ! oc 
v/read xxx [vecname]_X.DAT ! oc 
lenx = $vdim(xxx,1)
leny = $vdim(yyy,1)
v/cre vec2([lenx],[leny])
v/cre cordx([lenx],[leny])
v/cre cordy([lenx],[leny])

do j=1,[leny]
do i=1,[lenx] 
v/cop [vec]([i],[j]) vec2([i],[j])
enddo
enddo

* coordonees x,y
*---------------
do j=1,[leny]
do i=1,[lenx]
v/cop xxx([i])  cordx([i],[j])
v/cop yyy([j])  cordy([i],[j])
enddo
enddo
v/write cordx,cordy,vec2 nt.data
nt/cre 100 'test 1' 3 ' ' ! x y z
nt/read 100 nt.data

<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/nuss1.kumac
macro temp opt=p sup=' '
*** application comis quit
*** FUNCTION FUNC(X)
*** COMMON/PAWPAR/PAR(2)
*** FUNC=PAR(1)*X**2+PAR(2)*X**4
*** END
*** quit
*FILECASE KEEP
mess
mess 'vector name ?'
read vecname
mess
mess 'abcisse vector name ?'
read vecdad
v/del xxx
v/del yyy
v/read xxx [vecdad]_x.dat ! oc 
v/read yyy [vecdad]_y.dat ! oc 
mess
mess 'slice X ou Y ?'
read answ

if [answ] = 'x' then
  idim =1
  sigma xmin = vmin(xxx)
  sigma xmax = vmax(xxx)
  bbb = 'xxx'
endif
if [answ] = 'y' then
  idim =2
  sigma xmin = vmin(yyy)
  sigma xmax = vmax(yyy)
  bbb = 'yyy'
endif


len = $vdim([bbb],1)
v/cre aaa([len])


 vec = [vecname]
 v/read [vec] [vecname]

 v/cop [vec] aaa

 sigma ymin = vmin(aaa)
* sigma ymax= vmax(aaa)
 sigma ymax= vmax(aaa)+(vmax(aaa)-vmin(aaa))/4

case [sup] in
   (s,S)
   (*)
       null xmin xmax ymin ymax
endcase

v/del par
v/cre par(7)
v/inp par 7*2.0

*v/fit [bbb] aaa ! p2+p4 ! 12 par
*v/fit [bbb] aaa ! p6 ! 7 par
v/fit [bbb] aaa ! e+p4 ! ! par
 z1 = $sigma(par(1))
 z2 = $sigma(par(2))
 xminc = $sigma(xmin)
 xmaxc = $sigma(xmax)
**fun/plo exp([z1]+[z2]*x) 0.157208 0.2
*fun/plo exp([z1]+[z2]*x) [xminc] [xmaxc] c[sup]
*fun/plo [z1]*x**2+[z2]*x**4) [xminc] [xmaxc]
*       null xmin xmax ymin ymax
*gra 7 xxx aaa *



 gra [len] [bbb] aaa [opt]
* v/del aaa,xxx,yyy,xmin,xmax,ymin,ymax
* FILECASE RESTORE
return
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/paw.metafile
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/scale_temperature.kumac
macro temp vecname=TR05

vec = [vecname].1_v

lenx=22
leny=22


v/cre aaa([lenx],[leny])

vscale [vec] 100 aaa

v/del TR05.1_V
v/cre TR05.1_V([lenx],[leny])
v/copy aaa TR05.1_V 
put/contents 308 TR05.1_V
hi/plot 308 surf

*create/2dhisto 500
*/ZEUS/MAPS/TR05  1 100 Phi map-Pt TR05 !
<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/tslice.kumac
/VECTOR/CREATE  tbias(32,10) R !
/VECTOR/OPERATIONS/VBIAS  cl01.2_v -298. tbias
/HISTOGRAM/CREATE/2DHISTO  400 'Temperature: cl01.2_v' 32 .5 32.5 10 .5 10.5 0.
/HISTOGRAM/PUT_VECT/CONTENTS  400 tbias
/HISTOGRAM/PLOT  400 SURF
/HISTOGRAM/CREATE/SLIY  400 32
/HISTOGRAM/PROJECT  400
/HISTOGRAM/PLOT  400.sliy.2 c
/HISTOGRAM/PLOT  400.sliy.6 sc
/HISTOGRAM/PLOT  400.sliy.12 sc
/HISTOGRAM/PLOT  400.sliy.15 sc

<-----/|\------>  ./Help/Users/Graphics_and_post_treatment/Vizu_Paw_Kumacs/velox_canal_nat.kumac
macro temp vecname=CL02 vecname2=TR05 vecname3=vitesse_entre2 answx=x ansx1=28 ansx2=18 ansx3=6 ansx4=8 opt=c
********************************************************************
* DESENHA PERFIS TRANSVERSAIS DE VELOCIDADE VERTICAL SOBREPOSTOS   *
* NUM CANAL EM CONVECCAO NATURAL LAMINAR. NECESSITA DO FICHEIRO    *
* COM AS COORDENADAS TRANSVERSAIS (Cl02_x.dat). DEVE SER EXECUTADA * 
* CONJUNTAMENTE COM VISU. PARA INTEGRAR NO TPS                     *
* CALCULA TAMBEM O CAUDAL, QUE FICA NA VARIAVEL DEBIT              *
********************************************************************
clr
set xsize 10.
set ysize 7.4
*set xsize 8.
*set ysize 6.
set ymgl 0.9    |margem inferior
set ymgu 0.5    |margem superior
set xmgl 1.4
set xmgr 0.5
set ygti 10.   |distancia do titulo superior (pos-se 10 para fazer desaparecer o titulo)
set asiz .22   |labels 
*set mscf 1.2   |MARKER SCALE
set mscf 1.5  |MARKER SCALE
set chhe 0.1813          |hauteur des caracters pour itx
opt utit 
tit '                      '
opt ndat
opt nbox  |tira a caixa no desenho
opt ngrid |tira a grelha do desenho
set tsiz .25  |bas 
set csiz 0.28   |comments size
v/del xxx
v/del yyy
v/del aaa
v/del bbb
v/del ccc
v/del ddd
v/del eee
v/del dxx
v/del debit
v/read yyy [vecname]_Y.DAT ! oc     |yyy contem as abcissas dos lados das celulas verticais
v/read xxx [vecname]_X.DAT ! oc     |xxx contem as abcissas dos lados das celulas horizontais
v/read ee2 [vecname3].dat ! oc     |xxx contem as abcissas dos lados das celulas horizontais
                                    |
set dash 0.15                       |
                                    |   -----------------
                                    |   |       |       |
if [answx] = 'x' then               |   |   0   |   0   |
  idim =1                           |   |       |       |
  x1 = 1                            |   |---------------|
  x2 = $vdim(xxx)                   | xxx(1)  xxx(2)  xxx(3) ....
  y11 = [ansx1]                     |   |       |       |
  y21 = [y11]                       |
  sigma xmin = vmin(xxx)            |
  sigma xmax = vmax(xxx)
  bbb = 'xxx'
  ttt = 'yyy'

  y12 = [ansx2]
  y22 = [y12]

  y13 = [ansx3]
  y23 = [y13]

  y14 = [ansx4]
  y24 = [y14]

endif

len = $vdim([bbb],1)
lent = $vdim([ttt],1)

lenc=[len]+1
v/cre aaa([lenc])
v/cre ccc([lenc])
v/cre ddd([lenc])
v/cre eee([lenc])
v/cre tempd(1)        |pour la temp max de la plaque droite
v/cre tempg(1)        |pour la temp max de la plaque gauche 



v/cre xxc([lenc])
v/copy xxx(1) xxc(1)
do i=2, [len]
j=[i]-1
vadd xxx([j]) xxx([i]) xxc([i])
enddo
vscale xxc 0.5 xxc                 |xxc contem as coordenadas dos pontos de calculo de cl02.1_v
v/copy xxx([len]) xxc([lenc])      |ou seja, nas mesmas abcissas dos transferts directos
*Adimentionalisation
v/cre xxa([lenc]) 
vscale xxc 1./xxc([lenc]) xxa

vec = [vecname].1_v      
vec2 = [vecname2].1_v

v/cop [vec2]([lenc]:[lenc],[lent]:[lent]) tempd
v/cop [vec2](1:1,[lent]:[lent]) tempg
mess temperature maximale n/dimens.droite
v/pr tempd
mess temperature maximale n/dimens.gauche
v/pr tempg 
          
v/cop [vec]([x1]:[x2],[y11]:[y21]) aaa      |       |
v/cop [vec]([x1]:[x2],[y12]:[y22]) ccc      |   --------------------------
*v/cop [vec]([x1]:[x2],[y13]:[y23]) ddd      |   |       |       |        |
v/cop [vec]([x1]:[x2],[y14]:[y24]) eee      |   |   0   |   0   |   0    |
                                            |   |       |       |        |
*****************                           |   |---------------|--------|
*Calcul du debit*                           | xxc(1)      xxc(3)  xxx(3)
*****************                           |   |           |       |
lendx=[len]-1                               |
v/cre dxx([lendx])                          |
v/cre dtmp([lendx])                         
v/cre debit([lendx])
do i=1, [lendx]
j=[i]+1
vsubtract xxx([j]) xxx([i]) dxx([i])
enddo

do i=1, [lendx]
j=[i]+1
vmultiply aaa([j]) dxx([i]) dtmp([i])
enddo
 
vbias debit(1) dtmp(1) debit(1)
do i=2, [lendx]
j=[i]-1
vbias debit([j]) dtmp([i]) debit([i])
enddo 
mess --> Debit real
v/pr debit([lendx]) 
mess '****************************************************'
mess '****************************************************'
mess '*                 SUIVANT AUNG                     *'
mess '****************************************************'
mess '****************************************************'

****************************************************
*   Grashop basee sur l'epaisseur du canal (AUNG)  *
**************************************************** 
q=0.5*(0.835+0.167)
beta=1/283.15
*HAUTEUR=yyy([lent])
*LARGEUR=xxx([len])
RO_AIR=1.3 
Conduct=2.4E-02
nu=1.7E-05/[RO_AIR]
v/cre Gr_A_x(1)
v/copy xxx([len]) Gr_A_x(1)
v/copy xxx([len]) Gr_A_x
sigma Gr_A_x=Gr_A_x**5
scale=$sigma(9.81*[beta]*[q]/([nu]**2*[conduct]))
vscale Gr_A_x(1) [scale] Gr_A_x(1)
vscale Gr_A_x(1) 1./yyy([lent]) Gr_A_x(1)   |"division par l'hauteur"
mess --> Grashop basee sur l"epaisseur du canal (AUNG)
mess '    ---------------------------------------------'
v/pr Gr_A_x(1)
mess
***********************************************************
*   Vitesse de reference basee sur l'epaisseur du canal   *
*********************************************************** 
U_0=[nu]*Gr_A_x(1)/$sigma(xxx([len])**2) 
mess --> Vitesse Reference basee sur l"epaisseur du canal
mess '   ---------------------------------------------'
mess [U_0] 
***************************************************************
*  Debit de reference (basee sur l'epaisseur du canal)        *
*************************************************************** 
Debit_R=debit([lendx])/([U_0]*xxx([len]))         
mess --> Debit Reference 
mess '   ---------------'
mess [Debit_R] 

mess '****************************************************'
mess '****************************************************'
mess '*                 SUIVANT RODRIGUES                *'
mess '****************************************************'
mess '****************************************************'

*************************************************************
*   Grashop basee sur 1/2 l'epaisseur du canal (RODRIGUES)  *
*************************************************************
v/cre Gr_R_x(1)
sigma Gr_R_x=Gr_A_x(1)*yyy([lent])/(32.*0.5*xxx([len]))
mess --> Grashop basee sur 1/2 de l"epaisseur du canal (RODRIGUES)
mess '   ---------------------------------------------------------'
v/pr Gr_R_x(1)
mess '    '
v/cre Gr_R_r(1)     |Grashop reduit
*HAUTEUR=yyy([lent]) |Hauteur
HAUTEUR=1.0 |Hauteur

bc=0.5*xxx([len])   |demi-largeur
Gr_R_r=[bc]/[HAUTEUR]*Gr_R_x
mess GRASHOP REDUIT = [Gr_R_r]
******************************************************************
*   Vitesse de reference basee sur 1/2 de l'epaisseur du canal   *
****************************************************************** 
bc=0.5*xxx([len])
U_0=Gr_R_x(1)*[nu]/[bc]

*Adimentionalisation
vscale aaa 1./[U_0] aaa
vscale ccc 1./[U_0] ccc
vscale ddd 1./[U_0] ddd
vscale eee 1./[U_0] eee
 
mess --> Vitesse Reference basee sur 1/2 de l"epaisseur du canal
mess '   -------------------------------------------------------'
mess [U_0] 
**********************************************************************
*                       Debit de reference                           *
********************************************************************** 
Debit_R=debit([lendx])/(2.*[nu]*Gr_R_x(1))
mess --> Debit Reference
mess '   ---------------'
mess [Debit_R] 

mess '****************************************************'
mess '****************************************************'
mess '*                 SUIVANT DALBERT                  *'
mess '****************************************************'
mess '****************************************************'

*************************************************************
*   Grashop basee sur 1/2 l'epaisseur du canal (DALBERT)    *
*************************************************************
v/cre Gr_D_x(1)
sigma Gr_D_x=Gr_A_x(1)/16.
mess --> Grashop basee sur 1/2 de l"epaisseur du canal (DALBERT)
mess '   -------------------------------------------------------'
v/pr Gr_D_x(1)
mess 
******************************************************************
*   Vitesse de reference basee sur 1/2 de l'epaisseur du canal   *
****************************************************************** 
U_0=[nu]*Gr_D_x(1)/$sigma((0.5*xxx([len]))**2) 
mess --> Vitesse Reference basee sur 1/2 de l"epaisseur du canal
mess '   -------------------------------------------------------'
mess [U_0] 
***************************************************************
*  Debit de reference*Gr_D_x (basee sur l'epaisseur du canal) *
*************************************************************** 
Debit_R=debit([lendx])*0.5*xxx([len])/(2.*yyy([lent])*[nu]*Gr_D_x(1))         
mess --> Debit Reference
mess '   ---------------'
mess [Debit_R] 


*******************************************************
*  Temperature Maximale Plaque Droite Adimentionalize *
******************************************************* 
Theta_droite=tempd(1)*[conduct]/([q]*xxx([len]))         
mess --> Temperature Maximale Adimentionalize de la Plaque Droite
mess [Theta_droite] 
*******************************************************
*  Temperature Maximale Plaque Gauche Adimentionalize *
******************************************************* 
Theta_gauche=tempg(1)*[conduct]/([q]*xxx([len]))         
mess --> Temperature Maximale Adimentionalize de la Plaque Gauche
mess [Theta_gauche] 
*******************************************************

sigma xmin = vmin(xxa)            |adimentionel
sigma xmax = vmax(xxa)            |adimentionel
 sigma ymin = vmin(aaa)
* sigma ymax= vmax(aaa)
 sigma ymax= vmax(aaa)+(vmax(aaa)-vmin(aaa))/10 

*set xsiz 12
*set ysiz 10.5
*set xsiz 12           |sem titulos
*set ysiz 8         |sem titulos

*defaults
*set gsiz .32  |haut
*set tsiz .28  |bas
*set asiz .20  |labels 
*set vsiz .15  |axes
*set csiz .25  |commentaires du milieu
* IGSET CHHE pour itx
* pour TEXT il y a une option dans l'instrution
*set ygti .9   |distancia do titulo superior
*set yhti .8   |distancia do titulo inferior

*set ymgu 0.1   |sem titulos
*set ygti 1.0   |distancia do titulo superior
*set ymgl 0.9   |sem titulos
*set yhti 1.0   |distancia do titulo inferior

*set gsiz .20  |haut
*set tsiz .20  |bas
*set asiz .19  |labels 

 null xmin xmax ymin ymax

 set lwid 1
 sln 1
 set mtyp 31
* gra [lenc] xxc aaa  P[opt]
* gra [lenc] xxa aaa  P[opt]     |adimentionel
 sln 13
 set mtyp 26
* gra [lenc] xxc ccc P[opt]
* gra [lenc] xxa ccc P[opt]      |adimentionel
* sln 12
* set mtyp 25
* gra [lenc] xxc ddd P[opt]
 sln 3
 set mtyp 24
* gra [lenc] xxc eee P[opt]
 gra [lenc] xxa eee P[opt]      |adimentionel
 set mtyp 26
 gra [lenc] xxa ee2 P[opt]      |adimentionel

* Escreve Comentarios
*--------------------
set txfp -70    |modifica a fonte (funciona para itx)
set txal 0      |alinhamento do texto
                           
v/cre xtmp(3)
v/input xtmp 0.4 0.45 0.5
xtext=0.55
*
v/cre ytmp(3)
ytext=0.02
v/input ytmp 3*[ytext]
sln 3
gra 3 xtmp ytmp 'l'
set mtyp 24
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  X/L=0.0'

*ytext=0.12E-2
*v/input ytmp 3*[ytext]
*sln 12
*gra 3 xtmp ytmp 'l'
*set mtyp 25
*gra 1 xtmp(2) ytmp(2) 'P'
*itx [xtext] [ytext] 'Section  X/L=0.5 '

ytext=0.026
v/input ytmp 3*[ytext]
sln 13
gra 3 xtmp ytmp 'l'
set mtyp 26
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  X/L=0.5'

ytext=0.032
v/input ytmp 3*[ytext]
sln 1
gra 3 xtmp ytmp 'l'
set mtyp 31
gra 1 xtmp(2) ytmp(2) 'P'
itx [xtext] [ytext] 'Section  X/L=1.0'

set chhe 0.2          |hauteur des caracters pour itx  
itx xtmp(1) 0.042 'Gr?b!^*!=41.5'

set lfon -60    |modifica a fonte (funciona para labels)
atit 'Y' 'U'


<-----/|\------>  ./Help/Users/Ker_features/D_loop_simple
************************************************************************************************************
************************************************************************************************************
********************  SOLVE TRANSFER EQUATION : Fi = f(Fi) *************************************************
************************************************************************************************************
************************************************************************************************************

Numeriquement : Fi = f(Fiz);
*************
               dFi = f(Fiz) + [df/dFi]dFi  -->   ( I - [] )dFi = f(Fiz)

Algorithme :                                                                                        PRINTs
**********                                                                                          ======
      Initialisation :
                       La valeur de Fiz_0 est celle de la sortie du pas précédent.
                       Appel des Tr auxquels peuvent etre sensibles les D_Tr ( > Fi_0 ).
                       Appel des D_Tr.
                                      Fi_0 = f( Fiz_0).  D_Mx_0                           'Before entering'
                                      Cumul des DEV: +(Fi-Fiz)^2.

                            Test convergence > Oui > OUT, Non > Non

                        Calcul UP des Dij_1Puis DWN des dFii; dFizi = dFiz(i-1)


    >>>>>>>>>>>>>>     Appel des D_Tr.
    ^                                  Fii = f(Fiz_i);  D_Mxi = [df/dFiz]_i+1;          'Current iteration'
    ^                                  Cumul des DEV: +(Fi-Fiz)_i^2.
    ^
 (i=i+1)                     Test convergence >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Oui > OUT
    ^                  > Non
    ^
    ^                   Calcul UP des Djk, Puis DWN des dFi_i;
    ^                                               Fiz_i+1 = Fiz_i + dFi_i;
    ^
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<----------------------- Test nItMax  > 'After No convergence'


  :OUT:
                                                                                       'After convergence'

 Rq : 1) On a noté D_Tr les Tr qui sont flaggés !
         ( Des non flagges peuvent tres bien posseder des matrices D )

      2) Le grasp Fiz des D_Tr proc est la seule maniere d obtenir des resultats independants
         de la structure, car celle ci induit un ordre de leur appel;
         => Les copy de FiZ dans Fi devraient etre inutiles.

************************************************************************************************************
************************************************************************************************************
*********************** CRITERE(S) DE CONVERGENCE **********************************************************
************************************************************************************************************
************************************************************************************************************

  Deux critères sont actuellement implémentés:                                     ******** en bref ********
  ============================================                                     *  Standard: TOLQUAD    *
                                                                                   *        ou             *
> Un critère standard, où : SOMME{ (Fi-Fiz)^2} sur les D_flagged Transfers         * User: TOL_US et OPLUS *
est comparée à TOLQUA*NTR (Tolérance quadratique, Nombre de D_Tr), avec            *************************
la possibilité de fixer TOLQUAD dans Zinit (Valeur par défaut = 1.E-10).

> Depuis Mai 94, un critère comparant DEVUS à TOL_US (Tolerance User):
à la sortie de chaque appel a un D_flagged Tr, on accumule le contenu de OPLUS
dans DEVUS.
DEVUS est comparé a TOL_US (à fixer dans ZINIT).

> Le plus sévère des deux critères arrête les itérations. Donc, pour privilégier
le critère utilisateur, il faut donner à TOLQUAD une grande valeur.

  Nombre min et max d'itérations:
  ===============================

> NITMAX fixe le nombre maximum d'itérations, mais on peut en imposer un nombre
minimum en donnant à ITMIN une valeur non négative (défaut=-1).
Pour des raisons historiques, NITMIN=0 entraine au moins une itération, 1 au moins 2, etc.

************************************************************************************************************
************************************************************************************************************
************************************************************************************************************

<-----/|\------>  ./Help/Users/Ker_features/Gestion_des_Fi_et_Fiz
(help en developpement)

A la sortie de Zinit

Au stade des S_Entry

Dans la D_loop

Dans la Step_Advance
<-----/|\------>  ./Help/Users/Langages_tours_de_mains/Procedure_re_entrante
===========================================================================
=== Démonstration par l'exemple ===========================================
=== (utile pour créer des arbres par "dichotomie" dans Zinit) =============
===========================================================================
! Pourvu que l'on gère le niveau (lvl) d'appel de la procédure, ainsi
! que ses bornes, la séquence suivante prétend créer à chaque niveau
! 4 cellules, avec une famille correspondante.
! On veut sous chacune de ces 4 familles, faire de même; il suffit
! pour cela d'apeller la procédure "ré-entrante" = quadrille.
!===========================================================================
! Les indices de "boucles" sont conservés par niveau =ij(lvl).
! Pour la gestion des adresses absolues des cellules créées, on a définit
! pour chaque niveau num0(lvl) pour 4 adresses num0+1 a +4;
! et en parallèle à l'indice de boucle courant, on conserve l'adresse
! des cellules du dessus dans ijnum(lvl), cad que ce tableau représente
! les branches courantes de l'arbre de objets actifs.
!===========================================================================
create Fm Vol;
under Vol
<   lvl=1; num0(lvl) = 0;
!  4 cellules  mesh-1a4;
    do i=1,4
    <  create Cl mesh-i, type = VORTX 8;
       set mesh(i) = mesh-i;
    >
!  4 familles  quad-1a4;
    <i=1,4; create Fm quad-i; >
!
   under quad-ij(lvl) = 1,4
   <  ijnum(lvl) = num0(lvl)+ij(lvl);
      lvl = lvl+1;
      execute quadrille"(lvl)";
:Back_main:; z_pr/back main loop/: lvl, ij(lvl), ijnum(lvl), num0(lvl);
   >
>;
stop;
!---------------------------------------------------------------------
procedure quadrille"(lvl)"
< num0(lvl) = 4*ijnum(lvl-1);
   z_pr/entree...4 cells/: lvl, ijnum(lvl-1), num0(lvl)+1, num0(lvl)+4;
! on cree 4 cellules connectees Up=lvl-1
  do i=1,4
  < create Cl mesh-i, type = VORTX 8;
    num=num0(lvl)+i; set mesh(num) = mesh-i;
! raccordements a echelle superieure
!    create Tr, type = ;
!!    join 1 to (mesh(ijnum(lvl-1)),bulk);
  >
  if lvl .lt. lvlmax
  <
!   on cree 4 familles quad-1a4
    do i=1,4
    < create Fm quad-i; ;
    >
!  boucle familles
    under quad-ij(lvl)=1,4
    < ijnum(lvl)=num0(lvl)+ij(lvl);
      lvl = lvl+1;
      execute quadrille"(lvl)";
      z_pr/fm-loop/: lvl, ij(lvl), ijnum(lvl);
    >
  >;
  lvl = lvl-1;
 z_pr/end quadrille/: lvl, ij(lvl), ijnum(lvl);
  if (lvl.le.1) goto :Back_main:;
!---------------------------------------------------------------------
>"end Vol";
***********************************************************************
featuring : specification d'une procedure re-entrante sans gestion par
goto :Back_main:; on peut essayer des "ASSIGN 10010 TO I10010(lvl)";
sauf que c,a n'est pas permis ...
alors ? if (lvl.eq.min) assign back_main=10011 to I10010
10014 GOTO IO10010(lvl),(10024,10011)
***********************************************************************

<-----/|\------>  ./Help/Users/Langages_tours_de_mains/Procedure_re_entrante.bak
===========================================================================
=== Démonstration par l'exemple ===========================================
=== (utile pour créer des arbres par "dichotomie" dans Zinit) =============
===========================================================================
! Pourvu que l'on gère le niveau (lvl) d'appel de la procédure, ainsi
! que ses bornes, la séquence suivante prétend créer à chaque niveau
! 4 cellules, avec une famille correspondante.
! On veut sous chacune de ces 4 familles, faire de même; il suffit
! pour cela d'apeller la procédure "ré-entrante" = quadrille.
!===========================================================================
! Les indices de "boucles" sont conservés par niveau =ij(lvl).
! Pour la gestion des adresses absolues des cellules créées, on a définit
! pour chaque niveau num0(lvl) pour 4 adresses num0+1 a +4;
! et en parallèle à l'indice de boucle courant, on conserve l'adresse
! des cellules du dessus dans ijnum(lvl), cad que ce tableau représente
! les branches courantes de l'arbre de objets actifs.
!===========================================================================
create Fm Vol;
under Vol
<   lvl=1; num0(lvl) = 0;
!  4 cellules  mesh-1a4;
    do i=1,4
    <  create Cl mesh-i, type = VORTX 8;
       set mesh(i) = mesh-i;
    >
!  4 familles  quad-1a4;
    <i=1,4; create Fm quad-i; >
!
   under quad-ij(lvl) = 1,4
   <  ijnum(lvl) = num0(lvl)+ij(lvl);
      lvl = lvl+1;
      execute quadrille"(lvl)";
:Back_main:; z_pr/back main loop/: lvl, ij(lvl), ijnum(lvl), num0(lvl);
   >
>;
stop;
!---------------------------------------------------------------------
procedure quadrille"(lvl)"
< num0(lvl) = 4*ijnum(lvl-1);
   z_pr/entree...4 cells/: lvl, ijnum(lvl-1), num0(lvl)+1, num0(lvl)+4;
! on cree 4 cellules connectees Up=lvl-1
  do i=1,4
  < create Cl mesh-i, type = VORTX 8;
    num=num0(lvl)+i; set mesh(num) = mesh-i;
! raccordements a echelle superieure
!    create Tr, type = ;
!!    join 1 to (mesh(ijnum(lvl-1)),bulk);
  >
  if lvl .lt. lvlmax
  <
!   on cree 4 familles quad-1a4
    do i=1,4
    < create Fm quad-i; ;
    >
!  boucle familles
    under quad-ij(lvl)=1,4
    < ijnum(lvl)=num0(lvl)+ij(lvl);
      lvl = lvl+1;
      execute quadrille"(lvl)";
      z_pr/fm-loop/: lvl, ij(lvl), ijnum(lvl);
    >
  >;
  lvl = lvl-1;
 z_pr/end quadrille/: lvl, ij(lvl), ijnum(lvl);
  if (lvl.le.1) goto :Back_main:;
!---------------------------------------------------------------------
>"end Vol";
***********************************************************************
featuring : specification d'une procedure re-entrante sans gestion par
goto :Back_main:; on peut essayer des "ASSIGN 10010 TO I10010(lvl)";
***********************************************************************

<-----/|\------>  ./Help/Users/Proc/Cell_Grasp
**************************************************************************
***********  INTRINSIC GRASP  ********************************************
**************************************************************************
GRASP ARRAY Eta,Gamma(LCL)
;
GRASP ARRAY Eta,Gamma,dEta(LCL)
;
**************************************************************************
***********  GRASP FROM EDGES  *******************************************
**************************************************************************
GRASP ARRAY Eta_SV(LSV)
;
GRASP ARRAY dEta_SV(LSV)
;
GRASP ARRAY ABt_TV(LCL,LTV)FOR(LCX)
;
set_signed_ABt_TV(LCL)
**************************************************************************
***********  OBSOLETE  ***************************************************
**************************************************************************
GRASP ARRAY ETA_SV USING(LSV)
;
GRASP ARRAY Eta,Gamma USING(LSV)
!
GRASP ARRAY(LCX).ABt_TV USING(LCL,LTV)
;
**************************************************************************
***********  FOR KER  ****************************************************
**************************************************************************
GRASP ARRAY ABt_IFUP(LCL,IFUP)FOR(LFC)
;
GRASP ARRAY DELTA_IFUP(#)
;
<-----/|\------>  ./Help/Users/Proc/D_Mx_programming -> ../../Programmers/Ker/D_flag_et_appel_des_Tr
<-----/|\------>  ./Help/Users/Proc/D_loop_stuff -> ../Ker_features/D_loop_simple
<-----/|\------>  ./Help/Users/Proc/Easy_printing_facilities
  ********************************************************************
  *********************  LISTE DES COMMANDES   ***********************
  ********************************************************************
  ********      Utlilisable dans les processeurs et dans    **********
  ********   certaines partie du noyau de ZOOM (ZOOM KER)   **********
  ********************************************************************
  remise a jour mai 93, mai 94

voir aussi        $ZOOM/Help/Users/Zinit/ZDL/Zdl.html                    ZINIT
                  $ZOOM/Help/Users/Combined_Facilities/Print_levels      PROC ZINIT

  ====================================================================
  ======================   L'IMPRESSION FACILE   =====================
  ====================================================================

     Z_Pr : Var_List;  Z_Pr/BlaBla/:...,le même avec commentaire (20/06/94)
     Z_Pad : idem, les memes avec sorties console;
     Z_Pr_Error_Cl(LC/LTR):'BlaBla',varlist;  donee la blabla precede de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)   -Futura
                    (le premier element de la liste DOIT etre un char string).

     Z2_Pr : Var_List;
     attention pour les boucles Fortran implicites :
      Z2_Pr : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_Pr : a,b,c,(d(i),i=1,2); marche.

     Print_Class_CL(LCL);

     Print_CL_ID(LCL);

     CL_ID(LCL)

     Print_Class_TR(LTR);

     Print_TR_ID(LTR);

     Print_SV_CL_ID(LSV);

     Print_TV_TR_ID(LTV);

     FM_ID(LFM)

   arguments :
     Var_List : Liste des variables à imprimer, séparées par des virgules
     LCL : adresse de la cellule
     LTR : adresse de la cellule
     LSV : adresse du C-Plug de la cellule
     LTV : adresse du T_Plug du transfert
     LFM : adresse de la famille

Déclenchement d'impression
==========================

   IF ZPrint <...>  .TRUE. géré par le 'Print xxx every yyy steps;' de ZINIT

   IF ZPrint(LCl/Tr) <...>  .TRUE. géré si ZPRINT et ZPr_Cl/Tr pour cet objet

   IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>             Nouveauté de Janvier 94***
   il génère IF ZPRINT(LCl/Tr).and.k.ge.OZPLVL(2) <>

  ====================================================================
  ====================   PREMISSES D'UN P.D.L.   =====================
  ====================================================================
  =======      Langages dédié à l'écriture des processeurs    ========
  ====================================================================

  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

    Print_CL_ID (LCL);

    Print_Class_CL(LCL);

    CL_ID(LCL)

    grasp array eta,gamma (LCL);

    grasp array FI_TV (LTV);

    Print_TV_TR_ID(LTV);

    grasp array ABt_TV (LCL,LTV) for (LCX);

    Set_signed_ABt (LCL);

    Zinit_Entry {Proc_Name} ( CL_Var = ...., ...);

    Parameter_Entry;

  arguments:
    LCL : bank instantie attache a la cellule
    LCX : bank instantie attache a la connexion cellule - T-Plug
    LTV : bank instantie attache au T-Plug du transfert connecte


  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

    Print_TR_ID(LTR);

    Print_Class_TR(LTR);

    grasp array fi,omega (LTR);

    Print_SV_CL_ID(LSV);

    grasp array ETA_SV (LSV);

    grasp array Ct_SV (LSV,LTR) for (LCX);

    Zinit_Entry {Proc_Name} ( TR_Var = ...., ...);

    Parameter_Entry;

<-----/|\------>  ./Help/Users/Proc/Easy_printing_facilities.bak
  ********************************************************************
  *********************  LISTE DES COMMANDES   ***********************
  ********************************************************************
  ********      Utlilisable dans les processeurs et dans    **********
  ********   certaines partie du noyau de ZOOM (ZOOM KER)   **********
  ********************************************************************
  remise a jour mai 93, mai 94

voir aussi        /zoom/Help/Users/Zinit/ZDL/Zdl.html                    ZINIT
                  /zoom/Help/Users/Combined_Facilities/Print_levels      PROC ZINIT

  ====================================================================
  ======================   L'IMPRESSION FACILE   =====================
  ====================================================================

     Z_Pr : Var_List;  Z_Pr/BlaBla/:...,le même avec commentaire (20/06/94)
     Z_Pad : idem, les memes avec sorties console;
     Z_Pr_Error_Cl(LC/LTR):'BlaBla',varlist;  donee la blabla precede de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)   -Futura
                    (le premier element de la liste DOIT etre un char string).

     Z2_Pr : Var_List;
     attention pour les boucles Fortran implicites :
      Z2_Pr : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_Pr : a,b,c,(d(i),i=1,2); marche.

     Print_Class_CL(LCL);

     Print_CL_ID(LCL);

     CL_ID(LCL)

     Print_Class_TR(LTR);

     Print_TR_ID(LTR);

     Print_SV_CL_ID(LSV);

     Print_TV_TR_ID(LTV);

     FM_ID(LFM)

   arguments :
     Var_List : Liste des variables à imprimer, séparées par des virgules
     LCL : adresse de la cellule
     LTR : adresse de la cellule
     LSV : adresse du C-Plug de la cellule
     LTV : adresse du T_Plug du transfert
     LFM : adresse de la famille

Déclenchement d'impression
==========================

   IF ZPrint <...>  .TRUE. géré par le 'Print xxx every yyy steps;' de ZINIT

   IF ZPrint(LCl/Tr) <...>  .TRUE. géré si ZPRINT et ZPr_Cl/Tr pour cet objet

   IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>             Nouveauté de Janvier 94***
   il génère IF ZPRINT(LCl/Tr).and.k.ge.OZPLVL(2) <>

  ====================================================================
  ====================   PREMISSES D'UN P.D.L.   =====================
  ====================================================================
  =======      Langages dédié à l'écriture des processeurs    ========
  ====================================================================

  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

    Print_CL_ID (LCL);

    Print_Class_CL(LCL);

    CL_ID(LCL)

    grasp array eta,gamma (LCL);

    grasp array FI_TV (LTV);

    Print_TV_TR_ID(LTV);

    grasp array ABt_TV (LCL,LTV) for (LCX);

    Set_signed_ABt (LCL);

    Zinit_Entry {Proc_Name} ( CL_Var = ...., ...);

    Parameter_Entry;

  arguments:
    LCL : bank instantie attache a la cellule
    LCX : bank instantie attache a la connexion cellule - T-Plug
    LTV : bank instantie attache au T-Plug du transfert connecte


  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

    Print_TR_ID(LTR);

    Print_Class_TR(LTR);

    grasp array fi,omega (LTR);

    Print_SV_CL_ID(LSV);

    grasp array ETA_SV (LSV);

    grasp array Ct_SV (LSV,LTR) for (LCX);

    Zinit_Entry {Proc_Name} ( TR_Var = ...., ...);

    Parameter_Entry;

<-----/|\------>  ./Help/Users/Proc/Proc_Getting_Started/Zget_start
****************************************
 I : processeur de cellule : principes
****************************************

 SUBROUTINE CND1(LCL);
! ===============================================================
! ==   Capacitance Processor  ;   Cell processor, type = ND1;  ==
! ===============================================================
!  State equation : Capa * dT/dt - Flux_Somme = 0
!  + One state Variable
!  + The first component of each Tplug is a Flux
!
!  === Cell parameters ===
    Heat_capa : real ;
!
! ==== Simulation Entry Point
! =========================================================
! == SumFiT ,  Dtime_2 , Dtime_1 : FORTRAN locale variables
  Dtime_2 = .5*DTIME;     Dtime_1 = DTIME;
  SumFiT=0.;  "Sum of Heat Flux "

  Loop_on_all_connected Fi_TV vectors  (TV = 1,NTV)
  <
    if (dimension of FI_TV <> 0)
    <
      SumFiT = SumFiT + Sign_TV * FI_TV(1);
      ABt_TV(1,1) = -Sign_TV * Dtime_2 / Heat_capa ;

    > "end if"
  > "end loop"
  Gamma(1) = SumFiT * Dtime_1 / Heat_Capa ;
RETURN;
! =========================================================






 SUBROUTINE CHAIR(LCL);
! ===============================================================
! *     Humide Air Processor
! ===============================================================
!  eta(1) : T (K)
!  eta(2) : Wm (kg of water/kg of air)
!
!  si (Nature_of_Transfert = flux_thermique)
!      FI_TV(1) : thermal flux (W/m2)
!  si (Nature_of_Transfert = flux_d'humidite)
!      FI_TV(1) : water flux (kg/s/m2)
!  si (Nature_of_Transfert = flux de chaleur et d'humidite)
!      FI_TV(1) : thermal flux (W/m2)
!      FI_TV(2) : water flux (kg/s/m2)
! ===============================================================
!  === Cell parameters ===
    Heat_capa   , Water_capa     :real ;
!
! ==== Simulation Entry Point
! ==============================================================
! == SumFiT , SumFiWm ,  Dtime_2 , Dtime_1 : FORTRAN locale variables
  Dtime_2 = .5*DTIME;  Dtime_1 = DTIME;
  SumFiWm=0.;   SumFiT=0.;
!
! ******* si air NON sature en humidite *********
  Loop_on_all_connected Fi_TV vectors  (TV = 1,NTV)
  < if (Nature_of_Transfert = flux_thermique)
    < SumFiT = SumFiT + Sign_TV * FI_TV(1);
      ABt_TV(1,1) = -Dtime_2 * Sign_TV / Heat_capa ;
    >ElseIf (Nature_of_Transfert = flux_d'humidite)
    < SumFiWm = SumFiWm + Sign_TV * FI_TV(1);
      ABt_TV(2,1) = -Dtime_2 * Sign_TV / Water_capa ;
    >ElseIf (Nature_of_Transfert = flux de chaleur et d'humidite)
    < SumFiT = SumFiT + Sign_TV * FI_TV(1);
      SumFiWm = SumFiWm + Sign_TV * FI_TV(2);
      ABt_TV(1,1) = -Dtime_2 * Sign_TV / Heat_capa ;        ABt_TV(1,2) = 0.;
      ABt_TV(2,1) = 0.        ABt_TV(2,2) = -Dtime_2 * Sign_TV / Water_capa ;
    > "end if"
  > "end loop"
  Gamma(1) = Dtime_1 * SumFiT / Heat_capa ;
  Gamma(2) = Dtime_1 * SumFiWm / Water_capa ;
!
RETURN;
!==================================================



  SUBROUTINE TCD1(LTR);
! ===============================================================
!  + Flux = SH * ( T_Edge(1) - T(Edge(2) )
!  + The transfer sign convention is positive from first to second TPlug
!  + Non cumulated transfer
!  + ZINIT-inicialisacao :     parametro-CONDUCT     
! ====  parameters ====
    Conduct : real ;  " conductance"
! ==== Simulation Entry Point
! ==============================================================
! ==  T(1) and T(2) :  FORTRAN locale variables
  Loop_on_all ETA_SV vectors
  < if (First_Tplug)
    < T(1) = Eta_SV(1);    TSIGN = 1.;
    >else if (Second_T-Plug)
    < T(2) = Eta_SV(1);    TSIGN = -1.;
    >
    Ct_SV(1,1) = Conduct * TSIGN ;
  >
  FI(1) = Conduct*(T_Edge(1)-T_Edge(2));
  Omega(1) = 0. ;
RETURN;
!======================================================


Exemple :

  fill_CD
  < [Heat_capa]:r = CpSol;
    [Water_capa]:r = WmCpsol;
    [RoAirSec]:r =  RoCtr(1);
    [Sature]:i = 2 "tjrs sature" ;
  >


*********************************
       : ZINIT
*********************************
CREATE ZEUS;CREATE UNIVERSE;
;
create CL CAPA-1 , type = ND1;
  C-Plug 1:1;  set CAPA(1) = CAPA-1;
;
create CL CAPA-2 , type = ND1;
  C-Plug 1:1;  set CAPA(2) = CAPA-2;
;
create CL CAPA-3 , type = ND1;
  C-Plug 1:1;  set CAPA(3) = CAPA-3;
  freeze CAPA-3;
;
create TR , type = GENE1;
  T-Plug 1:1 ;      join 1 to ( CAPA(1),1);
  fill_TD
  <  [Val_Cst]:r = 1.;
     [A]:r = 1.;
     [Om]:r = 2.*3.1416/ 20. ;
  >
;
create TR , type = CD1;
  T-Plug 1:1 ;      join 1 to ( CAPA(1),1);
  T-Plug 2:1 ;      join 2 to ( CAPA(2),1);
  fill_TD < [Conduct]:r = 4.; >
;
create TR , type = CD1;
  T-Plug 1:1 ;      join 1 to ( CAPA(2),1);
  T-Plug 2:1 ;      join 2 to ( CAPA(3),1);
  fill_TD < [Conduct]:r = 4.; >
;
get CAPA(1);
  fill_CD < [Heat_Capa]:r = 20.e-2; >
  fill_ETA < [1] = 0.; >
;
get CAPA(2);
  fill_CD < [Heat_Capa]:r = 20.e-2; >
  fill_ETA < [1] = 0.; >
;
get CAPA(3);
  fill_ETA < [1] = 0.; >



CREATE ZEUS;CREATE UNIVERSE;
" "
do I = 1,3
< create CL CAPA-I , type = ND1;
    C-Plug 1:1;  set CAPA(I) = CAPA-1;
>
  freeze CAPA-3;
;
create TR , type = GENE1;
  T-Plug 1:1 ;      join 1 to ( CAPA(1),1);
  fill_TD
  <  [Val_Cst]:r = 1.;
     [A]:r = 1.;
     [Om]:r = 2.*3.1416/ 20. ;
  >
do I = 1,2
< create TR , type = CD1;
    T-Plug 1:1 ;      join 1 to ( CAPA(I),1);
    T-Plug 2:1 ;      join 2 to ( CAPA(I+1),1);
    fill_TD < [Conduct]:r = 4.; >
>
;
do I = 1,3
< get CAPA(I);
    fill_CD < [Heat_Capa]:r = 20.e-2; >
    fill_ETA < [1] = 0.; >
>



*********************************
 IV : Quincaillerie Informatique===========
*********************************

Pour les cellules :

  skip thru SV(LSV)      "boucle sur les C-Plug de la cellule"
  < skip thru CX(LCX)    "Boucle sur l'ensemble des connexions de chaque C-Plug"
    < get TV(LTV);       "On arrive au T-Plug du transfert connecté"
      if ((LTV).Nb_Tr_Var.EQ.0) to next LCX;     "Si la dimension de FI_TV est"
                         "nul, on passe a la connexion suivante"
      ...... (calcul de ABt_TV) .....

    > "end skip thru CX"
  > "end skip thru SV"

Pour les transferts :

  skip thru TV(LTV)     "boucle sur les T-Plug du transfert"
  < NCX=(LTV).Nb_Cx_CX;
    read thru CX(LCX) (J=1,NCX)  "Boucle sur l'ensemble des connexions de"
    <                            "chaque T-Plug"
      get SV(LSV);      "On arrive au C-Plug de la cellule connectée"

     ...... (calcul de Ct_SV) .......

    > "close read thru CX"
  > "close skip thru TV"

Block de données attaché a chaque cellule : CL(LCL)
(LCL).Types(2)     :  code derivant la "Nature" du processeur
(LCL).Nb_St_Var    :  Number of state variables
(LCL).Nm_Cl        :  Cell first name
(LCL).Cd_Cl        :         and code
(LTR).Cl_Nb        :  Cell unique number (from OFRAME)

Block de données attaché a chaque transfert : TR(LTR)
(LTR).Types(2)     :  code derivant la "Nature" du processeur
(LTR).Nb_Tr_Var    :  Number of transfer variables
(LTR).Nb_Extr      :  Number of extremities (gama)
(LTR).Nb_Fluxes    :  Number of fluxes
(LTR).Tr_Nb        :  Tr unique number (from OFRAME)

Block de données attaché a chaque C-Plug :  SV(LSV)
(LSV).Nb_St_Var    :                Number of State Variables
(LSV).Cx_St_Var_Nb(1:Nb_St_Var)  :  List of connected state variable numbers

Block de données attaché a chaque T-Plug :  TV(LTV)
(LTV).Nb_Cx_CX     :                Number of connected CX's
(LTV).Nb_Tr_Var    :                Number of transfer Variables
(LTV).Cx_Tr_Var_Nb(1:Nb_Tr_Var) :   List of connected transfer Variables numbers




3) acces aux variables resevees

Pour les cellules :
  grasp array Eta,Gamma (LCL);

  grasp array FI_TV(LTV);
  grasp array ABt_TV (LCL,LTV) for (LCX);

Pour les transferts :
  grasp array FI,OMEGA (LTR);

  grasp array Eta_SV (LSV);
  grasp array CT_SV (LSV,LTR) for (LCX);

4) Variable et parametres propres a chaque processeur

exemple :
link_var T(2) : real in class TD;
....
"on definie les liens entre les link_var et les variables déportées, qui"
"elles ont une valeurs"
boucle_sur_les_Eta_SV_connectés
< grasp array ETA_SV(LSV);
  Si (on passe par le 1er T-Plug)
  < link T(1) to ETA_SV(1);
  >Sinon_Si (on passe par le 2eme T-Plug)
  < link T(2) to ETA_SV(1);
  >
> "fin de boucle"
....
"ensuite on peut faire directement"
Flux = H * ( T(1) - T(2) );

Syntaxe:
!
Declaration
Cas d'un processeur de celule; pour un transfert , meme chose mais avec partout
TD au lieu de CD
!
!  === Cell parameters ===
implicit acces to bank CD(LCD);
declare class CD;
local_var List_de_variable : Type_des_var in class CD;
var       List_de_variable : Type_des_var in class CD;
link_var  List_de_variable : Type_des_var in class CD;
end declare class CD;
!
avec ( { } voulant dire optionel ) :
* List_de_variable : Var_name { ( nbcol { ,nblin } ) } {,Var_name_2....}
  Var_Name : Nom de variable. Doit etre compose uniquement de caracteres alphanumerique
  ou du caractere souligne. Pas de restriction sur la longueur.
  nbcol, nblin : nombre de colonnes, nombre de lignes.
    Ces dimensions peuvent etre des expressions contenant des nombres entiers, des
  PARAMETER FORTRAN, une autre variable (deja definie) du meme bank; dans ce cas, cette
  variable doit etre entre crochet.
* Type_des_var : type de la variable : INTEGER , REAL. Si le type n'est pas defini,
  on prend la convention FORTRAN : entier pour les variables dont la premiere lettre
  est de I a N, reel sinon.

exemple :
implicit acces to bank TD(LTD);
declare class TD;
local_var
      NbT       "Nombre totale de maille"
    , PrtLevel  "Print Level"
        : integer in class TD;
var   DDivg ( [NbT] , [NbT] ) "facteur d'échange entre mailles"
        : real in class TD;
link_var
      Tmoy ( [NbT] ) "temperature en chaque maille"
        : real in class TD;
end declare class TD;


Creation du block de données (pour un cellule)
! il faut tout d'abord que l'ensemble des variables utilisees dans une dimension
! soient instantiées par l'instruction SET :
  SET .Var_Name for CD = Valeur;
! création du block de données
  Lift LCD of class CD under (2,0);
! on lie ce block de données au block CL de la cellule
  @LCL@CL@CD@ = LCD;  "Link CDesc"

Pour un transfert , meme chose mais avec partout TD au lieu de CD

Liaison d'une link_var
* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable declare dans un CD ou TD bank d'un autre processeur.
  link Var1 to Var2 of (LProc);
avec Var1 : nom de la link_var "locale"
     Var2 : nom de la var ou local_var "externe"
     LProc: Adresse permettant d'acceder a cette variable "externe"
     ( LProc = LSV ou LCL ou LTV ou LTR ). Ne doit en aucun correspondre
            au processeur ou l'on est : ce pauvre FORTRAN n'etant pas reentrant,
            "results may be hazardous"
* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable "reservee" (apres avoir fait un Grasp Array de cette
variable)
  link Var1 to Reserved_Var(n);
avec Var1         : nom de la link_var "locale"
     Reserved_Var : Eta_SV , Fi_TV , Fiz_TV
     n            : indice dans la Reserved_Var
* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable de ce meme processeur.
  link Var1 to Var2 ;
avec Var1 : nom de la link_var "locale"
     Var2 : nom de la var ou local_var "locale"

On reprend plus completement l'exemple precedent de du transfert CD1

SUBROUTINE TCD1(LTR);
......
! *** définition du block de données
implicit acces to bank TD(LTD);
declare class TD;
var
    Conduct : real in class TD;  " conductance"
link_var
    T_Edge(2) : real in class TD; "Connected State"
end declare class TD;
!
from TR(LTR)
< .........
! *** création du block de données
  Lift LTD of class TD under (2,0);
! *** on lie ce block de données au block TR du transfert
  @LTR@TR@TD@ = LTD;  "Link TDesc"
.....................
! *** on fait pointer les link_var T_Edge(1) et T_Edge(2) sur les deux variables
! *** d'etat ad hoc
  skip thru TV(LTV)       "loop on T-Plugs"
  < NCX = (LTV).Nb_Cx_CX;
    read thru CX(LCX) (J=1,NCX)   "loop on connexions"
    < NCXT = NCXT+1; get SV(LSV);
      grasp array Eta_SV (LSV);
      link T_Edge(NCXT) to Eta_SV(1); "first variable should be the temperature"
    > "close read thru CX"
  > "close skip thru TV"
  if (NCXT.NE.2)
  < PRINT *,'*** ERROR: TR SHOULD HAVE TWO CONNECTIONS, not ',NCXT ;
  >
.........................
! *** utilisation des link_var
  FI(1) = Conduct*(T_Edge(1)-T_Edge(2));
> "close from TR"


* Pour lire une variable declaree dans un CD ou TD bank d'un autre processeur
et la ranger dans une variable Fortran (ou une variable declare dans le CD ou
TD bank locale, si on a fait un IMPLICIT ACCESS ...)

  set X = [Var2]{:type} of (LProc); " {...} veut dire optionel "
 avec X    : nom de la variable Fortran (ou d'une variable declaree dans le CD ou
             TD bank local, si on a fait un IMPLICIT ACCESS ...)
      Var2 : nom de la var , local_var ou link_var "externe"
      type : I ou R ; type de la var, local_var ou link_var "externe". Si le type
             n'est pas specifie, on prend le type FORTRAN par defaut (entier de I
             a N, reel sinon) de la variable externe Var2. Diagnostique d'erreur
             si le type (precise ou par defaut) ne correspond pas au type
             de Var2 tel qu'il a ete precise lors de sa declaration.
      LProc: Adresse permettant d'acceder a cette variable "externe"
             ( LProc = LSV ou LCL ou LTV ou LTR )

* ACCES au block de donnee
!!!!!! avant d'acceder au block de donnee CD ou TD, ne pas oublie de faire
un get CD(LCD) ou un get TD(LTD) (en general on le fait systematiquement au debut
de chaque point d'entre).  Results may be hazardous sinon.   !!!!!!!!!





****************************************************
 V : Les differents point d'entree d'un processeur
****************************************************


Pour  un processeur de transfert, on a typiquement quelques choses du genre
" "
Zinit_Entry KHAIR
          ( Types(2)    = 2 04 01 99 18,  "code spécifiant la nature du Transfert"
            Nb_Tr_Var   = 2,              "nombre de variable de transferts"
            Nb_Extr     = 2,              "nombre d'extremite du proc. "
            Nb_Fluxes   = 0 );
!
! *** création du block de données
  Lift LTD of class TD under (2,0);
! *** on lie ce block de données au block TR du transfert
  @LTR@TR@TD@=LTD;   "Link TDesc"
RETURN;


Pour  un processeur de cellule, on a typiquement quelques choses du genre

Zinit_Entry HAIR
         ( Types(2)   = 2 04 01 01 18,  "code spécifiant la nature de la cellule"
           Nb_St_Var  = 4  );           "nombre de variable d'etat"
" "
! *** on instantie les variables utilisees pour dimensioner une autres variables
  Set .NbMaxEdge  for CD = 10 ; "**** a modifier eventuellement *****"
! *** création du block de données
  Lift LCD of class CD under (2,0);
! *** on lie ce block de données au block CL de la cellule
  @LCL@CL@CD@=LCD;   "Link CDesc"
return;
" "


Code des processeurs :


************************************
*** NUMEROTATION DES PROCESSEURS ***
************************************

Code a 9 chiffres, compose de 5 champs :

Code :    |.|..|..|..|..|
Champs     0  1  2  3  4

champs   0 : code labo (1 chiffre)
         1 : code programmeur (2 chiffres)
         2 : identification externe (ultime?) du processeur (2 chiffres)
         3 : mode de representation des variables (2 chiffres)
         4 : nature des variables (2 chiffres)

======================================================
===     codes 3 :  REPRESENTAION DES VARIABLES     ===
======================================================

Pour les cellules :
-------------------
 01 : Noeud
 02 : positions de source
 03 : Valeur moyenne/position

Pour les transferts :
---------------------
on rajoute 90 lorsqu'il y a reduction de chi2
 01 : Flux
 02 : Flux cumules
 03 : Variable d'etat d'interface
 04 : Flux et var. d'etat d'interface
 05 : Flux cumules et var. d'etat d'interface
 99 : K-transfert

======================================================
===         codes 4 :  NATURE DES VARIABLES        ===
======================================================

 00 : quelconque
 01 : masse
 02 : energie
 03 : impulsion
 04 : temperature
 05 : vitesse
 06 : vorticite
 07 : masse/energie/impulsion
 08 : masse/energie/vorticite/impulsion
 09 : energie/impulsion
 10 : position
 11 : vitesse/position
 12 : pression position
 13 : pression
 14 : vitesse/temperature
 15 : pression/temperature
 16 : force
 17 : temperature/pression eau
 18 : Flux chaleur / Flux humidite
 19 : Flux radiatif IR
 20 : Flux radiatif visible
 21 : temperature/concentration
 22 : Flux humidité
 23 : Longueur(épaisseur,hauteur...)
 60 : fichier meteo


Zinit_Entry HAIR
         ( Types(2)   = 2 04 01 01 18,
           Nb_St_Var  = 4  );
" "
Set .NbMaxEdge  for CD = 10 ; "**** a modifier eventuellement *****"
Lift LCD of class CD under (2,0);
"Link CDesc" @LCL@CL@CD@=LCD;
! Si on a des paramateres en sortie graphique, decommenté la ligne suivante
!  Lift LPW of class PW under (LCD,OCDPW); 
return;

Zinit_Entry GENE1
             ( Types(2)    = 2 04 01 01 00,
                Nb_Tr_Var   = 1,
                Nb_Extr     = 1,
                Nb_Fluxes   = 1 );
Lift LTD of class TD under (2,0);
"Link TDesc" @LTR@TR@TD@=LTD;
! Si on a des paramateres en sortie graphique, decommenté la ligne suivante
!  Lift LPW of class PW under (LTD,OTDPW); 
RETURN;



! ==== Initialization of structure parameters Entry Point,
!          called after all tree-connections done
! =======================================================
ENTRY SCD1(LTR);
  Print_TR_ID(LTR) ;  "Print transfert Id"
  get TD(LTD);        "Annable access to TD bank"
  grasp array FI,OMEGA (LTR);  "Annable access to vector FI"
  call PrTrCx(LTR);   "Print transfert connexions"
  NCXT = 0 ;
  skip thru TV(LTV)   "Loop on T_Plugs"
  < NCX = (LTV).Nb_Cx_CX;  "number of T-Plug connexions"
    if (NCX.ne.1)
    < PRINT *,'*** ERROR : only one connection per T-Plug allowed, not ',NCX ;
    >
    read thru CX(LCX) (J=1,NCX)   "Loop on T-Plug connexions"
    < NCXT = NCXT+1; get SV(LSV);   grasp array Eta_SV (LSV);
      link T_Edge(NCXT) to Eta_SV(1);
    > "close read thru CX"
  > "close skip thru TV"
  if (NCXT.ne.2)
  < PRINT *,'*** ERROR: TCD1 SHOULD HAVE TWO CONNECTIONS, not ',NCXT ;
  >
  FI(1) = Conduct*(T_Edge(1)-T_Edge(2));
  Z2_Pr : Conduct, PrtLevel,FI(1);      "Print the transfert parameters"
RETURN;


! ============================================================================
  SUBROUTINE TCD1(LTR);
! ============================================================================
  .....
LOCAL_VALID_CHAINS: [~TR~TV~CX(.)~SV~ET~],[~TR~TD],
                    [~CX~IC~CT~],[~TR~FI~],[~TR~MG~],
END_CHAINS;
! ***************************************************************************
! *                       CONDUCTIVE TRANSFER .                             *
! ***************************************************************************
!  + Transfer corresponding to continuity equation
!       of type Flux = Landa * Grad(Eta)
!  + Flux = Conduct * ( T_Edge(1) - T(Edge(2) )
!  + The transfer sign convention is positive from first to second TPlug
!  + Non cumulated transfer
!  + ZINIT-inicialisacao :    parametro CONDUCT
! ==========================================================================
! ===  parameters ===
implicit access to bank TD(LTD);
declare class TD;
var
    Conduct : real in class TD;  " conductance"
link_var
    T_Edge(2) : real in class TD; "Connected State"
end declare class TD;
!
! ==== Simulation Entry Point
! ==============================================================
from TR(LTR)
< get TD(LTD);  "Enable access to TD bank"
  if Zprint  < Print_TR_ID(LTR) >;
  grasp array FI,OMEGA (LTR);  "Enable access to FI and Omega vectors"
  TSIGN = 1.;
  skip thru TV(LTV)  "Loop on Tplug"
  < NCX=(LTV).Nb_Cx_CX;
    read thru CX(LCX) (J=1,NCX)  " Loop on T-Plug's connexions"
    < get SV(LSV);      "C-Plug is there"
      grasp array Ct_SV (LSV,LTR) for (LCX);   "Enable access to Ct_SV Matrix"
      Ct_SV(1,1) = Conduct * TSIGN ;
      TSIGN = -TSIGN;
    > "close read thru CX(LCX)"
  > "close skip thru TV(LTV)"
  FI(1) = Conduct * (T_Edge(1)-T_Edge(2));
  Omega(1) = 0. ;
  if Zprint < Z2_Pr : FI(1) , T_Edge(1) , T_Edge(2); >
RETURN;
!======================================================
!   Entry for transfer dependant parameters computation
ENTRY FCD1(LTR);
;
RETURN;
!
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
Zinit_Entry CD1 (
!===============
    Types(2)    = 01 01 02,
    Nb_Tr_Var   = 1,
    Nb_Extr     = 2,
    Nb_Fluxes   = 1 )
!
  Lift LTD of class TD under (2,0);
  @LTR@TR@TD@ = LTD;  "Link TDesc"
RETURN;
" "
! ==== Initialization of structure parameters Entry Point,
!        called after all tree-connections done
! =======================================================
ENTRY SCD1(LTR);
  Print_TR_ID(LTR) ;     GET TD(LTD);
  grasp array FI,OMEGA (LTR);
  call PrTrCx(LTR);  "Print transfert connexions"
  NCXT=0; " Nb of Cx:=Connections"
  skip thru TV(LTV)
  < NCX=(LTV).Nb_Cx_CX;
!   This transfer has no cumulated flux and must have 2 T-Plugs
!   (The transfer sign convention is positive from first to second TPlug).
    if (NCX.ne.1)
    < PRINT *,'*** ERROR : only one connection per T-Plug allowed, not ',NCX ;
    >
    read thru CX(LCX) (J=1,NCX)
    < NCXT = NCXT+1; GET SV(LSV); GRASP ARRAY Eta_SV (LSV);
      link T_Edge(NCXT) to Eta_SV(1);
    >
  >
  if (NCXT.NE.2)
  < PRINT *,'*** ERROR: TR SHOULD HAVE TWO CONNECTIONS, not ',NCXT ;
  >
  FI(1) = Conduct*(T_Edge(1)-T_Edge(2));
  Z2_Pr : Conduct, FI(1);
RETURN;
>;
Parameter_Entry;
END;

! =============================================================
   SUBROUTINE TGENE1(LTR);
! =============================================================
   .......
LOCAL_VALID_CHAINS: [~TR~TV~CX(.)~SV~ET~],[~TR~TD],
                    [~CX~IC~CT~],[~TR~FI~],[~TR~MG~],
END_CHAINS;
! *********************************************************************
!           generateur de courant  I = Val_Cst + A * sin ( Om * t )
! *********************************************************************
! Flux non cumulé
! Valeur a initialiser dans ZINIT :  Val_Cst   , A   , Om
! *********************************************************************
!  ===  parameters ===
implicit acces to bank TD(LTD);
declare class TD;
var Val_Cst            "Fixed value"
  , A                  "Amplitude"
  , Om                 "Pulsation Om because Omega reservé"
     :real in class TD;
end declare class TD;
!
! ==== Simulation Entry Point
! ==============================================================
FROM TR(LTR)
<  IF ZPRINT  < Print_TR_ID(LTR) >;
  GRASP ARRAY FI,OMEGA (LTR);    GET TD(LTD);
  "Ct matrix is zero"
  FI(1) = Val_Cst + A * sin( Om * time);
  Omega(1) = A * Om * cos( Om * time) * DTIME;
  if ZPRINT < Z2_Pr : FI(1), Omega(1); >
RETURN;
!======================================================
!   Entry for transfer dependant parameters computation
ENTRY FGENE1(LTR);
RETURN;
!
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
Zinit_Entry GENE1
             ( Types(2)    = 2 04 01 01 00,
                Nb_Tr_Var   = 1,
                Nb_Extr     = 1,
                Nb_Fluxes   = 1 );
Lift LTD of class TD under (2,0);
"Link TDesc" @LTR@TR@TD@=LTD;
RETURN;
!
! ==== Initialization of strucure parameters Entry Point, called after Zinit
! ==========================================================================
ENTRY SGENE1(LTR);
  Print_TR_ID(LTR) ;    GET TD(LTD);
  call PrTrCx(LTR);     GRASP ARRAY FI,OMEGA (LTR);
  FI(1) = Val_Cst + A * sin( Om * time);
  Z2_Pr : Val_Cst , A , Om , FI(1), Omega(1);
RETURN;
>;
Parameter_Entry;
END;

! ===============================================================
    SUBROUTINE CND01(LCL);
! ===============================================================
! *     Capacitance Processor same as CND1 , but without        *
! * steady state solution                                       *
! ===============================================================
!  State equation : Capa * dT/dt - Flux_Somme = 0
!  + One state Variable
!  + The first component of each Tplug is a Flux
!  + The transfer sign convention is positive from first to second TPlug,
!    if the transfer has 2 extremity
!  + Transferts with more then 2 extremity must give a positive inwards flux
!
!  + Parametre a initialiser dans ZINIT : Heat_capa
! ===============================================================
    .......
LOCAL_VALID_CHAINS:[~CL~CD~],[~CL~ET~],[~CL~GA~],[~CL~AB~],
                   [~CL~SV~CX~TV~TR~], [~SV~CX~IC~],
                   [~TR~TV~CX~],       [~CX~TV~FI~],
END_CHAINS;
!  === Cell parameters ===
implicit access to bank CD(LCD);
declare class CD;
var
    Heat_capa : real in class CD;
end declare class CD;
!
! ==== Simulation Entry Point
! ==============================================================
from CL(LCL)
< get CD(LCD);    "Enable access to CD bank"
  grasp array Eta,Gamma (LCL);  "Enable access to Eta and Gamma vectors"
  if ZPrint  < Print_CL_ID(LCL) >;
  Dtime_2 = .5 * DTIME;     Dtime_1 = DTIME;  "Flux non cumules"
  SumFiT=0.;      " Sum of Heat Flux "
  Skip thru SV(LSV)  "Loop on C-Plugs"
  < skip thru CX(LCX)  "Loop on C-Plugs's connexions"
    < from TV(LTV)       "T-Plug is there"
      < if ((LTV).Nb_Tr_Var.EQ.0) TO NEXT LCX; "if dim(FI_TV)= 0 next FI_TV"
        grasp array FI_TV(LTV);       TSIGN = Sign_TV(LTV);
        grasp array ABt_TV (LCL,LTV) for (LCX);
        SumFiT = SumFiT + TSIGN * FI_TV(1);
        ABt_TV(1,1) = -TSIGN * Dtime_2 / Heat_capa ;
      > "close from TV(LTV)"
    > "close skip thru CX(LCX)"
  > "close skip thru SV(LSV)"
  if Zprint < Z2_Pr : SumFiT ; >
  Gamma(1) = SumFiT * Dtime_1 / Heat_Capa ;
RETURN;
!==================================================
!   Entry for state dependant parameters computation
ENTRY KND01(LCL);
RETURN;
!
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
Zinit_Entry ND01
               ( Types(2)   = 01 01 04,
                 Nb_St_Var  = 1  );
  set_signed_ABt_TV(LCL);
  Lift LCD of class CD under (2,0);
  @LCL@CL@CD@=LCD;  "Link CDesc"
RETURN;
! ==== Initialization of strucure parameters Entry Point, called after Zinit
! ==========================================================================
ENTRY RND01(LCL);
  GET CD(LCD);     Print_CL_ID(LCL);
  Z2_Pr : Heat_capa, PrtLevel;
RETURN;
>; "close from CL(LCL)"
Parameter_Entry;
END;

<-----/|\------>  ./Help/Users/Proc/Proc_Getting_Started/lastcmz.kumac
*** Begin of history file: 07/05/93 - 15.01.57
ROOT /CMZ
SET/PROMPT 'CMZ []'
EXEC /cern/cmz/cmzsys-1_39_00
LAST 0 'LASTCMZ'
EXEC ~/user_data/cmzlogon.kumac
*** End   of history file: 07/05/93 - 15.01.57

<-----/|\------>  ./Help/Users/Proc/Proc_Nature.list
/zoom/Help/Users/Proc/Proc_Nature.list 


************************************
*** NUMEROTATION DES PROCESSEURS ***
************************************

Code a 9 chiffres, compose de 5 champs :

Code :    |.|..|..|..|..|
Champs     0  1  2  3  4            

champs   0 : code labo (1 chiffre)
         1 : code programmeur (2 chiffres)
         2 : identification externe (ultime?) du processeur (2 chiffres)
         3 : mode de representation des variables (2 chiffres)
         4 : nature des variables (2 chiffres)


=====================================================
===     codes 0 et 1 :  LABOS et PROGRAMMEURS     ===
=====================================================


 code labo             programmeur  

 1 : LESETH
                    01 : Jean-Louis Joly
                    02 : Jean-Louis Bonin
                    03 : Jean-Yves Grandpeix
                    04 : Vincent  Plattel
                    05 : Monique  Rigal
                    06 : Olivier  Fudym
 2 : RAMSES
                    01 : Jean-Yves Grandpeix
                    02 : Alain  Lahellec
                    03 : Antonio  Rodrigues
                    04 : Jean-Louis Dufresne
                    05 : Dominique  Picard
                    06 : Robert  Franchisseur
                    07 : Mafalda Nunes Vaz
                    08 : Emmanuelle Cohen-Solal
                    09 : Anne Mathieu
                    10 : Venance Journe
                    11 : Catherine Fritsch
 3 : ITIME
                    01 : Antonio Rego-Teixeira
                    02 : Carlos Portela
                    03 : Anabela Amaral
                    04 : Cristina Duarte

 4 : IBM-ENS
                    01 : Marie Helene Tusseau

 5 : IUST
                    01 : Antonio Rodrigues

======================================================
===     codes 3 :  REPRESENTAION DES VARIABLES     ===
======================================================

Pour les cellules :
-------------------

 01 : Noeud
 02 : positions de source
 03 : Valeur moyenne/position


Pour les transferts :
---------------------

on rajoute 90 lorsqu'il y a reduction de chi2

 01 : Flux
 02 : Flux cumules
 03 : Variable d'etat d'interface
 04 : Flux et var. d'etat d'interface
 05 : Flux cumules et var. d'etat d'interface
 06 : Flux volumique <-> Bulk Source
 07 : Flux surfacique
 08 : Flux Volumique * Volume <-> Integrated Bulk Source

 99 : K-transfert
                     

======================================================
===         codes 4 :  NATURE DES VARIABLES        ===
======================================================

 00 : quelconque
 01 : masse
 02 : énergie
 03 : impulsion
 04 : temperature
 05 : vitesse
 06 : vorticite
 07 : masse/energie/impulsion
 08 : masse/energie/vorticite/impulsion
 09 : energie/impulsion

 10 : position
 11 : vitesse/position
 12 : pression position
 13 : pression
 14 : vitesse/temperature
 15 : pression/temperature
 16 : force
 17 : temperature/pression eau
 18 : Flux chaleur / Flux humidite
 19 : Flux radiatif IR

 20 : Flux radiatif visible
 21 : temperature/concentration
 22 : Flux humidité
 23 : Longueur(épaisseur,hauteur...)
 24 : Température,Vorticité ... (le 27/03/96)
 25 : Fonction de courant de Lagrange 
 26 ; Masse/vitesse
 27 : Acceleration (ou Force massique)
 28 : Grad vitesse (ou Tenseur des taux de deformation)
 29 : Température,Salinité ... (le 23/05/96)
 30 : Vorticité,Température,Salinité ... (le 30/01/97)
                            ou humidité

 31 : Flux de type Reynolds'stress <X'Y'>
 32 : énergie cinétique turbulente
 33 : fréquence (Vaisala, Prandtl)/Grad_Richardson

 41 : Prix
 42 : Grandeur monetaire (salaire, consom.)
 43 : Taux de croissance (productivite, salaires, etc)
 44 : Taux de marge (commerciales, TVA, profits)
 45 : Efficacite (productivite)

 60 : fichier meteo

===========================================
===========================================
IDENTIFICATION DES PROCESSEURS DE CELLULES
===========================================
===========================================

********
** 01 **
********

01 00 :
=======
     01 (. .. 01 01 00) : CTRSP1
     03 (2 02 03 01 00  : CNeuro
     04 (2 10 04 01 00  : CGrwth   (TES)
     05 (2 10 05 01 00) : CLGSTC    Demande finale Log(Adim) des menages
01 01 :
=======
     01 (2 01 01 01 01) : CNDW   
01 02 :
=======
     01 (. .. 01 01 02) : CCNTR
01 04 :
=======
     01 (. .. 01 01 04) : CND  ,  CRNOD(LISBOA)
     02 (. .. 02 01 04) : CNDS
     03 (. .. 03 01 04) : CNDI
     04 (. .. 05 01 04) : CTHS
     05 (. .. 05 01 04) : CWL1
     06 (. .. 06 01 04) : CFX1
     07 (2 01 07 01 04) : C2ND1
     20 (2 02 20 01 04) : CPKAR   Patankar Interface Cell
01 05 :
=======
     01 (. .. 01 01 05) : CLIQ1
01 07 :
=======
     01 (. .. 01 01 07) : CCVZ
     02 (. .. 02 01 07) : CCV
     03 (. .. 03 01 07) : CCVS
01 11 :
=======
     01 (. .. 01 01 11) : CWARZ , CMTC1
     02 (2 01 02 01 11) : CDYN
01 15 :
=======
     01 (. .. 01 01 15) : CWICK
01 17 :
=======
     01 (. .. 01 01 17) : CGNOD
01 18 :
=======
     01 (2 04 01 01 18) : CHAIR
01 21 :
=======
     01 (. .. 01 01 21) : CREAC
01 26 :
=======
     01 (2 01 01 01 26) : CICDY1   2D dynamics simple cell for ICE dynamics
     02 (2 01 02 01 26) : CICDY2   2D cavitative rheology for ICE dynamics

01 41 :
=======
     01 (2 10 01 01 41) : CEPRI    Equilibre des Prix (TES)

01 42 :
=======
     01 (2 10 01 01 42) : CEQAN     Equilibre des Quantités
     01 (2 10 02 01 42) : CDmFq     Demande Finale de q
     01 (2 10 03 01 42) : CEQOM     Equilibre du commerce

01 45 :
=======
     01 (2 10 01 01 45) : CRHOQ    Productivité (TES)

********
** 02 **
********

02 17 :
=======
     01 (. .. 01 02 17) : CGDIR

********
** 03 **
********

03 11 :
=======
     01 (. .. 01 03 11) : CPISTN
03 12 :
=======
     01 (. .. 01 03 12) : CGASOP
03 14 :
=======
     01 (. .. 01 03 14) : CPATAN
03 24 :
=======
     01 (2 02 01 03 24) : CVORTX  Al1
     02 (2 09 02 03 24) : CEAU    Ocean englacé (Anne)
     01 (2 02 03 03 24) : CVORTY/Z  Al1
03 32 :
=======
     01 (2 02 01 03 32) : CMLOYA   Mellor&Yamada 2.5 model
     01 (2 02 02 03 32) : CKSURF   Associated Surf Cell


===========================================
===========================================
IDENTIFICATION DES PROCESSEURS DE TRANSFERT
===========================================
===========================================

********
** 01 **
********

01 00 :
=======
     03 (2 02 03 01 00) : TPeso   Transfer entre neurones
01 01 :
=======
     01 (2 01 01 01 01) : Tmasss  Transfert advectif de masse, super simple
     02 (2 01 02 01 01) : Tmass2  Transfert advectif de masse, schema amont
     03 (2 05 01 01 01) : Tmass3  Transfert advectif de masse, schema exponentiel
     04 (2 01 03 01 01) : Tmasst  Transfert advectif de masse, schema amont, grille decalee
01 02 :
=======
     01 (. .. 01 01 02) : TCD1
     02 (2 02 02 01 02) : TCDTR    Ocean Convective Adjustment
     03 (2 01 03 01 02) : TCDTR2   Conduction and Transport
01 05 :
=======
     01 (2 02 01 01 05) : TADV   V_profile Advective Tr
01 14 :
=======
     01 (. .. 01 01 14) : TPCLET
     02 (. .. 02 01 14) : TPCLT0
01 16 :
=======
     01 (. .. 01 01 16) : TSPRNG
01 18 :
=======
     01 (. .. 01 01 18) : TFILK
01 20 :
=======
     01 (2 02 01 01 20) : TSOLOC   Ocean Solar Flux absorption
01 22 :
=======
     01 (. .. 01 01 22) : TUNCON   Al1
01 23 :
=======
     01 (2 02 01 01 23) : THMIXL   Mixed Ocean Layer Thickness
01 24 :
=======
     01 (. .. 01 01 24) : TVORTX   Al1,Tonio (u=Grad Psi+..)
     01 (. .. 02 01 24) : TVORT0,1,2 Al1,Tonio (TVortx Bound. cond.)
     01 (2 09 03 01 24) : TFLUTS   Flux de Temperature et de salinite(Anne)
     01 (. .. 04 01 24) : TVLINK,VORTZ   Al1/planet
     01 (. .. 05 01 24) : TVORTK   Al1/planet/ameth
     01 (. .. 06 01 24) : TVMEAN   Al1/planet
01 25 :
=======
     01 (. .. 01 01 25) : TPSI     Al1,Tonio
     01 (. .. 02 01 25) : TPSIG    Al1/planet

01 31 :
=======
     01 (2 02 01 01 30) : Tatm     Source(t) de temp surface, Al1/planet
     01 (2 02 01 02 30) : TRiolis  Entrainement par Gdes Echelles, Al1/planet

01 31 :
=======
     01 (2 02 01 01 31) : TGorov   Flux de <X'Y'>, Al1/planet
 01 32 :
=======
     01 (2 02 01 01 32) : TTKine   Flux de TKE

********
** 02 **
********

02 00 :
=======
     01 (. .. 01 02 00) : TFIX
     02 (2 04 02 02 00) : TFIX2
02 01 :
=======
     01 (. .. 01 02 01) : TCVMZ
     02 (. .. 02 02 01) : TCVM
02 02 :
=======
     01 (. .. 01 02 02) : TCD
     02 (. .. 02 02 02) : TCDH
     03 (. .. 03 02 02) : TCVEZ
     04 (. .. 04 02 02) : THTER
     05 (. .. 05 02 02) : THTRN   ,TCIRC(Serre)
     06 (. .. 06 02 02) : THEZ
     07 (. .. 07 02 02) : TCVE
     08 (. .. 08 02 02) : THE
     09 (. .. 09 02 02) : TCDW
     20 (2 02 20 02 02) : TPKAR   Schwart-like Tr
     21 (2 04 21 02 02) : TCVAD   JLD(ajustement convectif air sec)
     22 (3 03 22 01 02) : TCONV   Unvented Trombe Wall

02 03 :
=======
     01 (. .. 01 02 03) : TCVQZ
     02 (. .. 02 02 03) : THQ
     03 (. .. 03 02 03) : TCVQ
02 18 :
=======
     01 (. .. 01 02 18) : TFILK2
     02 (2 04 02 02 18) : THCVA   ajustement convectif avec condensation
02 19 :
=======
     01 (2 04 01 02 19) : TRAY1   F*Sigma*(T1**4-T2**4)
     02 (2 04 02 02 19) : TRAD
     03 (3 04 03 01 19) : TIRAD   Infra red flux 

02 20 :
=======
     01 (2 04 01 02 20) : TFQO   Flux solaire extra atmospherique

********
** 03 **
********

03 00 :
=======

     01 (. .. 01 03 00) : TRSP1
     02 (2 02 02 03 00) : TNeuro  Poids des liens de Réseaux
     03 (2 10 03 03 00) : TCopy   recopie d'etats de SV scalaires dans un vecteur (TES)
     04 (2 10 04 03 00) : TFolo   force une dyn de croissance (import, export...) // DF
     05 (2 10 05 03 00) : TRate   Taux de marge

     90 (. .. 90 03 00) : TWARZ

03 04 :
=======
     01 (. .. 01 03 04) : TCDS
03 06 :
=======
     01 (. .. 01 03 06) : TCVR
     02 (. .. 02 03 06) : THR
03 12 :
=======
     01 (. .. 01 03 12) : TLI1
     02 (. .. 02 03 12) : TSTRNG
     03 (. .. 03 03 12) : TLIGA1
03 13 :
=======
     01 (. .. 01 03 13) : TPRS
     02 (. .. 02 03 13) : TPRESS
     03 (. .. 03 03 13) : TPRES0
     04 (2 01 04 03 13) : TPREST Pressure for ice cavitative rheology (Staggered grid)
03 16 :
=======
     01 (2 01 01 03 16) : TSTRIC
     02 (2 01 02 03 16) : TFW   Force de frottement sur l'eau
03 18 :
=======
     01 (. .. 01 03 18) : TFILK3
03 28 :
=======
     01 (2 01 01 03 28) : TDVIC1 (Grad V on a cell for Ice)
     01 (2 01 02 03 28) : TDVIC2 ( dot(Grad V,n) at interface for Ice)

03 41 :
=======
     01 (2 10 01 03 41) : TPPUB  Prix publics (TES)

03 42 :
=======
     01 (2 10 01 03 42) : TBASK  Panier des ménages (TES)
     02 (2 10 02 03 42) : TCI    Consommation intermédiaire
     03 (2 10 03 03 42) : TCF    Consommation finale
     04 (2 10 04 03 42) : TBUDG  Budget disponible de ménages
     05 (2 10 05 03 42) : TMSAL  Masse salariale
     06 (2 10 06 03 42) : TAV    Valeur ajoutée
     07 (2 10 07 03 42) : TDF    Demande finale des menages

********
** 04 **
********

04 09 :
=======
     01 (. .. 01 04 09) : TCNTL

04 33 :
=======
     01 (2 02 01 04 33) : TMLOYA MellorYamada
     02 (2 02 02 04 33) : TKSURF Surface MloYa

********
** 06 **
********

06 01 :
=======
     01 (201 01 06 01) : TGROW (phytoplancton growth, with NH4/NO3 distinction)
     02
     03
     04
     05
     06 (401 06 06 01) : TRESP (phytoplancton respiration, with NH4/NO3 distinction)
     07 (401 07 06 01) : TREGEN
     08 (201 08 06 01) : TGROW2 (phytoplancton growth, without NH4/NO3 distinction)
     09 (201 09 06 01) : TRESP2 (phytoplancton respiration, without NH4/NO3 distinction)
     10 (401 10 06 01) : TMICH

********
** 07 **
********

07 27 :
=======
     01 (201 01 07 27) : TACCOR Accelaration de Coriolis 2D
     02 (201 02 07 27) : TCORst Accelaration de Coriolis 2D, grille decallee

********
** 08 **
********

08 19 :
=======
     01 (202 01 08 19) : TRADI Bilan net IR 2D (Richard Fournier & Alain Lahellec) 

********
** 93 **
********
93 00 :
=======
     01 (2 02 01 93 00) : TCell Valeur Moyenne d'états connectés
     02 (2 02 02 93 00) : TDcplg Moyenne de transferts connectés(Découplant)

********
** 99 **
********
99 00 :
=======
     01 (2 02 01 99 00) : TKneur KTransfer associé à CNeuro
     02 (2 02 02 99 00) : TMacro associé à TCell

99 13 :
=======
     01 (. .. 01 99 13) : TMFNUL  Tonio(X versions)
99 32 :
=======




<-----/|\------>  ./Help/Users/Proc/Proc_Nature.list.bak
/zoom/Help/Users/Proc/Proc_Nature.list 


************************************
*** NUMEROTATION DES PROCESSEURS ***
************************************

Code a 9 chiffres, compose de 5 champs :

Code :    |.|..|..|..|..|
Champs     0  1  2  3  4            

champs   0 : code labo (1 chiffre)
         1 : code programmeur (2 chiffres)
         2 : identification externe (ultime?) du processeur (2 chiffres)
         3 : mode de representation des variables (2 chiffres)
         4 : nature des variables (2 chiffres)


=====================================================
===     codes 0 et 1 :  LABOS et PROGRAMMEURS     ===
=====================================================


 code labo             programmeur  

 1 : LESETH
                    01 : Jean-Louis Joly
                    02 : Jean-Louis Bonin
                    03 : Jean-Yves Grandpeix
                    04 : Vincent  Plattel
                    05 : Monique  Rigal
                    06 : Olivier  Fudym
 2 : RAMSES
                    01 : Jean-Yves Grandpeix
                    02 : Alain  Lahellec
                    03 : Antonio  Rodrigues
                    04 : Jean-Louis Dufresne
                    05 : Dominique  Picard
                    06 : Robert  Franchisseur
                    07 : Mafalda Nunes Vaz
                    08 : Emmanuelle Cohen-Solal
                    09 : Anne Mathieu
                    10 : Venance Journe
                    11 : Catherine Fritsch
 3 : ITIME
                    01 : Antonio Rego-Teixeira
                    02 : Carlos Portela
                    03 : Anabela Amaral
                    04 : Cristina Duarte

 4 : IBM-ENS
                    01 : Marie Helene Tusseau

 5 : IUST
                    01 : Antonio Rodrigues

======================================================
===     codes 3 :  REPRESENTAION DES VARIABLES     ===
======================================================

Pour les cellules :
-------------------

 01 : Noeud
 02 : positions de source
 03 : Valeur moyenne/position


Pour les transferts :
---------------------

on rajoute 90 lorsqu'il y a reduction de chi2

 01 : Flux
 02 : Flux cumules
 03 : Variable d'etat d'interface
 04 : Flux et var. d'etat d'interface
 05 : Flux cumules et var. d'etat d'interface
 06 : Flux volumique <-> Bulk Source
 07 : Flux surfacique
 08 : Flux Volumique * Volume <-> Integrated Bulk Source

 99 : K-transfert
                     

======================================================
===         codes 4 :  NATURE DES VARIABLES        ===
======================================================

 00 : quelconque
 01 : masse
 02 : énergie
 03 : impulsion
 04 : temperature
 05 : vitesse
 06 : vorticite
 07 : masse/energie/impulsion
 08 : masse/energie/vorticite/impulsion
 09 : energie/impulsion

 10 : position
 11 : vitesse/position
 12 : pression position
 13 : pression
 14 : vitesse/temperature
 15 : pression/temperature
 16 : force
 17 : temperature/pression eau
 18 : Flux chaleur / Flux humidite
 19 : Flux radiatif IR

 20 : Flux radiatif visible
 21 : temperature/concentration
 22 : Flux humidité
 23 : Longueur(épaisseur,hauteur...)
 24 : Température,Vorticité ... (le 27/03/96)
 25 : Fonction de courant de Lagrange 
 26 ; Masse/vitesse
 27 : Acceleration (ou Force massique)
 28 : Grad vitesse (ou Tenseur des taux de deformation)
 29 : Température,Salinité ... (le 23/05/96)
 30 : Vorticité,Température,Salinité ... (le 30/01/97)
                            ou humidité

 31 : Flux de type Reynolds'stress <X'Y'>
 32 : énergie cinétique turbulente
 33 : fréquence (Vaisala, Prandtl)/Grad_Richardson

 41 : Prix
 42 : Grandeur monetaire (salaire, consom.)
 43 : Taux de croissance (productivite, salaires, etc)
 44 : Taux de marge (commerciales, TVA, profits)
 45 : Efficacite (productivite)

 60 : fichier meteo

===========================================
===========================================
IDENTIFICATION DES PROCESSEURS DE CELLULES
===========================================
===========================================

********
** 01 **
********

01 00 :
=======
     01 (. .. 01 01 00) : CTRSP1
     03 (2 02 03 01 00  : CNeuro
     04 (2 10 04 01 00  : CGrwth   (TES)
     05 (2 10 05 01 00) : CLGSTC    Demande finale Log(Adim) des menages
01 01 :
=======
     01 (2 01 01 01 01) : CNDW   
01 02 :
=======
     01 (. .. 01 01 02) : CCNTR
01 04 :
=======
     01 (. .. 01 01 04) : CND  ,  CRNOD(LISBOA)
     02 (. .. 02 01 04) : CNDS
     03 (. .. 03 01 04) : CNDI
     04 (. .. 05 01 04) : CTHS
     05 (. .. 05 01 04) : CWL1
     06 (. .. 06 01 04) : CFX1
     07 (2 01 07 01 04) : C2ND1
     20 (2 02 20 01 04) : CPKAR   Patankar Interface Cell
01 05 :
=======
     01 (. .. 01 01 05) : CLIQ1
01 07 :
=======
     01 (. .. 01 01 07) : CCVZ
     02 (. .. 02 01 07) : CCV
     03 (. .. 03 01 07) : CCVS
01 11 :
=======
     01 (. .. 01 01 11) : CWARZ , CMTC1
01 15 :
=======
     01 (. .. 01 01 15) : CWICK
01 17 :
=======
     01 (. .. 01 01 17) : CGNOD
01 18 :
=======
     01 (2 04 01 01 18) : CHAIR
01 21 :
=======
     01 (. .. 01 01 21) : CREAC
01 26 :
=======
     01 (2 01 01 01 26) : CICDY1   2D dynamics simple cell for ICE dynamics
     02 (2 01 02 01 26) : CICDY2   2D cavitative rheology for ICE dynamics

01 41 :
=======
     01 (2 10 01 01 41) : CEPRI    Equilibre des Prix (TES)

01 42 :
=======
     01 (2 10 01 01 42) : CEQAN     Equilibre des Quantités
     01 (2 10 02 01 42) : CDmFq     Demande Finale de q
     01 (2 10 03 01 42) : CEQOM     Equilibre du commerce

01 45 :
=======
     01 (2 10 01 01 45) : CRHOQ    Productivité (TES)

********
** 02 **
********

02 17 :
=======
     01 (. .. 01 02 17) : CGDIR

********
** 03 **
********

03 11 :
=======
     01 (. .. 01 03 11) : CPISTN
03 12 :
=======
     01 (. .. 01 03 12) : CGASOP
03 14 :
=======
     01 (. .. 01 03 14) : CPATAN
03 24 :
=======
     01 (2 02 01 03 24) : CVORTX  Al1
     02 (2 09 02 03 24) : CEAU    Ocean englacé (Anne)
     01 (2 02 03 03 24) : CVORTY  Al1
03 32 :
=======
     01 (2 02 01 03 32) : CMLOYA   Mellor&Yamada 2.5 model
     01 (2 02 02 03 32) : CKSURF   Associated Surf Cell


===========================================
===========================================
IDENTIFICATION DES PROCESSEURS DE TRANSFERT
===========================================
===========================================

********
** 01 **
********

01 00 :
=======
     03 (2 02 03 01 00) : TPeso   Transfer entre neurones
01 01 :
=======
     01 (2 01 01 01 01) : Tmasss  Transfert advectif de masse, super simple
     02 (2 01 02 01 01) : Tmass2  Transfert advectif de masse, schema amont
     03 (2 05 01 01 01) : Tmass3  Transfert advectif de masse, schema exponentiel
     04 (2 01 03 01 01) : Tmasst  Transfert advectif de masse, schema amont, grille decalee
01 02 :
=======
     01 (. .. 01 01 02) : TCD1
     02 (2 02 02 01 02) : TCDTR    Ocean Convective Adjustment
     03 (2 01 03 01 02) : TCDTR2   Conduction and Transport
01 05 :
=======
     01 (2 02 01 01 05) : TADV   V_profile Advective Tr
01 14 :
=======
     01 (. .. 01 01 14) : TPCLET
     02 (. .. 02 01 14) : TPCLT0
01 16 :
=======
     01 (. .. 01 01 16) : TSPRNG
01 18 :
=======
     01 (. .. 01 01 18) : TFILK
01 20 :
=======
     01 (2 02 01 01 20) : TSOLOC   Ocean Solar Flux absorption
01 22 :
=======
     01 (. .. 01 01 22) : TUNCON   Al1
01 23 :
=======
     01 (2 02 01 01 23) : THMIXL   Mixed Ocean Layer Thickness
01 24 :
=======
     01 (. .. 01 01 24) : TVORTX   Al1,Tonio (u=Grad Psi+..)
     01 (. .. 02 01 24) : TVORT0,1,2 Al1,Tonio (TVortx Bound. cond.)
     01 (2 09 03 01 24) : TFLUTS   Flux de Temperature et de salinite(Anne)
     01 (. .. 04 01 24) : TVLINK   Al1/planet
     01 (. .. 05 01 24) : TVORTK   Al1/planet/ameth
01 25 :
=======
     01 (. .. 01 01 25) : TPSI     Al1,Tonio
     01 (. .. 02 01 25) : TPSIG    Al1/planet

01 31 :
=======
     01 (2 02 01 01 30) : Tatm     Source(t) de temp surface, Al1/planet
     01 (2 02 01 02 30) : TRiolis  Entrainement par Gdes Echelles, Al1/planet

01 31 :
=======
     01 (2 02 01 01 31) : TGorov   Flux de <X'Y'>, Al1/planet
 01 32 :
=======
     01 (2 02 01 01 32) : TTKine   Flux de TKE

********
** 02 **
********

02 00 :
=======
     01 (. .. 01 02 00) : TFIX
     02 (2 04 02 02 00) : TFIX2
02 01 :
=======
     01 (. .. 01 02 01) : TCVMZ
     02 (. .. 02 02 01) : TCVM
02 02 :
=======
     01 (. .. 01 02 02) : TCD
     02 (. .. 02 02 02) : TCDH
     03 (. .. 03 02 02) : TCVEZ
     04 (. .. 04 02 02) : THTER
     05 (. .. 05 02 02) : THTRN   ,TCIRC(Serre)
     06 (. .. 06 02 02) : THEZ
     07 (. .. 07 02 02) : TCVE
     08 (. .. 08 02 02) : THE
     09 (. .. 09 02 02) : TCDW
     20 (2 02 20 02 02) : TPKAR   Schwart-like Tr
     21 (2 04 21 02 02) : TCVAD   JLD(ajustement convectif air sec)
     22 (3 03 22 01 02) : TCONV   Unvented Trombe Wall

02 03 :
=======
     01 (. .. 01 02 03) : TCVQZ
     02 (. .. 02 02 03) : THQ
     03 (. .. 03 02 03) : TCVQ
02 18 :
=======
     01 (. .. 01 02 18) : TFILK2
     02 (2 04 02 02 18) : THCVA   ajustement convectif avec condensation
02 19 :
=======
     01 (2 04 01 02 19) : TRAY1   F*Sigma*(T1**4-T2**4)
     02 (2 04 02 02 19) : TRAD
     03 (3 04 03 01 19) : TIRAD   Infra red flux 

02 20 :
=======
     01 (2 04 01 02 20) : TFQO   Flux solaire extra atmospherique

********
** 03 **
********

03 00 :
=======

     01 (. .. 01 03 00) : TRSP1
     02 (2 02 02 03 00) : TNeuro  Poids des liens de Réseaux
     03 (2 10 03 03 00) : TCopy   recopie d'etats de SV scalaires dans un vecteur (TES)
     04 (2 10 04 03 00) : TFolo   force une dyn de croissance (import, export...) // DF
     05 (2 10 05 03 00) : TRate   Taux de marge

     90 (. .. 90 03 00) : TWARZ

03 04 :
=======
     01 (. .. 01 03 04) : TCDS
03 06 :
=======
     01 (. .. 01 03 06) : TCVR
     02 (. .. 02 03 06) : THR
03 12 :
=======
     01 (. .. 01 03 12) : TLI1
     02 (. .. 02 03 12) : TSTRNG
     03 (. .. 03 03 12) : TLIGA1
03 13 :
=======
     01 (. .. 01 03 13) : TPRS
     02 (. .. 02 03 13) : TPRESS
     03 (. .. 03 03 13) : TPRES0
     04 (2 01 04 03 13) : TPREST Pressure for ice cavitative rheology (Staggered grid)
03 16 :
=======
     01 (2 01 01 03 16) : TSTRIC
03 18 :
=======
     01 (. .. 01 03 18) : TFILK3
03 28 :
=======
     01 (2 01 01 03 28) : TDVIC1 (Grad V on a cell for Ice)
     01 (2 01 02 03 28) : TDVIC2 ( dot(Grad V,n) at interface for Ice)

03 41 :
=======
     01 (2 10 01 03 41) : TPPUB  Prix publics (TES)

03 42 :
=======
     01 (2 10 01 03 42) : TBASK  Panier des ménages (TES)
     02 (2 10 02 03 42) : TCI    Consommation intermédiaire
     03 (2 10 03 03 42) : TCF    Consommation finale
     04 (2 10 04 03 42) : TBUDG  Budget disponible de ménages
     05 (2 10 05 03 42) : TMSAL  Masse salariale
     06 (2 10 06 03 42) : TAV    Valeur ajoutée
     07 (2 10 07 03 42) : TDF    Demande finale des menages

********
** 04 **
********

04 09 :
=======
     01 (. .. 01 04 09) : TCNTL

04 33 :
=======
     01 (2 02 01 04 33) : TMLOYA MellorYamada
     02 (2 02 02 04 33) : TKSURF Surface MloYa

********
** 06 **
********

06 01 :
=======
     01 (201 01 06 01) : TGROW (phytoplancton growth, with NH4/NO3 distinction)
     02
     03
     04
     05
     06 (401 06 06 01) : TRESP (phytoplancton respiration, with NH4/NO3 distinction)
     07 (401 07 06 01) : TREGEN
     08 (201 08 06 01) : TGROW2 (phytoplancton growth, without NH4/NO3 distinction)
     09 (201 09 06 01) : TRESP2 (phytoplancton respiration, without NH4/NO3 distinction)
     10 (401 10 06 01) : TMICH

********
** 07 **
********

07 27 :
=======
     01 (201 01 07 27) : TACCOR Accelaration de Coriolis 2D
     02 (201 02 07 27) : TCORst Accelaration de Coriolis 2D, grille decallee

********
** 08 **
********

08 19 :
=======
     01 (202 01 08 19) : TRADI Bilan net IR 2D (Richard Fournier & Alain Lahellec) 

********
** 93 **
********
93 00 :
=======
     01 (2 02 01 93 00) : TCell Valeur Moyenne d'états connectés
     02 (2 02 02 93 00) : TDcplg Moyenne de transferts connectés(Découplant)

********
** 99 **
********
99 00 :
=======
     01 (2 02 01 99 00) : TKneur KTransfer associé à CNeuro
     02 (2 02 02 99 00) : TMacro associé à TCell

99 13 :
=======
     01 (. .. 01 99 13) : TMFNUL  Tonio(X versions)
99 32 :
=======




<-----/|\------>  ./Help/Users/Proc/Proc_TGR/Consult_TVSV
Subject: Consultation TGR
To: ahr, alain, gitel, jyg, picard, robert, marieln,
        jlb@leseth1.ups-tlse.fr (Jean_louis BONIN),
        jlj@leseth1.ups-tlse.fr (Jean_louis JOLY),
        meh@leseth1.ups-tlse.fr (Mouna EL HAFI),
        rfo@leseth1.ups-tlse.fr (Richard FOURNIER),
        stb@leseth1.ups-tlse.fr (Stephane BLANCO),
        of@leseth1.ups-tlse.fr (Olivier FUDYM),
        vip@leseth1.ups-tlse.fr (Vincent PLATEL),
        epo@leseth1.ups-tlse.fr (Eric POUZET),
        mri@leseth1.ups-tlse.fr (Monique RIGAL)
Date: Mon, 22 Aug 1994 16:27:27 +0200 (PAR)
X-Mailer: ELM [version 2.4 PL22]
Content-Type: text
Content-Length: 1655      
Status: RO

     QUESTIONS POUR PROXIMA
     ======================

   Cette petite consultation est destinee a rendre concret un
probleme concernant la TGR :
Parmi vos processeurs (correctement ecrits ou non) existe t il ?

   dans vos ABt_TV  : des termes non nuls en dehors des composantes du
                      SV associe.

   dans vos Ct_SV   : des termes non nuls en dehors des composantes du
                      TV associe.

   dans vos D_TV(LTV2)    : des termes non nuls en dehors des composantes du
                      TV associe.

   Voyez-vous une objection theorique a ce que ce soit rendu impossible en ZBM ?

(Les hurlements ne seront pas comptabilises).

       *****************************************
       Reponses negatives ou positives esperees.
       *****************************************
JLD
===
   Dans CHair : la A est non diag et donc la reponse est oui.
 ::> la question du questionnaire est donc mal posee.
Il faut raisonner dans le cadre de B_TV seulement.
   Pour les T_Probes, le fait de definir dim(TV) nul dit bien
qu il s'agit d un plug out.
<-----/|\------>  ./Help/Users/Proc/Proc_et_Derivateur
*********************************************************************************
*********************************************************************************
********** Un nouveau style de programmation ************************************
*********** incluant l'usage du Derivateur Formel *******************************
*********************************************************************************
Princpe : Le S_Entry effectue les boucles standards pour reconnaitre
l'environnement du Transfer. Il suffit de decrire cet environnement
en conservant les LCX, d'ou on recupere les TV/SV conectees et LCL.
Cette description est alors suffisante pour identifier les elements
du TEF a instancier dans le T_Entry. On n'a donc plus de skip thru
a faire, mais au contraire, on peut traiter dans un ordre choisi chaque
connection en sequence.

Cette ecriture peut conduit a exiger l'existence d'un certain environnement
attendu, au contraire du parcourt des skip thru. On tiend compte de l'absence
toleree de connexions en ajoutant des tests d'existence de la connexion :
  IF LCX.gt.0
  < ltv = ...
    . . .
  >

Remarquer l'usage de la fonction implicite F_Delta pour la derivation
par rapport a des variables fortran indicees. Elle est utilisee pour
ecrire :
 f_D(set_function)(/X(i)) = f_D(set_function)(/X(*)) * F_Delta(*,i);
X(*) apparaissnat dans la definition de la set_function sous la forme
X(j), X(3) ou de n'importe quelle forme d'argument prenant une valeur
determinee a l'execution de cette instruction.


+DECK,tbudg.
*CMZ :          25/07/2000  17.19.45  by  CIRED & LMD
*CMZ :  1.00/00 09/06/2000  19.20.24  by  CIRED & LMD
*-- Author :    CIRED & LMD   18/02/2000
        SUBROUTINE TBUDG(LTR);
&A;
! ***************************************************************
! *                                                             *
! * TBUDG                                                       *
! *                                                             *
! * Modele donnant le budget des menages disponibles :q,h,t,e   *
! *                                                             *
! * written by  : V.J., Al1, JYG                                *
! * modified by :                                               *
! ***************************************************************
&A0;
!OOO!   This line beginning with special pattern for 'mod' kumacs facility
!----------------------------------------------------------------------------
*TIT: Budget des menages e,h,t,q;
*any:--------------------------------------------Bibliography and References.;
*Ref: cahiers CIRED et VAGJYL;
*any:------------------------------------------------------Model Equation(s).;
*Equ:  Rev_tot = Sum ( WL_i)  + EBE                     ;
*Equ:   Budg_e = Rev_tot                                ;
*Equ:   Budg_h = Budg_e - DF_e                          ;
*Equ:   Budg_t = Budg_h - DF_h                          ;
*Equ:   Budg_q = Budg_t - DF_t                          ;
*any:-----------------------------------------------------------Explanations.;
*Exp:  Demandes hierarchisees e,h,t,q ;
*any:========================================================================;
*any:------------------- (Fi or Eta) variable components description [Units].;
!!! *Var etant utilise dans Z_Mx help de Vizu, il est conseille de respecter
!!! une ligne par composante (50 caracteres max)
*Var: B_1 = Budget pour la branche q;
*Var: B_2 = Budget pour la branche h;
*Var: B_3 = Budget pour la branche t;
*Var: B_4 = Budget pour la branche e;
*any:========================================================================;
*Str:        (DFq   *-)                                 ;
*Str:         DFh   *-               BUDG               ;
*Str:         DFt   *-        P                         ;
*Str:         DFe   *-  ---   ]---  [q,h,t,e]           ;
*Str:                            /                      ;
*Str:                   TMSAL~~~~~~~~~~~~~~             ;
*Str:                      /  |   \  \  \   \           ;
*Str:                   WLq  WLh WLt WLe WLc WLp        ;
*any:--------------------------------------------------------------User Part.;
! Argument needed in create ... type= ... [Arg1 2 3] Zinit instruction.
*Typ: Nbre de Secteurs;
! Parameters in Object Description Bank to be initialised in Zinit;
*Zin: none ;
! Summary of particular usage requirements.
*Usa:;
*any:------------------------------------------------------------------------;
! Summary of modifications, bugs or restrictions, developments to be done.
*Log:;
!QQQ!  This ending line beginning with special pattern for kumacs handling
&F
+CDE,Q,ZPERMQ.
+CDE,Z.
      EQUIVALENCE (LO_D_TV,LZZ9)
+CDE,OPRINT.
+CDE,OTR,OTPLUG,OCPLUG,OCX,OCL,OIC.
&M
+CDE,Derive_Mac.
+SEQ,OPACC.
+SEQ,OSUTR,OSUTD,OSUTV,OSUSV,OSUFI,OSUMG,OSUCT,OSUCX,OSUET,OSUCL.
+SEQ,OSUCD,OSUGA,OSUAB,OSUIC,OSUDM.
LOCAL_VALID_CHAINS: [~TR~TV~CX(.)~SV~ET~],[~TR~TD~],[~CX~SV~CL~CD~],
                    [~CX~IC~CT~],[~TR~FI~],[~TR~MG~],[~CL~ET~],
                    [~CL~SV~CX~TV~TR~],
END_CHAINS;
!
! ***************************************************************************
! *                        TRANSFER PROC MODEL .                            *
! ***************************************************************************
!
   Character*4 xbrch, xnm;
!
!  ===  parameters ===
implicit access to bank TD(LTD);
declare class TD;
local_var
    brch : character_4 in class TD;
local_var
    N_prod ,
    N_DF   : integer in class TD;
local_var
    EBE  "Excedent Brut d'Exploitation" : real in class TD;
link_var
    Fi_DF([N_DF]),  "sur les Fi_TV des DF"
    Cx_DF([N_DF]),   "sur les Cx des DF"
    Cx2_DF([N_DF]),
    Fi_MSal([N_Prod]),  "sur les Fi_TV des MSal"
    Cx_MSal([N_Prod]),   "sur les Cx des MSal"
    Cx2_MSal([N_Prod]),
 : real in class TD;
end declare class TD;
! fonction implicite pour le derivateur
F_delta(ii,jj)=1.-min(abs(ii-jj),1);
;
! Derivateur formel
+CDE,DERIVE_MAC.
;
! ==== Simulation Entry Point
! ==============================================================
&A;
from TR(LTR)
< get TD(LTD);  "Enable access to TD bank"
  if Zprint  < Print_TR_ID(LTR) >;   "impression du Transfert Id"
  grasp array FI,OMEGA (LTR);  "Enable access to FI and Omega vectors"

! Declaration des fonctions
  f_set Budg_4 = Fi_MSal(1) + Fi_MSal(2) + Fi_MSal(3) + Fi_MSal(4)
                 + Fi_MSal(5) + Fi_MSal(6) + EBE;
  f_set Budg_2 = Budg_4 - Fi_DF(4);
  f_set Budg_3 = Budg_2 - Fi_DF(2);
  f_set Budg_1 = Budg_3 - Fi_DF(3);
!
! == Loop on all connexions
  NDF=N_DF; NProd=N_Prod;
  Do jfi=1,NDF
  < Lcx  = @(LTD.TD).Cx_DF(jfi);   Lcl = @Lcx@Cx@Sv@Cl@;
    Lcx2 = @(LTD.TD).Cx2_DF(jfi);
    If LCx2.gt.0
    < Ltv2 = @Lcx2@Cx@Tv@;
      Grasp array D_TV(Ltv2,Ltr) for (Lcx2,Lcl,Lcx);
      if jfi.eq.2
      < D_TV(1,3) = - f_D(Budg_3)(/Fi_DF(2));
        D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(2));
      >elseif jfi.eq.3
      < D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(3));
      >elseif jfi.eq.4
      < D_TV(1,2) = - f_D(Budg_2)(/Fi_DF(4));
        D_TV(1,3) = - f_D(Budg_3)(/Fi_DF(4));
        D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(4));
      >
      Z_pr/DF_jfi/: jfi,(D_TV(1,i),i=1,NDF);
    >else
    < Z_pr/ no DFq dependance/:jfi;
    >
  >;
! TMSal edge
  Do jfi=1,NProd
  < Lcx  = @(LTD.TD).Cx_MSal(jfi);   Lcl = @Lcx@Cx@Sv@Cl@;
    Lcx2 = @(LTD.TD).Cx2_MSal(jfi);  Ltv2 = @Lcx2@Cx@Tv@;
    Grasp array D_TV(Ltv2,Ltr) for (Lcx2,Lcl,Lcx);
    <i=1,3;  D_TV(1,i) = -1.; >
  >
! == End of loop on all connexions
;
! Fill FI and Omega a partir des fonctions definies
  Fi(4) = Budg_4;
  Fi(2) = Budg_2;
  Fi(3) = Budg_3;
  Fi(1) = Budg_1;
;
!  omega(i) = 0.
  if Zprint < Z2_Pr : (FI(i) ,i= 1,NDF); >
RETURN;
!======================================================
!   Entry for transfer D_Matrix determination
!======================================================
ENTRY DBUDG(LTR);
;
RETURN;
!======================================================
!   Entry for transfer dependant parameters computation
!======================================================
ENTRY FBUDG(LTR);
;
RETURN;
!
! ==============================================================
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
Zinit_Entry BUDG (
!===============
    Types(2)    =  2 10 04 03 42,
    Nb_Tr_Var   = Jztau,
    Nb_Extr     = 3,
    Nb_Fluxes   = 0 )
!
  Set .N_DF for TD = jztau;
  Set .N_prod for TD = kztau(1);
  Lift LTD of class TD under (2,0);
  @LTR@TR@TD@ = LTD;  "Link TDesc"
  brch = 'cons';    "ce transfert concerne les produits"
                    "consommes par les menages."
;
   set  D_Mx flag;
!
RETURN;
;
! =======================================================
! ==== Initialization of structure parameters Entry Point,
!        called after all tree-connections done
! =======================================================
ENTRY SBUDG(LTR);
  Print_TR_ID(LTR) ;     GET TD(LTD);
  grasp array FI,OMEGA (LTR);
  call PrTrCx(LTR);  "Print transfert connexions"
  NDF = N_DF; NProd = N_Prod;
  k_DF=0; " Nb of Cx on DF" k_Lab = 0; "Nb of Cx on MSal"
  skip thru TV(LTV)
  < skip thru CX(LCX) (J=1,*)/.SV(LSV)/.CL(LCL)
    <
      NatProc = (LCL).Types(2); NatVar = mod(NatProc, 100 00 00);
      if NatVar .eq.  05 01 00          "LGSTC"
      < k_DF = k_DF+1; if (k_DF.gt.NDF) to next LCX;
! look for TDF
        skip thru SV(LSV2.eq.DF-*)/CX(LCX2)/.TV(LTV2)/.TR(LTR2)
        < NatTr2 = (LTR2).Types(2); NatVar2 = mod(NatTr2, 100 00 00);
          if NatVar2 .eq. 07 03 42        "TDF"
          < GRASP ARRAY Fi_TV (LTV2);
            link Fi_DF(k_DF) to Fi_TV(1);
            @(LTD.TD).Cx_DF(k_DF) = LCX;
            @(LTD.TD).Cx2_DF(k_DF) = LCX2;
          >
        >"end TDF"
      >elseif  NatVar .eq.  02 01 42          "DmFq"
      < k_DF = k_DF+1; if (k_DF.gt.NDF) to next LCX;
        Grasp Array Eta_SV(LSV);
        link Fi_DF(k_DF) to Eta_SV(1);
        @(LTD.TD).Cx_DF(k_DF) = LCX;
      >elseif NatVar .eq.  04 01 00          "CGRWTH"
      < k_Lab = k_Lab+1; if (k_Lab.gt.NProd) to next LCX;
! look for TMSal
        skip thru SV(LSV2)/CX(LCX2)/.TV(LTV2)/.TR(LTR2)
        < NatTr2 = (LTR2).Types(2); NatVar2 = mod(NatTr2, 100 00 00);
          if NatVar2 .eq. 05 03 42        "TMSal"
          <
            GRASP ARRAY Fi_TV (LTV2);
            link Fi_MSal(k_Lab) to Fi_TV(1);
            @(LTD.TD).Cx_MSal(k_Lab) = LCX;
            @(LTD.TD).Cx2_MSal(k_Lab) = LCX2;
          >
        >"end TMSal"
      >"end CGRWTH"
    >
  >;"end TV"
!
!--------------------------
! Check connections
!--------------------------
  if k_DF.lt.NDF .or. k_Lab.lt.NProd
  < Z_pad/***error TBUDG/: k_DF,k_Lab;
    Z_pr/***error TBUDG/: k_DF,NDF,k_Lab,NProd;
  >
 IF JBIT( (LTR).Status_Wd,IOFROZ ) .EQ.0
 < Z_Pr/zinit C.I./: (FI(i) ,i=1,NDF);
   RETURN;
 >;
!==============================================
!   FI Initialisation (cf set functions)
!==============================================
  Fi(4) = Budg_4;
  Fi(2) = Budg_2;
  Fi(3) = Budg_3;
  Fi(1) = Budg_1;
;
!  omega(i) = 0.
  if Zprint
  < Z_pr: (Fi_DF(i),i=1,NDF);
    Z_pr: (Fi_MSal(i),i=1,NProd),EBE;
    Z2_Pr : (FI(i) ,i= 1,NDF);
  >
!
;
RETURN;
>;
Parameter_Entry;
&B;
Vizu_Entry<;     "This Mortran block should have no spaces in if &B used"
*Vizu_Par: Auto recup. of PW symbols;
!OQO!
>;
&B0;
return;
END;
&A0;
<-----/|\------>  ./Help/Users/Proc/Proc_et_Derivateur.bak
*********************************************************************************
*********************************************************************************
********** Un nouveau style de programmation ************************************
*********** incluant l'usage du Derivateur Formel *******************************
*********************************************************************************

Remarquer l'usage de la fonction implicite F_Delta pour la derivation
par rapport a des variables fortran indicees.


+DECK,tbudg.
*CMZ :          25/07/2000  17.19.45  by  CIRED & LMD
*CMZ :  1.00/00 09/06/2000  19.20.24  by  CIRED & LMD
*-- Author :    CIRED & LMD   18/02/2000
        SUBROUTINE TBUDG(LTR);
&A;
! ***************************************************************
! *                                                             *
! * TBUDG                                                       *
! *                                                             *
! * Modele donnant le budget des menages disponibles :q,h,t,e   *
! *                                                             *
! * written by  : V.J., Al1, JYG                                *
! * modified by :                                               *
! ***************************************************************
&A0;
!OOO!   This line beginning with special pattern for 'mod' kumacs facility
!----------------------------------------------------------------------------
*TIT: Budget des menages e,h,t,q;
*any:--------------------------------------------Bibliography and References.;
*Ref: cahiers CIRED et VAGJYL;
*any:------------------------------------------------------Model Equation(s).;
*Equ:  Rev_tot = Sum ( WL_i)  + EBE                     ;
*Equ:   Budg_e = Rev_tot                                ;
*Equ:   Budg_h = Budg_e - DF_e                          ;
*Equ:   Budg_t = Budg_h - DF_h                          ;
*Equ:   Budg_q = Budg_t - DF_t                          ;
*any:-----------------------------------------------------------Explanations.;
*Exp:  Demandes hierarchisees e,h,t,q ;
*any:========================================================================;
*any:------------------- (Fi or Eta) variable components description [Units].;
!!! *Var etant utilise dans Z_Mx help de Vizu, il est conseille de respecter
!!! une ligne par composante (50 caracteres max)
*Var: B_1 = Budget pour la branche q;
*Var: B_2 = Budget pour la branche h;
*Var: B_3 = Budget pour la branche t;
*Var: B_4 = Budget pour la branche e;
*any:========================================================================;
*Str:        (DFq   *-)                                 ;
*Str:         DFh   *-               BUDG               ;
*Str:         DFt   *-        P                         ;
*Str:         DFe   *-  ---   ]---  [q,h,t,e]           ;
*Str:                            /                      ;
*Str:                   TMSAL~~~~~~~~~~~~~~             ;
*Str:                      /  |   \  \  \   \           ;
*Str:                   WLq  WLh WLt WLe WLc WLp        ;
*any:--------------------------------------------------------------User Part.;
! Argument needed in create ... type= ... [Arg1 2 3] Zinit instruction.
*Typ: Nbre de Secteurs;
! Parameters in Object Description Bank to be initialised in Zinit;
*Zin: none ;
! Summary of particular usage requirements.
*Usa:;
*any:------------------------------------------------------------------------;
! Summary of modifications, bugs or restrictions, developments to be done.
*Log:;
!QQQ!  This ending line beginning with special pattern for kumacs handling
&F
+CDE,Q,ZPERMQ.
+CDE,Z.
      EQUIVALENCE (LO_D_TV,LZZ9)
+CDE,OPRINT.
+CDE,OTR,OTPLUG,OCPLUG,OCX,OCL,OIC.
&M
+CDE,Derive_Mac.
+SEQ,OPACC.
+SEQ,OSUTR,OSUTD,OSUTV,OSUSV,OSUFI,OSUMG,OSUCT,OSUCX,OSUET,OSUCL.
+SEQ,OSUCD,OSUGA,OSUAB,OSUIC,OSUDM.
LOCAL_VALID_CHAINS: [~TR~TV~CX(.)~SV~ET~],[~TR~TD~],[~CX~SV~CL~CD~],
                    [~CX~IC~CT~],[~TR~FI~],[~TR~MG~],[~CL~ET~],
                    [~CL~SV~CX~TV~TR~],
END_CHAINS;
!                 Macros
&'Skip through'='Skip thru';
&'Read through'='Read thru';
&';Link_array'='Var_linked';
!
! ***************************************************************************
! *                        TRANSFER PROC MODEL .                            *
! ***************************************************************************
!
   Character*4 xbrch, xnm;
!
!  ===  parameters ===
implicit access to bank TD(LTD);
declare class TD;
local_var
    brch : character_4 in class TD;
local_var
    N_prod ,
    N_DF   : integer in class TD;
local_var
    EBE  "Excedent Brut d'Exploitation" : real in class TD;
link_var
    Fi_DF([N_DF]),  "sur les Fi_TV des DF"
    Cx_DF([N_DF]),   "sur les Cx des DF"
    Cx2_DF([N_DF]),
    Fi_MSal([N_Prod]),  "sur les Fi_TV des MSal"
    Cx_MSal([N_Prod]),   "sur les Cx des MSal"
    Cx2_MSal([N_Prod]),
 : real in class TD;
end declare class TD;
! fonction implicite pour le derivateur
F_delta(ii,jj)=1.-min(abs(ii-jj),1);
;
! Derivateur formel
+CDE,DERIVE_MAC.
;
! ==== Simulation Entry Point
! ==============================================================
&A;
from TR(LTR)
< get TD(LTD);  "Enable access to TD bank"
  if Zprint  < Print_TR_ID(LTR) >;   "impression du Transfert Id"
  grasp array FI,OMEGA (LTR);  "Enable access to FI and Omega vectors"
  f_set Budg_4 = Fi_MSal(1) + Fi_MSal(2) + Fi_MSal(3) + Fi_MSal(4)
                 + Fi_MSal(5) + Fi_MSal(6) + EBE;
  f_set Budg_2 = Budg_4 - Fi_DF(4);
  f_set Budg_3 = Budg_2 - Fi_DF(2);
  f_set Budg_1 = Budg_3 - Fi_DF(3);
!
! == Loop on all connexions
  NDF=N_DF; NProd=N_Prod;
  Do jfi=1,NDF
  < Lcx  = @(LTD.TD).Cx_DF(jfi);   Lcl = @Lcx@Cx@Sv@Cl@;
    Lcx2 = @(LTD.TD).Cx2_DF(jfi);
    If LCx2.gt.0
    < Ltv2 = @Lcx2@Cx@Tv@;
      Grasp array D_TV(Ltv2,Ltr) for (Lcx2,Lcl,Lcx);
      if jfi.eq.2
      < D_TV(1,3) = - f_D(Budg_3)(/Fi_DF(2));
        D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(2));
      >elseif jfi.eq.3
      < D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(3));
      >elseif jfi.eq.4
      < D_TV(1,2) = - f_D(Budg_2)(/Fi_DF(4));
        D_TV(1,3) = - f_D(Budg_3)(/Fi_DF(4));
        D_TV(1,1) = - f_D(Budg_1)(/Fi_DF(4));
      >
      Z_pr/DF_jfi/: jfi,(D_TV(1,i),i=1,NDF);
    >else
    < Z_pr/ no DFq dependance/:jfi;
    >
  >;
! TMSal edge
  Do jfi=1,NProd
  < Lcx  = @(LTD.TD).Cx_MSal(jfi);   Lcl = @Lcx@Cx@Sv@Cl@;
    Lcx2 = @(LTD.TD).Cx2_MSal(jfi);  Ltv2 = @Lcx2@Cx@Tv@;
    Grasp array D_TV(Ltv2,Ltr) for (Lcx2,Lcl,Lcx);
    <i=1,3;  D_TV(1,i) = -1.; >
  >
! == End of loop on all connexions
;
! Fill FI and Omega
  Fi(4) = Budg_4;
  Fi(2) = Budg_2;
  Fi(3) = Budg_3;
  Fi(1) = Budg_1;
;
!  omega(i) = 0.
  if Zprint < Z2_Pr : (FI(i) ,i= 1,NDF); >
RETURN;
!======================================================
!   Entry for transfer D_Matrix determination
!======================================================
ENTRY DBUDG(LTR);
;
RETURN;
!======================================================
!   Entry for transfer dependant parameters computation
!======================================================
ENTRY FBUDG(LTR);
;
RETURN;
!
! ==============================================================
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
Zinit_Entry BUDG (
!===============
    Types(2)    =  2 10 04 03 42,
    Nb_Tr_Var   = Jztau,
    Nb_Extr     = 3,
    Nb_Fluxes   = 0 )
!
  Set .N_DF for TD = jztau;
  Set .N_prod for TD = kztau(1);
  Lift LTD of class TD under (2,0);
  @LTR@TR@TD@ = LTD;  "Link TDesc"
  brch = 'cons';    "ce transfert concerne les produits"
                    "consommes par les menages."
;
! Si on a des paramateres en sortie graphique, decommenté la ligne suivante
!!  Lift LPW of class PW under (LTD,OTDPW);
   set  D_Mx flag;
!
RETURN;
;
! =======================================================
! ==== Initialization of structure parameters Entry Point,
!        called after all tree-connections done
! =======================================================
ENTRY SBUDG(LTR);
  Print_TR_ID(LTR) ;     GET TD(LTD);
  grasp array FI,OMEGA (LTR);
  call PrTrCx(LTR);  "Print transfert connexions"
  NDF = N_DF; NProd = N_Prod;
  k_DF=0; " Nb of Cx on DF" k_Lab = 0; "Nb of Cx on MSal"
  skip thru TV(LTV)
  < skip thru CX(LCX) (J=1,*)/.SV(LSV)/.CL(LCL)
    <
      NatProc = (LCL).Types(2); NatVar = mod(NatProc, 100 00 00);
      if NatVar .eq.  05 01 00          "LGSTC"
      < k_DF = k_DF+1; if (k_DF.gt.NDF) to next LCX;
! look for TDF
        skip thru SV(LSV2.eq.DF-*)/CX(LCX2)/.TV(LTV2)/.TR(LTR2)
        < NatTr2 = (LTR2).Types(2); NatVar2 = mod(NatTr2, 100 00 00);
          if NatVar2 .eq. 07 03 42        "TDF"
          < GRASP ARRAY Fi_TV (LTV2);
            link Fi_DF(k_DF) to Fi_TV(1);
            @(LTD.TD).Cx_DF(k_DF) = LCX;
            @(LTD.TD).Cx2_DF(k_DF) = LCX2;
          >
        >"end TDF"
      >elseif  NatVar .eq.  02 01 42          "DmFq"
      < k_DF = k_DF+1; if (k_DF.gt.NDF) to next LCX;
        Grasp Array Eta_SV(LSV);
        link Fi_DF(k_DF) to Eta_SV(1);
        @(LTD.TD).Cx_DF(k_DF) = LCX;
      >elseif NatVar .eq.  04 01 00          "CGRWTH"
      < k_Lab = k_Lab+1; if (k_Lab.gt.NProd) to next LCX;
! look for TMSal
        skip thru SV(LSV2)/CX(LCX2)/.TV(LTV2)/.TR(LTR2)
        < NatTr2 = (LTR2).Types(2); NatVar2 = mod(NatTr2, 100 00 00);
          if NatVar2 .eq. 05 03 42        "TMSal"
          <
            GRASP ARRAY Fi_TV (LTV2);
            link Fi_MSal(k_Lab) to Fi_TV(1);
            @(LTD.TD).Cx_MSal(k_Lab) = LCX;
            @(LTD.TD).Cx2_MSal(k_Lab) = LCX2;
          >
        >"end TMSal"
      >"end CGRWTH"
    >
  >;"end TV"
!
!--------------------------
! Check connections
!--------------------------
  if k_DF.lt.NDF .or. k_Lab.lt.NProd
  < Z_pad/***error TBUDG/: k_DF,k_Lab;
    Z_pr/***error TBUDG/: k_DF,NDF,k_Lab,NProd;
  >
 IF JBIT( (LTR).Status_Wd,IOFROZ ) .EQ.0
 < Z_Pr/zinit C.I./: (FI(i) ,i=1,NDF);
   RETURN;
 >;
!==============================================
!   FI Initialisation
!==============================================
  Fi(4) = Budg_4;
  Fi(2) = Budg_2;
  Fi(3) = Budg_3;
  Fi(1) = Budg_1;
;
!  omega(i) = 0.
  if Zprint
  < Z_pr: (Fi_DF(i),i=1,NDF);
    Z_pr: (Fi_MSal(i),i=1,NProd),EBE;
    Z2_Pr : (FI(i) ,i= 1,NDF);
  >
!
;
RETURN;
>;
Parameter_Entry;
&B;
Vizu_Entry<;     "This Mortran block should have no spaces in if &B used"
*Vizu_Par: Auto recup. of PW symbols;
!OQO!
>;
&B0;
return;
END;
&A0;
<-----/|\------>  ./Help/Users/Proc/Tr_Grasp
**************************************************************************
***********  INTRINSIC GRASP  ********************************************
**************************************************************************
!
GRASP ARRAY Fi,Omega(LTR)
;
GRASP ARRAY FiZ(LTR)
;
GRASP ARRAY Delta_Fi(LTR) : Nécessite +CDE,OSUDL et OFM
;
**************************************************************************
***********  GRASP FROM EDGES  *******************************************
**************************************************************************
GRASP ARRAY Ct_SV(LSV,LTR)FOR(LCX)
;
GRASP ARRAY D_TV(LTV2,LTR)FOR(LCX2,LCL,LCX)
;
GRASP ARRAY FIZ_TV(LTV)
;
GRASP ARRAY OMEGA_TV(LTV)
;
GRASP ARRAY DFI_TV(LTV)
;
GRASP ARRAY FI_TV(LTV)
;
**************************************************************************
***********  OBSOLETE  ***************************************************
**************************************************************************
GRASP ARRAY FI,OMEGA USING(LTR)
;
GRASP ARRAY(LCX).Ct_SV USING(LSV,LTR)
;
GRASP ARRAY(LCX2,LCL,LCX).D_TV USING(LSV2,LTR)
;
GRASP ARRAY FI_TV USING(LTV)
!
GRASP ARRAY FIZ_TV USING(LTV)
!
COPY ARRAY FIZ IN FI(LTR)
!
COPY ARRAY FI IN FIZ(LTR)
!
<-----/|\------>  ./Help/Users/Proc/Tr_flag_bits
****************************************************************************
****************************************************************************
**************** Flagged Transfers *****************************************
****************************************************************************
****************************************************************************
  To be set in Y_Entry :
  ======================
  Macros              :      ...........           Equivalentes á :

Set D_Mx flag;                                    CALL SBIT1(IQ(LTR),IODMX);
ou : Set D_Matrix flag;  Called iteratively during D_Loop;

Set K_Tr flag;                                    CALL SBIT1(IQ(LTR),IOKTR);
                      Tr such that : 1) One Cx Cell only.   2)Zero diag.
                                     3) No other Tr depends on it.
  (*) =>                        cf exemple in $ZOOM/pro/exos/cpl3//proc/tknd

Set Pseudo1_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK2TR);
ou : Set K1_Tr flag;  Pseudo K_Tr : NO Null diag; May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);

Set Pseudo2_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK3TR);
ou : Set K2_Tr flag;                Null diag.    May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);
  (*) =>                        cf exemple in $ZOOM/dev/cond/pro_state & TCell

Set Cumulated_Tr flag;                            CALL SBIT1(IQ(LTR),IOCUML);
ou Set Cum_Tr flag;        Fiz will not receive Fi+dFi at end of step_advance.

Set Pseudo_Cell flag                              CALL SBIT1(IQ(LTR),IOPSCL);
ou Set Ps_Cl flag;    Needs Fi = Fiz + dFi that will be carried-out by Ker.
  (*) =>                        cf exemple in $ZOOM/dev/cond/pro_state & TCell
;

To be set not before S_Entries :
================================
JOBit flags . Futura.  Futura option to deal with Transfer_only component specifications;

FREEZING Tr components;
-----------------------
 Instead of freezing in Zinit (Create No-Tr), which has the consequence that Ker do not call
the associated processor TEntry, the user can set a flag IO2JO which indue Ker to process
each Tr component depending to its status, stored in Fi_Diag( Component #).
Then, DO NOT freeze from Zinit, in S_Entry z;

 Call SBIT1((LTR).Status_Wd,IO2JO);  tells Ker to look thru each component
 Call SBIT1( Fi_Diag(1)    ,JOFROZ); freeze first Tr component

Consequence : Ker will not modify Fi(1) or Fiz(1) at all; (The User may manage)
              IF a Resume from is asked for, Ker WILL NOT reset this component to OZDAT.TR value,
but will keep the one set from Zinit (Fill_Fi)
ATTENTION : IF a Resume from is asked for, then
 Call SBIT1((LTR).Status_Wd,IO2JO); has to be set within the Y_Entry                     !!!!!

OTHER JOBits flag :
-------------------
JOCUML, JOPSCL, : same meaning and consequences as the IOBit ones :
Cum_Tr  Pseudo_Cell

 JOKNUL, JONULL : for singular matrix treatment
================================================
 JOKNUL (=k ou k2 Tr) nulle diag ne pouvant devenir reguliere que par l'elimination
d'une cellule. La diag est mis a 1 dans la D_loop, puis a 0 pour step_advance.
 JONULL herite de iq(diag); il faut s'arranger pour que l'elimination se fasse dans le bon ordre.
Rq: un tr irregulier regularise par un autre tr s'ecrit donc SANS k flag, il suffit de
mettre les elements de la diag a zero dans le Y_entry (cf alain/planet/TVORTZ)
(cf ONCO, OTBL/OF2MXT et OCMX)
dans le S_entry :
apres Grasp array Fi,omega(LTR);
      Grasp array Fi_Diag(LTR);
      call sbit1(Fi_Diag(i),JOKNUL); pour les i_emes nuls
de meme pour les JOPSCL,JOCUML et JONULL; (suf que JONULL inutile car herite de iq(diag).
dans le Y_entry  :  Call SBIT1((LTR).Status_Wd,IO2JO);

Derniere mise a jour : Jeudi 5/02/2001 (Al1)
<-----/|\------>  ./Help/Users/Proc/Tr_flag_bits.bak
****************************************************************************
****************************************************************************
**************** Flagged Transfers *****************************************
****************************************************************************
****************************************************************************
  To be set in Y_Entry :
  ======================
  Macros              :      ...........           Equivalentes á :

Set D_Mx flag;                                    CALL SBIT1(IQ(LTR),IODMX);
ou : Set D_Matrix flag;  Called iteratively during D_Loop;

Set K_Tr flag;                                    CALL SBIT1(IQ(LTR),IOKTR);
                      Tr such that : 1) One Cx Cell only.   2)Zero diag.
                                     3) No other Tr depends on it.
  (*) =>                        cf exemple in /zoom/pro/exos/cpl3//proc/tknd

Set Pseudo1_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK2TR);
ou : Set K1_Tr flag;  Pseudo K_Tr : NO Null diag; May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);

Set Pseudo2_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK3TR);
ou : Set K2_Tr flag;                Null diag.    May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);
  (*) =>                        cf exemple in /zoom/dev/cond/pro_state & TCell

Set Cumulated_Tr flag;                            CALL SBIT1(IQ(LTR),IOCUML);
ou Set Cum_Tr flag;        Fiz will not receive Fi+dFi at end of step_advance.

Set Pseudo_Cell flag                              CALL SBIT1(IQ(LTR),IOPSCL);
ou Set Ps_Cl flag;    Needs Fi = Fiz + dFi that will be carried-out by Ker.
  (*) =>                        cf exemple in /zoom/dev/cond/pro_state & TCell
;

To be set not before S_Entries :
================================
JOBit flags . Futura.  Futura option to deal with Transfer_only component specifications;

FREEZING Tr components;
-----------------------
 Instead of freezing in Zinit (Create No-Tr), which has the consequence that Ker do not call
the associated processor TEntry, the user can set a flag IO2JO which indue Ker to process
each Tr component depending to its status, stored in Fi_Diag( Component #).
Then, DO NOT freeze from Zinit, in S_Entry z;

 Call SBIT1((LTR).Status_Wd,IO2JO);  tells Ker to look thru each component
 Call SBIT1( Fi_Diag(1)    ,JOFROZ); freeze first Tr component

Consequence : Ker will not modify Fi(1) or Fiz(1) at all; (The User may manage)
              IF a Resume from is asked for, Ker WILL NOT reset this component to OZDAT.TR value,
but will keep the one set from Zinit (Fill_Fi)
ATTENTION : IF a Resume from is asked for, then
 Call SBIT1((LTR).Status_Wd,IO2JO); has to be set within the Y_Entry                     !!!!!

OTHER JOBits flag :
-------------------
JOCUML, JOPSCL, : same meaning and consequences as the IOBit ones :
Cum_Tr  Pseudo_Cell

 JOKNUL, JONULL : for singular matrix treatment
================================================
 JOKNUL (=k ou k2 Tr) nulle diag ne pouvant devenir reguliere que par l'elimination
d'une cellule. La diag est mis a 1 dans la D_loop, puis a 0 pour step_advance.
 JONULL herite de iq(diag); il faut s'arranger pour que l'elimination se fasse dans le bon ordre.
Rq: un tr irregulier regularise par un autre tr s'ecrit donc SANS k flag, il suffit de
mettre les elements de la diag a zero dans le Y_entry (cf alain/planet/TVORTZ)
(cf ONCO, OTBL/OF2MXT et OCMX)
dans le S_entry :
apres Grasp array Fi,omega(LTR);
      Grasp array Fi_Diag(LTR);
      call sbit1(Fi_Diag(i),JOKNUL); pour les i_emes nuls
de meme pour les JOPSCL,JOCUML et JONULL; (suf que JONULL inutile car herite de iq(diag).
dans le Y_entry  :  Call SBIT1((LTR).Status_Wd,IO2JO);

Derniere mise a jour : Jeudi 5/02/2001 (Al1)
<-----/|\------>  ./Help/Users/Proc/Tr_flag_bits.bak1
****************************************************************************
****************************************************************************
**************** Flagged Transfers *****************************************
****************************************************************************
****************************************************************************
  To be set in Y_Entry :
  ======================
  Macros              :      ...........           Equivalentes á :

Set D_Mx flag;                                    CALL SBIT1(IQ(LTR),IODMX);
ou : Set D_Matrix flag;  Called iteratively during D_Loop;

Set K_Tr flag;                                    CALL SBIT1(IQ(LTR),IOKTR);
                      Tr such that : 1) One Cx Cell only.   2)Zero diag.
                                     3) No other Tr depends on it.
  (*) =>                        cf exemple in /zoom/pro/exos/cpl3//proc/tknd

Set Pseudo1_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK2TR);
ou : Set K1_Tr flag;  Pseudo K_Tr : NO Null diag; May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);

Set Pseudo2_K_Tr flag;                            CALL SBIT1(IQ(LTR),IOK3TR);
ou : Set K2_Tr flag;                Null diag.    May have D_Mx on other Tr.
                                                (but no foreign D_Mx on him);
  (*) =>                        cf exemple in /zoom/dev/cond/pro_state & TCell

Set Cumulated_Tr flag;                            CALL SBIT1(IQ(LTR),IOCUML);
ou Set Cum_Tr flag;        Fiz will not receive Fi+dFi at end of step_advance.

Set Pseudo_Cell flag                              CALL SBIT1(IQ(LTR),IOPSCL);
ou Set Ps_Cl flag;    Needs Fi = Fiz + dFi that will be carried-out by Ker.
  (*) =>                        cf exemple in /zoom/dev/cond/pro_state & TCell
;

To be set not before S_Entries :
================================
JOBit flags . Futura.  Futura option to deal with Transfer_only component specifications;

FREEZING Tr components;
-----------------------
 Instead of freezing in Zinit (Create No-Tr), which has the consequence that Ker do not call
the associated processor TEntry, the user can set a flag IO2JO which indue Ker to process
each Tr component depending to its status, stored in Fi_Diag( Component #).
Then, DO NOT freeze from Zinit, in S_Entry z;

 Call SBIT1((LTR).Status_Wd,IO2JO);  tells Ker to look thru each component
 Call SBIT1( Fi_Diag(1)    ,JOFROZ); freeze first Tr component

Consequence : Ker will not modify Fi(1) or Fiz(1) at all; (The User may manage)
              IF a Resume from is asked for, Ker WILL NOT reset this component to OZDAT.TR value,
but will keep the one set from Zinit (Fill_Fi)
ATTENTION : IF a Resume from is asked for, then
 Call SBIT1((LTR).Status_Wd,IO2JO); has to be set within the Y_Entry                     !!!!!

OTHER JOBits flag :
-------------------
JOCUML, JOPSCL, : same meaning and consequences as the IOBit ones :
Cum_Tr  Pseudo_Cell

 JOKNUL, JONULL : for singular matrix treatment
================================================
 JOKNUL (=k ou k2 Tr) nulle diag ne pouvant devenir reguliere que par l'elimination
d'une cellule. La diag est mis a 1 dans la D_loop, puis a 0 pour step_advance.
 JONULL herite de tr; il faut s'arranger pour que l'elimination se fasse dans le bon ordre.
(cf ONCO, OTBL/OF2MXT et OCMX)
dans le S_entry :
apres Grasp array Fi,omega(LTR);
      Grasp array Fi_Diag(LTR);
      call sbit1(Fi_Diag(i),JOKNUL); pour les i_emes nuls
de meme pour les JOPSCL,JOCUML et JONULL;
dans le Y_entry  :  Call SBIT1((LTR).Status_Wd,IO2JO);

Derniere mise a jour : Jeudi 6/07/2000 (Al1)
<-----/|\------>  ./Help/Users/Proc/Vizu_Entry
***************************************************************************
***************************************************************************
********  Generating Guidance info for Help of Objects in VIZU ************
***************************************************************************
***************************************************************************
  At very end of any processor you want to generate guidance from :
use the following mortran bloc :
Vizu_Entry<;
*XXX: ...; specific instructions efficient for guidance :
;;;;          Any number if abny of these to structure info
*Tit:;   Title
*Ref:;   References
*any:;   to draw separations between fields and Taylor your help Vizu widget.
*Equ:;   Equations             
*Var:;   Variable (State or TRansfer) description / component      IMPORTANT
                                      (Used also for matrix/Definition/Help)
*Exp:;   Explanation on abstract level
*Cxs:;   Connections, Edge_types, Plugs.
*Str:;   Structure  usaully ascii art to get structure of immediate environmt
*usa:;   Information concernant l'utilisation du processeur vis a vis des autres
*Log:;   Development info, bugs, personal think what.
*Typ:;   Type Argument (in Zinit Create [XXX ,] type = YYY [Arg1, Arg2, Arg3];
                                                            ****  ****  ****
*Zin:;   Zinit description bank values to be initialized in.
*Usa:;   Practical usability info memo.
[   PLEASE signal your own extra requisits to ZOOM society ].
;;;;;;;
*Vizu_Par: ; "this one (UNIQUE) to get PW symbols in Help (automatic)"

***************************************************************************
********  Exemple *********************************************************
***************************************************************************
   Just before "END;" of processor :
&B; "This to cancel Space compression by Mortran. =. please restore &B0"
Cette precedente directive Mortran est quasi indispensable, si l'on veut
pouvoir utiliser les caracteres <,>;
***************  IMPORTANT !
 Noter cependant que le simple quote : ' est proscrit (on peut utiliser l anti quote : `;
***************
Remarque : les " " restent des commentaires Mortran.
Vizu_Entry<;
*any: ************ Help BIDON Pour TEST;
*TIT:     Capacitance Processor   (Al1 Test macro option BFlag);
*TIT: CND1 mods as an offset equation to EtaBar (T_mean);
*any:--------------------------------------------------------------;
*Equ: Capa * dT/dt - Flux_Somme = 0;
*Var: Eta(1) is Temperature (submit to Zinit reference), or K_Temp biased;
*Var:        if associated to TCell macro State processor;
*Vizu_Par: Traitement automatique du Bank PW;
*any:--------------------------------------------------------------;
*Exp:    K_temp absolute temp for PAR. (T_mean linked on null);
*Exp:    if no Macro TCell State in the Fm.;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Cxs:    Cx to PsiPrime=TCdM and PsiBar as TDcplg;
*Cxs:  The first component of each Tplug is a Flux;
*any:--------------------------------------------------------------;
*Str:                 |           |                            ;
*Str:                 |   CL-N    |                            ;
*Str:     ----------- |-----------|-----------                 ;
*Str:                 |           |                            ;
*Str:       CL-E      |   CL-P    |   CL-W                     ;
*Str:     ------------|-----------|-----------                 ;
*Str:                 |   CL-S    |                            ;
*Str:                 |           |                            ;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Usa: The transfer sign convention is positive from first to second;
*Usa:  TPlug, if the transfer has 2 extremity;
*Usa: Transferts with more then 2 extremity must give a positive;
*Usa:   inwards flux;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Log:*CMZ :  MOds xxx       27/07/95  22.34.09  by  Alain LAHELLEC;
*Log:*BUG : Use of Tau determination is approximative if dTime.ne.2s;
>;return;
&B0;   " RESTORE Standard Space compression"
END;
***************************************************************************
********  Use the following pattern to easy implementation ****************
***************************************************************************
***************************************************************************
********* cf $ZOOM/user_data/zoomtproc.cmt ********************************
********* et $ZOOM/user_data/zoomcproc.cmt ********************************
***************************************************************************
;
[exemple  from Al1]
!OOO!**********************************************************************
*Tit:       ADVECTION/DIFFUSION TRANSFER   ;                             "*"
*Tit:     Transfert surfacique à 3 composantes minimum;                  "*"
!**************************************************************************
*any:---------------------------------------------------Model Equation(s).*;
*Equ:;                                                                   "*"
*any:--------------------------------------------------------Explanations.*;
*Exp:;                                                                   "*"
*any:=====================================================================*;
*Var:     FI(1)   = [RoV]perp à l`interface = Ro*gradPsi   |Ro.V | ;     "*"
*Var:   i=1,NbEtaSV:                                               ;     "*"
*Var:     FI(1+i) = [ETA_SV(1)]i                            | w   |;     "*"
*Var:     FI(2+i) = [-Gamma*GradETA_SV(1)]i            TR = |G.Dw |;     "*"
*any:=====================================================================*;
*Cxs: La première est calculée de GradPsi: Vperp                    ;    "*"
*Cxs:  et transporté les autres                                     ;    "*"
*Cxs: La première est supposée tourbillon sur planète si flat.ne.0. ;    "*"
*Cxs:      ( Non cumulated transfer );                                   "*"
*any:---------------------------------------------------------------------*;
*Str:                            X Psi2.                             ;   "*"
*Str:                            I      .                            ;   "*"
*Str:                            I       . même C-Plug               ;   "*"
*Str:                            I         .                         ;   "*"
*Str:                            I          .                        ;   "*"
*Str:          Cl-Sv... TV1>---  U -->TV2 ...... Cl                  ;   "*"
*Str:                .           I                                   ;   "*"
*Str:                  .         I                     Psi2 - Psi1   ;   "*"
*Str:                    .       I T_side          U = -----------   ;   "*"
*Str:          même C-Plug .     I                       T_side      ;   "*"
*Str:                        .   I                                   ;   "*"
*Str:                          . X Psi2                              ;   "*"
*any:---------------------------------------------------------------------*;
*Typ:    JZTAU = Nb_Eta = Nbre de grandeurs adv&dif;                     "*"
*Zin:;                                                                   "*"
*Usa:     D_Mx TRansfer;                                                 "*"
*any:---------------------------------------------------------------------*;
*Log:;                                                                   "*"
!QQQ!***********************************************************************


Remarque finale : cet en-tete est automatiquement genere sous CMZ
a la creation d'un DECK; cf $ZOOM/user_data/zoomcproc.cmt
                            $ZOOM/user_data/zoomtproc.cmt

***************************************************************************
********  Use the following pattern to easy implementation ****************
***************************************************************************
********* cf $ZOOM/user_data/zoomtproc.cmt ***cmz template for Tr proc*****
********* et $ZOOM/user_data/zoomcproc.cmt ***cmz template for Cl proc*****
***************************************************************************

SUGGESTIONS CRITIQUES (Dater signer SVP
=======================================

<-----/|\------>  ./Help/Users/Proc/Vizu_Entry.bak
***************************************************************************
***************************************************************************
********  Generating Guidance info for Help of Objects in VIZU ************
***************************************************************************
***************************************************************************
  At very end of any processor you want to generate guidance from :
use the following mortran bloc :
Vizu_Entry<;
*XXX: ...; specific instructions efficient for guidance :
;;;;          Any number if abny of these to structure info
*Tit:;   Title
*Ref:;   References
*any:;   to draw separations between fields and Taylor your help Vizu widget.
*Equ:;   Equations             
*Var:;   Variable (State or TRansfer) description / component      IMPORTANT
                                      (Used also for matrix/Definition/Help)
*Exp:;   Explanation on abstract level
*Cxs:;   Connections, Edge_types, Plugs.
*Str:;   Structure  usaully ascii art to get structure of immediate environmt
*usa:;   Information concernant l'utilisation du processeur vis a vis des autres
*Log:;   Development info, bugs, personal think what.
*Typ:;   Type Argument (in Zinit Create [XXX ,] type = YYY [Arg1, Arg2, Arg3];
                                                            ****  ****  ****
*Zin:;   Zinit description bank values to be initialized in.
*Usa:;   Practical usability info memo.
[   PLEASE signal your own extra requisits to ZOOM society ].
;;;;;;;
*Vizu_Par: ; "this one (UNIQUE) to get PW symbols in Help (automatic)"

***************************************************************************
********  Exemple *********************************************************
***************************************************************************
   Just before "END;" of processor :
&B; "This to cancel Space compression by Mortran. =. please restore &B0"
Cette precedente directive Mortran est quasi indispensable, si l'on veut
pouvoir utiliser les caracteres <,>;
***************  IMPORTANT !
 Noter cependant que le simple quote : ' est proscrit (on peut utiliser l anti quote : `;
***************
Remarque : les " " restent des commentaires Mortran.
Vizu_Entry<;
*any: ************ Help BIDON Pour TEST;
*TIT:     Capacitance Processor   (Al1 Test macro option BFlag);
*TIT: CND1 mods as an offset equation to EtaBar (T_mean);
*any:--------------------------------------------------------------;
*Equ: Capa * dT/dt - Flux_Somme = 0;
*Var: Eta(1) is Temperature (submit to Zinit reference), or K_Temp biased;
*Var:        if associated to TCell macro State processor;
*Vizu_Par: Traitement automatique du Bank PW;
*any:--------------------------------------------------------------;
*Exp:    K_temp absolute temp for PAR. (T_mean linked on null);
*Exp:    if no Macro TCell State in the Fm.;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Cxs:    Cx to PsiPrime=TCdM and PsiBar as TDcplg;
*Cxs:  The first component of each Tplug is a Flux;
*any:--------------------------------------------------------------;
*Str:                 |           |                            ;
*Str:                 |   CL-N    |                            ;
*Str:     ----------- |-----------|-----------                 ;
*Str:                 |           |                            ;
*Str:       CL-E      |   CL-P    |   CL-W                     ;
*Str:     ------------|-----------|-----------                 ;
*Str:                 |   CL-S    |                            ;
*Str:                 |           |                            ;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Usa: The transfer sign convention is positive from first to second;
*Usa:  TPlug, if the transfer has 2 extremity;
*Usa: Transferts with more then 2 extremity must give a positive;
*Usa:   inwards flux;
*any:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
*Log:*CMZ :  MOds xxx       27/07/95  22.34.09  by  Alain LAHELLEC;
*Log:*BUG : Use of Tau determination is approximative if dTime.ne.2s;
>;return;
&B0;   " RESTORE Standard Space compression"
END;
***************************************************************************
********  Use the following pattern to easy implementation ****************
***************************************************************************
***************************************************************************
********* cf /zoom/user_data/zoomtproc.cmt ********************************
********* et /zoom/user_data/zoomcproc.cmt ********************************
***************************************************************************
;
[exemple  from Al1]
!OOO!**********************************************************************
*Tit:       ADVECTION/DIFFUSION TRANSFER   ;                             "*"
*Tit:     Transfert surfacique à 3 composantes minimum;                  "*"
!**************************************************************************
*any:---------------------------------------------------Model Equation(s).*;
*Equ:;                                                                   "*"
*any:--------------------------------------------------------Explanations.*;
*Exp:;                                                                   "*"
*any:=====================================================================*;
*Var:     FI(1)   = [RoV]perp à l`interface = Ro*gradPsi   |Ro.V | ;     "*"
*Var:   i=1,NbEtaSV:                                               ;     "*"
*Var:     FI(1+i) = [ETA_SV(1)]i                            | w   |;     "*"
*Var:     FI(2+i) = [-Gamma*GradETA_SV(1)]i            TR = |G.Dw |;     "*"
*any:=====================================================================*;
*Cxs: La première est calculée de GradPsi: Vperp                    ;    "*"
*Cxs:  et transporté les autres                                     ;    "*"
*Cxs: La première est supposée tourbillon sur planète si flat.ne.0. ;    "*"
*Cxs:      ( Non cumulated transfer );                                   "*"
*any:---------------------------------------------------------------------*;
*Str:                            X Psi2.                             ;   "*"
*Str:                            I      .                            ;   "*"
*Str:                            I       . même C-Plug               ;   "*"
*Str:                            I         .                         ;   "*"
*Str:                            I          .                        ;   "*"
*Str:          Cl-Sv... TV1>---  U -->TV2 ...... Cl                  ;   "*"
*Str:                .           I                                   ;   "*"
*Str:                  .         I                     Psi2 - Psi1   ;   "*"
*Str:                    .       I T_side          U = -----------   ;   "*"
*Str:          même C-Plug .     I                       T_side      ;   "*"
*Str:                        .   I                                   ;   "*"
*Str:                          . X Psi2                              ;   "*"
*any:---------------------------------------------------------------------*;
*Typ:    JZTAU = Nb_Eta = Nbre de grandeurs adv&dif;                     "*"
*Zin:;                                                                   "*"
*Usa:     D_Mx TRansfer;                                                 "*"
*any:---------------------------------------------------------------------*;
*Log:;                                                                   "*"
!QQQ!***********************************************************************


Remarque finale : cet en-tete est automatiquement genere sous CMZ
a la creation d'un DECK; cf /zoom/user_data/zoomcproc.cmt
                            /zoom/user_data/zoomtproc.cmt

***************************************************************************
********  Use the following pattern to easy implementation ****************
***************************************************************************
********* cf /zoom/user_data/zoomtproc.cmt ***cmz template for Tr proc*****
********* et /zoom/user_data/zoomcproc.cmt ***cmz template for Cl proc*****
***************************************************************************

SUGGESTIONS CRITIQUES (Dater signer SVP
=======================================

<-----/|\------>  ./Help/Users/Proc/Vizualisation_of_parameters
**************************************************************************
********** Sortie de Parametres pour VISU ********************************
************ (Al1 vendredi 23/04/1993) ***********************************
**************************************************************************

Le principe est de créer un Bank PW (pour Paw/Parameter)
qui est chaîné en -1 du Desc Bank (CD ou TD).
D'oû les opérations :

LOCAL_VALID_CHAINS: [~TR~TD~PW~],
                    ...    *****    
END_CHAINS;

 IMPLICIT ACCES TO BANK TD(LTD),PW(LPW);
                               ********
 declare class TD;
      ...
    END DECLARE CLASS TD;
"--------------------"
 declare class PW;              *
"--------------------"          *
" Paw_out Parameters   "        *
"--------------------"          *
VAR        Vis_Par(4)           *
      : REAL IN CLASS PW;       *
    END DECLARE CLASS PW;       *
" "
FROM TR(LTR)
< 
          ...


! Fills in Paw_par bk           *
 if zpaw                        *
 < GET PW(LPW);                 *
   Vis_Par(1) =  para1 ;        *
   Vis_Par(2) =  para2 ;        *
   Vis_Par(3) =  Cp_air;        *
   Vis_Par(4) =  RMRATE;        *
 >
;
         ...
Il reste la création du PW Bank:
================================      in :
!
! ==== Initialization Entry Point, called by Zinit
! ================================================
Zinit_Entry CIRC
( Types(2)            =050202,
  Nb_Tr_Var           =JZTAU,
  Nb_Extr             =JZTAU,
  Nb_Fluxes           =JZTAU
);
Set .N2_Zones for TD = JZTAU;
Lift LTD of class TD under (2,0);
"Link TDesc" @LTR@TR@TD@=LTD;
" Paw PAR Bk"
Lift LPW of class PW under (LTD,OTDPW);   <<<
=======================================( ou OCDPW pour Cellule)
RETURN;
C'est tout.
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dans visu, il suffit , pour l'objet (ou un map dont il est partie),
de cliquer/sélectionner PAR; on choisit la composante par node # (ou comp #);

On obtiend l' ensemble des mêmes sorties que pour les variables standard TEF.

                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<-----/|\------>  ./Help/Users/Proc/ZBM_dictionnary.html
***********************************************************************************************
***********************************************************************************************
*********  P D L 0 ** Liste des Instructions **************************************************
***********************************************************************************************
***********************************************************************************(Al1 96/03/29)

(En cours de developpement.  Liste des rubriques.)
En fait on a du ZBM ainsi que les instructions FEI
            (Frenquently Encouentered Instructions)
Ecrit pour Futura avec note des non implements.


Entry Points

Parcours pour scanning des connections.
Processeur de Transfer                               Processeur de Cellule
From TR(LTR)                                           From CL(LCL)                            
< Skip thru TV(LTV)                                    < Skip thru SV(LSV)                     
  < Read thru CX(LCX) (j0cx=1,*)                         < Skip thru CX(LCX)
    < Skip thru SV(LSV)                                    < Skip thru TV(LTV)                 
      < Get CL(LCL);                                         < Get CL(LCL);                    
        From CL(LCL) < Get CD(LCD); >;                         From TR(LTR) < Get TD(LTD); >;  
      >;"End LSV"                                            >;"End LTV"                       
    >;"End LCX"                                            >;"End LCX"                         
  >;"End LTV"                                            >;"End LSV"                           
>;"End From TR"                                        >;"End From CL"                         

Formes abbregees equivallentes
 Skip thru CX(LCX) (JOCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
          .TV(LTV2)/.TR(LTR2)
 < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
   <
   >"End TCdM"
 > "close Skip thru CX/../TR2"

 effectue les tests pour skiper les T_Probes ( (LTV).Nb_Tr_Var=0 ).

 CX(LCX2.ne.LCX) : skip en cas d'egalite (test uniquement sur banks CX).
     *** adresse de la boucle CX locale. (LCX supposee definie precedemment);

 Aucun test sur les CPlugs;
Futura : (LSV).C_Plug_Nb .ne.3
         (LSV).C_Plug_Nm .eq.'Face'  (ATTENTION : respecte minuscules/Majuscules)
! /SV(LSV).eq.*-*/  pas d'effet
! /SV(LSV).eq.'Face'-*/  /SV(LSV).eq.*-1/
! /SV(LSV).eq.'Face'-(mod(machin)+1)/
! /SV(LSV).eq.*-1,2,3,4/
! /SV(LSV).eq.'Face'-1,2,3,4/  /SV(LSV).eq.*-1/
! /SV(LSV).ne.'Face-*/
! /SV(LSV).ne.'Face-1,2,3,4/

 Autres possibilites :

 .../TProbe(LTV)/ : ne prend que les T_Probes;
 .../All_TV(LTV)/ : prend tout;

 CX(LCX2.eq.LCX)  : skip en cas de non egalite;

 signification du /. : genere un get,                (=> ne prend donc que le premier Bk)
                       skip si (LTV).Nb_Tr_Var=0:
                       suivit d' un from;
 pour CX( )/.TV( )<  : skip to next CX si T_Probe;
 (avec son pendant /.TProbe( ) of course);

 Formes equivalentes :
  TPlug == TV;
  CPlug == SV;
  TPlug_Tprobe == All_TV;

 Rq : On peut toujours utiliser la forme CX(LCX) (JOCx=1,NCX), ou NCX a ete
definie precedemment.
    to next LSV etc  exit from LTV ???
    exit, next
    


Embranchements logiques

Facilites (en Librairie ou tours de mains)

Les differents types de variables et leur utilisation

Les symboles
(LSV).CPlug_Nm (CHAR*4) et (LSV).CPlug_Nb (INT*4)  (Futura)

Les Variables TEF et leurs flags

Les matrices TEF a remplir

Impressions

Passage de valeurs de parametres a VIZU

Utilisation de facilite ADA like : Procedures, Case etc

Les commentaires et Help

Remarques d'origines diverses et conseil d'ecriture d'un processeur

Instructions de plus bas niveau (pour information)
==================================================

Les +SEQ et +CDE du debut de DECK

SUGGESTIONS, CRITIQUES, FEATURES and UPGRADES that could help
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/Derivation_formelle.doc
+KEEP,DERIV_MAC.
*CMZ :  1.00/09 28/04/95  18.25.58  by  Jean-Yves GRANDPEIX
*CMZ :  1.00/07 21/12/94  16.58.54  by  Jean-Yves GRANDPEIX
*-- Author :    Jean-Yves GRANDPEIX   21/12/94
!         Macros de derivation
!         ====================
!
!    MODE D'EMPLOI
!   Le derivateur travaille sur des expressions algebriques dans lesquelles
! figurent des noms pouvant correspondre soit a des variables Fortran soit
! a d'autres expressions algebriques. Le derivateur ne connait pas, a
! proprement parler, le concept de fonction : toute expression peut etre
! derivee par rapport a n'importe lequel des noms apparaissant dans sa
! definition. Ainsi, par exemple, on definit une expression par :
!       F_SET f = a*x**2;
! et f pourra etre derivee par rapport a 'a' ou 'x',
! mais on ne peut pas definir une fonction f(x) = a*x**2 dans laquelle
! n'importe quel nom peut etre substitue a 'x'.
!     En fait, je n'ai pas les idees claires sur la signification ni sur les
! consequences de cette approche tordue. Tout ce dont je suis sur, c'est que
! cette facon de voir est issue d'une vision melangee Fortran-Mathematiques
! et qu'elle beneficierait certainement grandement d'une separation de couches.
!
!   Commandes de base :
!   -----------------
!           ++ definition de fonction :
!                   F_SET func = expression;
!    Ceci definit 'func' : toute occurence ulterieure de 'func' sera remplacee
!    par 'expression'. 'expression' peut contenir des noms de variables Fortran,
!    des noms d'autres fonctions, ou des derivees de fonctions.
!     Exemple :  F_SET f = a*x**2;
!
!           ++ derivees :
!                   F_D(func)(/x1)(/x2)(/x3)... est la derivee multiple formelle
!    de 'func'par rapport a x1, x2, x3 ... : c'est une expression algebrique dans
!    laquelle ne figurent que des noms de variables Fortran. Ainsi l'instruction :
!                var = F_D(func)(/x1)(/x2)(/x3);
!    donnera, a l'execution, le calcul numerique de l'expression de droite et
!    l'attribution de sa valeur a 'var';
!    et l'instruction :
!                F_SET Dfunc = F_D(func)(/x1)(/x2)(/x3);
!    definira une nouvelle fonction 'Dfunc' dont l'expression formelle est donnee
!    par le membre de droite.
!     Exemple :  y = F_D(f)(/x); donnera y = a*2*x;
!                y = F_D(f)(/a); donnera y = x**2;
!                y = F_D(f)(/x)(/x); donnera y = 2*a;
!
!   Blocs de substitution temporaire de variable (derivees premieres seulement) :
!   --------------------------------------------
!    Le but de ces blocs est double : d'une part, ils permettent d'alleger les
!    calculs en offrant la possibilite de calculer en tete de bloc les fonctions
!    que l'on voudra et leurs derivees, de stocker ces valeurs dans des variables
!    Fortran puis de substituer ces variables a toutes les occurences des
!    fonctions correspondentes; d'autre part, ils permettent d'utiliser des noms
!    d'expression generiques et de les instancier conditionnellement avec tel ou
!    tel nom de fonction (attention : ne marche qu'avec des derivees premieres).
!      Exemples :
!         (1)    F_USE x=func1, y=func2
!                <   z= F_D(func1/func2)(/u);
!                >
!             va donner :
!                x = func1; y = func2;dx_du_ddd = F_D(func1)(/u);
!                dy_du_ddd = F_D(func2)(/u);
!                z = (dx_du_ddd*y-dy_du_ddd*x)/(y**2);
!             (en fait, tous les calculs preliminaires de variables sont effectues
!             dans un post-bloc (ce qui permet de recenser les derivees a calculer)
!             qu'un jeux subtil de GOTOs permet de parcourir avant le bloc principal)
!             (toutes les macros de substitutions sont tuees a la fin du bloc)
!
!         (2)    F_USE x=func1 FOR func IF (a .gt. 0),
!                      x=func3 FOR func IF (a .le. 0),
!                      y=func2
!                <  z = F_D(func/func2)(/u);
!                >
!             va donner :
!                if (a.gt.0) < x = func1; dx_du_ddd = F_D(func1)(/u);>
!                if (a.le.0) < x = func3; dx_du_ddd = F_D(func3)(/u);>
!                y = func2; dy_du_ddd = F_D(func2)(/u);
!                z = (dx_du_ddd*y-dy_du_ddd*x)/(y**2);
!
!      Dans l'etat actuel des choses, la liste de ce que l'on peut faire et de ce
!     que l'on ne peut pas faire avec les USE-blocs n'existe pas. L'etat est trop
!     preliminaire pour que cela merite d'etre precise des maintenant. Il faut
!     surtout utiliser ces commandes et decouvrir ce qu'il serait important
!     d'ajouter ou de retirer pour parvenir a un systeme pas trop casse-gueule.
!     On peut quand meme dresser une liste de recommandations.
!
!   Recommandations :
!   ---------------
!    * Le but des instanciations conditionnelles de fonctions n'est pas d'eviter
!     la programmation des IF dans le USE-bloc, mais d'eviter les dupplications
!     de code. Les instanciations conditionnelles doivent donc etre utilisees
!     avec parcimonie.
!    * Il est absolument interdit d'utiliser dans l'en-tete de bloc les symbols
!     definis dans ce meme en-tete. Ceci est extremement desagreable; cependant
!     on peut s'en sortir en emboitant les USE-blocs, definissant les symbols
!     dans l'en-tete du bloc exterieur, et les utilisant dans l'en-tete du
!     bloc interieur.
!    * Si les derivees des fonctions de l'en-tete s'expriment a l'aide des
!     fonctions de l'en-tete, alors ca peut tres bien ne pas marcher : en effet,
!     dans chaque post-bloc, les derivees sont calculees avant les fonctions.
!     On peut s'en sortir en provoquant la division en sous-blocs distincts en
!     ajoutant des tests bidons, ou en emboitant les USE-blocs.
!
!        MACROS
!        ------
!
!   Definition de fonction : creation des macros de substitution
&'F_SET #=#;'=' &''#1''=''(#2)'' &''(#1)(/''=''(#2)(/'';'
!
!  Si on arrive la, c'est que l'on derive la fonction par rapport
! a une variable dont elle ne depend pas. => 0.
&'(#)(/#)'='F_0'
!
!   Quelques bidouillages pour nettoyer un peu apres coup
&'F_0'='(0.)'
&'F_0-'='-'
&'F_0+'=' '
&'F_0/'='F_0*'
&'F_0*(#)'='F_0'
&'F_0**'='F_0*'
&'F_1'='(1.)'
&'F_1*'=' '
!
!  Pour chaque calcul de derivee par rapport a x on ecrit: Dx/Dx = 1.;
!  Pour chaque derivee multiple, on parcourt toutes les variables de
!  derivation (en faisant glisser un $ de variable en variable) et
!  on ecrit Dx/Dx = 1. pour chacune d'elle; simultanement, on cree une
!  macro faisant sauter le $ lors des rencontres ulterieures avec la ou
!  les memes variables. Enfin, on passe de la notation F_D(f)(/x) a la
!  notation (f)(/x).
!!&'F_D(#)(/#)'=' &''(#2)(/#2)''=''F_1''
!! &''F_D(##)(/#2)''=''(##1)(/#2)''(#1)(/#2)'
&'F_D(#)(/#)' = 'F_D(#1)$(/#2)'                "insertion du $"
&'F_D#$' = '#1'                 "passage a la notation (f)(/x)"
&'F_D#$(/#)' = ' &''(#2)(/#2)''=''F_1''
 &''F_D##$(/#2)''=''F_D##1(/#2)$''F_D#1(/#2)$'
                                     "macro Dx/Dx=1. et macro de saut du $"
!
&'(#/#)(/#)' ='(((#1)(/#3)*(#2)-(#2)(/#3)*(#1))/(#2)**2)'
                                 "derivation d'un quotient"
&'(#*#)(/#)' = '((#1)(/#3)*(#2)+(#2)(/#3)*(#1))'
                                  "derivation d'un produit"
!
&'(#**#)(/#)'='((#1)(/#3)*(#2)*(#1)**(#2-1))'
                            "derivation d'une elevation a la puissance"
&'(#*#**#)(/'  ='(#1*(#2**#3))(/'     "regle de priorite"
&'(#/#**#)(/'  ='(#1/(#2**#3))(/'     "regle de priorite"
&'(#**#*#)(/'  ='((#1**#2)*#3)(/'   "regle de priorite"
&'(#**#/#)(/'  ='((#1**#2)/#3)(/'   "regle de priorite"
&'(#+#)(/#)' ='((#1)(/#3)+(#2)(/#3))'
                              "derivation d'une somme"
&'(#-#)(/#)' ='((#1)(/#3)-(#2)(/#3))'
                              "derivation d'une difference"
!
!       Derivation des fonctions elementaires : Le principe est d'ecrire, non pas
!   Df(x)/Dx = f'(x), mais Df(u)/Dx = (Du/Dx*f'(x)); dans ces conditions, la possibilite
!   de derivation de fonctions composees est assuree (attention, le resultat doit
!   toujours etre encadre par des parentheses).
&'(EXP(#))(/#)' = '((#1)(/#2)*EXP(#1))'
                              "derivation de l'exponentielle"
&'(SQRT(#))(/#)' = '((#1)(/#2)/(2.*SQRT(#1)))'
                              "derivation d'une racine carree"
&'(ALOG(#))(/#)' = '((#1)(/#2)/(#1))'
                              "derivation du logarithme neperien"
&'(SIN(#))(/#)' = '((#1)(/#2)*COS(#1))'
                              "derivation du sinus"
&'(COS(#))(/#)' = '(-(#1)(/#2)*SIN(#1))'
                              "derivation du cosinus"
&'(TAN(#))(/#)' = '((#1)(/#2)/(COS(#1))**2)'
                              "derivation de la tangente"
;
!
&'((#))(/'='(#1)(/'
!
!         Macros gerant la derivation multiple
!         ------------------------------------
!      Syntaxe :
!          F_D(func)(/var1)(/var2)(/var3)...
!      Exemple :
!          F_D(a*x**2)(/x)(/x) va donner successivement :
!            (a*(x**2)(/x)+(a)(/x)...)(/x)     (derivation du produit)
!            (a*((x**2)(/x))(/x)+...)      (derivations de prod., sommes ...)
!            (a*(x**2)(/x)(/x)+...)      (premiere macro ci-dessous)
!            (a*(2.*x)(/x)+...)                  (derivation puissance)
!                .....
&'((#)(/#))' = '(#1)(/#2)'
&'F_D(F_D(#)(/#))' = 'F_D(#1)(/#2)'
&'F_D((#)(/#))' = 'F_D(#1)(/#2)'
&'(F_D(#)(/#))(/' = 'F_D(#1)(/#2)(/'
!
&'F_D(/#)(#)'='F_D(#2)(/#1)'
!
!      Macros gerant les substitutions temporaires de variables :
!      --------------------------------------------------------
!   Syntaxe :
!        R_USE var = func [FOR symb [IF (logex)]], ... < ... >
!      avec :  + var = variable qui sera substituee a symb (s'il existe)
!                      ou a func (si symb est absent) partout dans le bloc.
!                      var sera calcule dans un post-bloc par var = func.
!              + func = fonction (eventuellement substituee a symb) dont
!                      la valeur, ainsi que celle de ses derivees, sera
!                      calculee dans le post-bloc.
!              + symb = nom generique de fonction, present eventuellement
!                      dans certaines macros, qui sera instancie par func.
!              + logex = expression logique.
!
!   Exemple :     F_USE A=func1, B=func2 <    ..........     >
!       . En tete du block, on saute a un post-bloc dans lequel
!         on calcule A=func1 et B=func2 ainsi que leurs derivees;
!       . Dans le bloc, A et B sont systematiquement substitues a
!         func1 et func2 et, par exemple, DA_DX_DDD a F_D(func1)(/X);
!       . A la fin du bloc (et avant le post-bloc), les macros de
!         substitution de A et B a func1 et func2 sont tuees, de meme
!         que les macros de substitution des derivees (noter que les
!         macros de substitution generales F_D(A)(/#) -> DA_D#_DDD
!         induisent des macros specifiques F_D(A)(/X) -> DA_DX_DDD
!         qui doivent aussi etre tuees).
!
!   Ce bloc est un vrai bloc, dans lequel on peut faire EXIT ou NEXT.
!
!   Usage des stacks : 1 : type de bloc (D)
!                      2 : label de debut de bloc
!                      3 : label final de la pile de macros a tuer en
!                          fin de post-bloc
!                      4 : label d'entree dans le post-bloc
!                      5 : label de sortie (situe apres le post-bloc)
!                      7 : utilise ponctuellement comme buffer
!
&'(#).#.D.#.DDD' = '#2_D#3_DDD'    "nettoyage de quelques scories du bloc USE"
&'F_USE #=#<' =
'#LD#S1#I#S4;GOTO #C#N;#I#S2#C#N;#I#S5#N;#S3#N;
 &''$#C$''=''$F_COMP$#C($)#1=#2;$F_COMP$#C(LAST);
GOTO #U2#C;##U3#U5#S5#C;'';
$F_SUBST$#C #1=#2;'
!
!   Creation des macros effectuant les substitutions et de leurs macrophages :
!    $F_SUBST cree d'abord la macro de substitution, puis cree la macro agissant
!   sur les derivees . Toutes les fois qu'une derivee de la fonction concernee
!   est rencontree, cette derniere macro :
!     1/ remplace F_D(#)(/#) par Dvar_D#2_DDD (var = variable de substitution);
!     2/ cree une macro qui effectue partout cette substitution;
!     3/ cree deux macrophages pour cette macro : l'un agit au debut du post bloc,
!       a l'endroit de l'instruction $F_COMP$#(logex) (logex etant soit l'expression
!       logique figurant dans le IF, soit $$ si IF est absent), tue d'abord la macro
!       de substitution, insere ensuite l'instruction de calcul de la derivee,
!       puis recree la macro de substitution; l'autre agit apres tous les
!       post-blocs et tue definitivement la macro de substitution; ces deux
!       macrophage sont autodestructeurs;
!     4/ place juste avant $F_COMP :
!         Dvar_D#2_DDD = F_D(#1)(/#2) .
!    En outre, $F_SUBST cree un macrophage pour cette macro, qui agit a l'endroit
!    du label precedent $F_COMP (ainsi on est sur que la macro de substitution
!    generale de derivees est tuee lors du calcul de Dvar_D#2_DDD).
!
;
&'$F_SUBST$# #=#;' = '$F_SUBST$#1 #2=#3 FOR #3 IF($$);'
&'$F_SUBST$# #=# FOR #;' = '$F_SUBST$#1 #2=#3 FOR #4 IF($$);'
!
&'$F_SUBST$# #=# FOR # IF(#);' = '
 &''#4'' = ''#2'';
#I#S7
 &''(#4)(/##)'' = ''(#C).D#2.D.##1.DDD''
 &''(#C).D#2.D.##.DDD'' = ''(#U3#S3#C).D#2.D.##1.DDD
 &''''(#4)(/##1)'''' = ''''D#2_D##1_DDD''''
 &''''$F_COMP$#1(#5)'''' = ''''
 &''''''''########K$F_COMP$#1(#5)''''''''
 &''''''''########K(#4)(/##1)''''''''
;D#2_D##1_DDD=(#3)(/##1)
 &''''''''(#4)(/##1)'''''''' = ''''''''D#2_D##1_DDD''''''''
;$F_COMP$#1(#5)
''''
 &''''$F_COMP$#1(LAST)'''' = ''''
 &''''''''########K$F_COMP$#1(LAST)''''''''
 &''''''''########K(#4)(/##1)''''''''
$F_COMP$#1(LAST);''''
'';
 &''$#U7#S7#C$;'' = '' &''''####K(#4)(/####)''''
 &''''####K(#C).D#2.D.####.DDD''''
;$#U3#C#U7#S3$;''
;'
!
!
&'$F_SUBST$# #=#(#)FOR ' = '$F_SUBST$#1 #2=#3(#4) FOR '
                                   "remettre des blancs apres les parentheses"
&'$F_SUBST$# #=#FOR #(#)IF(#);' = '$F_SUBST$#1 #2=#3FOR #4(#5) IF(#6);'
                                   "remettre des blancs apres les parentheses"
&'$F_SUBST$# #=#,#;' = '$F_SUBST$#1 #2=#3;$F_SUBST$#1 #4;'
&'$F_SUBST$# #=#,;' = '$F_SUBST$#1 #2=#3;' "pour retirer une eventuelle"
                                            "virgule abusive"

!
!    Calcul des fonctions et remplissage des variables associees.
!   Instanciation de l'etiquette de calcul des derivees correspondantes
&'$F_COMP$#(LAST)' = ';'
&'$F_COMP$#(#)#=# FOR #;' =' &''##K#5'';#3=#4;
 &''#5''=''#3'' &''$F_COMP$#1(LAST)''='' &''''####K$F_COMP$#1(LAST)''''
 &''''####K#5''''
$F_COMP$#1(LAST);''
;'
!
&'$F_COMP$#($)#=#;' = '$F_COMP$#1($$)#2=#3 FOR #3;'
&'$F_COMP$#($)#=# FOR #;' = '$F_COMP$#1($$)#2=#3 FOR #4;'
&'$F_COMP$#($)#=# FOR # IF(#);' =';IF(#5)<$F_COMP$#1(#5)#2=#3 FOR #4;>'
!
&'$F_COMP$#($)#=#(#)FOR ' ='$F_COMP$#1($)#2=#3(#4) FOR '
                                   "remettre des blancs apres les parentheses"
&'$F_COMP$#($)#=#FOR #(#)IF(#);' ='$F_COMP$#1($)#2=#3FOR #4(#5) IF(#6);'
                                   "remettre des blancs apres les parentheses"
&'$F_COMP$#($)#=#,#;' = '$F_COMP$#1($)#2=#3;$F_COMP$#1($)#4;'
&'$F_COMP$#($)#=#,;' = '$F_COMP$#1($)#2=#3;' "pour retirer une eventuelle"
                                            "virgule abusive"
!
&'$D$' = ';GOTO #U5#C;#U4#C;$#U3#S3#C$;'
!
=============================================================================
========   E X E M P L E == $ZOOM/pro/exos/phyto//phyto/proc/tgrow2 =========
=============================================================================
DECLARE CLASS TD;
 LOCAL_VAR ANBYC,
           AK_N,
           AK_S1,
           ALFA,
           GROW_MAX,
           WEIGHT(3)
                IN CLASS TD;
 LINK_VAR  PROT,
           AMETA,
           ANITR
                IN CLASS TD;
END DECLARE CLASS TD;
!
! Cut off for protein concentration set at 1.E-23 (approximately
! one 10kd molecule per m3)
  DATA PROTCUT /1.E-23/;
!
! ==== Simulation Entry Point
! ==============================================================
FROM TR(LTR)
<  GET TD(LTD);
!
!
IF (ZPRINT)
  <  Z_PR : ANBYC, AK_N, AK_S1, GROW_MAX, ALFA, WEIGHT(1), WEIGHT(2),
          WEIGHT(3);
     Z_PR : PROT,AMETA,ANITR;
  >
!
GRASP ARRAY FI, OMEGA (LTR);
!
! Fill FI and OMEGA arrays; fix some coef for CT computation
OMEGA(1) = 0.;
!
! Transfer equation :
!      phi = grow_max* (anitr/(anitr+ak_n)) *ameta/(ameta/prot+ak_s1)
!
F_SET FMMNITR = ANITR/(ANITR+AK_N);
F_SET FMMPHYT = AMETA/(AMETA/PROT+AK_S1);
F_SET FPHIN = GROW_MAX*FMMNITR*FMMPHYT; "Phi normal (ie for prot non 0)"
F_SET FNULL = 0.;
!
!
!               Use-block
!               =========
!      depending on Prot value, use FPHIN or Fnull
!
F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
      PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
<
FI(1) = FPHI;
...FTN:
      GOTO 10009
10010 IO_AR_W_T1=1
      Q(LO_FI+MO_FI+IO_AR_W_T1)=PHI
!
IF (ZPRINT)
 <Z_PR : PROT,AMETA,ANITR, FI(1);>
!
! Scan connexions and fill CT matrix
ITV=0.;
SKIP THRU TV(LTV)
<  ITV = ITV+1;
   IF (ITV .EQ. 1)  "First T_plug is connected to PROT cell"
   <  READ THRU CX(LCX) (J=1,1)
   " "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   CT_SV(1,1) = F_D(FPHI)(/PROT);
...FTN:
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DPROT_DDD
   " ">
   >
   IF (ITV .EQ. 2)   "Metabolite connected T-plug"
   <  READ THRU CX(LCX) (J=1,1)
   " "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   CT_SV(1,1) = F_D(FPHI)(/AMETA);
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DAMETA_DDD
   " ">
   >
   IF (ITV .EQ. 3)   "Nitrogen connected T-plug"
   <  READ THRU CX(LCX) (J=1,1)
   " "" "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   " "CT_SV(1,1) = F_D(FPHI)(/ANITR);
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DANITR_DDD
   " "   >
   >
>
>         "End of USE block"
!        " ================"
10019 GOTO 10011
C F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
C       PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
10009 IF(.NOT.((Q(LQ(LTD+((-2+OR_TD_PROT))-(0))).GT.PROTCUT)))GOTO 10053
      DPHI_DANITR_DDD=
     *( ((( ((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB
     *_TD_AK_N)))-((1.)+(0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))/((Q(L
     *Q(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(LQ(LTD+
     *((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(L
     *TD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+((-(((-(0.))/(Q(L
     *Q(LTD+((-2+OR_TD_PROT))-(0))))**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMET
     *A))-(0)))))/((Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_T
     *D_PROT))-(0)))+Q(LTD+OB_TD_AK_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANIT
     *R))-(0)))/(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))
     **(Q(LTD+OB_TD_GROW_MAX)))

      DPHI_DAMETA_DDD=
     *( (((-( (0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))
     */((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(L
     *Q(LTD+((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/
     *Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+(( ((Q(LQ(L
     *TD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD
     *+OB_TD_AK_S1)))-((( (Q(LQ(LTD+((-2+OR_TD_PROT))-(0))))-(0.))/(Q(LQ
     *(LTD+((-2+OR_TD_PROT))-(0))))**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMETA
     *))-(0)))))/((Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD
     *_PROT))-(0)))+Q(LTD+OB_TD_AK_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANITR
     *))-(0)))/(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))*
     *(Q(LTD+OB_TD_GROW_MAX)))

      DPHI_DPROT_DDD=
     *( (((-( (0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))/
     *((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(LQ
     *(LTD+((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q
     *(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+((-(((- (Q(L
     *Q(LTD+((-2+OR_TD_AMETA))-(0)))))/(Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))
     *)**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))))/((Q(LQ(LTD+((-2+O
     *R_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK
     *_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))/(Q(LQ(LTD+((-2+OR_T
     *D_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))*(Q(LTD+OB_TD_GROW_MAX)))
      PHI=(Q(LTD+OB_TD_GROW_MAX)*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))/(Q(L
     *Q(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))*(Q(LQ(LTD+((-2+
     *OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((
     *-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))

C F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
C       PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
10053 IF(.NOT.((Q(LQ(LTD+((-2+OR_TD_PROT))-(0))).LE.PROTCUT)))GOTO 10055
      DPHI_DANITR_DDD=(0.)
      DPHI_DAMETA_DDD=(0.)
      DPHI_DPROT_DDD=(0.)
      PHI=(0.)
10055 GOTO 10010
!
  if Zprint < Z2_Pr : FI(1) ; >
RETURN;
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/Derivation_formelle.doc.bak
+KEEP,DERIV_MAC.
*CMZ :  1.00/09 28/04/95  18.25.58  by  Jean-Yves GRANDPEIX
*CMZ :  1.00/07 21/12/94  16.58.54  by  Jean-Yves GRANDPEIX
*-- Author :    Jean-Yves GRANDPEIX   21/12/94
!         Macros de derivation
!         ====================
!
!    MODE D'EMPLOI
!   Le derivateur travaille sur des expressions algebriques dans lesquelles
! figurent des noms pouvant correspondre soit a des variables Fortran soit
! a d'autres expressions algebriques. Le derivateur ne connait pas, a
! proprement parler, le concept de fonction : toute expression peut etre
! derivee par rapport a n'importe lequel des noms apparaissant dans sa
! definition. Ainsi, par exemple, on definit une expression par :
!       F_SET f = a*x**2;
! et f pourra etre derivee par rapport a 'a' ou 'x',
! mais on ne peut pas definir une fonction f(x) = a*x**2 dans laquelle
! n'importe quel nom peut etre substitue a 'x'.
!     En fait, je n'ai pas les idees claires sur la signification ni sur les
! consequences de cette approche tordue. Tout ce dont je suis sur, c'est que
! cette facon de voir est issue d'une vision melangee Fortran-Mathematiques
! et qu'elle beneficierait certainement grandement d'une separation de couches.
!
!   Commandes de base :
!   -----------------
!           ++ definition de fonction :
!                   F_SET func = expression;
!    Ceci definit 'func' : toute occurence ulterieure de 'func' sera remplacee
!    par 'expression'. 'expression' peut contenir des noms de variables Fortran,
!    des noms d'autres fonctions, ou des derivees de fonctions.
!     Exemple :  F_SET f = a*x**2;
!
!           ++ derivees :
!                   F_D(func)(/x1)(/x2)(/x3)... est la derivee multiple formelle
!    de 'func'par rapport a x1, x2, x3 ... : c'est une expression algebrique dans
!    laquelle ne figurent que des noms de variables Fortran. Ainsi l'instruction :
!                var = F_D(func)(/x1)(/x2)(/x3);
!    donnera, a l'execution, le calcul numerique de l'expression de droite et
!    l'attribution de sa valeur a 'var';
!    et l'instruction :
!                F_SET Dfunc = F_D(func)(/x1)(/x2)(/x3);
!    definira une nouvelle fonction 'Dfunc' dont l'expression formelle est donnee
!    par le membre de droite.
!     Exemple :  y = F_D(f)(/x); donnera y = a*2*x;
!                y = F_D(f)(/a); donnera y = x**2;
!                y = F_D(f)(/x)(/x); donnera y = 2*a;
!
!   Blocs de substitution temporaire de variable (derivees premieres seulement) :
!   --------------------------------------------
!    Le but de ces blocs est double : d'une part, ils permettent d'alleger les
!    calculs en offrant la possibilite de calculer en tete de bloc les fonctions
!    que l'on voudra et leurs derivees, de stocker ces valeurs dans des variables
!    Fortran puis de substituer ces variables a toutes les occurences des
!    fonctions correspondentes; d'autre part, ils permettent d'utiliser des noms
!    d'expression generiques et de les instancier conditionnellement avec tel ou
!    tel nom de fonction (attention : ne marche qu'avec des derivees premieres).
!      Exemples :
!         (1)    F_USE x=func1, y=func2
!                <   z= F_D(func1/func2)(/u);
!                >
!             va donner :
!                x = func1; y = func2;dx_du_ddd = F_D(func1)(/u);
!                dy_du_ddd = F_D(func2)(/u);
!                z = (dx_du_ddd*y-dy_du_ddd*x)/(y**2);
!             (en fait, tous les calculs preliminaires de variables sont effectues
!             dans un post-bloc (ce qui permet de recenser les derivees a calculer)
!             qu'un jeux subtil de GOTOs permet de parcourir avant le bloc principal)
!             (toutes les macros de substitutions sont tuees a la fin du bloc)
!
!         (2)    F_USE x=func1 FOR func IF (a .gt. 0),
!                      x=func3 FOR func IF (a .le. 0),
!                      y=func2
!                <  z = F_D(func/func2)(/u);
!                >
!             va donner :
!                if (a.gt.0) < x = func1; dx_du_ddd = F_D(func1)(/u);>
!                if (a.le.0) < x = func3; dx_du_ddd = F_D(func3)(/u);>
!                y = func2; dy_du_ddd = F_D(func2)(/u);
!                z = (dx_du_ddd*y-dy_du_ddd*x)/(y**2);
!
!      Dans l'etat actuel des choses, la liste de ce que l'on peut faire et de ce
!     que l'on ne peut pas faire avec les USE-blocs n'existe pas. L'etat est trop
!     preliminaire pour que cela merite d'etre precise des maintenant. Il faut
!     surtout utiliser ces commandes et decouvrir ce qu'il serait important
!     d'ajouter ou de retirer pour parvenir a un systeme pas trop casse-gueule.
!     On peut quand meme dresser une liste de recommandations.
!
!   Recommandations :
!   ---------------
!    * Le but des instanciations conditionnelles de fonctions n'est pas d'eviter
!     la programmation des IF dans le USE-bloc, mais d'eviter les dupplications
!     de code. Les instanciations conditionnelles doivent donc etre utilisees
!     avec parcimonie.
!    * Il est absolument interdit d'utiliser dans l'en-tete de bloc les symbols
!     definis dans ce meme en-tete. Ceci est extremement desagreable; cependant
!     on peut s'en sortir en emboitant les USE-blocs, definissant les symbols
!     dans l'en-tete du bloc exterieur, et les utilisant dans l'en-tete du
!     bloc interieur.
!    * Si les derivees des fonctions de l'en-tete s'expriment a l'aide des
!     fonctions de l'en-tete, alors ca peut tres bien ne pas marcher : en effet,
!     dans chaque post-bloc, les derivees sont calculees avant les fonctions.
!     On peut s'en sortir en provoquant la division en sous-blocs distincts en
!     ajoutant des tests bidons, ou en emboitant les USE-blocs.
!
!        MACROS
!        ------
!
!   Definition de fonction : creation des macros de substitution
&'F_SET #=#;'=' &''#1''=''(#2)'' &''(#1)(/''=''(#2)(/'';'
!
!  Si on arrive la, c'est que l'on derive la fonction par rapport
! a une variable dont elle ne depend pas. => 0.
&'(#)(/#)'='F_0'
!
!   Quelques bidouillages pour nettoyer un peu apres coup
&'F_0'='(0.)'
&'F_0-'='-'
&'F_0+'=' '
&'F_0/'='F_0*'
&'F_0*(#)'='F_0'
&'F_0**'='F_0*'
&'F_1'='(1.)'
&'F_1*'=' '
!
!  Pour chaque calcul de derivee par rapport a x on ecrit: Dx/Dx = 1.;
!  Pour chaque derivee multiple, on parcourt toutes les variables de
!  derivation (en faisant glisser un $ de variable en variable) et
!  on ecrit Dx/Dx = 1. pour chacune d'elle; simultanement, on cree une
!  macro faisant sauter le $ lors des rencontres ulterieures avec la ou
!  les memes variables. Enfin, on passe de la notation F_D(f)(/x) a la
!  notation (f)(/x).
!!&'F_D(#)(/#)'=' &''(#2)(/#2)''=''F_1''
!! &''F_D(##)(/#2)''=''(##1)(/#2)''(#1)(/#2)'
&'F_D(#)(/#)' = 'F_D(#1)$(/#2)'                "insertion du $"
&'F_D#$' = '#1'                 "passage a la notation (f)(/x)"
&'F_D#$(/#)' = ' &''(#2)(/#2)''=''F_1''
 &''F_D##$(/#2)''=''F_D##1(/#2)$''F_D#1(/#2)$'
                                     "macro Dx/Dx=1. et macro de saut du $"
!
&'(#/#)(/#)' ='(((#1)(/#3)*(#2)-(#2)(/#3)*(#1))/(#2)**2)'
                                 "derivation d'un quotient"
&'(#*#)(/#)' = '((#1)(/#3)*(#2)+(#2)(/#3)*(#1))'
                                  "derivation d'un produit"
!
&'(#**#)(/#)'='((#1)(/#3)*(#2)*(#1)**(#2-1))'
                            "derivation d'une elevation a la puissance"
&'(#*#**#)(/'  ='(#1*(#2**#3))(/'     "regle de priorite"
&'(#/#**#)(/'  ='(#1/(#2**#3))(/'     "regle de priorite"
&'(#**#*#)(/'  ='((#1**#2)*#3)(/'   "regle de priorite"
&'(#**#/#)(/'  ='((#1**#2)/#3)(/'   "regle de priorite"
&'(#+#)(/#)' ='((#1)(/#3)+(#2)(/#3))'
                              "derivation d'une somme"
&'(#-#)(/#)' ='((#1)(/#3)-(#2)(/#3))'
                              "derivation d'une difference"
!
!       Derivation des fonctions elementaires : Le principe est d'ecrire, non pas
!   Df(x)/Dx = f'(x), mais Df(u)/Dx = (Du/Dx*f'(x)); dans ces conditions, la possibilite
!   de derivation de fonctions composees est assuree (attention, le resultat doit
!   toujours etre encadre par des parentheses).
&'(EXP(#))(/#)' = '((#1)(/#2)*EXP(#1))'
                              "derivation de l'exponentielle"
&'(SQRT(#))(/#)' = '((#1)(/#2)/(2.*SQRT(#1)))'
                              "derivation d'une racine carree"
&'(ALOG(#))(/#)' = '((#1)(/#2)/(#1))'
                              "derivation du logarithme neperien"
&'(SIN(#))(/#)' = '((#1)(/#2)*COS(#1))'
                              "derivation du sinus"
&'(COS(#))(/#)' = '(-(#1)(/#2)*SIN(#1))'
                              "derivation du cosinus"
&'(TAN(#))(/#)' = '((#1)(/#2)/(COS(#1))**2)'
                              "derivation de la tangente"
;
!
&'((#))(/'='(#1)(/'
!
!         Macros gerant la derivation multiple
!         ------------------------------------
!      Syntaxe :
!          F_D(func)(/var1)(/var2)(/var3)...
!      Exemple :
!          F_D(a*x**2)(/x)(/x) va donner successivement :
!            (a*(x**2)(/x)+(a)(/x)...)(/x)     (derivation du produit)
!            (a*((x**2)(/x))(/x)+...)      (derivations de prod., sommes ...)
!            (a*(x**2)(/x)(/x)+...)      (premiere macro ci-dessous)
!            (a*(2.*x)(/x)+...)                  (derivation puissance)
!                .....
&'((#)(/#))' = '(#1)(/#2)'
&'F_D(F_D(#)(/#))' = 'F_D(#1)(/#2)'
&'F_D((#)(/#))' = 'F_D(#1)(/#2)'
&'(F_D(#)(/#))(/' = 'F_D(#1)(/#2)(/'
!
&'F_D(/#)(#)'='F_D(#2)(/#1)'
!
!      Macros gerant les substitutions temporaires de variables :
!      --------------------------------------------------------
!   Syntaxe :
!        R_USE var = func [FOR symb [IF (logex)]], ... < ... >
!      avec :  + var = variable qui sera substituee a symb (s'il existe)
!                      ou a func (si symb est absent) partout dans le bloc.
!                      var sera calcule dans un post-bloc par var = func.
!              + func = fonction (eventuellement substituee a symb) dont
!                      la valeur, ainsi que celle de ses derivees, sera
!                      calculee dans le post-bloc.
!              + symb = nom generique de fonction, present eventuellement
!                      dans certaines macros, qui sera instancie par func.
!              + logex = expression logique.
!
!   Exemple :     F_USE A=func1, B=func2 <    ..........     >
!       . En tete du block, on saute a un post-bloc dans lequel
!         on calcule A=func1 et B=func2 ainsi que leurs derivees;
!       . Dans le bloc, A et B sont systematiquement substitues a
!         func1 et func2 et, par exemple, DA_DX_DDD a F_D(func1)(/X);
!       . A la fin du bloc (et avant le post-bloc), les macros de
!         substitution de A et B a func1 et func2 sont tuees, de meme
!         que les macros de substitution des derivees (noter que les
!         macros de substitution generales F_D(A)(/#) -> DA_D#_DDD
!         induisent des macros specifiques F_D(A)(/X) -> DA_DX_DDD
!         qui doivent aussi etre tuees).
!
!   Ce bloc est un vrai bloc, dans lequel on peut faire EXIT ou NEXT.
!
!   Usage des stacks : 1 : type de bloc (D)
!                      2 : label de debut de bloc
!                      3 : label final de la pile de macros a tuer en
!                          fin de post-bloc
!                      4 : label d'entree dans le post-bloc
!                      5 : label de sortie (situe apres le post-bloc)
!                      7 : utilise ponctuellement comme buffer
!
&'(#).#.D.#.DDD' = '#2_D#3_DDD'    "nettoyage de quelques scories du bloc USE"
&'F_USE #=#<' =
'#LD#S1#I#S4;GOTO #C#N;#I#S2#C#N;#I#S5#N;#S3#N;
 &''$#C$''=''$F_COMP$#C($)#1=#2;$F_COMP$#C(LAST);
GOTO #U2#C;##U3#U5#S5#C;'';
$F_SUBST$#C #1=#2;'
!
!   Creation des macros effectuant les substitutions et de leurs macrophages :
!    $F_SUBST cree d'abord la macro de substitution, puis cree la macro agissant
!   sur les derivees . Toutes les fois qu'une derivee de la fonction concernee
!   est rencontree, cette derniere macro :
!     1/ remplace F_D(#)(/#) par Dvar_D#2_DDD (var = variable de substitution);
!     2/ cree une macro qui effectue partout cette substitution;
!     3/ cree deux macrophages pour cette macro : l'un agit au debut du post bloc,
!       a l'endroit de l'instruction $F_COMP$#(logex) (logex etant soit l'expression
!       logique figurant dans le IF, soit $$ si IF est absent), tue d'abord la macro
!       de substitution, insere ensuite l'instruction de calcul de la derivee,
!       puis recree la macro de substitution; l'autre agit apres tous les
!       post-blocs et tue definitivement la macro de substitution; ces deux
!       macrophage sont autodestructeurs;
!     4/ place juste avant $F_COMP :
!         Dvar_D#2_DDD = F_D(#1)(/#2) .
!    En outre, $F_SUBST cree un macrophage pour cette macro, qui agit a l'endroit
!    du label precedent $F_COMP (ainsi on est sur que la macro de substitution
!    generale de derivees est tuee lors du calcul de Dvar_D#2_DDD).
!
;
&'$F_SUBST$# #=#;' = '$F_SUBST$#1 #2=#3 FOR #3 IF($$);'
&'$F_SUBST$# #=# FOR #;' = '$F_SUBST$#1 #2=#3 FOR #4 IF($$);'
!
&'$F_SUBST$# #=# FOR # IF(#);' = '
 &''#4'' = ''#2'';
#I#S7
 &''(#4)(/##)'' = ''(#C).D#2.D.##1.DDD''
 &''(#C).D#2.D.##.DDD'' = ''(#U3#S3#C).D#2.D.##1.DDD
 &''''(#4)(/##1)'''' = ''''D#2_D##1_DDD''''
 &''''$F_COMP$#1(#5)'''' = ''''
 &''''''''########K$F_COMP$#1(#5)''''''''
 &''''''''########K(#4)(/##1)''''''''
;D#2_D##1_DDD=(#3)(/##1)
 &''''''''(#4)(/##1)'''''''' = ''''''''D#2_D##1_DDD''''''''
;$F_COMP$#1(#5)
''''
 &''''$F_COMP$#1(LAST)'''' = ''''
 &''''''''########K$F_COMP$#1(LAST)''''''''
 &''''''''########K(#4)(/##1)''''''''
$F_COMP$#1(LAST);''''
'';
 &''$#U7#S7#C$;'' = '' &''''####K(#4)(/####)''''
 &''''####K(#C).D#2.D.####.DDD''''
;$#U3#C#U7#S3$;''
;'
!
!
&'$F_SUBST$# #=#(#)FOR ' = '$F_SUBST$#1 #2=#3(#4) FOR '
                                   "remettre des blancs apres les parentheses"
&'$F_SUBST$# #=#FOR #(#)IF(#);' = '$F_SUBST$#1 #2=#3FOR #4(#5) IF(#6);'
                                   "remettre des blancs apres les parentheses"
&'$F_SUBST$# #=#,#;' = '$F_SUBST$#1 #2=#3;$F_SUBST$#1 #4;'
&'$F_SUBST$# #=#,;' = '$F_SUBST$#1 #2=#3;' "pour retirer une eventuelle"
                                            "virgule abusive"

!
!    Calcul des fonctions et remplissage des variables associees.
!   Instanciation de l'etiquette de calcul des derivees correspondantes
&'$F_COMP$#(LAST)' = ';'
&'$F_COMP$#(#)#=# FOR #;' =' &''##K#5'';#3=#4;
 &''#5''=''#3'' &''$F_COMP$#1(LAST)''='' &''''####K$F_COMP$#1(LAST)''''
 &''''####K#5''''
$F_COMP$#1(LAST);''
;'
!
&'$F_COMP$#($)#=#;' = '$F_COMP$#1($$)#2=#3 FOR #3;'
&'$F_COMP$#($)#=# FOR #;' = '$F_COMP$#1($$)#2=#3 FOR #4;'
&'$F_COMP$#($)#=# FOR # IF(#);' =';IF(#5)<$F_COMP$#1(#5)#2=#3 FOR #4;>'
!
&'$F_COMP$#($)#=#(#)FOR ' ='$F_COMP$#1($)#2=#3(#4) FOR '
                                   "remettre des blancs apres les parentheses"
&'$F_COMP$#($)#=#FOR #(#)IF(#);' ='$F_COMP$#1($)#2=#3FOR #4(#5) IF(#6);'
                                   "remettre des blancs apres les parentheses"
&'$F_COMP$#($)#=#,#;' = '$F_COMP$#1($)#2=#3;$F_COMP$#1($)#4;'
&'$F_COMP$#($)#=#,;' = '$F_COMP$#1($)#2=#3;' "pour retirer une eventuelle"
                                            "virgule abusive"
!
&'$D$' = ';GOTO #U5#C;#U4#C;$#U3#S3#C$;'
!
=============================================================================
========   E X E M P L E == /zoom/pro/exos/phyto//phyto/proc/tgrow2 =========
=============================================================================
DECLARE CLASS TD;
 LOCAL_VAR ANBYC,
           AK_N,
           AK_S1,
           ALFA,
           GROW_MAX,
           WEIGHT(3)
                IN CLASS TD;
 LINK_VAR  PROT,
           AMETA,
           ANITR
                IN CLASS TD;
END DECLARE CLASS TD;
!
! Cut off for protein concentration set at 1.E-23 (approximately
! one 10kd molecule per m3)
  DATA PROTCUT /1.E-23/;
!
! ==== Simulation Entry Point
! ==============================================================
FROM TR(LTR)
<  GET TD(LTD);
!
!
IF (ZPRINT)
  <  Z_PR : ANBYC, AK_N, AK_S1, GROW_MAX, ALFA, WEIGHT(1), WEIGHT(2),
          WEIGHT(3);
     Z_PR : PROT,AMETA,ANITR;
  >
!
GRASP ARRAY FI, OMEGA (LTR);
!
! Fill FI and OMEGA arrays; fix some coef for CT computation
OMEGA(1) = 0.;
!
! Transfer equation :
!      phi = grow_max* (anitr/(anitr+ak_n)) *ameta/(ameta/prot+ak_s1)
!
F_SET FMMNITR = ANITR/(ANITR+AK_N);
F_SET FMMPHYT = AMETA/(AMETA/PROT+AK_S1);
F_SET FPHIN = GROW_MAX*FMMNITR*FMMPHYT; "Phi normal (ie for prot non 0)"
F_SET FNULL = 0.;
!
!
!               Use-block
!               =========
!      depending on Prot value, use FPHIN or Fnull
!
F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
      PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
<
FI(1) = FPHI;
...FTN:
      GOTO 10009
10010 IO_AR_W_T1=1
      Q(LO_FI+MO_FI+IO_AR_W_T1)=PHI
!
IF (ZPRINT)
 <Z_PR : PROT,AMETA,ANITR, FI(1);>
!
! Scan connexions and fill CT matrix
ITV=0.;
SKIP THRU TV(LTV)
<  ITV = ITV+1;
   IF (ITV .EQ. 1)  "First T_plug is connected to PROT cell"
   <  READ THRU CX(LCX) (J=1,1)
   " "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   CT_SV(1,1) = F_D(FPHI)(/PROT);
...FTN:
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DPROT_DDD
   " ">
   >
   IF (ITV .EQ. 2)   "Metabolite connected T-plug"
   <  READ THRU CX(LCX) (J=1,1)
   " "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   CT_SV(1,1) = F_D(FPHI)(/AMETA);
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DAMETA_DDD
   " ">
   >
   IF (ITV .EQ. 3)   "Nitrogen connected T-plug"
   <  READ THRU CX(LCX) (J=1,1)
   " "" "<  GET SV(LSV); GRASP ARRAY CT_SV(LSV,LTR) FOR (LCX);
   " "   " "CT_SV(1,1) = F_D(FPHI)(/ANITR);
      Q(LO_CT+(NO_CT_SV+IO_AR_W_T2-1)*IO_O_CT_IC+MO_CT_SV+IO_AR_W_T1)=DP
     *HI_DANITR_DDD
   " "   >
   >
>
>         "End of USE block"
!        " ================"
10019 GOTO 10011
C F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
C       PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
10009 IF(.NOT.((Q(LQ(LTD+((-2+OR_TD_PROT))-(0))).GT.PROTCUT)))GOTO 10053
      DPHI_DANITR_DDD=
     *( ((( ((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB
     *_TD_AK_N)))-((1.)+(0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))/((Q(L
     *Q(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(LQ(LTD+
     *((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(L
     *TD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+((-(((-(0.))/(Q(L
     *Q(LTD+((-2+OR_TD_PROT))-(0))))**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMET
     *A))-(0)))))/((Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_T
     *D_PROT))-(0)))+Q(LTD+OB_TD_AK_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANIT
     *R))-(0)))/(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))
     **(Q(LTD+OB_TD_GROW_MAX)))

      DPHI_DAMETA_DDD=
     *( (((-( (0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))
     */((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(L
     *Q(LTD+((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/
     *Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+(( ((Q(LQ(L
     *TD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD
     *+OB_TD_AK_S1)))-((( (Q(LQ(LTD+((-2+OR_TD_PROT))-(0))))-(0.))/(Q(LQ
     *(LTD+((-2+OR_TD_PROT))-(0))))**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMETA
     *))-(0)))))/((Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD
     *_PROT))-(0)))+Q(LTD+OB_TD_AK_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANITR
     *))-(0)))/(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))*
     *(Q(LTD+OB_TD_GROW_MAX)))

      DPHI_DPROT_DDD=
     *( (((-( (0.))*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))))/
     *((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))**2)*((Q(LQ
     *(LTD+((-2+OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q
     *(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))+((-(((- (Q(L
     *Q(LTD+((-2+OR_TD_AMETA))-(0)))))/(Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))
     *)**2)+(0.))*(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))))/((Q(LQ(LTD+((-2+O
     *R_TD_AMETA))-(0)))/Q(LQ(LTD+((-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK
     *_S1)))**2)*((Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))/(Q(LQ(LTD+((-2+OR_T
     *D_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))))*(Q(LTD+OB_TD_GROW_MAX)))
      PHI=(Q(LTD+OB_TD_GROW_MAX)*(Q(LQ(LTD+((-2+OR_TD_ANITR))-(0)))/(Q(L
     *Q(LTD+((-2+OR_TD_ANITR))-(0)))+Q(LTD+OB_TD_AK_N)))*(Q(LQ(LTD+((-2+
     *OR_TD_AMETA))-(0)))/(Q(LQ(LTD+((-2+OR_TD_AMETA))-(0)))/Q(LQ(LTD+((
     *-2+OR_TD_PROT))-(0)))+Q(LTD+OB_TD_AK_S1))))

C F_USE PHI = FPHIN FOR FPHI IF (PROT .GT. PROTCUT),
C       PHI = FNULL FOR FPHI IF (PROT .LE. PROTCUT)
10053 IF(.NOT.((Q(LQ(LTD+((-2+OR_TD_PROT))-(0))).LE.PROTCUT)))GOTO 10055
      DPHI_DANITR_DDD=(0.)
      DPHI_DAMETA_DDD=(0.)
      DPHI_DPROT_DDD=(0.)
      PHI=(0.)
10055 GOTO 10010
!
  if Zprint < Z2_Pr : FI(1) ; >
RETURN;
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/New_Macs-04.93 -> ../../Zinit/ZDL/zdl_New_Macros-04_93
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm.doc

****************************************************************
*********         DECLARATION LOCALE D'UN BANK         *********
****************************************************************
Version 28 aout 91, modifie sept. 91

   La declaration locale d'un BANK permet d'acceder a celui-ci comme si
il avait ete declare dans le precompilateur:
- Apres avoir fait un GET ou un FROM du bank, on accede a une variable
du bank par (LBank).Var_Name.
- Si des liens ont ete definis, on y accede de facon habituelle (@L..@..@..@). 
- Pour creer le bank on utilise l'instruction LIFT ...

   Avant la declaration du bank, l'instruction IMPLICIT ACCES TO BANK bk_name(LBk)
permet ensuite a l'utilisateur, apres avoir instantie l'adresse LBk, d'acceder
directement a une variable sans preciser le bank auquel elle appartient, c.a.d.
d'ecrire Var_Name au lieu de (LBank).Var_Name

   Plusieurs banks peuvent etre definis simultanement. Apres la declaration d'une
(ou d'une suite de) variable ou de liens, il faut donc preciser la classe auquelle
elle appartient.  (VAR ..... IN CLASS Bk_name; )

   On distingue dans la declaration 3 type de variables:
- LOCAL_VAR : ces variables sont directement rangees dans la zone donnees du bank
- LINK_VAR  : seule l'adresse de ces variables sont rangees dans ce bank; les valeur
elles memes sont rangees dans un autre bank.
- VAR       : ces variables ont une zone reservee dans la zone donnees du bank et ont
egalement un lien reserve permettant d'y acceder. On accede a ces variables via ce
lien, qui est initialise pour pointer sur la zone reservee dans la zone donnees du
bank; l'utilisateur peut redefinir l'adresse contenu dans ce lien.

                                                                       
   I--------------I          I--------------I        I--------------I  
   I              I          I              I        I              I  
   I              I          I              I        I              I  
   I              I          IXXXXXXXXXXXXXXI        I              I  
   I              I          IXXXXXXXXXXXXXXI        I              I     zones
   I              I          I    ......    I        I              I     liens
   I              I          IXXXXXXXXXXXXXXI        I              I  
   I              I          I              I        IXXXXXXXXXXXXXXI  
   I              I          I              I        I              I  
   I--------------I          I--------------I        I--------------I  
   I              I          I              I        I              I     bank adresse
   I--------------I          I--------------I        I--------------I  
   I              I          I              I        I              I  
   I              I          I              I        I              I  
   I              I          I              I        I              I  
   IXXXXXXXXXXXXXXI          I              I        IXXXXXXXXXXXXXXI  
   IXXXXXXXXXXXXXXI          I              I        IXXXXXXXXXXXXXXI     
   I    ......    I          I              I        I    ......    I     zones
   IXXXXXXXXXXXXXXI          I              I        IXXXXXXXXXXXXXXI     donnees
   I              I          I              I        I              I  
   I              I          I              I        I              I  
   I              I          I              I        I              I  
   I--------------I          I--------------I        I--------------I  
                                                                       

      LOCAL_VAR                 LINK_VAR                  VAR


   Chaque variable peut avoir 0, 1 ou 2 dimensions. La dimension d'une variable peut
etre compose de nombres entiers, de parametres FORTRAN ou d'autre variables (placees
entre crochets) de ce MEME bank. 
   La dimension d'une variable ne peut en aucun cas contenir une variable FORTRAN.

   Par defaut le type d'une variable (entier ou reel) suit l'incontournable regle du
FORTRAN (entier de I a N, reel autrement). Mais le type peut etre impose lors de la
declaration de la variable ( ... : INTEGER, ... :REAL, ... :CHARACTER_4)

   Le rangement des variables dans la bank suit l'ordre de leur declaration.

   Lorsqu'une variable est dimensionnee, on peut la sous-structurer en sous-tableaux
avec l'instruction ARRAY Ar_Name_1 IN ARRAY Ar_Name_2 (cf. doc)

   Controle d'indices des variables dimensionnees :
   Actuellement, quand on accede de facon standard ZBM a une variable dimensionne par
l'instruction (Lbank).Var_Name(indice) , aucun controle d'indice n'est effectue
( Fameux adage du programmeur Fortran inconnu : "Je veux pouvoir faire ce que je veux,
donc je dois pouvoir faire n'importe quoi" ). De meme quand on accede a l'adresse
d'une variable par @(Lbank.Cl_Name).Var_Name(indice) .
   Par contre, lorsque l'on decide d'acceder de facon implicite a un bank, on admet
que les taches les plus stupides puissent etre effectuees par la machine et non pas
par l'utilisateur (point de vue subversif, s'il en est un). Par defaut un controle
d'indice sera donc effectue sur les variables dimensionnees, sauf si l'utilisateur
demande le contraire per l'instruction INHIBIT CHECK ARRAY;


IMPLICIT ACCES TO BANK Cl_Name(Bank);
=====================================

arguments :
Bank    : Variable correspondant a l'adresse du bank
Cl_Name : Nom de la classe auquel appartiend le Bank

  Cette instruction permet a l'utilisateur d'acceder directement aux variables du
bank: on ecrira par ex.  X = Y au lieu de (Bank).X = (Bank).Y .Elle doit etre situee
avant le debut de la declaration de la classe.
   Avant d'utiliser les variables de ce Bank, il est indispensable (sous peine de
plantage) de definir l'adresse de ce bank avec les instructions GET .., FROM .., ..
Cette adresse doit etre instanciee pour l'ensemble des points d'entree le cas echeant.
   Un meme nom de variable ne peut etre defini dans plusieurs banks a acces implicite.
De meme un meme nom ne peut etre utilise pour une variable FORTRAN et une variable
dans un bank a acces implicite.


DECLARE CLASS Cl_Name [,Cl_Name_2...];
=====================================

arguments :
Cl_Name : Nom de classe 

   Debut de la declaration de la classe Cl_Name[ ,ou de la liste de classe] . Toute
declaration de classe doit etre termine avant la premiere instruction FTN executable
(lors de la declaration, on genere en effet des instruction FORTRAN
PARAMETER (....=....) ).


END DECLARE CLASS Cl_Name[,Cl_Name_2...];
========================================

arguments :
Cl_Name : Nom de classe

   Fin de la declaration de la classe Cl_Name[ ,ou de la liste de classe] .


ARGUMENT DES DECLARATIONS DE VARIABLES
======================================
                
Var_Name : Nom de variable. Doit etre compose uniquement de caracteres alphanumerique
ou du caractere souligne. Pas de restriction sur la longueur.

Cl_Name : Nom de classe dans lauqlle la variable est definies

type : type de la variable
  Les types autorises sont INTEGER , REAL (et bientot CHARACTER_4, DOUBLE)
  Si le type n'est pas defini, on prend la convention FORTRAN :
entier pour les variables dont la premiere lettre est de I a N, reel sinon.

nbcol, nblin : nombre de colonnes, nombre de lignes.
  Ces dimensions peuvent etre des expressions contenant des nombres entiers, des
PARAMETER FORTRAN, une autre variable (deja definie) du meme bank; dans ce cas, cette
variable doit etre entre crochet. Mais cela ne peut pas etre une variable FORTRAN.
  Lorsqu'une variable est utilisee dans une dimension, il est vivement conseille:
- que cette variable soit definie au prealable
- que cette variable soit une VAR ou une LOCAL_VAR
  Avant de creer le bank par l'instruction LIFT il faut que l'ensemble des variables
utilisees dans une dimension soient instantiees par l'instruction SET :
SET .Var_Name for Cl_name = Valeur;
Apres le LIFT, les variables instantiees par l'instruction SET auront la valeur
definie par cette instantiation.


ADRESSES DES VARIABLES
======================

    On peut acceder a l'adresse d'une variable Var_Name du bank Bk_Name de la classe
Cl_Name par
 @(Bk_Name . Cl_Name).Var_Name
et pour les variables dimensionnees:
 @(Bk_Name . Cl_Name).Var_Name(Ncol,Nligne)


not yet implemteed =={
    Lorsque l'on a fait un IMPLICIT ACCES TO BANK Cl_Name(Bank), on peut acceder
directement au variable par
 @Var_Name
et pour les variables dimensionnees:
 @Var_Name(Ncol,Nligne)
  }== end not yet implemteed


LOCAL_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
==================================================================================

   Definit une variable (ou une liste de variables) dans la zone donnee du bank.


LINK_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
=================================================================================
   Definit un lien de reference (ou un tableau de liens pour les variables
dimensionnees) qui contient la (ou les) adresse ou est rangee la variable. Cette
adresse, ou l'ensemble des adresses pour les variables dimensionnees, doivent etre
initialisees par l'utilisateur
   @(Bank . Cl_name).Var_name = .......;
Pour les variables dimensionnees:
   @(Bank . Cl_name).Var_name(Ncol,Nligne) = .......;


VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
============================================================================

   Definit un espace memoire dans la zone donnee du bank, definit un lien qui
contient l'adresse ou est rangee la variable. A l'initialisation (apres un LIFT),
ce pointeur est initialise au debut de l'espace memoire dans la zone donnee du bank
precedemment defini.
   Ce pointeur peut etre modifie par (aussi bien pour les variables non dimensionnees
que pour celle qui le sont) :
@(Bank . Cl_name).Var_name = Nouvelle_adresse ;
   Il faut que l'utilisateur verifie que cette Nouvelle_adresse pointe sur une zone
de donnees correspondant aux dimensions et au type de la variable
   

ARGUMENT DES DECLARATIONS DES LIENS
===================================

                
Lk_Name : Nom de lien. Doit etre compose uniquement de caracteres alphanumerique
ou du caractere souligne. Pas de restriction sur la longueur.

Cl_Name : Nom de classe dans lauqlle la variable est definies

dim : Dimension du tableau de liens. Cette dimension peut etre une expression
contenant des nombres entiers, des PARAMETER FORTRAN mais ni une autre variable
du bank ni une variable FORTRAN.


SLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
=========================================================

   Definit un lien de structure (ou un tableau de lien), de taille fixe.


RLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
=========================================================

   Definit un lien de reference (ou un tableau de lien), de taille fixe. 
!!!!!  attention !!!!! Pour l'instant, il ne faut surtout pas definir un RLINK apres
avoir definit des LINK_VAR dont la dimension depend d'une variable du bank; plantage
assure.



=========================
======= EXEMPLE 1 =======
=========================
"DATA BLOCK DECLARATION"
implicit acces to bank TD(LTD);
declare class TD;
  var
    Heater_capa       ,
    Heater_mass_rate  ,
    Heater_conductance : real in class TD;
  local_var
    Nb_Edge : integer in class TD;
  link_var
    T_Edge( [Nb_Edge] ) : real in class TD;
end declare class TD;
" "
!
! ==== Simulation Entry Point
! ==============================================================
FROM TR(LTR)    
< GET TD(LTD);  "  <====== A NE SUROUT PAS OUBLIER !!!!!!! "
  CP=Heater_capa; DMP=Heater_mass_rate; H=Heater_conductance;   
" " 
  .....
!
! ==== Initialization Entry Point, called by Zinit
! ==============================================================
ENTRY YHTRN(LTR);   
" "
   ......
! On instantie la variable Nd_Edge, utilisee dans le dimensionement
! d'autres variables du bank
  set .Nb_Edge for TD = (LTR).Nb_Tr_Var;
  Lift LTD of class TD under (2,0);
  @LTR@TR@TD@=LTD;  "Link TD bank to TR bank"
" "
RETURN; 
" "    
! ==== Initialization of structure parameters Entry Point, called after Zinit
! ==========================================================================
ENTRY SHTRN(LTR);   
  GET TD(LTD);  "  <====== A NE SURTOUT PAS OUBLIER !!!!!!! "
  ITV=0 ;
  SKIP THRU TV(LTV)    
  <  ITV=ITV+1;    ITR = (LTV).Cx_Tr_Var_Nb(1);
     NCX = (LTV).Nb_Cx_CX;
     READ THRU CX(LCX) (J=1,NCX)   
     <  GET SV(LSV);      GRASP ARRAY Eta_SV (LSV);
!       On initialise les adresses des LINK_VAR
        @(LTD.TD).T_Edge(ITR) = @ETA_SV(1);
     >
  >
RETURN; 
;  

=========================
======= EXEMPLE 2 =======
=========================

!
subroutine bidon;
!
PARAMETER (BDIM=5,C2DIM=10,XDIM=1,YDIM=11);
;
implicit acces to bank TD(LTD);
declare class TD;
  slink CP in class TD;
  rlink ET(19) in class TD;
  link_var RO(8):real in class TD;
  local_var IA in class TD;
  var A, B(BDIM), C ( [ia], C2DIM ), IB([ia]-1) in class TD;
  link_var ROU([ia]), RAT( [IA]-2, [IB(1)] ) : real in class TD;
  link_var NU : real in class TD;
  var X(XDIM), Y(YDIM) : real in class TD;
end declare class TD;
;
from TR(LTR)<
!
! On instantie les variables utilisees dans le dimensionement
! d'autre variable du bank
  set.ia for td=10;
  set.ib(1) for td=11;
  lift LTD of class TD under (0,0);
!
  print *,(LTD).IB( (LTD).IA -2);
  print *,(LTD).X(1);
!
  print *,RO(i), ROU(j), NU, RAT(i,j);
  print *,@ROU(I),@RAT(I,J);
  print *,IA, IB(IA-2);
  print *,X(1), Y(5);
!
  LCP = @LTD@TD@CP@;
  LETA_SV_2 = @LTD@TD@ET(2)@;
>


****************************************************************
*************    ACCES A DES VARIABLES STANDARD    *************
*************        POUR LES PROCESSEURS          *************
*************     DE CELLULE ET DE TRANSFERT       *************
****************************************************************
Version 28 aout 91, modifie sept. 91


   On verifie systematiquement que les banks instancies qui sont en argument des
instructions sont bien de la classe voulue (permet de diagnostiquer des inversions
d'argument ou autre).
   Ces instructions utilisent les instructions 'array ... in(..)..' et
'array ... in array ...'. On controle les indices lors des acces aux vecteurs
et aux matrices, sauf si l'utilisateur precise 'inhibit check array;' au debut
de son processeur.

META LANGAGE
============

Soit:
  Vct : Nom d'un vecteur (ETA,GAMMA,FI,OMEGA,FIZ)
  Mx  : Nom de matrice (ABt, Ct, D)

Alors la numerotation des composantes des matrices et de vecteurs suit
la logique suivante :
  Vct : Numerotation "naturelle".
  Vct_SV : Numerotation dans le CPLUG
  Vct_TV : Numerotation dans le TPLUG
  Mx_SV  : Un des indices correspond a une numerotation "naturelle", l'autre
          a une numerotation dans le CPLUG
  Mx_TV  : Un des indices correspond a une numerotation "naturelle", l'autre
          a une numerotation dans le TPLUG

Les arguments associes au GRASP de ces vecteurs et matrices suit egalement cette logique :
LTR :  Numerotation "naturelle" pour le transfert
LCL :  Numerotation "naturelle" pour la cellule
LTV (ou LTV2) : Numerotation dans le TPLUG
LSV : Numerotation dans le CPLUG

Par exemple ,
GRASP ARRAY MX_SV(LSV,LTR) for ...
                   ^   ^
                   |   |--- 2 eme indice (numero de ligne) dans l'ordre
                   |        naturel du transfert
                   |---- 1 er indice (numero de colonne) dans l'ordre du CPLUG


INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
==============================================

1 ) Instructions attachees au transfert
-------------------------------

grasp array fi,omega (LTR);
---------------------------

arguments:
LTR : bank instancie attache au transfert

  Cette instruction (en general au debut des points d'entrees T... et S...) permet
ensuite d'acceder directement au vecteur FI des variables de transfert et au
vecteur OMEGA.    
  Variables FORTRAN reservees utiles :
LO_FI, LO_OMEGA : adresses des banks FI et OMEGA
Autres variables FORTRAN reservees :
IO_O_FI, IO_FI, MO_FI, IO_O_OMEGA, IO_OMEGA, MO_OMEGA


copy array fi in fiz (LTR);
---------------------------

arguments:
LTR : bank instancie attache au transfert

Copy le vecteur FI dans FIZ. Cette instruction definit un tableau FIZ.
Si un grasp array FI... n'a pas ete fait, on le genere.

  Variables FORTRAN reservees utiles :
LO_FIZ : adresses du bank FIZ
Autres variables FORTRAN reservees :
IO_O_FIZ, IO_FIZ, MO_FIZ


2 ) Instructions attachee a une connexion
----------------------------------

Ces instructions se situent naturellement dans l'environement suivant :

from TR(LTR)
< skip thru TV(LTV)
  < NCX= ...;
    read thru CX(LCX) (J=1,NCX)
    < get SV(LSV);
         ....
      grasp array ETA_SV (LSV);
         ...
      grasp array Ct_SV (LSV,LTR) for (LCX);
         ...
    >
  >
>

grasp array ETA_SV (LSV);
-------------------------

argument:
LSV : bank instancie attache au C-Plug de la cellule connectee

Cette instruction permet d'acceder aux variables d'etat connectees au C-Plug (LSV),
dans la numerotation du C-Plug :
  ..... = ETA_SV(ISV)
avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
L'ecriture dans ETA_SV est interdite.
   Variables FORTRAN reservees utiles :
LO_CL_SV, LO_ETA_SV : adresses des banks CL et ETA
Autres variables FORTRAN reservees :
IO_O_ETA_FM, IO_O_ETA_CL, MO_O_ETA_CL


grasp array Ct_SV (LSV,LTR) for (LCX);
--------------------------------------

arguments:
LCX : bank instantie attache a cette connexion
LSV : bank instantie attache au C-Plug de la cellule connectee
LTR : bank instantie attache au transfert

Cette instruction permet d'acceder a la partie de la matrice Ct rattachee a un C-Plug de
la facon suivante:
Ct_SV( ISV, ITR) = ... ;
avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
     ITR : numero de la composante de la variables de transfert

                    d ETA_SV(ISV)
Ct_SV( ISV, ITR) = ---------------
                     d  FI(ITR)

Variables FORTRAN reservees utiles :
LO_CT : adresses du bank CT
Autres variables FORTRAN reservees :
IO_O_CT_IC, IO_CT, MO_CT


3 ) Instructions utilises pour les matrisses D
----------------------------------------------

Ces instructions se situent naturellement dans l'environement suivant :

from TR(LTR)      "Transfert origine"
<  skip thru TV(LTV)    
   <  NCX=(LTV).Nb_Cx_CX;    
      read thru CX(LCX) (J=1,NCX)   
      <  
! Matrice D 
         from CL(LCL) "ce FROM est indispensable; un GET ne suffit pas"
                      "Cellule connectee"
         < skip thru CX(LCX2)
           < get TV(LTV2);  "Transfert connecte"
             if ( (LTV2).Nb_Tr_Var.eq.0 ) to next LCX2;
             grasp array FIZ_TV (LTV2);
               ... = .... *FIZ_TV(..) ...;
             grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
             D_TV(1,1) = ....;
             D_TV(.. , ..) = ....;
           >
         >
! Fin matrice D
      >
   >
>


grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
-----------------------------------------------

arguments:
LTR  : bank instantie attache au "transfert origine"
LTV2 : bank instantie attache au T-Plug du "transfert connecte"
LCX2 : bank instantie attache a la connexion Cellule - "Transfert connecte"
LCX  : bank instantie attache a la connexion "Transfert origine" - Cellule
LCL  : bank instantie attache a la cellule par laquelle passe la connexion
       entre ces deux transferts

Chaine de la connexion :
LTR  -- LTV -- LCX -- LCL -- LCX2 -- LTV2
 ^                     ^              ^
 |                     |              |--- "Connected Transfer"
 |                     |--- "Connecting Cell"
 |--- "Origin Transfer"

Cette instruction effectue les operations suivante :
= Si le bank associe a la matrice D n'existe pas, elle le cree et elle positionne le mot
d'etat de la cellule precisant que celle-ci possede une matrice D (call sbit1( ...) )
= Si la matrcie D a ete compacte, elle la decompacte 
= Elle permet d'acceder a la partie de la matrice D rattachee a un Transfert
connecte au Transfert via une cellule connectante la facon suivante:
D_TV( ITV, ITR) = ... ;
avec ITV : numero d'ordre dans le T-Plug de la variable du transfert connecte
     ITR : numero de la composante de la variables du transfert origine

                     d  FI(ITR)
D_TV( ITV, ITR) = ---------------
                    d FI_TV(ITV)

Variables FORTRAN reservees utiles :
LO_D_TV : adresses du bank D
LO_TR2_D, LO_IC2_D : adresses du "Connected Transfer" et du IC associe a la connexion
          celulle - transfert connecte
LO_IC_D : adresse du IC associe a la connexion transfert origine - celulle
Autres variables FORTRAN reservees :
IO_O_D_CL, JO_O_D_CL, IO_O_D_NOT_TV, JO_O_D_NOT_TV, MO_O_D_NOT_TV, NO_O_D_NOT_TV


grasp array FIZ_TV (LTV2);
--------------------------

arguments:
LTV2 : bank instantie attache au T-Plug du transfert connecte

  Acces directe au vecteur fiz du transfert connecte dans la numerotation du T-Plug
L'ecriture dans FIZ_TV est interdite.



INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
==============================================

1) Instructions attachees a la cellule
--------------------------------

grasp array eta,gamma (LCL);
----------------------------

arguments:
LCL : bank instantie attache a la cellule

  Cette instruction (en general au debut des points d'entrees C... et R...) permet
ensuite d'acceder directement au vecteur ETA des variables d'etat et au
vecteur GAMMA.    
Variables FORTRAN reservees utiles :
LO_ETA, LO_GAMMA : adresses des banks ETA et GAMMA
Autres variables FORTRAN reservees :
IO_O_ETA, IO_ETA, MO_ETA, IO_O_GAMMA, IO_GAMMA, MO_GAMMA

2 ) Instructions attachees a une connexion
------------------------------------------

Ces instructions se situent naturellement dans l'environement suivant :

from CL(LCL)
< skip thru SV(LSV)
  < skip thru CX(LCX)
    < get TV(LTV);
         ....
      grasp array FI_TV (LTV);
         ...
      grasp array ABt_TV (LCL,LTV) for (LCX);
         ...
    >
  >
>

grasp array FI_TV (LTV);
------------------------

arguments:
LTV : bank instantie attache au T-Plug du transfert connecte

Cette instruction permet d'acceder aux variables de transfert connectees au T-Plug (LTV),
dans la numerotation du T-Plug :
  ..... = FI_TV(ITV)
avec ITV : numero d'ordre dans le T-Plug de la variable de transfert
L'ecriture dans FI_TV est interdite.

Variables FORTRAN reservees utiles :
LO_TR_TV, LO_FI_TV : adresses des banks TR etFI
Autres variables FORTRAN reservees :
IO_O_FI_FM, IO_O_FI_TR, MO_O_FI_TR


grasp array ABt_TV (LCL,LTV) for (LCX);
---------------------------------------

arguments:
LCX : bank instantie attache a cette connexion
LCL : bank instantie attache a la cellule
LTV : bank instantie attache au T-Plug du transfert connecte

Cette instruction permet d'acceder a la partie de la matrice ABt rattachee a un T-Plug de
la facon suivante:
ABt_TV( ICL, ITV) = ... ;
avec  ICL : numero de la composante de la variables de cellule
      ITV : numero d'ordre dans le T-Plug de la variable de transfert

                       -1   d FI_TV(ITV)
ABt_TV( ICL, ITV) =   A  * --------------  
                            d  ETA(ICL)

Variables FORTRAN reservees utiles :
LO_ABT, LO_TR_ABT, LO_IC_ABT : adresses des bank ABT, TR et IC
Autres variables FORTRAN reservees :
IO_O_ABT_CL, IO_O_ABT_NOT_TV, MO_O_ABT_NOT_TV


****************************************************************
*************      TABLEAUX DANS DES BANKS         *************
****************************************************************

****************************************************************
*****  Instructions pour les "developpeur" de macro,      ******
***  normalement non directement visible par l'utilisateur. ****
****************************************************************
Version 28 aout 91                                              


  On appel bank instantie, un bank ZEBRA d'une classe donne instantie par une
instruction ZBM (GET..., FROM..., LIFT..., SKIP..., ..)

  La definition d'un tableau XARRAY est une instruction executable qui permet 
ensuite d'acceder directement a la valeur ou a l'adresse d'une composante de ce
tableau.
    XARRAY(I,J) = ...    
    ..... = @XARRAY(I,J)
  L'utilisation d'un variable FORTRAN de meme nom XARRAY est donc interdite.
  Les macro O_XARRAY_NBCOL et O_XARRAY_NBLIN permettent d'acceder respectivement
au nombre de colonnes et de lignes du tableau XARRAY.
  Un tableau est ratache a un bank instantie : ne pas oublier de redefinir le
tableau lors d'une re-instantiation du bank 

EQUIVALENCE ENTRE UN TABLEAU ET UNE PARTIE DE BLOCK ZEBRA
=========================================================
                                                         
  Instruction pour les "developpeur" de macro, normalement non directement
visible par l'utilisateur.
  Instruction EXECUTABLE permettant de definir l'equivalent d'un tableau FORTRAN
a la fin d'un bank ZEBRA. Cette possiblite doit etre declarer dans le
precompilateur.

SYNTAXE :
--------
array XNAME[(NBCOL[,NBLIN])] in (LBank).Var_Name;

arguments:
XNAME : nom du tableau a 0,1 ou 2 dimensions
NBCOL : taille du tableau a 1 dimension ou nombre de colonne du tableau a 2 dim.
        La taille d'un tableau a 1 dimension peu etre 'libre' (NBCOL = *). La
        dimension est alors definie comme etant celle maximum possible dans 
        ce bank.
        Le nombre de colonne d'un tableau a 2 dimension doit obligatoirement
        etre definie.
NBLIN : nombre de lignes du tableau a 2 dim.
        Ce nombre peut etre 'libre' (NBLIN=*). Il est alors calcule pour remplir
        au maximum le block.
LBank : Bank instantie
Var_Name : nom de la variable, declare dans precomp, a partir de laquelle
        commence le pre-bank, c.a.d. l'espace memoire ou est range le tableau

  Le type du tableau XNAME est le type de la variable Var_Name.
  Au moment de la definition, les dimensions (NBCOL,NBLIN) sont conservee dans
des variables locales. Donc tant qu'un ARRAY n'est pas redefinit, ses dimensions
restent inchangees; attention a ne pas modifie l'instantiation du bank (par
un GET,...) sans redefinir le tableau.

  
EQUIVALENCE ENTRE UN TABLEAU ET UNE PARTIE D'UN TABLEAU DEJA DEFINI
===================================================================
  Instruction executable permettant de definir un tableau a l'interieur
d'un tableau deja existant. 

SYNTAXE :
--------
array XNAME[(NBCOL[,NBLIN])] in array X2 AT (ICOL[,ILIN]);

arguments:
XNAME : nom du tableau a 1 ou 2 dimensions
NBCOL : taille du tableau a 1 dimension ou nombre de colonne du tableau a 2 dim.
        Cette dimension peut etre 'libre' (NBCOL = *). Elle est alors
        calculee pour etre celle maximum possible dans ce tableau a 1 ou 2
        dimensions.
NBLIN : nombre de ligne du tableau a 2 dim. Cette dimension peut etre
        'libre' (NBLIN = *). Elle est alors definie pour etre celle
        maximum possible dans ce tableau a 2 dimensions.
X2    : Nom du tableau a l'interieur duquel on definit XNAME
ICOL,ILIN : definissent la position du tableau XNAME a l'interieur de X2 :
        XNAME(1,1) = X2(ICOL,ILIN)

  Le type du tableau XNAME est le type du tableau X2.

Soit O_X2_NBOL ET O_X2_NBLIN le nombre de colonnes et de lignes de X2.
Il faut obligatoirement que
 (ICOL -1 + NBCOL) =< O_X2_NBCOL et que (ILIN -1 + NBLIN) =< O_X2_NBLIN
Si NBCOL = *, alors on aura NBCOL = O_X2_NBCOL - (ICOL-1)
Si NBLIN = *, alors on aura NBLIN = O_X2_NBLIN - (ILIN-1)
                                                                                     
_____________________________   __         _____________________________   __        
| X2                         |   |         | X2                         |   |        
|                            |   |         |                            |   |        
|                            |   | ILIN    |                            |   | ILIN
|                            |   |         |                            |   |        
|          ____________      |  _|_        |          __________________|  _|_       
|          |XNAME     |      |   |         |          | XNAME           |   |        
|          |          |      |   |         |          |                 |   |        
|          |          |      |   | NBLIN   |          |                 |   | NBLIN  
|          |__________|      |  _|_        |          |                 |   |  = *
|                            |             |          |                 |   |         
|____________________________|             |__________|_________________|  _|         
                                                                                     
 <- ICOL -><- NBCOL ->                      <- ICOL -><--- NBCOL = * --->                    
                                                                                     


DIRECTIVE POUR  CONTROLER LES INDICES DES TABLEAUX
==================================================

* Principe du controle :
  Au moment de la declaration d'un tableau,on verifie que ses dimensions
ne sont pas trop grande vis a vis du block ou du tableau a l'interieur
duquel il est definit.
  L'ensemble des adresses et des dimension sont conservees dans des variables
locales pour ne pas etre modifie. Si les (ou une des) dimensions du tableau
ne sont pas fixee par l'utilisateur, elles seront definies comme les plus
grandes possibles. 
  Il suffit maintenant de verifier a chaque lecture/ecriture que les indices
courant ne depasse pas les dimensions du tableau. Comme on s'est assure que
les dimensions du tableau vis a vis de l'environement specifie sont corretes,
il est inutile de verifier les indices du block (ou du tableau) qui contienne ce
tableau.
  La verifications des indices est effectue avant l'ecriture dans le tableau,
mais apres la lecture. Donc si on a un test IF XNAME(..,..)... GOTO ... ou
IF XNAME(..,..)... THEN, on ne passera par les instructions effectuant le controle
d'indice sur le tableau XNAME que lorsque le test est faux.
  Il n'y a pas de verification d'indice dans les boucles FORTRAN implicite tel que
print *, (( ARRAY(I,J),I=..),J=..);

* Diagnostic genere en cas de depacement d'indice:

Lors de l'affichage d'un diagnostic, on affiche le nom de la routine dans lequel
l'erreur se produit, precede par un numero unique (genere par MORTRAN) permettant
de localiser facilement l'instruction incriminee.

tableau 1 dim:
tableau XARRAY de dimension IO_XARRAY
utilisation : XARRAY(I)
diagnostic :
  ZBM ERROR : READING (ou WRITING) OUTSIDE ARRAY XARRAY I IO_XARRAY
  Numero_unique Nom_de_routine

tableau 2 dim:
tableau XARRAY de dimension IO_XARRAY, JO_ARRAY
utilisation : XARRAY(I,J)
diagnostic :
  ZBM ERROR : READING (ou WRITING) OUTSIDE ARRAY XARRAY I J IO_XARRAY JO_XARRAY
  Numero_unique Nom_de_routine

* Syntaxe :

CHECK ARRAY (OP1=YES_NO[,OP2=YES_NO])[ARRAY1[,ARRAY2,..]];

  OP1, OP2 : Operation a 'checker' (RD ou WR)
  YES_NO   : (Y ou N)
  ARRAY1, ARRAY2 : Noms des tableaux
  -Si on precise une seule operation, le controle des indices pour
l'autre operation n'est pas modifiee.
  -Si on ne precise pas de nom de tableau, la directive s'applique
a l'ensemble des tableaux.
  -Cette directive peut etre situee  n'importe ou. Elle s'applique a la suite
du texte. Elle peut etre situee a plusieur endroit : le controle des indices
ne sera pas le meme dans tout le programme.
  - Par defaut on controle l'ecriture pour tous les tableaux, mais on ne verifie
pas la lecture: CHECK ARRAY (WR=Y,RD=N);

INHIBIT CHECK ARRAY;

  - Plus aucun controle sur les indices (ni a la creation, ni a la lecture, ni a
l'ecriture) n'est effetue et ne peut etre effectue pour tous les tableaux creer
a partir de cette directive. Les directives CHECK n'ont aucun effet.
  - Le code genere est beaucoup plus 'leger'
  (- Cette directive modifie les macros definissant les operations de lecture/
ecriture et l'operation de controle des dimensions initiales, macros appelees
lors de la creation d'un tableau)

* Exemple :

array X(..) in bank ...;
    .....;      Ici controle les indices uniquement lors de l'ecriture
    check array (RD=Y) X; [ ou check array (RD=Y,WR=Y) X;
    .....;      On controle aussi les indices de X lors de la lecture
    check array (RD=N,WR=N);
     ..... ;    On ne controle plus les indices lors des lect./ecriture,
                pour aucun tableaux.

 INTERDICTION D'ECRITURE DANS UN TABLEAUX
=========================================

WRITE INHIBIT ARRAY AR1[,AR2....];
  AR1,AR2 : Nom de tableaux

  - Interdit l'ecriture pour les tableaux dont le nom est specifie, non encore
crees. Aucun effet sur les tableau deja existant.


VARIABLES FORTRAN RESERVEES
===========================

Pour les test d'indices, 2 variables sont reservees : IO_AR_T1 et IO_AR_T2
(respectivement numero temporaire de colonne et numero temporaire de ligne)

Pour les tableaux
0 dim : aucune
1 dim : IO_XNAME : taille du tableau XNAME
2 dim : IO_XNAME,JO_XNAME : respectivement nombre de colonne et de ligne du tableau XNAME

Pour un  tableau XNAME a l'interieur d'un tableau X2. il y a en plus :
1 dim : MO_XNAME
2 dim : MO_XNAME et NO_XNAME : respectivement numero de colonne et numero de lignes
definissant la position du tableau XNAME a l'interieur de X2 (recopie locale des varibles
ICOL et ILIN lors de l'instuction ARRAY .... IN ARRAY ...; )
 


<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm0.doc

======  PDL 0 ========
======================

TOUTANKAMON juillet 89, octobre 89
=========================================================================

Toute tentative de formalisation etant contaire au bien connu pragmatisme
anglo-saxon, le francais parrait donc s'imposer comme le langage
naturel permettant de transcender MORTRAN.

FROM #(#) < instructions PDL;>
======================
avec #1 : type de block Zebra
     #2 : addresse du block Zebra

L'instruction FROM definit le type et l'adresse du block Zebra par defaut
dans les instructions PDL suivantes (comprises entre < >) correspondant
a un meme niveau d'emboitement logique.
L'instruction FROM peut etre emboitee.
ex: FROM TR(LTR) <GET TPLUG(LTV); >

GET #(#)
======================
avec #1 : type de block Zebra
     #2 : addresse du block Zebra

Va rechercher l'adresse #2 du block Zebra #1 en partant du block Zebra
par defaut (definit par FROM).
GET doit etre precede par un FROM.
ex: FROM TR(LTR) <GET TPLUG(LTV); >
donne  LTV=@LTR@TR@TV@

GET #(#)(#)
======================
avec #1 : type de block Zebra
     #2 : addresse du block Zebra
     #3 : indice dans le tableau de liens vers #1

Idem precedent, mais quand on a un tableau de liens vers les block Zebra
de type #1. Fournit l'adresse #2 du #3 eme block Zebra de type #1.
GET doit etre precede par un FROM.
ex:  FROM TPLUG(LTV) < GET CX(LCX)(J);>
donne LCX=@LTV@TV@CX(J)@

RIGHT SCAN #(#) < instructions PDL;>
======================
avec #1 : type de block Zebra
     #2 : addresse du block Zebra

Parcourt horizontalement les block Zebra de type #1 (chaine lineaire de
l'arbre) en recherchant le block suivant (NEXT), a partir de l'adresse #2 et
jusqu'a la fin de cette chaine. Au debut du block PDL correspondant a cette
instruction, on genere une instruction equivalente a FROM #1(#2): le block
Zebra par defaut est donc de type #1 a l'adresse #2.
RIGHT SCAN type(adresse) doit etre precede par le calcul de la valeur
initiale de l'adresse.
On peut sortir de la boucle par un EXIT, et aller directement a l'operation
d'increment de boucle  par un NEXT.
L'instruction RIGHT SCAN peut etre emboitee.
ex: FROM CL(LCL) <GET CPLUG(LSV2);>;
    RIGHT SCAN CPLUG(LSV2) <  GET CX(LCX2);>
donne
      LSV2=@LCL@CL@SV@
10007 IF(LSV2.EQ.0)GOTO10008
      LCX2=@LSV2@SV@CX@
10009 LSV2=@LSV2@NX@
      GOTO10007
10008 CONTINUE


LINK SCAN #(#)(#=#,#) < instructions PDL;>
======================
avec #1 : type de block Zebra
     #2 : addresse du block Zebra
     #3 : indice dans le tableau de lien
     #4 : premiere valeur de l'indice
     #5 : derniere   "    "      "

Parcour une liste de block Zebra de meme type (#1) a partir d'un tableau
de liens du block Zebra courant (definit par FROM). #3 est l'indice de
boucle permettant de parcourir ce tableau et #2 est l'adresse du Block
correspondant a cet indice.
LINK SCAN type(adresse)(#=#,#) doit etre precede par la definition du block
Zebra par defaut a l'aide de FROM ou de RIGHT SCAN
On peut sortir de la boucle par un EXIT, et aller directement a l'operation
d'increment de boucle  par un NEXT.
L'instruction LINK SCAN peut etre emboitee.
ex:   FROM TPLUG(LTV)
      <  LINK SCAN CX(LCX)(J=1,2) <  GET CL(LCL);>; >;
donne
      DO 10003 J=1,2
      LCX=@LTV@TV@CX(J)@
      LCL=@LCX@CX@CL@
10003 CONTINUE
10004 CONTINUE


============================================================================
====== TENTATIVE DE FORMALISATION DU FONCTIONEMENT DES MACROS MORTRAN ======
============================================================================


* On definit un block PDL : une instruction PDL et la liste correspondante
d'instructions comprises entre < >. Un block PDL a un identificateur
(le nombre PBI : PDL Block Identificateur).

* Strucure generale d'un block PDL :

        Operation de debut de block PDL
:BEGIN: if (Test de fin de boucle) GO TO :EXIT:
        Operations de debut de boucle

        Operations de l'utilisateur (entre < >)

:NEXT:  Operation d'increment de boucle
        GO TO :BEGIN:
:EXIT:  ca continue

* Contenu des piles (Stack)

S1 : type de block ou de boucle. La valeur est empilee par l'utilisateur
     et depilee par MORTRAN quand il rencontre un >
     - Valeur de 1 a 6 utilisees par MORTRAN
     - 7 : instruction RIGHT SCAN
     - 8 : instruction FROM
     - 9 : instruction LINK SCAN

S2 et S3 : pour les instructions de test IF, UNLESS, ELSEIF, ELSE

S4 et S5 : pour les instructions de boucle LOOP, WHILE, UNTIL, FOR, DO
           Ces piles sont egalement utilisees por le PDL
S4 : valeur de l'adresse :NEXT:
S5 : valeur de l'adresse :EXIT:

S6 : pour le PDL
     S6 contiend l'identificateur PBI du PDL block. Il correspond aussi
     a la valeur de :BEGIN: le cas echeant.

Lorsqu'une fin de "block logique" (>) est trouve, MORTRAN va lire la valeur
N contenu dans S1 est genere l'instruction $N. Chaque "block logique" de
type different a un numero N et une macro de fermeture $N ad-hoc.


* DEF_TYP_LOC #(#)
==================

Pour un numero PBI (Pdl Block Identificateur) donne, range dans S6, on
genere une macro permettant d'associer a ce nombre PBI l'adresse (#2) et
le type (#1) du block Zebra courant.
&';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
ex : si on a 10001 dans S6, DEF_TYP_LOC TBLK(LBLK) creera une macro
&'@$L10001@$T1001@'='@LBLK@TBLK@'
Voir aussi exemple detaille 1.


* FROM #(#)
===========

Definit le block Zebra par defaut pour un block PDL. Ne contiend qu'une
instruction de debut de block PDL (pas d'instruction de boucle).

&';FROM #(#)<'=';#L8#S1;#I#S6#N;DEF_TYP_LOC #1(#2);'
#L8#S1 : la valeur 8 identifiant le block FROM est range dans la pile 1.
#I#S6 : on definit de facon non embigue le nombre PBI en incrementant
     le compteur de MORTRAN. Ce nombre est range dans la pile 6.
#N : no rescan; les instructions precedentes ne comprennent pas des macro
     a reanalyser
DEF_TYP_LOC #1(#2) : on fait correspondre a ce block PDL un block Zebra par
     defaut

Macro de fermeture
&'$8'='#U6;' : on depille la pile 6
Voir aussi exemple detaille 1.


* GET #(#)
==========

Va chercher l'adresse #2 du block Zebra de type #1 a partir du block Zebra
par defaut.

&';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
#U6#S6 : on recupere la valeur de PBI dans la pile 6. On repile (reampile?)
ensuite pour laisser la place aussi propre que ....
#N : no rescan
#2=@$L#C@$T#C@#1@ : on cree le chemin permettant de calculer l'adresse #2.
Ce chemin contiend a la place de l'adresse et du type de block Zebra du
block par defaut une expression contenant le numero PBI.
si on a 10001 dans S6,
GET TX(LX) donnera
LX=@$L10001@$T1001@TX@
qui sera remplacer, grace a la macro cree par la derniere instruction
DEF_TYP_LOC, par :
LX=@LBLK@TBLK@TX@
Voir aussi exemple detaille 1.


* GET #(#)(#)
=============

Exactement le meme principe que GET #(#)
&';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'


* RIGHT SCAN #(#)
=================

Parcour une chaine lineaire de block Zebra de type #1, a partir de
l'addresse #2.

&';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
#U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
#U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
&'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'


++ operation de debut de block PDL
  ++ type de block logique
  #L7#S1 : la valeur 7 identifiant le block RIGHT SCAN est range dans la
           pile 1
  ++ definition du PBI, et des etiquettes :BEGIN:, :NEXT:, :EXIT:
  #I#S6 : on definit de facon non embigue le nombre PBI en incrementant
          le compteur de MORTRAN. Ce nombre est range dans la pile 6.
  #I#S4 : on incremente le compteur de MORTRAN et on le range dans la pile 4.
          Ce nombre correspond a l'adresse :NEXT:
  #I#S5 : on incremente le compteur de MORTRAN et on range ce
          nombre dans la pile 5. Ce nombre correspond a l'adresse de :EXIT:.
  #N : no rescan
  ++ definition du block Zebra locale par defaut
  DEF_TYP_LOC #1(#2) : on fait correspondre a ce block PDL un block
          Zebra par defaut

++ debut de boucle
  ++ etiquette :BEGIN:
  #U6#S6#C; : On recupere la valeur PBI et on la remet dans la pile. #C
  permet de generer l'etiquette :BEGIN: , en donnant la valeur PBI a BEGIN.
  ++test de fin de boucle
  IF(#2.EQ.0) : test de fin de boucle. Si il n'y a plus de block dans la
          chaine, l'adresse #2 est nulle
  GOTO#U5#S5#C : recupere la valeur de EXIT et genere GO TO :EXIT:

++ Generation de l'operation d'increment de boucle:
  ++ On genere une macro $:NEXT:$ qui contiend les operations a effectuer
     a la fin de la boucle, avant le GO TO :BEGIN:. Cette macro sera
     "appellee" par la macro de fermeture $7
  #U4#S4; : on recupere la valeur de :NEXT:
  &''$#C$''=''#C;#2=@#2@NX@;'' generation de la macro
    &''$#C$''= : nom de la macro generee
    ''#C; genere l'etiquette :NEXT:
    #2=@#2@NX@;'' : on genere le chemin pour chercher l'adresse du block
                    Zebra suivant

++ Macro de fermeture
   &'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'

   $#U4#C$; : on recupere la valeur de :NEXT: et on genere $:NEXT:$ (qui sera
     remplace par l'operation d'increment de boucle precedemment definie)
   GOTO#U6#C; : on recupere la valeur de :BEGIN: et on genere GO TO :BEGIN:
   #U5#C;' : on recupere la valeur de :EXIT: et on genere l'etiquette :EXIT:

   Les piles ont bien toutes ete depilees : celle 1 par MORTRAN , celles
   4, 5 et 6 par la macro de fermeture

* LINK SCAN #(#)(#=#,#)
=======================

Parcourt d'une liste de block Zebra de meme type (#1), dont les liens sont
regroupes dans un tableau de lien du block courant. L'indice (#3) permet
de parcourir ce tableau (de #4 a #5). L'adressee du block Zebra correspondant
a l'indice (#3) est #2.

&';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);DEF_TYP_LINK_SCAN #1(#2);'
&';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
&'$9'='#U4#C;#U6;#U5#C#N;'

La particularite de cette macro par rapport a la precedente reside
principalement dans le fait que, au debut de la boucle, on va checher
l'adresse du block Zebra correspondant a l'indice #3 a partir du block
par defaut avant l'instruction LINK SCAN. Apres avoir chercher cette
adresse et l'avoir rangee dans #2, on dit ensuite que ce nouveau block
est le block par defaut.
Il ne faut donc pas toucher a la pile 6 avant d'avoir lu l'adresse du
nouveau blok.

Ah oui ?!

++ operation de debut de block PDL
  ++ type de block logique
  #L9#S1 : la valeur 9 identifiant le block LINK SCAN est range dans la
           pile 1
  ++ definition des etiquettes :NEXT:, :EXIT:
  #I#S4 : on incremente le compteur de MORTRAN et on le range dans la pile 4.
          Ce nombre correspond a l'adresse :NEXT:
  #I#S5 : on incremente le compteur de MORTRAN et on le range
          dans la pile 5. Ce nombre correspond a l'adresse de :EXIT:.

++ debut de boucle
  ++ boucle sur l'indice #3
  DO #U4#S4#C #3=#4,#5; : on recupere la valeur de :NEXT: dans la pile 4
    et on fait une boucle DO ad-hoc
  #N; : no rescan
  GET #1(#2)(#3); : on va chercher l'adresse #2 du bloc Zebra type #1 et
    d'indice #3 dans le tableau de lien.
  DEF_TYP_LINK_SCAN #1(#2);' : macro definissant le nombre PBI et le block
    Zebra par defaut correspondant. Il faut faire cette macro plutot que
    d'ecrire directement les instructions #I#S6;DEF_TYP_LOC #1(#2); . En
    effet, si on ecrit directement les instructions, on met la nouvelle
    valeur du compteur de MORTRAN dans la pile avant de remplacer la macro
    GET, qui ne fait donc pas ce qu'il faudrait (cf. exemple 4)
  &';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
    &';DEF_TYP_LINK_SCAN #(#)'= : definition de la macro longuement
      presentee
    #I#S6 : on definit de facon non embigue le nombre PBI en incrementant
          le compteur de MORTRAN. Ce nombre est range dans la pile 6.
    DEF_TYP_LOC #1(#2);' : on definit le nouveau block Zebra par defaut,
          pour ce block PDL

++ macro de fermeture
   &'$9'='#U4#C;#U6;#U5#C#N;'

   #U4#C; : on recupere la valeur de :NEXT: et on genere l'etiquette :NEXT:
   #U6;   : on depille la pile 6
   #U5#C  : on recupere la valeur de :EXIT: et on genere l'etiquette :EXIT:
   #N:    : no rescan, les instructions precedentes de cette macro
            n'ayants plus besoin d'etre analysees

   Les piles ont bien toutes ete depilees : celle 1 par MORTRAN , celles
   4, 5 et 6 par la macro de fermeture


************************************************************************
****** EXEMPLE DETAILLE 1 ******** fichiers pdl0_ex1.mac et mac_pdl0_ex1
************************************************************************
********** FROM  &  GET **********

*** entree ****

&';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
&'$8'='#U6#N;'
&';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
&';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
&';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'

&T
;
FROM TR(LTR) <GET TPLUG(LTV); > ;


1********** MACROS 27.03.1980        ********** MACRO PROCESSOR MP2 - VERSION 2.2 MP2A

            &';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
            &'$8'='#U6#N;'
            &';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
            &';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
            &';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'

            &T
  0         ;
  0         FROM TR(LTR) <GET TPLUG(LTV); > ;
 PATTERN        ;FROM #(#)<
 PARAMETER 1    TR
 PARAMETER 2    LTR
 PATTERN        ;FROM TR(LTR)<
 REPLACEMENT    ;DEF_TYP_LOC TR(LTR);
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    TR
 PARAMETER 2    LTR
 PATTERN        ;DEF_TYP_LOC TR(LTR)
 REPLACEMENT    ; &'@$L10001@$T10001@'='@LTR@TR@';
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;GET #(#)
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;GET TPLUG(LTV)
 REPLACEMENT    ;LTV=@$L10001@$T10001@TPLUG@;
 PATTERN        @$L10001@$T10001@
 REPLACEMENT    @LTR@TR@
 ****       LTV=@LTR@TR@TPLUG@
 PATTERN        >
 REPLACEMENT    ;$8
 PATTERN        $8
 REPLACEMENT    ;

*** sortie ****
       LTV=@LTR@TR@TPLUG@

************************************************************************
****** EXEMPLE DETAILLE 2 ******** fichiers pdl0_ex2.mac et mac_pdl0_ex2
************************************************************************
********* RIGHT SCAN ***********

*** entree ****

&';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
&'$8'='#U6#N;'
&';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
&';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
&';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
&';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
#U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
#U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
&'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
&';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);DEF_TYP_LINK_SCAN #1(#2);'
&';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
&'$9'='#U4#C;#U6;#U5#C#N;'

&T
;
      FROM CL(LCL) <GET CPLUG(LSV2);>;
      RIGHT SCAN CPLUG(LSV2) <  GET CX(LCX2);>;
END;


1********** MACROS 27.03.1980        ********** MACRO PROCESSOR MP2 - VERSION 2.2 MP2A


            &';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
            &'$8'='#U6#N;'
            &';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
            &';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
            &';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
    S       &';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
    S       #U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
            #U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
            &'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
    S       &';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
            DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);DEF_TYP_LINK_SCAN #1(#2);'
            &';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
            &'$9'='#U4#C;#U6;#U5#C#N;'

            &T
  0         ;
  0               FROM CL(LCL) <GET CPLUG(LSV2);>;
 PATTERN        ;FROM #(#)<
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;FROM CL(LCL)<
 REPLACEMENT    ;DEF_TYP_LOC CL(LCL);
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;DEF_TYP_LOC CL(LCL)
 REPLACEMENT    ; &'@$L10001@$T10001@'='@LCL@CL@';
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CPLUG
 PARAMETER 2    LSV2
 PATTERN        ;GET #(#)
 PARAMETER 1    CPLUG
 PARAMETER 2    LSV2
 PATTERN        ;GET CPLUG(LSV2)
 REPLACEMENT    ;LSV2=@$L10001@$T10001@CPLUG@;
 PATTERN        @$L10001@$T10001@
 REPLACEMENT    @LCL@CL@
 ****       LSV2=@LCL@CL@CPLUG@
 PATTERN        >
 REPLACEMENT    ;$8
 PATTERN        $8
 REPLACEMENT    ;
  0               RIGHT SCAN CPLUG(LSV2) <  GET CX(LCX2);>;
 PATTERN        ;RIGHT SCAN #(#)<
 PARAMETER 1    CPLUG
 PARAMETER 2    LSV2
 PATTERN        ;RIGHT SCAN CPLUG(LSV2)<
 REPLACEMENT    ;DEF_TYP_LOC CPLUG(LSV2);10002;IF(LSV2.EQ.0)GOTO10004;; &'$10003$'='10003;LSV2=@LSV2@NX@;';
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    CPLUG
 PARAMETER 2    LSV2
 PATTERN        ;DEF_TYP_LOC CPLUG(LSV2)
 REPLACEMENT    ; &'@$L10002@$T10002@'='@LSV2@CPLUG@';
 PATTERN        ;IF#<
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX2
 PATTERN        ;GET #(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX2
 PATTERN        ;GET CX(LCX2)
 REPLACEMENT    ;LCX2=@$L10002@$T10002@CX@;
 PATTERN        @$L10002@$T10002@
 REPLACEMENT    @LSV2@CPLUG@
 **** 10002 IF(LSV2.EQ.0)GOTO10004
 ****       LCX2=@LSV2@CPLUG@CX@
 PATTERN        >
 REPLACEMENT    ;$7
 PATTERN        $7
 REPLACEMENT    ;$10003$;GOTO10002;10004;
 PATTERN        $10003$
 REPLACEMENT    10003;LSV2=@LSV2@NX@;
 **** 10003 LSV2=@LSV2@NX@
 ****       GOTO10002
  0         END;
 PATTERN        ;END;

          0 ERRORS

 NO REPLACEMENT
 **** 10004 END
  0

*** sortie ****

      LSV2=@LCL@CL@CPLUG@
10002 IF(LSV2.EQ.0)GOTO10004
      LCX2=@LSV2@CPLUG@CX@
10003 LSV2=@LSV2@NX@
      GOTO10002
10004 END


************************************************************************
****** EXEMPLE DETAILLE 3 ******** fichiers pdl0_ex3.mac et mac_pdl0_ex3
************************************************************************
******** LINK SCAN *********

*** entree ****

&'@#@NEXT@'='@#1@NX@'
&'@#@CPLUG@'='@#1@SV@'
&'@#@TPLUG@'='@#1@TV@'

&';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
&'$8'='#U6#N;'
&';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
&';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
&';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
&';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
#U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
#U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
&'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
&';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);DEF_TYP_LINK_SCAN #1(#2);'
&';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
&'$9'='#U4#C;#U6;#U5#C#N;'

&T
;
FROM TPLUG(LTV)
<  LINK SCAN CX(LCX)(J=1,2) <  GET CL(LCL);>;
>;
END;

1********** MACROS 27.03.1980        ********** MACRO PROCESSOR MP2 - VERSION 2.2 MP2A

            &'@#@NEXT@'='@#1@NX@'
            &'@#@CPLUG@'='@#1@SV@'
            &'@#@TPLUG@'='@#1@TV@'

            &';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
            &'$8'='#U6#N;'
            &';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
            &';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
            &';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
    S       &';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
    S       #U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
            #U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
            &'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
    S       &';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
            DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);DEF_TYP_LINK_SCAN #1(#2);'
            &';DEF_TYP_LINK_SCAN #(#)'='#I#S6;DEF_TYP_LOC #1(#2);'
            &'$9'='#U4#C;#U6;#U5#C#N;'

            &T
  0         ;
  0         FROM TPLUG(LTV)
  0         <  LINK SCAN CX(LCX)(J=1,2) <  GET CL(LCL);>;
 PATTERN        ;FROM #(#)<
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;FROM TPLUG(LTV)<
 REPLACEMENT    ;DEF_TYP_LOC TPLUG(LTV);
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;DEF_TYP_LOC TPLUG(LTV)
 REPLACEMENT    ; &'@$L10001@$T10001@'='@LTV@TPLUG@';
 PATTERN        ;LINK SCAN #(#)(#=#,#)<
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PARAMETER 3    J
 PARAMETER 4    1
 PARAMETER 5    2
 PATTERN        ;LINK SCAN CX(LCX)(J=1,2)<
 REPLACEMENT    ;GET CX(LCX)(J);DEF_TYP_LINK_SCAN CX(LCX);
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PARAMETER 3    J
 PATTERN        ;GET CX(LCX)(J)
 REPLACEMENT    ;LCX=@$L10001@$T10001@CX(J)@;
 PATTERN        @$L10001@$T10001@
 REPLACEMENT    @LTV@TPLUG@
 PATTERN        @#@TPLUG@
 PARAMETER 1    LTV
 PATTERN        @LTV@TPLUG@
 REPLACEMENT    @LTV@TV@
 PATTERN        @#@TPLUG@
 PARAMETER 1    LTV
 PATTERN        @#@CPLUG@
 PARAMETER 1    LTV
 PATTERN        @#@NEXT@
 PARAMETER 1    LTV
 PATTERN        @#@TPLUG@
 PARAMETER 1    TV
 PATTERN        @#@CPLUG@
 PARAMETER 1    TV
 PATTERN        @#@NEXT@
 PARAMETER 1    TV
 PATTERN        @#@TPLUG@
 PARAMETER 1    CX(J)
 PATTERN        @#@CPLUG@
 PARAMETER 1    CX(J)
 PATTERN        @#@NEXT@
 PARAMETER 1    CX(J)
 PATTERN        @#@TPLUG@
 PATTERN        @#@CPLUG@
 PATTERN        @#@NEXT@
 PATTERN        ;DEF_TYP_LINK_SCAN #(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PATTERN        ;DEF_TYP_LINK_SCAN CX(LCX)
 REPLACEMENT    ;DEF_TYP_LOC CX(LCX);
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PATTERN        ;DEF_TYP_LOC CX(LCX)
 REPLACEMENT    ; &'@$L10004@$T10004@'='@LCX@CX@';
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;GET #(#)
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;GET CL(LCL)
 REPLACEMENT    ;LCL=@$L10004@$T10004@CL@;
 PATTERN        @$L10004@$T10004@
 REPLACEMENT    @LCX@CX@
 PATTERN        @#@TPLUG@
 PARAMETER 1    LCX
 PATTERN        @#@CPLUG@
 PARAMETER 1    LCX
 PATTERN        @#@NEXT@
 PARAMETER 1    LCX
 PATTERN        @#@TPLUG@
 PARAMETER 1    CX
 PATTERN        @#@CPLUG@
 PARAMETER 1    CX
 PATTERN        @#@NEXT@
 PARAMETER 1    CX
 PATTERN        @#@TPLUG@
 PARAMETER 1    CL
 PATTERN        @#@CPLUG@
 PARAMETER 1    CL
 PATTERN        @#@NEXT@
 PARAMETER 1    CL
 PATTERN        @#@TPLUG@
 PATTERN        @#@CPLUG@
 PATTERN        @#@NEXT@
 ****       DO 10002 J=1,2
 ****       LCX=@LTV@TV@CX(J)@
 ****       LCL=@LCX@CX@CL@
 PATTERN        >
 REPLACEMENT    ;$9
 PATTERN        $9
 REPLACEMENT    ;
 **** 10002 CONTINUE
  1         >;
 PATTERN        >
 REPLACEMENT    ;$8
 PATTERN        $8
 REPLACEMENT    ;
  0         END;
 PATTERN        ;END;

          0 ERRORS

 NO REPLACEMENT
 **** 10003 END

*** sortie ****

      DO 10002 J=1,2
      LCX=@LTV@TV@CX(J)@
      LCL=@LCX@CX@CL@
10002 CONTINUE
10003 END

************************************************************************
****** EXEMPLE DETAILLE 4 ******** fichiers pdl0_ex4.mac et mac_pdl0_ex4
************************************************************************
******** LINK SCAN QUI NE MARCHE PAS *********

*** entree ****

&'@#@NEXT@'='@#1@NX@'
&'@#@CPLUG@'='@#1@SV@'
&'@#@TPLUG@'='@#1@TV@'

&';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
&'$8'='#U6#N;'
&';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
&';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
&';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
&';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
#U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
#U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
&'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
&';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);#I#S6;DEF_TYP_LOC #1(#2);'
&'$9'='#U4#C;#U6;#U5#C#N;'               ^
                                        /|\
                                         |
&T                                       |--  Funeste erreur
;
FROM TPLUG(LTV)
<  LINK SCAN CX(LCX)(J=1,2) <  GET CL(LCL);>;
>;
END;

1********** MACROS 27.03.1980        ********** MACRO PROCESSOR MP2 - VERSION 2.2 MP2A


            &'@#@NEXT@'='@#1@NX@'
            &'@#@CPLUG@'='@#1@SV@'
            &'@#@TPLUG@'='@#1@TV@'

            &';FROM #(#)<'=';#L8#S1;#I#S6;#N;DEF_TYP_LOC #1(#2);'
            &'$8'='#U6#N;'
            &';DEF_TYP_LOC #(#)'='; &''@$L#U6#S6#C@$T#C@''=''@#2@#1@'';'
            &';GET #(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1@;'
            &';GET #(#)(#)'='#U6#S6#N;#2=@$L#C@$T#C@#1(#3)@;'
    S       &';RIGHT SCAN #(#)<'='#L7#S1;#I#S6;#I#S4;#I#S5;#N;DEF_TYP_LOC #1(#2);
    S       #U6#S6#C;IF(#2.EQ.0)GOTO#U5#S5#C;
            #U4#S4; &''$#C$''=''#C;#2=@#2@NX@;'';'
            &'$7'=';$#U4#C$;GOTO#U6#C;#U5#C;'
    S       &';LINK SCAN #(#)(#=#,#)<'=';#L9#S1;#I#S4;#I#S5;
            DO #U4#S4#C #3=#4,#5;#N;GET #1(#2)(#3);#I#S6;DEF_TYP_LOC #1(#2);'
            &'$9'='#U4#C;#U6;#U5#C#N;'

            &T
  0         ;
  0         FROM TPLUG(LTV)
  0         <  LINK SCAN CX(LCX)(J=1,2) <  GET CL(LCL);>;
 PATTERN        ;FROM #(#)<
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;FROM TPLUG(LTV)<
 REPLACEMENT    ;DEF_TYP_LOC TPLUG(LTV);
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    TPLUG
 PARAMETER 2    LTV
 PATTERN        ;DEF_TYP_LOC TPLUG(LTV)
 REPLACEMENT    ; &'@$L10001@$T10001@'='@LTV@TPLUG@';
 PATTERN        ;LINK SCAN #(#)(#=#,#)<
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PARAMETER 3    J
 PARAMETER 4    1
 PARAMETER 5    2
 PATTERN        ;LINK SCAN CX(LCX)(J=1,2)<
 REPLACEMENT    ;GET CX(LCX)(J);;DEF_TYP_LOC CX(LCX);
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PARAMETER 3    J
 PATTERN        ;GET CX(LCX)(J)
 REPLACEMENT    ;LCX=@$L10004@$T10004@CX(J)@;   10004 au lieu de 10001
 PATTERN        @#@TPLUG@
 PARAMETER 1    $L10004
 PATTERN        @#@CPLUG@
 PARAMETER 1    $L10004
 PATTERN        @#@NEXT@
 PARAMETER 1    $L10004
 PATTERN        @#@TPLUG@
 PARAMETER 1    $T10004
 PATTERN        @#@CPLUG@
 PARAMETER 1    $T10004
 PATTERN        @#@NEXT@
 PARAMETER 1    $T10004
 PATTERN        @#@TPLUG@
 PARAMETER 1    CX(J)
 PATTERN        @#@CPLUG@
 PARAMETER 1    CX(J)
 PATTERN        @#@NEXT@
 PARAMETER 1    CX(J)
 PATTERN        @#@TPLUG@
 PATTERN        @#@CPLUG@
 PATTERN        @#@NEXT@
 PATTERN        ;DEF_TYP_LOC #(#)
 PARAMETER 1    CX
 PARAMETER 2    LCX
 PATTERN        ;DEF_TYP_LOC CX(LCX)
 REPLACEMENT    ; &'@$L10004@$T10004@'='@LCX@CX@';
 PATTERN        ;GET #(#)(#)
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;GET #(#)
 PARAMETER 1    CL
 PARAMETER 2    LCL
 PATTERN        ;GET CL(LCL)
 REPLACEMENT    ;LCL=@$L10004@$T10004@CL@;
 PATTERN        @$L10004@$T10004@
 REPLACEMENT    @LCX@CX@
 PATTERN        @#@TPLUG@
 PARAMETER 1    LCX
 PATTERN        @#@CPLUG@
 PARAMETER 1    LCX
 PATTERN        @#@NEXT@
 PARAMETER 1    LCX
 PATTERN        @#@TPLUG@
 PARAMETER 1    CX
 PATTERN        @#@CPLUG@
 PARAMETER 1    CX
 PATTERN        @#@NEXT@
 PARAMETER 1    CX
 PATTERN        @#@TPLUG@
 PARAMETER 1    CL
 PATTERN        @#@CPLUG@
 PARAMETER 1    CL
 PATTERN        @#@NEXT@
 PARAMETER 1    CL
 PATTERN        @#@TPLUG@
 PATTERN        @#@CPLUG@
 PATTERN        @#@NEXT@
 ****       DO 10002 J=1,2
 ****       LCX=@$L10004@$T10004@CX(J)@
 ****       LCL=@LCX@CX@CL@
 PATTERN        >
 REPLACEMENT    ;$9
 PATTERN        $9
 REPLACEMENT    ;
 **** 10002 CONTINUE
  1         >;
 PATTERN        >
 REPLACEMENT    ;$8
 PATTERN        $8
 REPLACEMENT    ;
  0         END;
 PATTERN        ;END;

          0 ERRORS

 NO REPLACEMENT
 **** 10003 END

*** sortie ****

      DO 10002 J=1,2
      LCX=@$L10004@$T10004@CX(J)@
      LCL=@LCX@CX@CL@
10002 CONTINUE
10003 END


<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_manual.doc
                            ----------------------------------------------------
 pour version ZBM.mac.3       ZBM et ALLIS units of same level -  USER'S GUIDE             
                            ----------------------------------------------------    31 Aout 90.
             ( Bank Acces Facility  et ADA Like Language Implementation Specification ) 


                                                                                 modifs/.2 col.*
 ( couches par hierarchie decroissante)
------------------------- NIVEAU N ---------------------------------------------------

BANK Blocs (<>)
...............
        <> correspond a un bank pris comme origine des chainages.
from CX(LCX2)
<  .....
   .....     exit from LCX2;
>                          
        . Au niveau 0, cree l' origine de base CX a partir de laquelle seront chainees
          toutes les references a des banks.  exit from INTERDIT a ce niveau.
                                              -------------------------------
        . Aux niveaux suivants, calcule en plus l' adresse de la nouvelle origine.
          ( skip thru et read thru ont le meme effet.)
skip thru TV(LTV)
<  .....
   .....  to next LTV; 
   .....  exit from LTV;
>
        . Calcule et definit TV(LTV) comme nouvelle origine de bank.
        . to next ou > provoque le bouclage sur LTV = next(LTV) jusqu a ce que LTV=0.
read thru CX(LCX) (J=1,NCX)
<  .....
   .....  to next LCX;
   ....   exit from LCX;
>
        . Calcule et definit CX(LCX) comme nouvelle origine de bank.
        . Boucle sur un tableau de link sur des CX (cf TV Bank).
        . to next passe au CX suivant, sans verification de valeur de LCX.
        . Exige de declarer ~CX(.)~ dans le bloc LOCAL_VALID_CHAINS(voir cette commande).

*****  DIAGNOSTICS ET ERREURS :
        Ces trois instructions interdisent l' alteration des variables d' adresse
    declarees dans le bloc associe <>. Une tentative declenche le message :
            '** ZBM ERROR ** Z-AD SHOULD NOT BE ALTERED'  

AUTRES INSTRUCTIONS (hors blocs<>)
..................................

get IC(LIC)
        . Calcule LIC a partir de l' origine courante.
        . Tolere tout alteration de LIC.
*****  PAS DE DIAGNOSTIC .

ALLIS  instructions associees a ce niveau de ZBM.
.................................................  
<
   <
     <
         execute STEADY;
     >
   >
>;
(  out of the zero-level FROM bloc  )
procedure STEADY 
< 
   .....
   .....
>  
        .execute sera remplace par un GOTO Fortran pointant sur l' instruction
        de declaration de la procedure STEADY. Ainsi, la procedure se trrouve situee
        en dehors de tout Bank bloc<>, et donc, toutes les variables d' adresse devront
        etre calculees avant l' execute.
        from,read thru, skip thru et get sont interdites. Les chainages sont deconseilles,
        et ne pourront etre faits qu aun niveau ZBM de N-1, par @ , @@ et next. 

*****  DIAGNOSTICS ET ERREURS :
        Toute tentative d' utiliser les instructions ZBM de chainage provoque le message
    d' erreur:
            '** ALLIS ERROR ** ZBM INSTRUCTION FORBIDDEN IN NON AT-PROCEDURE'
    
                   
<
   <
     <
        at LCX2 execute STEADY;
     >
   >
>;
(  out of the zero-level FROM bloc  )
procedure STEADY at LCX_LOC                                                                    *
< from CX(LCX_LOC)                                                                             *
  <   .....
      .....
  >
>  
        . Procedure et appel de procedure marquee, cad ayant une origine.   

*****  DIAGNOSTICS ET ERREURS :
        Comme pour procedure et execute, la demande d' execution d' une procedure
    non definie provoque un message d' erreur :
            '** ALLIS ERROR ** PROCEDURE XXXXX IS UNDEFINED'
        La definition d une procedure sans demande d' execution associee genere le message:
            '** ALLIS WARNING ** PROCEDURE XXXXX IS UNUSED'
                                ( sous forme de commentaire ) 
        Une at-procedure, comme une procedure, doit etre declaree entre
     le >; zero-level from et la carte END; . Elle exige de declarer un from <> bloc
     qui sera 0-level.L' adresse de l' origine est pure,ent symbolique et sera remplacee par   *
     une variable locale ( par exemple ici L10014, cf l'instruction ALLIS: LOCAL_VARIABLE ),   *
     sans qu' il soit necessaire de la declarer LOCALe.                                        *
        L absence de from<> declenche un message d' erreur :
            '** ALLIS ERROR ** AT-PROC SHOULD CONTAIN A 0-LEVEL FROM< '   


                  
------------------------- NIVEAU N -1 ------------------------------------------------ 

next(LTV)
        . Identique a @LTV@NEXT@ ou @LTV@NX@
        . remplacee par l' adresse du bank NEXT de LTV-bank. 

local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                   [~CX~IC~],
                   [~etc~FM*~IN~etc~],                                                         *
end_chains; 
        .  Declaration des chaines de graphes orientes de gauche a droite.
        . Permet de referencer tout bank (ex TV) ayant une origine a sa gauche
          dans une chaine de la liste ( ex CL,SV ou CX).
        . La premiere chaine de la liste permettant le chainage sera retenue. 
        . La presence de * signifie adressage indirect,et genere,au lieu de OFMIN,             *
          + IQ(adresse de FM+9)+OFMIN (Le 9 etant dans une macro $CO$ := 9 ).                  *
        . Une seule declaration de liste est autorisee par subroutine.                         *
        . La presence de CX(.) est requise pour la commande READ THRU. Dans ce cas.            *
        . il est inutile de repeter la chaine sans CX(.).

*****  DIAGNOSTICS ET ERREURS : 
        Toute tentative de declarer plus d' une liste sera sanctionnee par le 
      message d' erreur:
            '** ZBM ERROR ** ONLY ONE CHAIN LIST BLOC ALLOWED PER SUBROUTINE'

@@      
        . exemple :   @LCL@CL@@CX@
        .             remplace par @LCL@CL@SV@CX@
            donc, @@ interpose dans la chaine la premiere chaine de la liste declaree dans
        local_valid_chains permettant d' expliciter la chaine complete.
          exemples valides :    @LCL@CL@SV@@TR@
                                @LCL@CL@@TV@TR@
*****  DIAGNOSTICS ET ERREURS :  
        Si la liste ne permet pas d' expliciter la chaine, @@ declenche le message d' erreur:
            '** ZBM ERROR ** NO PATH FROM xxx TO yyy IN CHAINS' 


------------------------- NIVEAU 0 ------------------------------------------------ 

@LCL@CL@SV@CX@TV
        . Generation de l'adresse permettant de referencer le bloc TV a partir
          de l origine CL d' adresse LCL.
        . Ne necessite aucune declaration de local_valid_chains.
        ( remplacee par LQ(LQ(LQ(LCL-OCLSV)-OSVCX)-OCXTV) ).   
*****  AUCUN DIAGNOSTIC .
                                                                                      . page 3.

---------------------------------------------------------------------------------              *
              A  L  L  I  S       other instructions .                                         *
---------------------------------------------------------------------------------              *



                                                                                               *
LOCAL_VARIABLES: (R_DROIT,ATTENDS-TOI,I_ES-TU?) ;                                              *
                                                                                               *
        .  Remplace dans le texte subsequent ces trois variables par un nom unique reprenant   *
           la meme initiale ( pour type implicite FORTRAN), comme par exemple:                 *
            R_DROIT         -->  R10016                                                        *
            ATTENDS-TOI     -->  A10017                                                        *
            I_ES-TU?        -->  I10018                                                        *
        .    (La declaration se fait n' importe ou, et la substitution reste valide            *
                 jusqu a la carte END;)                                                        *
                                                                                               *
                                                                                                      
Ensemble d instructions pour emuler le ADA CASE instruction:                                   .
------------------------------------------------------------                                   .
                                                                                               .
TYPE  mach_in OF (truc_1,truc_2,truc_3);  
        .   Instruction de declaration, declaree avant toute instruction FORTRAN executable.
                                                                                               e
       ...                                                                                     t
mach_in := truc_3;                                                                                
      .   Instanciation de la variable mach_in (il va sans dire que le signe = va aussi).                                                s                   .
      ...                                                                                      u
                                                                                               i
CASE mach_in IS                                                                                v
<  WHEN truc_1  <... >                                                                         a
   WHEN truc_3  < execute ...  ;   >                                                           n
   WHEN_OTHERS  <   print*' error' >                                                           t
>                                                                                              e
        .   Permet de manipuler la variable symbolique mach_in en lui donnant des              s
            valeurs symboliques truc_1 etc  . 
        .   Analogue a l' instruction IF..ELSEIF..ELSEIF..ENDIF;                               .
        .   WHEN_OTHERS termine obligatoirement le CASE ... IS bloc.                           .
        .   Pour les inconditionnels du FORTRAN, elles sont remplacees par I10011 et           .
            incrementees dans l' ordre de la liste:                                          
            et donc truc_3=truc_2 +1=truc_1 +2 (ne pas en abuser).
        .   De meme, : truc_1=mach_in +1 ...
         

Boucles DO a multiples indices: 
-------------------------------
DO ((...(I=1,12,3),J=J1,J2)...)<...>;
        .   Un seul <> bloc pour plusieurs boucles imbriquees. Equivalent a:
            DO ...
            <
            ...
               <  DO J=J1,J2
                  < DO I=1,12,3
                    ...
                  >
               >
            ...
            >; 
            c.a.d comme la regle d' indices de PRINT(((A(i,j),i=..)j=..)                       *


                                
                             --------------------------------- 31 Aout 90 ---------------------*

======================= ADDITIONS DE DECEMBRE 90 ===============================================

Nouveau GET pour les pointeurs en milieu de bank:
-------------------------------------------------
  Instruction GETI. Le precompilateur reconnait les indexages indirect, cad les
        *links, avec un offset correspondant. Example: GETI AG(IPAG) genere un get AG(L1000x),
        et IPAG=L1000x+un offset qui est conventionnellement .In_AG ( ou In_[nom de classe].
        cf utilisation dans l' exemple ci dessous.

Utilisation de symboles pour les Datas de Banks:
------------------------------------------------
Convention generale:  Un Bank-name sera assimile a une classe de Bank.
                      Tout objet cree sera designe par sa L-adresse:
                      Ainsi, CL(LCL) exprime que l' objet LCL est de classe CL
                      Sub-banks : Les if SO ou TO (structure ou Transfer) sont donc
                      des sous-classes . (de CL ou TR par exemple).

L' utilisation des symboles intervient a deux moments de la vie d' un Bank-objet:
  avant sa creation, ou ils sont associes a sa classe. Apres creation, ou ils sont
  associes a l' objet. Leur utilsisation est directement commentee dans l' exemple suivant.
+DECK,CTHS. 
 SUBROUTINE CTHS(LCL);  
"=====================" 
&F  
+CDE,Q,ZPERMQ.
+CDE,Z.
+CDE,OTR,OTPLUG,OCPLUG,OCX,OCL,OIC.
      DIMENSION NAME(2) 
&M
+SEQ,OSUCL,OSUTV,OSUIC,OSUCX,OSUET.                   ..... Thesaurus des symboles des classes
LOCAL_VALID_CHAINS:[~CL~SV~CX~TV~TR~],                      utilisees' ici :CL,TV,IC,CX,ET.
                   [~SV~CX~IC~],
                   [~CL~GA~],
                   [~CL~AB~],
END_CHAINS;
 "  "   
;
FROM CL(LCL)
<  GETI GA(IPAG); GET AB(IPAB);                       .... utilisation de GETI
      "   GAMA IS 0. FOR dE PROCESSING "    
   Q(IPAG+1)=0. ;   
      " A-1B MATRIX SET TO ZERO"    
   SKIP THRU CX(LCX)    
   <  GET TV(LTV); IF ((LTV).Nb_Tr_Var.EQ.0) TO NEXT LCX; ..Il faut donc programmer en utilisant 
      GET IC(LIC); IROW=(LIC).LTr_in_Cl+(LCX).L_IF; ICOL=1;    le ZOOM Bank Description manual.
      J=IROW+ICOL; Q(IPAB+J)=0. ;   
   >    
;   
"    PRINT *,' CTHS->, LZ',LZ"  
" " 
RETURN; 
"-ENTRY"    
ENTRY ITHS(LCL);    
" "                                                 .... On va creer un Objet CL(LCL). Il faut pre-seter
"-LIFT CL BANK;NO DESCRIPTION WORDS"                  des grandeurs apparaissant dans Ndatas du Z-B-D.m.
Set .SO.N_Desc for CL = 0;                          .... N_Desc en fait partie, pour les deux SUB-Banks
Set .TO.N_Desc for CL = 0                                possibles .SO. ou .TO.
" "                                                .... Alors, l objet peut etre lifte, car les longueurs
Lift LCL of class CL under (LZUPS,-JZLNKS);           fixes sont connues du PRECOMPILATEUR. Cette
" "                                                   instruction genere les IF_SO ...pour les Sub-class.
"  LCL bank filling "
Point on CL(LCL);                                  ..... Pour permettre la version courte, il faut
CALL OHL2I('CTHS..',NAME);                               pointer sur un OBJET.(un seul a la fois)
CALL OCLN(NAME,(LCL).Types(1));  
..Types(2)  = 040104;                              ..... Version courte. Seuls les dimensions declarees
"-                      (DG/DETA) MATRIX IS SINGULAR"       dans le Z-B-D manual sont authorisees.Par
CALL SBIT1(IQ(LCL),3);                                 contre, comme en FORTRAN, pas de check d indices.
..Nb_St_Var        = 1;    
..Nm_Cl            = JZNAME;   
..Cd_Cl            = JZCODE;   
If_SO                                              ..... Equivalent a IF JZESO.EQ.3  <>
  <  ..SO.Nxt_lvl_Ad    = 3;    
     ..SO.N_desc        = (CL).FS.SO.N_Desc   >    ..... La partie droite utilise un symbole de classe,
If_TO                                                             cf plus bas.
  <  ..TO.N_desc        = (CL).FS.TO.N_Desc   >
" " 
" test" PRINT *,..NDatas,..Nlinks,..NStructs,..ZForm,..Ident; .... Utilisation des ZEBRA infos(cf plus bas)
RETURN; 
"-INITIALIZATION OF STRUCTURE PARAMETERS"   
ENTRY RTHS(LCL);    
RETURN; 
" " 
>   
END;

DES MATRICES FOR USERS
======================

  GRASP Ct: Dans l exemple, tout est clair (Ct_SV est le symbole PRECOMP.
  --------
Point on TD(LTD);
"- C+ FILLING"  
PROCEDURE FILL_CT  AT LCXLOC  
<  FROM CX(LCXLOC)
   < GRASP CT(LC,LSV,LCX) AND FIX NROWS FOR .Ct_SV=(LSV).Nb_St_Var;
   (LC).Ct_SV(ITV,1)=
     CP*( RMRATE +
         .5*..Data(ITEMP+ITV)*RK1/RMRATE*(RNUM1/DEN-DEN1/DEN2*RNUM)
                                                                     )*DTIME/2.;

 (LC).Ct_SV(ITFOL,1)=-(LC).Ct_SV(ITV,1);" on suppose que ITV et ITFOL pointent
                                        sur deux eta du CPLUG associe."
   >  
>
" "       
  Pour la matrice AB (provisoirement):
  ------------------------------------
      GET IC(LIC); IROW=(LIC).LTR_in_Cl +(LCX).LFI_in_IF +1;
      DIMENSION AB(IPAB).AB_Mx(*,NN);  "NN est suppose bien calcule.  
      CALL UCOPY(Q(IPABLR+1),(IPAB).AB_Mx(1,IROW),NN); 
                                   AB_Mx, qui pourrait devenir AB_IC_CX par GRASP it
                                   est le nom PRECOMP actuel.

   De quelques details:
   --------------------
   Pour le lecteur interesse, les macros pour l objet cree sont du type: 
+KEEP,OSUCL.
&'(#.CL).Types'='IQ(#1+1)'
&'(#.CL).Types(#)'='IQ(#1+#2)'                  .... Variable dimensionnee.
&'(#.CL).IP_ETA'='IQ(#1+4)'
&'(#.CL).Nb_St_Var'='IQ(#1+5)'

-------------------------
&'(CL).FS.NLinks'='9'                             .... Longueur fixe pour la classe.
&'(CL).FS.NStructs'='5'                            (.FS. veut dire : "For SET FOR" instruction).
&'(CL).FS.IO_Check'='0'
&'(CL).FS.SO.NDatas'='(CL).FS.SO.N_desc+15'       .... Longueur a fixer pour l objet. Ici, pour une
&'(CL).FS.TO.NDatas'='(CL).FS.TO.N_desc+9'                      sub-classe donnee.
&'OND=(CL).FS.NDatas;'='If_SO<OND=(CL).FS.SO.NDatas>;.... Cette macro remplace le OND= genere par LIFT si  
If_TO<OND=(CL).FS.TO.NDatas>;'                          le Z-B-D man. decrit deux (au plus) sub-classes.

&'Lift # of class # under(#,#)'= genere les instructions:
                                'ONL=(#2).FS.NLinks;.... qui montre comment les 5 variables reservees heritent
                                 ONS=(#2).FS.NStructs;  de l' information du PRECOMPILATEUR via les OSU... seq.
                                 OND=(#2).FS.NDatas;   A savoir, Nbres de Liens, Structures,Datas, IOcheck(=0)
                                 ONIO=(#2).FS.IO_Check;
                                 OCHIDH=''#2  '';      et le nom du Format de MZForm associe au nom de Classe.
  et :Lift$(#1,#3,#4);'
&'Lift$(#,#,#);'=   qui elle meme genere :
                 'CALL OQZERO(#1,#2,#3,OCHIDH,ONL,ONS,OND);'.... semblable a MQZERO, sans tableau.
Ca veut dire que le lecteur bricoleur peut lui-meme instancier les 5 grandeurs ZEBRA-reservees et faire Lift$.

Recuperation d' information ZEBRA par symboles.
===============================================
   Ils sont les suivants:
.NDatas
.NStructs'                   
.NLinks                            
.ZForm
.Ident
.Status_Wd                      (Les macros sont dans ZBM.mac)
(  Pour completer, il manque les SET status bits: une discution s' impose).
                                                         ........................................ RAMSES 26/12/90 .
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_user_list.doc
  ********************************************************************
  *********************  LISTE DES COMMANDES   ***********************
  ********************************************************************
  ********      Utlilisable dans les processeurs et dans    **********
  ********   certaines partie du noyau de ZOOM (ZOOM KER)   **********
  ********************************************************************
  remise a jour mai 93

  ====================================================================
  ======================   L'IMPRESSION FACILE   =====================
  ====================================================================

     Z_Pr : Var_List;

     Z2_Pr : Var_List;

     Print_Class_CL(LCL);

     Print_CL_ID(LCL);

     CL_ID(LCL)

     Print_Class_TR(LTR);

     Print_TR_ID(LTR);

     Print_SV_CL_ID(LSV);

     Print_TV_TR_ID(LTV);

     FM_ID(LFM)

   arguments :
     Var_List : Liste des variables à imprimer, séparées par des virgules
     LCL : adresse de la cellule
     LTR : adresse de la cellule
     LSV : adresse du C-Plug de la cellule
     LTV : adresse du T_Plug du transfert
     LFM : adresse de la famille

  ====================================================================
  ====================   PREMISSES D'UN P.D.L.   =====================
  ====================================================================
  =======      Langages dédié à l'écriture des processeurs    ========
  ====================================================================

  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

    Print_CL_ID (LCL);

    Print_Class_CL(LCL);

    CL_ID(LCL)

    grasp array eta,gamma (LCL);

    grasp array FI_TV (LTV);

    Print_TV_TR_ID(LTV);

    grasp array ABt_TV (LCL,LTV) for (LCX);

    Set_signed_ABt (LCL);

    Zinit_Entry {Proc_Name} ( CL_Var = ...., ...);

    Parameter_Entry;

  arguments:
    LCL : bank instantie attache a la cellule
    LCX : bank instantie attache a la connexion cellule - T-Plug
    LTV : bank instantie attache au T-Plug du transfert connecte


  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

    Print_TR_ID(LTR);

    Print_Class_TR(LTR);

    grasp array fi,omega (LTR);

    Print_SV_CL_ID(LSV);

    grasp array ETA_SV (LSV);

    grasp array Ct_SV (LSV,LTR) for (LCX);

    Zinit_Entry {Proc_Name} ( TR_Var = ...., ...);

    Parameter_Entry;

  arguments:
    LTR : bank instantie attache au transfert
    LCX : bank instantie attache a la connexion transfert - C-Plug
    LSV : bank instantie attache au C-Plug de la cellule connectee

  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT AVEC MATRICE D
  ==============================================================

    Print_TV_TR_ID(LTV2);

    grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);

    grasp array FIZ_TV (LTV2);

    grasp array OMEGA_TV(LTV2);

    copy array FI in FIZ (LTR);

    copy array FIZ in FI (LTR);

    grasp array FIZ (LTR);

  arguments:
    LTR  : bank instantie attache au "transfert origine"
    LTV2 : bank instantie attache au T-Plug du "transfert connecte"
    LCX2 : bank     "        "  a la connex. Cellule-"Transfert connecte"
    LCX  : bank     "        "  a la connex. "Transfert origine"-Cellule
    LCL  : bank instantie attache a la cellule par laquelle passe la
           connexion entre ces deux transferts


  ====================================================================
  =========================   A. L. L. I. S. =========================
  ====================================================================

  DECLARATION DE VARIABLES LOCALES
  ================================
  LOCAL_VARIABLES: (Var_Name1,Var_Name2,Var_Name3,...) ;

  ==  CASE ==
  ===========
  TYPE  mach_in OF (truc_1,truc_2,truc_3);
    .   Instruction de declaration, declaree avant toute instruction
 FORTRAN executable.

  mach_in = truc_3;
    .   Instanciation de la variable mach_in

  CASE mach_in IS
  <  WHEN truc_1  <... >
     WHEN truc_3  <... >
        .....
     WHEN_OTHERS  <... >
  >

  PROCEDURE
  =========
  Appel de la procedure 
     execute Procedure_Name;
  
  Déclaration de la procédure
 (à la fin,en dehors du "zero-level FROM bloc")
    procedure Procedure_Name
    <  .....
       .....
    >
  
  A l'interireur de la peocedure, on peut sortir a l'aide de l'instruction :
    RETURN_FROM_PROCEDURE;

  AT-PROCEDURE
  ============
  Appel de la procedure 
     at LBank execute Procedure_Name;
  Déclaration de la procédure
  (à la fin,en dehors du "zero-level FROM bloc")
    procedure Procedure_Name at LBank_Loc
    < from Cl_Bk(LBank_Loc)
      <   .....
          .....
      >
    >
  A l'interireur de la peocedure, on peut sortir a l'aide de l'instruction :
    RETURN_FROM_PROCEDURE;

  ====================================================================
  =================   DECLARATION LOCALE D'UN BANK   =================
  ====================================================================
  =======  Utilisé en particulier pour déclarer les banks      =======
  =======  TD et CD des processeurs de Transfert et de Cellule =======
  ====================================================================

   DEBUT ET FIN DE DECLARATION DU BANK
  =====================================

    IMPLICIT ACCESS TO BANK Cl_Name(Bank);

    DECLARE CLASS Cl_Name {,Cl_Name_2...};

    END DECLARE CLASS Cl_Name{,Cl_Name_2...};
  arguments :
    Bank    : Variable correspondant a l'adresse du bank
    Cl_Name : Nom de la classe auquel appartiend le Bank


   DECLARATION DES VARIABLES
  =============================

    LOCAL_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Cl_Name;

    LINK_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Cl_Name;

    VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Cl_Name;
  arguments :
    Var_Name : Nom des variables

   INITIALISATION DU LIEN D'UNE LINK_VAR
  =======================================

    link Var_Name to Eta_SV(Indice);
    link Var_Name to Fi_TV(Indice);
    link Var_Name to Fiz_TV(Indice);
  
    link Var_Name_1 to Var_Name_2 of(LObj);
    link Var_Name_1 to Var_Name_2;

   LECTURE D'UNE VARIABLE D'UN AUTRE OBJET
  =========================================

    set X = [Var2]{:type} of (LProc); " {...} veut dire optionel "
  
   DECLARATION DES LIENS
  =======================
    SLINK Lk_Name{(dim)} {,Lk_Name_2....} IN CLASS Cl_Name;

    RLINK Lk_Name{(dim)} {,Lk_Name_2....} IN CLASS Cl_Name;

  ADRESSES DES VARIABLES
  ======================
    @(Bk_Name . Cl_Name).Var_Name { (Ncol,Nligne)}

    PROTECTION DES VARIABLES , CONTROLE DES INDICES DE TABLEAUX
  ==============================================================
    WRITE PROTECT ARRAY Var_Name;

    INHIBIT CHECK ARRAY;

    CHECK ARRAY ( RD=Y_N , WR=Y_N )Var_Name;
  avec Y_N = Y ou N (Yes or No)
  Initialisation par defaut
    CHECK ARRAY(RD=Y,WR=Y);


  ====================================================================
  =================  Z.B.M.  (ZOOM Bank Manager )   ==================
  ====================================================================
  ===== Chainage des banks, définition de l'origine du chainage, =====
  ===== création des bank, accès aux variables des bank, ....    =====
  ====================================================================


  DEFINITION DES CHAINAGES DE BANK
  ================================
  local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                     [~CX~IC~],
                     [~etc~FM*~IN~etc~],
  end_chains;

  DEFINITION DE LA PREMIERE ORIGINE DES CHAINAGES DE BANK
  =======================================================
   (zero-level FROM )
  ===================
  - pour un processeur de cellule:
  from CL(LCL)
  <
      ......
  >
  - pour un processeur de transfert:
  from TR(LTR)
  <
      ......
  >

  DEFINITION DE L'ORIGINE DES CHAINAGES DE BANK
  =============================================
  from Cl_Bk(LBank)
  <   ..........
      .....  exit from LBank; "sortie de FROM"
      ..........
  >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  BOUCLE SUR TOUS LES BANKS D'UNE CLASSE AVEC REDEFINTION
  =======================================================
   DE L'ORIGINE DES CHAINAGES DE BANK
  ==================================
  - Cas general
  --------------
  skip thru Cl_Bk(LBank)
  <  .....
     .....  to next LBank;
     .....  exit from LBank;
  >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  - Cas particulier
  -----------------
  Cas rencontre lorsque l'on veut parcourir les connexions sous un T-Plug
    NCX = (LTV).Nb_Cx_CX;   "Nombre de connexions de ce T-Plug"
    read thru CX(LCX) (J=1,NCX)
    <  .....
       .....  to next LCX;
       ....   exit from LCX;
    >
  Arguments :
    CX : nom de la classe du bank
    LCX: adresse du bank
    J  : indice de boucle
    NCX: nombre de connexions sur lesquelles s'effectue la boucle
  variante :
    read thru CX(LCX) (J=1,*)
    <  .....
       .....  to next LCX;
       ....   exit from LCX;
    >
    => meme effet que la boucle precedente, sans definition de NCX

  - Boucles compactes
  -------------------
    skip thru TV(LTV)/CX(LCX) (JCX=1,*)/.SV(LSV)
    <
    >
    equivalent a :
    skip thru TV(LTV)
    < if (LTV).Nb_Tr_Var .eq. 0 < to next LTV; >;
      read thru CX(LCX) (JCX-1,*)
      < From SV(LSV)
        <
        >
      >
    >
    meme utilisation des exit from et to next;

  - Boucles compactes avec echappements
  -------------------------------------
    skip thru TV(LTV.ne.LTV2)/CX(LCX) (JCX=1,*)/.SV(LSV.eq.Face-*)
    <
    >
    equivalent a :
    skip thru TV(LTV)
    < if (LTV).Nb_Tr_Var .eq. 0 < to next LTV; >;
      if (LTV .eq. LTV2 < to next LTV; >;
      read thru CX(LCX) (JCX-1,*)
      < From SV(LSV)
        < if (LSV).C_Plug_Nm .ne. 'Face' < to next LCX; >;
        >
      >
    >

  INSTANTIATION D'UN BANK, SANS MODIFICATION DE L'ORIGINE DES CHAINAGES
  =====================================================================
    get Cl_Bk(LBank);
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse


  ACCES AUX VARIABLES D'UN BANK INSTANTIE
  =======================================
    (Lbank).Var_Name
  ou
    (Lbank).Var_Name(..) pour les variables dimensionnees.
  Arguments :
    LBank : Bank addresse
    Var_Name : nom de variable

  CREATION D'UN BANK
  ==================
*  Instantiation de variable necéssaire a la création du bank
      Set .Var_name for Cl_Bk = Valeur;
   Arguments : Var_Name, Cl_Bk, Valeur

* Création du bank
   Lift Lbank of class Cl_Bk under (L_Up, -N_Lk);
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse
    L_Up  : Adresse du bank de reference auquel ser attache l'objet cree
    N_Lk  : si = 0, on cree le bank en next de L_Up
            si <>0, on cree le bank sous L_up, rattache au lien numero N_Lk



<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_user_list.doc.930511
  ********************************************************************
  *********************  LISTE DES COMMANDES   ***********************
  ********************************************************************


  ====================================================================
  =================  Z.B.M.  (ZOOM Bank Manager )   ==================
  ====================================================================

  DEFINTION DES CHAINAGES DE BANK
  ===============================
  local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                     [~CX~IC~],
                     [~etc~FM*~IN~etc~],
  end_chains;

  DEFINTION DE LA PREMIERE ORIGINE DES CHAINAGES DE BANK  (zero-level FROM )
  ==========================================================================
  - pour un processeur de cellule:
  from CL(LCL)
  <
      ......
  >

  - pour un processeur de transfert:
  from TR(LTR)
  <
      ......
  >

  DEFINTION LOCALE DE L'ORIGINE D'UN CHAINAGE DE BANK
  ===================================================
  from Cl_Bk(LBank)
  <   ..........
      .....  exit from LBank;
      ..........
  >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  BOUCLE SUR TOUS LES BANKS D'UNE CLASSE
  ======================================
  - Cas generale
  --------------
  skip thru Cl_Bk(LBank)
  <  .....
     .....  to next LBank;
     .....  exit from LBank;
  >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  - Cas particulier
  -----------------
  Cas rencontre lorsque l'on veut parcourir les connections sous un T-Plug
    NCX = (LTV).Nb_Cx_CX;   "Nombre de connexion de ce T-Plug"
    read thru CX(LCX) (J=1,NCX)
    <  .....
       .....  to next LCX;
       ....   exit from LCX;
    >
  Arguments :
    CX : nom de la classe du bank
    LCX: adresse du bank
    J  : indice de boucle
    NCX: nombre de connexions sur lesquelles s'effectue la boucle

  INSTANTIATION D'UN BANK, SANS MODIFICATION DE L'ORIGINE DES CHAINAGES
  =====================================================================
    get Cl_Bk(LBank);
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  ACCES AUX VARIABLES D'UN BANK INSTANTIE
  =======================================
    (Lbank).Var_Name    ou   (Lbank).Var_Name(..) pour les variables dimensionnees.
  L'instruction Point_On(LBank) permet d'acceder a une variable non plus par
  (Lbank).Var_Name, mais par ..Var_Name
  Arguments :
    LBank : Bank addresse
    Var_Name : nom de variable

  CREATION D'UN BANK
  ==================
    Lift Lbank of class Cl_Bk under (L_Up, -N_Lk);
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse
    L_Up  : Adresse du bank de reference auquel ser attache l'objet cree
    N_Lk  : si = 0, on cree le bank en next de L_Up
            si <>0, on cree le bank sous L_up, rattache au lien numero N_Lk

     Set .Var_name for Cl_Bk = Valeur;
   Arguments : Var_Name, Cl_Bk, Valeur

  ====================================================================
  =========================   A. L. L. I. S. =========================
  ====================================================================

  PROCEDURE
  =========
  <
     <
     execute Procedure_Name;
     >
  >;
  (  out of the zero-level FROM bloc  )
  procedure Procedure_Name
  <  .....
     .....
  >

  AT-PROCEDURE
  ============
  <
     <
     at LBank execute Procedure_Name;
     >
  >;
  (  out of the zero-level FROM bloc  )
  procedure Procedure_Name at LBank_Loc
  < from Cl_Bk(LBank_Loc)
    <   .....
        .....
    >
  >

  DECLARATION DE VARIABLES LOCALES
  ================================
  LOCAL_VARIABLES: (Var_Name1,Var_Name2,Var_Name3,...) ;

  =====  CASE
  ===========
  TYPE  mach_in OF (truc_1,truc_2,truc_3);
    .   Instruction de declaration, declaree avant toute instruction FORTRAN
  executable.

  mach_in = truc_3;
    .   Instanciation de la variable mach_in

  CASE mach_in IS
  <  WHEN truc_1  <... >
     WHEN truc_3  <... >
        .....
     WHEN_OTHERS  <... >
  >

  Boucles DO a multiples indices:
  ===============================
    DO ((...(I=1,12,3),J=J1,J2)...)<...>;
  Equivalent a:       < DO J=J1,J2
                         < DO I=1,12,3
                              ...
                         >
                      >

  L'IMPRESSION FACILE
  ===================
    Z_Pr : var1,var2,(var3(i),i=1,n);

  ====================================================================
  ===========   DECLARATION LOCALE D'UNE CLASSE DE BANK   ============
  ====================================================================

  IMPLICIT ACCES TO BANK Cl_Name(Bank);
  =====================================
  arguments :
  Bank    : Variable correspondant a l'adresse du bank
  Cl_Name : Nom de la classe auquel appartiend le Bank

  DECLARE CLASS Cl_Name [,Cl_Name_2...];
  =====================================
  arguments :
  Cl_Name : Nom de classe

  END DECLARE CLASS Cl_Name[,Cl_Name_2...];
  ========================================
  arguments :
  Cl_Name : Nom de classe

  ADRESSES DES VARIABLES
  ======================
   @(Bk_Name . Cl_Name).Var_Name [ (Ncol,Nligne)]

  LOCAL_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  ==================================================================================

  LINK_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  =================================================================================

  VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  ============================================================================

  SLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
  =========================================================

  RLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
  =========================================================


  ====================================================================
  ====================   PREMISSES D'UN P.D.L.   =====================
  ====================================================================


  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

  Print_TR_ID(LTR);
  -----------------
  arguments:
  LTR : bank instancie attache au transfert

  grasp array fi,omega (LTR);
  ---------------------------
  arguments:
  LTR : bank instancie attache au transfert

  copy array fi in fiz (LTR);
  ---------------------------
  arguments:
  LTR : bank instancie attache au transfert

  Print_SV_CL_ID(LSV);
  -------------------
  argument:
  LSV : bank instancie attache au C-Plug de la cellule connectee

  grasp array ETA_SV (LSV);
  -------------------------
  argument:
  LSV : bank instancie attache au C-Plug de la cellule connectee

  grasp array Ct_SV (LSV,LTR) for (LCX);
  --------------------------------------
  arguments:
  LCX : bank instantie attache a cette connexion
  LSV : bank instantie attache au C-Plug de la cellule connectee
  LTR : bank instantie attache au transfert

  grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
  -----------------------------------------------
  arguments:
  LTR  : bank instantie attache au "transfert origine"
  LTV2 : bank instantie attache au T-Plug du "transfert connecte"
  LCX2 : bank instantie attache a la connexion Cellule - "Transfert connecte"
  LCX  : bank instantie attache a la connexion "Transfert origine" - Cellule
  LCL  : bank instantie attache a la cellule par laquelle passe la connexion
         entre ces deux transferts
  Chaine de la connexion :
  LTR  -- LTV -- LCX -- LCL -- LCX2 -- LTV2
   ^                     ^              ^
   |                     |              |--- "Connected Transfer"
   |                     |--- "Connecting Cell"
   |--- "Origin Transfer"

  grasp array FIZ_TV (LTV2);
  --------------------------
  arguments:
  LTV2 : bank instantie attache au T-Plug du transfert connecte


  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

  Print_CL_ID(LCL);
  -----------------
  arguments:
  LCL : bank instancie attache a la cellule

  grasp array eta,gamma (LCL);
  ----------------------------
  arguments:
  LCL : bank instantie attache a la cellule

  Set_signed_ABt(LCL);
  --------------------
  arguments:
  LCL : bank instantie attache a la cellule

  grasp array FI_TV (LTV);
  ------------------------
  arguments:
  LTV : bank instantie attache au T-Plug du transfert connecte

  grasp array ABt_TV (LCL,LTV) for (LCX);
  ---------------------------------------
  arguments:
  LCX : bank instantie attache a cette connexion
  LCL : bank instantie attache a la cellule
  LTV : bank instantie attache au T-Plug du transfert connecte
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
  ********************************************************************
  ********                    INSTRUCTION                   **********
  ********      Utlilisable dans les processeurs et dans    **********
  ********   certaines partie du noyau de ZOOM (ZOOM KER)   **********
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************
  remises a jour 14/08/1998,  15/02/2000(Al1)

  ********************************************************************
  **********************   L'IMPRESSION FACILE   *********************
  ********************************************************************

  ==> Z_Pr : Var_List;

      Z_Pr : var1,var2,(var3(i),i=1,n);
  génère
        print *,'**  var1,var2,(var3(i),i=1,n)'
        print *,var1,var2,(var3(i),i=1,n)

  ==> Z2_Pr : Var_List;

      Z2_Pr : a,b,j,(a(i),i=1,4);
  génère
      print *,'  a =',a,'  b =',b,'  j =',j,'  (a(i),i=1,4) =',(a(i),i=1,4)
***  attention pour les boucles Fortran implicites :
      Z2_PR : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_PR : a,b,c,(d(i),i=1,2); marche.

Futura:
     Z_Pad : idem, les memes avec sorties console;
     Z_Pr_Error_Cl(LCL/TR):'BlaBla',varlist;  donee la blabla precede de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)
                    (le premier element de la liste DOIT etre un char string).
  symboles utiles :
      SV_CL_ID(LSV) genere "MESH-   1/Face-   2"
      en print* ou dans Z_Pr; ex : Z_Pr/Matrix D on Cl:/:SV_CL_ID(LSV);
     (Futura) 

  ********************************************************************
  ********************   PREMISSES D'UN P.D.L.   *********************
  *******************  Processor Design Language  ********************
  ********************************************************************
  *******      Langages dédié à l'écriture des processeurs    ********
  **************************  USERS MANUAL  **************************
  ********************************************************************

  VERIFICATION EFFECTUEES PAR LES INSTRUCTIONS
  ============================================

     On verifie systematiquement que les banks instancies qui sont en argument des
  instructions sont bien de la classe voulue (permet de diagnostiquer des inversions
  d'argument ou autre).
     On controle les indices lors des acces aux vecteurs et aux matrices, sauf si
  l'utilisateur precise 'inhibit check array;' au debut de son processeur.

  META LANGAGE
  ============

  Soit:
    Vct : Nom d'un vecteur (ETA,GAMMA,FI,OMEGA,FIZ)
    Mx  : Nom de matrice (ABt, Ct, D)

  Alors la numerotation des composantes des matrices et de vecteurs suit
  la logique suivante :
    Vct : Numerotation "naturelle".
    Vct_SV : Numerotation dans le CPLUG
    Vct_TV : Numerotation dans le TPLUG
    Mx_SV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le CPLUG
    Mx_TV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le TPLUG

  Les arguments associes au GRASP de ces vecteurs et matrices suit egalement cette
  logique :
  LTR :  Numerotation "naturelle" pour le transfert
  LCL :  Numerotation "naturelle" pour la cellule
  LTV (ou LTV2) : Numerotation dans le TPLUG
  LSV : Numerotation dans le CPLUG

  Par exemple ,
  GRASP ARRAY MX_SV(LSV,LTR) for ...
                     ^   ^
                     |   |--- 2 eme indice (numero de ligne) dans l'ordre
                     |        naturel du transfert
                     |---- 1 er indice (numero de colonne) dans l'ordre du CPLUG


  ==============================================
  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

  1) Instructions attachees a la cellule elle même
  ------------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LCL : bank instancié attaché a la cellule

  a) IMPRESSIONS:
  ---------------

    ===> Print_CL_ID(LCL);
    Imprime les informations judicieuses suivantes concernant la cellule :
  
    **FROM:    RND1, CL: PARO-   1 OF CLASS: CND1  
                |         |      |            |
      Nom de la routine  Nom et Numero       Nom du Proceseur
     d'ou est effectuée  de la cellule       de cellule
     l'impression

    ===> Print_Class_CL(LCL);
    Imprime le nom du proceeseur de cellule. Exemple :
    CLASS: CND1  
    
    ===> Pour des impressions personnalisées
    CL_ID(LCL) est remplacé par une chaine de 4 caracteres suivi d'un
    entier, correspondants au Nom et Numéro de la cellule
    exemple :
    print *,'user define print ',CL_ID(LCL);
        donne
    user define print PARO 1

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array eta,gamma (LCL);

    Cette instruction (en général au début des points d'entrées C... et R...) permet
  ensuite d'accéder directement au vecteur ETA des variables d'état et au
  vecteur GAMMA.
  Variables FORTRAN réservées utiles :
  LO_ETA, LO_GAMMA : adresses des banks ETA et GAMMA

  ===> Set_signed_ABt(LCL);

    Cette instruction precise a la navette ZOOM que la cellule gere elle-meme
  la convention de signe des transferts. Les signes de ABt ne sont pas modifie
  par la navette.

  -------------------------------------------
  2 ) Instructions attachées à une connexion
  -------------------------------------------
  arguments communs à ces instructions:
  -------------------------------------
  LCX : bank instancie attaché à cette connexion
  LCL : bank instancie attaché à la cellule
  LTV : bank instancie attaché au T-Plug du transfert connecté

  Ces instructions se situent naturellement dans l'environement suivant :

  from CL(LCL)
  < skip thru SV(LSV)
    < skip thru CX(LCX)
      < From TV(LTV);
           ....
        Print_TV_TR_ID(LTV);
        grasp array FI_TV (LTV);
        grasp array ABt_TV (LCL,LTV) for (LCX);
           ...
      >
    >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_TV_TR_ID(LTV);
    Imprime de l'information permettant de reconnaître le transfert connecté.
  Exemple :
  
   ** CONNECTED-TR OF CLASS: TGENE1 (1ST CONNECTED CELL: CAPA-   1)
                               |                           |     |
                       Nom du processeur   Nom et numero de la premiere
                       de transfert        cellule connectée a ce transfert

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array FI_TV (LTV);

  Cette instruction permet d'accéder aux variables de transfert connectées au
  T-Plug (LTV), dans la numérotation du T-Plug :
    ..... = FI_TV(ITV)
  avec ITV : numéro d'ordre dans le T-Plug de la variable de transfert
  L'écriture dans FI_TV est interdite.

  ===> grasp array ABt_TV (LCL,LTV) for (LCX);

  Cette instruction permet d'accéder à la partie de la matrice ABt rattachée à
  un T-Plug de la façon suivante:
  ABt_TV( ICL, ITV) = ... ;
  avec  ICL : numéro de la composante de la variables de cellule
        ITV : numéro d'ordre dans le T-Plug de la variable de transfert

  3) création d'une cellule (IEntry)
  ------------------------------------
  ===> Zinit_Entry {Proc_Name}  ( Types(2)   = ...,
                                  Nb_St_Var  = ....  );
           " { } voulant dire optionel "
  avec Proc_name : nom du processeur (optionel). La présence de ce nom peut
                   améliorer la visibilité. On vérifie que ce nom est bien
                   celui du processeur.
  * Ce que ca fait:
  - Création du point d'entrée I
  - Création bank CL(LCL), avec le nom du processeur
    CALL OCLN(NAME,(LCL).Types(1));
  - Pour tout ce qui est entre parenthèses
    ( Types(2)    = ..., Nb_St_Var   = .... );
    ca génère : (LCL).Types(2)    = ...; (LCL).Nb_St_Var   = .... ;
  - Cree le bank ETA et le link a LCL
  - Nom de variable réservé :
     LCL  : adresse du bank CL
     LETA : adresse du bank ET
  * Ce que ca ne fait pas : toucher au CD Bank. L'utilisateur doit typiquement faire
  quelque chose du genre :
  Lift LCD of class CD under (2,0);
  "Link CDesc" @LCL@CL@CD@=LCD;

  * Création avec argument(s) <=> Create Cell, type = XXX arg1, arg2, arg3 (nbre optionnel)
   on retrouve ces arguments dans les FTN var JZSIG, KZSIG(1), KZSIG(2)
  
  4) Parameter_Entry (PEntry)
  ----------------------------
  ===> Parameter_Entry ;
  Doit être tout seul, tout à la fin des processeur, en dehors de tous blocks
  (en particulier de from CL(LCL)< ), juste avant le END:
  
  
  
  ==============================================
  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

  1 ) Instructions attachées au transfert lui même
  ------------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LTR : bank instancié attaché au transfert

  a) IMPRESSIONS:
  ---------------

  ===> Print_TR_ID(LTR);
    Imprime de l'information permettant de reconnaître le transfert
  exemple :
   **FROM:    SCD1 ,TR OF CLASS: TCD1   (1ST CONNECTED CELL: CAPA-   1)
                |                 |                            |     |
      Nom de la routine  Nom du processeur   Nom et numéro de la première
     d'ou est effectuée  de transfert        cellule connectée a ce transfert
     l'impression


  ===>  Print_Class_TR(LTR);
    Imprime le nom du proceeseur de transfert. Exemple :
  CLASS: TCD1  


  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array fi,omega (LTR);

    Cette instruction (en général au début des points d'entrées T... et S...)
  permet ensuite d'accéder directement au vecteur FI des variables de
  transfert et au vecteur OMEGA.
    Variables FORTRAN réservées utiles :
  LO_FI, LO_OMEGA : adresses des banks FI et OMEGA

  -------------------------------------------
  2 ) Instructions attachees a une connexion
  -------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LCX : bank instancié attaché à cette connexion
  LSV : bank instancié attaché au C-Plug de la cellule connectée
  LTR : bank instancié attaché au transfert

  Ces instructions se situent naturellement dans l'environnement suivant :

  from TR(LTR)
  < skip thru TV(LTV)
    < NCX= ...;
      read thru CX(LCX) (J=1,NCX)
      < get SV(LSV); Print_SV_CL_ID(LSV);
           ....
        grasp array ETA_SV (LSV);
           ...
        grasp array Ct_SV (LSV,LTR) for (LCX);
           ...
      >
    >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_SV_CL_ID(LSV);

    Imprime de l'information permettant de reconnaître la cellule connectée.
  Exemple :

   ** CONNECTED-CL: CAPA-   1 OF CLASS: CND1   = TYPE:    10104
                     |      |            |                  |
                  Nom et Numero       Nom du Proceseur    Types(2)
                  de la cellule       de cellule

  b) Accès aux variables reservées
  ---------------------------------
  ===> grasp array ETA_SV (LSV);

  Cette instruction permet d'accéder aux variables d'état connectées au
  C-Plug (LSV), dans la numérotation du C-Plug :
    ..... = ETA_SV(ISV)
  avec ISV : numéro d'ordre dans le C-Plug de la variable d'état
  L'ecriture dans ETA_SV est interdite.
     Variables FORTRAN réservées utiles :
  LO_CL_SV, LO_ETA_SV : adresses des banks CL et ETA

  ==> grasp array Ct_SV (LSV,LTR) for (LCX);

  Cette instruction permet d'accéder à la partie de la matrice Ct rattachée
  à un C-Plug de la façon suivante:
  Ct_SV( ISV, ITR) = ... ;
  avec ISV : numéro d'ordre dans le C-Plug de la variable d'état
       ITR : numéro de la composante de la variables de transfert
  Variables FORTRAN reservees utiles :
  LO_CT : adresses du bank CT

  3) création d'un transfer (yEntry)
  ------------------------------------
  ===> Zinit_Entry {Proc_name}       " { } voulant dire optionel "
        ( Types(2)    = ...,
          Nb_Tr_Var   = ...,
          Nb_Extr     = ...,
          Nb_Fluxes   = .... );

  avec Proc_name : nom du processeur (optionnel). La présence de ce nom peut
                   améliorer la visibilité. On vérifie que ce nom est bien
                   celui du processeur.
  * Ce que ca fait:
  - Création du point d'entrée Y
  - Création bank TR(LTR), avec le nom du processeur
    (CALL OTRN(...,(LTR).Types(1));
  - Pour tout ce qui est entre parenthese
    ( Types(2)    = ..., Nb_Fluxes   = .... );
    ca genere : (LTR).Types(2)    = ...; (LTR).Nb_Fluxes   = ....;
  - Cre le bank Fi et le link a LTR
  - Nom de variable reserve :
     LTR  : adresse du bank TR
     LFIZ : adresse du bank FI     ( LFI ne serait pas mieux !!!????....)
  * Ce que ca ne fait pas : toucher au TD Bank. L'utilisateur doit
    typiquement faire quelque chose du genre :
  Lift LTD of class TD under (2,0);
  "Link TDesc" @LTR@TR@TD@=LTD;

  * Création avec argument(s) <=> Create TR, type = XXX arg1, arg2, arg3 (nbre optionnel)
   on retrouve ces arguments dans les FTN var JZTAU, KZTAU(1), KZTAU(2)
  
  4) Parameter_Entry (QEntry)
  ----------------------------
  ===> Parameter_Entry ;
  Doit être tout seul, tout à la fin des processeurs, en dehors de tout block
  (en particulier de from TR(LTR)< ), juste avant le END:

  5 ) Instructions utilisees pour les matrices D
  ----------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LTR  : bank instancié attaché au "transfert origine"
  LTV2 : bank instancié attaché au T-Plug du "transfert connecte"
  LCX2 : bank instancié attaché à la connexion Cellule - "Transfert connecte"
  LCX  : bank instancié attaché à la connexion "Transfert origine" - Cellule
  LCL  : bank instancié attaché à la cellule par laquelle passe la connexion
         entre ces deux transferts

  Chaine de la connexion :
  LTR  -- LTV -- LCX -- LCL -- LCX2 -- LTV2
   ^                     ^              ^
   |                     |              |--- "Connected Transfer"
   |                     |--- "Connecting Cell"
   |--- "Origin Transfer"


  Ces instructions se situent naturellement dans l'environnement suivant :

  from TR(LTR)      "Transfert origine"
  <  skip thru TV(LTV)
     <  NCX=(LTV).Nb_Cx_CX;
        read thru CX(LCX) (J=1,NCX)
        <
  ! Matrice D
           from CL(LCL) "ce FROM est indispensable; un GET ne suffit pas"
                        "Cellule connectee"
           < skip thru CX(LCX2)
             < get TV(LTV2);  "Transfert connecte"
               if ( (LTV2).Nb_Tr_Var.eq.0 ) to next LCX2;
               grasp array FIZ_TV (LTV2);
                 ... = .... *FIZ_TV(..) ...;
               grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
               D_TV(1,1) = ....;
               D_TV(.. , ..) = ....;
             >
           >
  ! Fin matrice D
        >
     >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_TV_TR_ID(LTV2);

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);

  Cette instruction effectue les opérations suivante :
  = Si le bank associé à la matrice D n'existe pas, elle le crée et elle
  positionne le mot d'état de la cellule précisant que celle-ci possède une
  matrice D (call sbit1( ...) )
  = Si la matrice D a été compactée, elle la decompacte
  = Elle permet d'accéder à la partie de la matrice D rattachée à un Transfert
  connecté au Transfert via une cellule connectante la façon suivante:
  D_TV( ITV, ITR) = ... ;
  avec ITV : numéro d'ordre dans le T-Plug de la variable du transfert connecté
       ITR : numéro de la composante de la variables du transfert origine

  Variables FORTRAN réservées utiles :
  LO_D_TV : adresses du bank D
  LO_TR2_D, LO_IC2_D : adresses du "Connected Transfer" et du IC associé à la
            connexion celulle - transfert connecte
  LO_IC_D : adresse du IC associée à la connexion transfert origine - celulle

  ===> grasp array FIZ_TV (LTV2);
  ===> grasp array OMEGA_TV(LTV2);

    Accès direct au vecteur Fiz et Omega du transfert connecté dans la
  numérotation du T-Plug. L'écriture dans FIZ_TV est interdite.

  ===> copy array fi in fiz (LTR);
  Copie le vecteur FI dans FIZ. Cette instruction définit un tableau FIZ.
  Si un grasp array FI... n'a pas été fait, on le génère.
    Variables FORTRAN réservées utiles :
  LO_FIZ : adresses du bank FIZ
  ===> copy array FIZ in FI (LTR);
  ===> grasp array FIZ (LTR);

1 ********************************************************************
  *************************   A. L. L. I. S. *************************
  *******  (ADA Like Language Implementation Specification)   ********
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

  =====    PROCEDURE
  ==================
  
  Appel d'une procedure : 
  ===> execute Procedure_name;
 
  Déclaration de la procédure
 (à la fin,en dehors du "zero-level FROM bloc")
  ===>  procedure Procedure_Name
        <  .....
          .....
        >
  A l'intérieur de la procédure, on peut sortir à l'aide de l'instruction :
  ===>  RETURN_FROM_PROCEDURE ;

      .execute sera remplacé par un GOTO Fortran pointant sur l'instruction
  de déclaration de la procédure STEADY. Ainsi, la procédure se trouve
  située en dehors de tout Bank bloc<>, et donc, toutes les variables
  d'adresse devront être calculées avant l'execute.
  from,read thru, skip thru et get sont interdites.

  *****  DIAGNOSTICS ET ERREURS :
  Toute tentative d' utiliser les instructions ZBM de chaînage provoque
  le message d' erreur:
          '** ALLIS ERROR ** ZBM INSTRUCTION FORBIDDEN IN NON AT-PROCEDURE'
  Voire egalement *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux
  AT-PROCEDURE

  =====   AT- PROCEDURE
  =====================
  Appel de la procédure 
  ===> at LBank execute Procedure_Name;

  Déclaration de la procédure
  (à la fin,en dehors du "zero-level FROM bloc")
  ===> procedure Procedure_Name at LBank_Loc
       < from Cl_Bk(LBank_Loc)
         <   .....
             .....
         >
       >
  De l'intérieur de la procédure on peut sortir à l'aide de l'instruction :
  ===>  RETURN_FROM_PROCEDURE ;

  AT-PROCEDURE  : Procédure permettant de définir (en son fort intérieur) une
  première origine des chaînages de bank, et donc d'accéder ensuite à d'autre
  bank via des GET, DES FROM ....

  *****  DIAGNOSTICS ET ERREURS :
   Une at-procedure exige de déclarer un from <> bloc
  qui sera 0-level.L' adresse de l' origine est purement symbolique et sera
  remplacée par une variable locale (cf l'instruction ALLIS: LOCAL_VARIABLE),
  sans qu' il soit nécessaire de la déclarer LOCALE.
    L absence de from<> déclenche un message d' erreur :
       '** ALLIS ERROR ** AT-PROC SHOULD CONTAIN A 0-LEVEL FROM< '

  *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux AT-PROCEDURE :
       La demande d'execution d'une procédure ou d'une at-procédure
  non définie provoque un message d' erreur :
       '** ALLIS ERROR ** PROCEDURE XXXXX IS UNDEFINED'
  La définition d'une procédure sans demande d'exécution associée génère
  le message:
       '** ALLIS WARNING ** PROCEDURE XXXXX IS UNUSED'
        Une at-procédure, comme une procédure, doit être déclarée entre
  le >; zero-level from et la carte END; .


  DECLARATION DE VARIABLES LOCALES
  ================================

  LOCAL_VARIABLES: (R_DROIT,ATTENDS-TOI,I_ES-TU?) ;

   .  Remplace dans le texte subsequent ces trois variables par un nom unique
  reprenant la meme initiale ( pour type implicite FORTRAN), comme par exemple:
       R_DROIT         -->  R10016
       ATTENDS-TOI     -->  A10017
       I_ES-TU?        -->  I10018
    .  (La déclaration se fait n' importe où, et la substitution reste valide
       jusqu'à la carte END;)


  =====  CASE
  =================

  Ensemble d'instructions pour émuler le ADA CASE instruction:
  ------------------------------------------------------------

  TYPE  mach_in OF (truc_1,truc_2,truc_3);
    .   Instruction de declaration, declaree avant toute instruction FORTRAN
  executable.

         ...
  mach_in := truc_3;
    .   Instanciation de la variable mach_in (il va sans dire que le
  signe = va aussi).
        ...

  CASE mach_in IS
  <  WHEN truc_1  <... >
     WHEN truc_3  < execute ...  ;   >
     WHEN_OTHERS  <   print*' error' >
  >
    .   Permet de manipuler la variable symbolique mach_in en lui donnant des
        valeurs symboliques truc_1 etc  .
    .   Analogue à l' instruction IF..ELSEIF..ELSEIF..ENDIF;
    .   WHEN_OTHERS termine obligatoirement le CASE ... IS bloc.
    .   Pour les inconditionnels du FORTRAN, elles sont remplacées par I10011
        et  incrémentées dans l' ordre de la liste:
        et donc truc_3=truc_2 +1=truc_1 +2 (ne pas en abuser).
    .   De même, : truc_1=mach_in +1 ...


1 ********************************************************************
  *****************   DECLARATION LOCALE D'UN BANK   *****************
  ********************************************************************
  *******  Utilisé en particulier pour déclarer les banks      *******
  *******  TD et CD des processeurs de Transfert et de Cellule *******
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

     La déclaration locale d'un BANK permet d'accéder à celui-ci comme si
  il avait été déclaré dans le précompilateur:
  - Après avoir fait un GET ou un FROM du bank, on accède à une variable
  du bank par (LBank).Var_Name.
  - Si des liens ont été définis, on y accède de façon habituelle (@L..@..@..@).
  - Pour créer le bank on utilise l'instruction LIFT ...

     Avant la déclaration du bank, l'instruction IMPLICIT ACCES TO BANK
  bk_name(LBk) permet ensuite à l'utilisateur, après avoir instancié
  l'adresse LBk, d'accéder directement à une variable sans préciser le
  bank auquel elle appartient, c.a.d. d'ecrire Var_Name au lieu de
  (LBank).Var_Name

     Plusieurs banks peuvent être définis simultanément. Après la
  déclaration d'une (ou d'une suite de) variable ou de liens, il faut donc
  préciser la classe auquelle elle appartient. (VAR .... IN CLASS Bk_name; )

     On distingue dans la déclaration 3 type de variables:
  - LOCAL_VAR : ces variables sont directement rangées dans la zone données
                du bank
  - LINK_VAR  : seule l'adresse de ces variables sont rangées dans ce bank;
  les valeurs elles memes sont rangées dans un autre bank.
  - VAR       : Vu de l'utilisateur, équivalent actuellement à LOCAL_VAR
  qu'il vaut mieux préférer pour'heure.  (En fait VAR est oriente PDL, who
  is not yet implemented)

     Chaque variable peut avoir 0, 1 ou 2 dimensions. La dimension d'une
  variable peut être composée de nombres entiers, de paramètres FORTRAN ou
  d'autre variables (placées entre crochets) de ce MEME bank.
     La dimension d'une variable ne peut en aucun cas contenir une variable
  FORTRAN.

     Par défaut le type d'une variable (entier ou réel) suit l'incontournable
  règle du FORTRAN (entier de I a N, réel autrement). Mais le type peut être
  imposé lors de la déclaration de la variable ( ... : INTEGER, ... :REAL,
   ... :CHARACTER_4)

     Le rangement des variables dans la bank suit l'ordre de leur déclaration.

     Lorsqu'une variable est dimensionnée, on peut la sous-structurer en
  sous-tableaux avec l'instruction ARRAY Ar_Name_1 IN ARRAY Ar_Name_2

     Contrôle d'indices des variables dimensionnées :
     Actuellement, quand on accède de facon standard ZBM à une variable
  dimensionnée par l'instruction (Lbank).Var_Name(indice) , aucun controle
  d'indice n'est effectué ( Fameux adage du programmeur Fortran inconnu :
  "Je veux pouvoir faire ce que je veux, donc je dois pouvoir faire
  n'importe quoi" ). De même quand on accède à l'adresse d'une variable par
  @(Lbank.Class_Name).Var_Name(indice) .
     Par contre, lorsque l'on décide d'accéder de façon implicite à un bank,
  on admet que les taches les plus stupides puissent être effectuées par
  la machine et non pas par l'utilisateur (point de vue subversif, s'il en
  est). Par défaut, un contrôle d'indice sera donc effectué sur les
  variables dimensionnées, sauf si l'utilisateur demande le contraire
  par l'instruction INHIBIT CHECK ARRAY;

************************************* Futura feature ***************************
  - VAR_LINKED                                    Version du mercredi 26/02/1997   
---------------------------------------------------------------------------(Al1)
 Declaration :
 ------------
 var_linked   name         ,
              name1(2)     ,
              name2(2,3)   ,
              name3([klen]},
  :xxx in class XX;

Rq : on a l'air de s'orienter plutot vers "array_linked" plutot que "var_linked"
qui voudra s'exprimer a ce sujet ?

 Liaison
 -------
 Link namxx[] to ...         standard

 Utilisation :
--------------
  Ces variables pointent chacune sur un tableau different
  pour Futura : seuls les tableaux 1D sont liables, comme
 Eta_SV, DFi_TV etc ou les variables d'un foreign TD/CD
 Pour preciser la composante # i du tableau linke' :
 name(i), name1(i/n), name2(i/n,m)

 Verifications internes generees :
 --------------------------------
  a la var_linked(n,m) est associee une local var(n,m)
 de nom ODIM_namexx(,) qui est remplie au moment du link xxx to xxx
 avec la dimension du tableau, ou du TEF vecteur (Eta_SV etc)
 La verification est alors standard : i compris entre 1 et ODIM_name(,).

ATTENTION : les liens etant effectues en general dans les S/R_Entry, il faut
que le tableau originel - s'il est de dimension asssociee a une variable, ai bien
ete defini.

*************************************************************************************
   Remarques d'utilisation avec pointé sur des plugs.          (Al1, Avril 2000)
*************************************************************************************
Ces liens pointant sur un tableau amenent a une contradiction possible avec les plug.
En effet le seul tableau Zebra est le bank Tr (ou Eta); les plug donnant une liste
non necessairement ordonnee de ses composantes.
Exemple : on a un TV de liste 7,12,17,22.
link name to Fi_TV(1); a pour consequence de faire pointer sur Tr(7)
mais alors name(2) pointera sur Tr(8) !
la solution est alors name((LTV.TV).Cx_Tr_Nb(2)-(LTV.TV).Cx_Tr_Nb(1)+1) etc
On peut aussi preferer dans ce cas declarer un name(4) comme link_var et faire :
<i=1,4; link name(i) to Fi_TV(i); >

Pour eviter les erreurs, Zoom signale un LINK WARNING lorsqu'on effectue
un lien de type array_linked sur un plug de liste non naturelle.
*************************************************************************************


   DEBUT ET FIN DE DECLARATION DU BANK
  =====================================
  arguments communs a ces instructions :
  Bank    : Variable correspondant a l'adresse du bank
  Class_Name : Nom de la classe auquel appartiend le Bank

  ==> IMPLICIT ACCES TO BANK Class_Name(Bank);

    Cette instruction permet a l'utilisateur d'acceder directement aux
  variables du bank: on ecrira par ex.  X = Y au lieu de
  (Bank).X = (Bank).Y .Elle doit etre situee avant le debut de la declaration
  de la classe.
     Avant d'utiliser les variables de ce Bank, il est indispensable
  (sous peine de plantage) de definir l'adresse de ce bank avec les
  instructions GET .., FROM .., ..  Cette adresse doit etre instanciee pour
  l'ensemble des points d'entree le cas echeant.
     Un meme nom de variable ne peut etre defini dans plusieurs banks a acces
  implicite. De meme un meme nom ne peut etre utilise pour une variable
  FORTRAN et une variable dans un bank a acces implicite.


  ==> DECLARE CLASS Class_Name [,Class_Name_2...];

     Debut de la declaration de la classe Class_Name[ ,ou de la liste de classe] .
  Toute declaration de classe doit etre termine avant la premiere instruction
  FTN executable (lors de la declaration, on genere en effet des instruction
  FORTRAN  PARAMETER (....=....) ).

  ===> END DECLARE CLASS Class_Name[,Class_Name_2...];

     Fin de la declaration de la classe Class_Name[ ,ou de la liste de classe] .



   DECLARATION DES VARIABLES
  =============================

  ARGUMENT COMMUNS AUX DECLARATIONS DE VARIABLES:

  Var_Name : Nom de variable. Doit etre compose uniquement de caracteres
  alphanumerique ou du caractere souligne. Pas de restriction sur la longueur.

  Class_Name : Nom de classe dans lauqlle la variable est definies

  type : type de la variable
    Les types autorises sont INTEGER , REAL (et bientot CHARACTER_4, DOUBLE)
    Si le type n'est pas defini, on prend la convention FORTRAN :
  entier pour les variables dont la premiere lettre est de I a N, reel sinon.

  nbcol, nblin : nombre de colonnes, nombre de lignes.
    Ces dimensions peuvent etre des expressions contenant des nombres entiers,
  des PARAMETER FORTRAN, une autre variable (deja definie) du meme bank;
  dans ce cas, cette variable doit etre entre crochet. Mais cela ne peut
  pas etre une variable FORTRAN.
    Lorsqu'une variable est utilisee dans une dimension, il est vivement
  conseille:
  - que cette variable soit definie au prealable
  - que cette variable soit une VAR ou une LOCAL_VAR
    Avant de créer le bank par l'instruction LIFT il faut que l'ensemble des
  variables utilisées dans une dimension soient instanciées par l'instruction
  SET :  SET .Var_Name for Class_name = Valeur;
  Après le LIFT, les variables instanciees par l'instruction SET auront la
  valeur definie par cette instanciation.
*** attention, si le symbole Var_name ne sert pas à dimensionner une autre variable,
*** on ne peut leur donner une valeur qu'en explicitant :
***    (LTD).Var_name = valeur

  ADRESSES DES VARIABLES

      On peut acceder a l'adresse d'une variable Var_Name du bank Bk_Name de
  la classe Class_Name par
   @(Bk_Name . Class_Name).Var_Name
  et pour les variables dimensionnees:
   @(Bk_Name . Class_Name).Var_Name(Ncol,Nligne)


  ===> LOCAL_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit une variable (ou une liste de variables) dans la zone donnee
   du bank.

  ===> LINK_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit un lien de reference (ou un tableau de liens pour les variables
  dimensionnees) qui contient la (ou les) adresse ou est rangee la variable.
  Cette adresse, ou l'ensemble des adresses pour les variables dimensionnees,
  doivent etre initialisees par l'utilisateur a l'aide des instrucions
  link Var_Name_1 to Var_Name_2; ou directement via les adresses
     @(Bank . Class_name).Var_name = .......;
  Pour les variables dimensionnees:
     @(Bank . Class_name).Var_name(Ncol,Nligne) = .......;

  ===> VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit un espace memoire dans la zone donnee du bank, definit un lien
  qui contient l'adresse ou est rangee la variable. A l'initialisation
 (apres un LIFT), ce pointeur est initialise au debut de l'espace memoire dans
 la zone donnee du bank precedemment defini.
     Ce pointeur peut etre modifie par (aussi bien pour les variables non
  dimensionnees  que pour celle qui le sont) :
  @(Bank . Class_name).Var_name = Nouvelle_adresse ;
     Il faut que l'utilisateur verifie que cette Nouvelle_adresse pointe sur
  une zone de donnees correspondant aux dimensions et au type de la variable

   INITIALISATION DU LIEN D'UNE LINK_VAR
  =======================================

  ===> link Var1 to Reserved_Var(n);   

   Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable "reservee" (apres avoir fait un Grasp Array de cette
  variable)
  avec Var1         : nom de la link_var "locale"
       Reserved_Var : Eta_SV , Fi_TV , Fiz_TV
       n            : indice dans la Reserved_Var
  
  ==> link Var_Name_1 to Var_Name_2 of (LProc);

    Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable declare dans un CD ou TD bank d'un autre processeur.
  avec Var_Name_1 : nom de la link_var "locale"
       Var_Name_2 : nom de la var ou local_var "externe"
       LProc: Adresse permettant d'acceder a cette variable "externe" 
       ( LProc = LSV ou LCL ou LTV ou LTR ). Ne doit en aucun correspondre
       au processeur ou l'on est : ce pauvre FORTRAN n'etant pas reentrant,
       "results may be hazardous"

  ==> link Var_Name_1 to Var_Name_2;
   Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable de ce meme processeur.
  avec Var_Name_1 : nom de la link_var "locale"
       Var_Name_2 : nom de la var ou local_var "locale"

   LECTURE D'UNE VARIABLE D'UN AUTRE OBJET
  =========================================

  ==> set X = [Var2]{:type} of (LProc); " {...} veut dire optionel "
  
   Pour lire une variable declaree dans un CD ou TD bank d'un autre objet
  et la ranger dans une variable Fortran (ou une variable declare dans le CD
  ou TD bank locale, si on a fait un IMPLICIT ACCESS ...)

  avec X   : nom de la variable Fortran (ou d'une variable declaree dans
             le CD ou TD bank local, si on a fait un IMPLICIT ACCESS ...)
      Var2 : nom de la var , local_var ou link_var "externe"
      type : I ou R ; type de la var, local_var ou link_var "externe". Si le
             type n'est pas specifie, on prend le type FORTRAN par defaut
             (entier de I a N, reel sinon) de la variable externe Var2.
             Diagnostique d'erreur si le type (precise ou par defaut) ne
             correspond pas au type de Var2 tel qu'il a ete precise lors de
             sa declaration.
      LProc: Adresse permettant d'acceder a cette variable "externe" 
             ( LProc = LSV ou LCL ou LTV ou LTR )

   DECLARATION DES LIENS
  =======================

  ARGUMENT DES DECLARATIONS DES LIENS

  Lk_Name : Nom de lien. Doit etre compose uniquement de caracteres alphanumerique
  ou du caractere souligne. Pas de restriction sur la longueur.

  Class_Name : Nom de classe dans lauqlle la variable est definies

  dim : Dimension du tableau de liens. Cette dimension peut etre une expression
  contenant des nombres entiers, des PARAMETER FORTRAN mais ni une autre variable
  du bank ni une variable FORTRAN.

  ===> SLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Class_Name;

     Definit un lien de structure (ou un tableau de lien), de taille fixe.

  ===> RLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Class_Name;

     Definit un lien de reference (ou un tableau de lien), de taille fixe.
  !!!!!  attention !!!!! Pour l'instant, il ne faut surtout pas definir un
  RLINK apres avoir definit des LINK_VAR dont la dimension depend d'une
  variable du bank; plantage assure.

    PROTECTION DES VARIABLES , CONTROLE DES INDICES DE TABLEAUX
  ==============================================================

  ===> CHECK ARRAY (OP1=YES_NO[,OP2=YES_NO])[ARRAY1[,ARRAY2,..]];

  OP1, OP2 : Operation a 'checker' (RD ou WR)
  YES_NO   : (Y ou N ou X)
  ARRAY1, ARRAY2 : Noms des tableaux
    -Si on precise une seule operation, le controle des indices pour
  l'autre operation n'est pas modifiee.
    -Si on ne precise pas de nom de tableau, la directive s'applique
  a l'ensemble des tableaux.
    -Cette directive peut etre situee  n'importe ou. Elle s'applique a la
  suite du texte. Elle peut etre situee a plusieur endroit : le controle des
  indices ne sera pas le meme dans tout le programme.
    - Par defaut on controle l'ecriture et la lecture pour tous les tableaux
  CHECK ARRAY (WR=Y,RD=N);
    - Si YES_NO vaut X, on prend la valeur precedent le dernier CHECK ARRAY.
   Ceci permet de modifier locale le controle des tableaux, puis de remettre
   les conditions de controle comme avant (voir par exemple la macro Z_Pr )

  ===> INHIBIT CHECK ARRAY;

    - Plus aucun controle sur les indices (ni a la creation, ni a la lecture,
  ni a l'ecriture) n'est effetue et ne peut etre effectue pour tous les
  tableaux creer a partir de cette directive. Les directives CHECK n'ont
  aucun effet.
    - Le code genere est beaucoup plus 'leger'
    (- Cette directive modifie les macros definissant les operations de
  lecture/ecriture et l'operation de controle des dimensions initiales,
  macros appelees lors de la creation d'un tableau)
!!!! Antonio Rodrigues pretend avoir obtenu des resultats differents
!!!! avec et sans cette instruction => PRUDENCE donc

  ===> WRITE INHIBIT ARRAY AR1[,AR2....];

  AR1,AR2 : Nom de tableaux
    - Interdit l'ecriture pour les tableaux dont le nom est specifie, non
  encore crees. Aucun effet sur les tableau deja existant.


1 ********************************************************************
  *****************  Z.B.M.  (ZOOM Bank Manager )   ******************
  ********************************************************************
  ***** Chainage des banks, définition de l'origine du chainage, *****
  ***** création des bank, accès aux variables des bank, ....    *****
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************


  DEFINTION DES CHAINAGES DE BANK
  ===============================

  ===> local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                          [~CX~IC~],
                          [~etc~FM*~IN~etc~],
       end_chains;

    . Declaration des chaines de graphes orientes de gauche a droite.
    . Permet de referencer tout bank (ex TV) ayant une origine a sa gauche
      dans une chaine de la liste ( ex CL,SV ou CX).
    . La premiere chaine de la liste permettant le chainage sera retenue.
    . La presence de * signifie adressage indirect (reserve pour la classe
      FM)
    . Une seule declaration de liste est autorisee par subroutine.
    . La presence de CX(.) est requise pour la commande READ THRU. Dans ce cas
      il est inutile de repeter la chaine sans CX(.).

  *****  DIAGNOSTICS ET ERREURS :
  Toute tentative de declarer plus d' une liste sera sanctionnee par le
  message d' erreur:
      '** ZBM ERROR ** ONLY ONE CHAIN LIST BLOC ALLOWED PER SUBROUTINE'


  DEFINTION DE LA PREMIERE ORIGINE DES CHAINAGES DE BANK  (zero-level FROM )
  ==========================================================================

  On doit, avant toute reference a un bank definir une premiere origine des
  chainages au debut de chaque routine :

  - pour un processeur de cellule, on definit comme premiere origine la
  classe CL. Si LCL est l'adresse du bank de la cellule, on fera :

  ===> from CL(LCL)
       <
           ......
       >
  - pour un processeur de transfert, on definit comme premiere origine la
  classe TR. Si LTR est l'adresse du bank de la cellule, on fera :

  ===> from TR(LTR)
       <
           ......
       >
       
  DEFINTION LOCALE DE L'ORIGINE D'UN CHAINAGE DE BANK
  ===================================================

  ===> from Cl_Bk(LBank)
       <   ..........
           .....  exit from LBank;
           ..........
       >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  Cette instruction :
  - instancie le bank LBank de la class Cl_Bk a partir de l'origine courante
    des chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.


  BOUCLE SUR TOUS LES BANKS D'UNE CLASSE AVEC REDEFINTION
  =======================================================
  DE L'ORIGINE DES CHAINAGES DE BANK
  ==================================
                                          
  - Cas generale
  --------------

  ===> skip thru Cl_Bk(LBank)
       <  .....
          .....  to next LBank;
          .....  exit from LBank;
       >
  Arguments : Cl_Bk, LBank.

  Cette instruction :
  - instancie le bank LBank de la class Cl_Bk a partir de l'origine courante des
  chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.
  - to next LBank ou la fin de block MORTRAN (>) provoque le bouclage sur LTV
  jusqu a ce que l'on ai parcouru tous les banks de cette classe.
  -(Cette instruction est utilisable lorsque les banks sont chaines a la suite
  l'un de l'autre)

  - Cas particulier
  -----------------

  Cas rencontre lorsque l'on veut parcourir les connections sous un T-Plug
  (c.a.d. un TV)

  ===> NCX = (LTV).Nb_Cx_CX;   "Nombre de connexion de ce T-Plug"
       read thru CX(LCX) (J=1,NCX)
       <  .....
          .....  to next LCX;
          ....   exit from LCX;
       >
  Arguments :
    CX : nom de la classe du bank
    LCX: adresse du bank
    J  : indice de boucle
    NCX: nombre de connexions sur lesquelles s'effectue la boucle

  Cette instruction :
  - instancie le bank LCX de la class CX a partir de l'origine courante des
  chainages.
  - definit CX(LCX) comme etant la nouvelle origine des chainages.
  - exit from LCX; provoque la sortie de ce block MORTRAN.
  - to next LCX ou la fin de block MORTRAN (>) provoque le bouclage sur LCX
  jusqu a ce que l'on ai parcouru NCX fois la boucle.
  - Exige de declarer ~CX(.)~ dans le bloc LOCAL_VALID_CHAINS(voir cette commande).
  -(Cette instruction doit etre utilisee lorsque les banks doivent etre addresses
  via un tableau de link , ce qui est les cas des CX sous les TV (cf TV Bank)).


  INSTANCIATION D'UN BANK, SANS MODIFICATION DE L'ORIGINE DES CHAINAGES
  =====================================================================

  ===> get Cl_Bk(LBank);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

     . Instancie le bank LBank a partir de l' origine courante des chainages.
     . Tolere tout alteration de LBank.
  *****  PAS DE DIAGNOSTIC .


  ACCES AUX VARIABLES D'UN BANK INSTANCIE
  =======================================

  Apres avoir instancié un bank LBank (par les instructions from, get, skip thru
  ou read thru ), on peut accéder à toutes les variables de ce bank (voir liste
  plus loin) par :
  ===> (Lbank).Var_Name    ou   (Lbank).Var_Name(..) pour les variables
  dimensionnées. Actuellement pas de contrôle d'indice pour l'accès aux
  variables dimensionnées.

  L'instruction
  ===> Point_On(LBank)
  permet d'accéder à une variable non plus par (Lbank).Var_Name, mais par
  ===> ..Var_Name

  Arguments :
    LBank : Bank addresse
    Var_Name : nom de variable


  CREATION D'UN BANK
  ==================

  ===> Lift Lbank of class Cl_Bk under (L_Up, -N_Lk);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse
    L_Up  : Adresse du bank de reference auquel ser attache l'objet cree
    N_Lk  : si = 0, on cree le bank en next de L_Up
            si <>0, on cree le bank sous L_up, rattache au lien numero N_Lk

  Cette instruction :
  - cree le bank
  - genere un get Cl_Bk(LBank) et un Point_On(LBank)

  Certaines grandeurs necessaires a la creation du bank, si elle ne sont
  definient par PRECOMP ou par une declaration locale de classe, doivent
  être instanciées par l'instruction

  ===> Set .Var_name for Cl_Bk = Valeur;

  arguments : Var_Name, Cl_Bk, Valeur

1 ********************************************************************
  *****************  Z.B.M.  (ZOOM Bank Manager )   ******************
  ********************************************************************
  ***** Boucles courtes pour les processeurs (Dev from Sept 94)  *****
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

======================================
= Amélioration de la boucle standard :
======================================
    read thru CX(LCX) (JCx=1,*)
    < 
 génère :
    READ THRU CX(LCX)(JCx=1,0_(#U6#S6$L#C.TV).Nb_Cx_CX)<
( cad qu elle récupère l'adresse du TV supérieur );
[ATTENTION : cela lui interdit d'être sous un Get TV(LTV); car alors, le TV
n'est pas dans le stack 6 => faire plutot un From TV(LTV);]

=================================
= Ecriture compactee de boucles :
=================================

      Skip thru CX(LCX) (JOCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 génère les boucles standard Skip et Read thru;

Attention :
!!! effectue les tests pour skiper les T_Probes ( (LTV).Nb_Tr_Var=0 ).
   (au contraire du skip thru standard qui prend tout
!!!/.XX(LXX) genere un FROM XX(LXX)<
----

 CX(LCX2.ne.LCX) : skip en cas d'égalité (test uniquement sur banks CX).
     *** adresse de la boucle CX locale. (LCX supposée définie précédemment);
pour ces formes, la première adresse est l'adresse de boucle (of course)

 Aucun test sur les CPlugs;

 Autres possibilités :

 .../TProbe(LTV)/ : ne prend que les T_Probes;
 .../All_TV(LTV)/ : prend tout;

 CX(LCX2.eq.LCX)  : skip en cas de non égalité;

 signification du /. : génère un get,           (=> ne prend donc que le premier Bk)
                       skip si (LTV).Nb_Tr_Var=0:
                       suivit d' un from;
 pour CX( )/.TV( )<  : skip to next CX si T_Probe;
 (avec son pendant /.TProbe( ) of course);

 Formes équivalentes :
  TPlug == TV;
  CPlug == SV;
  TPlug_Tprobe == All_TV;

 Rq : On peut toujours utiliser la forme CX(LCX) (JCx=1,NCX), ou NCX a été
définie précédemment.

  ********************************************************************
  **************************  FUTURA adds  ***************************
  **********************************************(Al1 mardi 21/01/1997)

Les additions suivantes sont utiles pour sélectionner les C-Plug qui
sont identifiés par (LSV).C_Plug_Nm, (LSV).C_Plug_Nb [ex: Face-1]
ATTENTION : Case sensitive !!! (même forme que dans Znit)

... /SV(LSV.eq.*-*)/  pas d'effet    [* stands for any]
... /SV(LSV.eq.Face-*)/
... /SV(LSV).eq.*-1/
... /SV(LSV.eq.*-1,2,3,4)/
... /SV(LSV.eq.Face-1,2,3,4)/
... /SV(LSV.ne.Face-*)/
... /SV(LSV.ne.Face-1,2,3,4)/ == .NOT.(LSV.eq.Face-1,2,3,4)

idem avec la forme : /.SV(LSV)

commentaire : on reprend ainsi la forme logique du traitement des listes IF<
 IF i.eq.1,2,3,4  == IF i.eq.1 ou 2 ou 3 ou 4
 IF i.ne.1,2,3,4  == IF i .eq. ni 1, ni 2 , ni 3, ni 4
=> ici ni Face-1, ni Face-2, etc
;
exemple (pas forcément à suivre)
  SKIP THRU TV(LTV.ne.LTV2)/CX(LCX.ne.LCX2) (JCX=1,*)/.SV(LSV.ne.Face-3,4,5)/
            .CL(LCL.ne.LCL2)/SV(LSV2.eq.Bulk-*)/CX(LCX3.ne.LCX)/
            .TPROBE(LTV3.ne.LTV)
  < ;continue; to next LTV; to next LCX; to next LCX3;
  >;
********************************************************************************************
********** Futura : Connections directes TRansfert a TRansfert *****************************
*********************************************************Al1 : 14/08/1998 ******************

les : SKIP THRU TV(LTV)/CX(LCX) < ne retiennent que les TV connectés à une cellule
au moins et les CX non connectés directement à un transfert (via l'objet (*) de la famille).

All_TV prend tous les TV (T_probes y compris), All_CX tous les CX.
On pourra alors utiliser les expressions :
IF (TV_to_TR(LTV)) then; IF (CX_to_TR(LCX)) then; pour les branchements;
TV_to_TR invoque l'expression logique : JBIT(IQ(LTV),IODITR).eq.1
CX_to_TR invoque l'expression logique : JBIT(IQ(LCX),IODITR).eq.1

Pour suivre les connections jusqu'à un transfert, on utilise alors :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)<
qui est equivalente à :
SKIP THRU Cx(LCX)
< IF (JOBIT(IQ(LCX),IODITR).eq.0) To Next LCX;
  SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)<

Dans tous les cas, on définit une matrice D particulière :

grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX); dans le cas des SKIP THRU explicites
ou alors :
grasp array D_TV (LTV2,LTR) for (*,*,LCX); dans le cas des SKIP THRU rapides;

Rq : ces dernières macros rapides marchent aussi dans les cas standards ou on ne ferait
pas reconnaissance de la Cellule médiate.
exemples complet de boucle de connection directe :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)
< grasp array D_TV (LTV2,LTR) for (*,*,LCX);
  D_TV(i,j)= ...;
>;
Avec boucles explicites :
SKIP THRU CX(LCX)
< IF (Cx_to_TR)
  < SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)
    < grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX);
      ;;; on remarque que l'objet * de connexion directe des TR ne comporte qu'un SV.
    >;
  >ELSE
  < " connection aux cellules "
    ;;;
  >;
(l'intérêt réside dans le fait que la Cellule connectée ne verra pas ces CX)


<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc.930511
  ====================================================================
  =================  Z.B.M.  (ZOOM Bank Manager )   ==================
  ====================================================================
  ==========================  USERS MANUAL  ==========================
  ====================================================================
  Octobre 91


  DEFINTION DES CHAINAGES DE BANK
  ===============================

  local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                     [~CX~IC~],
                     [~etc~FM*~IN~etc~],
  end_chains;

          . Declaration des chaines de graphes orientes de gauche a droite.
          . Permet de referencer tout bank (ex TV) ayant une origine a sa gauche
            dans une chaine de la liste ( ex CL,SV ou CX).
          . La premiere chaine de la liste permettant le chainage sera retenue.
          . La presence de * signifie adressage indirect (reserve pour la classe
            FM)
          . Une seule declaration de liste est autorisee par subroutine.
          . La presence de CX(.) est requise pour la commande READ THRU. Dans ce cas
            il est inutile de repeter la chaine sans CX(.).

  *****  DIAGNOSTICS ET ERREURS :
          Toute tentative de declarer plus d' une liste sera sanctionnee par le
        message d' erreur:
              '** ZBM ERROR ** ONLY ONE CHAIN LIST BLOC ALLOWED PER SUBROUTINE'


  DEFINTION DE LA PREMIERE ORIGINE DES CHAINAGES DE BANK  (zero-level FROM )
  ==========================================================================

  On doit, avant toute reference a un bank definir une premiere origine des
  chainages au debut de chaque routine :

  - pour un processeur de cellule, on definit comme premiere origine la classe
  CL. Si LCL est l'adresse du bank de la cellule, on fera :

  from CL(LCL)
  <
      ......
  >

  - pour un processeur de transfert, on definit comme premiere origine la classe
  TR. Si LTR est l'adresse du bank de la cellule, on fera :

  from TR(LTR)
  <
      ......
  >


  DEFINTION LOCALE DE L'ORIGINE D'UN CHAINAGE DE BANK
  ===================================================

  from Cl_Bk(LBank)
  <   ..........
      .....  exit from LBank;
      ..........
  >

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  Cette instruction :
  - instantie le bank LBank de la class Cl_Bk a partir de l'origine courante des
  chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.


  BOUCLE SUR TOUS LES BANKS D'UNE CLASSE
  ======================================

  - Cas generale
  --------------

  skip thru Cl_Bk(LBank)
  <  .....
     .....  to next LBank;
     .....  exit from LBank;
  >

  Arguments : Cl_Bk, LBank.

  Cette instruction :
  - instantie le bank LBank de la class Cl_Bk a partir de l'origine courante des
  chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.
  - to next LBank ou la fin de block MORTRAN (>) provoque le bouclage sur LTV
  jusqu a ce que l'on ai parcouru tous les banks de cette classe.
  -(Cette instruction est utilisable lorsque les banks sont chaines a la suite
  l'un de l'autre)

  - Cas particulier
  -----------------

  Cas rencontre lorsque l'on veut parcourir les connections sous un T-Plug
  (c.a.d. un TV)

  NCX = (LTV).Nb_Cx_CX;   "Nombre de connexion de ce T-Plug"

  read thru CX(LCX) (J=1,NCX)
  <  .....
     .....  to next LCX;
     ....   exit from LCX;
  >

  Arguments :
    CX : nom de la classe du bank
    LCX: adresse du bank
    J  : indice de boucle
    NCX: nombre de connexions sur lesquelles s'effectue la boucle

  Cette instruction :
  - instantie le bank LCX de la class CX a partir de l'origine courante des
  chainages.
  - definit CX(LCX) comme etant la nouvelle origine des chainages.
  - exit from LCX; provoque la sortie de ce block MORTRAN.
  - to next LCX ou la fin de block MORTRAN (>) provoque le bouclage sur LCX
  jusqu a ce que l'on ai parcouru NCX fois la boucle.
  - Exige de declarer ~CX(.)~ dans le bloc LOCAL_VALID_CHAINS(voir cette commande).
  -(Cette instruction doit etre utilisee lorsque les banks doivent etre addresses
  via un tableau de link , ce qui est les cas des CX sous les TV (cf TV Bank)).


  INSTANTIATION D'UN BANK, SANS MODIFICATION DE L'ORIGINE DES CHAINAGES
  =====================================================================

  get Cl_Bk(LBank);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

          . Instantie le bank LBank a partir de l' origine courante des chainages.
          . Tolere tout alteration de LBank.
  *****  PAS DE DIAGNOSTIC .


  ACCES AUX VARIABLES D'UN BANK INSTANTIE
  =======================================

  Apres avoir instantie un bank LBank (par les instructions from, get, skip thru
  ou read thru ), on peut acceder a toutes les variables de ce bank (voir liste
  plus loin) par :
    (Lbank).Var_Name    ou   (Lbank).Var_Name(..) pour les variables dimensionnees.
  Actuellement pas de controle d'indice pour l'acces aux variables dimensionnees.

  L'instruction Point_On(LBank) permet d'acceder a une variable non plus par
  (Lbank).Var_Name, mais par ..Var_Name

  Arguments :
    LBank : Bank addresse
    Var_Name : nom de variable


  CREATION D'UN BANK
  ==================

  Lift Lbank of class Cl_Bk under (L_Up, -N_Lk);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse
    L_Up  : Adresse du bank de reference auquel ser attache l'objet cree
    N_Lk  : si = 0, on cree le bank en next de L_Up
            si <>0, on cree le bank sous L_up, rattache au lien numero N_Lk

  Cette instruction :
  - cree le bank
  - genere un get Cl_Bk(LBank) et un Point_On(LBank)

  Certaines grandeurs necessaires a la creation du bank, si elle ne sont definient
  par PRECOMP ou par une declaration locale de classe, doivent etre instantiees
  par l'instruction

  set .Var_name for Cl_Bk = Valeur;

  arguments : Var_Name, Cl_Bk, Valeur


1 ====================================================================
  =========================   A. L. L. I. S. =========================
  =======  (ADA Like Language Implementation Specification)   ========
  ====================================================================
  ==========================  USERS MANUAL  ==========================
  ====================================================================
  Octobre 91


  =====    PROCEDURE
  ==================

  - PROCEDURE
  -----------

  <
     <
       <
           execute STEADY;
       >
     >
  >;
  (  out of the zero-level FROM bloc  )
  procedure STEADY
  <
     .....
     .....
  >
      .execute sera remplace par un GOTO Fortran pointant sur l' instruction
  de declaration de la procedure STEADY. Ainsi, la procedure se trrouve situee
  en dehors de tout Bank bloc<>, et donc, toutes les variables d' adresse devront
  etre calculees avant l' execute.
  from,read thru, skip thru et get sont interdites.

  *****  DIAGNOSTICS ET ERREURS :
  Toute tentative d' utiliser les instructions ZBM de chainage provoque le message
  d' erreur:
            '** ALLIS ERROR ** ZBM INSTRUCTION FORBIDDEN IN NON AT-PROCEDURE'
  Voire egalement *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux
  AT-PROCEDURE


  - AT-PROCEDURE
  --------------
  <
     <
       <
          at LCX2 execute STEADY;
       >
     >
  >;
  (  out of the zero-level FROM bloc  )
  procedure STEADY at LCX_LOC
  < from CX(LCX_LOC)
    <   .....
        .....
    >
  >
  AT-PROCEDURE  : Procedure permettant de definir (en son fort interieur) une
  premiere origine des chainages de bank, et donc d'acceder ensuite a d'autre
  bank via des GET, DES FROM ....

  *****  DIAGNOSTICS ET ERREURS :
   Une at-procedure exige de declarer un from <> bloc
  qui sera 0-level.L' adresse de l' origine est purement symbolique et sera
  remplacee par une variable locale ( cf l'instruction ALLIS: LOCAL_VARIABLE ),
  sans qu' il soit necessaire de la declarer LOCALE.
    L absence de from<> declenche un message d' erreur :
       '** ALLIS ERROR ** AT-PROC SHOULD CONTAIN A 0-LEVEL FROM< '

  *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux AT-PROCEDURE :
       La demande d'execution d'une procedure ou d'une at-procedure
  non definie provoque un message d' erreur :
       '** ALLIS ERROR ** PROCEDURE XXXXX IS UNDEFINED'
  La definition d'une procedure sans demande d'execution associee genere le message:
       '** ALLIS WARNING ** PROCEDURE XXXXX IS UNUSED'
                   ( sous forme de commentaire )
        Une at-procedure, comme une procedure, doit etre declaree entre
  le >; zero-level from et la carte END; .


  DECLARATION DE VARIABLES LOCALES
  ================================

  LOCAL_VARIABLES: (R_DROIT,ATTENDS-TOI,I_ES-TU?) ;

   .  Remplace dans le texte subsequent ces trois variables par un nom unique
  reprenant la meme initiale ( pour type implicite FORTRAN), comme par exemple:
       R_DROIT         -->  R10016
       ATTENDS-TOI     -->  A10017
       I_ES-TU?        -->  I10018
    .  (La declaration se fait n' importe ou, et la substitution reste valide
       jusqu a la carte END;)


  =====  CASE
  =================

  Ensemble d'instructions pour emuler le ADA CASE instruction:
  ------------------------------------------------------------

  TYPE  mach_in OF (truc_1,truc_2,truc_3);
    .   Instruction de declaration, declaree avant toute instruction FORTRAN
  executable.

         ...
  mach_in := truc_3;
    .   Instanciation de la variable mach_in (il va sans dire que le signe = va
  aussi).
        ...

  CASE mach_in IS
  <  WHEN truc_1  <... >
     WHEN truc_3  < execute ...  ;   >
     WHEN_OTHERS  <   print*' error' >
  >
    .   Permet de manipuler la variable symbolique mach_in en lui donnant des
        valeurs symboliques truc_1 etc  .
    .   Analogue a l' instruction IF..ELSEIF..ELSEIF..ENDIF;
    .   WHEN_OTHERS termine obligatoirement le CASE ... IS bloc.
    .   Pour les inconditionnels du FORTRAN, elles sont remplacees par I10011 et
        incrementees dans l' ordre de la liste:
        et donc truc_3=truc_2 +1=truc_1 +2 (ne pas en abuser).
    .   De meme, : truc_1=mach_in +1 ...


  Boucles DO a multiples indices:
  ===============================

  DO ((...(I=1,12,3),J=J1,J2)...)<...>;
     .   Un seul <> bloc pour plusieurs boucles imbriquees. Equivalent a:
     < DO J=J1,J2
        < DO I=1,12,3
             ...
        >
     >
  c.a.d comme la regle d' indices de PRINT(((A(i,j),i=..)j=..)


  L'IMPRESSION FACILE
  ===================

  Z_Pr : var1,var2,(var3(i),i=1,n);

  genere
        print *,'**  var1,var2,(var3(i),i=1,n)'
        print *,var1,var2,(var3(i),i=1,n)


1 ====================================================================
  ====================   PREMISSES D'UN P.D.L.   =====================
  ===================  Processor Design Language  ====================
  ====================================================================
  ==========================  USERS MANUAL  ==========================
  ====================================================================
  Octobre 91


  VERIFICATION EFFECTUEES PAR LES INSTRUCTIONS
  ============================================

     On verifie systematiquement que les banks instancies qui sont en argument des
  instructions sont bien de la classe voulue (permet de diagnostiquer des inversions
  d'argument ou autre).
     On controle les indices lors des acces aux vecteurs et aux matrices, sauf si
  l'utilisateur precise 'inhibit check array;' au debut de son processeur.

  META LANGAGE
  ============

  Soit:
    Vct : Nom d'un vecteur (ETA,GAMMA,FI,OMEGA,FIZ)
    Mx  : Nom de matrice (ABt, Ct, D)

  Alors la numerotation des composantes des matrices et de vecteurs suit
  la logique suivante :
    Vct : Numerotation "naturelle".
    Vct_SV : Numerotation dans le CPLUG
    Vct_TV : Numerotation dans le TPLUG
    Mx_SV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le CPLUG
    Mx_TV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le TPLUG

  Les arguments associes au GRASP de ces vecteurs et matrices suit egalement cette
  logique :
  LTR :  Numerotation "naturelle" pour le transfert
  LCL :  Numerotation "naturelle" pour la cellule
  LTV (ou LTV2) : Numerotation dans le TPLUG
  LSV : Numerotation dans le CPLUG

  Par exemple ,
  GRASP ARRAY MX_SV(LSV,LTR) for ...
                     ^   ^
                     |   |--- 2 eme indice (numero de ligne) dans l'ordre
                     |        naturel du transfert
                     |---- 1 er indice (numero de colonne) dans l'ordre du CPLUG


  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

  1 ) Instructions attachees au transfert
  -------------------------------

  Print_TR_ID(LTR);
  -----------------

  arguments:
  LTR : bank instancie attache au transfert

    Imprime de l'information permettant de reconnaitre le transfert
  c.a.d.
    ** TR OF TYPE:    .... CONNECTED TO CELL: ...  -  .. AND OTHERS.


  grasp array fi,omega (LTR);
  ---------------------------

  arguments:
  LTR : bank instancie attache au transfert

    Cette instruction (en general au debut des points d'entrees T... et S...) permet
  ensuite d'acceder directement au vecteur FI des variables de transfert et au
  vecteur OMEGA.
    Variables FORTRAN reservees utiles :
  LO_FI, LO_OMEGA : adresses des banks FI et OMEGA
  Autres variables FORTRAN reservees :
  IO_O_FI, IO_FI, MO_FI, IO_O_OMEGA, IO_OMEGA, MO_OMEGA


  copy array fi in fiz (LTR);
  ---------------------------

  arguments:
  LTR : bank instancie attache au transfert

  Copy le vecteur FI dans FIZ. Cette instruction definit un tableau FIZ.
  Si un grasp array FI... n'a pas ete fait, on le genere.

    Variables FORTRAN reservees utiles :
  LO_FIZ : adresses du bank FIZ
  Autres variables FORTRAN reservees :
  IO_O_FIZ, IO_FIZ, MO_FIZ


  2 ) Instructions attachee a une connexion
  ----------------------------------

  Ces instructions se situent naturellement dans l'environement suivant :

  from TR(LTR)
  < skip thru TV(LTV)
    < NCX= ...;
      read thru CX(LCX) (J=1,NCX)
      < get SV(LSV); Print_SV_CL_ID(LSV);
           ....
        grasp array ETA_SV (LSV);
           ...
        grasp array Ct_SV (LSV,LTR) for (LCX);
           ...
      >
    >
  >

  Print_SV_CL_ID(LSV);
  -------------------

  argument:
  LSV : bank instancie attache au C-Plug de la cellule connectee

  imprime :
   ** CONNECTED-CL: ...-  .. OF TYPE:  ....


  grasp array ETA_SV (LSV);
  -------------------------

  argument:
  LSV : bank instancie attache au C-Plug de la cellule connectee

  Cette instruction permet d'acceder aux variables d'etat connectees au C-Plug (LSV),
  dans la numerotation du C-Plug :
    ..... = ETA_SV(ISV)
  avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
  L'ecriture dans ETA_SV est interdite.
     Variables FORTRAN reservees utiles :
  LO_CL_SV, LO_ETA_SV : adresses des banks CL et ETA
  Autres variables FORTRAN reservees :
  IO_O_ETA_FM, IO_O_ETA_CL, MO_O_ETA_CL


  grasp array Ct_SV (LSV,LTR) for (LCX);
  --------------------------------------

  arguments:
  LCX : bank instantie attache a cette connexion
  LSV : bank instantie attache au C-Plug de la cellule connectee
  LTR : bank instantie attache au transfert

  Cette instruction permet d'acceder a la partie de la matrice Ct rattachee a un C-Plug de
  la facon suivante:
  Ct_SV( ISV, ITR) = ... ;
  avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
       ITR : numero de la composante de la variables de transfert

                      d ETA_SV(ISV)
  Ct_SV( ISV, ITR) = ---------------
                       d  FI(ITR)

  Variables FORTRAN reservees utiles :
  LO_CT : adresses du bank CT
  Autres variables FORTRAN reservees :
  IO_O_CT_IC, IO_CT, MO_CT


  3 ) Instructions utilises pour les matrisses D
  ----------------------------------------------

  Ces instructions se situent naturellement dans l'environement suivant :

  from TR(LTR)      "Transfert origine"
  <  skip thru TV(LTV)
     <  NCX=(LTV).Nb_Cx_CX;
        read thru CX(LCX) (J=1,NCX)
        <
  ! Matrice D
           from CL(LCL) "ce FROM est indispensable; un GET ne suffit pas"
                        "Cellule connectee"
           < skip thru CX(LCX2)
             < get TV(LTV2);  "Transfert connecte"
               if ( (LTV2).Nb_Tr_Var.eq.0 ) to next LCX2;
               grasp array FIZ_TV (LTV2);
                 ... = .... *FIZ_TV(..) ...;
               grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
               D_TV(1,1) = ....;
               D_TV(.. , ..) = ....;
             >
           >
  ! Fin matrice D
        >
     >
  >


  grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
  -----------------------------------------------

  arguments:
  LTR  : bank instantie attache au "transfert origine"
  LTV2 : bank instantie attache au T-Plug du "transfert connecte"
  LCX2 : bank instantie attache a la connexion Cellule - "Transfert connecte"
  LCX  : bank instantie attache a la connexion "Transfert origine" - Cellule
  LCL  : bank instantie attache a la cellule par laquelle passe la connexion
         entre ces deux transferts

  Chaine de la connexion :
  LTR  -- LTV -- LCX -- LCL -- LCX2 -- LTV2
   ^                     ^              ^
   |                     |              |--- "Connected Transfer"
   |                     |--- "Connecting Cell"
   |--- "Origin Transfer"

  Cette instruction effectue les operations suivante :
  = Si le bank associe a la matrice D n'existe pas, elle le cree et elle positionne le mot
  d'etat de la cellule precisant que celle-ci possede une matrice D (call sbit1( ...) )
  = Si la matrcie D a ete compacte, elle la decompacte
  = Elle permet d'acceder a la partie de la matrice D rattachee a un Transfert
  connecte au Transfert via une cellule connectante la facon suivante:
  D_TV( ITV, ITR) = ... ;
  avec ITV : numero d'ordre dans le T-Plug de la variable du transfert connecte
       ITR : numero de la composante de la variables du transfert origine

                       d  FI(ITR)
  D_TV( ITV, ITR) = ---------------
                      d FI_TV(ITV)

  Variables FORTRAN reservees utiles :
  LO_D_TV : adresses du bank D
  LO_TR2_D, LO_IC2_D : adresses du "Connected Transfer" et du IC associe a la connexion
            celulle - transfert connecte
  LO_IC_D : adresse du IC associe a la connexion transfert origine - celulle
  Autres variables FORTRAN reservees :
  IO_O_D_CL, JO_O_D_CL, IO_O_D_NOT_TV, JO_O_D_NOT_TV, MO_O_D_NOT_TV, NO_O_D_NOT_TV


  grasp array FIZ_TV (LTV2);
  --------------------------

  arguments:
  LTV2 : bank instantie attache au T-Plug du transfert connecte

    Acces directe au vecteur fiz du transfert connecte dans la numerotation du T-Plug
  L'ecriture dans FIZ_TV est interdite.



  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

  1) Instructions attachees a la cellule
  --------------------------------

  Print_CL_ID(LCL);
  -----------------

  arguments:
  LCL : bank instancie attache a la cellule

    Imprime de l'information permettant de reconnaitre la cellule
  c.a.d.
   ** CL: ...  -  .. OF TYPE:     ...

  grasp array eta,gamma (LCL);
  ----------------------------

  arguments:
  LCL : bank instantie attache a la cellule

    Cette instruction (en general au debut des points d'entrees C... et R...) permet
  ensuite d'acceder directement au vecteur ETA des variables d'etat et au
  vecteur GAMMA.
  Variables FORTRAN reservees utiles :
  LO_ETA, LO_GAMMA : adresses des banks ETA et GAMMA
  Autres variables FORTRAN reservees :
  IO_O_ETA, IO_ETA, MO_ETA, IO_O_GAMMA, IO_GAMMA, MO_GAMMA

  Set_signed_ABt(LCL);
  --------------------

  arguments:
  LCL : bank instantie attache a la cellule

    Cette instruction precise a la navette ZOOM que la cellule gere elle-meme
  la convention de signe des transferts. Les signes de ABt ne sont pas modifie
  par la navette.

  2 ) Instructions attachees a une connexion
  ------------------------------------------

  Ces instructions se situent naturellement dans l'environement suivant :

  from CL(LCL)
  < skip thru SV(LSV)
    < skip thru CX(LCX)
      < get TV(LTV);
           ....
        grasp array FI_TV (LTV);
           ...
        grasp array ABt_TV (LCL,LTV) for (LCX);
           ...
      >
    >
  >

  grasp array FI_TV (LTV);
  ------------------------

  arguments:
  LTV : bank instantie attache au T-Plug du transfert connecte

  Cette instruction permet d'acceder aux variables de transfert connectees au T-Plug (LTV),
  dans la numerotation du T-Plug :
    ..... = FI_TV(ITV)
  avec ITV : numero d'ordre dans le T-Plug de la variable de transfert
  L'ecriture dans FI_TV est interdite.

  Variables FORTRAN reservees utiles :
  LO_TR_TV, LO_FI_TV : adresses des banks TR etFI
  Autres variables FORTRAN reservees :
  IO_O_FI_FM, IO_O_FI_TR, MO_O_FI_TR


  grasp array ABt_TV (LCL,LTV) for (LCX);
  ---------------------------------------

  arguments:
  LCX : bank instantie attache a cette connexion
  LCL : bank instantie attache a la cellule
  LTV : bank instantie attache au T-Plug du transfert connecte

  Cette instruction permet d'acceder a la partie de la matrice ABt rattachee a un T-Plug de
  la facon suivante:
  ABt_TV( ICL, ITV) = ... ;
  avec  ICL : numero de la composante de la variables de cellule
        ITV : numero d'ordre dans le T-Plug de la variable de transfert

                         -1   d FI_TV(ITV)
  ABt_TV( ICL, ITV) =   A  * --------------
                              d  ETA(ICL)

  Variables FORTRAN reservees utiles :
  LO_ABT, LO_TR_ABT, LO_IC_ABT : adresses des bank ABT, TR et IC
  Autres variables FORTRAN reservees :
  IO_O_ABT_CL, IO_O_ABT_NOT_TV, MO_O_ABT_NOT_TV


1 ====================================================================
  ===========   DECLARATION LOCALE D'UNE CLASSE DE BANK   ============
  ====================================================================
  ==========================  USERS MANUAL  ==========================
  ====================================================================
  Octobre 91


     La declaration locale d'un BANK permet d'acceder a celui-ci comme si
  il avait ete declare dans le precompilateur:
  - Apres avoir fait un GET ou un FROM du bank, on accede a une variable
  du bank par (LBank).Var_Name.
  - Si des liens ont ete definis, on y accede de facon habituelle (@L..@..@..@).
  - Pour creer le bank on utilise l'instruction LIFT ...

     Avant la declaration du bank, l'instruction IMPLICIT ACCES TO BANK bk_name(LBk)
  permet ensuite a l'utilisateur, apres avoir instantie l'adresse LBk, d'acceder
  directement a une variable sans preciser le bank auquel elle appartient, c.a.d.
  d'ecrire Var_Name au lieu de (LBank).Var_Name

     Plusieurs banks peuvent etre definis simultanement. Apres la declaration d'une
  (ou d'une suite de) variable ou de liens, il faut donc preciser la classe auquelle
  elle appartient.  (VAR ..... IN CLASS Bk_name; )

     On distingue dans la declaration 3 type de variables:
  - LOCAL_VAR : ces variables sont directement rangees dans la zone donnees du bank
  - LINK_VAR  : seule l'adresse de ces variables sont rangees dans ce bank; les valeur
  elles memes sont rangees dans un autre bank.
  - VAR       : Vu de l'utilisateur, equivalent acuellement a LOCAL_VAR qu'il vaut
  mieux prefere actullement.  (En fait VAR est oriente PDL, who is not yet implemented)

     Chaque variable peut avoir 0, 1 ou 2 dimensions. La dimension d'une variable peut
  etre compose de nombres entiers, de parametres FORTRAN ou d'autre variables (placees
  entre crochets) de ce MEME bank.
     La dimension d'une variable ne peut en aucun cas contenir une variable FORTRAN.

     Par defaut le type d'une variable (entier ou reel) suit l'incontournable regle du
  FORTRAN (entier de I a N, reel autrement). Mais le type peut etre impose lors de la
  declaration de la variable ( ... : INTEGER, ... :REAL, ... :CHARACTER_4)

     Le rangement des variables dans la bank suit l'ordre de leur declaration.

     Lorsqu'une variable est dimensionnee, on peut la sous-structurer en sous-tableaux
  avec l'instruction ARRAY Ar_Name_1 IN ARRAY Ar_Name_2 (cf. doc)

     Controle d'indices des variables dimensionnees :
     Actuellement, quand on accede de facon standard ZBM a une variable dimensionne par
  l'instruction (Lbank).Var_Name(indice) , aucun controle d'indice n'est effectue
  ( Fameux adage du programmeur Fortran inconnu : "Je veux pouvoir faire ce que je veux,
  donc je dois pouvoir faire n'importe quoi" ). De meme quand on accede a l'adresse
  d'une variable par @(Lbank.Cl_Name).Var_Name(indice) .
     Par contre, lorsque l'on decide d'acceder de facon implicite a un bank, on admet
  que les taches les plus stupides puissent etre effectuees par la machine et non pas
  par l'utilisateur (point de vue subversif, s'il en est un). Par defaut un controle
  d'indice sera donc effectue sur les variables dimensionnees, sauf si l'utilisateur
  demande le contraire per l'instruction INHIBIT CHECK ARRAY;


  IMPLICIT ACCES TO BANK Cl_Name(Bank);
  =====================================

  arguments :
  Bank    : Variable correspondant a l'adresse du bank
  Cl_Name : Nom de la classe auquel appartiend le Bank

    Cette instruction permet a l'utilisateur d'acceder directement aux variables du
  bank: on ecrira par ex.  X = Y au lieu de (Bank).X = (Bank).Y .Elle doit etre situee
  avant le debut de la declaration de la classe.
     Avant d'utiliser les variables de ce Bank, il est indispensable (sous peine de
  plantage) de definir l'adresse de ce bank avec les instructions GET .., FROM .., ..
  Cette adresse doit etre instanciee pour l'ensemble des points d'entree le cas echeant.
     Un meme nom de variable ne peut etre defini dans plusieurs banks a acces implicite.
  De meme un meme nom ne peut etre utilise pour une variable FORTRAN et une variable
  dans un bank a acces implicite.


  DECLARE CLASS Cl_Name [,Cl_Name_2...];
  =====================================

  arguments :
  Cl_Name : Nom de classe

     Debut de la declaration de la classe Cl_Name[ ,ou de la liste de classe] . Toute
  declaration de classe doit etre termine avant la premiere instruction FTN executable
  (lors de la declaration, on genere en effet des instruction FORTRAN
  PARAMETER (....=....) ).


  END DECLARE CLASS Cl_Name[,Cl_Name_2...];
  ========================================

  arguments :
  Cl_Name : Nom de classe

     Fin de la declaration de la classe Cl_Name[ ,ou de la liste de classe] .


  ARGUMENT DES DECLARATIONS DE VARIABLES
  ======================================

  Var_Name : Nom de variable. Doit etre compose uniquement de caracteres alphanumerique
  ou du caractere souligne. Pas de restriction sur la longueur.

  Cl_Name : Nom de classe dans lauqlle la variable est definies

  type : type de la variable
    Les types autorises sont INTEGER , REAL (et bientot CHARACTER_4, DOUBLE)
    Si le type n'est pas defini, on prend la convention FORTRAN :
  entier pour les variables dont la premiere lettre est de I a N, reel sinon.

  nbcol, nblin : nombre de colonnes, nombre de lignes.
    Ces dimensions peuvent etre des expressions contenant des nombres entiers, des
  PARAMETER FORTRAN, une autre variable (deja definie) du meme bank; dans ce cas, cette
  variable doit etre entre crochet. Mais cela ne peut pas etre une variable FORTRAN.
    Lorsqu'une variable est utilisee dans une dimension, il est vivement conseille:
  - que cette variable soit definie au prealable
  - que cette variable soit une VAR ou une LOCAL_VAR
    Avant de creer le bank par l'instruction LIFT il faut que l'ensemble des variables
  utilisees dans une dimension soient instantiees par l'instruction SET :
  SET .Var_Name for Cl_name = Valeur;
  Apres le LIFT, les variables instantiees par l'instruction SET auront la valeur
  definie par cette instantiation.


  ADRESSES DES VARIABLES
  ======================

      On peut acceder a l'adresse d'une variable Var_Name du bank Bk_Name de la classe
  Cl_Name par
   @(Bk_Name . Cl_Name).Var_Name
  et pour les variables dimensionnees:
   @(Bk_Name . Cl_Name).Var_Name(Ncol,Nligne)


  LOCAL_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  ==================================================================================

     Definit une variable (ou une liste de variables) dans la zone donnee du bank.


  LINK_VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  =================================================================================

     Definit un lien de reference (ou un tableau de liens pour les variables
  dimensionnees) qui contient la (ou les) adresse ou est rangee la variable. Cette
  adresse, ou l'ensemble des adresses pour les variables dimensionnees, doivent etre
  initialisees par l'utilisateur
     @(Bank . Cl_name).Var_name = .......;
  Pour les variables dimensionnees:
     @(Bank . Cl_name).Var_name(Ncol,Nligne) = .......;


  VAR Var_name[( nbcol[,nblin] ) ] [,Var_name_2....] [:type] IN CLASS Cl_Name;
  ============================================================================

     Actuellement, l'instruction LOCAL_VAR doit lui etre systematiquement prefere.

     Definit un espace memoire dans la zone donnee du bank, definit un lien qui
  contient l'adresse ou est rangee la variable. A l'initialisation (apres un LIFT),
  ce pointeur est initialise au debut de l'espace memoire dans la zone donnee du bank
  precedemment defini.
     Ce pointeur peut etre modifie par (aussi bien pour les variables non dimensionnees
  que pour celle qui le sont) :
  @(Bank . Cl_name).Var_name = Nouvelle_adresse ;
     Il faut que l'utilisateur verifie que cette Nouvelle_adresse pointe sur une zone
  de donnees correspondant aux dimensions et au type de la variable


  ARGUMENT DES DECLARATIONS DES LIENS
  ===================================


  Lk_Name : Nom de lien. Doit etre compose uniquement de caracteres alphanumerique
  ou du caractere souligne. Pas de restriction sur la longueur.

  Cl_Name : Nom de classe dans lauqlle la variable est definies

  dim : Dimension du tableau de liens. Cette dimension peut etre une expression
  contenant des nombres entiers, des PARAMETER FORTRAN mais ni une autre variable
  du bank ni une variable FORTRAN.


  SLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
  =========================================================

     Definit un lien de structure (ou un tableau de lien), de taille fixe.


  RLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Cl_Name;
  =========================================================

     Definit un lien de reference (ou un tableau de lien), de taille fixe.
  !!!!!  attention !!!!! Pour l'instant, il ne faut surtout pas definir un RLINK apres
  avoir definit des LINK_VAR dont la dimension depend d'une variable du bank; plantage
  assure.



  =========================
  ======= EXEMPLE 1 =======
  =========================
  "DATA BLOCK DECLARATION"
  implicit acces to bank TD(LTD);
  declare class TD;
    var
      Heater_capa       ,
      Heater_mass_rate  ,
      Heater_conductance : real in class TD;
    local_var
      Nb_Edge : integer in class TD;
    link_var
      T_Edge( [Nb_Edge] ) : real in class TD;
  end declare class TD;
  " "
  !
  ! ==== Simulation Entry Point
  ! ==============================================================
  FROM TR(LTR)
  < GET TD(LTD);  "  <====== A NE SUROUT PAS OUBLIER !!!!!!! "
    CP=Heater_capa; DMP=Heater_mass_rate; H=Heater_conductance;
  " "
    .....
  !
  ! ==== Initialization Entry Point, called by Zinit
  ! ==============================================================
  ENTRY YHTRN(LTR);
  " "
     ......
  ! On instantie la variable Nd_Edge, utilisee dans le dimensionement
  ! d'autres variables du bank
    set .Nb_Edge for TD = (LTR).Nb_Tr_Var;
    Lift LTD of class TD under (2,0);
    @LTR@TR@TD@=LTD;  "Link TD bank to TR bank"
  " "
  RETURN;
  " "
  ! ==== Initialization of structure parameters Entry Point, called after Zinit
  ! ==========================================================================
  ENTRY SHTRN(LTR);
    GET TD(LTD);  "  <====== A NE SURTOUT PAS OUBLIER !!!!!!! "
    ITV=0 ;
    SKIP THRU TV(LTV)
    <  ITV=ITV+1;    ITR = (LTV).Cx_Tr_Var_Nb(1);
       NCX = (LTV).Nb_Cx_CX;
       READ THRU CX(LCX) (J=1,NCX)
       <  GET SV(LSV);      GRASP ARRAY Eta_SV (LSV);
  !       On initialise les adresses des LINK_VAR
          @(LTD.TD).T_Edge(ITR) = @ETA_SV(1);
       >
    >
  RETURN;
  ;

  =========================
  ======= EXEMPLE 2 =======
  =========================

  !
  subroutine bidon;
  !
  PARAMETER (BDIM=5,C2DIM=10,XDIM=1,YDIM=11);
  ;
  implicit acces to bank TD(LTD);
  declare class TD;
    slink CP in class TD;
    rlink ET(19) in class TD;
    link_var RO(8):real in class TD;
    local_var IA in class TD;
    var A, B(BDIM), C ( [ia], C2DIM ), IB([ia]-1) in class TD;
    link_var ROU([ia]), RAT( [IA]-2, [IB(1)] ) : real in class TD;
    link_var NU : real in class TD;
    var X(XDIM), Y(YDIM) : real in class TD;
  end declare class TD;
  ;
  from TR(LTR)<
  !
  ! On instantie les variables utilisees dans le dimensionement
  ! d'autre variable du bank
    set.ia for td=10;
    set.ib(1) for td=11;
    lift LTD of class TD under (0,0);
  !
    print *,(LTD).IB( (LTD).IA -2);
    print *,(LTD).X(1);
  !
    print *,RO(i), ROU(j), NU, RAT(i,j);
    print *,@ROU(I),@RAT(I,J);
    print *,IA, IB(IA-2);
    print *,X(1), Y(5);
  !
    LCP = @LTD@TD@CP@;
    LETA_SV_2 = @LTD@TD@ET(2)@;
  >
<-----/|\------>  ./Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc.bak
  ********************************************************************
  ********                    INSTRUCTION                   **********
  ********      Utlilisable dans les processeurs et dans    **********
  ********   certaines partie du noyau de ZOOM (ZOOM KER)   **********
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************
  remises a jour 14/08/1998,  15/02/2000(Al1)

  ********************************************************************
  **********************   L'IMPRESSION FACILE   *********************
  ********************************************************************

  ==> Z_Pr : Var_List;

      Z_Pr : var1,var2,(var3(i),i=1,n);
  génère
        print *,'**  var1,var2,(var3(i),i=1,n)'
        print *,var1,var2,(var3(i),i=1,n)

  ==> Z2_Pr : Var_List;

      Z2_Pr : a,b,j,(a(i),i=1,4);
  génère
      print *,'  a =',a,'  b =',b,'  j =',j,'  (a(i),i=1,4) =',(a(i),i=1,4)
***  attention pour les boucles Fortran implicites :
      Z2_PR : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_PR : a,b,c,(d(i),i=1,2); marche.

Futura:
     Z_Pad : idem, les memes avec sorties console;
     Z_Pr_Error_Cl(LCL/TR):'BlaBla',varlist;  donee la blabla precede de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)
                    (le premier element de la liste DOIT etre un char string).
  symboles utiles :
      SV_CL_ID(LSV) genere "MESH-   1/Face-   2"
      en print* ou dans Z_Pr; ex : Z_Pr/Matrix D on Cl:/:SV_CL_ID(LSV);
     (Futura) 

  ********************************************************************
  ********************   PREMISSES D'UN P.D.L.   *********************
  *******************  Processor Design Language  ********************
  ********************************************************************
  *******      Langages dédié à l'écriture des processeurs    ********
  **************************  USERS MANUAL  **************************
  ********************************************************************

  VERIFICATION EFFECTUEES PAR LES INSTRUCTIONS
  ============================================

     On verifie systematiquement que les banks instancies qui sont en argument des
  instructions sont bien de la classe voulue (permet de diagnostiquer des inversions
  d'argument ou autre).
     On controle les indices lors des acces aux vecteurs et aux matrices, sauf si
  l'utilisateur precise 'inhibit check array;' au debut de son processeur.

  META LANGAGE
  ============

  Soit:
    Vct : Nom d'un vecteur (ETA,GAMMA,FI,OMEGA,FIZ)
    Mx  : Nom de matrice (ABt, Ct, D)

  Alors la numerotation des composantes des matrices et de vecteurs suit
  la logique suivante :
    Vct : Numerotation "naturelle".
    Vct_SV : Numerotation dans le CPLUG
    Vct_TV : Numerotation dans le TPLUG
    Mx_SV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le CPLUG
    Mx_TV  : Un des indices correspond a une numerotation "naturelle", l'autre
            a une numerotation dans le TPLUG

  Les arguments associes au GRASP de ces vecteurs et matrices suit egalement cette
  logique :
  LTR :  Numerotation "naturelle" pour le transfert
  LCL :  Numerotation "naturelle" pour la cellule
  LTV (ou LTV2) : Numerotation dans le TPLUG
  LSV : Numerotation dans le CPLUG

  Par exemple ,
  GRASP ARRAY MX_SV(LSV,LTR) for ...
                     ^   ^
                     |   |--- 2 eme indice (numero de ligne) dans l'ordre
                     |        naturel du transfert
                     |---- 1 er indice (numero de colonne) dans l'ordre du CPLUG


  ==============================================
  INSTRUCTIONS POUR LES PROCESSSEURS DE CELLULES
  ==============================================

  1) Instructions attachees a la cellule elle même
  ------------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LCL : bank instancié attaché a la cellule

  a) IMPRESSIONS:
  ---------------

    ===> Print_CL_ID(LCL);
    Imprime les informations judicieuses suivantes concernant la cellule :
  
    **FROM:    RND1, CL: PARO-   1 OF CLASS: CND1  
                |         |      |            |
      Nom de la routine  Nom et Numero       Nom du Proceseur
     d'ou est effectuée  de la cellule       de cellule
     l'impression

    ===> Print_Class_CL(LCL);
    Imprime le nom du proceeseur de cellule. Exemple :
    CLASS: CND1  
    
    ===> Pour des impressions personnalisées
    CL_ID(LCL) est remplacé par une chaine de 4 caracteres suivi d'un
    entire, correspondants au Nom et Numero de la cellule
    exemple :
    print *,'user define print ',CL_ID(LCL);
        donne
    user define print PARO 1

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array eta,gamma (LCL);

    Cette instruction (en general au debut des points d'entrees C... et R...) permet
  ensuite d'acceder directement au vecteur ETA des variables d'etat et au
  vecteur GAMMA.
  Variables FORTRAN reservees utiles :
  LO_ETA, LO_GAMMA : adresses des banks ETA et GAMMA

  ===> Set_signed_ABt(LCL);

    Cette instruction precise a la navette ZOOM que la cellule gere elle-meme
  la convention de signe des transferts. Les signes de ABt ne sont pas modifie
  par la navette.

  -------------------------------------------
  2 ) Instructions attachees a une connexion
  -------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LCX : bank instantie attache a cette connexion
  LCL : bank instantie attache a la cellule
  LTV : bank instantie attache au T-Plug du transfert connecte

  Ces instructions se situent naturellement dans l'environement suivant :

  from CL(LCL)
  < skip thru SV(LSV)
    < skip thru CX(LCX)
      < From TV(LTV);
           ....
        Print_TV_TR_ID(LTV);
        grasp array FI_TV (LTV);
        grasp array ABt_TV (LCL,LTV) for (LCX);
           ...
      >
    >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_TV_TR_ID(LTV);
    Imprime de l'information permettant de reconnaitre le transfert connecté.
  Exemple :
  
   ** CONNECTED-TR OF CLASS: TGENE1 (1ST CONNECTED CELL: CAPA-   1)
                               |                           |     |
                       Nom du processeur   Nom et numero de la premiere
                       de transfert        cellule connectée a ce transfert

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array FI_TV (LTV);

  Cette instruction permet d'acceder aux variables de transfert connectees au
  T-Plug (LTV), dans la numerotation du T-Plug :
    ..... = FI_TV(ITV)
  avec ITV : numero d'ordre dans le T-Plug de la variable de transfert
  L'ecriture dans FI_TV est interdite.

  ===> grasp array ABt_TV (LCL,LTV) for (LCX);

  Cette instruction permet d'acceder a la partie de la matrice ABt rattachee a
  un T-Plug de la facon suivante:
  ABt_TV( ICL, ITV) = ... ;
  avec  ICL : numero de la composante de la variables de cellule
        ITV : numero d'ordre dans le T-Plug de la variable de transfert

  3) creation d'une cellule (IEntry)
  ------------------------------------
  ===> Zinit_Entry {Proc_Name}  ( Types(2)   = ...,
                                  Nb_St_Var  = ....  );
           " { } voulant dire optionel "
  avec Proc_name : nom du processeur (optionel). La presence de ce nom peut
                   ameliorer la visibilite. On verifie que ce nom est bien
                   celui du processeur.
  * Ce que ca fait:
  - Creation du point d'entre I
  - Creation bank CL(LCL), avec le nom du processeur
    CALL OCLN(NAME,(LCL).Types(1));
  - Pour tout ce qui est entre parenthese
    ( Types(2)    = ..., Nb_St_Var   = .... );
    ca genere : (LCL).Types(2)    = ...; (LCL).Nb_St_Var   = .... ;
  - Cree le bank ETA et le link a LCL
  - Nom de variable reserve :
     LCL  : adresse du bank CL
     LETA : adresse du bank ET
  * Ce que ca ne fait pas : toucher au CD Bank. L'utilisateur doit typiquement faire
  quelque chose du genre :
  Lift LCD of class CD under (2,0);
  "Link CDesc" @LCL@CL@CD@=LCD;

  * Creation avec argument(s) <=> Create Cell, type = XXX arg1, arg2, arg3 (nbre optionnel)
   on retrouve ces arguments dans les FTN var JZSIG, KZSIG(1), KZSIG(2)
  
  4) Parameter_Entry (PEntry)
  ----------------------------
  ===> Parameter_Entry ;
  Doit etre tout seul, tout a la fin des processeur, en dehors de tous blocks
  (en particulier de from CL(LCL)< ), juste avant le END:
  
  
  
  ==============================================
  INSTRUCTIONS POUR LES PROCESSEURS DE TRANSFERT
  ==============================================

  1 ) Instructions attachees au transfert lui même
  ------------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LTR : bank instancie attache au transfert

  a) IMPRESSIONS:
  ---------------

  ===> Print_TR_ID(LTR);
    Imprime de l'information permettant de reconnaitre le transfert
  exemple :
   **FROM:    SCD1 ,TR OF CLASS: TCD1   (1ST CONNECTED CELL: CAPA-   1)
                |                 |                            |     |
      Nom de la routine  Nom du processeur   Nom et numero de la premiere
     d'ou est effectuée  de transfert        cellule connectée a ce transfert
     l'impression


  ===>  Print_Class_TR(LTR);
    Imprime le nom du proceeseur de transfert. Exemple :
  CLASS: TCD1  


  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array fi,omega (LTR);

    Cette instruction (en general au debut des points d'entrees T... et S...)
  permet ensuite d'acceder directement au vecteur FI des variables de
  transfert et au vecteur OMEGA.
    Variables FORTRAN reservees utiles :
  LO_FI, LO_OMEGA : adresses des banks FI et OMEGA

  -------------------------------------------
  2 ) Instructions attachees a une connexion
  -------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LCX : bank instantie attache a cette connexion
  LSV : bank instantie attache au C-Plug de la cellule connectee
  LTR : bank instantie attache au transfert

  Ces instructions se situent naturellement dans l'environement suivant :

  from TR(LTR)
  < skip thru TV(LTV)
    < NCX= ...;
      read thru CX(LCX) (J=1,NCX)
      < get SV(LSV); Print_SV_CL_ID(LSV);
           ....
        grasp array ETA_SV (LSV);
           ...
        grasp array Ct_SV (LSV,LTR) for (LCX);
           ...
      >
    >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_SV_CL_ID(LSV);

    Imprime de l'information permettant de reconnaitre la cellule connectée.
  Exemple :

   ** CONNECTED-CL: CAPA-   1 OF CLASS: CND1   = TYPE:    10104
                     |      |            |                  |
                  Nom et Numero       Nom du Proceseur    Types(2)
                  de la cellule       de cellule

  b) Accès aux variables reservées
  ---------------------------------
  ===> grasp array ETA_SV (LSV);

  Cette instruction permet d'acceder aux variables d'etat connectees au
  C-Plug (LSV), dans la numerotation du C-Plug :
    ..... = ETA_SV(ISV)
  avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
  L'ecriture dans ETA_SV est interdite.
     Variables FORTRAN reservees utiles :
  LO_CL_SV, LO_ETA_SV : adresses des banks CL et ETA

  ==> grasp array Ct_SV (LSV,LTR) for (LCX);

  Cette instruction permet d'acceder a la partie de la matrice Ct rattachee
  a un C-Plug de la facon suivante:
  Ct_SV( ISV, ITR) = ... ;
  avec ISV : numero d'ordre dans le C-Plug de la variable d'etat
       ITR : numero de la composante de la variables de transfert
  Variables FORTRAN reservees utiles :
  LO_CT : adresses du bank CT

  3) creation d'un transfer (yEntry)
  ------------------------------------
  ===> Zinit_Entry {Proc_name}       " { } voulant dire optionel "
        ( Types(2)    = ...,
          Nb_Tr_Var   = ...,
          Nb_Extr     = ...,
          Nb_Fluxes   = .... );

  avec Proc_name : nom du processeur (optionel). La presence de ce nom peut
                   ameliorer la visibilite. On verifie que ce nom est bien
                   celui du processeur.
  * Ce que ca fait:
  - Creation du point d'entre Y
  - Creation bank TR(LTR), avec le nom du processeur
    (CALL OTRN(...,(LTR).Types(1));
  - Pour tout ce qui est entre parenthese
    ( Types(2)    = ..., Nb_Fluxes   = .... );
    ca genere : (LTR).Types(2)    = ...; (LTR).Nb_Fluxes   = ....;
  - Cre le bank Fi et le link a LTR
  - Nom de variable reserve :
     LTR  : adresse du bank TR
     LFIZ : adresse du bank FI     ( LFI ne serait pas mieux !!!????....)
  * Ce que ca ne fait pas : toucher au TD Bank. L'utilisateur doit
    typiquement faire quelque chose du genre :
  Lift LTD of class TD under (2,0);
  "Link TDesc" @LTR@TR@TD@=LTD;

  * Creation avec argument(s) <=> Create TR, type = XXX arg1, arg2, arg3 (nbre optionnel)
   on retrouve ces arguments dans les FTN var JZTAU, KZTAU(1), KZTAU(2)
  
  4) Parameter_Entry (QEntry)
  ----------------------------
  ===> Parameter_Entry ;
  Doit etre tout seul, tout a la fin des processeur, en dehors de tous blocks
  (en particulier de from TR(LTR)< ), juste avant le END:

  5 ) Instructions utilisees pour les matrices D
  ----------------------------------------------
  arguments communs a ces instructions:
  -------------------------------------
  LTR  : bank instantie attache au "transfert origine"
  LTV2 : bank instantie attache au T-Plug du "transfert connecte"
  LCX2 : bank instantie attache a la connexion Cellule - "Transfert connecte"
  LCX  : bank instantie attache a la connexion "Transfert origine" - Cellule
  LCL  : bank instantie attache a la cellule par laquelle passe la connexion
         entre ces deux transferts

  Chaine de la connexion :
  LTR  -- LTV -- LCX -- LCL -- LCX2 -- LTV2
   ^                     ^              ^
   |                     |              |--- "Connected Transfer"
   |                     |--- "Connecting Cell"
   |--- "Origin Transfer"


  Ces instructions se situent naturellement dans l'environement suivant :

  from TR(LTR)      "Transfert origine"
  <  skip thru TV(LTV)
     <  NCX=(LTV).Nb_Cx_CX;
        read thru CX(LCX) (J=1,NCX)
        <
  ! Matrice D
           from CL(LCL) "ce FROM est indispensable; un GET ne suffit pas"
                        "Cellule connectee"
           < skip thru CX(LCX2)
             < get TV(LTV2);  "Transfert connecte"
               if ( (LTV2).Nb_Tr_Var.eq.0 ) to next LCX2;
               grasp array FIZ_TV (LTV2);
                 ... = .... *FIZ_TV(..) ...;
               grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);
               D_TV(1,1) = ....;
               D_TV(.. , ..) = ....;
             >
           >
  ! Fin matrice D
        >
     >
  >

  a) IMPRESSIONS:
  ---------------
  ===> Print_TV_TR_ID(LTV2);

  b) Accès aux variables reservées
  ---------------------------------

  ===> grasp array D_TV (LTV2,LTR) for (LCX2,LCL,LCX);

  Cette instruction effectue les operations suivante :
  = Si le bank associe a la matrice D n'existe pas, elle le cree et elle
  positionne le mot d'etat de la cellule precisant que celle-ci possede une
  matrice D (call sbit1( ...) )
  = Si la matrcie D a ete compacte, elle la decompacte
  = Elle permet d'acceder a la partie de la matrice D rattachee a un Transfert
  connecte au Transfert via une cellule connectante la facon suivante:
  D_TV( ITV, ITR) = ... ;
  avec ITV : numero d'ordre dans le T-Plug de la variable du transfert connecte
       ITR : numero de la composante de la variables du transfert origine

  Variables FORTRAN reservees utiles :
  LO_D_TV : adresses du bank D
  LO_TR2_D, LO_IC2_D : adresses du "Connected Transfer" et du IC associe a la
            connexion celulle - transfert connecte
  LO_IC_D : adresse du IC associe a la connexion transfert origine - celulle

  ===> grasp array FIZ_TV (LTV2);
  ===> grasp array OMEGA_TV(LTV2);

    Acces directe au vecteur Fiz et Omega du transfert connecte dans la
  numerotation du T-Plug. L'ecriture dans FIZ_TV est interdite.

  ===> copy array fi in fiz (LTR);
  Copy le vecteur FI dans FIZ. Cette instruction definit un tableau FIZ.
  Si un grasp array FI... n'a pas ete fait, on le genere.
    Variables FORTRAN reservees utiles :
  LO_FIZ : adresses du bank FIZ
  ===> copy array FIZ in FI (LTR);
  ===> grasp array FIZ (LTR);

1 ********************************************************************
  *************************   A. L. L. I. S. *************************
  *******  (ADA Like Language Implementation Specification)   ********
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

  =====    PROCEDURE
  ==================
  
  Appel d'une procedure : 
  ===> execute Procedure_name;
 
  Déclaration de la procédure
 (à la fin,en dehors du "zero-level FROM bloc")
  ===>  procedure Procedure_Name
        <  .....
          .....
        >
  A l'intérieur de la procédure, on peut sortir à l'aide de l'instruction :
  ===>  RETURN_FROM_PROCEDURE ;

      .execute sera remplacé par un GOTO Fortran pointant sur l'instruction
  de déclaration de la procédure STEADY. Ainsi, la procédure se trouve
  située en dehors de tout Bank bloc<>, et donc, toutes les variables
  d'adresse devront être calculées avant l'execute.
  from,read thru, skip thru et get sont interdites.

  *****  DIAGNOSTICS ET ERREURS :
  Toute tentative d' utiliser les instructions ZBM de chaînage provoque
  le message d' erreur:
          '** ALLIS ERROR ** ZBM INSTRUCTION FORBIDDEN IN NON AT-PROCEDURE'
  Voire egalement *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux
  AT-PROCEDURE

  =====   AT- PROCEDURE
  =====================
  Appel de la procedure 
  ===> at LBank execute Procedure_Name;

  Déclaration de la procédure
  (à la fin,en dehors du "zero-level FROM bloc")
  ===> procedure Procedure_Name at LBank_Loc
       < from Cl_Bk(LBank_Loc)
         <   .....
             .....
         >
       >
  A l'interireur de la peocedure, on peut sortir a l'aide de l'instruction :
  ===>  RETURN_FROM_PROCEDURE ;

  AT-PROCEDURE  : Procedure permettant de definir (en son fort interieur) une
  premiere origine des chainages de bank, et donc d'acceder ensuite a d'autre
  bank via des GET, DES FROM ....

  *****  DIAGNOSTICS ET ERREURS :
   Une at-procedure exige de declarer un from <> bloc
  qui sera 0-level.L' adresse de l' origine est purement symbolique et sera
  remplacee par une variable locale (cf l'instruction ALLIS: LOCAL_VARIABLE),
  sans qu' il soit necessaire de la declarer LOCALE.
    L absence de from<> declenche un message d' erreur :
       '** ALLIS ERROR ** AT-PROC SHOULD CONTAIN A 0-LEVEL FROM< '

  *****  DIAGNOSTICS ET ERREURS communs aux PROCEDURE et aux AT-PROCEDURE :
       La demande d'execution d'une procedure ou d'une at-procedure
  non definie provoque un message d' erreur :
       '** ALLIS ERROR ** PROCEDURE XXXXX IS UNDEFINED'
  La definition d'une procedure sans demande d'execution associee genere
  le message:
       '** ALLIS WARNING ** PROCEDURE XXXXX IS UNUSED'
        Une at-procedure, comme une procedure, doit etre declaree entre
  le >; zero-level from et la carte END; .


  DECLARATION DE VARIABLES LOCALES
  ================================

  LOCAL_VARIABLES: (R_DROIT,ATTENDS-TOI,I_ES-TU?) ;

   .  Remplace dans le texte subsequent ces trois variables par un nom unique
  reprenant la meme initiale ( pour type implicite FORTRAN), comme par exemple:
       R_DROIT         -->  R10016
       ATTENDS-TOI     -->  A10017
       I_ES-TU?        -->  I10018
    .  (La declaration se fait n' importe ou, et la substitution reste valide
       jusqu a la carte END;)


  =====  CASE
  =================

  Ensemble d'instructions pour emuler le ADA CASE instruction:
  ------------------------------------------------------------

  TYPE  mach_in OF (truc_1,truc_2,truc_3);
    .   Instruction de declaration, declaree avant toute instruction FORTRAN
  executable.

         ...
  mach_in := truc_3;
    .   Instanciation de la variable mach_in (il va sans dire que le
  signe = va aussi).
        ...

  CASE mach_in IS
  <  WHEN truc_1  <... >
     WHEN truc_3  < execute ...  ;   >
     WHEN_OTHERS  <   print*' error' >
  >
    .   Permet de manipuler la variable symbolique mach_in en lui donnant des
        valeurs symboliques truc_1 etc  .
    .   Analogue a l' instruction IF..ELSEIF..ELSEIF..ENDIF;
    .   WHEN_OTHERS termine obligatoirement le CASE ... IS bloc.
    .   Pour les inconditionnels du FORTRAN, elles sont remplacees par I10011
        et  incrementees dans l' ordre de la liste:
        et donc truc_3=truc_2 +1=truc_1 +2 (ne pas en abuser).
    .   De meme, : truc_1=mach_in +1 ...


1 ********************************************************************
  *****************   DECLARATION LOCALE D'UN BANK   *****************
  ********************************************************************
  *******  Utilisé en particulier pour déclarer les banks      *******
  *******  TD et CD des processeurs de Transfert et de Cellule *******
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

     La declaration locale d'un BANK permet d'acceder a celui-ci comme si
  il avait ete declare dans le precompilateur:
  - Apres avoir fait un GET ou un FROM du bank, on accede a une variable
  du bank par (LBank).Var_Name.
  - Si des liens ont ete definis, on y accede de facon habituelle (@L..@..@..@).
  - Pour creer le bank on utilise l'instruction LIFT ...

     Avant la declaration du bank, l'instruction IMPLICIT ACCES TO BANK
  bk_name(LBk) permet ensuite a l'utilisateur, apres avoir instantie
  l'adresse LBk, d'acceder directement a une variable sans preciser le
  bank auquel elle appartient, c.a.d. d'ecrire Var_Name au lieu de
  (LBank).Var_Name

     Plusieurs banks peuvent etre definis simultanement. Apres la
  declaration d'une (ou d'une suite de) variable ou de liens, il faut donc
  preciser la classe auquelle elle appartient. (VAR .... IN CLASS Bk_name; )

     On distingue dans la declaration 3 type de variables:
  - LOCAL_VAR : ces variables sont directement rangees dans la zone donnees
                du bank
  - LINK_VAR  : seule l'adresse de ces variables sont rangees dans ce bank;
  les valeur elles memes sont rangees dans un autre bank.
  - VAR       : Vu de l'utilisateur, equivalent acuellement a LOCAL_VAR
  qu'il vaut mieux prefere actullement.  (En fait VAR est oriente PDL, who
  is not yet implemented)

     Chaque variable peut avoir 0, 1 ou 2 dimensions. La dimension d'une
  variable peut etre compose de nombres entiers, de parametres FORTRAN ou
  d'autre variables (placees entre crochets) de ce MEME bank.
     La dimension d'une variable ne peut en aucun cas contenir une variable
  FORTRAN.

     Par defaut le type d'une variable (entier ou reel) suit l'incontournable
  regle du FORTRAN (entier de I a N, reel autrement). Mais le type peut etre
  impose lors de la declaration de la variable ( ... : INTEGER, ... :REAL,
   ... :CHARACTER_4)

     Le rangement des variables dans la bank suit l'ordre de leur declaration.

     Lorsqu'une variable est dimensionnee, on peut la sous-structurer en
  sous-tableaux avec l'instruction ARRAY Ar_Name_1 IN ARRAY Ar_Name_2

     Controle d'indices des variables dimensionnees :
     Actuellement, quand on accede de facon standard ZBM a une variable
  dimensionne par l'instruction (Lbank).Var_Name(indice) , aucun controle
  d'indice n'est effectue ( Fameux adage du programmeur Fortran inconnu :
  "Je veux pouvoir faire ce que je veux, donc je dois pouvoir faire
  n'importe quoi" ). De meme quand on accede a l'adresse d'une variable par
  @(Lbank.Class_Name).Var_Name(indice) .
     Par contre, lorsque l'on decide d'acceder de facon implicite a un bank,
  on admet que les taches les plus stupides puissent etre effectuees par
  la machine et non pas par l'utilisateur (point de vue subversif, s'il en
  est). Par défaut, un contrôle d'indice sera donc effectué sur les
  variables dimensionnées, sauf si l'utilisateur demande le contraire
  par l'instruction INHIBIT CHECK ARRAY;

************************************* Futura feature ***************************
  - VAR_LINKED                                    Version du mercredi 26/02/1997   
---------------------------------------------------------------------------(Al1)
 Declaration :
 ------------
 var_linked   name         ,
              name1(2)     ,
              name2(2,3)   ,
              name3([klen]},
  :xxx in class XX;

Rq : on a l'air de s'orienter plutot vers "array_linked" plutot que "var_linked"
qui voudra s'exprimer a ce sujet ?

 Liaison
 -------
 Link namxx[] to ...         standard

 Utilisation :
--------------
  Ces variables pointent chacune sur un tableau different
  pour Futura : seuls les tableaux 1D sont liables, comme
 Eta_SV, DFi_TV etc ou les variables d'un foreign TD/CD
 Pour preciser la composante # i du tableau linke' :
 name(i), name1(i/n), name2(i/n,m)

 Verifications internes generees :
 --------------------------------
  a la var_linked(n,m) est associee une local var(n,m)
 de nom ODIM_namexx(,) qui est remplie au moment du link xxx to xxx
 avec la dimension du tableau, ou du TEF vecteur (Eta_SV etc)
 La verification est alors standard : i compris entre 1 et ODIM_name(,).

ATTENTION : les liens etant effectues en general dans les S/R_Entry, il faut
que le tableau originel - s'il est de dimension asssociee a une variable, ai bien
ete defini.

*************************************************************************************
   Remarques d'utilisation avec pointé sur des plugs.          (Al1, Avril 2000)
*************************************************************************************
Ces liens pointant sur un tableau amenent a une contradiction posiible avec les plug.
En effet le seul tableau Zebra est le bank Tr (ou Eta); les plug donnant une liste
non necessairement ordonnee de ses composantes.
Exemple : on a un TV de liste 7,12,17,22.
link name to Fi_TV(1); a pour consequence de faire pointer sur Tr(7)
mais alors name(2) pointera sur Tr(8) !
la solution est alors name((LTV.TV).Cx_Tr_Nb(2)-(LTV.TV).Cx_Tr_Nb(1)+1) etc
On peut aussi preferer dans ce cas declarer un name(4) comme link_var et faire :
<i=1,4; link name(i) to Fi_TV(i); >

Pour eviter les erreurs, Zoom signale un LINK WARNING lorsqu'on effectue
un lien de type array_linked sur un plug de liste non naturelle.
*************************************************************************************


   DEBUT ET FIN DE DECLARATION DU BANK
  =====================================
  arguments communs a ces instructions :
  Bank    : Variable correspondant a l'adresse du bank
  Class_Name : Nom de la classe auquel appartiend le Bank

  ==> IMPLICIT ACCES TO BANK Class_Name(Bank);

    Cette instruction permet a l'utilisateur d'acceder directement aux
  variables du bank: on ecrira par ex.  X = Y au lieu de
  (Bank).X = (Bank).Y .Elle doit etre situee avant le debut de la declaration
  de la classe.
     Avant d'utiliser les variables de ce Bank, il est indispensable
  (sous peine de plantage) de definir l'adresse de ce bank avec les
  instructions GET .., FROM .., ..  Cette adresse doit etre instanciee pour
  l'ensemble des points d'entree le cas echeant.
     Un meme nom de variable ne peut etre defini dans plusieurs banks a acces
  implicite. De meme un meme nom ne peut etre utilise pour une variable
  FORTRAN et une variable dans un bank a acces implicite.


  ==> DECLARE CLASS Class_Name [,Class_Name_2...];

     Debut de la declaration de la classe Class_Name[ ,ou de la liste de classe] .
  Toute declaration de classe doit etre termine avant la premiere instruction
  FTN executable (lors de la declaration, on genere en effet des instruction
  FORTRAN  PARAMETER (....=....) ).

  ===> END DECLARE CLASS Class_Name[,Class_Name_2...];

     Fin de la declaration de la classe Class_Name[ ,ou de la liste de classe] .



   DECLARATION DES VARIABLES
  =============================

  ARGUMENT COMMUNS AUX DECLARATIONS DE VARIABLES:

  Var_Name : Nom de variable. Doit etre compose uniquement de caracteres
  alphanumerique ou du caractere souligne. Pas de restriction sur la longueur.

  Class_Name : Nom de classe dans lauqlle la variable est definies

  type : type de la variable
    Les types autorises sont INTEGER , REAL (et bientot CHARACTER_4, DOUBLE)
    Si le type n'est pas defini, on prend la convention FORTRAN :
  entier pour les variables dont la premiere lettre est de I a N, reel sinon.

  nbcol, nblin : nombre de colonnes, nombre de lignes.
    Ces dimensions peuvent etre des expressions contenant des nombres entiers,
  des PARAMETER FORTRAN, une autre variable (deja definie) du meme bank;
  dans ce cas, cette variable doit etre entre crochet. Mais cela ne peut
  pas etre une variable FORTRAN.
    Lorsqu'une variable est utilisee dans une dimension, il est vivement
  conseille:
  - que cette variable soit definie au prealable
  - que cette variable soit une VAR ou une LOCAL_VAR
    Avant de creer le bank par l'instruction LIFT il faut que l'ensemble des
  variables utilisees dans une dimension soient instantiees par l'instruction
  SET :  SET .Var_Name for Class_name = Valeur;
  Apres le LIFT, les variables instantiees par l'instruction SET auront la
  valeur definie par cette instantiation.
*** attention, si le symbole Var_name ne sert pas a dimensionner une autre variable,
*** on ne peut leur donner une valeur qu'en explicitant :
***    (LTD).Var_name = valeur

  ADRESSES DES VARIABLES

      On peut acceder a l'adresse d'une variable Var_Name du bank Bk_Name de
  la classe Class_Name par
   @(Bk_Name . Class_Name).Var_Name
  et pour les variables dimensionnees:
   @(Bk_Name . Class_Name).Var_Name(Ncol,Nligne)


  ===> LOCAL_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit une variable (ou une liste de variables) dans la zone donnee
   du bank.

  ===> LINK_VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit un lien de reference (ou un tableau de liens pour les variables
  dimensionnees) qui contient la (ou les) adresse ou est rangee la variable.
  Cette adresse, ou l'ensemble des adresses pour les variables dimensionnees,
  doivent etre initialisees par l'utilisateur a l'aide des instrucions
  link Var_Name_1 to Var_Name_2; ou directement via les adresses
     @(Bank . Class_name).Var_name = .......;
  Pour les variables dimensionnees:
     @(Bank . Class_name).Var_name(Ncol,Nligne) = .......;

  ===> VAR Var_name{( nbcol{,nblin} ) }
               {,Var_name_2....} {:type} IN CLASS Class_Name;

     Definit un espace memoire dans la zone donnee du bank, definit un lien
  qui contient l'adresse ou est rangee la variable. A l'initialisation
 (apres un LIFT), ce pointeur est initialise au debut de l'espace memoire dans
 la zone donnee du bank precedemment defini.
     Ce pointeur peut etre modifie par (aussi bien pour les variables non
  dimensionnees  que pour celle qui le sont) :
  @(Bank . Class_name).Var_name = Nouvelle_adresse ;
     Il faut que l'utilisateur verifie que cette Nouvelle_adresse pointe sur
  une zone de donnees correspondant aux dimensions et au type de la variable

   INITIALISATION DU LIEN D'UNE LINK_VAR
  =======================================

  ===> link Var1 to Reserved_Var(n);   

   Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable "reservee" (apres avoir fait un Grasp Array de cette
  variable)
  avec Var1         : nom de la link_var "locale"
       Reserved_Var : Eta_SV , Fi_TV , Fiz_TV
       n            : indice dans la Reserved_Var
  
  ==> link Var_Name_1 to Var_Name_2 of (LProc);

    Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable declare dans un CD ou TD bank d'un autre processeur.
  avec Var_Name_1 : nom de la link_var "locale"
       Var_Name_2 : nom de la var ou local_var "externe"
       LProc: Adresse permettant d'acceder a cette variable "externe" 
       ( LProc = LSV ou LCL ou LTV ou LTR ). Ne doit en aucun correspondre
       au processeur ou l'on est : ce pauvre FORTRAN n'etant pas reentrant,
       "results may be hazardous"

  ==> link Var_Name_1 to Var_Name_2;
   Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
  est sur une variable de ce meme processeur.
  avec Var_Name_1 : nom de la link_var "locale"
       Var_Name_2 : nom de la var ou local_var "locale"

   LECTURE D'UNE VARIABLE D'UN AUTRE OBJET
  =========================================

  ==> set X = [Var2]{:type} of (LProc); " {...} veut dire optionel "
  
   Pour lire une variable declaree dans un CD ou TD bank d'un autre objet
  et la ranger dans une variable Fortran (ou une variable declare dans le CD
  ou TD bank locale, si on a fait un IMPLICIT ACCESS ...)

  avec X   : nom de la variable Fortran (ou d'une variable declaree dans
             le CD ou TD bank local, si on a fait un IMPLICIT ACCESS ...)
      Var2 : nom de la var , local_var ou link_var "externe"
      type : I ou R ; type de la var, local_var ou link_var "externe". Si le
             type n'est pas specifie, on prend le type FORTRAN par defaut
             (entier de I a N, reel sinon) de la variable externe Var2.
             Diagnostique d'erreur si le type (precise ou par defaut) ne
             correspond pas au type de Var2 tel qu'il a ete precise lors de
             sa declaration.
      LProc: Adresse permettant d'acceder a cette variable "externe" 
             ( LProc = LSV ou LCL ou LTV ou LTR )

   DECLARATION DES LIENS
  =======================

  ARGUMENT DES DECLARATIONS DES LIENS

  Lk_Name : Nom de lien. Doit etre compose uniquement de caracteres alphanumerique
  ou du caractere souligne. Pas de restriction sur la longueur.

  Class_Name : Nom de classe dans lauqlle la variable est definies

  dim : Dimension du tableau de liens. Cette dimension peut etre une expression
  contenant des nombres entiers, des PARAMETER FORTRAN mais ni une autre variable
  du bank ni une variable FORTRAN.

  ===> SLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Class_Name;

     Definit un lien de structure (ou un tableau de lien), de taille fixe.

  ===> RLINK Lk_Name[(dim)] [,Lk_Name_2....] IN CLASS Class_Name;

     Definit un lien de reference (ou un tableau de lien), de taille fixe.
  !!!!!  attention !!!!! Pour l'instant, il ne faut surtout pas definir un
  RLINK apres avoir definit des LINK_VAR dont la dimension depend d'une
  variable du bank; plantage assure.

    PROTECTION DES VARIABLES , CONTROLE DES INDICES DE TABLEAUX
  ==============================================================

  ===> CHECK ARRAY (OP1=YES_NO[,OP2=YES_NO])[ARRAY1[,ARRAY2,..]];

  OP1, OP2 : Operation a 'checker' (RD ou WR)
  YES_NO   : (Y ou N ou X)
  ARRAY1, ARRAY2 : Noms des tableaux
    -Si on precise une seule operation, le controle des indices pour
  l'autre operation n'est pas modifiee.
    -Si on ne precise pas de nom de tableau, la directive s'applique
  a l'ensemble des tableaux.
    -Cette directive peut etre situee  n'importe ou. Elle s'applique a la
  suite du texte. Elle peut etre situee a plusieur endroit : le controle des
  indices ne sera pas le meme dans tout le programme.
    - Par defaut on controle l'ecriture et la lecture pour tous les tableaux
  CHECK ARRAY (WR=Y,RD=N);
    - Si YES_NO vaut X, on prend la valeur precedent le dernier CHECK ARRAY.
   Ceci permet de modifier locale le controle des tableaux, puis de remettre
   les conditions de controle comme avant (voir par exemple la macro Z_Pr )

  ===> INHIBIT CHECK ARRAY;

    - Plus aucun controle sur les indices (ni a la creation, ni a la lecture,
  ni a l'ecriture) n'est effetue et ne peut etre effectue pour tous les
  tableaux creer a partir de cette directive. Les directives CHECK n'ont
  aucun effet.
    - Le code genere est beaucoup plus 'leger'
    (- Cette directive modifie les macros definissant les operations de
  lecture/ecriture et l'operation de controle des dimensions initiales,
  macros appelees lors de la creation d'un tableau)

  ===> WRITE INHIBIT ARRAY AR1[,AR2....];

  AR1,AR2 : Nom de tableaux
    - Interdit l'ecriture pour les tableaux dont le nom est specifie, non
  encore crees. Aucun effet sur les tableau deja existant.


1 ********************************************************************
  *****************  Z.B.M.  (ZOOM Bank Manager )   ******************
  ********************************************************************
  ***** Chainage des banks, définition de l'origine du chainage, *****
  ***** création des bank, accès aux variables des bank, ....    *****
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************


  DEFINTION DES CHAINAGES DE BANK
  ===============================

  ===> local_valid_chains:[~CL~SV~CX~TV~TR~], ou ...~CX(.)~..
                          [~CX~IC~],
                          [~etc~FM*~IN~etc~],
       end_chains;

    . Declaration des chaines de graphes orientes de gauche a droite.
    . Permet de referencer tout bank (ex TV) ayant une origine a sa gauche
      dans une chaine de la liste ( ex CL,SV ou CX).
    . La premiere chaine de la liste permettant le chainage sera retenue.
    . La presence de * signifie adressage indirect (reserve pour la classe
      FM)
    . Une seule declaration de liste est autorisee par subroutine.
    . La presence de CX(.) est requise pour la commande READ THRU. Dans ce cas
      il est inutile de repeter la chaine sans CX(.).

  *****  DIAGNOSTICS ET ERREURS :
  Toute tentative de declarer plus d' une liste sera sanctionnee par le
  message d' erreur:
      '** ZBM ERROR ** ONLY ONE CHAIN LIST BLOC ALLOWED PER SUBROUTINE'


  DEFINTION DE LA PREMIERE ORIGINE DES CHAINAGES DE BANK  (zero-level FROM )
  ==========================================================================

  On doit, avant toute reference a un bank definir une premiere origine des
  chainages au debut de chaque routine :

  - pour un processeur de cellule, on definit comme premiere origine la
  classe CL. Si LCL est l'adresse du bank de la cellule, on fera :

  ===> from CL(LCL)
       <
           ......
       >
  - pour un processeur de transfert, on definit comme premiere origine la
  classe TR. Si LTR est l'adresse du bank de la cellule, on fera :

  ===> from TR(LTR)
       <
           ......
       >
       
  DEFINTION LOCALE DE L'ORIGINE D'UN CHAINAGE DE BANK
  ===================================================

  ===> from Cl_Bk(LBank)
       <   ..........
           .....  exit from LBank;
           ..........
       >
  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

  Cette instruction :
  - instantie le bank LBank de la class Cl_Bk a partir de l'origine courante
    des chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.


  BOUCLE SUR TOUS LES BANKS D'UNE CLASSE AVEC REDEFINTION
  =======================================================
  DE L'ORIGINE DES CHAINAGES DE BANK
  ==================================
                                          
  - Cas generale
  --------------

  ===> skip thru Cl_Bk(LBank)
       <  .....
          .....  to next LBank;
          .....  exit from LBank;
       >
  Arguments : Cl_Bk, LBank.

  Cette instruction :
  - instantie le bank LBank de la class Cl_Bk a partir de l'origine courante des
  chainages.
  - definit Cl_Bk(LBank) comme etant la nouvelle origine des chainages.
  - exit from LBank; provoque la sortie de ce block MORTRAN.
  - to next LBank ou la fin de block MORTRAN (>) provoque le bouclage sur LTV
  jusqu a ce que l'on ai parcouru tous les banks de cette classe.
  -(Cette instruction est utilisable lorsque les banks sont chaines a la suite
  l'un de l'autre)

  - Cas particulier
  -----------------

  Cas rencontre lorsque l'on veut parcourir les connections sous un T-Plug
  (c.a.d. un TV)

  ===> NCX = (LTV).Nb_Cx_CX;   "Nombre de connexion de ce T-Plug"
       read thru CX(LCX) (J=1,NCX)
       <  .....
          .....  to next LCX;
          ....   exit from LCX;
       >
  Arguments :
    CX : nom de la classe du bank
    LCX: adresse du bank
    J  : indice de boucle
    NCX: nombre de connexions sur lesquelles s'effectue la boucle

  Cette instruction :
  - instantie le bank LCX de la class CX a partir de l'origine courante des
  chainages.
  - definit CX(LCX) comme etant la nouvelle origine des chainages.
  - exit from LCX; provoque la sortie de ce block MORTRAN.
  - to next LCX ou la fin de block MORTRAN (>) provoque le bouclage sur LCX
  jusqu a ce que l'on ai parcouru NCX fois la boucle.
  - Exige de declarer ~CX(.)~ dans le bloc LOCAL_VALID_CHAINS(voir cette commande).
  -(Cette instruction doit etre utilisee lorsque les banks doivent etre addresses
  via un tableau de link , ce qui est les cas des CX sous les TV (cf TV Bank)).


  INSTANTIATION D'UN BANK, SANS MODIFICATION DE L'ORIGINE DES CHAINAGES
  =====================================================================

  ===> get Cl_Bk(LBank);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse

     . Instantie le bank LBank a partir de l' origine courante des chainages.
     . Tolere tout alteration de LBank.
  *****  PAS DE DIAGNOSTIC .


  ACCES AUX VARIABLES D'UN BANK INSTANTIE
  =======================================

  Apres avoir instantie un bank LBank (par les instructions from, get, skip thru
  ou read thru ), on peut acceder a toutes les variables de ce bank (voir liste
  plus loin) par :
  ===> (Lbank).Var_Name    ou   (Lbank).Var_Name(..) pour les variables
  dimensionnees. Actuellement pas de controle d'indice pour l'acces aux
  variables dimensionnees.

  L'instruction
  ===> Point_On(LBank)
  permet d'acceder a une variable non plus par (Lbank).Var_Name, mais par
  ===> ..Var_Name

  Arguments :
    LBank : Bank addresse
    Var_Name : nom de variable


  CREATION D'UN BANK
  ==================

  ===> Lift Lbank of class Cl_Bk under (L_Up, -N_Lk);

  Arguments :
    Cl_Bk : Bank Class name
    LBank : Bank addresse
    L_Up  : Adresse du bank de reference auquel ser attache l'objet cree
    N_Lk  : si = 0, on cree le bank en next de L_Up
            si <>0, on cree le bank sous L_up, rattache au lien numero N_Lk

  Cette instruction :
  - cree le bank
  - genere un get Cl_Bk(LBank) et un Point_On(LBank)

  Certaines grandeurs necessaires a la creation du bank, si elle ne sont
  definient par PRECOMP ou par une declaration locale de classe, doivent
  etre instantiees par l'instruction

  ===> Set .Var_name for Cl_Bk = Valeur;

  arguments : Var_Name, Cl_Bk, Valeur

1 ********************************************************************
  *****************  Z.B.M.  (ZOOM Bank Manager )   ******************
  ********************************************************************
  ***** Boucles courtes pour les processeurs (Dev from Sept 94)  *****
  ********************************************************************
  **************************  USERS MANUAL  **************************
  ********************************************************************

======================================
= Amelioration de la boucle standard :
======================================
    read thru CX(LCX) (JCx=1,*)
    < 
 genere :
    READ THRU CX(LCX)(JCx=1,0_(#U6#S6$L#C.TV).Nb_Cx_CX)<
( cad qu elle recupere l'adresse du TV superieur );
[ATTENTION : cela lui interdit d'etre sous un Get TV(LTV); car alors, le TV
n'est pas dans le stack 6 => faire plutot un From TV(LTV);]

=================================
= Ecriture compactee de boucles :
=================================

      Skip thru CX(LCX) (JOCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 genere les boucles standard Skip et Read thru;

Attention :
!!! effectue les tests pour skiper les T_Probes ( (LTV).Nb_Tr_Var=0 ).
   (au contraire du skip thru standard qui prend tout
!!!/.XX(LXX) genere un FROM XX(LXX)<
----

 CX(LCX2.ne.LCX) : skip en cas d'egalite (test uniquement sur banks CX).
     *** adresse de la boucle CX locale. (LCX supposee definie precedemment);
pour ces formes, la premiere adresse est l'adresse de boucle (of course)

 Aucun test sur les CPlugs;

 Autres possibilites :

 .../TProbe(LTV)/ : ne prend que les T_Probes;
 .../All_TV(LTV)/ : prend tout;

 CX(LCX2.eq.LCX)  : skip en cas de non egalite;

 signification du /. : genere un get,                (=> ne prend donc que le premier Bk)
                       skip si (LTV).Nb_Tr_Var=0:
                       suivit d' un from;
 pour CX( )/.TV( )<  : skip to next CX si T_Probe;
 (avec son pendant /.TProbe( ) of course);

 Formes equivalentes :
  TPlug == TV;
  CPlug == SV;
  TPlug_Tprobe == All_TV;

 Rq : On peut toujours utiliser la forme CX(LCX) (JCx=1,NCX), ou NCX a ete
definie precedemment.

  ********************************************************************
  **************************  FUTURA adds  ***************************
  **********************************************(Al1 mardi 21/01/1997)

Les additions suivantes sont utiles pour selectionner les C-Plug qui
sont identifiés par (LSV).C_Plug_Nm, (LSV).C_Plug_Nb [ex: Face-1]
ATTENTION : Case sensitive !!! (meme forme que dans Znit)

... /SV(LSV.eq.*-*)/  pas d'effet    [* stands for any]
... /SV(LSV.eq.Face-*)/
... /SV(LSV).eq.*-1/
... /SV(LSV.eq.*-1,2,3,4)/
... /SV(LSV.eq.Face-1,2,3,4)/
... /SV(LSV.ne.Face-*)/
... /SV(LSV.ne.Face-1,2,3,4)/ == .NOT.(LSV.eq.Face-1,2,3,4)

idem avec la forme : /.SV(LSV)

commentaire : on reprend ainsi la forme logique du traitement des listes IF<
 IF i.eq.1,2,3,4  == IF i.eq.1 ou 2 ou 3 ou 4
 IF i.ne.1,2,3,4  == IF i .eq. ni 1, ni 2 , ni 3, ni 4
=> ici ni Face-1, ni Face-2, etc
;
exemple (pas forcément à suivre)
  SKIP THRU TV(LTV.ne.LTV2)/CX(LCX.ne.LCX2) (JCX=1,*)/.SV(LSV.ne.Face-3,4,5)/
            .CL(LCL.ne.LCL2)/SV(LSV2.eq.Bulk-*)/CX(LCX3.ne.LCX)/
            .TPROBE(LTV3.ne.LTV)
  < ;continue; to next LTV; to next LCX; to next LCX3;
  >;
********************************************************************************************
********** Futura : Connections directes TRansfert a TRansfert *****************************
*********************************************************Al1 : 14/08/1998 ******************

les : SKIP THRU TV(LTV)/CX(LCX) < ne retiennent que les TV connectes a une cellule
au moins et les CX non connectes directement a un transfert (via l'objet (*) de la famille).

All_TV prend tous les TV (T_probes y compris), All_CX tous les CX.
On pourra alors utiliser les expressions :
IF (TV_to_TR(LTV)) then; IF (CX_to_TR(LCX)) then; pour les branchements;
TV_to_TR invoque l'expression logique : JBIT(IQ(LTV),IODITR).eq.1
CX_to_TR invoque l'expression logique : JBIT(IQ(LCX),IODITR).eq.1

Pour suivre les connections jusqu'a un transfert, on utilise alors :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)<
qui est equivalente a :
SKIP THRU Cx(LCX)
< IF (JOBIT(IQ(LCX),IODITR).eq.0) To Next LCX;
  SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)<

Dans tous les cas, on definit une matrice D particuliere :

grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX); dans le cas des SKIP THRU explicites
ou alors :
grasp array D_TV (LTV2,LTR) for (*,*,LCX); dans le cas des SKIP THRU rapides;

Rq : ces dernieres macros rapides marchent aussi dans les cas standards ou on ne ferait
pas reconnaissance de la Cellule mediate.
exemples complet de boucle de connection directe :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)
< grasp array D_TV (LTV2,LTR) for (*,*,LCX);
  D_TV(i,j)= ...;
>;
Avec boucles explicites :
SKIP THRU CX(LCX)
< IF (Cx_to_TR)
  < SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)
    < grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX);
      ;;; on remarque que l'objet * de connexion direct des TR ne comporte qu'un SV.
    >;
  >ELSE
  < " connection aux cellules "
    ;;;
  >;
(l'interet reside dans le fait que la Cellule connectee ne verra pas ces CX)


<-----/|\------>  ./Help/Users/Upgrades/Creation_d_une_Version_CMZ
==========================================================================
==========================================================================
================= Création d' une Version ================================
==========================================================================
==========================================================================

**** CE HELP REMPLACE $ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ_7_94  ***
     qui est obsolete a compter du 18/07/94.
     Robert FRANCHISSEUR (1994/07/18)

VOIR aussi :
> $ZOOM/Help/Users/00_New_User_Environment_Installation
> $ZOOM/Help/Users/General/Execution_sur_Site_distant
> $ZOOM/Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93 (pour les retardataires ;-)


Modification par rapport à l'ancienne version :

Il n'y a plus de librairies (au sens ar ou lbr) et CMZ travaille 
avec les .bin ou .o (On est donc ainsi sur de recompiler tout ce qui a
pu contenir des erreurs)

Une seule commande remplace MODIF et TEST elle s'appelle MOD (ou MODIF
pour ceux qui veulent garder leurs vielles habitudes)
 
EXEC MOD [ patch_name ] [ cpu_name ]  [ site ]

   [ patch_name ] ::= zinit | version | PROC | other | cpu_name

. zinit ou version : sont les noms des patches contenant les zinits ( On n'est plus
                     oblige d'avoir un patch zinit)

. le nom du patch de commons correspondant est obligatoirement version_CDE ( ZINIT_CDE
  et non plus seulement CDE si vous avez un patch ZINIT)

. PROC : nom *OBLIGATOIRE* pour le patch de processeurs.

on peut partager les processeurs en plusieurs PATCHes, chacun devant comporter PROC_ en tete
de son nom (ex : PROC_SUITE, PROC_TURB). Dans ce cas,' exe mod proc ' traitera ces patch en sequence.


. other : est le nom d'un patch contenant eventuellement une librairie de routines
          annexes ( pas de deck ZINIT dedans)
(' exe mod other ')

   [ cpu_name ]   ::= nom du type de cpu pour execution en remote 
                      pour l'instant apollo,hp,sun,ibm,alpha,cray,sps,lnx,sol,pgf


   [ site ]       ::= consulter Ribs pour avoir la liste des sites disponibles

exemple:   exe mod proc ibm pole
                        hp ens
                        ibm toulouse

ATTENTION : la fabrication d'un executable n'est faite que si l'on "execute" 
            un MOD VERSION
            En consequence si l'on modifie des processeurs (ou other) seule 
            la phase de compilation est effectuee
            


VALEURS PAR DEFAUT :

. [ patch_name ] : zinit
. [ cpu_name ]   : local
Si le premier argument est cpu_name on genere MOD ZINIT CPU


EXEC NEWVER   (pour creer une nouvelle version)
               inchange


EXEC UPDATE : petit utilitaire qui renomera vos anciens patches avec cette
              nouvelle syntaxe


Modifications au niveau de l'arborescence des fichiers sur disque :

Example : vous êtes sous le directory hambourg (au hazard!)

votre cmz_file s'appelle donc hambourg

vous AVIEZ la structure suivante  : sous directory hambourg
                                                   hambourg/cfs
qui constituait la "version originale"             hambourg/hambourg.lib
                                                   hambourg/hambourg_exe.run.lis
                                                   hambourg/hambourg_proc_mod.lis
                                                   hambourg/hambourg_zinit_mod.lis
                                                   
A présent ce sous directory s'appelle ZINIT (ou VERSION)

                                                   zinit
                                                   zinit/cfs
                                                   zinit/hambourg_exe.run.lis
                                                   zinit/hambourg_proc_mod.lis
                                                   zinit/hambourg_zinit_mod.lis


et vous avez en plus un directory PROC :           proc
                                                   proc/cfs



FLAGS ET SEQUENCES
------------------

Vous devez avoir dans votre working directory la kumac selseq.kumac
que vous devez editer selon vos desirs.
Celle du modele selectionne automatiquement [patch_name]_cde

MACRO SELSEQ 1=x
***************************************************************
*                                                             *
*  MACRO SELSEQ                                               *
*                                                             *
*                                                             *
* writen by   : Robert FRANCHISSEUR, 16/12/92, 20.40.19       *
* modified by :                                               *
***************************************************************
mess
mess ' WARNING THIS IS NOT YOUR SELSEQ.KUMAC !!!!'
mess
*
*             --------- les flags ------------
*
sel ZKFENTRY
*
*             --------- les sequences ------------
*
if [1] = x then
  seq zinit_cde
else
  VER_NAME = [1]
  seq [VER_NAME]_cde
endif
return


--------------------------------------- NEW ------------------------
Robert FRANCHISSEUR (1996/06/20)

NEW rules : si on definit un PARAMETER (LENWORK= ) dans un OPP
        perso le dit OPP doit etre dans un zinit patch

On peut aussi appeler zoom par minuit 

creer le patch minuit contenant

le prgm principal 
la fonction de minimisation
une *SUBROUTINE* OPP
un zinit

cf. l' exos d' Olivier Fudym coque



<-----/|\------>  ./Help/Users/Upgrades/Creation_d_une_Version_CMZ.bak
==========================================================================
==========================================================================
================= Création d' une Version ================================
==========================================================================
==========================================================================

**** CE HELP REMPLACE /zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ_7_94  ***
     qui est obsolete a compter du 18/07/94.
     Robert FRANCHISSEUR (1994/07/18)

VOIR aussi :
> /zoom/Help/Users/00_New_User_Environment_Installation
> /zoom/Help/Users/General/Execution_sur_Site_distant
> /zoom/Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93 (pour les retardataires ;-)


Modification par rapport à l'ancienne version :

Il n'y a plus de librairies (au sens ar ou lbr) et CMZ travaille 
avec les .bin ou .o (On est donc ainsi sur de recompiler tout ce qui a
pu contenir des erreurs)

Une seule commande remplace MODIF et TEST elle s'appelle MOD (ou MODIF
pour ceux qui veulent garder leurs vielles habitudes)
 
EXEC MOD [ patch_name ] [ cpu_name ]  [ site ]

   [ patch_name ] ::= zinit | version | PROC | other | cpu_name

. zinit ou version : sont les noms des patches contenant les zinits ( On n'est plus
                     oblige d'avoir un patch zinit)

. le nom du patch de commons correspondant est obligatoirement version_CDE ( ZINIT_CDE
  et non plus seulement CDE si vous avez un patch ZINIT)

. PROC : nom *OBLIGATOIRE* pour le patch de processeurs.

on peut partager les processeurs en plusieurs PATCHes, chacun devant comporter PROC_ en tete
de son nom (ex : PROC_SUITE, PROC_TURB). Dans ce cas,' exe mod proc ' traitera ces patch en sequence.


. other : est le nom d'un patch contenant eventuellement une librairie de routines
          annexes ( pas de deck ZINIT dedans)
(' exe mod other ')

   [ cpu_name ]   ::= nom du type de cpu pour execution en remote 
                      pour l'instant apollo,hp,sun,ibm,alpha,cray,sps,lnx,sol,pgf


   [ site ]       ::= consulter Ribs pour avoir la liste des sites disponibles

exemple:   exe mod proc ibm pole
                        hp ens
                        ibm toulouse

ATTENTION : la fabrication d'un executable n'est faite que si l'on "execute" 
            un MOD VERSION
            En consequence si l'on modifie des processeurs (ou other) seule 
            la phase de compilation est effectuee
            


VALEURS PAR DEFAUT :

. [ patch_name ] : zinit
. [ cpu_name ]   : local
Si le premier argument est cpu_name on genere MOD ZINIT CPU


EXEC NEWVER   (pour creer une nouvelle version)
               inchange


EXEC UPDATE : petit utilitaire qui renomera vos anciens patches avec cette
              nouvelle syntaxe


Modifications au niveau de l'arborescence des fichiers sur disque :

Example : vous êtes sous le directory hambourg (au hazard!)

votre cmz_file s'appelle donc hambourg

vous AVIEZ la structure suivante  : sous directory hambourg
                                                   hambourg/cfs
qui constituait la "version originale"             hambourg/hambourg.lib
                                                   hambourg/hambourg_exe.run.lis
                                                   hambourg/hambourg_proc_mod.lis
                                                   hambourg/hambourg_zinit_mod.lis
                                                   
A présent ce sous directory s'appelle ZINIT (ou VERSION)

                                                   zinit
                                                   zinit/cfs
                                                   zinit/hambourg_exe.run.lis
                                                   zinit/hambourg_proc_mod.lis
                                                   zinit/hambourg_zinit_mod.lis


et vous avez en plus un directory PROC :           proc
                                                   proc/cfs



FLAGS ET SEQUENCES
------------------

Vous devez avoir dans votre working directory la kumac selseq.kumac
que vous devez editer selon vos desirs.
Celle du modele selectionne automatiquement [patch_name]_cde

MACRO SELSEQ 1=x
***************************************************************
*                                                             *
*  MACRO SELSEQ                                               *
*                                                             *
*                                                             *
* writen by   : Robert FRANCHISSEUR, 16/12/92, 20.40.19       *
* modified by :                                               *
***************************************************************
mess
mess ' WARNING THIS IS NOT YOUR SELSEQ.KUMAC !!!!'
mess
*
*             --------- les flags ------------
*
sel ZKFENTRY
*
*             --------- les sequences ------------
*
if [1] = x then
  seq zinit_cde
else
  VER_NAME = [1]
  seq [VER_NAME]_cde
endif
return


--------------------------------------- NEW ------------------------
Robert FRANCHISSEUR (1996/06/20)

NEW rules : si on definit un PARAMETER (LENWORK= ) dans un OPP
        perso le dit OPP doit etre dans un zinit patch

On peut aussi appeler zoom par minuit 

creer le patch minuit contenant

le prgm principal 
la fonction de minimisation
une *SUBROUTINE* OPP
un zinit

cf. l' exos d' Olivier Fudym coque



<-----/|\------>  ./Help/Users/Upgrades/Creation_d_une_Version_CMZ_7_94
==========================================================================
==========================================================================
================= Création d' une Version ================================
==========================================================================
==========================================================================

**** CE HELP EST OBSOLETE voir $ZOOM/Help/Users/Upgrades/Creation_d_une_Version_CMZ  ***


L'idée est d'identifier un directory root d'exo au patch PROC de la cmz_file;
Il y correspond donc une proc.lib, que l'on modifie par :
EXE MODIF PROC

A chaque application utilisant le même ensemble de processeurs correspond
un patch=Version_ZINIT, et son Version_CDE correspondant (pour les Tr/Cl_List;)

EXEC NEWVER   (pour creer une nouvelle version)
EXEC TEST Version  (compile le ZINIT correspondant et les GOxx, et s'adjoint
                    la proc.lib pour fabriquer l'executable);

Example:

vous êtes sous le directory hambourg (au hazard!)

après avoir créé votre cmz_file (make hambourg)
et fait : exec modif
vous aurez la structure suivante  : sous directory hambourg
                                                   hambourg/cfs
qui constitue la "version originale"               hambourg/hambourg.lib
                                                   hambourg/hambourg_exe.run.lis
                                                   hambourg/hambourg_proc_mod.lis
                                                   hambourg/hambourg_zinit_mod.lis
                                                   
vous voulez créer la version enbarre

EXEC NEWVER          
nom de la nouvelle version ? enbarre

vous aurez la structure suivante  : sous directory enbarre
                                                   enbarre/cfs
qui constitue la "nouvelle version"                enbarre/hambourg.lib
                                                   enbarre/hambourg_exe.run.lis
                                                   enbarre/hambourg_zinit_mod.lis


et vous aurez sous CMZ les nouveaux patches suivants :
ENBARRE_ZINIT et EMBARRE_CDE (dans laquelle vous specifiez Tr/Cl_List);
vous copiez les decks que vous voulez modifier dans enbarre_zinit

puis EXEC TEST enbarre
                      > commence par ouvrir un Log_book, qu'il ne tiend qu à vous...


MISCEALLENOUS
=============     Vous travaillez dans une Version; vous modifiez un processeur:

EXE MODIF PROC  > modifie la proc.lib

  Pour éxécuter, il FAUT faire :

XQT hambourg
             qui va propager la nouvelle proc.lib commune aux Versions à "enbarre".
<-----/|\------>  ./Help/Users/Upgrades/Creation_d_une_Version_CMZ_7_94.bak
==========================================================================
==========================================================================
================= Création d' une Version ================================
==========================================================================
==========================================================================

**** CE HELP EST OBSOLETE voir /zoom/Help/Users/Upgrades/Creation_d_une_Version_CMZ  ***


L'idée est d'identifier un directory root d'exo au patch PROC de la cmz_file;
Il y correspond donc une proc.lib, que l'on modifie par :
EXE MODIF PROC

A chaque application utilisant le même ensemble de processeurs correspond
un patch=Version_ZINIT, et son Version_CDE correspondant (pour les Tr/Cl_List;)

EXEC NEWVER   (pour creer une nouvelle version)
EXEC TEST Version  (compile le ZINIT correspondant et les GOxx, et s'adjoint
                    la proc.lib pour fabriquer l'executable);

Example:

vous êtes sous le directory hambourg (au hazard!)

après avoir créé votre cmz_file (make hambourg)
et fait : exec modif
vous aurez la structure suivante  : sous directory hambourg
                                                   hambourg/cfs
qui constitue la "version originale"               hambourg/hambourg.lib
                                                   hambourg/hambourg_exe.run.lis
                                                   hambourg/hambourg_proc_mod.lis
                                                   hambourg/hambourg_zinit_mod.lis
                                                   
vous voulez créer la version enbarre

EXEC NEWVER          
nom de la nouvelle version ? enbarre

vous aurez la structure suivante  : sous directory enbarre
                                                   enbarre/cfs
qui constitue la "nouvelle version"                enbarre/hambourg.lib
                                                   enbarre/hambourg_exe.run.lis
                                                   enbarre/hambourg_zinit_mod.lis


et vous aurez sous CMZ les nouveaux patches suivants :
ENBARRE_ZINIT et EMBARRE_CDE (dans laquelle vous specifiez Tr/Cl_List);
vous copiez les decks que vous voulez modifier dans enbarre_zinit

puis EXEC TEST enbarre
                      > commence par ouvrir un Log_book, qu'il ne tiend qu à vous...


MISCEALLENOUS
=============     Vous travaillez dans une Version; vous modifiez un processeur:

EXE MODIF PROC  > modifie la proc.lib

  Pour éxécuter, il FAUT faire :

XQT hambourg
             qui va propager la nouvelle proc.lib commune aux Versions à "enbarre".
<-----/|\------>  ./Help/Users/Upgrades/D_loop_convergence_10_05_94
Implémentation d'un User critearium, cf $ZOOM/Help/Users/Ker_features/D_loop_simple
<-----/|\------>  ./Help/Users/Upgrades/D_loop_convergence_10_05_94.bak
Implémentation d'un User critearium, cf /zoom/Help/Users/Ker_features/D_loop_simple
<-----/|\------>  ./Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93
**************************************************************************
***************************  Passage sous CMZ from PATCHY ****************
***************************** (RF 20/01/93) ****************************** 
**************************************************************************

POUR mettre vos ZINIT ET PROC sous CMZ
--------------------------------------

les noms obligatoires sont en MAJUSCULES (ZINIT, PROC, CDE)
La structure de vos .car doit etre la suivante:

1) ZINIT
--------
Nota: si vous etes sous CMZ et faites la procedure 3)
plus bas votre fichier aura la bonne stucture ainsi
qu'un squelette de ZINIT

+patch,ZINIT,T=FTN.         <--- ne pas oublier le T=FTN

ATTENTION les processors list ne vont plus dans GOCL et GOTR,
que l'on ne touche pas, mais dans le PATCH CDE
dans lequel on cree 2 decks $TRLIST et $CLLIST
( voir note Jean-Louis DUFRESNE $ZOOM/doc/new_mac.doc ) <===========  @@@@@ cliquez la

EN RESUME on supprime -------------------------------
+deck,gocl.
+seq,zincl.
             processors list:
ccm;         >----------------------------+
end;                                      |
+deck,gotr.                               |
+seq,zintr.                               |
             processors list:             |
tei , tjm , telf , th , thi , tdzt ; >----|---+
end;                                      |   |
-----------------------------------       |   |
et on edite CDE/$CLLIST en ajoutant       |   |
la liste des proc entre les < >           |   |
                                          |   |
PROCESSORS LIST                           |   |
<  "Liste des processeurs de cellule"     |   |
ccm;                      <---------------+   |
>                                             |
                                              |
idem CDE/$TRLIST                              |
                                              |
PROCESSORS LIST                               |
<  "Liste des processeurs de transfert"       |
tei , tjm , telf , th , thi , tdzt ;    <-----+
>
----------------------------------------------

+deck,ZINIT.
subroutine zinit;
"cdeck,zinit. "
"     ======================================================"
!subroutine zinit;
"     ======================================================"
...


2) PROC
-------

+patch,CDE.          <------ vos commons
+keep,bidule.
parameter (nmesh=4,n_spes=3);
...

+patch,PROC,T=FTN.    <--- ne pas oublier le T=FTN
+deck,machin.
....
+deck,truc.
....              ATTENTION : les decks en "pur fortran" doivent
....              commencer par &F et finir par &M
                  mettre des cartes RETURN a la fin des routines


virer tous les +use
virer toutes les cartes  seules du style : +add,p=XZ3,d= ,c=0.
et changer les paires de cartes du style :
+add,p=uzc,d= ,c=0,IF=CCM_print.
        ...
+add,p=uzc,d= ,c=0.
par +SELF,IF=CCM_print.
        ...
    +SELF.
----------------------------------
/+add,p=?*,if=?*./
so/+add,p=?*,{IF=?*.}/+self,@1/
------------------------------------


3) SOUS CMZ
   --------
SET /admin/user_data/mtn.cmt -t
CREATE nom_de_l_exo
FILE $ZOOM/dev/exos/modele -r
CPT //MODELE //NOM_DE_L_EXO
REL modele

*----puis OU BIEN:
cd zinit
copy -c Z_SKELTO ZINIT
ed ZINIT
*----OU BIEN:
YTOC le_zinit.car
YTOC le_proc.car
*---END OU BIEN

ED selseq  (macro contenant vos sel flags (les +use que vous avez vire))

CD \
EXEC HELP pour voir comment ca marche

EXEC MODIF [ ZINIT | PROC ]   (pour modifier la version originale)

OTHERS
======   cf  Creation_d_une_Version_CMZ_11_93

<-----/|\------>  ./Help/Users/Upgrades/Passage_de_PATCHY_a_CMZ_01_93.bak
**************************************************************************
***************************  Passage sous CMZ from PATCHY ****************
***************************** (RF 20/01/93) ****************************** 
**************************************************************************

POUR mettre vos ZINIT ET PROC sous CMZ
--------------------------------------

les noms obligatoires sont en MAJUSCULES (ZINIT, PROC, CDE)
La structure de vos .car doit etre la suivante:

1) ZINIT
--------
Nota: si vous etes sous CMZ et faites la procedure 3)
plus bas votre fichier aura la bonne stucture ainsi
qu'un squelette de ZINIT

+patch,ZINIT,T=FTN.         <--- ne pas oublier le T=FTN

ATTENTION les processors list ne vont plus dans GOCL et GOTR,
que l'on ne touche pas, mais dans le PATCH CDE
dans lequel on cree 2 decks $TRLIST et $CLLIST
( voir note Jean-Louis DUFRESNE /zoom/doc/new_mac.doc ) <===========  @@@@@ cliquez la

EN RESUME on supprime -------------------------------
+deck,gocl.
+seq,zincl.
             processors list:
ccm;         >----------------------------+
end;                                      |
+deck,gotr.                               |
+seq,zintr.                               |
             processors list:             |
tei , tjm , telf , th , thi , tdzt ; >----|---+
end;                                      |   |
-----------------------------------       |   |
et on edite CDE/$CLLIST en ajoutant       |   |
la liste des proc entre les < >           |   |
                                          |   |
PROCESSORS LIST                           |   |
<  "Liste des processeurs de cellule"     |   |
ccm;                      <---------------+   |
>                                             |
                                              |
idem CDE/$TRLIST                              |
                                              |
PROCESSORS LIST                               |
<  "Liste des processeurs de transfert"       |
tei , tjm , telf , th , thi , tdzt ;    <-----+
>
----------------------------------------------

+deck,ZINIT.
subroutine zinit;
"cdeck,zinit. "
"     ======================================================"
!subroutine zinit;
"     ======================================================"
...


2) PROC
-------

+patch,CDE.          <------ vos commons
+keep,bidule.
parameter (nmesh=4,n_spes=3);
...

+patch,PROC,T=FTN.    <--- ne pas oublier le T=FTN
+deck,machin.
....
+deck,truc.
....              ATTENTION : les decks en "pur fortran" doivent
....              commencer par &F et finir par &M
                  mettre des cartes RETURN a la fin des routines


virer tous les +use
virer toutes les cartes  seules du style : +add,p=XZ3,d= ,c=0.
et changer les paires de cartes du style :
+add,p=uzc,d= ,c=0,IF=CCM_print.
        ...
+add,p=uzc,d= ,c=0.
par +SELF,IF=CCM_print.
        ...
    +SELF.
----------------------------------
/+add,p=?*,if=?*./
so/+add,p=?*,{IF=?*.}/+self,@1/
------------------------------------


3) SOUS CMZ
   --------
SET /admin/user_data/mtn.cmt -t
CREATE nom_de_l_exo
FILE /zoom/dev/exos/modele -r
CPT //MODELE //NOM_DE_L_EXO
REL modele

*----puis OU BIEN:
cd zinit
copy -c Z_SKELTO ZINIT
ed ZINIT
*----OU BIEN:
YTOC le_zinit.car
YTOC le_proc.car
*---END OU BIEN

ED selseq  (macro contenant vos sel flags (les +use que vous avez vire))

CD \
EXEC HELP pour voir comment ca marche

EXEC MODIF [ ZINIT | PROC ]   (pour modifier la version originale)

OTHERS
======   cf  Creation_d_une_Version_CMZ_11_93

<-----/|\------>  ./Help/Users/Upgrades/SkipRead_Loops
Formes compactees de type :
  Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
  (Sept 94) cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
  (Futura adds in January 97))    id
<-----/|\------>  ./Help/Users/Upgrades/SkipRead_Loops.bak
Formes compactees de type :
  Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
  (Sept 94) cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc
  (Futura adds in January 97))    id
<-----/|\------>  ./Help/Users/Upgrades/Upgrading_Symbols_04_93
**************************************************************************
***************************  Macro pour ZINIT  ***************************
***************************** (JLD 20/04/93) ***************************** 
**************************************************************************

==========================================================================
=======================> Modifications aux processeurs <==================
=====================> pour l'acces au parametres <=======================
==========================================================================

1) il faut ajouter au début de chaque processeur, dans la partie interprètée
par MORTRAN  (donc après un &M ) +cde,OPACC.

2)Il faut rajouter a la fin des processeur (qu'il soit de cellule ou de
transfert ), en dehors de tous blocks (en particulier de from TR(LTR)<
ou from CL(LCL)< ), juste avant le END:
;
Parameter_Entry ;
END;

Variables réservées :

  = Pour une cellule: l'adresse du processeur est LCL, le nom du bank des
     paramètres est CD et son adresse LCD;
  = Pour une transfert: l'adresse du processeur est LTR, le nom du bank des
     paramètres est TD et son adresse LTD;

Dans le Y/I_Entry, il faut créer le TD/CD bank:
set .Nb_Edge for TD = ... Fixe les valeurs de variables dimentionnant des
                          Desc_Bank_Var avant de créer le Desc_bank par:
;
Lift LTD of class TD under (2,0);
"Link TDesc" @LTR@TR@TD@=LTD;
" "
RETURN;

==========================================================================
============> Modification de GOCL et GOTR pour l'accès <=================
====================> aux parametres d'un objet <=========================
==================> déclarés dans un CD ou TD bank <======================
==========================================================================

sous CMZ
========

1) dans le patch CDE, les deux deck $TRLIST et $CLLIST doivent contenir les
deux +keep TRLIST et +keep CLLIST. contenant la liste des processeurs :

+PATCH,CDE et/ou de chaque P=Version_User/CDE
+KEEP,TRLIST.
*CMZ :          12/03/93  18.32.53  by  Robert FRANCHISSEUR
*-- Author :    Robert FRANCHISSEUR   12/03/93
PROCESSORS LIST
<  "Liste des processeurs de transfert"
   TFIX2, THCVA, TFQO, TRAD2, TKND, TKHAIR,TCDTR
   , TSPEAR, TPROB ,TTHCX ;
>

+KEEP,CLLIST.
*CMZ :          12/03/93  18.34.10  by  Robert FRANCHISSEUR
*-- Author :    Robert FRANCHISSEUR   12/03/93
PROCESSORS LIST
<  "Liste des processeurs de cellule"
    CND, CHAIR, CFIX, COCEAN
>

2) dans chaque patch ZINIT, il faut les 4 decks suivants, strictement
identiques pour tout le monde

+PATCH,//ZARLETY/ZINIT et/ou Version_User_ZINIT
+DECK,GOCL.
/*CMZ :          12/03/93  18.35.39  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN1cl.  (ZIN"Un"Cell)
+SEQ,ClList.  (CellList)
;
+DECK,GO2CL.
/*CMZ :          12/03/93  18.35.58  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN2cl.
+SEQ,ClList.
;
+DECK,GOTR.
/*CMZ :          12/03/93  18.36.17  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN1TR.
+SEQ,TrList.
;
+DECK,GO2TR.
/*CMZ :          12/03/93  18.36.29  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN2TR.
+SEQ,TRList.
;
<-----/|\------>  ./Help/Users/Zinit/Tours_de_mains/Identification_Fit
*****************************************************************
*****************************************************************
********** Parameter Fit / Identification ***********************
*************** ( exemple in $ZOOM/exos/flash2 ) ****************
*****************************************************************
jeudi 02/10/1997(Al1)

**********************************
FIT when sensitivities are modeled 
**********************************
The exemple was built as a test of fitting a remote temperature
measured from a flash method to determine a unique parameter,
the heat conductivity of the material. 1D model.

Principle of the fitting loop
=============================
== first exemple, the parameters are not TEF variables. Sensitivities
are modeled.
    The complete loop fit is managed from ZSTEER, from which
the end of one run (<->given value of the parameters) is controled,
a new parameters estimation done (using OLLSQ), then a new run is
cast.
As a consequence, ZINIT is never re-ran, and the parameters'values
has to be transmitted from ZSTEER to the processors.
In the exemple - from Olivier FUDYM et al - this is done thanks to
a common :
PARAMETER (NPARFIT = 1);
COMMON /PARAM/ NBFIT,VPARAM(NPARFIT),SENSIBFIT(NPARFIT);
EQUIVALENCE (ALAMBDA,VPARAM(1));
and the processors uses explicitly this unique alambda as a parameter.

Resume from style of the ZOOM run
=================================
 An ouput set OZ... with at least one time step is required to initialize
each run at same values. So that the fit uses a RESUME from ...,at 1;
and in ZSTEER a call ORESUME resumes each run.
cf > $ZOOM/Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study 

Passing the parameters values from ZSTEER to Processors
=======================================================
and sensitivities from Processors to ZSTEER
===========================================
PARAMETER (NPTMAX = 500);
PARAMETER (NPARFIT = 1);
PARAMETER (NPARFIT2 = 2*NPARFIT);
COMMON/MANIP/IMANIP,timemanip(NPTMAX),xmanip(NPTMAX);
COMMON/MANIP/CHRONO(NPTMAX),XM(NPTMAX),ERSMES(NPTMAX),XERREUR(NPTMAX);
COMMON/MANIP/XMODELE(NPTMAX),ecart(NPTMAX),DECART(NPARFIT,NPTMAX);
COMMON/MANIP/timetjm,Tmod,Nombre_points,IMANIPMAX,ECARTQUAD;
COMMON/MANIP/texp,err,idumi,nstep;
COMMON /PARAM/ NBFIT,VPARAM(NPARFIT),SENSIBFIT(NPARFIT);
EQUIVALENCE (ALAMBDA,VPARAM(1));

Measurement set to fit
======================
From actual measurement or virtual one

Model ouput
===========
All models sentitive to the parameter (alambda, a unique heat conductivity)
computes as TEF variables the sensitivity of their primitive variables - states or
transfers) to the parameter.
The Transfer Processor TJM_OUT computes a wall temperature (TPAROI) to be
compared with the measures. The sensitivity dTParoi/d_alambda is computed as
a TEF transfer variable, wich thus inherits of all other sensitivities to alambda;

   timetjm=TIME;      records a model time output for synchronisation with measurement;
   Tmod=TPAROI;       Tmod transmitted to ZSTEER;
   sensibfit(1)=sigma_TPL;  == dTParoi/d_alambda 


a ZSTEER exemple with comments
==============================
in ZINIT :
+CDE,MANIP.
 DIMENSION DVPARAM(NPARFIT),IPIV(NPARFIT),AUX(NPARFIT2);
   . . .
  RESUME FROM OZDAT.CL1/OZDAT.TR1,at 1;
   . . .

ENTRY ZSTEER;
!******************************************
!*  TRAITEMENT DES ESSAIS EXPERIMENTAUX   *
!******************************************
DO IL=1,Nombre_points                                  Synchronisation manip/simul
<                                                                      IL => IManip
 test=ABS(timetjm-CHRONO(IL));                         on selectionne les mesures
 tolerance=DTIME/100.;                                 synchro dans X..(IManip).
 IF(test.LE.tolerance)
 <
  TIMEMANIP(IMANIP)=CHRONO(IL);
  XMANIP(IMANIP)=XM(IL);
  XMODELE(IMANIP)=Tmod;
  XERREUR(IMANIP) = ERSMES(IL);
  ECART(IMANIP)=(XMANIP(IMANIP)-XMODELE(IMANIP))/XERREUR(IMANIP);  Residu
  DO IP = 1,NPARFIT
  <  DECART(IP,IMANIP) = -SENSIBFIT(IP)/XERREUR(IP);   Sensibilité normalisée
  >
+SELF,IF=ZINITPRINT.
  PRINT*,'IMANIP,IL          : ',IMANIP,IL;
  PRINT*,'timetjm            : ',timetjm;
  PRINT*,'TIMEMANIP,CHRONO   : ',TIMEMANIP(IMANIP),CHRONO(IL);
  PRINT*,'XMANIP, XMODELE    : ',XMANIP(IMANIP),XMODELE(IMANIP);
  PRINT*,'ECART              : ',ECART(IMANIP);
  PRINT*,'DECART             : ',(DECART(IP,IMANIP),IP=1,NPARFIT);
  PRINT*,'XERREUR            : ',XERREUR(IMANIP);
  PRINT*,'SENSIBFIT          : ',(SENSIBFIT(IP),IP=1,NPARFIT);
+SELF.
  IMANIPMAX=IMANIP;
  IMANIP=IMANIP+1;
 >"end if"
>"end lecture"
;
IF(ISTEP.EQ.NSTEP)                                          Fin d'un run, on va recalculer
<                                                           les parametres
;;
OPEN (UNIT = 82, FILE = 'ecart.res', STATUS = 'unknown');   (conserve les residus)

 DO IL=1,IMANIPMAX
 <
  ECARTQUAD=ECARTQUAD+(ECART(IL))**2;
  WRITE (82,*)IL,TIMEMANIP(IL),XMANIP(IL),XMODELE(IL),ECART(IL);
 >"end lecture"
 CLOSE(82);
 OPEN (UNIT = 83, FILE = 'QUADRATIC.RES', STATUS = 'unknown');
 WRITE (83,*) IMANIPMAX,ECARTQUAD;
 CLOSE(83);
+SELF,IF=ZINITPRINT.
 PRINT*,'IMANIPMAX          : ',IMANIPMAX;
 PRINT*,'TIMEMANIP          : ',TIMEMANIP(IMANIPMAX);
 PRINT*,'XMANIP, XMODELE    : ',XMANIP(IMANIPMAX),XMODELE(IMANIPMAX);
 PRINT*,'ECART              : ',ECART(IMANIPMAX);
 PRINT*,'TIME,ECARTQUAD     : ',TIME,ECARTQUAD;
 PRINT*,'*** Entree dans OLLSQ ***';
+SELF.
 CALL OLLSQ(DECART,ECART,DVPARAM,IMANIPMAX,NPARFIT,1,IPIV,AUX,IER);    Calcul variation des
 PRINT *,' ***IER***  ',IER;                                           parametres
!
 DO I=1,NPARFIT
 < VPARAM(I) = VPARAM(I) - DVPARAM(I);                      MIse a jour des parametres
+SELF,IF=ZINITPRINT.
   PRINT*,'VPARAM , DVPARAM : ',I,VPARAM(I),DVPARAM(I);
+SELF.
 >
NBFIT = NBFIT+1;
PRINT *,' NBFIT ',NBFIT;
!
IF (NBFIT .LE. 5)
<
   ISTEP =1;
   IMANIP=1;
   CALL ORESUME(LZ);
>
!
>"end if"
RETURN ;
END ;

Utilisation de OLLSQ
====================
Minimise la norme de A*X-B pour A et B donnés; dans le fit, cette norme euclidienne
sqrt(< AX-B | AX-B >) n'est autre que la variation du Chi2 pour une variation des
         ?     ?-?
paramètres = X.

 CALL OLLSQ(                           Linear Least SQuare fit ;
    DECART,      (==A)                 Sensibilités : matrice [dModele/dParam]
                                                    (dans l'exemple a un parametre=vecteur);
    ECART,       (==B)                 Vecteur des Ecarts :  Mesure-Modele (IManip);
    DVPARAM,     (==X)                 Sortie : Variation minimisante;
    IMANIPMAX,                         Nbre de lignes de A et dim B;
    NPARFIT,                           Nbre de colonnes de A = dim X = nbre de parametres;
    1,                                 pour demander des fit sur plusieurs vecteurs X,B
                                       (on lui donne le signe - pour demander la matrice
                                        de covariance - a la fin du Fit par exemple)
    IPIV,                              Espace de travail;
    AUX,                                       ""
    IER);                              Flag de convergence, nul si OK.

Sortie : DECART est remplacee partiellement par la matrice de covariances |dPar><dPar|;
         IER .ne.0 si non convergence.
declaration pour sortie et espace auxiliaire de travail de OLLSQ :
 DIMENSION DVPARAM(NPARFIT),IPIV(NPARFIT),AUX(2*NPARFIT);


<-----/|\------>  ./Help/Users/Zinit/Tours_de_mains/Identification_Fit.bak
*****************************************************************
*****************************************************************
********** Parameter Fit / Identification ***********************
*************** ( exemple in /zoom/exos/flash2 ) ****************
*****************************************************************
jeudi 02/10/1997(Al1)

**********************************
FIT when sensitivities are modeled 
**********************************
The exemple was built as a test of fitting a remote temperature
measured from a flash method to determine a unique parameter,
the heat conductivity of the material. 1D model.

Principle of the fitting loop
=============================
== first exemple, the parameters are not TEF variables. Sensitivities
are modeled.
    The complete loop fit is managed from ZSTEER, from which
the end of one run (<->given value of the parameters) is controled,
a new parameters estimation done (using OLLSQ), then a new run is
cast.
As a consequence, ZINIT is never re-ran, and the parameters'values
has to be transmitted from ZSTEER to the processors.
In the exemple - from Olivier FUDYM et al - this is done thanks to
a common :
PARAMETER (NPARFIT = 1);
COMMON /PARAM/ NBFIT,VPARAM(NPARFIT),SENSIBFIT(NPARFIT);
EQUIVALENCE (ALAMBDA,VPARAM(1));
and the processors uses explicitly this unique alambda as a parameter.

Resume from style of the ZOOM run
=================================
 An ouput set OZ... with at least one time step is required to initialize
each run at same values. So that the fit uses a RESUME from ...,at 1;
and in ZSTEER a call ORESUME resumes each run.
cf > /zoom/Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study 

Passing the parameters values from ZSTEER to Processors
=======================================================
and sensitivities from Processors to ZSTEER
===========================================
PARAMETER (NPTMAX = 500);
PARAMETER (NPARFIT = 1);
PARAMETER (NPARFIT2 = 2*NPARFIT);
COMMON/MANIP/IMANIP,timemanip(NPTMAX),xmanip(NPTMAX);
COMMON/MANIP/CHRONO(NPTMAX),XM(NPTMAX),ERSMES(NPTMAX),XERREUR(NPTMAX);
COMMON/MANIP/XMODELE(NPTMAX),ecart(NPTMAX),DECART(NPARFIT,NPTMAX);
COMMON/MANIP/timetjm,Tmod,Nombre_points,IMANIPMAX,ECARTQUAD;
COMMON/MANIP/texp,err,idumi,nstep;
COMMON /PARAM/ NBFIT,VPARAM(NPARFIT),SENSIBFIT(NPARFIT);
EQUIVALENCE (ALAMBDA,VPARAM(1));

Measurement set to fit
======================
From actual measurement or virtual one

Model ouput
===========
All models sentitive to the parameter (alambda, a unique heat conductivity)
computes as TEF variables the sensitivity of their primitive variables - states or
transfers) to the parameter.
The Transfer Processor TJM_OUT computes a wall temperature (TPAROI) to be
compared with the measures. The sensitivity dTParoi/d_alambda is computed as
a TEF transfer variable, wich thus inherits of all other sensitivities to alambda;

   timetjm=TIME;      records a model time output for synchronisation with measurement;
   Tmod=TPAROI;       Tmod transmitted to ZSTEER;
   sensibfit(1)=sigma_TPL;  == dTParoi/d_alambda 


a ZSTEER exemple with comments
==============================
in ZINIT :
+CDE,MANIP.
 DIMENSION DVPARAM(NPARFIT),IPIV(NPARFIT),AUX(NPARFIT2);
   . . .
  RESUME FROM OZDAT.CL1/OZDAT.TR1,at 1;
   . . .

ENTRY ZSTEER;
!******************************************
!*  TRAITEMENT DES ESSAIS EXPERIMENTAUX   *
!******************************************
DO IL=1,Nombre_points                                  Synchronisation manip/simul
<                                                                      IL => IManip
 test=ABS(timetjm-CHRONO(IL));                         on selectionne les mesures
 tolerance=DTIME/100.;                                 synchro dans X..(IManip).
 IF(test.LE.tolerance)
 <
  TIMEMANIP(IMANIP)=CHRONO(IL);
  XMANIP(IMANIP)=XM(IL);
  XMODELE(IMANIP)=Tmod;
  XERREUR(IMANIP) = ERSMES(IL);
  ECART(IMANIP)=(XMANIP(IMANIP)-XMODELE(IMANIP))/XERREUR(IMANIP);  Residu
  DO IP = 1,NPARFIT
  <  DECART(IP,IMANIP) = -SENSIBFIT(IP)/XERREUR(IP);   Sensibilité normalisée
  >
+SELF,IF=ZINITPRINT.
  PRINT*,'IMANIP,IL          : ',IMANIP,IL;
  PRINT*,'timetjm            : ',timetjm;
  PRINT*,'TIMEMANIP,CHRONO   : ',TIMEMANIP(IMANIP),CHRONO(IL);
  PRINT*,'XMANIP, XMODELE    : ',XMANIP(IMANIP),XMODELE(IMANIP);
  PRINT*,'ECART              : ',ECART(IMANIP);
  PRINT*,'DECART             : ',(DECART(IP,IMANIP),IP=1,NPARFIT);
  PRINT*,'XERREUR            : ',XERREUR(IMANIP);
  PRINT*,'SENSIBFIT          : ',(SENSIBFIT(IP),IP=1,NPARFIT);
+SELF.
  IMANIPMAX=IMANIP;
  IMANIP=IMANIP+1;
 >"end if"
>"end lecture"
;
IF(ISTEP.EQ.NSTEP)                                          Fin d'un run, on va recalculer
<                                                           les parametres
;;
OPEN (UNIT = 82, FILE = 'ecart.res', STATUS = 'unknown');   (conserve les residus)

 DO IL=1,IMANIPMAX
 <
  ECARTQUAD=ECARTQUAD+(ECART(IL))**2;
  WRITE (82,*)IL,TIMEMANIP(IL),XMANIP(IL),XMODELE(IL),ECART(IL);
 >"end lecture"
 CLOSE(82);
 OPEN (UNIT = 83, FILE = 'QUADRATIC.RES', STATUS = 'unknown');
 WRITE (83,*) IMANIPMAX,ECARTQUAD;
 CLOSE(83);
+SELF,IF=ZINITPRINT.
 PRINT*,'IMANIPMAX          : ',IMANIPMAX;
 PRINT*,'TIMEMANIP          : ',TIMEMANIP(IMANIPMAX);
 PRINT*,'XMANIP, XMODELE    : ',XMANIP(IMANIPMAX),XMODELE(IMANIPMAX);
 PRINT*,'ECART              : ',ECART(IMANIPMAX);
 PRINT*,'TIME,ECARTQUAD     : ',TIME,ECARTQUAD;
 PRINT*,'*** Entree dans OLLSQ ***';
+SELF.
 CALL OLLSQ(DECART,ECART,DVPARAM,IMANIPMAX,NPARFIT,1,IPIV,AUX,IER);    Calcul variation des
 PRINT *,' ***IER***  ',IER;                                           parametres
!
 DO I=1,NPARFIT
 < VPARAM(I) = VPARAM(I) - DVPARAM(I);                      MIse a jour des parametres
+SELF,IF=ZINITPRINT.
   PRINT*,'VPARAM , DVPARAM : ',I,VPARAM(I),DVPARAM(I);
+SELF.
 >
NBFIT = NBFIT+1;
PRINT *,' NBFIT ',NBFIT;
!
IF (NBFIT .LE. 5)
<
   ISTEP =1;
   IMANIP=1;
   CALL ORESUME(LZ);
>
!
>"end if"
RETURN ;
END ;

Utilisation de OLLSQ
====================
Minimise la norme de A*X-B pour A et B donnés; dans le fit, cette norme euclidienne
sqrt(< AX-B | AX-B >) n'est autre que la variation du Chi2 pour une variation des
         ?     ?-?
paramètres = X.

 CALL OLLSQ(                           Linear Least SQuare fit ;
    DECART,      (==A)                 Sensibilités : matrice [dModele/dParam]
                                                    (dans l'exemple a un parametre=vecteur);
    ECART,       (==B)                 Vecteur des Ecarts :  Mesure-Modele (IManip);
    DVPARAM,     (==X)                 Sortie : Variation minimisante;
    IMANIPMAX,                         Nbre de lignes de A et dim B;
    NPARFIT,                           Nbre de colonnes de A = dim X = nbre de parametres;
    1,                                 pour demander des fit sur plusieurs vecteurs X,B
                                       (on lui donne le signe - pour demander la matrice
                                        de covariance - a la fin du Fit par exemple)
    IPIV,                              Espace de travail;
    AUX,                                       ""
    IER);                              Flag de convergence, nul si OK.

Sortie : DECART est remplacee partiellement par la matrice de covariances |dPar><dPar|;
         IER .ne.0 si non convergence.
declaration pour sortie et espace auxiliaire de travail de OLLSQ :
 DIMENSION DVPARAM(NPARFIT),IPIV(NPARFIT),AUX(2*NPARFIT);


<-----/|\------>  ./Help/Users/Zinit/Tours_de_mains/Variable_Mesh_Grid
*****************************************************************
*****************************************************************
********** Variable Mesh Grid Ways ******************************
*************** ( exemple in /alain/patan7/window_probl ) *******
*****************************************************************

Conventional background pattern
-------------------------------
Symmetrical variations (two boundary-layers type of)
----------------------------------------------------
  Functions tanh (x)
            beta incomplete (x;a) = Sum_0_x [s**a * (1-s)**a]

Non-Symmetrical variations (one boundary-layers type of)
--------------------------------------------------------
<-----/|\------>  ./Help/Users/Zinit/Tours_de_mains/Z_Matrix_Study
*****************************************************************
*****************************************************************
********** Coefficients dTime (1/p) dependance ******************
*****************************************************************
*****************************************************************


L exemple donné considère que l on explore la matrice au 500ième
step d une sortie déjà acquise.

! Resume from file
Resume from OZDAT.CL1, at 500;
;
On veut recalculer la matrice en faisant varier dTime :

ENTRY ZSTEER;

 call ORESUME(LZ);  " reprend au début de chaque step la même initialisation "
                    " attention, time reprend la valeur de debut, cf + bas"
 dtime = dtime*2.;  " on fait varier dTime"
 time = time + dTime; " Il faut donner une valeur croissante a time"
! variante : time = dTime;"si le job ne dépend pas de time, on aura directement"
                           dans viZu les cij(dTime)
;
  if ISTEP.ge.NSTEP < ZENDRN=.TRUE.; >;  Pour arrêter le job, on fixe TIMAX
                                         grand, et on se donne un NSTEP.

Rien de changé dans viZu.
<-----/|\------>  ./Help/Users/Zinit/Tours_de_mains/Z_Steering_du_dTime
********************************************************************
********************************************************************
***** Exemple de gestion du pas dTime et fin de run ****************
********************************************************************
********************************************************************
 
DTIME=.01 ; TIMAX = 99999.;

ENTRY ZSTEER;
if istep.le.64     [ ou if dTime.le.[Value max] ]
< IF mod(ISTEP,2).eq.0  < dTime=dTime*sqrt(sqrt(2.)); >;
>;
!                          => dtime *2. tous les 8 pas.
!                        à 64 : dTime=.01*2.**8 = 2.56 s.
if istep.gt.250 < ZENDRN=.true.; >   "Zsteer est appelé  en début du"
!            pas de temps mais le run se terminera a la fin d'icelui .

Rq. : pour un pb lineaire, cela fournit egalement la Borelienne, si l'on
a bloque ZBorel a .True. => et donc pas modifié les Alpha (O_Etat_Eta...).
<-----/|\------>  ./Help/Users/Zinit/ZDL/OZ_Print_Levels -> ../../Combined_Facilities/Print_levels
<-----/|\------>  ./Help/Users/Zinit/ZDL/Read_me
vendredi 23/02/1996
==================(Al1)

Le ZDL Dictionnary ne doit plus etre touché !!!
Se referrer a Zdl.html et les fihiers du Zdl_html.dir

Le tout sera reconstitué des parties pour Docs imprimees.


lundi 27/05/1996
===============(Al1)
Pret pour Albi, on pourra re-decouper apres.
POur Albi, le texte de base est le .html
les fichiers dans htm.dir seront des annexes. 
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl.html
********************************************************************************
********************************************************************************
******* Dictionnaire des instructions du ZOOM DESIGN LANGUAGE ******************
********************************************************************************
********************************* (mise à jour le vendredi 30/01/1998 Al1) *****
****** Futura feature : tout ce qui concerne *TrName* (Al1, mercredi 05/08/1998)
********************************************************************************

Cette entrée du manuel ZDL est celle de $ZOOM/Help/Users/Zinit/ZDL/Zdl.html;
Pour chaque groupe d'instructions, on trouvera un complément soit sous forme
hypertexte dans le fichier réferencé dans  Zdl_html.dir/XXX < et repéré par ce signe "<",
soit en annexe du texte imprimé.

********************************************************************************
******** Préliminaires pour faciliter l'utilisation du dictionnaire ***********
********************************************************************************

Le ZDL est un language programmable et permet l'utilisation des instructions Fortran ou
Mortran de base.
L'interprétation de Zinit donnera une Subroutine ZINIT avec un point d'entrée ZSTEER.
La subroutine est appellée une seule fois en tout début du Run. ZSTEER est appelé
à chaque nouvel incrément (temporel en dynamique ou itération en stationnaire).

Remarque : la notion de language interprèté génèrant une routine éxécutable peut mener
à des difficultés de compréhension des contingences d'écriture; en cas d'ambiguité, nous
préciserons dans le texte les notions : d'avant - après, en les qualifiant de :
 - séquencielles : il s'agit alors d'ordre des instructions elles-mêmes dans le corps du Zinit;
 - a l'éxécution : il s'agit alors de l'ordre dans lequel vont être éxécutées les instructions;
La différence entre les deux étant d'autant plus grande que les instructions de déroutage
du Fortran seront nombreuses (programmation dite "spaghetti").
Notons au passage que de nombreuses instructions et blocs logiques Mortran permettent de structurer
le corps du programme (Do while, Until, Case, if then else etc).


Fonctions du Zinit :
====================

Il a pour premier but de créer la structure dite de l'Arbre ZOOM, qui est constituée
d'un emboîtement de FAMILLES ayant des objets terminaux dits CELLULES.
On remarquera qu'il s'agit de créer un programme créant une structure et non de
décrire de manière déclarative cette structure; cela permet en particulier une grande
souplesse, puisqu'on peut alors :
 - utiliser des boucles pour créer des structures répétitives, des emboitements, etc;
 - programmer sa modification apres création (cf MOVE, GET, FREEZE);
 - appeler des procédures de créations/instanciations communes à plusieurs objets;

Ensuite de relier les cellules à des TRANSFERTS (ou par des transferts : deux facons de dire 
et de faire mais une seule même structure créée).

Il doit - à chaque création de transfert ou cellule - associer un MODèLE à l'objet créé
(TYPE=); chaque instruction CREATE constitue donc une instanciation (d'un objet à partir
d'un modèle); il s'y associe donc l'attribution de valeurs numériques à certains
paramètres libres du modèle et, pour les cellules uniquement (de manière obligatoire)
une initilisation du vecteur d'état (fill_Eta).
Une partie plus subtile de l'instanciation concerne leur insertion dans une structure :
celle ci héritera des connections entre objets (C-PLUG T-PLUG, CONNECT, JOIN TO)

Enfin, une tâche (plus classique) est d'attribuer des valeurs aux paramètres du Run :
gestion de l'incrément temporel, des niveaux et fréquence de sauvegarde des résultats
de calculs, redémarrage de run etc.

Ecriture du Zinit :
===================

Deux types de blocs logiques sont utilisés dans ce language.
Le bloc standard de Mortran - emboîtable - <;>, associé aux instructions NEXT; et EXIT;
 il est ici mis a profit pour décrire la structure emboitée des cellules/familles.
=> celà donne un sens fort à la structure, puisqu'un bloc logique n'a d'existence que
SITUÉ dans la structure;
Un bloc implicite qui détermine une adresse courante dans la structure; tout attribut
sous forme de symbole Fi Eta [Paramètre] est attribué à l'objet courant de même
nature : famille, cellule ou transfert tant qu'une instruction n'en change;

instructions changeant l'objet courant :
----------------------------------------
under<                               change de Famille courante (celle sous laquelle seront
                                     placées les familles ou cellules suivantes);
     >;                              ferme le bloc logique préecédent et restore la famille
                                     courante séquenciellement précédente;
create CL, get *ClNam* ;             change de Cellule courante;
create TR, get Tr *TrName*;          change de Transfert courant;

Métasymboles utilisés :   *NamObj*   pour nom d'objet à choisir par l'utilisateur.
======================   {*Valeur*}  Valeur optionnelle.
                          " texte "  tout texte entre " " (symbole des commentaires Mortran)
                                     est hors ZDL.
                     |Instruction| : permet d'identifier une instruction dans un texte (ou un mot
                                     réservé du ZDL).
                          remarque : ces meta symboles ne seront utilisés que s'il y a ambiguité.

Vocabulaire :
=============
Bloc logique              : voir plus haut (<;>).
Position courante         : voir plus haut.
Instructions spécifiques  : certaines instructions qui ne peuvent être utilisées
                            que dans certains blocs logiques (cf Fill_CD<;);
Bank                      : nous conservons ce nom pour designer un bloc de données géré par ZEBRA,
                            pour eviter la confusion avec le Bloc au sens logique.

Liste des Métasymboles utilisés :
=================================
*NamFm*   : nom de Famille (Fm);
*NamCl*            Cellule (Cl);
*NamObj*  : Cl ou Fm;
*NamObj*  : se décompose en deux champs *Nam* - *Code* où *ClNam* est une suite d'au plus 5 Character
            Fortran et *Code* un integer Fortran; les deux champs etant séparés par la copule : - .

*AddObj*  : permet de creer une adresse universelle associee a un nom d'objet DANS l'arbre
            ( pour eviter d'y referer via son adresse complete : /z/u/*NamFm*/.../*NamObj*)
            Universels dans le sens où ils sont reconnus de n'importe quelle famille courante;
*NamTr*   : donne un nom au transfert courant, qui pourra etre ré-appelé, ou invoqué pour connection Tr à Tr;
*ChFTNVar*: Variable Character FTN (par defaut, Character*4)
*Code*    : integer ajoutant un numero a un symbole; (on utilise aussi *CodFm* et *CodCl*,*CodPlg* pour Futura);
*CPlug*   : *NamCl*,*NamPlug*  (un C-Plug est toujours associe au nom de sa cellule)
*NamPlug* : *CodPlg* (integer)
            Futura : *NamPlug* = *NamPlug* - *CodPlg* for C-Plugs only (comme donc *NamCl* et *NamFm*);
                     atention, Char*4 (au lieu des 5 possibles pour Cl et Fm);
*VarList* : une liste d'integers Fortran; syntaxe : (int1,int2,int3,etc)
            ou  (int1 thru int2) qui prend la suite des entiers naturels croissants de int1 a int2.

********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
                                                  Zdl_html.dir/Fm_Cell_Create <
;
Familles Obligatoires : CREATE ZEUS;
                        CREATE UNIVERSE;

Autres familles :       CREATE FM *NamFm* - *CodFm*;
                        CREATE FM *NamFm*; 
           Equivalent à CREATE FM *NamFm* - 0;

                        CREATE FM=*ChFTNVar* - *CodFm*;

Cellules :              CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;

Complément :            CREATE N-CL ...
                        FREEZE *NamCl* - *CodCl*;

                        SET FM TYPE:T; Instruction obligatoire et inutile, qui prétend
declarer que la famille courante est de type Transfer, et donc que l'on y éliminera les
variables d'état - ce qui est exact. L'instruction duale Set Fm Type:S, devrait alors
conduire a l'élimination des variables de transfert (non implémenté);



********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
                                                  Zdl_html.dir/Transfer_Create <

Naturelle :             CREATE TR,TYPE=*TrProc* 1,-9,-9;

 et gelée :             CREATE N-TR,TYPE=*TrProc*;

Imposée   :             CREATE-F TR
                        CREATE-F+ TR
                        CREATE-Z TR
                        CREATE-U TR

 et gelée :             CREATE-Z N-TR,TYPE=*TrProc*;

********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************
                                                   Zdl_html.dir/Object_Address <


                        SET *AddObj* = *ObjetDéjàCréé* ;
                        SET *AddObj*(*Indice*) = *NamObj*;
                        SET *AddObj* == *ChFTNVar*;
                 *ChFTNVar* est une variable Fortran CHARACTER*N contenant le *NamObj*;

On peut séquentiellement ré-affecter ces symboles universels :

                        RESET *AddObj* = *NouvelObjet* ;



exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
Set Obj(3) = Mur-4;
(on les récupèrent par Get MaCl; etc)

********************************************************************************
********* Marque de Transferts (en particulier pour connection Tr à Tr) ********
**FUTURA************************************************************************
                                                      Zdl_html.dir/Tr_to_Tr_Cx <


                        Name Tr as : *NamTr* ;
                        Name Tr as : *NamTr*(*Indice*) ;

Ces noms sont des symboles des mêmes Table que pour SET; il faut donc affecter
des symboles tous différents.

exemples :
..........
Name Tr as Heat(1); Name Tr as Conv;  Exemples de /exos/hamb/zinit
(on les récupèrent par Get Tr Heat(1); etc)


********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
                                                       Zdl_html.dir/Connecting <
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2ème temps   : création d'un T-Plug sur un transfert;
3ème temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

1&2/ Création :
---------------

C-Plug :                C-PLUG *CodPlg* : *VarList*;
            (Futura :)  C-PLUG *NamPlg*-*CodPlg* : *VarList*; (Default is *NamPlg* :=PLUG)

T-Plug :                T-PLUG *CodPlug* : *VarList*;

exemples : C-Plug n:n thru n+3; C-Plug 1:1; C-Plug 3:1,3,5,7; C-Plug 2:1 thru 7; C-Plug n:n thru n+3;
Futura : C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
;

3/ Connection :         Join *CodPlg1* To (*ClNam*,*CodPlg2*);
---------------

forme abrégée :         JOIN TO (*Cl/C-Plug*);
                        JOIN *CodPlg* to (*NamCl*,*NamPlg*);
                        JOIN *CodPlg* to (*NamCl*,);
                        JOIN *CodPlg* to (CPlug1),(CPlug2);
exemples :
JOIN 2 TO(Mesh-4,5);                        Futura : JOIN 2 TO(Mesh-4,Face-5);
JOIN 2 TO(Obj(3),2);                        Futura : JOIN 2 TO(Obj(3),Edge-2);
JOIN n TO(Mesh,);  :> (Mesh,1);             Futura :> (Mesh(i),PLUG-1)

JOIN 1 TO (Mesh(i)(Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
3s/ Création de T-Plug et connection contractée :
                       CONNECT TO (*1Cl/C-Plug*,*2Cl/C-Plug*) = CONNECT 1 TO(*1Cl/C-Plug*,*2Cl/C-Plug*)

                       CONNECT *VarList* TO (*CPlug*);

Type de T-Plug particulier :
                       T-PROBE *PlugNum*;
;

********************************************************************************
******** Connections directe de Transfert a Transfert **************************
**FUTURA************************************************************************
                                                       Zdl_html.dir/Connecting <
        Join *CodPlg1* To Tr (*TrName*,*CodPlg2*);

********************************************************************************
********* Déplacements dans la structure ***************************************
********* et modifications de la structure *************************************
********************************************************************************

Cette facilité est particulièrement appréciée lorsque que la structure de création d'objet
orientée par l'utilisation de Do loop Fortran ne satisfait pas à la structure d'emboitement
des familles choisies. La première structure est alors utilisée à la création en série des
objets (comme deux Do loop emboitées pour un maillage 2-D). Après création de la structure
d'arbre choisie, on déplace les objets de leur famille de création à celles où on veut
finalement les situer.

UNDER *FmNam* <   où *FmNam* est soit un nom d'objet accesible de la famille courante
                                 soit une adresse définie par SET,
                  définit cette famille comme la famille courante;

UNDER=*FmNam*<    même chose avec *FmNam* rangée dans une CHAR*n Fortran variable;

>;                fermant un bloc logique Under ...< , la famille courante redevient celle
                  précédent l'instruction Under ...<;


GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associé);
exemples : Get Mesh-4; Get Obj(3);

Déplacement d'objets dans la structure :
========================================
;
MOVE *NamObj* TO *NamObj*;

exemple :
Move PIECE-I To COL-J; PIECE-I (Cellule ou Famille) est rangee sous la famille COL-J;
;
Gel d'une cellule :
===================
Equivalente à Create N-Cl *NamCl*..., cette instruction gèle la cellule courante :
FREEZE *NamCl*;

exemple :
Get MESH-1; Freeze Mesh-1;

********************************************************************************
******** Directives pour la récupération des Résultats et **********************
******** le redémarrage d'un Run ***********************************************
********************************************************************************
                   $ZOOM/Help/Users/Zinit/ZDL/Zdl_html.dir/Results_Output <

********************************************************************************
******** Directives pour sorties listing ***************************************
********************************************************************************
********* Print Direct de la routine Zinit *************************************
********************************************************************************
(Futura, vendredi 30/01/1998) Les nouvelles macros Z_Pr: FTN_symbols;
     Z_Pr : Var_List;  Z_Pr/BlaBla/:...,le même avec commentaire;
     Z_Pad : idem, les memes avec sorties console;
     Z2_Pr : Var_List; sortie sur une seule ligne, pas de /blabla/ possible;
     attention pour les boucles Fortran implicites :
      Z2_PR : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_PR : a,b,c,(d(i),i=1,2); marche.

********************************************************************************
*****  Print_out,Paw_out et Zprint_out options *********************************
********************************************************************************

Cet ensemble d'instructions concerne la gestion des sorties gérées par Ker, d'une
part, et celles que gère chaque objet ou classe d'objets (processeur).
Le premier support est le "listing" ***_exe.run.lis (.lis);
le second constituant l'ensemble des fichiers binaires passés a VIZU (DAT et PAR) :
OZDAT.CL      Contiend les valeurs de Eta,dEta et dEta,dec
OZDAT.TR                              Fi,Omega,Delta
OZPAR.CL                              paramètres des cellules (cf PW bank et PDL)
OZPAR.TR                              paramètres des transferts (cf PW bank et PDL)
              à chaque pas de temps spécifié par Paw_out;

SUPPORT .lis
============
***Sorties gérées par Ker identifiées par le mot : Print;   (routines OPTAU et OPETA)

***Sorties gérées par les processeurs            : ZPrint;

DEFINITION DE LA FREQUENCE
==========================
print_out N times every M steps;
paw_out N times every M steps;
print_out once  every step;
print_out twice every M steps;
print_out every M steps;
paw_out once every M steps;
paw_out twice every M steps;
paw_out every step;

SUPPORT DAT et PAR (pour VIZU)
==============================
Elles sont entièrement gérées par Ker suivant les informations fournies par Zinit
et les processeurs;    identifiées par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a été programmé VIZU (ViZualisation Interface for Zoom User).

STRUCTURE GENERALE DES INSTRUCTIONS DE SELECTIONS DES OBJETS DONNANT LIEU A IMPRESSION
======================================================================================
Les instructions fonctionnent selon trois règles :

1/ on fixe les valeurs par défaut en tête de ZINIT
2/ on spécifie une commande hors défaut par objet (Cellule ou Transfert) si nécessaire
3/ si on préfère globaliser ces instructions par famille, on peut le faire lorsque
   l'arbre ZOOM a été instancié,cad après le CALL OFRAME;
Enfin, la fréquence des sorties est gérée par les instructions
 "print_out" pour .lis; "paw_out" pour DAT et PAR;
Rq : la fréquence fixée par Print_out est appliquée aux processeurs en donnant à cette fréquence
la valeur .TRUE. a Zprint(LCL) ou ZPRINT(LTR);

1/ DEFAUTS
Zprint_options:
   Default=none Cl,none Tr,none Fm;
![ equivalent a Zprint_options: Default=none; ]
Print_options:
   Default=none;

L absence totale de ces options équivaut a une sortie complète de tous les objets de l'arbre, cad à :
Zprint_options:
   Default=all Cl,all Tr,all Fm;
[ équivalent à Zprint_options: Default=all; ]
Print_options:
   Default=all;

2/ POUR CHAQUE OBJET  CREE
L'instruction :    ZPrint_Tr; ou    ZPrint_Cl; précise au processeur concerné que le dernier objet
Tr ou Cl crée sera a imprimer.
De même pour Print_Cl ou _Tr par Ker;
A l'inverse :
Print_not_Cl; et : Zprint_not_Tr; suppriment un éventuel défaut requérant l'impression;

3/ GLOBALISATION DES DIRECTIVES :

à la fin de ZINIT, après l'instruction qui instancie l'arbre ZOOM :
CALL OFRAME  ;

!  FM referenced output options. EXEMPLES :
sorties de KER :
Print top Cl of Fm: U;                 Eta,Gamma dEta des Cellules immédiatements sous Fm : U;
Print all Cl of Fm: U;                                des Cellules des familles U et sous U jusqu'en bas
Print all Tr of FM : PIEC-1;           Fi,DElta et Omega des Tranferts du sous-arbre des familles de
                                       racine la Fm : PIEC-1;
Print all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


Zprint all Cl of Fm: PIEC-1;           les processeurs traitant les Cl du sous arbre précédent doivent imprimer.
Zprint all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


COMPLEMENTS
===========
*/ Pour la programmation des processeurs :
------------------------------------------
Instructions héritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;

*/ Fixation d'un niveau d'impression pour les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1] commun à tous les processeurs)

Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >

                         cf     $ZOOM/Help/Users/Combined_Facilities/Print_levels  <
On impose donc le même niveau d'impressions pour tous les processeurs. Pour varier d'un processeur
à l'autre, il faudra en passer par la déclaration d'une variable dédiée des Description Banks;
(ker gère le général, chaque processeur le particulier ...)

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus égales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot.

2/PAR OBJET (ici des Familles)
Zprint_fm;               sortie du scatter plot de la dernière Famille créée.
Zprint_not_Fm;        supprime  la sortie par défaut éventuelle.

3/APRES OFRAME
Zprint top Mx of Fm : PIEC-1;    / sortie des matrices si OZPLVL(4).ge.2 et [soit print fm, soit sa depth.lt.MXDEEP]
Zprint all Mx of Fm : TROM;      \ sinon, scatter plot seulement

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
à la racine susdite [ici TROM].

*/ Gestion particulière aux calculs correspondants à la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces détails d'impressions dans :
                                $ZOOM/Help/Programmers/Ker/D_Loop <

Note : pour les détails concernant le tableau OZPlvl cf :
                               $ZOOM/Help/Users/Combined_Facilities/Print_levels  <

**************************************************************************
*************************** RESUME FROM **********************************
**************************************************************************

  Il s'agit de la reprise d un run par initialisation à partir d un fichier
de sorties d'un run précédant (qui aura évntuellement pu être tué, cad que la fin du fichier peut être
aléatoire)
  L'initialisation ne sera faite qu'à partir des états des Cellules non gelées;
pour ces dernières, la valeurs du Zinit sera donc retenue (Fill_Eta<;>).

RESUME FROM OZDAT.CL1;  noms de fichiers autorisés de type OZDAT.CLX (1 seul caractère X)
 ker se positionne au dernier step du fichier, initialise les Eta et lance le calcul.

RESUME FROM OZDAT.CL1, at IT;  pareil, mais positionne au ITième step;

RESUME FROM OZDAT.CL; 
 ker se positionne au dernier step du fichier, initialise les Eta, se positionne
 au même step pour OZDAT.TR et les deux OZPAR.XX et lance le calcul; il va donc 
 accroitre ces quatre fichiers des nouvelles sorties.

RESUME FROM OZDAT.CL1/OZDAT.TR1; non content d'initialiser les Eta, ker va reprendre
la valeur des Fi (Fiz) du même step - ici le dernier - nons gelés, et retiend la
valeur du Zinit pour ces derniers. Ce type de Resume from prend son intérêt lorsque la D_loop
est coûteuse ou lors de la présence de Pseudo_Cell Tr, qui requièrent - telles des cellules - une
initialisation (cf les manuels des Processeurs)

********************************************************************************
******** Directives pour sorties VIZU **** Les Maps ****************************
********************************************************************************

Lorsque des objets Cellule ou Transfert ont entre eux une relation géométrique,
comme dans le cas d'un maillage, on peut associer chacun d'entre eux à un noeud d'une
grille 1 ou 2D, dénommée "map";
On respecte cependant la dichotomie Cl/Tr : soit ClMap, soit TrMap, pas de mélange.
La définition d'un map aura pour conséquence son apparition dans l'arbre VIZU
et le tracé automatique de surfaces. Concrètement, les valeurs tracées - associées
à chaque point de la grille, seront Fi,dFi,Omega ou des paramètres définis dans
le processeur pour les Tr, Eta, dEta, dEta,dec ou paramètre pour les Cl.
On peut associer à chaque point, soit l'objet complet - et alors les valeurs
formant la surface correspondront aux mêmes composantes du vecteur choisi pour
tous les objets
soit (objet,composante) - et alors le profil pourra relier des valeurs de ces composantes
diverses (à une translation près définie dans VIZU).

Cette définition se fait en deux temps :

1) définition de la grille
++++++++++++++++++++++++++
DEFINE MAP CL01 ,                      "ClMap de nom CL01 a CL99"
TITLE= Profil de Grouchot-Langevin,    "titre de 60 carateres maxi"
DIM=1,                                 " Dimension 1 ou 2, profil ou surface"
XLEN=100;                                "nombres de points de grille en X"

DEFINE MAP TR01,
TITLE= mon transfert prefere,
DIM=2,
XLEN=12,
YLEN=27;                                "nombres de points de grille en Y"

DEFINE MAP TR02,TITLE=BlaBla,DIM=3,XLEN=10,YLEN=20,ZLEN=10; "non implémenté"

2) Association point de grille / Objet
++++++++++++++++++++++++++++++++++++++
Du fait de l'absence de nom aux Transferts, oon distingue
pour les CL0I maps :
Z_OUT CL01(I)=*NamCl*;          1D Map, associant une cellule au point I;
Z_OUT CL03(I,J)=*NamCl*         2D Map, associant une cellule au point I,J;
Z_OUT CL04(I)=*NamCl*,K;        1D Map, associant la composante K de Cl au point I;
Z_OUT CL05(I,J)=*NamCl*,K;      2D Map, associant la composante K de Cl au point I,J;
;
pour les TR0I maps :
(Imperativement a la creation du Tr);
Z_OUT TR02(I);                  1D Map, associant le Transfert courant au point I;
Z_OUT TR01(I,J);                2D Map, associant le Transfert courant au point I,J;
Z_OUT TR03(I),K;                1D Map, asssociant la composante K du Tr au point I;
Z_OUT TR04(I,J),K;              1D Map, asssociant la composante K du Tr au point I,J;
;
Rq : cette information est rangée par Ker dans le fichier binaire OZOUT.MP;
;
 informations complémentaires dans VIZU manuels;
3) Maillage variable
++++++++++++++++++++
La version Futura (Dev de Oct 97) authorise le maillage variable en une ou deux dimensions;
cela ne concerne pas du tout la description des Map précédente qui ne contiend aucune
information géométrique, mais conduit à une certaine transformation des sorties DANS Vizu.
Mais Vizu utilisant des fichiers qui trouvent leur origine dans ZINIT, pour info Maillage
variable, cf : > $ZOOM/Help/Users/Graphics_and_post_treatment/Maps 

********************************************************************************
***** TITRES et INFORMATIONS ASSOCIEES A UN RUN ********************************
********************************************************************************

On donne un titre général aux sorties graphiques post-traitées par
l'instruction U_Title :

U_TITLE Mon Titre, O bel exercice que ton Rayleigh est grand;

Il est possible de récupérer les infos générales d'un run dans
les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 caraterès de titre intitialisé à  ORNAME  ORVERS  OZINDA  OZINTI 


exemple

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple
...
+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;


********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********* Initialisation et attribution de valeurs aux Paramètres **************
********************************************************************************
                                              Zdl_html.dir/Model_Instanciation <

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remplissage des variables ( Eta ou Fi )
=======================================

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"


     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"


     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >

********************************************************************************
******** Autres Instructions utiles ********************************************
********************************************************************************

DIMENSION:N,M; comble imparfaitement l'absence de possibilite de decliner des noms
d'objets avec deux integer, comme MESH-(I,J);
Dimension, instruction SEQUENCIELLE remplacera l'occurence de MESH-(I,J) par
MESH-(I+(J-1)*N); ce qui fait que l'information (I,J) ne se retrouvera pas dans
le .lis ni dans ViZu.

Execute Procedure;
DO ((J=1,NL),I=1,NC)
"             num.max.de liaisons=JZSIG=9 (4 PSI+4 VORTX+RADI)"
< CREATE CL MESH-(I:J),TYPE=VORTX 9; "Entry IVORTX"
    C-PLUG 1:1,2,3,4; C-PLUG 2:1 thru 4;
    SET MESH(I:J) = MESH-(I:J);
   Tinit=T_infini; Execute MESH_Fill;
    Z_OUT CL01(I,J)=MESH-(I:J); " Mapping"
   IF J.eq.NL/2 .and. I.eq.nc/2 < ZPrint_CL; >;
>
.......
PROCEDURE MESH_Fill
<  Fill_Eta < [2] = Tinit ; [3] = RO_AIR; [4] = RO_AIR; >
   flat = 0.;
   Fill_CD
   < [Air_Eau]:i    = 1;  "Air"
     [lat_itude]:r  = rlat;
     [long_itude]:r = delta_long*float(I);
     [f_lat]:r      = flat;
     [Nb_faces]:i   = 4;   "Carres"
     [t_side]:r     = DX;  " should .eq. DY"
     [Lo_up]:i      = Lo_up;
     [delta_z]:r    = DZ;
     [D_centre]:r   = DX/2.;
     [Ro_fluid]:r   = Ro_air;
     [frozen(4)]:i  = 1; "Cancel Temp. dependant parameters computation"
     [gy_Archimede]:r=0.;
     [Cp_fluid]:r   = Cp;
     [G_cond(1)]:r  = viscosite;
     [G_cond(2)]:r  = conduct/Cp;
     [G_cond(3)]:r  = .1*conduct;  "Salinity diffusion"
   >
>
;


***************************************************************************
********** Complément pour les Matrices  **********************************
***************************************************************************

En cas d'occurence d'une D_loop (cf TEF manuel), il faut fournir au noyeau (ker)
de quoi gérer le critère de convergence.

  Deux critères sont actuellement implémentés:                              ******** en bref ********
  ============================================                              *  Standard: TOLQUAD    *
                                                                            *        ou             *
> Un critère standard, où : SOMME{ (Fi-Fiz)^2} sur les D_flagged Transfers  * User: TOL_US et OPLUS *
est comparée à TOLQUA*NTR (Tolérance quadratique, Nombre de D_Tr), avec     *************************
la possibilité de fixer TOLQUAD dans Zinit (Valeur par défaut = 1.E-10).

> Un critère comparant DEVUS à TOL_US (Tolerance User) :
à la sortie de chaque appel à un D_flagged Tr, on accumule le contenu de OPLUS
dans DEVUS. C'est donc chaque processeur concerné qui calcule OPLUS - remis à zéro
par ker avant l'appel au processeur.
DEVUS est comparé a TOL_US (à fixer dans ZINIT).

> Le plus sévère des deux critères arrête les itérations. Donc, pour privilégier
le critère utilisateur, il faut donner à TOLQUAD une grande valeur.

On peut cependant limiter le nombre d'itération, pour éviter les boucles infinies
de non convergence par :

  Nombre d'itérations:
  ====================

> NITMAX fixe le nombre maximum d'itérations

> on peut aussi en imposer un nombre minimum en donnant à NITMIN une valeur
non négative (défaut=-1).
Pour des raisons historiques, NITMIN=0 entraine au moins une itération, 1 au moins 2, etc.
 
MATRICES ET VIZU
================
Vizu donnant accès aux matrices sous Zeus, un fichier - actuellement en ASCII -
MXMX contiend les sorties (évidemment en phase avec les DAT)
On peut exiger la sortie des mêmes coefficients, mais dès la fin de la D_Loop,
(donc sans les CtA_1B) en ajoutant 100 au contenu de OZPlvl(6) :
ker crééra alors MDMX en plus de MXMX. Pour y avoir accès dans VIZU, il faudra
cependant jouer avec des softs links pour qu'elle apparaisse sous le nom MXMX. 
                         cf     $ZOOM/Help/Users/Combined_Facilities/Print_levels  <
Attention, MDMX possède des coefficients associés aux K-Transferts non significatifs.
*********

***************************************************************************
********** Utilisation du point d'entree ZSTEER ***************************
***************************************************************************

===========================================
Gestion du pas de temps de calcul           
===========================================
dTime= .1;"s"  en tête de Zinit initialise l'incrément temporel;
On peut le modifier dans ZSTEER (cf Borelienne)
Le calcul s'arrête quand on atteind TimaX (Zinit).
 On peut préférer le gérer soi même dans ZSTEER :
  if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "s'arrêtera en fin du step qui démarre"
On peut de la même manière gérer les fréquences de sorties sans tenir
compte des" Print/Paw every M steps" - on gère alors les Logical variable suivantes :

ZPAW déclenche une sortie des DAT/PAR
ZPRINT déclenche pour .lis (ker et les processeurs)
ZENDRN arrêtera le run à la fin du pas qui démarre.

===========================================
****** Fu t u r a *************************
===========================================
Un tableau commun aux processeurs et a Zinit a ete defini:
 Time_char(4),
avec  EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr),
qui fournit diverses possibilites pour optimiser la gestion de dTime; un exemple valant mieux
qu'un long manuel, le voici.

Exemple d'utilisation dans un exemple conducto-convectif
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
 rNu = Viscosite/Ro_Air;
 Alpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
 Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
 Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
 Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init defaults
 Time_char(1)=99999.; Time_char(2)=99999.;
;
puis, dans le ZSTEER, on recupere les valeurs definies dans un ou plusieurs
processeurs.
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;
! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
!!!! il a suffit de gerer dans un processeur judicieusement choisi
!!!! les deux premiers Time_char :
!!!! Zsteer info for steering dTime
!!!! DO i=1,2
!!!! < if (abs(VIS_uv(i)) .gt. 1.E-06) then;
!!!!     Time_char(i)
!!!!        = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
!!!!   endif;
!!!! >;
;
On obtiend un critère en Courant (cad assez rapidement).

===========================================
Analyse Borelienne des Matrices de couplage
===========================================

L'exemple suivant montre comment sortir une matrice de couplage à un instant
donné, mais en faisant varier le pas de temps - ce qui correspond à une
analyse du Système Linéaire Tangent en transformée de Borel
Contexte : un premier run sert de référence, et on fait un RESUME FROM sur
un OZDAT.CL1, at IT; le pas de temps considéré; dans ZSTEER (fin du ZINIT) :

ENTRY ZSTEER;
!
    if (istep.ge.NbItMx)    "on a fixe le nombre de pas dans la variable NbItMx"
    < ZENDRN =.true.; >     "le run s'arrêtera à la fin du pas courant"
    call ORESUME(LZ);       "on repositionne le fichier de reéférence au même step"
    dtime = dtime*2.        "cf Borel manuel"
    time = dtime ;   " Ceci permet d'avoir dans viZu la variation des coefs(dtime)"
    ZPAW = .true. ;         " pour transmettre à ViZu ce step"
;
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="
;
                                                     cf Zdl_html.dir/ZSteer_Entry <

********************************************************************************
******** Parametres du Run *****************************************************
********************************************************************************
TYPES de fonctionnement Stationnaire ou Dynamique;
La variable logique STEADY permet á ker de fonctionner en mode recherche d'une
solution stationnaire, en supposant bien sùr que la totalité des processeurs
utilisés sache alors quoi faire ...

Gestion de l'incrément. Arrêt. dtime; timax; cf ZSTEER

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl.html.bak
********************************************************************************
********************************************************************************
******* Dictionnaire des instructions du ZOOM DESIGN LANGUAGE ******************
********************************************************************************
********************************* (mise à jour le vendredi 30/01/1998 Al1) *****
****** Futura feature : tout ce qui concerne *TrName* (Al1, mercredi 05/08/1998)
********************************************************************************

Cette entrée du manuel ZDL est celle de /zoom/Help/Users/Zinit/ZDL/Zdl.html;
Pour chaque groupe d'instructions, on trouvera un complément soit sous forme
hypertexte dans le fichier réferencé dans  Zdl_html.dir/XXX < et repéré par ce signe "<",
soit en annexe du texte imprimé.

********************************************************************************
******** Préliminaires pour faciliter l'utilisation du dictionnaire ***********
********************************************************************************

Le ZDL est un language programmable et permet l'utilisation des instructions Fortran ou
Mortran de base.
L'interprétation de Zinit donnera une Subroutine ZINIT avec un point d'entrée ZSTEER.
La subroutine est appellée une seule fois en tout début du Run. ZSTEER est appelé
à chaque nouvel incrément (temporel en dynamique ou itération en stationnaire).

Remarque : la notion de language interprèté génèrant une routine éxécutable peut mener
à des difficultés de compréhension des contingences d'écriture; en cas d'ambiguité, nous
préciserons dans le texte les notions : d'avant - après, en les qualifiant de :
 - séquencielles : il s'agit alors d'ordre des instructions elles-mêmes dans le corps du Zinit;
 - a l'éxécution : il s'agit alors de l'ordre dans lequel vont être éxécutées les instructions;
La différence entre les deux étant d'autant plus grande que les instructions de déroutage
du Fortran seront nombreuses (programmation dite "spaghetti").
Notons au passage que de nombreuses instructions et blocs logiques Mortran permettent de structurer
le corps du programme (Do while, Until, Case, if then else etc).


Fonctions du Zinit :
====================

Il a pour premier but de créer la structure dite de l'Arbre ZOOM, qui est constituée
d'un emboîtement de FAMILLES ayant des objets terminaux dits CELLULES.
On remarquera qu'il s'agit de créer un programme créant une structure et non de
décrire de manière déclarative cette structure; cela permet en particulier une grande
souplesse, puisqu'on peut alors :
 - utiliser des boucles pour créer des structures répétitives, des emboitements, etc;
 - programmer sa modification apres création (cf MOVE, GET, FREEZE);
 - appeler des procédures de créations/instanciations communes à plusieurs objets;

Ensuite de relier les cellules à des TRANSFERTS (ou par des transferts : deux facons de dire 
et de faire mais une seule même structure créée).

Il doit - à chaque création de transfert ou cellule - associer un MODèLE à l'objet créé
(TYPE=); chaque instruction CREATE constitue donc une instanciation (d'un objet à partir
d'un modèle); il s'y associe donc l'attribution de valeurs numériques à certains
paramètres libres du modèle et, pour les cellules uniquement (de manière obligatoire)
une initilisation du vecteur d'état (fill_Eta).
Une partie plus subtile de l'instanciation concerne leur insertion dans une structure :
celle ci héritera des connections entre objets (C-PLUG T-PLUG, CONNECT, JOIN TO)

Enfin, une tâche (plus classique) est d'attribuer des valeurs aux paramètres du Run :
gestion de l'incrément temporel, des niveaux et fréquence de sauvegarde des résultats
de calculs, redémarrage de run etc.

Ecriture du Zinit :
===================

Deux types de blocs logiques sont utilisés dans ce language.
Le bloc standard de Mortran - emboîtable - <;>, associé aux instructions NEXT; et EXIT;
 il est ici mis a profit pour décrire la structure emboitée des cellules/familles.
=> celà donne un sens fort à la structure, puisqu'un bloc logique n'a d'existence que
SITUÉ dans la structure;
Un bloc implicite qui détermine une adresse courante dans la structure; tout attribut
sous forme de symbole Fi Eta [Paramètre] est attribué à l'objet courant de même
nature : famille, cellule ou transfert tant qu'une instruction n'en change;

instructions changeant l'objet courant :
----------------------------------------
under<                               change de Famille courante (celle sous laquelle seront
                                     placées les familles ou cellules suivantes);
     >;                              ferme le bloc logique préecédent et restore la famille
                                     courante séquenciellement précédente;
create CL, get *ClNam* ;             change de Cellule courante;
create TR, get Tr *TrName*;          change de Transfert courant;

Métasymboles utilisés :   *NamObj*   pour nom d'objet à choisir par l'utilisateur.
======================   {*Valeur*}  Valeur optionnelle.
                          " texte "  tout texte entre " " (symbole des commentaires Mortran)
                                     est hors ZDL.
                     |Instruction| : permet d'identifier une instruction dans un texte (ou un mot
                                     réservé du ZDL).
                          remarque : ces meta symboles ne seront utilisés que s'il y a ambiguité.

Vocabulaire :
=============
Bloc logique              : voir plus haut (<;>).
Position courante         : voir plus haut.
Instructions spécifiques  : certaines instructions qui ne peuvent être utilisées
                            que dans certains blocs logiques (cf Fill_CD<;);
Bank                      : nous conservons ce nom pour designer un bloc de données géré par ZEBRA,
                            pour eviter la confusion avec le Bloc au sens logique.

Liste des Métasymboles utilisés :
=================================
*NamFm*   : nom de Famille (Fm);
*NamCl*            Cellule (Cl);
*NamObj*  : Cl ou Fm;
*NamObj*  : se décompose en deux champs *Nam* - *Code* où *ClNam* est une suite d'au plus 5 Character
            Fortran et *Code* un integer Fortran; les deux champs etant séparés par la copule : - .

*AddObj*  : permet de creer une adresse universelle associee a un nom d'objet DANS l'arbre
            ( pour eviter d'y referer via son adresse complete : /z/u/*NamFm*/.../*NamObj*)
            Universels dans le sens où ils sont reconnus de n'importe quelle famille courante;
*NamTr*   : donne un nom au transfert courant, qui pourra etre ré-appelé, ou invoqué pour connection Tr à Tr;
*ChFTNVar*: Variable Character FTN (par defaut, Character*4)
*Code*    : integer ajoutant un numero a un symbole; (on utilise aussi *CodFm* et *CodCl*,*CodPlg* pour Futura);
*CPlug*   : *NamCl*,*NamPlug*  (un C-Plug est toujours associe au nom de sa cellule)
*NamPlug* : *CodPlg* (integer)
            Futura : *NamPlug* = *NamPlug* - *CodPlg* for C-Plugs only (comme donc *NamCl* et *NamFm*);
                     atention, Char*4 (au lieu des 5 possibles pour Cl et Fm);
*VarList* : une liste d'integers Fortran; syntaxe : (int1,int2,int3,etc)
            ou  (int1 thru int2) qui prend la suite des entiers naturels croissants de int1 a int2.

********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
                                                  Zdl_html.dir/Fm_Cell_Create <
;
Familles Obligatoires : CREATE ZEUS;
                        CREATE UNIVERSE;

Autres familles :       CREATE FM *NamFm* - *CodFm*;
                        CREATE FM *NamFm*; 
           Equivalent à CREATE FM *NamFm* - 0;

                        CREATE FM=*ChFTNVar* - *CodFm*;

Cellules :              CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;

Complément :            CREATE N-CL ...
                        FREEZE *NamCl* - *CodCl*;

                        SET FM TYPE:T; Instruction obligatoire et inutile, qui prétend
declarer que la famille courante est de type Transfer, et donc que l'on y éliminera les
variables d'état - ce qui est exact. L'instruction duale Set Fm Type:S, devrait alors
conduire a l'élimination des variables de transfert (non implémenté);



********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
                                                  Zdl_html.dir/Transfer_Create <

Naturelle :             CREATE TR,TYPE=*TrProc* 1,-9,-9;

 et gelée :             CREATE N-TR,TYPE=*TrProc*;

Imposée   :             CREATE-F TR
                        CREATE-F+ TR
                        CREATE-Z TR
                        CREATE-U TR

 et gelée :             CREATE-Z N-TR,TYPE=*TrProc*;

********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************
                                                   Zdl_html.dir/Object_Address <


                        SET *AddObj* = *ObjetDéjàCréé* ;
                        SET *AddObj*(*Indice*) = *NamObj*;
                        SET *AddObj* == *ChFTNVar*;
                 *ChFTNVar* est une variable Fortran CHARACTER*N contenant le *NamObj*;

On peut séquentiellement ré-affecter ces symboles universels :

                        RESET *AddObj* = *NouvelObjet* ;



exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
Set Obj(3) = Mur-4;
(on les récupèrent par Get MaCl; etc)

********************************************************************************
********* Marque de Transferts (en particulier pour connection Tr à Tr) ********
**FUTURA************************************************************************
                                                      Zdl_html.dir/Tr_to_Tr_Cx <


                        Name Tr as : *NamTr* ;
                        Name Tr as : *NamTr*(*Indice*) ;

Ces noms sont des symboles des mêmes Table que pour SET; il faut donc affecter
des symboles tous différents.

exemples :
..........
Name Tr as Heat(1); Name Tr as Conv;  Exemples de /exos/hamb/zinit
(on les récupèrent par Get Tr Heat(1); etc)


********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
                                                       Zdl_html.dir/Connecting <
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2ème temps   : création d'un T-Plug sur un transfert;
3ème temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

1&2/ Création :
---------------

C-Plug :                C-PLUG *CodPlg* : *VarList*;
            (Futura :)  C-PLUG *NamPlg*-*CodPlg* : *VarList*; (Default is *NamPlg* :=PLUG)

T-Plug :                T-PLUG *CodPlug* : *VarList*;

exemples : C-Plug n:n thru n+3; C-Plug 1:1; C-Plug 3:1,3,5,7; C-Plug 2:1 thru 7; C-Plug n:n thru n+3;
Futura : C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
;

3/ Connection :         Join *CodPlg1* To (*ClNam*,*CodPlg2*);
---------------

forme abrégée :         JOIN TO (*Cl/C-Plug*);
                        JOIN *CodPlg* to (*NamCl*,*NamPlg*);
                        JOIN *CodPlg* to (*NamCl*,);
                        JOIN *CodPlg* to (CPlug1),(CPlug2);
exemples :
JOIN 2 TO(Mesh-4,5);                        Futura : JOIN 2 TO(Mesh-4,Face-5);
JOIN 2 TO(Obj(3),2);                        Futura : JOIN 2 TO(Obj(3),Edge-2);
JOIN n TO(Mesh,);  :> (Mesh,1);             Futura :> (Mesh(i),PLUG-1)

JOIN 1 TO (Mesh(i)(Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
3s/ Création de T-Plug et connection contractée :
                       CONNECT TO (*1Cl/C-Plug*,*2Cl/C-Plug*) = CONNECT 1 TO(*1Cl/C-Plug*,*2Cl/C-Plug*)

                       CONNECT *VarList* TO (*CPlug*);

Type de T-Plug particulier :
                       T-PROBE *PlugNum*;
;

********************************************************************************
******** Connections directe de Transfert a Transfert **************************
**FUTURA************************************************************************
                                                       Zdl_html.dir/Connecting <
        Join *CodPlg1* To Tr (*TrName*,*CodPlg2*);

********************************************************************************
********* Déplacements dans la structure ***************************************
********* et modifications de la structure *************************************
********************************************************************************

Cette facilité est particulièrement appréciée lorsque que la structure de création d'objet
orientée par l'utilisation de Do loop Fortran ne satisfait pas à la structure d'emboitement
des familles choisies. La première structure est alors utilisée à la création en série des
objets (comme deux Do loop emboitées pour un maillage 2-D). Après création de la structure
d'arbre choisie, on déplace les objets de leur famille de création à celles où on veut
finalement les situer.

UNDER *FmNam* <   où *FmNam* est soit un nom d'objet accesible de la famille courante
                                 soit une adresse définie par SET,
                  définit cette famille comme la famille courante;

UNDER=*FmNam*<    même chose avec *FmNam* rangée dans une CHAR*n Fortran variable;

>;                fermant un bloc logique Under ...< , la famille courante redevient celle
                  précédent l'instruction Under ...<;


GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associé);
exemples : Get Mesh-4; Get Obj(3);

Déplacement d'objets dans la structure :
========================================
;
MOVE *NamObj* TO *NamObj*;

exemple :
Move PIECE-I To COL-J; PIECE-I (Cellule ou Famille) est rangee sous la famille COL-J;
;
Gel d'une cellule :
===================
Equivalente à Create N-Cl *NamCl*..., cette instruction gèle la cellule courante :
FREEZE *NamCl*;

exemple :
Get MESH-1; Freeze Mesh-1;

********************************************************************************
******** Directives pour la récupération des Résultats et **********************
******** le redémarrage d'un Run ***********************************************
********************************************************************************
                   /zoom/Help/Users/Zinit/ZDL/Zdl_html.dir/Results_Output <

********************************************************************************
******** Directives pour sorties listing ***************************************
********************************************************************************
********* Print Direct de la routine Zinit *************************************
********************************************************************************
(Futura, vendredi 30/01/1998) Les nouvelles macros Z_Pr: FTN_symbols;
     Z_Pr : Var_List;  Z_Pr/BlaBla/:...,le même avec commentaire;
     Z_Pad : idem, les memes avec sorties console;
     Z2_Pr : Var_List; sortie sur une seule ligne, pas de /blabla/ possible;
     attention pour les boucles Fortran implicites :
      Z2_PR : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_PR : a,b,c,(d(i),i=1,2); marche.

********************************************************************************
*****  Print_out,Paw_out et Zprint_out options *********************************
********************************************************************************

Cet ensemble d'instructions concerne la gestion des sorties gérées par Ker, d'une
part, et celles que gère chaque objet ou classe d'objets (processeur).
Le premier support est le "listing" ***_exe.run.lis (.lis);
le second constituant l'ensemble des fichiers binaires passés a VIZU (DAT et PAR) :
OZDAT.CL      Contiend les valeurs de Eta,dEta et dEta,dec
OZDAT.TR                              Fi,Omega,Delta
OZPAR.CL                              paramètres des cellules (cf PW bank et PDL)
OZPAR.TR                              paramètres des transferts (cf PW bank et PDL)
              à chaque pas de temps spécifié par Paw_out;

SUPPORT .lis
============
***Sorties gérées par Ker identifiées par le mot : Print;   (routines OPTAU et OPETA)

***Sorties gérées par les processeurs            : ZPrint;

DEFINITION DE LA FREQUENCE
==========================
print_out N times every M steps;
paw_out N times every M steps;
print_out once  every step;
print_out twice every M steps;
print_out every M steps;
paw_out once every M steps;
paw_out twice every M steps;
paw_out every step;

SUPPORT DAT et PAR (pour VIZU)
==============================
Elles sont entièrement gérées par Ker suivant les informations fournies par Zinit
et les processeurs;    identifiées par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a été programmé VIZU (ViZualisation Interface for Zoom User).

STRUCTURE GENERALE DES INSTRUCTIONS DE SELECTIONS DES OBJETS DONNANT LIEU A IMPRESSION
======================================================================================
Les instructions fonctionnent selon trois règles :

1/ on fixe les valeurs par défaut en tête de ZINIT
2/ on spécifie une commande hors défaut par objet (Cellule ou Transfert) si nécessaire
3/ si on préfère globaliser ces instructions par famille, on peut le faire lorsque
   l'arbre ZOOM a été instancié,cad après le CALL OFRAME;
Enfin, la fréquence des sorties est gérée par les instructions
 "print_out" pour .lis; "paw_out" pour DAT et PAR;
Rq : la fréquence fixée par Print_out est appliquée aux processeurs en donnant à cette fréquence
la valeur .TRUE. a Zprint(LCL) ou ZPRINT(LTR);

1/ DEFAUTS
Zprint_options:
   Default=none Cl,none Tr,none Fm;
![ equivalent a Zprint_options: Default=none; ]
Print_options:
   Default=none;

L absence totale de ces options équivaut a une sortie complète de tous les objets de l'arbre, cad à :
Zprint_options:
   Default=all Cl,all Tr,all Fm;
[ équivalent à Zprint_options: Default=all; ]
Print_options:
   Default=all;

2/ POUR CHAQUE OBJET  CREE
L'instruction :    ZPrint_Tr; ou    ZPrint_Cl; précise au processeur concerné que le dernier objet
Tr ou Cl crée sera a imprimer.
De même pour Print_Cl ou _Tr par Ker;
A l'inverse :
Print_not_Cl; et : Zprint_not_Tr; suppriment un éventuel défaut requérant l'impression;

3/ GLOBALISATION DES DIRECTIVES :

à la fin de ZINIT, après l'instruction qui instancie l'arbre ZOOM :
CALL OFRAME  ;

!  FM referenced output options. EXEMPLES :
sorties de KER :
Print top Cl of Fm: U;                 Eta,Gamma dEta des Cellules immédiatements sous Fm : U;
Print all Cl of Fm: U;                                des Cellules des familles U et sous U jusqu'en bas
Print all Tr of FM : PIEC-1;           Fi,DElta et Omega des Tranferts du sous-arbre des familles de
                                       racine la Fm : PIEC-1;
Print all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


Zprint all Cl of Fm: PIEC-1;           les processeurs traitant les Cl du sous arbre précédent doivent imprimer.
Zprint all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


COMPLEMENTS
===========
*/ Pour la programmation des processeurs :
------------------------------------------
Instructions héritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;

*/ Fixation d'un niveau d'impression pour les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1] commun à tous les processeurs)

Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >

                         cf     /zoom/Help/Users/Combined_Facilities/Print_levels  <
On impose donc le même niveau d'impressions pour tous les processeurs. Pour varier d'un processeur
à l'autre, il faudra en passer par la déclaration d'une variable dédiée des Description Banks;
(ker gère le général, chaque processeur le particulier ...)

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus égales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot.

2/PAR OBJET (ici des Familles)
Zprint_fm;               sortie du scatter plot de la dernière Famille créée.
Zprint_not_Fm;        supprime  la sortie par défaut éventuelle.

3/APRES OFRAME
Zprint top Mx of Fm : PIEC-1;    / sortie des matrices si OZPLVL(4).ge.2 et [soit print fm, soit sa depth.lt.MXDEEP]
Zprint all Mx of Fm : TROM;      \ sinon, scatter plot seulement

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
à la racine susdite [ici TROM].

*/ Gestion particulière aux calculs correspondants à la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces détails d'impressions dans :
                                /zoom/Help/Programmers/Ker/D_Loop <

Note : pour les détails concernant le tableau OZPlvl cf :
                               /zoom/Help/Users/Combined_Facilities/Print_levels  <

**************************************************************************
*************************** RESUME FROM **********************************
**************************************************************************

  Il s'agit de la reprise d un run par initialisation à partir d un fichier
de sorties d'un run précédant (qui aura évntuellement pu être tué, cad que la fin du fichier peut être
aléatoire)
  L'initialisation ne sera faite qu'à partir des états des Cellules non gelées;
pour ces dernières, la valeurs du Zinit sera donc retenue (Fill_Eta<;>).

RESUME FROM OZDAT.CL1;  noms de fichiers autorisés de type OZDAT.CLX (1 seul caractère X)
 ker se positionne au dernier step du fichier, initialise les Eta et lance le calcul.

RESUME FROM OZDAT.CL1, at IT;  pareil, mais positionne au ITième step;

RESUME FROM OZDAT.CL; 
 ker se positionne au dernier step du fichier, initialise les Eta, se positionne
 au même step pour OZDAT.TR et les deux OZPAR.XX et lance le calcul; il va donc 
 accroitre ces quatre fichiers des nouvelles sorties.

RESUME FROM OZDAT.CL1/OZDAT.TR1; non content d'initialiser les Eta, ker va reprendre
la valeur des Fi (Fiz) du même step - ici le dernier - nons gelés, et retiend la
valeur du Zinit pour ces derniers. Ce type de Resume from prend son intérêt lorsque la D_loop
est coûteuse ou lors de la présence de Pseudo_Cell Tr, qui requièrent - telles des cellules - une
initialisation (cf les manuels des Processeurs)

********************************************************************************
******** Directives pour sorties VIZU **** Les Maps ****************************
********************************************************************************

Lorsque des objets Cellule ou Transfert ont entre eux une relation géométrique,
comme dans le cas d'un maillage, on peut associer chacun d'entre eux à un noeud d'une
grille 1 ou 2D, dénommée "map";
On respecte cependant la dichotomie Cl/Tr : soit ClMap, soit TrMap, pas de mélange.
La définition d'un map aura pour conséquence son apparition dans l'arbre VIZU
et le tracé automatique de surfaces. Concrètement, les valeurs tracées - associées
à chaque point de la grille, seront Fi,dFi,Omega ou des paramètres définis dans
le processeur pour les Tr, Eta, dEta, dEta,dec ou paramètre pour les Cl.
On peut associer à chaque point, soit l'objet complet - et alors les valeurs
formant la surface correspondront aux mêmes composantes du vecteur choisi pour
tous les objets
soit (objet,composante) - et alors le profil pourra relier des valeurs de ces composantes
diverses (à une translation près définie dans VIZU).

Cette définition se fait en deux temps :

1) définition de la grille
++++++++++++++++++++++++++
DEFINE MAP CL01 ,                      "ClMap de nom CL01 a CL99"
TITLE= Profil de Grouchot-Langevin,    "titre de 60 carateres maxi"
DIM=1,                                 " Dimension 1 ou 2, profil ou surface"
XLEN=100;                                "nombres de points de grille en X"

DEFINE MAP TR01,
TITLE= mon transfert prefere,
DIM=2,
XLEN=12,
YLEN=27;                                "nombres de points de grille en Y"

DEFINE MAP TR02,TITLE=BlaBla,DIM=3,XLEN=10,YLEN=20,ZLEN=10; "non implémenté"

2) Association point de grille / Objet
++++++++++++++++++++++++++++++++++++++
Du fait de l'absence de nom aux Transferts, oon distingue
pour les CL0I maps :
Z_OUT CL01(I)=*NamCl*;          1D Map, associant une cellule au point I;
Z_OUT CL03(I,J)=*NamCl*         2D Map, associant une cellule au point I,J;
Z_OUT CL04(I)=*NamCl*,K;        1D Map, associant la composante K de Cl au point I;
Z_OUT CL05(I,J)=*NamCl*,K;      2D Map, associant la composante K de Cl au point I,J;
;
pour les TR0I maps :
(Imperativement a la creation du Tr);
Z_OUT TR02(I);                  1D Map, associant le Transfert courant au point I;
Z_OUT TR01(I,J);                2D Map, associant le Transfert courant au point I,J;
Z_OUT TR03(I),K;                1D Map, asssociant la composante K du Tr au point I;
Z_OUT TR04(I,J),K;              1D Map, asssociant la composante K du Tr au point I,J;
;
Rq : cette information est rangée par Ker dans le fichier binaire OZOUT.MP;
;
 informations complémentaires dans VIZU manuels;
3) Maillage variable
++++++++++++++++++++
La version Futura (Dev de Oct 97) authorise le maillage variable en une ou deux dimensions;
cela ne concerne pas du tout la description des Map précédente qui ne contiend aucune
information géométrique, mais conduit à une certaine transformation des sorties DANS Vizu.
Mais Vizu utilisant des fichiers qui trouvent leur origine dans ZINIT, pour info Maillage
variable, cf : > /zoom/Help/Users/Graphics_and_post_treatment/Maps 

********************************************************************************
***** TITRES et INFORMATIONS ASSOCIEES A UN RUN ********************************
********************************************************************************

On donne un titre général aux sorties graphiques post-traitées par
l'instruction U_Title :

U_TITLE Mon Titre, O bel exercice que ton Rayleigh est grand;

Il est possible de récupérer les infos générales d'un run dans
les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 caraterès de titre intitialisé à  ORNAME  ORVERS  OZINDA  OZINTI 


exemple

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple
...
+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;


********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********* Initialisation et attribution de valeurs aux Paramètres **************
********************************************************************************
                                              Zdl_html.dir/Model_Instanciation <

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remplissage des variables ( Eta ou Fi )
=======================================

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"


     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"


     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >

********************************************************************************
******** Autres Instructions utiles ********************************************
********************************************************************************

DIMENSION:N,M; comble imparfaitement l'absence de possibilite de decliner des noms
d'objets avec deux integer, comme MESH-(I,J);
Dimension, instruction SEQUENCIELLE remplacera l'occurence de MESH-(I,J) par
MESH-(I+(J-1)*N); ce qui fait que l'information (I,J) ne se retrouvera pas dans
le .lis ni dans ViZu.

Execute Procedure;
DO ((J=1,NL),I=1,NC)
"             num.max.de liaisons=JZSIG=9 (4 PSI+4 VORTX+RADI)"
< CREATE CL MESH-(I:J),TYPE=VORTX 9; "Entry IVORTX"
    C-PLUG 1:1,2,3,4; C-PLUG 2:1 thru 4;
    SET MESH(I:J) = MESH-(I:J);
   Tinit=T_infini; Execute MESH_Fill;
    Z_OUT CL01(I,J)=MESH-(I:J); " Mapping"
   IF J.eq.NL/2 .and. I.eq.nc/2 < ZPrint_CL; >;
>
.......
PROCEDURE MESH_Fill
<  Fill_Eta < [2] = Tinit ; [3] = RO_AIR; [4] = RO_AIR; >
   flat = 0.;
   Fill_CD
   < [Air_Eau]:i    = 1;  "Air"
     [lat_itude]:r  = rlat;
     [long_itude]:r = delta_long*float(I);
     [f_lat]:r      = flat;
     [Nb_faces]:i   = 4;   "Carres"
     [t_side]:r     = DX;  " should .eq. DY"
     [Lo_up]:i      = Lo_up;
     [delta_z]:r    = DZ;
     [D_centre]:r   = DX/2.;
     [Ro_fluid]:r   = Ro_air;
     [frozen(4)]:i  = 1; "Cancel Temp. dependant parameters computation"
     [gy_Archimede]:r=0.;
     [Cp_fluid]:r   = Cp;
     [G_cond(1)]:r  = viscosite;
     [G_cond(2)]:r  = conduct/Cp;
     [G_cond(3)]:r  = .1*conduct;  "Salinity diffusion"
   >
>
;


***************************************************************************
********** Complément pour les Matrices  **********************************
***************************************************************************

En cas d'occurence d'une D_loop (cf TEF manuel), il faut fournir au noyeau (ker)
de quoi gérer le critère de convergence.

  Deux critères sont actuellement implémentés:                              ******** en bref ********
  ============================================                              *  Standard: TOLQUAD    *
                                                                            *        ou             *
> Un critère standard, où : SOMME{ (Fi-Fiz)^2} sur les D_flagged Transfers  * User: TOL_US et OPLUS *
est comparée à TOLQUA*NTR (Tolérance quadratique, Nombre de D_Tr), avec     *************************
la possibilité de fixer TOLQUAD dans Zinit (Valeur par défaut = 1.E-10).

> Un critère comparant DEVUS à TOL_US (Tolerance User) :
à la sortie de chaque appel à un D_flagged Tr, on accumule le contenu de OPLUS
dans DEVUS. C'est donc chaque processeur concerné qui calcule OPLUS - remis à zéro
par ker avant l'appel au processeur.
DEVUS est comparé a TOL_US (à fixer dans ZINIT).

> Le plus sévère des deux critères arrête les itérations. Donc, pour privilégier
le critère utilisateur, il faut donner à TOLQUAD une grande valeur.

On peut cependant limiter le nombre d'itération, pour éviter les boucles infinies
de non convergence par :

  Nombre d'itérations:
  ====================

> NITMAX fixe le nombre maximum d'itérations

> on peut aussi en imposer un nombre minimum en donnant à NITMIN une valeur
non négative (défaut=-1).
Pour des raisons historiques, NITMIN=0 entraine au moins une itération, 1 au moins 2, etc.
 
MATRICES ET VIZU
================
Vizu donnant accès aux matrices sous Zeus, un fichier - actuellement en ASCII -
MXMX contiend les sorties (évidemment en phase avec les DAT)
On peut exiger la sortie des mêmes coefficients, mais dès la fin de la D_Loop,
(donc sans les CtA_1B) en ajoutant 100 au contenu de OZPlvl(6) :
ker crééra alors MDMX en plus de MXMX. Pour y avoir accès dans VIZU, il faudra
cependant jouer avec des softs links pour qu'elle apparaisse sous le nom MXMX. 
                         cf     /zoom/Help/Users/Combined_Facilities/Print_levels  <
Attention, MDMX possède des coefficients associés aux K-Transferts non significatifs.
*********

***************************************************************************
********** Utilisation du point d'entree ZSTEER ***************************
***************************************************************************

===========================================
Gestion du pas de temps de calcul           
===========================================
dTime= .1;"s"  en tête de Zinit initialise l'incrément temporel;
On peut le modifier dans ZSTEER (cf Borelienne)
Le calcul s'arrête quand on atteind TimaX (Zinit).
 On peut préférer le gérer soi même dans ZSTEER :
  if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "s'arrêtera en fin du step qui démarre"
On peut de la même manière gérer les fréquences de sorties sans tenir
compte des" Print/Paw every M steps" - on gère alors les Logical variable suivantes :

ZPAW déclenche une sortie des DAT/PAR
ZPRINT déclenche pour .lis (ker et les processeurs)
ZENDRN arrêtera le run à la fin du pas qui démarre.

===========================================
****** Fu t u r a *************************
===========================================
Un tableau commun aux processeurs et a Zinit a ete defini:
 Time_char(4),
avec  EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr),
qui fournit diverses possibilites pour optimiser la gestion de dTime; un exemple valant mieux
qu'un long manuel, le voici.

Exemple d'utilisation dans un exemple conducto-convectif
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
 rNu = Viscosite/Ro_Air;
 Alpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
 Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
 Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
 Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init defaults
 Time_char(1)=99999.; Time_char(2)=99999.;
;
puis, dans le ZSTEER, on recupere les valeurs definies dans un ou plusieurs
processeurs.
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;
! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
!!!! il a suffit de gerer dans un processeur judicieusement choisi
!!!! les deux premiers Time_char :
!!!! Zsteer info for steering dTime
!!!! DO i=1,2
!!!! < if (abs(VIS_uv(i)) .gt. 1.E-06) then;
!!!!     Time_char(i)
!!!!        = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
!!!!   endif;
!!!! >;
;
On obtiend un critère en Courant (cad assez rapidement).

===========================================
Analyse Borelienne des Matrices de couplage
===========================================

L'exemple suivant montre comment sortir une matrice de couplage à un instant
donné, mais en faisant varier le pas de temps - ce qui correspond à une
analyse du Système Linéaire Tangent en transformée de Borel
Contexte : un premier run sert de référence, et on fait un RESUME FROM sur
un OZDAT.CL1, at IT; le pas de temps considéré; dans ZSTEER (fin du ZINIT) :

ENTRY ZSTEER;
!
    if (istep.ge.NbItMx)    "on a fixe le nombre de pas dans la variable NbItMx"
    < ZENDRN =.true.; >     "le run s'arrêtera à la fin du pas courant"
    call ORESUME(LZ);       "on repositionne le fichier de reéférence au même step"
    dtime = dtime*2.        "cf Borel manuel"
    time = dtime ;   " Ceci permet d'avoir dans viZu la variation des coefs(dtime)"
    ZPAW = .true. ;         " pour transmettre à ViZu ce step"
;
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="
;
                                                     cf Zdl_html.dir/ZSteer_Entry <

********************************************************************************
******** Parametres du Run *****************************************************
********************************************************************************
TYPES de fonctionnement Stationnaire ou Dynamique;
La variable logique STEADY permet á ker de fonctionner en mode recherche d'une
solution stationnaire, en supposant bien sùr que la totalité des processeurs
utilisés sache alors quoi faire ...

Gestion de l'incrément. Arrêt. dtime; timax; cf ZSTEER

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl.html.bak1
********************************************************************************
********************************************************************************
******* Dictionnaire des instructions du ZOOM DESIGN LANGUAGE ******************
********************************************************************************
********************************* (mise à jour le vendredi 30/01/1998 Al1) *****
****** Futura feature : tout ce qui concerne *TrName* (Al1, mercredi 05/08/1998)
********************************************************************************

Cette entrée du manuel ZDL est celle de /zoom/Help/Users/Zinit/ZDL/Zdl.html;
Pour chaque groupe d'instructions, on trouvera un complément soit sous forme
hypertexte dans le fichier réferencé dans  Zdl_html.dir/XXX < et repéré par ce signe "<",
soit en annexe du texte imprimé.

********************************************************************************
******** Préliminaires pour faciliter l'utilisation du dictionnaire ***********
********************************************************************************

Le ZDL est un language programmable et permet l'utilisation des instructions Fortran ou
Mortran de base.
L'interprétation de Zinit donnera une Subroutine ZINIT avec un point d'entrée ZSTEER.
La subroutine est appellée une seule fois en tout début du Run. ZSTEER est appelé
à chaque nouvel incrément (temporel en dynamique ou itération en stationnaire).

Remarque : la notion de language interprèté génèrant une routine éxécutable peut mener
à des difficultés de compréhension des contingences d'écriture; en cas d'ambiguité, nous
préciserons dans le texte les notions : d'avant - après, en les qualifiant de :
 - séquencielles : il s'agit alors d'ordre des instructions elles-mêmes dans le corps du Zinit;
 - a l'éxécution : il s'agit alors de l'ordre dans lequel vont être éxécutées les instructions;
La différence entre les deux étant d'autant plus grande que les instructions de déroutage
du Fortran seront nombreuses (programmation dite "spaghetti").
Notons au passage que de nombreuses instructions et blocs logiques Mortran permettent de structurer
le corps du programme (Do while, Until, Case, if then else etc).


Fonctions du Zinit :
====================

Il a pour premier but de créer la structure dite de l'Arbre ZOOM, qui est constituée
d'un emboîtement de FAMILLES ayant des objets terminaux dits CELLULES.
On remarquera qu'il s'agit de créer un programme créant une structure et non de
décrire de manière déclarative cette structure; cela permet en particulier une grande
souplesse, puisqu'on peut alors :
 - utiliser des boucles pour créer des structures répétitives, des emboitements, etc;
 - programmer sa modification apres création (cf MOVE, GET, FREEZE);
 - appeler des procédures de créations/instanciations communes à plusieurs objets;

Ensuite de relier les cellules à des TRANSFERTS (ou par des transferts : deux facons de dire 
et de faire mais une seule même structure créée).

Il doit - à chaque création de transfert ou cellule - associer un MODèLE à l'objet créé
(TYPE=); chaque instruction CREATE constitue donc une instanciation (d'un objet à partir
d'un modèle); il s'y associe donc l'attribution de valeurs numériques à certains
paramètres libres du modèle et, pour les cellules uniquement (de manière obligatoire)
une initilisation du vecteur d'état (fill_Eta).
Une partie plus subtile de l'instanciation concerne leur insertion dans une structure :
celle ci héritera des connections entre objets (C-PLUG T-PLUG, CONNECT, JOIN TO)

Enfin, une tâche (plus classique) est d'attribuer des valeurs aux paramètres du Run :
gestion de l'incrément temporel, des niveaux et fréquence de sauvegarde des résultats
de calculs, redémarrage de run etc.

Ecriture du Zinit :
===================

Deux types de blocs logiques sont utilisés dans ce language.
Le bloc standard de Mortran - emboîtable - <;>, associé aux instructions NEXT; et EXIT;
 il est ici mis a profit pour décrire la structure emboitée des cellules/familles.
=> celà donne un sens fort à la structure, puisqu'un bloc logique n'a d'existence que
SITUÉ dans la structure;
Un bloc implicite qui détermine une adresse courante dans la structure; tout attribut
sous forme de symbole Fi Eta [Paramètre] est attribué à l'objet courant de même
nature : famille, cellule ou transfert tant qu'une instruction n'en change;

instructions changeant l'objet courant :
----------------------------------------
under<                               change de Famille courante (celle sous laquelle seront
                                     placées les familles ou cellules suivantes);
     >;                              ferme le bloc logique préecédent et restore la famille
                                     courante séquenciellement précédente;
create CL, get *ClNam* ;             change de Cellule courante;
create TR, get Tr *TrName*;          change de Transfert courant;

Métasymboles utilisés :   *NamObj*   pour nom d'objet à choisir par l'utilisateur.
======================   {*Valeur*}  Valeur optionnelle.
                          " texte "  tout texte entre " " (symbole des commentaires Mortran)
                                     est hors ZDL.
                     |Instruction| : permet d'identifier une instruction dans un texte (ou un mot
                                     réservé du ZDL).
                          remarque : ces meta symboles ne seront utilisés que s'il y a ambiguité.

Vocabulaire :
=============
Bloc logique              : voir plus haut (<;>).
Position courante         : voir plus haut.
Instructions spécifiques  : certaines instructions qui ne peuvent être utilisées
                            que dans certains blocs logiques (cf Fill_CD<;);
Bank                      : nous conservons ce nom pour designer un bloc de données géré par ZEBRA,
                            pour eviter la confusion avec le Bloc au sens logique.

Liste des Métasymboles utilisés :
=================================
*NamFm*   : nom de Famille (Fm);
*NamCl*            Cellule (Cl);
*NamObj*  : Cl ou Fm;
*NamObj*  : se décompose en deux champs *Nam* - *Code* où *ClNam* est une suite d'au plus 5 Character
            Fortran et *Code* un integer Fortran; les deux champs etant séparés par la copule : - .

*AddObj*  : permet de creer une adresse universelle associee a un nom d'objet DANS l'arbre
            ( pour eviter d'y referer via son adresse complete : /z/u/*NamFm*/.../*NamObj*)
            Universels dans le sens où ils sont reconnus de n'importe quelle famille courante;
*NamTr*   : donne un nom au transfert courant, qui pourra etre ré-appelé, ou invoqué pour connection Tr à Tr;
*ChFTNVar*: Variable Character FTN (par defaut, Character*4)
*Code*    : integer ajoutant un numero a un symbole; (on utilise aussi *CodFm* et *CodCl*,*CodPlg* pour Futura);
*CPlug*   : *NamCl*,*NamPlug*  (un C-Plug est toujours associe au nom de sa cellule)
*NamPlug* : *CodPlg* (integer)
            Futura : *NamPlug* = *NamPlug* - *CodPlg* for C-Plugs only (comme donc *NamCl* et *NamFm*);
                     atention, Char*4 (au lieu des 5 possibles pour Cl et Fm);
*VarList* : une liste d'integers Fortran; syntaxe : (int1,int2,int3,etc)
            ou  (int1 thru int2) qui prend la suite des entiers naturels croissants de int1 a int2.

********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
                                                  Zdl_html.dir/Fm_Cell_Create <
;
Familles Obligatoires : CREATE ZEUS;
                        CREATE UNIVERSE;

Autres familles :       CREATE FM *NamFm* - *CodFm*;
                        CREATE FM *NamFm*; 
           Equivalent à CREATE FM *NamFm* - 0;

                        CREATE FM=*ChFTNVar* - *CodFm*;

Cellules :              CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;

Complément :            CREATE N-CL ...
                        FREEZE *NamCl* - *CodCl*;

                        SET FM TYPE:T; Instruction obligatoire et inutile, qui prétend
declarer que la famille courante est de type Transfer, et donc que l'on y éliminera les
variables d'état - ce qui est exact. L'instruction duale Set Fm Type:S, devrait alors
conduire a l'élimination des variables de transfert (non implémenté);



********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
                                                  Zdl_html.dir/Transfer_Create <

Naturelle :             CREATE TR,TYPE=*TrProc* 1,-9,-9;

 et gelée :             CREATE N-TR,TYPE=*TrProc*;

Imposée   :             CREATE-F TR
                        CREATE-F+ TR
                        CREATE-Z TR
                        CREATE-U TR

 et gelée :             CREATE-Z N-TR,TYPE=*TrProc*;

********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************
                                                   Zdl_html.dir/Object_Address <


                        SET *AddObj* = *ObjetDéjàCréé* ;
                        SET *AddObj*(*Indice*) = *NamObj*;
                        SET *AddObj* == *ChFTNVar*;
                 *ChFTNVar* est une variable Fortran CHARACTER*N contenant le *NamObj*;

On peut séquentiellement ré-affecter ces symboles universels :

                        RESET *AddObj* = *NouvelObjet* ;



exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
Set Obj(3) = Mur-4;
(on les récupèrent par Get MaCl; etc)

********************************************************************************
********* Marque de Transferts (en particulier pour connection Tr à Tr) ********
**FUTURA************************************************************************
                                                      Zdl_html.dir/Tr_to_Tr_Cx <


                        Name Tr as : *NamTr* ;
                        Name Tr as : *NamTr*(*Indice*) ;

Ces noms sont des symboles des mêmes Table que pour SET; il faut donc affecter
des symboles tous différents.

exemples :
..........
Name Tr as Heat(1); Name Tr as Conv;  Exemples de /exos/hamb/zinit
(on les récupèrent par Get Tr Heat(1); etc)


********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
                                                       Zdl_html.dir/Connecting <
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2ème temps   : création d'un T-Plug sur un transfert;
3ème temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

1&2/ Création :
---------------

C-Plug :                C-PLUG *CodPlg* : *VarList*;
            (Futura :)  C-PLUG *NamPlg*-*CodPlg* : *VarList*; (Default is *NamPlg* :=PLUG)

T-Plug :                T-PLUG *CodPlug* : *VarList*;

exemples : C-Plug n:n thru n+3; C-Plug 1:1; C-Plug 3:1,3,5,7; C-Plug 2:1 thru 7; C-Plug n:n thru n+3;
Futura : C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
;

3/ Connection :         Join *CodPlg1* To (*ClNam*,*CodPlg2*);
---------------

forme abrégée :         JOIN TO (*Cl/C-Plug*);
                        JOIN *CodPlg* to (*NamCl*,*NamPlg*);
                        JOIN *CodPlg* to (*NamCl*,);
                        JOIN *CodPlg* to (CPlug1),(CPlug2);
exemples :
JOIN 2 TO(Mesh-4,5);                        Futura : JOIN 2 TO(Mesh-4,Face-5);
JOIN 2 TO(Obj(3),2);                        Futura : JOIN 2 TO(Obj(3),Edge-2);
JOIN n TO(Mesh,);  :> (Mesh,1);             Futura :> (Mesh(i),PLUG-1)

JOIN 1 TO (Mesh(i)(Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
3s/ Création de T-Plug et connection contractée :
                       CONNECT TO (*1Cl/C-Plug*,*2Cl/C-Plug*) = CONNECT 1 TO(*1Cl/C-Plug*,*2Cl/C-Plug*)

                       CONNECT *VarList* TO (*CPlug*);

Type de T-Plug particulier :
                       T-PROBE *PlugNum*;
;

********************************************************************************
******** Connections directe de Transfert a Transfert **************************
**FUTURA************************************************************************
                                                       Zdl_html.dir/Connecting <
        Join *CodPlg1* To Tr (*TrName*,*CodPlg2*);

********************************************************************************
********* Déplacements dans la structure ***************************************
********* et modifications de la structure *************************************
********************************************************************************

Cette facilité est particulièrement appréciée lorsque que la structure de création d'objet
orientée par l'utilisation de Do loop Fortran ne satisfait pas à la structure d'emboitement
des familles choisies. La première structure est alors utilisée à la création en série des
objets (comme deux Do loop emboitées pour un maillage 2-D). Après création de la structure
d'arbre choisie, on déplace les objets de leur famille de création à celles où on veut
finalement les situer.

UNDER *FmNam* <   où *FmNam* est soit un nom d'objet accesible de la famille courante
                                 soit une adresse définie par SET,
                  définit cette famille comme la famille courante;

UNDER=*FmNam*<    même chose avec *FmNam* rangée dans une CHAR*n Fortran variable;

>;                fermant un bloc logique Under ...< , la famille courante redevient celle
                  précédent l'instruction Under ...<;


GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associé);
exemples : Get Mesh-4; Get Obj(3);

Déplacement d'objets dans la structure :
========================================
;
MOVE *NamObj* TO *NamObj*;

exemple :
Move PIECE-I To COL-J; PIECE-I (Cellule ou Famille) est rangee sous la famille COL-J;
;
Gel d'une cellule :
===================
Equivalente à Create N-Cl *NamCl*..., cette instruction gèle la cellule courante :
FREEZE *NamCl*;

exemple :
Get MESH-1; Freeze Mesh-1;

********************************************************************************
******** Directives pour la récupération des Résultats et **********************
******** le redémarrage d'un Run ***********************************************
********************************************************************************
                   /zoom/Help/Users/Zinit/ZDL/Zdl_html.dir/Results_Output <

********************************************************************************
******** Directives pour sorties listing ***************************************
********************************************************************************
********* Print Direct de la routine Zinit *************************************
********************************************************************************
(Futura, vendredi 30/01/1998) Les nouvelles macros Z_Pr: FTN_symbols;
     Z_Pr : Var_List;  Z_Pr/BlaBla/:...,le même avec commentaire;
     Z_Pad : idem, les memes avec sorties console;
     Z2_Pr : Var_List; sortie sur une seule ligne, pas de /blabla/ possible;
     attention pour les boucles Fortran implicites :
      Z2_PR : (d(i),i=1,2),a,b,c; ne marche pas, erreur de compil.
      Z2_PR : a,b,c,(d(i),i=1,2); marche.

********************************************************************************
*****  Print_out,Paw_out et Zprint_out options *********************************
********************************************************************************

Cet ensemble d'instructions concerne la gestion des sorties gérées par Ker, d'une
part, et celles que gère chaque objet ou classe d'objets (processeur).
Le premier support est le "listing" ***_exe.run.lis (.lis);
le second constituant l'ensemble des fichiers binaires passés a VIZU (DAT et PAR) :
OZDAT.CL      Contiend les valeurs de Eta,dEta et dEta,dec
OZDAT.TR                              Fi,Omega,Delta
OZPAR.CL                              paramètres des cellules (cf PW bank et PDL)
OZPAR.TR                              paramètres des transferts (cf PW bank et PDL)
              à chaque pas de temps spécifié par Paw_out;

SUPPORT .lis
============
***Sorties gérées par Ker identifiées par le mot : Print;   (routines OPTAU et OPETA)

***Sorties gérées par les processeurs            : ZPrint;

DEFINITION DE LA FREQUENCE
==========================
print_out N times every M steps;
paw_out N times every M steps;
print_out once  every step;
print_out twice every M steps;
print_out every M steps;
paw_out once every M steps;
paw_out twice every M steps;
paw_out every step;

SUPPORT DAT et PAR (pour VIZU)
==============================
Elles sont entièrement gérées par Ker suivant les informations fournies par Zinit
et les processeurs;    identifiées par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a été programmé VIZU (ViZualisation Interface for Zoom User).

STRUCTURE GENERALE DES INSTRUCTIONS DE SELECTIONS DES OBJETS DONNANT LIEU A IMPRESSION
======================================================================================
Les instructions fonctionnent selon trois règles :

1/ on fixe les valeurs par défaut en tête de ZINIT
2/ on spécifie une commande hors défaut par objet (Cellule ou Transfert) si nécessaire
3/ si on préfère globaliser ces instructions par famille, on peut le faire lorsque
   l'arbre ZOOM a été instancié,cad après le CALL OFRAME;
Enfin, la fréquence des sorties est gérée par les instructions
 "print_out" pour .lis; "paw_out" pour DAT et PAR;
Rq : la fréquence fixée par Print_out est appliquée aux processeurs en donnant à cette fréquence
la valeur .TRUE. a Zprint(LCL) ou ZPRINT(LTR);

1/ DEFAUTS
Zprint_options:
   Default=none Cl,none Tr,none Fm;
![ equivalent a Zprint_options: Default=none; ]
Print_options:
   Default=none;

L absence totale de ces options équivaut a une sortie complète de tous les objets de l'arbre, cad à :
Zprint_options:
   Default=all Cl,all Tr,all Fm;
[ équivalent à Zprint_options: Default=all; ]
Print_options:
   Default=all;

2/ POUR CHAQUE OBJET  CREE
L'instruction :    ZPrint_Tr; ou    ZPrint_Cl; précise au processeur concerné que le dernier objet
Tr ou Cl crée sera a imprimer.
De même pour Print_Cl ou _Tr par Ker;
A l'inverse :
Print_not_Cl; et : Zprint_not_Tr; suppriment un éventuel défaut requérant l'impression;

3/ GLOBALISATION DES DIRECTIVES :

à la fin de ZINIT, après l'instruction qui instancie l'arbre ZOOM :
CALL OFRAME  ;

!  FM referenced output options. EXEMPLES :
sorties de KER :
Print top Cl of Fm: U;                 Eta,Gamma dEta des Cellules immédiatements sous Fm : U;
Print all Cl of Fm: U;                                des Cellules des familles U et sous U jusqu'en bas
Print all Tr of FM : PIEC-1;           Fi,DElta et Omega des Tranferts du sous-arbre des familles de
                                       racine la Fm : PIEC-1;
Print all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


Zprint all Cl of Fm: PIEC-1;           les processeurs traitant les Cl du sous arbre précédent doivent imprimer.
Zprint all of Fm: Z;                    sans précision du type d'objet, les deux (Cl et Tr) sont concernés.


COMPLEMENTS
===========
*/ Pour la programmation des processeurs :
------------------------------------------
Instructions héritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;

*/ Fixation d'un niveau d'impression pour les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1] commun à tous les processeurs)

Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >

                         cf     /zoom/Help/Users/Combined_Facilities/Print_levels  <
On impose donc le même niveau d'impressions pour tous les processeurs. Pour varier d'un processeur
à l'autre, il faudra en passer par la déclaration d'une variable dédiée des Description Banks;
(ker gère le général, chaque processeur le particulier ...)

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus égales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot.

2/PAR OBJET (ici des Familles)
Zprint_fm;               sortie du scatter plot de la dernière Famille créée.
Zprint_not_Fm;        supprime  la sortie par défaut éventuelle.

3/APRES OFRAME
Print top Mx of Fm : PIEC-1;
Print all Mx of Fm : TROM;

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
à la racine susdite [ici TROM].

*/ Gestion particulière aux calculs correspondants à la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces détails d'impressions dans :
                                /zoom/Help/Programmers/Ker/D_Loop <

Note : pour les détails concernant le tableau OZPlvl cf :
                               /zoom/Help/Users/Combined_Facilities/Print_levels  <

**************************************************************************
*************************** RESUME FROM **********************************
**************************************************************************

  Il s'agit de la reprise d un run par initialisation à partir d un fichier
de sorties d'un run précédant (qui aura évntuellement pu être tué, cad que la fin du fichier peut être
aléatoire)
  L'initialisation ne sera faite qu'à partir des états des Cellules non gelées;
pour ces dernières, la valeurs du Zinit sera donc retenue (Fill_Eta<;>).

RESUME FROM OZDAT.CL1;  noms de fichiers autorisés de type OZDAT.CLX (1 seul caractère X)
 ker se positionne au dernier step du fichier, initialise les Eta et lance le calcul.

RESUME FROM OZDAT.CL1, at IT;  pareil, mais positionne au ITième step;

RESUME FROM OZDAT.CL; 
 ker se positionne au dernier step du fichier, initialise les Eta, se positionne
 au même step pour OZDAT.TR et les deux OZPAR.XX et lance le calcul; il va donc 
 accroitre ces quatre fichiers des nouvelles sorties.

RESUME FROM OZDAT.CL1/OZDAT.TR1; non content d'initialiser les Eta, ker va reprendre
la valeur des Fi (Fiz) du même step - ici le dernier - nons gelés, et retiend la
valeur du Zinit pour ces derniers. Ce type de Resume from prend son intérêt lorsque la D_loop
est coûteuse ou lors de la présence de Pseudo_Cell Tr, qui requièrent - telles des cellules - une
initialisation (cf les manuels des Processeurs)

********************************************************************************
******** Directives pour sorties VIZU **** Les Maps ****************************
********************************************************************************

Lorsque des objets Cellule ou Transfert ont entre eux une relation géométrique,
comme dans le cas d'un maillage, on peut associer chacun d'entre eux à un noeud d'une
grille 1 ou 2D, dénommée "map";
On respecte cependant la dichotomie Cl/Tr : soit ClMap, soit TrMap, pas de mélange.
La définition d'un map aura pour conséquence son apparition dans l'arbre VIZU
et le tracé automatique de surfaces. Concrètement, les valeurs tracées - associées
à chaque point de la grille, seront Fi,dFi,Omega ou des paramètres définis dans
le processeur pour les Tr, Eta, dEta, dEta,dec ou paramètre pour les Cl.
On peut associer à chaque point, soit l'objet complet - et alors les valeurs
formant la surface correspondront aux mêmes composantes du vecteur choisi pour
tous les objets
soit (objet,composante) - et alors le profil pourra relier des valeurs de ces composantes
diverses (à une translation près définie dans VIZU).

Cette définition se fait en deux temps :

1) définition de la grille
++++++++++++++++++++++++++
DEFINE MAP CL01 ,                      "ClMap de nom CL01 a CL99"
TITLE= Profil de Grouchot-Langevin,    "titre de 60 carateres maxi"
DIM=1,                                 " Dimension 1 ou 2, profil ou surface"
XLEN=100;                                "nombres de points de grille en X"

DEFINE MAP TR01,
TITLE= mon transfert prefere,
DIM=2,
XLEN=12,
YLEN=27;                                "nombres de points de grille en Y"

DEFINE MAP TR02,TITLE=BlaBla,DIM=3,XLEN=10,YLEN=20,ZLEN=10; "non implémenté"

2) Association point de grille / Objet
++++++++++++++++++++++++++++++++++++++
Du fait de l'absence de nom aux Transferts, oon distingue
pour les CL0I maps :
Z_OUT CL01(I)=*NamCl*;          1D Map, associant une cellule au point I;
Z_OUT CL03(I,J)=*NamCl*         2D Map, associant une cellule au point I,J;
Z_OUT CL04(I)=*NamCl*,K;        1D Map, associant la composante K de Cl au point I;
Z_OUT CL05(I,J)=*NamCl*,K;      2D Map, associant la composante K de Cl au point I,J;
;
pour les TR0I maps :
(Imperativement a la creation du Tr);
Z_OUT TR02(I);                  1D Map, associant le Transfert courant au point I;
Z_OUT TR01(I,J);                2D Map, associant le Transfert courant au point I,J;
Z_OUT TR03(I),K;                1D Map, asssociant la composante K du Tr au point I;
Z_OUT TR04(I,J),K;              1D Map, asssociant la composante K du Tr au point I,J;
;
Rq : cette information est rangée par Ker dans le fichier binaire OZOUT.MP;
;
 informations complémentaires dans VIZU manuels;
3) Maillage variable
++++++++++++++++++++
La version Futura (Dev de Oct 97) authorise le maillage variable en une ou deux dimensions;
cela ne concerne pas du tout la description des Map précédente qui ne contiend aucune
information géométrique, mais conduit à une certaine transformation des sorties DANS Vizu.
Mais Vizu utilisant des fichiers qui trouvent leur origine dans ZINIT, pour info Maillage
variable, cf : > /zoom/Help/Users/Graphics_and_post_treatment/Maps 

********************************************************************************
***** TITRES et INFORMATIONS ASSOCIEES A UN RUN ********************************
********************************************************************************

On donne un titre général aux sorties graphiques post-traitées par
l'instruction U_Title :

U_TITLE Mon Titre, O bel exercice que ton Rayleigh est grand;

Il est possible de récupérer les infos générales d'un run dans
les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 caraterès de titre intitialisé à  ORNAME  ORVERS  OZINDA  OZINTI 


exemple

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple
...
+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;


********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********* Initialisation et attribution de valeurs aux Paramètres **************
********************************************************************************
                                              Zdl_html.dir/Model_Instanciation <

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remplissage des variables ( Eta ou Fi )
=======================================

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"


     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"


     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >

********************************************************************************
******** Autres Instructions utiles ********************************************
********************************************************************************

DIMENSION:N,M; comble imparfaitement l'absence de possibilite de decliner des noms
d'objets avec deux integer, comme MESH-(I,J);
Dimension, instruction SEQUENCIELLE remplacera l'occurence de MESH-(I,J) par
MESH-(I+(J-1)*N); ce qui fait que l'information (I,J) ne se retrouvera pas dans
le .lis ni dans ViZu.

Execute Procedure;
DO ((J=1,NL),I=1,NC)
"             num.max.de liaisons=JZSIG=9 (4 PSI+4 VORTX+RADI)"
< CREATE CL MESH-(I:J),TYPE=VORTX 9; "Entry IVORTX"
    C-PLUG 1:1,2,3,4; C-PLUG 2:1 thru 4;
    SET MESH(I:J) = MESH-(I:J);
   Tinit=T_infini; Execute MESH_Fill;
    Z_OUT CL01(I,J)=MESH-(I:J); " Mapping"
   IF J.eq.NL/2 .and. I.eq.nc/2 < ZPrint_CL; >;
>
.......
PROCEDURE MESH_Fill
<  Fill_Eta < [2] = Tinit ; [3] = RO_AIR; [4] = RO_AIR; >
   flat = 0.;
   Fill_CD
   < [Air_Eau]:i    = 1;  "Air"
     [lat_itude]:r  = rlat;
     [long_itude]:r = delta_long*float(I);
     [f_lat]:r      = flat;
     [Nb_faces]:i   = 4;   "Carres"
     [t_side]:r     = DX;  " should .eq. DY"
     [Lo_up]:i      = Lo_up;
     [delta_z]:r    = DZ;
     [D_centre]:r   = DX/2.;
     [Ro_fluid]:r   = Ro_air;
     [frozen(4)]:i  = 1; "Cancel Temp. dependant parameters computation"
     [gy_Archimede]:r=0.;
     [Cp_fluid]:r   = Cp;
     [G_cond(1)]:r  = viscosite;
     [G_cond(2)]:r  = conduct/Cp;
     [G_cond(3)]:r  = .1*conduct;  "Salinity diffusion"
   >
>
;


***************************************************************************
********** Complément pour les Matrices  **********************************
***************************************************************************

En cas d'occurence d'une D_loop (cf TEF manuel), il faut fournir au noyeau (ker)
de quoi gérer le critère de convergence.

  Deux critères sont actuellement implémentés:                              ******** en bref ********
  ============================================                              *  Standard: TOLQUAD    *
                                                                            *        ou             *
> Un critère standard, où : SOMME{ (Fi-Fiz)^2} sur les D_flagged Transfers  * User: TOL_US et OPLUS *
est comparée à TOLQUA*NTR (Tolérance quadratique, Nombre de D_Tr), avec     *************************
la possibilité de fixer TOLQUAD dans Zinit (Valeur par défaut = 1.E-10).

> Un critère comparant DEVUS à TOL_US (Tolerance User) :
à la sortie de chaque appel à un D_flagged Tr, on accumule le contenu de OPLUS
dans DEVUS. C'est donc chaque processeur concerné qui calcule OPLUS - remis à zéro
par ker avant l'appel au processeur.
DEVUS est comparé a TOL_US (à fixer dans ZINIT).

> Le plus sévère des deux critères arrête les itérations. Donc, pour privilégier
le critère utilisateur, il faut donner à TOLQUAD une grande valeur.

On peut cependant limiter le nombre d'itération, pour éviter les boucles infinies
de non convergence par :

  Nombre d'itérations:
  ====================

> NITMAX fixe le nombre maximum d'itérations

> on peut aussi en imposer un nombre minimum en donnant à NITMIN une valeur
non négative (défaut=-1).
Pour des raisons historiques, NITMIN=0 entraine au moins une itération, 1 au moins 2, etc.
 
MATRICES ET VIZU
================
Vizu donnant accès aux matrices sous Zeus, un fichier - actuellement en ASCII -
MXMX contiend les sorties (évidemment en phase avec les DAT)
On peut exiger la sortie des mêmes coefficients, mais dès la fin de la D_Loop,
(donc sans les CtA_1B) en ajoutant 100 au contenu de OZPlvl(6) :
ker crééra alors MDMX en plus de MXMX. Pour y avoir accès dans VIZU, il faudra
cependant jouer avec des softs links pour qu'elle apparaisse sous le nom MXMX. 
                         cf     /zoom/Help/Users/Combined_Facilities/Print_levels  <
Attention, MDMX possède des coefficients associés aux K-Transferts non significatifs.
*********

***************************************************************************
********** Utilisation du point d'entree ZSTEER ***************************
***************************************************************************

===========================================
Gestion du pas de temps de calcul           
===========================================
dTime= .1;"s"  en tête de Zinit initialise l'incrément temporel;
On peut le modifier dans ZSTEER (cf Borelienne)
Le calcul s'arrête quand on atteind TimaX (Zinit).
 On peut préférer le gérer soi même dans ZSTEER :
  if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "s'arrêtera en fin du step qui démarre"
On peut de la même manière gérer les fréquences de sorties sans tenir
compte des" Print/Paw every M steps" - on gère alors les Logical variable suivantes :

ZPAW déclenche une sortie des DAT/PAR
ZPRINT déclenche pour .lis (ker et les processeurs)
ZENDRN arrêtera le run à la fin du pas qui démarre.

===========================================
****** Fu t u r a *************************
===========================================
Un tableau commun aux processeurs et a Zinit a ete defini:
 Time_char(4),
avec  EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr),
qui fournit diverses possibilites pour optimiser la gestion de dTime; un exemple valant mieux
qu'un long manuel, le voici.

Exemple d'utilisation dans un exemple conducto-convectif
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
 rNu = Viscosite/Ro_Air;
 Alpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
 Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
 Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
 Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init defaults
 Time_char(1)=99999.; Time_char(2)=99999.;
;
puis, dans le ZSTEER, on recupere les valeurs definies dans un ou plusieurs
processeurs.
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;
! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
!!!! il a suffit de gerer dans un processeur judicieusement choisi
!!!! les deux premiers Time_char :
!!!! Zsteer info for steering dTime
!!!! DO i=1,2
!!!! < if (abs(VIS_uv(i)) .gt. 1.E-06) then;
!!!!     Time_char(i)
!!!!        = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
!!!!   endif;
!!!! >;
;
On obtiend un critère en Courant (cad assez rapidement).

===========================================
Analyse Borelienne des Matrices de couplage
===========================================

L'exemple suivant montre comment sortir une matrice de couplage à un instant
donné, mais en faisant varier le pas de temps - ce qui correspond à une
analyse du Système Linéaire Tangent en transformée de Borel
Contexte : un premier run sert de référence, et on fait un RESUME FROM sur
un OZDAT.CL1, at IT; le pas de temps considéré; dans ZSTEER (fin du ZINIT) :

ENTRY ZSTEER;
!
    if (istep.ge.NbItMx)    "on a fixe le nombre de pas dans la variable NbItMx"
    < ZENDRN =.true.; >     "le run s'arrêtera à la fin du pas courant"
    call ORESUME(LZ);       "on repositionne le fichier de reéférence au même step"
    dtime = dtime*2.        "cf Borel manuel"
    time = dtime ;   " Ceci permet d'avoir dans viZu la variation des coefs(dtime)"
    ZPAW = .true. ;         " pour transmettre à ViZu ce step"
;
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="
;
                                                     cf Zdl_html.dir/ZSteer_Entry <

********************************************************************************
******** Parametres du Run *****************************************************
********************************************************************************
TYPES de fonctionnement Stationnaire ou Dynamique;
La variable logique STEADY permet á ker de fonctionner en mode recherche d'une
solution stationnaire, en supposant bien sùr que la totalité des processeurs
utilisés sache alors quoi faire ...

Gestion de l'incrément. Arrêt. dtime; timax; cf ZSTEER

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl.maquoi

!!!a faire et repartir
&'SET FM TYPE:#;'='SFT:#1;'

&'RESET #;'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);CALL OGRSVA(OINAM1);'

&'RESET #(#)'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGRSAR(OINAM1,(#2))'


                  précédent l'instruction Under ...<;

Option supplementaire : creation d'une chaine lineaire de familles
UNDER 
&'$A$'='#U5#C#N;LZWF=LQ(LZWCN-3);LZWCN=LQ(LZWF-1);' "2-1"
&'$B$'='#U4GOTO #C;$A$'


UNDER #-#=#,#<'=
'#LB#S1#I#S4#I#S5;#2=#3;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);                  cf JLJ ? Mail
CALL OGUNVA(OINAM1,#2,LZWF,LZWF);
 GOTO #I#C#S9;#U4#C#S4;#2=#2+1;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGUNVA(OINAM1,#2,LQ(LZWCN-3),LZWF);
#U9#C;IF(#2.GT.#4)GOTO #U5#C#S5;LZWCN=LQ(LZWF-1);'       "2-1"

UNDER=#-#<'='OCNAM1=#1;CALL OHL2I1(OCNAM1,OINAM1);
CALL OGFM(LZWF,LZWF,OINAM1,#2);
LZWCN=LQ(LZWF-1);#LA#S1#I#S5;'                      "2-1"

GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associe);
exemples : Get Mesh-4; Get Obj(3)
GET #(#);
GET #-#;
;
??? donne acces a quelque chose
GET #=LOC(#) ex get cl-1=LOC(adr ou obj); associe un symbole local a un objet/adresse
     cf /jlj/Navier-... cf JLJ                                                              ? Mail to JLJ


GET #=LOC(#-#)

GET #=LOC(#(#))
in jlj/zoom21/dev_ccvs/wsb_uns_ppzdir                  +++++++++++++++++++++++++++++++++++++++++++

FOR IB=1 TO NVBX
<  CREATE FM BOX-IB ; IF IB.EQ.NVBX < SET TBOX=BOX-NVBX ;> 
   IF IB.EQ.1 < SET BBOX=BOX-1 ;>  
   UNDER BOX-IB
   <  YI=0.;"Y-ORIGIN" ;
      print *,'creation des cellules du mur';
      CREATE FM WCOL ;SET W=WCOL ; 
 
      SET A=BOX-(IB-1) ; SET B=BOX-(IB) ;  
      FOR JM=1 TO NHMB 
      <  UNDER A < UNDER FCOL-JM < SET C1=MESH-(NVMB);>>
         UNDER B < UNDER FCOL-JM < SET C2=MESH-(1);>>  
         GET LC1=LOC(C1); GET LC2=LOC(C2) ;
      
         TI=Q(@LC1@CL@CD@+1); D1=Q(@LC1@CL@CD@+2); D2=Q(@LC2@CL@CD@+2);"VER TR" 

               CREATE TR,TYPE=CVM ;
               LQ(LZTD-2)=LBD;
               FILL_TD < 0.,TI,D1,D2 >
               CONNECT TO (C1,)(C2,);

               CREATE TR,TYPE=CVE ;
               LQ(LZTD-2)=LBD;        
               FILL_TD < 0.,TI,D1,D2 >
               CONNECT TO (C1,)(C2,)   ;
                                 .
                                                      ++++++++++++++++++++++++++++++++++++++++++++
;
DIMENSION:#,#;'=' &''(##:##)''=''##L ##S8(##1+NZZ1*@(##2-1))''


&'*@(#)'='#U8*(#1)'


&'*@(#:#)'='#U8#A1#S8*(#1-1+NZZ#C*@(#2))'

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_Dictionnary.Obsolete
********************************************************************************
********************************************************************************
******* Dictionnaire des instructions du ZOOM DESIGN LANGUAGE ******************
********************************************************************************
********************************************************************************
 (remarque de redaction : apres manuelisation via TPS, repartir en fichiers
                     et chapeauter d'un texte court a cliquer)

********************************************************************************
******** Préliminaires pour faciliter l'utilisation du dictionnaire ***********
********************************************************************************

Le ZDL est un language programmable et permet l'utilisation des instructions Fortran ou
Mortran de base.
L'interpretation de Zinit donnera une Subroutine ZINIT avec un point d'entree ZSTEER.
La subroutine est appellée une seule fois en tout début du Run. ZSTEER est appelé
à chaque nouvel incrément (temporel en dynamique ou itération en stationnaire).
Remarque : la notion de language interprèté génèrant une routine éxécutable peut mener
à des difficultés de compréhension des contingences d'écriture; en cas d'ambiguité, nous
préciserons dans le texte les notions : d'avant - après, en les qualifiant de :
séquencielles : il s'agit alors d'ordre des instructions elles-memes dans le corps du Zinit;
a l'éxécution : il s'agit alors de l'ordre dans lequel ont été éxécutées les instructions;
La différence entre les deux étant d'autant plus grande que les instructions de déroutage
du Fortran seront nombreuses (programmation dite "spaghetti"). Notons au passage que de nombreuse
instructions et blocs logiques Mortran permettent de structurer le corps du programme
(Do while, Until, Case, if then else etc).



Fonctions du Zinit :
====================

Il a pour premier but de créer la structure dite de l'Arbre ZOOM, qui est constituée
d'un emboitement de FAMILLES ayant des objets terminaux dites CELLULES.
On remarquera qu'il s'agit de créer un programme créant une structure et non de
décrire de manière déclarative cette structure; cela permet en particulier une grande
souplesse, puisqu'on peut alors :
utiliser des boucles pour creer des structures repetitives, des emboitements, etc;
programmer sa modification apres création (cf MOVE, GET, FREEZE);
appeler des procedures de creations/instanciations communes a plusieurs objets;

Ensuite de relier les cellules à des TRANSFERTS (ou par des transferts : deux facons de dire 
et de faire mais une seule meme structure creee).

Il doit - à chaque création de transfert ou cellule - associer un MODèLE a l'objet créé
(TYPE=); chaque instruction CREATE constitue donc une instanciation (d'un objet à partir
d'un modele) il s'y associe donc l'attribution de valeurs numériques à certains
paramètres libres du modèle et, pour les cellules uniquement (de manière obligatoire)
une initilisation du vecteur d'état (ETA).
UNe partie plus subtile de l'instanciation concerne leur insertion dans une structure :
celle ci heritera des connections entre objets (C-PLUG T-PLUG, CONNECT, JOIN TO)

Enfin, une tache (plus classique) est d'attribuer des valeurs aux paramétres du Run :
gestion de l'incrément temporel, des niveaux et fréquence de sauvegarde des résultats
de calculs, redemarrage de run etc.

Ecriture du Zinit :
===================

Deux types de blocs logiques sont utilisés dans ce language.
Le bloc standard de Mortran - emboitable - <;>, associé aux instructions NEXT; et EXIT;
 il est ici mis a profit pour décrire la structure emboitée des cellules/familles.
=> cela donne un sens fort à la structure, puisqu'un bloc logique n'a d'existence que
SITUÉ dans la structure;
Un bloc implicite qui détermine une adresse courante dans la structure; tout attribut
sous forme de symbole Fi Eta [Paramètre] est attribué à l'objet courant de même
nature : famille, cellule ou transfert tant qu'une instruction n'en change;

instructions changeant l'objet courant :
----------------------------------------
under<                               change de Famille courante (celle sous laquelle seront
                                     places les familles ou cellules suivante);
     >;                              ferme le bloc logique precedent et restore la famille
                                     courante sequenciellement precedente;
create CL, get *ClNam* ;             change de Cellule courante;
create TR;                           change de Transfert courant

Métasymboles utilisés :   *NamObj*   pour nom d'objet a choisir par l'utilisateur.
======================    {*Valeur*} Valeur optionnelle.
                          " texte "  tout texte entre " " (symbole des commentaires Mortran)
                                     est hors ZDL.
                     |Instruction| : permet d'identifier une instruction dans un texte (ou un mot
                                     réservé du ZDL).
                          remarque : ces meta symboles ne seront utilises que s'il y a ambiguite.

Vocabulaire :
=============
Bloc logique              : voir plus haut (<;>).
Position courante         : voir plus haut.
Instructions spécifiques  : certaines instructions qui ne peuvent etre utilisées
                            que dans certains blocs logiques (cf Fill_CD<;);

Liste des Métasymboles utilisés :
=================================
*NamFm*
*NamCl*
*NamObj*
*AddObj*
*Name*
*Marque*    a remplacer par *AddObj*
*ChFTNVar*
*Code*
*NumPlug*
*VarList*: une liste d'integers Fortran; syntaxe : (int1,int2,int3,etc)
    Ameliorer :
*Name*   : l'un des deux *NamFm*,*NamObj*
*NamObj* : l'un des deux *NamCl*,*NamTr* [mais *NamTr* n'est pas utilisable en Fev 96]
*NamCl*  : se decompose en deux champs *Nam* - *Code* où *ClNam* est une suite d'au plus 5 Character Fortran
          et *Code* un integer Fortran; les deux champs etant separes par la copule : - .

********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
;
Familles Obligatoires :
=======================
La racine de l'arbre ZOOM est obligatoirement la famille unique : Zeus;
CREATE ZEUS;

CREATE UNIVERSE;

Autres familles :
=================

CREATE FM *NamFm* - *CodFm*;
  Instruction complete de creation d'une famille sous la famille courante;
  Elle y st reperee par un nom de quatre lettres au plus *NamFm*
  et un numero entier *CodFm* (Positif ou nul)

CREATE FM *NamFm*; 
  Equivalent a CREATE FM *NamFm* - 0;

CREATE FM=*ChFTNVar* - *CodFm*;
  permet de donner le *NamFm* encodé dans une variable caractere Fortran;

  exemples :
CREATE FM = SROSE(I);  ou
CREATE FM = SROSE(I)-J;  , avec SROSE(I) Variable_Fortran_CHARACTER*4;



Cellules :            Elles co-définissent la structure en étant explicitement placées sous une famille.
==========

Instruction complète : CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;
exemple :              Create Cl Mesh-1, Type = SURF;

Début de l'instruction spéecifiant le nom d'objet :

CREATE CL *NamCl* - *CodCl* 
  Creation d'une Cellule sous la famille courante;
  Elle y st reperee par un nom de quatre lettres au plus *NamCl*
  et un numero entier *CodCl* (Positif ou nul)

CREATE CL *NamCl*,            Equivaut a : CREATE CL *NamCl* - 0,

Fin d'instruction, associant un modele et eventuellement jusqu'a trois arguments entiers :

,TYPE=*ClProc*;              Le modele  associe a l'objet est le processeur de Type : *ClProc*;
                              (*ClProc* comportant au plus 5 alphanumeriques).

Les arguments ont pour valeur par defaut 1,-9,-9; pour en donner d'autres :
TYPE=*ClProc* I1 [,I2 [,I3]];

Complément :
CREATE N-CL ... crée une cellule dont le vecteur d'état restera à sa valeur initiale
(Conditions limites) equivalent a une creation normale, suivie de
FREEZE *NamCl* - *CodCl*;


********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
Deux types de créatons : naturelle ou imposée.

***********
Naturelle : c'est alors ZOOM/KER qui associera cet objet à une famille (la plus emboitée
*********** qui contienne l'ensemble des cellules connectées par ce transfert)

CREATE TR,TYPE=*TrProc* 1,-9,-9;
  Instruction complète de creation d'un Transfert associé au modèle *TrProc*
  avec trois entiers en argument - en l'occurence, leurs valeurs par defaut;
  (*TrProc* comportant au plus 5 alphanumeriques).
exemple Create Tr, Type = COND;
On remarque qu'il est impossible de donner un nom au transfert; il faut donc l instancier
complètement des sa creation.

;
Complément :
CREATE N-TR,TYPE=*TrProc*;
  Comme pour la cellule, cree un transfert fige; ses composantes garderont
  leur valeurs initiales (nulles par defaut) fixee par le Zinit.
*********
Imposée :
*********

CREATE-F TR  : au lieu de CREATE TR donne l'instruction a ZOOM de forcer le placement de ce transfert sous
               la famille courante;                    
CREATE-F+ TR : Crée un transfert forcé, non pas sous la famille courante, mais sous celle du dessus;
               (Il peut être utile pour trier entre deux Types de Transferts créés dans une même boucle
                - car connectés aux mêmes cellules);
CREATE-Z TR  : creation d'un transfert sous Zeus
CREATE-U TR  :     idem sous U
;
*** Dans ces derniers cas,l'utilisateur prend la responsabilité de le situer dans l'arbre ZOOM, soit pour
    tenter d'optimiser le découpage des matrices induit par la structure, soit pour
    étudier en sortie des couplages impliquant ce transfert.
    L'utilisateur doit connaitre les contraintes de structures pour le faire.
    ZOOM/KER signalera une erreur si ce transfert ne peut etre situé comme l'indique
    l'utilisateur.


Exemples  de récupèration des arguments :
.........................................

CREATE CL SURF, TYPE = VORTX 4,1,Jusers;
  Dans le IEntry, on récupère les valeurs:
  4 dans JZSIG 
  1 dans KZSIG(1)
 [Jusers] dans KZSIG(2)
;
CREATE TR, TYPE = HMIXL NCELL,2;  " ajout deuxieme argument et +"
  Dans le YEntry, on recupère les valeurs:
 [NCELL] dans JZTAU   ( comme toujours)
  1 dans KZTAU(1)

Rq. Ces deux tableaux sont initialisés à -9; Si on tente d'entrer trop d'arguments,
=== on ne transmet donc que ces valeurs à -9, ainsi qu un diagnostic in run.lis

********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************

Une famille ou une cellule bénéficient d'une marque *Name* - *Code*;
cette marque ne constitue pour ZOOM qu'une adresse dans la structure
 - en analogie avec un nom de directory ou de fichier dans une structure UNIX;
La conséquence est double :
 d'une part, la marque peut etre utilisee plusieurs fois dans des endroits distincts
 de la structure;
 d'autre part, elle ne suffit pas a identifier completement cet objet; il y  faut
 l'equivalent d'un "path" UNIX;
Le ZDL permet de donner un nom global a ce path (qui demarre sous Zeus) - comme un
"lien" UNIX :

SET *Name* = *ObjetDéjàCréé* ; l'objet courant (Cellule ou Famille) est marqué par
un nom UNIQUE cette fois-ci qui permet de le retrouver de toute situation courante
dans la structure.

Formes diverses :
=================
SET *Name(*Indice*) = *MarqueObj*;

SET *Name* == *MarqueObj;
  Le signe "==" est à utiliser lorsque la marque de l'objet a été encodée dans une
  variable Fortran CHARACTER*4;

exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
  Spécifie l'adresse complète pour la Cellule : Mur-4;
  (peut donc être définie hors structure);
Set Obj(3) = Mur-4;
  adresse équivalente à la précédente si la Fm courante est : Piece;



&'SET FM TYPE:#;'='SFT:#1;'

&'RESET #;'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);CALL OGRSVA(OINAM1);'

&'RESET #(#)'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGRSAR(OINAM1,(#2))'



********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2eme temps   : création d'un T-Plug sur un transfert;
3eme temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

C-Plug :
========
C-PLUG *NumPlg*:*VarList*;
  Création d'un C-Pug sous la Cellule courante;
 *NamPlug* : numero du plug de la cellule; une reference ulterieure
  sera faite par le groupement : (*NamCl*,*NumPlug*);
 *VarList* : Liste de numeros des composantes du vecteur d'Etat de l'objet;

T-Plug :
========
T-PLUG *NumPlug*:*VarList*;
  Création d'un T-Pug sous le Transfert courant;
 *NamPlug* : numéro du plug du transfert;
 *VarList* : Liste de numéros des composantes du vecteur de transfert;
exemples :
..........
C-Plug 1:1; C-Plug 3:1,3,5,7; C-Plug 2:1 thru 7; C-Plug n:n thru n+3;
;

Connection :
============
Join *NumPlug1* To *ClNam*,*NumPlug2*);
  Etablit une connection entre le C-Plug numero *NumPlu2* de la cellule
 *NamCl* et le T-Pug numero *NumPlug1* du transfert courant

forme abrégée : 
JOIN TO (*Cl/C-Plug*);                   Equivalent à : JOIN 1 TO (*Cl/C-Plug*);
JOIN *NumPlug* to (*NamCl*,);            Equivalent à : JOIN *NUmPlug* to (*NamCl*,1);
JOIN *NumPlug* to (CPlug1),(CPlug2)      Equivalent aux deux Join :
                               JOIN *NumPlug* to (CPlug1); JOIN *NumPlug* to (CPlug2);
exemples :

..........
JOIN 2 TO(Mesh-4,5);
JOIN 2 TO(Obj(3),2);
JOIN n TO(Mesh,);

JOIN 1 TO (Mesh(i)(Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
Création de T-Plug et connection contractée :
============================================
CONNECT TO(#,#)'='CONNECT 1 TO(#1,#2)'

CONNECT *VarList* TO (*CPlug*);     Effectue : T-PLUG 1:*VarList*; JOIN 1 TO (*CPlug*);

Type de T-Plug particulier :
============================

T-PROBE *PlugNum*;
  Création d'un T-Plug de *VarList* vide; S'utilise couramment pour
  la lecture passive (cad sans effet sur) d'une variable d'Etat du C-Plug connecté;
;

********************************************************************************
********* Déplacements dans la structure ***************************************
********* et modifications de la structure *************************************
********************************************************************************

Cette facilité est particulièrement appréciée lorsque que la structure de création d'objet
orientée par l'utilisation de Do loop Fortran ne satisfait pas à la structure d'emboitement
des familles choisies. La première structure est alors utilisée à la création en série des
objets (comme deux Do loop emboitées pour un maillage 2-D). Après création de la structure
d'arbre choisie, on déplace les objets de leur famille de création à celles où on veut
finalement les situer.

UNDER *FmNam* <   où *FmNam* est soit un nom d'objet accesible de la famille courante
                                 soit une adresse définie par SET,
                  définit cette famille comme la famille courante;

UNDER=*FmNam*<    même chose avec *FmNam* rangée dans une CHAR*4 Fortran variable;

>;                fermant un bloc logique Under ...< , la famille courante redevient celle
                  précédent l'instruction Under ...<;

Option supplementaire : creation d'une chaine lineaire de familles
UNDER 
&'$A$'='#U5#C#N;LZWF=LQ(LZWCN-3);LZWCN=LQ(LZWF-1);' "2-1"
&'$B$'='#U4GOTO #C;$A$'


UNDER #-#=#,#<'=
'#LB#S1#I#S4#I#S5;#2=#3;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGUNVA(OINAM1,#2,LZWF,LZWF);
 GOTO #I#C#S9;#U4#C#S4;#2=#2+1;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGUNVA(OINAM1,#2,LQ(LZWCN-3),LZWF);
#U9#C;IF(#2.GT.#4)GOTO #U5#C#S5;LZWCN=LQ(LZWF-1);'       "2-1"

UNDER=#-#<'='OCNAM1=#1;CALL OHL2I1(OCNAM1,OINAM1);
CALL OGFM(LZWF,LZWF,OINAM1,#2);
LZWCN=LQ(LZWF-1);#LA#S1#I#S5;'                      "2-1"

GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associe);
exemples : Get Mesh-4; Get Obj(3)
GET #(#);
GET #-#;
;
GET #=LOC(#)

GET #=LOC(#-#)

GET #=LOC(#(#))
;
Déplacement d'objets dans la structure :
========================================
&'MOVE # TO'='MOVE #1-(0)TO'
&'MOVE #(#)TO'='MOVE #1-(#2)TO'
&'MOVE #-# TO'='MOVE #1-(#2)TO'
;
&'MOVE #-(#)TO #;
;
MOVE #-(#)TO #-#;
;
MOVE #-(#)TO #(#);
;
MOVE #(#)TO=#-#;
;
Gel d'une cellule :
===================
Equivalente à Create N-Cl *NamCl*..., cette instruction gèle la cellule courante :
FREEZE *NamCl*;

********************************************************************************
******** Directives pour la récupération des Résultats et **********************
******** le redémarrage d'un Run ***********************************************
********************************************************************************

********************************************************************************
******** Directives pour sorties listing ***************************************
********************************************************************************

&';print_out # times every # steps'=';IPRSTP=#2;NPRSTP=#1;LPRSTP=1;'
&';paw_out # times every # steps'=';IPAW=#2;NPAW=#1;LPAW=1;'
&';print_out # times every step'=';IPRSTP=1;NPRSTP=1;LPRSTP=1;'
&';paw_out # times every step'=';IPAW=1;NPAW=1;LPAW=1;'
&';print_out once'=';print_out 1 times'
&';print_out twice'=';print_out 2 times'
&';print_out every'=';print_out 1 times every'
&';paw_out once'=';paw_out 1 times'
&';paw_out twice'=';paw_out 2 times'
&';paw_out every'=';paw_out 1 times every'
&';U_TITLE #;'=';OHTITLE=''#1'';'
&'RESUME FROM #;'='ZORESU=.TRUE.;OFNCL2=''#1'';ORINCN=-1;'
&'RESUME FROM #/#;'='ZORESU=.TRUE.;OFNCL2=''#1'';OFNTR2=''#2'';
 ORINCN=-1;ZORUTR=.TRUE.;'
&'RESUME FROM #,AT#;'='ZORESU=.TRUE.;OFNCL2=''#1'';ORINCN=#2;'
&'RESUME FROM #/#,AT#;'='ZORESU=.TRUE.;OFNCL2=''#1'';OFNTR2=''#2'';
 ORINCN=#3;ZORUTR=.TRUE.;'

********************************************************************************
******** Directives pour sorties VIZU ******************************************
********************************************************************************
********************************************************************************
+KEEP,ZDLMAP.
********************************************************************************
" TR MAP"
&'Z_OUT #(#);'=
&'Z_OUT #(#,#);'=
&'Z_OUT #(#,#,#);'=
&'Z_OUT #(#),#;'=
&'Z_OUT #(#,#),#;'=
&'Z_OUT #(#,#,#),#;'=
;
;  " CL MAP"
&'Z_OUT #(#)=#-#;'=
&'Z_OUT #(#,#)=#-#;'=
&'Z_OUT #(#,#,#)=#-#;'=
&'Z_OUT #(#)=#-#,#;'=
&'Z_OUT #(#,#)=#-#,#;'=
&'Z_OUT #(#,#,#)=#-#,#;'=
;
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,1,1);'
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#,YLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,#5,1);'
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#,YLEN=#,ZLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,#5,#6);'
;
;
********************************************************************************
+KEEP,ZDLOPT2.
********************************************************************************
!   Print_out,Paw_out et Zprint_out options Al1,10/02/93
!===================== print and steps definitions ==================
Cet ensemble d'instructions concerne la gestion des sorties gerees par Ker, d'une
part, et celles que chaque objet ou classes d'objets (processeur).
Le premier support est le "listing" ***_exe.run.lis (.lis);
le second constituant l'ensemble des fichiers binaires passés a VIZU (.dat)

SUPPORT .lis
============
***Sorties gerees par Ker identifiees par le mot : Print;   (routines OPTAU et OPETA)

extrait : pour les Cellules :
  STATE VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 CELL MESH   1 TYPE:    4  CL#:    1   Eta            Gamma          dEta          in FM (   1,   4)   Level:   3
                                    3.020000E+02   0.000000E+00   0.000000E+00
. . .
          pour les Transferts :

 > TRANSFER VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 >> FAM : (   1,   4) ,D= 3 <BOX -   1 >
 TYPE/DF      DELTA          PHI         -OMEGA        IN#     TR#  TYPE(2)/DC CL1  CL2 ...
  CDM     0.000000E+00 -1.250000E-01  0.000000E+00      1     1      10102     1    3 
. . .
          termine par :
 DZVERI --- end of time loop                                                                        OPTIONS : CLSU           OK   
>>>++> oK ( 0) Step Number:       1-Instant: 0.000000E+00+dTime: 2.500E+00 Step Interval:  6.567E+00   <<<<<<<<<

***Sorties gerees par les processeurs            : ZPrint;
exemple : Cellule MESH-43 traitee par le processeur CNDA ou sont programmee les instructions qui
impriment :
 **FROM:    CNDA, CL: MESH-  43 OF CLASS: CNDA  
   ABt_TV(1,1) = -0.1250000  NTrCode = 10102
  {Mac_Edge} ABt_TV(1,1),SumFiT,-2.*RSign*ABtMac*Fi_TV(1) :
     0.1250000 0.0000000 0.0000000
   ABt_TV(1,1) = 0.1250000  NTrCode = 202029300
   Gamma(1) = 0.0000000  fro_zen = 0  StFlag = F

exemple : Transfert traite par le processeur TCDM ou sont programmee les instructions qui
impriment :
 **FROM:    TCDM ,TR OF CLASS: TCDM   (1ST CONNECTED CELL: MESH-  16)
    Ct_SV(1,1) :
     1.000000
  {on Dcplg} D_TV(1,1),Psi_macro_Edge :
     0.5000000 0.0000000
  {on M_Cell} D_TV(1,1) :
     1.000000
    FI(1),Omega(1),T_Edge(1),T_Edge(2) :
     0.0000000 0.0000000 300.0000 0.0000000

Remarque : ces sorties sont imprimees dans l'ordre ou les processeurs sont appeles par Ker,
cet ordre heritant de la place de l'objet qu'ils traitent dans l'arbre ZOOM.

SUPPORT .dat
============
Elles sont entierement gerees par Ker suivanbt les informations fournies par Zinit
et les processeurs;    identifiees par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a ete programme VIZU.

STRUCTURE GENERALE DES INSTRUCTIONS
===================================
les Fm de profondeur au plus egale a mxdeep.
Les instructions fonctionnent selon trois regles :

1/ on fixe les valeurs par defaut en tête de ZINIT
2/ on specifie une commande hors defaut par objet (Cellule ou Transfert) si necessaire
3/ si on prefere globaliser ces instructions par famille, on peut le faire lorsque
   l'arbre ZOOM a ete instancie,cad apres le CALL OFRAME;
Enfin, la frequence des sorties sont gere par les instruction
 "print_out" pour .lis; "paw_out" pour .dat;
(Les sorties .lis sont gerees par Print_out seulement, et appliquees a ZPrint)

1/ DEFAUTS
Zprint_options:
   Default=none Cl,none Tr,none Fm;
![ equivalent a Zprint_options: Default=none; ]
Print_options:
   Default=none;
[ Paw_options:  Default=all; ] au mois de Fevrier 96, les options pour Paw ne sont pas implementees,
cad que tous les resultats disponibles sont sortis a al frequence donnee par Paw_out)

L absence totale de ces options equivaut a une sortie complete de tous les objets de l'arbre, cad a :
Zprint_options:
   Default=all Cl,all Tr,all Fm;
[ equivalent a Zprint_options: Default=all; ]
Print_options:
   Default=all;

2/ POUR CHAQUE OBJET  CREE
L'instruction :    ZPrint_Tr; ou    ZPrint_Cl; precise au processeur concerne que le dernier objet
Tr ou Cl cree sera a imprimer.
De meme pour Print_Cl ou _Tr par Ker;
A l'inverse :
Print_not_Cl; et : Zprint_not_Tr; suppriment un eventuel defaut requerant l'impression;

Remarque; On peut toujours differer ces instruction par la sequence :
GET *AddObj*; Zprint_CL;

3/ GLOBALISATION DES DIRECTIVES :

a la fin de ZINIT, apres l'instruction qui instancie l'arbre ZOOM :
CALL OFRAME  ;

!  FM referenced output options. EXEMPLES :
sorties de KER :
Print top Cl of Fm: U;                 Eta,Gamma dEta des Cellules immediatements sous Fm : U;
Print all Cl of Fm: U;                                des Cellules des familles U et sous U jusqu'en bas
Print all Tr of FM : PIEC-1;           Fi,DElta et Omega des Tranferts du sous-arbre des familles de
                                       racine la Fm : PIEC-1;
Print all of Fm: Z;                    sans precision du type d'objet, les deux (Cl et Tr) sont concernes.


Zprint all Cl of Fm: PIEC-1;           le sprocesseurs traitant les Cl du sous arbre precedent doivent imprimer.
Zprint all of Fm: Z;                    sans precision du type d'objet, les deux (Cl et Tr) sont concernes.


COMPLEMENTS
===========
*/ Pour la programmation des processeurs :
------------------------------------------
Instructions heritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;
explication : (LCL) correspond a un objet, un flag logique est attache a cet objet qui donne la valeur .TRUE.
a l'operande du "if"; Voir les manuels de Processeur ZBM pour plus de details.

*/ Fixation d'un niveau d'impression par les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1]
                                    (1<2<3 etc : plus le niveau est eleve, plus on imprime.)
Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >
explication : on n'imprime que si le niveau [premier argument, ici 1] est au plus egal au seuil fixe dans ZINIT.

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus egales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot. Exemple :
                         SCATTER PLOT OF MATRIX BLOCKS UNDER FAMILY Z   - 0

     COL #   1  ROW #   1
 --------------------------------------------------EMAX=0.572023E-01   AT   4,  4-------------------------------
      12345
   1 I  8. I  1
   2 I  .8 I  2
   3 I  9. I  3
   4 I  .* I  4
   5 I     I  5
      12345
 ---------------------------------------------------------------------------------------------------------------

dans ZINIT : mxdeep = 2;  La valeur nulle entraine l'impression de toutes les profondeurs.

2/PAR OBJET (ici des Familles)
Zpr_fm;               sortie du scatter plot de la derniere Famille cree.
Zprint_not_Fm;        supprime  la sortie par defaut eventuelle.

3/APRES OFRAME
Print top Mx of Fm : PIEC-1;
 Print all Mx of Fm : TROM;

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
a la racine susdite [ici TROM].

*/ Gestion particuliere aux calculs correspondants a la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces details d'impressions dans :
                                $ZOOM/Help/Programmers/Ker/D_Loop <

Note : pour les details concernant le tableau OZPlvl cf :
                               $ZOOM/Help/Users/Combined_Facilities/Print_levels  <


PRINT_OUT TWICE EVERY 10 STEPS;
PAW_OUT ONCE EVERY 5 STEPS; 


ZOOM general Info
=================

Il est possible de recuperer les infos generales sur votre
run dans les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 carateres de titre intitialise a  ORNAME  ORVERS  OZINDA  OZINTI 

pour l'utiliser mettre une fois pour toutes dans votre patch ZINIT_CDE
le deck $OGENTIT. qui doit contenir:

+KEEP,OGENTIT.
&F;
      CALL UHTOC (
+SEQ,QFTITLE,N=62.
     +         ,62,OTITLE,62)
      OTITLE = SPACES(OTITLE,1)
      CALL GETSCH(OTITLE,' ',' ',1,ORNAME,NCH)
      CALL GETSCH(OTITLE,' ',' ',2,ORVERS,NCH)
      CALL GETSCH(OTITLE,' ',' ',3,OZINDA,NCH)
      CALL GETSCH(OTITLE,' ',' ',4,OZINTI,NCH)
+SELF,IF=APOLLO.
      PRINT *, 'Executed on APOLLO machine'
+SELF,IF=HPUX.
      PRINT *, 'Executed on HP700 machine'
+SELF,IF=IBMRT.
      PRINT *, 'Executed on IBM RS6000 machine'
+SELF,IF=CRAY.
      PRINT *, 'Executed on a CRAY machine'
+SELF.
&M;


dANS ZINIT EXEMPLE

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple

...

+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;

Ces variables seront passees a VIZU dans un avenir proche
 
la variable DTIMEBY2 est initialisee dans ZOOM apres call zsteer


Pour VIZU
=========

U_TITLE Two Families with a Schwartz-like interfacing;

mettra ce titre general sur tous vos dessins
(autre source)
 De Zinit, on peut définir des niveaux de diagnostics, vérifs et print_out,
en affectant des valeurs entières au tableau: OZPLVL(12).
                          (Cependant, le mot 6 gère les fichiers pour viZu)
 La valeur nulle supprime les print ou vérif.
   ( le méta signe "*" indique un ET logique avec d'autres symboles, )

          OZPLVL( ):              =: (D):=Default
                                  (=0 supprime toute sortie dans la rubrique.)

                 1  Structure info
                                  =1 (D) tree.hlp
                                  =2     interfaces  * ZPRINT(LFm)
                                  =3     Cl et Tr Cx * ZPRINT(LCl/Tr)
routines concernees: ( DOPLUG, OW2PAW, OSK2HP )

                 2  Processeurs (Géré par Users)
                                  =1 (D)
                                  =any
                     exemple: in Zinit OZPLVL(2)=3; ( Print out level 3)
                              in Processors :
                                 IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>
                                 il génère IF ZPRINT.and.k.ge.OZPLVL(2) <>

                 3  in D_loop
                                  =1 (D) Sorties à TOL ok * MxDeep * ZPRINT(LFM)
                                  =2     all-along Loop infos    id
                     ( OUPEQ, ZOOM )

                 4  Step_Advance (Mx_only)
                                  =1     Scatter plot only
                                  =2 (D) Full Mx * MxDeep * ZPRINT(LFM)
                     ( MOVUP, ZOOM )

                 5  Sortie console (ou ..._batch.err)
                                  =1 (D) Step end
                                  =2     fin D_loop
                                  =3     some more, for very long jobs.
                     ( ZOOM )

                 6  Sorties pour viZu 
                                  =-1    Supprime tout
                                  =0     ne supprime que la CDFile
                           Si positif ou nul:                   >>>>>>(en développement le 16/05/94)
                                  =1[modulo10] Héra Mx only(not implemented)
                                  ( => 1 ne supprime que la MXMX )
                                  =2 (D)       MXMX full
                                  =...+10      MZMX = [MXMX]-1 (pour post-traitement à la Bianco)
                                  =...+100     MDMX(MXMX à la sortie du D_Loop)
                     ( OPSCMX,OEQU,MOVUP,DZSPMX )

                 7  Vérif info et mémoire
                                  =1     Un DZVeri par step et DZSTORE au premier step et final
                                  =2 (D) DZVeri at end of EOLMAX
                                         DZStore after Zinit
                                  =3     some more DZSTORE (Very long jobs)
                                  =9     Debug option: some more DZVERI (in ZOOM,OICLTR)
                                         (even if not.ZPRINT.)
                     ( OUPEQ, MOVUP, ZOOM )

                 8  Matrix infos
                                  =1 (D)Tridiag message * MxDeep&ZPRINT(LFM)
                                  =2    Conditionnement (not implemented)
                     ( ORES )

                 9  Choix d'une version de Ker
                                  =1 (D)Version proxima
                                  =2 Version futura (F_ et V_ entries). Tr bit flags.
                                     ( not implemented )
                     ( ONCO, ONUMA, OTRDA, OCMX, OF2MXT )

  Les OZPLVL(9-12) sont réservées aux programmeurs du noyau.  =1 (D)

ADDITIONS
=========
vendredi 29/04/1994:      MDMX option.

********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********************************************************************************

********************************************************************************
********* Initialisation et attribution de valeurs aux Parametres **************
********************************************************************************
! =====================================================================
! ========> macro pour l'affectation des parametres dans Zinit <=======
! =====================================================================

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
avec :
   Var_Name : * Nom de la variable dans le bank CD (ou TD) (Case insensitif)
   Var_Type : * I ou R (optionel)
              * Type de la variable. Si le type n'est pas precise, on suit la
              convention FORTRAN (entier de I-N, reel sinon) de la variable Var_Name.
              * Si ce type ne correspond pas a celui de Var_Name lors de sa
              declaration dans le CD ou TD bank, on envoie une bordee d'insultes
              et on n'ecrit pas dans la variable
   i et j   : * Valeur des indices. On verifie qu'il n'y a pas de depassement.
              Meme supplice que precedemment en cas d'heresie ou de tentative
              quelconque de ne pas suivre La Norme.
Il est exclu d'ecrire dans une link_var ou dans une variable utilisee pour
dimensionner des tableaux.

 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remarque générale pour le remplissage Eta, Fi TD_bank et CD_bank:
=================================================================

Le block < .... > est un block standard MORTRAN: toute opération y est donc
possible. Par exemple, fill_Fi< [1 thru 12] = Fi_zero; >; pourrait s'écrire:
     fill_Fi< <I=1,12; [I] = Fi_zero; > > ;

Remplissage des variables ( Eta ou Fi )
=======================================

1) En spécifiant chaque numero de composantes du vecteur (_Eta ou _Fi):

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"

remarque:  error ou Warning si on tente de déborder des dimensions déclarées
---------  dans le processeur .

2) Initialisation de tout le vecteur

     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"

3) Initialisation implicite par liste:

     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >
        a pour consequences:
                   Eta(1) = T_ref;
                   Eta(2) = Vx_surface;
                   Eta(3) = Vy_surface;
                   Eta(4) = Sel_conc;
                   Eta(5) = Ro_eau;
        Verifications de débordement et Warning si le vecteur n ' est pas
      entièrement initialisé.
********************************************************************************
******** Autres Instructions utiles ********************************************
********************************************************************************
DIMENSION:#,#;'=' &''(##:##)''=''##L ##S8(##1+NZZ1*@(##2-1))''


&'*@(#)'='#U8*(#1)'


&'*@(#:#)'='#U8#A1#S8*(#1-1+NZZ#C*@(#2))'
Execute Procedure;
DO ((J=1,NL),I=1,NC)
"             num.max.de liaisons=JZSIG=8 (4 PSI+4 VORTX)"
< CREATE CL MESH-(I:J),TYPE=VORTX 8; "Entry IVORTX"
    C-PLUG 1:1,2,3,4; C-PLUG 2:1,2,3,4;
    C-PLUG 3:1,2,3,4; C-PLUG 4:1,2,3,4;"VorticitÉ 4 faces"
    SET MESH(I:J) = MESH-(I:J);
   Tinit=T_infini; Execute MESH_Fill;
    Z_OUT CL01(I,J)=MESH-(I:J); " Mapping"
   IF J.eq.NL/2 .and. I.eq.nc/2 < ZPrint_CL; >;
>
.......
PROCEDURE MESH_Fill
<  Fill_Eta < [2] = Tinit ; [3] = RO_AIR; [4] = RO_AIR; >
   flat = 0.;
   Fill_CD
   < [Air_Eau]:i    = 1;  "Air"
     [lat_itude]:r  = rlat;
     [long_itude]:r = delta_long*float(I);
     [f_lat]:r      = flat;
     [Nb_faces]:i   = 4;   "Carres"
     [t_side]:r     = DX;  " should .eq. DY"
     [Lo_up]:i      = Lo_up;
     [delta_z]:r    = DZ;
     [D_centre]:r   = DX/2.;
     [Ro_fluid]:r   = Ro_air;
     [frozen(4)]:i  = 1; "Cancel Temp. dependant parameters computation"
     [gy_Archimede]:r=0.;
     [Cp_fluid]:r   = Cp;
     [G_cond(1)]:r  = viscosite;
     [G_cond(2)]:r  = conduct/Cp;
     [G_cond(3)]:r  = .1*conduct;  "Salinity diffusion"
   >
>
;


Utilisation du point d'entree ZSTEER
====================================
**************************************************************************
*************************** RESUME FROM **********************************
***************************** Al1 mardi 23/02/1993 *********************** 
**************************************************************************


  Il s agit de la reprise d un run par initialisation a partir d un fichier
de sorties d un run precedant (qui aura evntuellement pu etre tue).
  L' initialisation ne sera faite qu a partir des etats des Cellules non gelees.

--  on commence par changer le nom de OZDAT.CL en y ajoutant un seul caractere:
     ex: OZDAT.CL1
-- Dans ZINIT, vers les print out every step, on ajoute l' instruction:

   RESUME FROM OZDAT.CL1, at IT; ou RESUME FROM OZDAT.CL1;
   L' initialisation sera alors faite a partir, soit du dernier vecteur d etat,
soit a partir de la ITieme sortie.

Remarques:
**********
*     Il est clair que la structure ZINIT doit etre la meme pour ce qui concerne
les cellules (sinon diagnostic et STOP 'RESUME')
      Il est cependant possible de geler ou dégeler des cellules par rapport au
run de reference, d'enlever des D_Mx flag a certains transferts ...voir même de
modifier complètement les transferts - au risque de l'utilisateur.
(cette option est cependant interdite dans le cas d'utilisation de Pseudo_Cell Tr
qui exigent une initialisation et doivent donc se retrouver dans une meme structure
de Transferts.

*     On peut utiliser une procédure analogue pour sortir la matrices sous Zeus
en faisant varier le pas de temps. L exemple suivant, de JLD, le fait en un seul
run, en arrêtant la progression dans le temps à NbItStop (Inc Nb), et calcule
NbItMx matrices en incrémentant DTIME (dtMx).
      Les flags ZPAW et ZENDRN(end_run) déclenchent une sortie pour Visu et la fin
de run.


!======================== Zsteer possibility =====================
ENTRY ZSTEER;
!
if NbItMx.eq.0
< if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "si dernier passage"
>else "si analyse matrice de couplage"
< if (istep.ge.NbItStop)
  < if (istep.ge.(NbItStop+NbItMx))
    < ZENDRN =.true.; >     "si dernier passage"
! pour faire l'equivalent de  resume from OZDAT.CL4;
    call ORESUME(LZ);  " !! time modifier "
    if (istep.eq.NbItStop)
    < IstepMx = 1;
      dtime = dtMx;
    > else
    < IstepMx = IstepMx+1;
      dtime = dtime + dtMx;
    >
    time = dtime ;   " Ceci permet d avoir dans visu la variation des coefs(dtime)"
    ZPAW = .true. ;
  >else< ZPAW=.false.;>
>
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="


*   On pourrait tout aussi bien partir d un precedant run et construire la matrice(dTMx)
sans l' option NbItStop qui serait remplacee par RESUME From OZDAT.CL1, at NbItStop

********************************************************************************
******** Parametres du Run *****************************************************
********************************************************************************
TYPES de fonctionnements Stationnaire ou Dynamique;
Gestion de l'incrément. Arret.
dtime; timax;

Special matrices D
==================

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_Dictionnary.Obsolete.bak
********************************************************************************
********************************************************************************
******* Dictionnaire des instructions du ZOOM DESIGN LANGUAGE ******************
********************************************************************************
********************************************************************************
 (remarque de redaction : apres manuelisation via TPS, repartir en fichiers
                     et chapeauter d'un texte court a cliquer)

********************************************************************************
******** Préliminaires pour faciliter l'utilisation du dictionnaire ***********
********************************************************************************

Le ZDL est un language programmable et permet l'utilisation des instructions Fortran ou
Mortran de base.
L'interpretation de Zinit donnera une Subroutine ZINIT avec un point d'entree ZSTEER.
La subroutine est appellée une seule fois en tout début du Run. ZSTEER est appelé
à chaque nouvel incrément (temporel en dynamique ou itération en stationnaire).
Remarque : la notion de language interprèté génèrant une routine éxécutable peut mener
à des difficultés de compréhension des contingences d'écriture; en cas d'ambiguité, nous
préciserons dans le texte les notions : d'avant - après, en les qualifiant de :
séquencielles : il s'agit alors d'ordre des instructions elles-memes dans le corps du Zinit;
a l'éxécution : il s'agit alors de l'ordre dans lequel ont été éxécutées les instructions;
La différence entre les deux étant d'autant plus grande que les instructions de déroutage
du Fortran seront nombreuses (programmation dite "spaghetti"). Notons au passage que de nombreuse
instructions et blocs logiques Mortran permettent de structurer le corps du programme
(Do while, Until, Case, if then else etc).



Fonctions du Zinit :
====================

Il a pour premier but de créer la structure dite de l'Arbre ZOOM, qui est constituée
d'un emboitement de FAMILLES ayant des objets terminaux dites CELLULES.
On remarquera qu'il s'agit de créer un programme créant une structure et non de
décrire de manière déclarative cette structure; cela permet en particulier une grande
souplesse, puisqu'on peut alors :
utiliser des boucles pour creer des structures repetitives, des emboitements, etc;
programmer sa modification apres création (cf MOVE, GET, FREEZE);
appeler des procedures de creations/instanciations communes a plusieurs objets;

Ensuite de relier les cellules à des TRANSFERTS (ou par des transferts : deux facons de dire 
et de faire mais une seule meme structure creee).

Il doit - à chaque création de transfert ou cellule - associer un MODèLE a l'objet créé
(TYPE=); chaque instruction CREATE constitue donc une instanciation (d'un objet à partir
d'un modele) il s'y associe donc l'attribution de valeurs numériques à certains
paramètres libres du modèle et, pour les cellules uniquement (de manière obligatoire)
une initilisation du vecteur d'état (ETA).
UNe partie plus subtile de l'instanciation concerne leur insertion dans une structure :
celle ci heritera des connections entre objets (C-PLUG T-PLUG, CONNECT, JOIN TO)

Enfin, une tache (plus classique) est d'attribuer des valeurs aux paramétres du Run :
gestion de l'incrément temporel, des niveaux et fréquence de sauvegarde des résultats
de calculs, redemarrage de run etc.

Ecriture du Zinit :
===================

Deux types de blocs logiques sont utilisés dans ce language.
Le bloc standard de Mortran - emboitable - <;>, associé aux instructions NEXT; et EXIT;
 il est ici mis a profit pour décrire la structure emboitée des cellules/familles.
=> cela donne un sens fort à la structure, puisqu'un bloc logique n'a d'existence que
SITUÉ dans la structure;
Un bloc implicite qui détermine une adresse courante dans la structure; tout attribut
sous forme de symbole Fi Eta [Paramètre] est attribué à l'objet courant de même
nature : famille, cellule ou transfert tant qu'une instruction n'en change;

instructions changeant l'objet courant :
----------------------------------------
under<                               change de Famille courante (celle sous laquelle seront
                                     places les familles ou cellules suivante);
     >;                              ferme le bloc logique precedent et restore la famille
                                     courante sequenciellement precedente;
create CL, get *ClNam* ;             change de Cellule courante;
create TR;                           change de Transfert courant

Métasymboles utilisés :   *NamObj*   pour nom d'objet a choisir par l'utilisateur.
======================    {*Valeur*} Valeur optionnelle.
                          " texte "  tout texte entre " " (symbole des commentaires Mortran)
                                     est hors ZDL.
                     |Instruction| : permet d'identifier une instruction dans un texte (ou un mot
                                     réservé du ZDL).
                          remarque : ces meta symboles ne seront utilises que s'il y a ambiguite.

Vocabulaire :
=============
Bloc logique              : voir plus haut (<;>).
Position courante         : voir plus haut.
Instructions spécifiques  : certaines instructions qui ne peuvent etre utilisées
                            que dans certains blocs logiques (cf Fill_CD<;);

Liste des Métasymboles utilisés :
=================================
*NamFm*
*NamCl*
*NamObj*
*AddObj*
*Name*
*Marque*    a remplacer par *AddObj*
*ChFTNVar*
*Code*
*NumPlug*
*VarList*: une liste d'integers Fortran; syntaxe : (int1,int2,int3,etc)
    Ameliorer :
*Name*   : l'un des deux *NamFm*,*NamObj*
*NamObj* : l'un des deux *NamCl*,*NamTr* [mais *NamTr* n'est pas utilisable en Fev 96]
*NamCl*  : se decompose en deux champs *Nam* - *Code* où *ClNam* est une suite d'au plus 5 Character Fortran
          et *Code* un integer Fortran; les deux champs etant separes par la copule : - .

********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
;
Familles Obligatoires :
=======================
La racine de l'arbre ZOOM est obligatoirement la famille unique : Zeus;
CREATE ZEUS;

CREATE UNIVERSE;

Autres familles :
=================

CREATE FM *NamFm* - *CodFm*;
  Instruction complete de creation d'une famille sous la famille courante;
  Elle y st reperee par un nom de quatre lettres au plus *NamFm*
  et un numero entier *CodFm* (Positif ou nul)

CREATE FM *NamFm*; 
  Equivalent a CREATE FM *NamFm* - 0;

CREATE FM=*ChFTNVar* - *CodFm*;
  permet de donner le *NamFm* encodé dans une variable caractere Fortran;

  exemples :
CREATE FM = SROSE(I);  ou
CREATE FM = SROSE(I)-J;  , avec SROSE(I) Variable_Fortran_CHARACTER*4;



Cellules :            Elles co-définissent la structure en étant explicitement placées sous une famille.
==========

Instruction complète : CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;
exemple :              Create Cl Mesh-1, Type = SURF;

Début de l'instruction spéecifiant le nom d'objet :

CREATE CL *NamCl* - *CodCl* 
  Creation d'une Cellule sous la famille courante;
  Elle y st reperee par un nom de quatre lettres au plus *NamCl*
  et un numero entier *CodCl* (Positif ou nul)

CREATE CL *NamCl*,            Equivaut a : CREATE CL *NamCl* - 0,

Fin d'instruction, associant un modele et eventuellement jusqu'a trois arguments entiers :

,TYPE=*ClProc*;              Le modele  associe a l'objet est le processeur de Type : *ClProc*;
                              (*ClProc* comportant au plus 5 alphanumeriques).

Les arguments ont pour valeur par defaut 1,-9,-9; pour en donner d'autres :
TYPE=*ClProc* I1 [,I2 [,I3]];

Complément :
CREATE N-CL ... crée une cellule dont le vecteur d'état restera à sa valeur initiale
(Conditions limites) equivalent a une creation normale, suivie de
FREEZE *NamCl* - *CodCl*;


********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
Deux types de créatons : naturelle ou imposée.

***********
Naturelle : c'est alors ZOOM/KER qui associera cet objet à une famille (la plus emboitée
*********** qui contienne l'ensemble des cellules connectées par ce transfert)

CREATE TR,TYPE=*TrProc* 1,-9,-9;
  Instruction complète de creation d'un Transfert associé au modèle *TrProc*
  avec trois entiers en argument - en l'occurence, leurs valeurs par defaut;
  (*TrProc* comportant au plus 5 alphanumeriques).
exemple Create Tr, Type = COND;
On remarque qu'il est impossible de donner un nom au transfert; il faut donc l instancier
complètement des sa creation.

;
Complément :
CREATE N-TR,TYPE=*TrProc*;
  Comme pour la cellule, cree un transfert fige; ses composantes garderont
  leur valeurs initiales (nulles par defaut) fixee par le Zinit.
*********
Imposée :
*********

CREATE-F TR  : au lieu de CREATE TR donne l'instruction a ZOOM de forcer le placement de ce transfert sous
               la famille courante;                    
CREATE-F+ TR : Crée un transfert forcé, non pas sous la famille courante, mais sous celle du dessus;
               (Il peut être utile pour trier entre deux Types de Transferts créés dans une même boucle
                - car connectés aux mêmes cellules);
CREATE-Z TR  : creation d'un transfert sous Zeus
CREATE-U TR  :     idem sous U
;
*** Dans ces derniers cas,l'utilisateur prend la responsabilité de le situer dans l'arbre ZOOM, soit pour
    tenter d'optimiser le découpage des matrices induit par la structure, soit pour
    étudier en sortie des couplages impliquant ce transfert.
    L'utilisateur doit connaitre les contraintes de structures pour le faire.
    ZOOM/KER signalera une erreur si ce transfert ne peut etre situé comme l'indique
    l'utilisateur.


Exemples  de récupèration des arguments :
.........................................

CREATE CL SURF, TYPE = VORTX 4,1,Jusers;
  Dans le IEntry, on récupère les valeurs:
  4 dans JZSIG 
  1 dans KZSIG(1)
 [Jusers] dans KZSIG(2)
;
CREATE TR, TYPE = HMIXL NCELL,2;  " ajout deuxieme argument et +"
  Dans le YEntry, on recupère les valeurs:
 [NCELL] dans JZTAU   ( comme toujours)
  1 dans KZTAU(1)

Rq. Ces deux tableaux sont initialisés à -9; Si on tente d'entrer trop d'arguments,
=== on ne transmet donc que ces valeurs à -9, ainsi qu un diagnostic in run.lis

********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************

Une famille ou une cellule bénéficient d'une marque *Name* - *Code*;
cette marque ne constitue pour ZOOM qu'une adresse dans la structure
 - en analogie avec un nom de directory ou de fichier dans une structure UNIX;
La conséquence est double :
 d'une part, la marque peut etre utilisee plusieurs fois dans des endroits distincts
 de la structure;
 d'autre part, elle ne suffit pas a identifier completement cet objet; il y  faut
 l'equivalent d'un "path" UNIX;
Le ZDL permet de donner un nom global a ce path (qui demarre sous Zeus) - comme un
"lien" UNIX :

SET *Name* = *ObjetDéjàCréé* ; l'objet courant (Cellule ou Famille) est marqué par
un nom UNIQUE cette fois-ci qui permet de le retrouver de toute situation courante
dans la structure.

Formes diverses :
=================
SET *Name(*Indice*) = *MarqueObj*;

SET *Name* == *MarqueObj;
  Le signe "==" est à utiliser lorsque la marque de l'objet a été encodée dans une
  variable Fortran CHARACTER*4;

exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
  Spécifie l'adresse complète pour la Cellule : Mur-4;
  (peut donc être définie hors structure);
Set Obj(3) = Mur-4;
  adresse équivalente à la précédente si la Fm courante est : Piece;



&'SET FM TYPE:#;'='SFT:#1;'

&'RESET #;'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);CALL OGRSVA(OINAM1);'

&'RESET #(#)'='OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGRSAR(OINAM1,(#2))'



********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2eme temps   : création d'un T-Plug sur un transfert;
3eme temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

C-Plug :
========
C-PLUG *NumPlg*:*VarList*;
  Création d'un C-Pug sous la Cellule courante;
 *NamPlug* : numero du plug de la cellule; une reference ulterieure
  sera faite par le groupement : (*NamCl*,*NumPlug*);
 *VarList* : Liste de numeros des composantes du vecteur d'Etat de l'objet;

T-Plug :
========
T-PLUG *NumPlug*:*VarList*;
  Création d'un T-Pug sous le Transfert courant;
 *NamPlug* : numéro du plug du transfert;
 *VarList* : Liste de numéros des composantes du vecteur de transfert;
exemples :
..........
C-Plug 1:1; C-Plug 3:1,3,5,7; C-Plug 2:1 thru 7; C-Plug n:n thru n+3;
;

Connection :
============
Join *NumPlug1* To *ClNam*,*NumPlug2*);
  Etablit une connection entre le C-Plug numero *NumPlu2* de la cellule
 *NamCl* et le T-Pug numero *NumPlug1* du transfert courant

forme abrégée : 
JOIN TO (*Cl/C-Plug*);                   Equivalent à : JOIN 1 TO (*Cl/C-Plug*);
JOIN *NumPlug* to (*NamCl*,);            Equivalent à : JOIN *NUmPlug* to (*NamCl*,1);
JOIN *NumPlug* to (CPlug1),(CPlug2)      Equivalent aux deux Join :
                               JOIN *NumPlug* to (CPlug1); JOIN *NumPlug* to (CPlug2);
exemples :

..........
JOIN 2 TO(Mesh-4,5);
JOIN 2 TO(Obj(3),2);
JOIN n TO(Mesh,);

JOIN 1 TO (Mesh(i)(Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
Création de T-Plug et connection contractée :
============================================
CONNECT TO(#,#)'='CONNECT 1 TO(#1,#2)'

CONNECT *VarList* TO (*CPlug*);     Effectue : T-PLUG 1:*VarList*; JOIN 1 TO (*CPlug*);

Type de T-Plug particulier :
============================

T-PROBE *PlugNum*;
  Création d'un T-Plug de *VarList* vide; S'utilise couramment pour
  la lecture passive (cad sans effet sur) d'une variable d'Etat du C-Plug connecté;
;

********************************************************************************
********* Déplacements dans la structure ***************************************
********* et modifications de la structure *************************************
********************************************************************************

Cette facilité est particulièrement appréciée lorsque que la structure de création d'objet
orientée par l'utilisation de Do loop Fortran ne satisfait pas à la structure d'emboitement
des familles choisies. La première structure est alors utilisée à la création en série des
objets (comme deux Do loop emboitées pour un maillage 2-D). Après création de la structure
d'arbre choisie, on déplace les objets de leur famille de création à celles où on veut
finalement les situer.

UNDER *FmNam* <   où *FmNam* est soit un nom d'objet accesible de la famille courante
                                 soit une adresse définie par SET,
                  définit cette famille comme la famille courante;

UNDER=*FmNam*<    même chose avec *FmNam* rangée dans une CHAR*4 Fortran variable;

>;                fermant un bloc logique Under ...< , la famille courante redevient celle
                  précédent l'instruction Under ...<;

Option supplementaire : creation d'une chaine lineaire de familles
UNDER 
&'$A$'='#U5#C#N;LZWF=LQ(LZWCN-3);LZWCN=LQ(LZWF-1);' "2-1"
&'$B$'='#U4GOTO #C;$A$'


UNDER #-#=#,#<'=
'#LB#S1#I#S4#I#S5;#2=#3;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGUNVA(OINAM1,#2,LZWF,LZWF);
 GOTO #I#C#S9;#U4#C#S4;#2=#2+1;OCNAM1=''#1'';CALL OHL2I1(OCNAM1,OINAM1);
CALL OGUNVA(OINAM1,#2,LQ(LZWCN-3),LZWF);
#U9#C;IF(#2.GT.#4)GOTO #U5#C#S5;LZWCN=LQ(LZWF-1);'       "2-1"

UNDER=#-#<'='OCNAM1=#1;CALL OHL2I1(OCNAM1,OINAM1);
CALL OGFM(LZWF,LZWF,OINAM1,#2);
LZWCN=LQ(LZWF-1);#LA#S1#I#S5;'                      "2-1"

GET *NamCl*;
  Définit *NamCl* comme la cellule courante;
  Cette instruction permet par exemple de séparer fonctionnellement la programmation de
  la création d'une structure ZOOM de celle qui instancie les cellules (initialisation
  d'Eta et valeurs aux paramètres du processeur associe);
exemples : Get Mesh-4; Get Obj(3)
GET #(#);
GET #-#;
;
GET #=LOC(#)

GET #=LOC(#-#)

GET #=LOC(#(#))
;
Déplacement d'objets dans la structure :
========================================
&'MOVE # TO'='MOVE #1-(0)TO'
&'MOVE #(#)TO'='MOVE #1-(#2)TO'
&'MOVE #-# TO'='MOVE #1-(#2)TO'
;
&'MOVE #-(#)TO #;
;
MOVE #-(#)TO #-#;
;
MOVE #-(#)TO #(#);
;
MOVE #(#)TO=#-#;
;
Gel d'une cellule :
===================
Equivalente à Create N-Cl *NamCl*..., cette instruction gèle la cellule courante :
FREEZE *NamCl*;

********************************************************************************
******** Directives pour la récupération des Résultats et **********************
******** le redémarrage d'un Run ***********************************************
********************************************************************************

********************************************************************************
******** Directives pour sorties listing ***************************************
********************************************************************************

&';print_out # times every # steps'=';IPRSTP=#2;NPRSTP=#1;LPRSTP=1;'
&';paw_out # times every # steps'=';IPAW=#2;NPAW=#1;LPAW=1;'
&';print_out # times every step'=';IPRSTP=1;NPRSTP=1;LPRSTP=1;'
&';paw_out # times every step'=';IPAW=1;NPAW=1;LPAW=1;'
&';print_out once'=';print_out 1 times'
&';print_out twice'=';print_out 2 times'
&';print_out every'=';print_out 1 times every'
&';paw_out once'=';paw_out 1 times'
&';paw_out twice'=';paw_out 2 times'
&';paw_out every'=';paw_out 1 times every'
&';U_TITLE #;'=';OHTITLE=''#1'';'
&'RESUME FROM #;'='ZORESU=.TRUE.;OFNCL2=''#1'';ORINCN=-1;'
&'RESUME FROM #/#;'='ZORESU=.TRUE.;OFNCL2=''#1'';OFNTR2=''#2'';
 ORINCN=-1;ZORUTR=.TRUE.;'
&'RESUME FROM #,AT#;'='ZORESU=.TRUE.;OFNCL2=''#1'';ORINCN=#2;'
&'RESUME FROM #/#,AT#;'='ZORESU=.TRUE.;OFNCL2=''#1'';OFNTR2=''#2'';
 ORINCN=#3;ZORUTR=.TRUE.;'

********************************************************************************
******** Directives pour sorties VIZU ******************************************
********************************************************************************
********************************************************************************
+KEEP,ZDLMAP.
********************************************************************************
" TR MAP"
&'Z_OUT #(#);'=
&'Z_OUT #(#,#);'=
&'Z_OUT #(#,#,#);'=
&'Z_OUT #(#),#;'=
&'Z_OUT #(#,#),#;'=
&'Z_OUT #(#,#,#),#;'=
;
;  " CL MAP"
&'Z_OUT #(#)=#-#;'=
&'Z_OUT #(#,#)=#-#;'=
&'Z_OUT #(#,#,#)=#-#;'=
&'Z_OUT #(#)=#-#,#;'=
&'Z_OUT #(#,#)=#-#,#;'=
&'Z_OUT #(#,#,#)=#-#,#;'=
;
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,1,1);'
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#,YLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,#5,1);'
&'DEFINE MAP #,TITLE=#,DIM=#,XLEN=#,YLEN=#,ZLEN=#;'=
 'LON=LEN(''#2'');CALL OGMAPC(''#1'',''#2$'',LON,#3,#4,#5,#6);'
;
;
********************************************************************************
+KEEP,ZDLOPT2.
********************************************************************************
!   Print_out,Paw_out et Zprint_out options Al1,10/02/93
!===================== print and steps definitions ==================
Cet ensemble d'instructions concerne la gestion des sorties gerees par Ker, d'une
part, et celles que chaque objet ou classes d'objets (processeur).
Le premier support est le "listing" ***_exe.run.lis (.lis);
le second constituant l'ensemble des fichiers binaires passés a VIZU (.dat)

SUPPORT .lis
============
***Sorties gerees par Ker identifiees par le mot : Print;   (routines OPTAU et OPETA)

extrait : pour les Cellules :
  STATE VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 CELL MESH   1 TYPE:    4  CL#:    1   Eta            Gamma          dEta          in FM (   1,   4)   Level:   3
                                    3.020000E+02   0.000000E+00   0.000000E+00
. . .
          pour les Transferts :

 > TRANSFER VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 >> FAM : (   1,   4) ,D= 3 <BOX -   1 >
 TYPE/DF      DELTA          PHI         -OMEGA        IN#     TR#  TYPE(2)/DC CL1  CL2 ...
  CDM     0.000000E+00 -1.250000E-01  0.000000E+00      1     1      10102     1    3 
. . .
          termine par :
 DZVERI --- end of time loop                                                                        OPTIONS : CLSU           OK   
>>>++> oK ( 0) Step Number:       1-Instant: 0.000000E+00+dTime: 2.500E+00 Step Interval:  6.567E+00   <<<<<<<<<

***Sorties gerees par les processeurs            : ZPrint;
exemple : Cellule MESH-43 traitee par le processeur CNDA ou sont programmee les instructions qui
impriment :
 **FROM:    CNDA, CL: MESH-  43 OF CLASS: CNDA  
   ABt_TV(1,1) = -0.1250000  NTrCode = 10102
  {Mac_Edge} ABt_TV(1,1),SumFiT,-2.*RSign*ABtMac*Fi_TV(1) :
     0.1250000 0.0000000 0.0000000
   ABt_TV(1,1) = 0.1250000  NTrCode = 202029300
   Gamma(1) = 0.0000000  fro_zen = 0  StFlag = F

exemple : Transfert traite par le processeur TCDM ou sont programmee les instructions qui
impriment :
 **FROM:    TCDM ,TR OF CLASS: TCDM   (1ST CONNECTED CELL: MESH-  16)
    Ct_SV(1,1) :
     1.000000
  {on Dcplg} D_TV(1,1),Psi_macro_Edge :
     0.5000000 0.0000000
  {on M_Cell} D_TV(1,1) :
     1.000000
    FI(1),Omega(1),T_Edge(1),T_Edge(2) :
     0.0000000 0.0000000 300.0000 0.0000000

Remarque : ces sorties sont imprimees dans l'ordre ou les processeurs sont appeles par Ker,
cet ordre heritant de la place de l'objet qu'ils traitent dans l'arbre ZOOM.

SUPPORT .dat
============
Elles sont entierement gerees par Ker suivanbt les informations fournies par Zinit
et les processeurs;    identifiees par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a ete programme VIZU.

STRUCTURE GENERALE DES INSTRUCTIONS
===================================
les Fm de profondeur au plus egale a mxdeep.
Les instructions fonctionnent selon trois regles :

1/ on fixe les valeurs par defaut en tête de ZINIT
2/ on specifie une commande hors defaut par objet (Cellule ou Transfert) si necessaire
3/ si on prefere globaliser ces instructions par famille, on peut le faire lorsque
   l'arbre ZOOM a ete instancie,cad apres le CALL OFRAME;
Enfin, la frequence des sorties sont gere par les instruction
 "print_out" pour .lis; "paw_out" pour .dat;
(Les sorties .lis sont gerees par Print_out seulement, et appliquees a ZPrint)

1/ DEFAUTS
Zprint_options:
   Default=none Cl,none Tr,none Fm;
![ equivalent a Zprint_options: Default=none; ]
Print_options:
   Default=none;
[ Paw_options:  Default=all; ] au mois de Fevrier 96, les options pour Paw ne sont pas implementees,
cad que tous les resultats disponibles sont sortis a al frequence donnee par Paw_out)

L absence totale de ces options equivaut a une sortie complete de tous les objets de l'arbre, cad a :
Zprint_options:
   Default=all Cl,all Tr,all Fm;
[ equivalent a Zprint_options: Default=all; ]
Print_options:
   Default=all;

2/ POUR CHAQUE OBJET  CREE
L'instruction :    ZPrint_Tr; ou    ZPrint_Cl; precise au processeur concerne que le dernier objet
Tr ou Cl cree sera a imprimer.
De meme pour Print_Cl ou _Tr par Ker;
A l'inverse :
Print_not_Cl; et : Zprint_not_Tr; suppriment un eventuel defaut requerant l'impression;

Remarque; On peut toujours differer ces instruction par la sequence :
GET *AddObj*; Zprint_CL;

3/ GLOBALISATION DES DIRECTIVES :

a la fin de ZINIT, apres l'instruction qui instancie l'arbre ZOOM :
CALL OFRAME  ;

!  FM referenced output options. EXEMPLES :
sorties de KER :
Print top Cl of Fm: U;                 Eta,Gamma dEta des Cellules immediatements sous Fm : U;
Print all Cl of Fm: U;                                des Cellules des familles U et sous U jusqu'en bas
Print all Tr of FM : PIEC-1;           Fi,DElta et Omega des Tranferts du sous-arbre des familles de
                                       racine la Fm : PIEC-1;
Print all of Fm: Z;                    sans precision du type d'objet, les deux (Cl et Tr) sont concernes.


Zprint all Cl of Fm: PIEC-1;           le sprocesseurs traitant les Cl du sous arbre precedent doivent imprimer.
Zprint all of Fm: Z;                    sans precision du type d'objet, les deux (Cl et Tr) sont concernes.


COMPLEMENTS
===========
*/ Pour la programmation des processeurs :
------------------------------------------
Instructions heritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;
explication : (LCL) correspond a un objet, un flag logique est attache a cet objet qui donne la valeur .TRUE.
a l'operande du "if"; Voir les manuels de Processeur ZBM pour plus de details.

*/ Fixation d'un niveau d'impression par les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1]
                                    (1<2<3 etc : plus le niveau est eleve, plus on imprime.)
Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >
explication : on n'imprime que si le niveau [premier argument, ici 1] est au plus egal au seuil fixe dans ZINIT.

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus egales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot. Exemple :
                         SCATTER PLOT OF MATRIX BLOCKS UNDER FAMILY Z   - 0

     COL #   1  ROW #   1
 --------------------------------------------------EMAX=0.572023E-01   AT   4,  4-------------------------------
      12345
   1 I  8. I  1
   2 I  .8 I  2
   3 I  9. I  3
   4 I  .* I  4
   5 I     I  5
      12345
 ---------------------------------------------------------------------------------------------------------------

dans ZINIT : mxdeep = 2;  La valeur nulle entraine l'impression de toutes les profondeurs.

2/PAR OBJET (ici des Familles)
Zpr_fm;               sortie du scatter plot de la derniere Famille cree.
Zprint_not_Fm;        supprime  la sortie par defaut eventuelle.

3/APRES OFRAME
Print top Mx of Fm : PIEC-1;
 Print all Mx of Fm : TROM;

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
a la racine susdite [ici TROM].

*/ Gestion particuliere aux calculs correspondants a la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces details d'impressions dans :
                                /zoom/Help/Programmers/Ker/D_Loop <

Note : pour les details concernant le tableau OZPlvl cf :
                               /zoom/Help/Users/Combined_Facilities/Print_levels  <


PRINT_OUT TWICE EVERY 10 STEPS;
PAW_OUT ONCE EVERY 5 STEPS; 


ZOOM general Info
=================

Il est possible de recuperer les infos generales sur votre
run dans les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 carateres de titre intitialise a  ORNAME  ORVERS  OZINDA  OZINTI 

pour l'utiliser mettre une fois pour toutes dans votre patch ZINIT_CDE
le deck $OGENTIT. qui doit contenir:

+KEEP,OGENTIT.
&F;
      CALL UHTOC (
+SEQ,QFTITLE,N=62.
     +         ,62,OTITLE,62)
      OTITLE = SPACES(OTITLE,1)
      CALL GETSCH(OTITLE,' ',' ',1,ORNAME,NCH)
      CALL GETSCH(OTITLE,' ',' ',2,ORVERS,NCH)
      CALL GETSCH(OTITLE,' ',' ',3,OZINDA,NCH)
      CALL GETSCH(OTITLE,' ',' ',4,OZINTI,NCH)
+SELF,IF=APOLLO.
      PRINT *, 'Executed on APOLLO machine'
+SELF,IF=HPUX.
      PRINT *, 'Executed on HP700 machine'
+SELF,IF=IBMRT.
      PRINT *, 'Executed on IBM RS6000 machine'
+SELF,IF=CRAY.
      PRINT *, 'Executed on a CRAY machine'
+SELF.
&M;


dANS ZINIT EXEMPLE

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple

...

+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;

Ces variables seront passees a VIZU dans un avenir proche
 
la variable DTIMEBY2 est initialisee dans ZOOM apres call zsteer


Pour VIZU
=========

U_TITLE Two Families with a Schwartz-like interfacing;

mettra ce titre general sur tous vos dessins
(autre source)
 De Zinit, on peut définir des niveaux de diagnostics, vérifs et print_out,
en affectant des valeurs entières au tableau: OZPLVL(12).
                          (Cependant, le mot 6 gère les fichiers pour viZu)
 La valeur nulle supprime les print ou vérif.
   ( le méta signe "*" indique un ET logique avec d'autres symboles, )

          OZPLVL( ):              =: (D):=Default
                                  (=0 supprime toute sortie dans la rubrique.)

                 1  Structure info
                                  =1 (D) tree.hlp
                                  =2     interfaces  * ZPRINT(LFm)
                                  =3     Cl et Tr Cx * ZPRINT(LCl/Tr)
routines concernees: ( DOPLUG, OW2PAW, OSK2HP )

                 2  Processeurs (Géré par Users)
                                  =1 (D)
                                  =any
                     exemple: in Zinit OZPLVL(2)=3; ( Print out level 3)
                              in Processors :
                                 IF ZPrint_lvl(k,LCl/Tr)<...> remplace le IF ZPRINT(L..)<>
                                 il génère IF ZPRINT.and.k.ge.OZPLVL(2) <>

                 3  in D_loop
                                  =1 (D) Sorties à TOL ok * MxDeep * ZPRINT(LFM)
                                  =2     all-along Loop infos    id
                     ( OUPEQ, ZOOM )

                 4  Step_Advance (Mx_only)
                                  =1     Scatter plot only
                                  =2 (D) Full Mx * MxDeep * ZPRINT(LFM)
                     ( MOVUP, ZOOM )

                 5  Sortie console (ou ..._batch.err)
                                  =1 (D) Step end
                                  =2     fin D_loop
                                  =3     some more, for very long jobs.
                     ( ZOOM )

                 6  Sorties pour viZu 
                                  =-1    Supprime tout
                                  =0     ne supprime que la CDFile
                           Si positif ou nul:                   >>>>>>(en développement le 16/05/94)
                                  =1[modulo10] Héra Mx only(not implemented)
                                  ( => 1 ne supprime que la MXMX )
                                  =2 (D)       MXMX full
                                  =...+10      MZMX = [MXMX]-1 (pour post-traitement à la Bianco)
                                  =...+100     MDMX(MXMX à la sortie du D_Loop)
                     ( OPSCMX,OEQU,MOVUP,DZSPMX )

                 7  Vérif info et mémoire
                                  =1     Un DZVeri par step et DZSTORE au premier step et final
                                  =2 (D) DZVeri at end of EOLMAX
                                         DZStore after Zinit
                                  =3     some more DZSTORE (Very long jobs)
                                  =9     Debug option: some more DZVERI (in ZOOM,OICLTR)
                                         (even if not.ZPRINT.)
                     ( OUPEQ, MOVUP, ZOOM )

                 8  Matrix infos
                                  =1 (D)Tridiag message * MxDeep&ZPRINT(LFM)
                                  =2    Conditionnement (not implemented)
                     ( ORES )

                 9  Choix d'une version de Ker
                                  =1 (D)Version proxima
                                  =2 Version futura (F_ et V_ entries). Tr bit flags.
                                     ( not implemented )
                     ( ONCO, ONUMA, OTRDA, OCMX, OF2MXT )

  Les OZPLVL(9-12) sont réservées aux programmeurs du noyau.  =1 (D)

ADDITIONS
=========
vendredi 29/04/1994:      MDMX option.

********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********************************************************************************

********************************************************************************
********* Initialisation et attribution de valeurs aux Parametres **************
********************************************************************************
! =====================================================================
! ========> macro pour l'affectation des parametres dans Zinit <=======
! =====================================================================

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
avec :
   Var_Name : * Nom de la variable dans le bank CD (ou TD) (Case insensitif)
   Var_Type : * I ou R (optionel)
              * Type de la variable. Si le type n'est pas precise, on suit la
              convention FORTRAN (entier de I-N, reel sinon) de la variable Var_Name.
              * Si ce type ne correspond pas a celui de Var_Name lors de sa
              declaration dans le CD ou TD bank, on envoie une bordee d'insultes
              et on n'ecrit pas dans la variable
   i et j   : * Valeur des indices. On verifie qu'il n'y a pas de depassement.
              Meme supplice que precedemment en cas d'heresie ou de tentative
              quelconque de ne pas suivre La Norme.
Il est exclu d'ecrire dans une link_var ou dans une variable utilisee pour
dimensionner des tableaux.

 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remarque générale pour le remplissage Eta, Fi TD_bank et CD_bank:
=================================================================

Le block < .... > est un block standard MORTRAN: toute opération y est donc
possible. Par exemple, fill_Fi< [1 thru 12] = Fi_zero; >; pourrait s'écrire:
     fill_Fi< <I=1,12; [I] = Fi_zero; > > ;

Remplissage des variables ( Eta ou Fi )
=======================================

1) En spécifiant chaque numero de composantes du vecteur (_Eta ou _Fi):

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"

remarque:  error ou Warning si on tente de déborder des dimensions déclarées
---------  dans le processeur .

2) Initialisation de tout le vecteur

     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"

3) Initialisation implicite par liste:

     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >
        a pour consequences:
                   Eta(1) = T_ref;
                   Eta(2) = Vx_surface;
                   Eta(3) = Vy_surface;
                   Eta(4) = Sel_conc;
                   Eta(5) = Ro_eau;
        Verifications de débordement et Warning si le vecteur n ' est pas
      entièrement initialisé.
********************************************************************************
******** Autres Instructions utiles ********************************************
********************************************************************************
DIMENSION:#,#;'=' &''(##:##)''=''##L ##S8(##1+NZZ1*@(##2-1))''


&'*@(#)'='#U8*(#1)'


&'*@(#:#)'='#U8#A1#S8*(#1-1+NZZ#C*@(#2))'
Execute Procedure;
DO ((J=1,NL),I=1,NC)
"             num.max.de liaisons=JZSIG=8 (4 PSI+4 VORTX)"
< CREATE CL MESH-(I:J),TYPE=VORTX 8; "Entry IVORTX"
    C-PLUG 1:1,2,3,4; C-PLUG 2:1,2,3,4;
    C-PLUG 3:1,2,3,4; C-PLUG 4:1,2,3,4;"VorticitÉ 4 faces"
    SET MESH(I:J) = MESH-(I:J);
   Tinit=T_infini; Execute MESH_Fill;
    Z_OUT CL01(I,J)=MESH-(I:J); " Mapping"
   IF J.eq.NL/2 .and. I.eq.nc/2 < ZPrint_CL; >;
>
.......
PROCEDURE MESH_Fill
<  Fill_Eta < [2] = Tinit ; [3] = RO_AIR; [4] = RO_AIR; >
   flat = 0.;
   Fill_CD
   < [Air_Eau]:i    = 1;  "Air"
     [lat_itude]:r  = rlat;
     [long_itude]:r = delta_long*float(I);
     [f_lat]:r      = flat;
     [Nb_faces]:i   = 4;   "Carres"
     [t_side]:r     = DX;  " should .eq. DY"
     [Lo_up]:i      = Lo_up;
     [delta_z]:r    = DZ;
     [D_centre]:r   = DX/2.;
     [Ro_fluid]:r   = Ro_air;
     [frozen(4)]:i  = 1; "Cancel Temp. dependant parameters computation"
     [gy_Archimede]:r=0.;
     [Cp_fluid]:r   = Cp;
     [G_cond(1)]:r  = viscosite;
     [G_cond(2)]:r  = conduct/Cp;
     [G_cond(3)]:r  = .1*conduct;  "Salinity diffusion"
   >
>
;


Utilisation du point d'entree ZSTEER
====================================
**************************************************************************
*************************** RESUME FROM **********************************
***************************** Al1 mardi 23/02/1993 *********************** 
**************************************************************************


  Il s agit de la reprise d un run par initialisation a partir d un fichier
de sorties d un run precedant (qui aura evntuellement pu etre tue).
  L' initialisation ne sera faite qu a partir des etats des Cellules non gelees.

--  on commence par changer le nom de OZDAT.CL en y ajoutant un seul caractere:
     ex: OZDAT.CL1
-- Dans ZINIT, vers les print out every step, on ajoute l' instruction:

   RESUME FROM OZDAT.CL1, at IT; ou RESUME FROM OZDAT.CL1;
   L' initialisation sera alors faite a partir, soit du dernier vecteur d etat,
soit a partir de la ITieme sortie.

Remarques:
**********
*     Il est clair que la structure ZINIT doit etre la meme pour ce qui concerne
les cellules (sinon diagnostic et STOP 'RESUME')
      Il est cependant possible de geler ou dégeler des cellules par rapport au
run de reference, d'enlever des D_Mx flag a certains transferts ...voir même de
modifier complètement les transferts - au risque de l'utilisateur.
(cette option est cependant interdite dans le cas d'utilisation de Pseudo_Cell Tr
qui exigent une initialisation et doivent donc se retrouver dans une meme structure
de Transferts.

*     On peut utiliser une procédure analogue pour sortir la matrices sous Zeus
en faisant varier le pas de temps. L exemple suivant, de JLD, le fait en un seul
run, en arrêtant la progression dans le temps à NbItStop (Inc Nb), et calcule
NbItMx matrices en incrémentant DTIME (dtMx).
      Les flags ZPAW et ZENDRN(end_run) déclenchent une sortie pour Visu et la fin
de run.


!======================== Zsteer possibility =====================
ENTRY ZSTEER;
!
if NbItMx.eq.0
< if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "si dernier passage"
>else "si analyse matrice de couplage"
< if (istep.ge.NbItStop)
  < if (istep.ge.(NbItStop+NbItMx))
    < ZENDRN =.true.; >     "si dernier passage"
! pour faire l'equivalent de  resume from OZDAT.CL4;
    call ORESUME(LZ);  " !! time modifier "
    if (istep.eq.NbItStop)
    < IstepMx = 1;
      dtime = dtMx;
    > else
    < IstepMx = IstepMx+1;
      dtime = dtime + dtMx;
    >
    time = dtime ;   " Ceci permet d avoir dans visu la variation des coefs(dtime)"
    ZPAW = .true. ;
  >else< ZPAW=.false.;>
>
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="


*   On pourrait tout aussi bien partir d un precedant run et construire la matrice(dTMx)
sans l' option NbItStop qui serait remplacee par RESUME From OZDAT.CL1, at NbItStop

********************************************************************************
******** Parametres du Run *****************************************************
********************************************************************************
TYPES de fonctionnements Stationnaire ou Dynamique;
Gestion de l'incrément. Arret.
dtime; timax;

Special matrices D
==================

;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Connecting
********************************************************************************
******** Connections entre Objets élémentaires *********************************
********************************************************************************
Elles se font en trois temps :
1er temps    : création d'un C-Plug sur une cellule;
2eme temps   : création d'un T-Plug sur un transfert;
3eme temps   : connection d'un C-Plug et d'un T-Plug, sous le transfert courant : ne peut
               s'effectuer qu'a la création d'un transfert, lorsque la cellule référencée
               a déjà été créée à l'exécution;

C-Plug :
========
C-PLUG *NamPlg*:*VarList*; (Futura)
  Création d'un C-Pug sous la Cellule courante;
 *NamPlug* : Name-Numero du plug de la cellule; une référence ultérieure
  sera faite par le groupement : (*NamCl*,*NamPlug*);
 *VarList* : Liste de numeros des composantes du vecteur d'Etat de l'objet;

T-Plug :
========
T-PLUG *NumPlug*:*VarList*;
  Création d'un T-Pug sous le Transfert courant;
 *NamPlug* : numéro du plug du transfert;
 *VarList* : Liste de numéros des composantes du vecteur de transfert;
exemples :
..........
C-Plug Face-1:1; C-Plug PLUG-3:1,3,5,7; C-Plug Edge-2:1 thru 7; C-Plug n:n thru n+3;
;

Connection :
============
Join *NumPlug1* To *ClNam*,*NamPlug2*);
  Etablit une connection entre le C-Plug *NamPlu2* de la cellule
 *NamCl* et le T-Pug numéro *NumPlug1* du transfert courant

forme abrégée : 
JOIN TO (*Cl/C-Plug*);                   Equivalent à : JOIN 1 TO (*Cl/C-Plug*);
JOIN *NumPlug* to (*NamCl*,);            Equivalent à : JOIN *NUmPlug* to (*NamCl*,PLUG-1);
JOIN *NumPlug* to (CPlug1),(CPlug2)      Equivalent aux deux Join :
                               JOIN *NumPlug* to (CPlug1); JOIN *NumPlug* to (CPlug2);
exemples :

..........
JOIN 2 TO (Mesh-4,Bulk-5);
JOIN 2 TO (Obj(3),Face-2);
JOIN n TO (Mesh,Face-);                    Equivalent a : JOIN n TO(Mesh,Face-1);
JOIN n TO (Mesh,);                         Equivalent a : JOIN n TO(Mesh,PLUG-1);

JOIN 1 TO (Mesh(i) (Mesh(i-1);
;
JOIN(I:J) TO (*CPlug*);
;
Création de T-Plug et connection contractées :
==============================================
CONNECT TO (*1Cl/C-Plug*,*2Cl/C-Plug*);   = CONNECT 1 TO (*1Cl/C-Plug*,*2Cl/C-Plug*)'

CONNECT *VarList* TO (*CPlug*);     Effectue : T-PLUG 1:*VarList*; JOIN 1 TO (*CPlug*);

Type de T-Plug particulier :
============================

T-PROBE *PlugNum*;
  Création d'un T-Plug de *VarList* vide; S'utilise couramment pour
  la lecture passive (cad sans effet sur) d'une variable d'Etat du C-Plug connecté;
Le test correspondant dans les processeurs est :
   IF ((LTV).Nb_Tr_Var.EQ.0) TO NEXT LCX;  "(Skip if T-Probe)"
;
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Fm_Cell_Create
********************************************************************************
******** Création d'objets de la structure Familles - Cellules *****************
********************************************************************************
;
Familles Obligatoires :
=======================
La racine de l'arbre ZOOM est obligatoirement la famille unique : Zeus;
CREATE ZEUS;

CREATE UNIVERSE;

Autres familles :
=================

CREATE FM *NamFm* - *CodFm*;
  Instruction complete de creation d'une famille sous la famille courante;
  Elle y st reperee par un nom de quatre lettres au plus *NamFm*
  et un numero entier *CodFm* (Positif ou nul)

CREATE FM *NamFm*; 
  Equivalent a CREATE FM *NamFm* - 0;

CREATE FM=*ChFTNVar* - *CodFm*;
  permet de donner le *NamFm* encodé dans une variable caractere Fortran;

  exemples :
CREATE FM = SROSE(I);  ou
CREATE FM = SROSE(I)-J;  , avec SROSE(I) Variable_Fortran_CHARACTER*4;



Cellules :            Elles co-définissent la structure en étant explicitement placées sous une famille,
==========            soit dès leur crétaion, soit a la suite d'un MOVE;

Instruction complète : CREATE CL *NamCl* - *CodCl* , TYPE = *TypProc , I1, I2, I3;
exemple :              Create Cl Mesh-1, Type = SURF;

Début de l'instruction spéecifiant le nom d'objet :

CREATE CL *NamCl* - *CodCl* 
  Création d'une Cellule sous la famille courante;
  Elle y st repérée par un nom de quatre lettres au plus *NamCl*
  et un numéro entier *CodCl* (Positif ou nul)

CREATE CL *NamCl*,            Equivaut à : CREATE CL *NamCl* - 0,

Fin d'instruction, associant un modèle et éventuellement jusqu'a trois arguments entiers :

,TYPE=*ClProc*;              Le modele  associe a l'objet est le processeur de Type : *ClProc*;
                              (*ClProc* comportant au plus 5 alphanumeriques).

Les arguments ont pour valeur par defaut 1,-9,-9; pour en donner d'autres :
TYPE=*ClProc* I1 [,I2 [,I3]];    récupération dans le I_Entry dans JZSig, KZSig(1), KZSig(2).

Complément :
CREATE N-CL ... crée une cellule dont le vecteur d'état restera à sa valeur initiale
(Conditions limites) équivalent a une création normale, suivie de
FREEZE *NamCl* - *CodCl*;

<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Model_Instanciation
********************************************************************************
********* I N S T R U C T I O N S   D   I N S T A N C I A T I O N **************
********************************************************************************
                                              Zdl_html.dir/Model_Instanciation <

********************************************************************************
********* Initialisation et attribution de valeurs aux Parametres **************
********************************************************************************
! =====================================================================
! ========> macro pour l'affectation des parametres dans Zinit <=======
! =====================================================================

fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
avec :
   Var_Name : * Nom de la variable dans le bank CD (ou TD) (Case insensitif)
   Var_Type : * I ou R (optionel)
              * Type de la variable. Si le type n'est pas precise, on suit la
              convention FORTRAN (entier de I-N, reel sinon) de la variable Var_Name.
              * Si ce type ne correspond pas a celui de Var_Name lors de sa
              declaration dans le CD ou TD bank, on envoie une bordee d'insultes
              et on n'ecrit pas dans la variable
   i et j   : * Valeur des indices. On verifie qu'il n'y a pas de depassement.
              Meme supplice que precedemment en cas d'heresie ou de tentative
              quelconque de ne pas suivre La Norme.
Il est exclu d'ecrire dans une link_var ou dans une variable utilisee pour
dimensionner des tableaux.

 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;

Remarque générale pour le remplissage Eta, Fi TD_bank et CD_bank:
=================================================================

Le block < .... > est un block standard MORTRAN: toute opération y est donc
possible. Par exemple, fill_Fi< [1 thru 12] = Fi_zero; >; pourrait s'écrire:
     fill_Fi< <I=1,12; [I] = Fi_zero; > > ;

Remplissage des variables ( Eta ou Fi )
=======================================

1) En spécifiant chaque numero de composantes du vecteur (_Eta ou _Fi):

     FILL_ETA < [1] = T; [3] = 273. >; " Initialise Eta(1) avec la variable T
                                        et Eta(3) avec 273."
;
     fill_Fi< [1 thru 12] = Fi_zero; >; " Fi(1 à = Fi_zero"

remarque:  error ou Warning si on tente de déborder des dimensions déclarées
---------  dans le processeur .

2) Initialisation de tout le vecteur

     fill_Eta< [.] = H; >; " Initialise toutes les composantes à H"

3) Initialisation implicite par liste:

     FILL_ETA< [.] = T_ref, Vx_surface, Vy_surface, Sel_conc, Ro_eau; >
        a pour consequences:
                   Eta(1) = T_ref;
                   Eta(2) = Vx_surface;
                   Eta(3) = Vy_surface;
                   Eta(4) = Sel_conc;
                   Eta(5) = Ro_eau;
        Verifications de débordement et Warning si le vecteur n ' est pas
      entièrement initialisé.
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Object_Address
********************************************************************************
********* Marque d'objets et de leur position dans la structure ****************
********************************************************************************
                                                   Zdl_html.dir/Object_Address <


Une famille ou une cellule bénéficient d'une marque *Name* - *Code*;
cette marque ne constitue pour ZOOM qu'une adresse dans la structure
 - en analogie avec un nom de directory ou de fichier dans une structure UNIX;
La conséquence est double :
 d'une part, la marque peut etre utilisee plusieurs fois dans des endroits distincts
 de la structure;
 d'autre part, elle ne suffit pas a identifier complètement cet objet; il y  faut
 l'équivalent d'un "path" UNIX;
Le ZDL permet de donner un nom global à ce path (qui démarre sous Zeus) - comme un
"lien" UNIX :

SET *Name* = *ObjetDéjàCréé* ; l'objet courant (Cellule ou Famille) est marqué par
un nom UNIQUE cette fois-ci qui permet de le retrouver de toute situation courante
dans la structure.

Formes diverses :
=================
SET *Name(*Indice*) = *MarqueObj*;

SET *Name* == *MarqueObj;
  Le signe "==" est à utiliser lorsque la marque de l'objet a été encodée dans une
  variable Fortran CHARACTER*n;

exemples :
..........
Set MaCl   = Z.U.Nord-2.Piece.Mur-4;
  Spécifie l'adresse complète pour la Cellule : Mur-4;
  (peut donc être définie hors structure);
Set Obj(3) = Mur-4;
  adresse équivalente à la précédente si la Fm courante est : Piece;




<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Results_Output
******************************************************************************************************************
******************************************************************************************************************
*********  REPERAGE DE SORTIES DANS LE XXX.RUN.LIS ***************************************************************
******************************************************************************************************************
******************************************************************************************************************

SUPPORT .lis
============
***Sorties gerees par Ker identifiees par le mot : Print;   (routines OPTAU et OPETA)

extrait : pour les Cellules :
  STATE VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 CELL MESH   1 TYPE:    4  CL#:    1   Eta            Gamma          dEta          in FM (   1,   4)   Level:   3
                                    3.020000E+02   0.000000E+00   0.000000E+00
. . .
          pour les Transferts :

 > TRANSFER VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 >> FAM : (   1,   4) ,D= 3 <BOX -   1 >
 TYPE/DF      DELTA          PHI         -OMEGA        IN#     TR#  TYPE(2)/DC CL1  CL2 ...
  CDM     0.000000E+00 -1.250000E-01  0.000000E+00      1     1      10102     1    3 
. . .
          termine par :
 DZVERI --- end of time loop                                                                        OPTIONS : CLSU           OK   
>>>++> oK ( 0) Step Number:       1-Instant: 0.000000E+00+dTime: 2.500E+00 Step Interval:  6.567E+00   <<<<<<<<<

***Sorties gerees par les processeurs            : ZPrint;
exemple : Cellule MESH-43 traitee par le processeur CNDA ou sont programmee les instructions qui
impriment :
 **FROM:    CNDA, CL: MESH-  43 OF CLASS: CNDA  
   ABt_TV(1,1) = -0.1250000  NTrCode = 10102
  {Mac_Edge} ABt_TV(1,1),SumFiT,-2.*RSign*ABtMac*Fi_TV(1) :
     0.1250000 0.0000000 0.0000000
   ABt_TV(1,1) = 0.1250000  NTrCode = 202029300
   Gamma(1) = 0.0000000  fro_zen = 0  StFlag = F

exemple : Transfert traite par le processeur TCDM ou sont programmee les instructions qui
impriment :
 **FROM:    TCDM ,TR OF CLASS: TCDM   (1ST CONNECTED CELL: MESH-  16)
    Ct_SV(1,1) :
     1.000000
  {on Dcplg} D_TV(1,1),Psi_macro_Edge :
     0.5000000 0.0000000
  {on M_Cell} D_TV(1,1) :
     1.000000
    FI(1),Omega(1),T_Edge(1),T_Edge(2) :
     0.0000000 0.0000000 300.0000 0.0000000

Remarque : ces sorties sont imprimees dans l'ordre ou les processeurs sont appeles par Ker,
cet ordre heritant de la place de l'objet qu'ils traitent dans l'arbre ZOOM.

SUPPORT .dat
============
Elles sont entierement gerees par Ker suivanbt les informations fournies par Zinit
et les processeurs;    identifiees par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a ete programme VIZU.

*/ Pour la programmation des processeurs :
------------------------------------------
Instructions heritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;
explication : (LCL) correspond a un objet, un flag logique est attache a cet objet qui donne la valeur .TRUE.
a l'operande du "if"; Voir les manuels de Processeur ZBM pour plus de details.

*/ Fixation d'un niveau d'impression par les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1]
                                    (1<2<3 etc : plus le niveau est eleve, plus on imprime.)
Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >
explication : on n'imprime que si le niveau [premier argument, ici 1] est au plus egal au seuil fixe dans ZINIT.

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus egales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot. Exemple :
                         SCATTER PLOT OF MATRIX BLOCKS UNDER FAMILY Z   - 0

     COL #   1  ROW #   1
 --------------------------------------------------EMAX=0.572023E-01   AT   4,  4-------------------------------
      12345
   1 I  8. I  1
   2 I  .8 I  2
   3 I  9. I  3
   4 I  .* I  4
   5 I     I  5
      12345
 ---------------------------------------------------------------------------------------------------------------

dans ZINIT : mxdeep = 2;  La valeur nulle entraine l'impression de toutes les profondeurs.

2/PAR OBJET (ici des Familles)
Zpr_fm;               sortie du scatter plot de la derniere Famille cree.
Zprint_not_Fm;        supprime  la sortie par defaut eventuelle.

3/APRES OFRAME
Print top Mx of Fm : PIEC-1;
 Print all Mx of Fm : TROM;

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
a la racine susdite [ici TROM].

*/ Gestion particuliere aux calculs correspondants a la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces details d'impressions dans :
                                $ZOOM/Help/Programmers/Ker/D_Loop <

Note : pour les details concernant le tableau OZPlvl cf :
                               $ZOOM/Help/Users/Combined_Facilities/Print_levels  <



ZOOM general Info
=================

Il est possible de recuperer les infos generales sur votre
run dans les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 carateres de titre intitialise a  ORNAME  ORVERS  OZINDA  OZINTI 

pour l'utiliser mettre une fois pour toutes dans votre patch ZINIT_CDE
le deck $OGENTIT, a prendre dans .../zoom/pro/exos/modele.cmz



dANS ZINIT EXEMPLE

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple

...

+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;

Ces variables seront passees a VIZU dans Futura;
 
la variable dTimeBy2 est initialisée dans ZOOM apres call zsteer

<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Results_Output.bak
******************************************************************************************************************
******************************************************************************************************************
*********  REPERAGE DE SORTIES DANS LE XXX.RUN.LIS ***************************************************************
******************************************************************************************************************
******************************************************************************************************************

SUPPORT .lis
============
***Sorties gerees par Ker identifiees par le mot : Print;   (routines OPTAU et OPETA)

extrait : pour les Cellules :
  STATE VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 CELL MESH   1 TYPE:    4  CL#:    1   Eta            Gamma          dEta          in FM (   1,   4)   Level:   3
                                    3.020000E+02   0.000000E+00   0.000000E+00
. . .
          pour les Transferts :

 > TRANSFER VARIABLES IN FAMILY (   1,  84) , DEEPNESS :   1 , # LEVELS PRINTED :   4 AMONG    4
 >> FAM : (   1,   4) ,D= 3 <BOX -   1 >
 TYPE/DF      DELTA          PHI         -OMEGA        IN#     TR#  TYPE(2)/DC CL1  CL2 ...
  CDM     0.000000E+00 -1.250000E-01  0.000000E+00      1     1      10102     1    3 
. . .
          termine par :
 DZVERI --- end of time loop                                                                        OPTIONS : CLSU           OK   
>>>++> oK ( 0) Step Number:       1-Instant: 0.000000E+00+dTime: 2.500E+00 Step Interval:  6.567E+00   <<<<<<<<<

***Sorties gerees par les processeurs            : ZPrint;
exemple : Cellule MESH-43 traitee par le processeur CNDA ou sont programmee les instructions qui
impriment :
 **FROM:    CNDA, CL: MESH-  43 OF CLASS: CNDA  
   ABt_TV(1,1) = -0.1250000  NTrCode = 10102
  {Mac_Edge} ABt_TV(1,1),SumFiT,-2.*RSign*ABtMac*Fi_TV(1) :
     0.1250000 0.0000000 0.0000000
   ABt_TV(1,1) = 0.1250000  NTrCode = 202029300
   Gamma(1) = 0.0000000  fro_zen = 0  StFlag = F

exemple : Transfert traite par le processeur TCDM ou sont programmee les instructions qui
impriment :
 **FROM:    TCDM ,TR OF CLASS: TCDM   (1ST CONNECTED CELL: MESH-  16)
    Ct_SV(1,1) :
     1.000000
  {on Dcplg} D_TV(1,1),Psi_macro_Edge :
     0.5000000 0.0000000
  {on M_Cell} D_TV(1,1) :
     1.000000
    FI(1),Omega(1),T_Edge(1),T_Edge(2) :
     0.0000000 0.0000000 300.0000 0.0000000

Remarque : ces sorties sont imprimees dans l'ordre ou les processeurs sont appeles par Ker,
cet ordre heritant de la place de l'objet qu'ils traitent dans l'arbre ZOOM.

SUPPORT .dat
============
Elles sont entierement gerees par Ker suivanbt les informations fournies par Zinit
et les processeurs;    identifiees par le mot : Paw;   (routine OW2PAW)
Note : Paw est l'acronyme d'un progiciel du CERN (Physics Analysis Workstation) au
sein duquel a ete programme VIZU.

*/ Pour la programmation des processeurs :
------------------------------------------
Instructions heritant des directives de ZINIT :

    if zprint(LCL) < Z_Pr: (Gamma(i),i=1,NN) >;
explication : (LCL) correspond a un objet, un flag logique est attache a cet objet qui donne la valeur .TRUE.
a l'operande du "if"; Voir les manuels de Processeur ZBM pour plus de details.

*/ Fixation d'un niveau d'impression par les Processeurs
--------------------------------------------------------
Dans ZINIT         : OZPlvl(2)=1;   (seuil d'impression [ici 1]
                                    (1<2<3 etc : plus le niveau est eleve, plus on imprime.)
Dans un processeur : if Zprint_lvl(1,LTR) < Z_Pr : FI(1),Omega(1),T_Edge(1),T_Edge(2); >
explication : on n'imprime que si le niveau [premier argument, ici 1] est au plus egal au seuil fixe dans ZINIT.

*/ Impressions dans .lis correspondant aux calculs matriciels :
---------------------------------------------------------------
1/DEFAUTS :
toutes les familles sous Z de profondeurs au plus egales a mxdeep (integer Fortran) sont sorties
sous la forme d'un scatter plot. Exemple :
                         SCATTER PLOT OF MATRIX BLOCKS UNDER FAMILY Z   - 0

     COL #   1  ROW #   1
 --------------------------------------------------EMAX=0.572023E-01   AT   4,  4-------------------------------
      12345
   1 I  8. I  1
   2 I  .8 I  2
   3 I  9. I  3
   4 I  .* I  4
   5 I     I  5
      12345
 ---------------------------------------------------------------------------------------------------------------

dans ZINIT : mxdeep = 2;  La valeur nulle entraine l'impression de toutes les profondeurs.

2/PAR OBJET (ici des Familles)
Zpr_fm;               sortie du scatter plot de la derniere Famille cree.
Zprint_not_Fm;        supprime  la sortie par defaut eventuelle.

3/APRES OFRAME
Print top Mx of Fm : PIEC-1;
 Print all Mx of Fm : TROM;

Dans ce dernier cas, mxdeep est pris en compte pour sortir les matrices des familles de profondeur relative
a la racine susdite [ici TROM].

*/ Gestion particuliere aux calculs correspondants a la D_Loop:
---------------------------------------------------------------
OZPlvl(3)=2;   " Print Level of D_loop"
Voir ces details d'impressions dans :
                                /zoom/Help/Programmers/Ker/D_Loop <

Note : pour les details concernant le tableau OZPlvl cf :
                               /zoom/Help/Users/Combined_Facilities/Print_levels  <



ZOOM general Info
=================

Il est possible de recuperer les infos generales sur votre
run dans les variables suivantes:

* ORDATE = RunDate
* ORTIME = RunTime
* ORNAME = Zinit title Name
* ORVERS = Zinit Version
* OZINDA = Zinit Date of Version
* OZINTI = Zinit Time of Version

* OTITLE = 64 carateres de titre intitialise a  ORNAME  ORVERS  OZINDA  OZINTI 

pour l'utiliser mettre une fois pour toutes dans votre patch ZINIT_CDE
le deck $OGENTIT, a prendre dans .../zoom/pro/exos/modele.cmz



dANS ZINIT EXEMPLE

+CDE,OTITLE.          dans la partie &F apres +CDE,OPRINT. par exemple

...

+SEQ,OGENTIT.
print *,                          otitle;
print *,' RunDate ',              ordate;
print *,' RunTime ',              ortime;
print *,' Zinit title Name ',     orname;
print *,' Zinit Version ',        orvers;
print *,' Zinit Date of Version ',ozinda;
print *,' Zinit Time of Version ',ozinti;

Ces variables seront passees a VIZU dans Futura;
 
la variable dTimeBy2 est initialisée dans ZOOM apres call zsteer

<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Transfer_Create
********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
Deux types de créatons : naturelle ou imposée.

***********
Naturelle : c'est alors ZOOM/KER qui associera cet objet à une famille (la plus emboitée
*********** qui contienne l'ensemble des cellules connectées par ce transfert)

CREATE TR,TYPE=*TrProc* 1,-9,-9;
  Instruction complète de creation d'un Transfert associé au modèle *TrProc*
  avec trois entiers en argument - en l'occurence, leurs valeurs par défaut;
  (*TrProc* comportant au plus 5 alphanumériques).
exemple Create Tr, Type = COND;
On remarque qu'il est impossible de donner un nom au transfert; il faut donc l instancier
complètement à sa creation.

;
Complément :
CREATE N-TR,TYPE=*TrProc*;
  Comme pour la cellule, cree un transfert fige; ses composantes garderont
  leur valeurs initiales (nulles par defaut) fixee par le Zinit.
  Dans le cas d'un [Resume from] avec option OZDAT>CL/OZDAT.TR, le vecteur initial conservera
la valeur fixee dans Zinit SANS etre reinitialise a partir du fichier resultat OZDAT.TR

cf egalement  $ZOOM/Help/Users/Proc/Tr_flag_bits   <<< Futura autre gestion par composantes

*********
Imposée :
*********

CREATE-F TR  : au lieu de CREATE TR donne l'instruction a ZOOM de forcer le placement de ce transfert sous
               la famille courante;                    
CREATE-F+ TR : Crée un transfert forcé, non pas sous la famille courante, mais sous celle du dessus;
               (Il peut être utile pour trier entre deux Types de Transferts créés dans une même boucle
                - car connectés aux mêmes cellules);
CREATE-Z TR  : creation d'un transfert sous Zeus
CREATE-U TR  :     idem sous U
;
*** Dans ces derniers cas,l'utilisateur prend la responsabilité de le situer dans l'arbre ZOOM, soit pour
    tenter d'optimiser le découpage des matrices induit par la structure, soit pour
    étudier en sortie des couplages impliquant ce transfert.
    L'utilisateur doit connaitre les contraintes de structures pour le faire.
    ZOOM/KER signalera une erreur si ce transfert ne peut etre situé comme l'indique
    l'utilisateur.


Exemples  de récupèration des arguments :
.........................................

CREATE CL SURF, TYPE = VORTX 4,1,Jusers;
  Dans le IEntry, on récupère les valeurs:
  4 dans JZTAU
  1 dans KZTAU(1)
 [Jusers] dans KZTAU(2)
;
CREATE TR, TYPE = HMIXL NCELL,2;  " ajout deuxieme argument et +"
  Dans le YEntry, on recupère les valeurs:
 [NCELL] dans JZTAU   ( comme toujours)
  1 dans KZTAU(1)

Rq. Ces deux tableaux sont initialisés à -9; Si on tente d'entrer trop d'arguments,
=== on ne transmet donc que ces valeurs à -9, ainsi qu un diagnostic in run.lis
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/Transfer_Create.bak
********************************************************************************
******** Création des Transferts (Objet dual, ou de connection entre cellules) *
********************************************************************************
Deux types de créatons : naturelle ou imposée.

***********
Naturelle : c'est alors ZOOM/KER qui associera cet objet à une famille (la plus emboitée
*********** qui contienne l'ensemble des cellules connectées par ce transfert)

CREATE TR,TYPE=*TrProc* 1,-9,-9;
  Instruction complète de creation d'un Transfert associé au modèle *TrProc*
  avec trois entiers en argument - en l'occurence, leurs valeurs par défaut;
  (*TrProc* comportant au plus 5 alphanumériques).
exemple Create Tr, Type = COND;
On remarque qu'il est impossible de donner un nom au transfert; il faut donc l instancier
complètement à sa creation.

;
Complément :
CREATE N-TR,TYPE=*TrProc*;
  Comme pour la cellule, cree un transfert fige; ses composantes garderont
  leur valeurs initiales (nulles par defaut) fixee par le Zinit.
  Dans le cas d'un [Resume from] avec option OZDAT>CL/OZDAT.TR, le vecteur initial conservera
la valeur fixee dans Zinit SANS etre reinitialise a partir du fichier resultat OZDAT.TR

cf egalement  /zoom/Help/Users/Proc/Tr_flag_bits   <<< Futura autre gestion par composantes

*********
Imposée :
*********

CREATE-F TR  : au lieu de CREATE TR donne l'instruction a ZOOM de forcer le placement de ce transfert sous
               la famille courante;                    
CREATE-F+ TR : Crée un transfert forcé, non pas sous la famille courante, mais sous celle du dessus;
               (Il peut être utile pour trier entre deux Types de Transferts créés dans une même boucle
                - car connectés aux mêmes cellules);
CREATE-Z TR  : creation d'un transfert sous Zeus
CREATE-U TR  :     idem sous U
;
*** Dans ces derniers cas,l'utilisateur prend la responsabilité de le situer dans l'arbre ZOOM, soit pour
    tenter d'optimiser le découpage des matrices induit par la structure, soit pour
    étudier en sortie des couplages impliquant ce transfert.
    L'utilisateur doit connaitre les contraintes de structures pour le faire.
    ZOOM/KER signalera une erreur si ce transfert ne peut etre situé comme l'indique
    l'utilisateur.


Exemples  de récupèration des arguments :
.........................................

CREATE CL SURF, TYPE = VORTX 4,1,Jusers;
  Dans le IEntry, on récupère les valeurs:
  4 dans JZTAU
  1 dans KZTAU(1)
 [Jusers] dans KZTAU(2)
;
CREATE TR, TYPE = HMIXL NCELL,2;  " ajout deuxieme argument et +"
  Dans le YEntry, on recupère les valeurs:
 [NCELL] dans JZTAU   ( comme toujours)
  1 dans KZTAU(1)

Rq. Ces deux tableaux sont initialisés à -9; Si on tente d'entrer trop d'arguments,
=== on ne transmet donc que ces valeurs à -9, ainsi qu un diagnostic in run.lis
<-----/|\------>  ./Help/Users/Zinit/ZDL/Zdl_html.dir/ZSteer_Entry
**************************************************************************
************ ZSTEER entry point Exemples *********************************
**************************************************************************

Remarques:
**********
*     Il est clair que la structure ZINIT doit etre la meme pour ce qui concerne
les cellules (sinon diagnostic et STOP 'RESUME')
      Il est cependant possible de geler ou dégeler des cellules par rapport au
run de reference, d'enlever des D_Mx flag a certains transferts ...voir même de
modifier complètement les transferts - au risque de l'utilisateur.
(cette option est cependant interdite dans le cas d'utilisation de Pseudo_Cell Tr
qui exigent une initialisation et doivent donc se retrouver dans une meme structure
de Transferts.

*     On peut utiliser une procédure analogue pour sortir la matrices sous Zeus
en faisant varier le pas de temps. L exemple suivant, de JLD, le fait en un seul
run, en arrêtant la progression dans le temps à NbItStop (Inc Nb), et calcule
NbItMx matrices en incrémentant DTIME (dtMx).
      Les flags ZPAW et ZENDRN(end_run) déclenchent une sortie pour Visu et la fin
de run.


!======================== Zsteer possibility =====================
ENTRY ZSTEER;
!
if NbItMx.eq.0
< if (istep.ge.NbItStop)
    < ZENDRN =.true.;  >     "si dernier passage"
>else "si analyse matrice de couplage"
< if (istep.ge.NbItStop)
  < if (istep.ge.(NbItStop+NbItMx))
    < ZENDRN =.true.; >     "si dernier passage"
! pour faire l'equivalent de  resume from OZDAT.CL4; "indique par Resume from"
    call ORESUME(LZ);  " !! time modifier "
    if (istep.eq.NbItStop)
    < IstepMx = 1;
      dtime = dtMx;
    > else
    < IstepMx = IstepMx+1;
      dtime = dtime + dtMx;
    >
    time = dtime ;   " Ceci permet d avoir dans visu la variation des coefs(dtime)"
    ZPAW = .true. ;
  >else< ZPAW=.false.;>
>
RETURN ;
END ; "========== END OF ZDL WRITTEN SYSTEM ====================="


*   On pourrait tout aussi bien partir d un precedant run et construire la matrice(dTMx)
sans l' option NbItStop qui serait remplacee par RESUME From OZDAT.CL1, at NbItStop

<-----/|\------>  ./Help/Users/Zinit/ZDL/zdl_New_Macros-04_93
**************************************************************************
***************************  Macro pour ZINIT  ***************************
***************************** (JLD 20/04/93) ***************************** 
**************************************************************************


==========================================================================
===========================> Divers et varie <============================
==========================================================================

CREATE-Z TR,TYPE=     creation d'un transfert sous Zeus
CREATE-U TR,TYPE=     idem sous U

==========================================================================
============> Acces aux parametres d'un objet declare  <==================
================> dans un CD ou TD bank depuis ZINIT <====================
==========================================================================
1) il faut modifier les routines GOCL et GOTR (cf ci-dessous)

2) il faut ajouter aux processeur le nouveau point d'entree pour l'acces
aux parametres  ( Parameter_Entry..., cf ci-dessous)

3) il faut rajouter au debut de ZINIT, dans la partie interpretee
par MORTRAN  (donc apres un &M ) +cde,OPACC.

4) utilisation dans ZINIT :
==========================


fill_CD   "ou fill_TD"
< toute intruction FORTRAN; 
  [Var_Name { (i {,j} ) } ] {:Var_type} = expression;  " { } : veut dire optionel"
>
avec :
   Var_Name : * Nom de la variable dans le bank CD (ou TD) (Case insensitif)
   Var_Type : * I ou R (optionel)
              * Type de la variable. Si le type n'est pas precise, on suit la
              convention FORTRAN (entier de I-N, reel sinon) de la variable Var_Name.
              * Si ce type ne correspond pas a celui de Var_Name lors de sa
              declaration dans le CD ou TD bank, on envoie une bordee d'insultes
              et on n'ecrit pas dans la variable
   i et j   : * Valeur des indices. On verifie qu'il n'y a pas de depassement.
              Meme supplice que precedemment en cas d'heresie ou de tentative
              quelconque de ne pas suivre La Norme.
Il est interdit d'ecrire dans une link_var ou dans une variable utilisee pour
dimensionner des tableaux.

 exemples :
- - - - - -
  CREATE CL Surf-1 , type = ND ;
  fill_CD
  < [Heat_capa]:r = CpSol;
  >
;
   CREATE TR , TYPE = RAD2 NTOT; " Transfert radiatif"
      ........
      fill_TD
      < [IntrvMin]:i = 1;          [IntrvMax]:i = 4;
        [Temp_Bias]:r = TBias;     [RCoefDif]:r = 1.;
        do I = 1,NbVolGaz
        < [Ro(I+1)]:r   = RoCtr(I);
          [Zmoy(I+1)]:r = ZCtr(I);
          [DZ(I+1)]:r   = DzCtr(I);
          [Sigm(I+1)]:r = SigCtr(I);
        >
      > "close fill_TD"
;
    create CL Bidon , type = Pour_Voir;
      fill_CD
      < [c]=t*u+6;
        do i=1,7
        < if I.lt.3
          < [ro(i)]=0;
          >else
          < ro(i) = ro(i-1) - xxx; [ro(i)]:r=ro(i);
          > "end if"
          do j=1,N
          < [Bid(i,j)]:r = sin(real(i))*sin(real(j));
          > "end do"
        > "end do"
        [z]:i = n; [I]:i = 3; [X]:r = y;
      > "close fill_CD"
;




**************************************************************************
********************  Macro pour les Processeurs  ************************
********************      "premisse d'un PDL"     ************************
**************************************************************************

==========================================================================
===========================> Divers et varie <============================
==========================================================================

** Pour les puristes
La syntaxe IMPLICIT ACCESS TO BANK ... est en standard. Il va sans dire
que IMPLICIT ACCES TO BANK... marche aussi...

Rq: Il peut être opportun de NE PAS faire d'IMPLICIT ACCESS, pour avoir
le plaisir de spécifier (Lxx).Symbole


==========================================================================
=======================> Nouveau point d'entree <=========================
=====================> pour l'acces au parametres <=======================
==========================================================================
1) il faut rajouter au debut de chaque processeur, dans la partie interpretee
par MORTRAN  (donc apres un &M ) +cde,OPACC.

2)Il faut rajouter a la fin des processeur (qu'il soit de cellule ou de
transfert ), en dehors de tous blocks (en particulier de from TR(LTR)<
ou from CL(LCL)< ), juste avant le END:
!
Parameter_Entry ;
END;

Variables reservees :
  = Pour une cellule: l'adresse du processeur est LCL, le nom du bank des
     paramatres est CD et son adresse LCD
  = Pour une transfert: l'adresse du processeur est LTR, le nom du bank des
     paramatres est TD et son adresse LTD

==========================================================================
=========================> Creation d'un objet <==========================
==========================================================================
creation d'un transfert (YEntry)
================================
Zinit_Entry {Proc_name}       " { } voulant dire optionel "
        ( Types(2)    = ...,
          Nb_Tr_Var   = ...,
          Nb_Extr     = ...,
          Nb_Fluxes   = .... );
  autres instrucions.......;
  return;

avec Proc_name : nom du processeur (optionel). La presence de ce nom peut ameliorer
                 la visibilite. On verifie que ce nom est bien celui du processeur.
* Ce que ca fait:
- Creation du point d'entre Y
- Creation bank TR(LTR), avec le nom du processeur  (CALL OTRN(...,(LTR).Types(1));'
- Pour tout ce qui est entre parenthese   ( Types(2)    = ..., Nb_Fluxes   = .... );
  ca genere : (LTR).Types(2)    = ...; (LTR).Nb_Fluxes   = ....;
- Cre le bank Fi et le link a LTR
- Nom de variable reserve :
   LTR  : adresse du bank TR
   LFIZ : adresse du bank provisoire FIZZ, qui sera copié dans FI et FIZ.
* Ce que ca ne fait pas : toucher au TD Bank. L'utilisateur doit typiquement faire
quelque chose du genre :
Lift LTD of class TD under (2,0);
"Link TDesc" @LTR@TR@TD@=LTD;

* exemples :
- - - - - - -
Pour  un processeur de transfert, on a typiquement quelques choses du genre
" "
Zinit_Entry KHAIR
              ( Types(2)    = 2 04 01 99 18,
                Nb_Tr_Var   = 2,    
                Nb_Extr     = 2,    
                Nb_Fluxes   = 0 );
!
! Ce Processeur est un K transfert avec une matrice D
CALL SBIT1(IQ(LTR),IOKTR);  "set K-transfer flag "
CALL SBIT1(IQ(LTR),IODMX);   "set D-matrix flag "
!
RETURN; 

Pour un processeur existant deja, avec une ecriture "standard" on doit effectuer
typiquement les modifications suivantes
------------------------------------------------
ENTRY YHTRN(LTR);                              |
Set .SO.N_Desc for TR = 0;                     |
Set .TO.N_Desc for TR = 0;                     |
Lift LTR of class TR under (LZUPT,-JZLNKT);    |
"  LTR bank filling "                          |
  CALL OHL2I('THTRN..',NAME);                  |
  CALL OTRN(NAME,..Types(1));                  |
  ..Types(2)            =050202;               |  Rem-      Zinit_Entry HTRN
  ..Nb_Tr_Var           =JZTAU;                => place =>     ( Types(2)   = . .. 05 02 02,
  ..Nb_Extr             =JZTAU;                |  par            Nb_Tr_Var  =JZTAU,
  ..Nb_Fluxes           =JZTAU;                |                 Nb_Extr    =JZTAU,
  If_SO                                        |                 Nb_Fluxes  =JZTAU )
    <  ..SO.N_Desc      =(TR).FS.SO.N_Desc  >  |                
  If_TO                                        |                
    <  ..TO.Nxt_lvl_Ad  =4;                    |                
       ..TO.N_Desc      =(TR).FS.TO.N_Desc  >  |                
" "                                            |                
Set .NDatas for FI = (LTR).Nb_Tr_Var;          |                
Lift LFIZ of class FI under (7,0);             |                                               
"Link FIZero" @LTR@TR@FI@=LFIZ;                |
------------------------------------------------
" "                                                 
------------------------------------------------
set .Nb_Edge for TD = (LTR).Nb_Tr_Var;         |  le reste
Lift LTD of class TD under (2,0);              |  est
"Link TDesc" @LTR@TR@TD@=LTD;                  |  inchange
" "                                            |
RETURN;                                        |
                                                           

creation d'une cellule (IEntry)
===============================
Zinit_Entry {Proc_Name}  ( Types(2)   = ...,        " { } voulant dire optionel "
                           Nb_St_Var  = ....  );
  autres instrucions.......;
  return;

avec Proc_name : nom du processeur (optionel). La presence de ce nom peut ameliorer
                 la visibilite. On verifie que ce nom est bien celui du processeur.
* Ce que ca fait:
- Creation du point d'entre I
- Creation bank CL(LCL), avec le nom du processeur CALL OCLN(NAME,(LCL).Types(1));
- Pour tout ce qui est entre parenthese   ( Types(2)    = ..., Nb_St_Var   = .... );
  ca genere : (LCL).Types(2)    = ...; (LCL).Nb_St_Var   = .... ;
- Cree le bank ETA et le link a LCL
- Nom de variable reserve :
   LCL  : adresse du bank CL
   LETA : adresse du bank ET
* Ce que ca ne fait pas : toucher au CD Bank. L'utilisateur doit typiquement faire
quelque chose du genre :
Lift LCD of class CD under (2,0);
"Link CDesc" @LCL@CL@CD@=LCD;

*  exemples :
- - - - - - -
Pour  un processeur de cellule, on a typiquement quelques choses du genre
Zinit_Entry HAIR
         ( Types(2)   = 2 04 01 01 18,
           Nb_St_Var  = 4  );
" "
Set .NbMaxEdge  for CD = 10 ; "**** a modifier eventuellement *****"
Lift LCD of class CD under (2,0);
"Link CDesc" @LCL@CL@CD@=LCD;
return;
" "

Pour un processeur existant deja, avec une ecriture "standard" on doit effectuer
typiquement les modifications suivantes
-------------------------------------------------
ENTRY IND(LCL);                                 |
!                                               |
"-NO DESCRIPTION WORDS"                         |
Set .SO.N_Desc for CL = 0;                      |
Set .TO.N_Desc for CL = 0;                      |
" "                                             |
Lift LCL of class CL under (LZUPS,-JZLNKS);     |
"  LCL bank filling "                           |
Point on (LCL);                                 |
  CALL OHL2I('CND..',NAME);                     |
  CALL OCLN(NAME,..Types(1));                   |
  ..Types(2)=010104;                            |             Zinit_Entry ND
  ..Nb_St_Var           = 1;                    ==>remplace=>   ( Types(2)  = 010104,
  ..Nm_Cl               = JZNAME;               |     par         Nb_St_Var  = 1) ;
  ..Cd_Cl               = JZCODE;               |
  If_SO                                         |
    <  ..SO.Nxt_lvl_Ad  = 3;                    |
       ..SO.N_desc      = (CL).FS.SO.N_Desc   > |
  If_TO                                         |
    <  ..TO.N_desc      = (CL).FS.TO.N_Desc   > |
" "                                             |
" ETA bank lifting and filling"                 |
Set .Ndatas for ET = (LCL).Nb_St_Var;           |
Lift LETA of class ET under (7,0);              |
 @LCL@CL@ET@=LETA;                              |
-------------------------------------------------
" "
-------------------------------------------------
Lift LCD of class CD under (2,0);               |  le reste
"Link CDesc" @LCL@CL@CD@=LCD;                   |  est
" "                                             |  inchange
RETURN;                                         |
                                                |

==========================================================================
============> Acces aux parametres d'un objet exterieur <=================
==================> declares dans un CD ou TD bank <======================
==========================================================================

1) il faut modifier les routines GOCL et GOTR (cf. ci-dessous)

2) il faut ajouter aux processeur le nouveau point d'entree pour l'acces
aux parametres  ( Parameter_Entry..., cf ci-dessus)

3) Utilisation dans un PROCESSEUR :
===================================

* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable declare dans un CD ou TD bank d'un autre processeur.

  link Var1 to Var2 of (LProc);
  avant on faisait @(LTD.TD).Var1 = LTD2 + N; )
avec Var1 : nom de la link_var "locale"
     Var2 : nom de la var ou local_var "externe"
     LProc: Adresse permettant d'acceder a cette variable "externe" 
     ( LProc = LSV ou LCL ou LTV ou LTR ). Ne doit en aucun correspondre
            au processeur ou l'on est : ce pauvre FORTRAN n'etant pas reentrant,
            "results may be hazardous"

* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable "reservee" (apres avoir fait un Grasp Array de cette
variable)

  link Var1 to Reserved_Var(n);   
avec Var1         : nom de la link_var "locale"
     Reserved_Var : Eta_SV , Fi_TV , Fiz_TV
     n            : indice dans la Reserved_Var

* Pour faire "pointer" une link_var du CD ou TD bank du processeur ou l'on
est sur une variable de ce meme processeur.

  link Var1 to Var2 ;
avec Var1 : nom de la link_var "locale"
     Var2 : nom de la var ou local_var "locale"

* Pour lire une variable declaree dans un CD ou TD bank d'un autre processeur
et la ranger dans une variable Fortran (ou une variable declare dans le CD ou
TD bank locale, si on a fait un IMPLICIT ACCESS ...)

  set X = [Var2]{:type} of (LProc); " {...} veut dire optionel "
 avec X    : nom de la variable Fortran (ou d'une variable declaree dans le CD ou
             TD bank local, si on a fait un IMPLICIT ACCESS ...)
      Var2 : nom de la var , local_var ou link_var "externe"
      type : I ou R ; type de la var, local_var ou link_var "externe". Si le type
             n'est pas specifie, on prend le type FORTRAN par defaut (entier de I
             a N, reel sinon) de la variable externe Var2. Diagnostique d'erreur
             si le type (precise ou par defaut) ne correspond pas au type
             de Var2 tel qu'il a ete precise lors de sa declaration.
      LProc: Adresse permettant d'acceder a cette variable "externe" 
             ( LProc = LSV ou LCL ou LTV ou LTR )

* exemple :
- - - - - -
dans une cellule :
from CL(LCL)
<
......
   Iedge = 0;
   skip thru SV(LSV)            "Boucle sur les C-Plug"
   <  skip thru CX(LCX)         "Boucle sur les connexions"
     <  from TV(LTV)
        < IF ((LTV).Nb_Tr_Var.EQ.0) TO NEXT LCX;
          GRASP ARRAY FI_TV (LTV);
          Iedge = Iedge +1;
          get TR(LTR) ;          NatVar = mod((LTR).Types(2),100);
!         ***** Edge type 3 : flux de chaleur et d'humidite
          If ( NatVar.EQ.18)
          < EdgeType(Iedge) = 3;
! lien sur des variables reservees, pour lesquels ont a fait un GRASP au prealable
            link FluxT_Edge(Iedge)  to FI_TV(1);
            link FluxWm_Edge(Iedge) to FI_TV(2);
! on va chercher le signe du transfert
            Sign_Edge(Iedge) = SIGN_TV(LTV);
! quelques essais
            link BIDON to CMAX of (LTV);         Z_Pr : Bidon;
            set x = [CMAX] of (LTV);             Z_Pr : x;
;
            link x1 to x3 of(LTV);
            link x1(i,j) to x3 of(LTV);
            link x1(i,j) to x3(k,l) of(LTV);
;
            set x = [x3]:r of (LTV); 
            set x(i,j) = [x3(k,l)] of (LTV); 
            set x(i,j) = [x3(k)]:i of (LTV); 
;
          > "close if NatVar..."
    ...........
        > "close from TV(LTV)"
      > "close skip thru CX(LCX)"
    > "close skip thru SV(LSV)"
.....
> "close from CL(LCL)"

;

**************************************************************************
************> Modification de GOCL et GOTR pour l'acces <*****************
********************> aux parametres d'un objet <*************************
******************> declares dans un CD ou TD bank <**********************
**************************************************************************

sous CMZ
========

1) dans le patch ZINIT_CDE, les deux deck $TRLIST et $CLLIST doivent contenir les
deux +keep TRLIST et +keep CLLIST. contenant la liste des processeurs :

+PATCH,//ZARLETY/ZINIT_CDE
+KEEP,TRLIST.
*CMZ :          12/03/93  18.32.53  by  Robert FRANCHISSEUR
*-- Author :    Robert FRANCHISSEUR   12/03/93
PROCESSORS LIST
<  "Liste des processeurs de transfert"
   TFIX2, THCVA, TFQO, TRAD2, TKND, TKHAIR,TCDTR
   , TSPEAR, TPROB ,TTHCX ;
>

+PATCH,//ZARLETY/ZINIT_CDE
+KEEP,CLLIST.
*CMZ :          12/03/93  18.34.10  by  Robert FRANCHISSEUR
*-- Author :    Robert FRANCHISSEUR   12/03/93
PROCESSORS LIST
<  "Liste des processeurs de cellule"
    CND, CHAIR, CFIX, COCEAN
>

2) dans le patch ZINIT, il faut les 4 decks suivants, strictement
identiques pour tout le monde

+PATCH,//ZARLETY/ZINIT
+DECK,GOCL.
/*CMZ :          12/03/93  18.35.39  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN1cl.
+SEQ,ClList.
;
+DECK,GO2CL.
/*CMZ :          12/03/93  18.35.58  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN2cl.
+SEQ,ClList.
;
+DECK,GOTR.
/*CMZ :          12/03/93  18.36.17  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN1TR.
+SEQ,TrList.
;
+DECK,GO2TR.
/*CMZ :          12/03/93  18.36.29  by  Robert FRANCHISSEUR*/
/*CMZ :  1.01/00 28/01/93  18.04.22  by  Jean-Louis DUFRESNE*/
/*-- Author :*/
+SEQ,ZIN2TR.
+SEQ,TRList.
;

                                                                          


<-----/|\------>  ./Help/Versions_futures/Emballages.steph
*******************************************************************
************ Habillages ZOOM pour interaction CIRED ***************
*********************************************** Vendredi 11/10/2002             



idee de partir d'un cliclodrome VentSim qui prepare
// Bonin, un template de processerus.

Autre outil important : lie aux changements de structures imposses
par etudes de boucles de retroactions diverses, dans le sens ou
elles etendent l'idee de decouple ... a developper TEF donc
=> des Ct -> des D etc.
a envisager sous la forme de moacros zinit.

pour Decembre, imaginer un cahier des charges // VentSim
par ex : un schema de connections qui genere les macros de Bonin.
? qu'est-ce qui pourrait etre fait par un cdd en 3-6 mois ?

*****************************************************************

reprise aussi d'antiennes
1/ vecteurs parametres dans ZOOM
2/ matrice A stokee
3/ recriture du produit CtA-1B
4/ sensib automatiques
5/ vers adjoint

VIZU
****
amelioration de Borel, options divisant alpha par beta etc cf Steph notes
<-----/|\------>  ./Help/Versions_futures/Emballages.steph.bak
*******************************************************************
************ Habillages ZOOM pour interaction CIRED ***************
*********************************************** Vendredi 11/10/2002             



idee de partir d'un cliclodrome VentSim qui prepare
// Bonin, un template de processeurs.

Autre outil important : lie aux changements de structures imposses
par etudes de boucles de retroactions diverses, dans le sens ou
elles etendent l'idee de decouple ... a developper TEF donc
=> des Ct -> des D etc.
a envisager sous la forme de moacros zinit.

pour Decembre, imaginer un cahier des charges // VentSim
par ex : un schema de connections qui genere les macros de Bonin.
? qu'est-ce qui pourrait etre fait par un cdd en 3-6 mois ?

*****************************************************************

reprise aussi d'antiennes
1/ vecteurs parametres dans ZOOM
2/ matrice A stokee
3/ recriture du produit CtA-1B
4/ sensib automatiques
5/ vers adjoint

VIZU
****
amelioration de Borel, options divisant alpha par beta etc cf Steph notes
<-----/|\------>  ./Help/Versions_futures/Futura_is_pro
*****************************************************************************
*****************************************************************************
*********** Nouveautes de la version dite Futura ****************************
*****************************************************************************
******************************************************* mercredi 17/02/1999 *

***********
** ZINIT **
***********
 Nouveaux C-Plug Name et Code
=============================
On peut donner un nom - en plus du numéro - aux C-PLUGs :

 C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
 > $ZOOM/Help/Users/Zinit/ZDL/Zdl.html
et cf Proc pour les utiliser dans les Skip thru ...

 Prints
=======
  z_pr, z_pad sont aujourd'hui utilisables dans le ZINIT. cf PROC

connection directe de Transfert a Transferts.
=============================================
Après Create d'un TR, on lui donne un petit nom par :
Name Tr as: Conv;
Name Tr as: Heat(1); de façon donc tres semblable aux cellules.
récupération par : Get Tr Conv; ce qui permet de délocaliser les Fill_TD, comme on
pouvait dejà le faire pour les cellules.

ATTENTION : comme pour les objets, ces symboles sont case sensitive;

connection :
  join 2 to Tr (Conv,4);  " création sous la fm courante"
ou  join (Heat(1),2) to Tr (Conv,4);  " création sous la fm courante"
 join (Heat(1),2) to Tr (Conv,4) under PIEC;" création sous la fm PIEC"

en effet, on va créer une cellule (*) bidon, qu'il s'agit de placer dans
la structure. Ces Transferts seront tous deux connectés à un C-Plug bidon
de la meme cellule.
On peut signaler aux amateurs de connectique que les exercices d'Yves CLERGENT
ont bénéficié de cette procédure pour réduire drastiquement la place mémoire
utilisée pour leurs matrices D.

Gestion des pas de temps dans ZSTEER / proc
===========================================
Pour amener les utilisateurs à gérer leur pas de temps dans ZSteer, on a créé
un tableau Time_char(4) en common entre les processeurs et Zinit. :

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)

Exemple d'utilisation dans un exemple conducto-convectif 
-------------------------------------------------------
               > cf $ZOOM/Help/Users/Combined_Facilities/Gestion_des_pas_de_temps


*****************
** PROCESSEURS **
*****************
Print facilities :
==================
     Z_Pad : les mêmes que Z_Pr, avec sorties console;
     Z_Pr_Error_Cl(LCL/TR):'BlaBla',varlist;  donne la blabla précédé de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)
                    (le premier élément de la liste DOIT être un char string).
  symboles utiles :
      SV_CL_ID(LSV) genere "MESH-   1/Face-   2"
      en print* ou dans Z_Pr; ex : Z_Pr/Matrix D on Cl:/:SV_CL_ID(LSV);

 Nouveaux C-Plug Name et Code
=============================
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactées
Les additions suivantes sont utiles pour sélectionner les C-Plug qui
sont identifiés par (LSV).C_Plug_Nm, (LSV).C_Plug_Nb [ex: Face-1]

... /SV(LSV.eq.*-*)/  pas d'effet    [* stands for any]
... /SV(LSV.eq.Face-*)/
... /SV(LSV).eq.*-1/
... /SV(LSV.eq.*-1,2,3,4)/
... /SV(LSV.eq.Face-1,2,3,4)/
... /SV(LSV.ne.Face-*)/
... /SV(LSV.ne.Face-1,2,3,4)/ == .NOT.(LSV.eq.Face-1,2,3,4)
exemple (pas forcément à suivre)
  SKIP THRU TV(LTV.ne.LTV2)/CX(LCX.ne.LCX2) (JCX=1,*)/.SV(LSV.ne.Face-3,4,5)/
            .CL(LCL.ne.LCL2)/SV(LSV2.eq.Bulk-*)/CX(LCX3.ne.LCX)/
            .TPROBE(LTV3.ne.LTV)
  < ;continue; to next LTV; to next LCX; to next LCX3;
  >;

 Var_linked 
===========
 {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV, Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir accès à ses composantes designés par
un indice supplémentaire ex : Fi_Proc_TV(k/kCx) donne la valeur de la i ème
composante du Fi_TV linké sur Fi_Proc_TV(2); les vérifications standard de
bornes d'indice sont effectuées sur k;

 cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED 

*************************************************************************
********** Futura : Connections directes TRansfert a TRansfert **********
*************************************************************************

les : SKIP THRU TV(LTV)/CX(LCX) < ne retiennent que les TV connectés à
une cellule au moins et les CX non connectés directement à un transfert
(via l'objet (*) de la famille).

All_TV prend tous les TV (T_probes y compris), All_CX tous les CX.
On pourra alors utiliser les expressions :
IF (TV_to_TR(LTV)) then; IF (CX_to_TR(LCX)) then; pour les branchements;
TV_to_TR invoque l'expression logique : JBIT(IQ(LTV),IODITR).eq.1
CX_to_TR invoque l'expression logique : JBIT(IQ(LCX),IODITR).eq.1

Pour suivre les connections jusqu'à un transfert, on utilise alors :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)<
qui est équivalente a :
SKIP THRU Cx(LCX)
< IF (JOBIT(IQ(LCX),IODITR).eq.0) To Next LCX;
  SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)<

Dans tous les cas, on définit une matrice D particulière :

grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX); dans le cas des SKIP THRU explicites
ou alors :
grasp array D_TV (LTV2,LTR) for (*,*,LCX); dans le cas des SKIP THRU rapides;

Rq : ces dernieres macros rapides marchent aussi dans les cas standards où
on ne ferait pas reconnaissance de la Cellule médiate.

exemples complet de boucle de connection directe :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)
< grasp array D_TV (LTV2,LTR) for (*,*,LCX);
  D_TV(i,j)= ...;
>;
Avec boucles explicites :
SKIP THRU CX(LCX)
< IF (Cx_to_TR)
  < SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)
    < grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX);
    ;;; on remarque que l'objet * de connexion direct des TR ne comporte qu'un SV.
    >;
  >ELSE
  < " connection aux cellules "
    ;;;
  >;
(l'intérêt réside dans le fait que la Cellule connectée ne verra pas ces CX)

**********
** VIZU **
**********

OT2CMF addition de >Fortran Call okutil, qui génère un menu 
 zoom_util
==========  avec 2 commandes :
 Borel_Fit, pour identification de modes
----------
cf > $ZOOM/Help/Users/Graphics_and_post_treatment/Borel_util

 Arrow_Hist, qui fabrique des map de flêches à partir de deux maps.
-----------

 Variable Mesh Facilities and maps
=================================
Pour sortir des maps en mode à maillage variable.
cf $ZOOM/Help/Users/Graphics_and_post_treatment/Maps <<< 

Portabilité
===========

Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)


*************
** MORTRAN **
*************

 IF ELSEIF avec liste = con1,cond2 etc
======================================
! allowed form : if arg.eq.liste .and. ...
!                      .eq. ou .or.  // .and. ou .or.
! if k.eq.1,3,4 <
! == if (k.eq.1).or.(k.eq.3).or.(k.eq.4) <
! if k.eq.1,3 .and. l.ne.1,2 <
! == if (((k.eq.1).or.(k.eq.3)) .and. ((l.ne.1).and.(l.ne.2)) <

***********
** HELPs **
***********
Les langages sont à jours, les nouveautés marquées par "FUTURA"
Le help de ZINIT a été entièrement refondu
(préparé pour une future version html):
 > $ZOOM/Help/Users/Zinit/ZDL/Zdl.html

Pour les fan du Mx_Package, voire de nouveaux helps dans :
 > $ZOOM/Help/Programmers/Ker/Mx_Package/...

============================================================================
============================================================================
============================================================================
************
** NOYEAU **
************

sur Le Bug :
============
Il existe une autre procedure que DOPLUG pour détecter Le Bug, désormais renommé
"Clubbered Connections". Le principe est de suivre apres OFRAME l'arbre
sous une IN et de lister l'ordre des Transferts de chaque IX; il n'y a pas
de diagnostics, il faut le faire soit même; on détecte une Club' Con' en
constatant que ces listes ne sont pas naturelles. Mais, comme ça coûte très cher,
on active cette procédure dans ZINIT par :
 OZPLVL(10) = 2;

Provisonnel pour gestion des futurs nouveaux appels aux point d'entrée
======================================================================
T,F et D des Transferts :
 Flag dans /ITER/ kerTFD qui prend les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futurix
 de la navette. cf $ZOOM/Help/Versions_futures/Futurix  <

***************
** DEBUGGING **
***************
- Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
- Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
- OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
  Grasp Array Fi_Diag(LTR);
- OILUN initialisation de OHTITLE pour éviter nul char si pas rempli.
- petit bug dans OCIC DeClub : on avait 2 fois le même tr dans certains cas.
- Bug in OIXFAD de l'origine : on ne recodait en tête de routine que les Tr
  de la même face (que LF); or quand on crée une nouvelle IX, on recherche
  les Tr de la IN root qui codent aux mêmes Ctts, alors que les hors Fc ont
  gardés leur ancien codes; il n'y avait pas de conséquence, car on fait
  ensuite un scanning des fc/fm, sauf pour ONTRIX qui s'en trouvait récupérer
  ces extras TR.
  Correction : les extras Tr gardent forcément une IQ(LIT2+3) non nulle.

***************************************
** Re-ECRITURES de routines du noyau **
***************************************
ré-écrit en ZBM_ker : EOLE, EOLES, EOLEF, EOLMAX,  ORES.
 OCWRK et OCMX ré-écrits.
 OGAUS ré-écrit avec tous link et data precomp.
 OCMXTR en ZBM0.
============================================================================
============================================================================
============================================================================

<-----/|\------>  ./Help/Versions_futures/Futura_is_pro.bak
*****************************************************************************
*****************************************************************************
*********** Nouveautes de la version dite Futura ****************************
*****************************************************************************
******************************************************* mercredi 17/02/1999 *

***********
** ZINIT **
***********
 Nouveaux C-Plug Name et Code
=============================
On peut donner un nom - en plus du numéro - aux C-PLUGs :

 C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
 > /zoom/Help/Users/Zinit/ZDL/Zdl.html
et cf Proc pour les utiliser dans les Skip thru ...

 Prints
=======
  z_pr, z_pad sont aujourd'hui utilisables dans le ZINIT. cf PROC

connection directe de Transfert a Transferts.
=============================================
Après Create d'un TR, on lui donne un petit nom par :
Name Tr as: Conv;
Name Tr as: Heat(1); de façon donc tres semblable aux cellules.
récupération par : Get Tr Conv; ce qui permet de délocaliser les Fill_TD, comme on
pouvait dejà le faire pour les cellules.

ATTENTION : comme pour les objets, ces symboles sont case sensitive;

connection :
  join 2 to Tr (Conv,4);  " création sous la fm courante"
ou  join (Heat(1),2) to Tr (Conv,4);  " création sous la fm courante"
 join (Heat(1),2) to Tr (Conv,4) under PIEC;" création sous la fm PIEC"

en effet, on va créer une cellule (*) bidon, qu'il s'agit de placer dans
la structure. Ces Transferts seront tous deux connectés à un C-Plug bidon
de la meme cellule.
On peut signaler aux amateurs de connectique que les exercices d'Yves CLERGENT
ont bénéficié de cette procédure pour réduire drastiquement la place mémoire
utilisée pour leurs matrices D.

Gestion des pas de temps dans ZSTEER / proc
===========================================
Pour amener les utilisateurs à gérer leur pas de temps dans ZSteer, on a créé
un tableau Time_char(4) en common entre les processeurs et Zinit. :

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)

Exemple d'utilisation dans un exemple conducto-convectif 
-------------------------------------------------------
               > cf /zoom/Help/Users/Combined_Facilities/Gestion_des_pas_de_temps


*****************
** PROCESSEURS **
*****************
Print facilities :
==================
     Z_Pad : les mêmes que Z_Pr, avec sorties console;
     Z_Pr_Error_Cl(LCL/TR):'BlaBla',varlist;  donne la blabla précédé de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)
                    (le premier élément de la liste DOIT être un char string).
  symboles utiles :
      SV_CL_ID(LSV) genere "MESH-   1/Face-   2"
      en print* ou dans Z_Pr; ex : Z_Pr/Matrix D on Cl:/:SV_CL_ID(LSV);

 Nouveaux C-Plug Name et Code
=============================
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactées
Les additions suivantes sont utiles pour sélectionner les C-Plug qui
sont identifiés par (LSV).C_Plug_Nm, (LSV).C_Plug_Nb [ex: Face-1]

... /SV(LSV.eq.*-*)/  pas d'effet    [* stands for any]
... /SV(LSV.eq.Face-*)/
... /SV(LSV).eq.*-1/
... /SV(LSV.eq.*-1,2,3,4)/
... /SV(LSV.eq.Face-1,2,3,4)/
... /SV(LSV.ne.Face-*)/
... /SV(LSV.ne.Face-1,2,3,4)/ == .NOT.(LSV.eq.Face-1,2,3,4)
exemple (pas forcément à suivre)
  SKIP THRU TV(LTV.ne.LTV2)/CX(LCX.ne.LCX2) (JCX=1,*)/.SV(LSV.ne.Face-3,4,5)/
            .CL(LCL.ne.LCL2)/SV(LSV2.eq.Bulk-*)/CX(LCX3.ne.LCX)/
            .TPROBE(LTV3.ne.LTV)
  < ;continue; to next LTV; to next LCX; to next LCX3;
  >;

 Var_linked 
===========
 {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV, Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir accès à ses composantes designés par
un indice supplémentaire ex : Fi_Proc_TV(k/kCx) donne la valeur de la i ème
composante du Fi_TV linké sur Fi_Proc_TV(2); les vérifications standard de
bornes d'indice sont effectuées sur k;

 cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED 

*************************************************************************
********** Futura : Connections directes TRansfert a TRansfert **********
*************************************************************************

les : SKIP THRU TV(LTV)/CX(LCX) < ne retiennent que les TV connectés à
une cellule au moins et les CX non connectés directement à un transfert
(via l'objet (*) de la famille).

All_TV prend tous les TV (T_probes y compris), All_CX tous les CX.
On pourra alors utiliser les expressions :
IF (TV_to_TR(LTV)) then; IF (CX_to_TR(LCX)) then; pour les branchements;
TV_to_TR invoque l'expression logique : JBIT(IQ(LTV),IODITR).eq.1
CX_to_TR invoque l'expression logique : JBIT(IQ(LCX),IODITR).eq.1

Pour suivre les connections jusqu'à un transfert, on utilise alors :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)<
qui est équivalente a :
SKIP THRU Cx(LCX)
< IF (JOBIT(IQ(LCX),IODITR).eq.0) To Next LCX;
  SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)<

Dans tous les cas, on définit une matrice D particulière :

grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX); dans le cas des SKIP THRU explicites
ou alors :
grasp array D_TV (LTV2,LTR) for (*,*,LCX); dans le cas des SKIP THRU rapides;

Rq : ces dernieres macros rapides marchent aussi dans les cas standards où
on ne ferait pas reconnaissance de la Cellule médiate.

exemples complet de boucle de connection directe :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)
< grasp array D_TV (LTV2,LTR) for (*,*,LCX);
  D_TV(i,j)= ...;
>;
Avec boucles explicites :
SKIP THRU CX(LCX)
< IF (Cx_to_TR)
  < SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)
    < grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX);
    ;;; on remarque que l'objet * de connexion direct des TR ne comporte qu'un SV.
    >;
  >ELSE
  < " connection aux cellules "
    ;;;
  >;
(l'intérêt réside dans le fait que la Cellule connectée ne verra pas ces CX)

**********
** VIZU **
**********

OT2CMF addition de >Fortran Call okutil, qui génère un menu 
 zoom_util
==========  avec 2 commandes :
 Borel_Fit, pour identification de modes
----------
cf > /zoom/Help/Users/Graphics_and_post_treatment/Borel_util

 Arrow_Hist, qui fabrique des map de flêches à partir de deux maps.
-----------

 Variable Mesh Facilities and maps
=================================
Pour sortir des maps en mode à maillage variable.
cf /zoom/Help/Users/Graphics_and_post_treatment/Maps <<< 

Portabilité
===========

Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)


*************
** MORTRAN **
*************

 IF ELSEIF avec liste = con1,cond2 etc
======================================
! allowed form : if arg.eq.liste .and. ...
!                      .eq. ou .or.  // .and. ou .or.
! if k.eq.1,3,4 <
! == if (k.eq.1).or.(k.eq.3).or.(k.eq.4) <
! if k.eq.1,3 .and. l.ne.1,2 <
! == if (((k.eq.1).or.(k.eq.3)) .and. ((l.ne.1).and.(l.ne.2)) <

***********
** HELPs **
***********
Les langages sont à jours, les nouveautés marquées par "FUTURA"
Le help de ZINIT a été entièrement refondu
(préparé pour une future version html):
 > /zoom/Help/Users/Zinit/ZDL/Zdl.html

Pour les fan du Mx_Package, voire de nouveaux helps dans :
 > /zoom/Help/Programmers/Ker/Mx_Package/...

============================================================================
============================================================================
============================================================================
************
** NOYEAU **
************

sur Le Bug :
============
Il existe une autre procedure que DOPLUG pour détecter Le Bug, désormais renommé
"Clubbered Connections". Le principe est de suivre apres OFRAME l'arbre
sous une IN et de lister l'ordre des Transferts de chaque IX; il n'y a pas
de diagnostics, il faut le faire soit même; on détecte une Club' Con' en
constatant que ces listes ne sont pas naturelles. Mais, comme ça coûte très cher,
on active cette procédure dans ZINIT par :
 OZPLVL(10) = 2;

Provisonnel pour gestion des futurs nouveaux appels aux point d'entrée
======================================================================
T,F et D des Transferts :
 Flag dans /ITER/ kerTFD qui prend les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futurix
 de la navette. cf /zoom/Help/Versions_futures/Futurix  <

***************
** DEBUGGING **
***************
- Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
- Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
- OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
  Grasp Array Fi_Diag(LTR);
- OILUN initialisation de OHTITLE pour éviter nul char si pas rempli.
- petit bug dans OCIC DeClub : on avait 2 fois le même tr dans certains cas.
- Bug in OIXFAD de l'origine : on ne recodait en tête de routine que les Tr
  de la même face (que LF); or quand on crée une nouvelle IX, on recherche
  les Tr de la IN root qui codent aux mêmes Ctts, alors que les hors Fc ont
  gardés leur ancien codes; il n'y avait pas de conséquence, car on fait
  ensuite un scanning des fc/fm, sauf pour ONTRIX qui s'en trouvait récupérer
  ces extras TR.
  Correction : les extras Tr gardent forcément une IQ(LIT2+3) non nulle.

***************************************
** Re-ECRITURES de routines du noyau **
***************************************
ré-écrit en ZBM_ker : EOLE, EOLES, EOLEF, EOLMAX,  ORES.
 OCWRK et OCMX ré-écrits.
 OGAUS ré-écrit avec tous link et data precomp.
 OCMXTR en ZBM0.
============================================================================
============================================================================
============================================================================

<-----/|\------>  ./Help/Versions_futures/Futura_is_pro.bak1
*****************************************************************************
*****************************************************************************
*********** Nouveautes de la version dite Futura ****************************
*****************************************************************************
******************************************************* mercredi 17/02/1999 *

***********
** ZINIT **
***********
 Nouveaux C-Plug Name et Code
=============================
On peut donner un nom - en plus du numéro - aux C-PLUGs :

 C-Plug Face-1:1; C-Plug Bulk-3:1,3,5,7; C-Plug Edge-2:1 thru 7;
 > /zoom/Help/Users/Zinit/ZDL/Zdl.html
et cf Proc pour les utiliser dans les Skip thru ...

 Prints
=======
  z_pr, z_pad sont aujourd'hui utilisables dans le ZINIT. cf PROC

connection directe de Transfert a Transferts.
=============================================
Après Create d'un TR, on lui donne un petit nom par :
Name Tr as: Conv;
Name Tr as: Heat(1); de façon donc tres semblable aux cellules.
récupération par : Get Tr Conv; ce qui permet de délocaliser les Fill_TD, comme on
pouvait dejà le faire pour les cellules.

ATTENTION : comme pour les objets, ces symboles sont case sensitive;

connection :
  join 2 to Tr (Conv,4);  " création sous la fm courante"
ou  join (Heat(1),2) to Tr (Conv,4);  " création sous la fm courante"
 join (Heat(1),2) to Tr (Conv,4) under PIEC;" création sous la fm PIEC"

en effet, on va créer une cellule (*) bidon, qu'il s'agit de placer dans
la structure. Ces Transferts seront tous deux connectés à un C-Plug bidon
de la meme cellule.
On peut signaler aux amateurs de connectique que les exercices d'Yves CLERGENT
ont bénéficié de cette procédure pour réduire drastiquement la place mémoire
utilisée pour leurs matrices D.

Gestion des pas de temps dans ZSTEER / proc
===========================================
Pour amener les utilisateurs à gérer leur pas de temps dans ZSteer, on a créé
un tableau Time_char(4) en common entre les processeurs et Zinit. :

      EQUIVALENCE (Time_char(1),dTime_next),(Time_char(2),Tim_char_Cl),
     +(Time_char(3),Tim_char_Tr)

Exemple d'utilisation dans un exemple conducto-convectif
-------------------------------------------------------
au début de Zinit on initialise les valeurs fixes :
! Temps caractéristiques
rNu = Viscosite/Ro_Air;
Alpha = Conduct/Ro_Air/Cp;
 TimeNu = DX*DX/rNu;
 TimeAlpha = DX*DX/Alpha;
Z_Pr/Temps caracteristiques/: TimeNu, TimeAlpha;
Z_Pad/Temps caracteristiques/: TimeNu, TimeAlpha;
Time_char(3) = TimeNu; Time_char(4) = TimeAlpha;
! init
Time_char(1)=99999.; Time_char(2)=99999.;

puis, dans le ZSTEER :
! ***********************
! Gestion du pas de temps
! ***********************
Z_Pr/ test/:dTime, Time_char; Z_Pad/ test/:dTime, Time_char;
if (istep.ge.1)
< dTime = min (4.*dTime, Time_char(1),Time_char(2)
                       ,Time_char(4)/2.5)/float(NITER+1);
>;

! reset U & V Courant limit
Time_char(1)=99999.; Time_char(2)=99999.;
il a suffit de gerer dans un processeur judicieusement choisi
les deux premiers Time_char :
! Zsteer info for steering dTime
DO i=1,2
< if (abs(VIS_uv(i)) .gt. 1.E-06) then;
    Time_char(i)
       = min ( Time_char(i), min(t_side(1),t_side(2))/abs(VIS_uv(i)) );
  endif;
>;
;
On obtiend un critère en Couran (cad assez rapidement).
Inconvenient : les vitesses sont obtenues après la D_loop, c'est donc
à ce moment qu'il faudrait effectuer ce test, alors que ZSTEER est appelé
avant. Solution future : on fait le Courant_remplissage dans un K entry
de cellule (appelés pendant la D_loop, et on appellerait un nouveau point
d'entrée : KSTEER de Zinit, juste avant le step_advance, qui utilise le
dTime.


*****************
** PROCESSEURS **
*****************
Print facilities :
==================
     Z_Pad : les mêmes que Z_Pr, avec sorties console;
     Z_Pr_Error_Cl(LCL/TR):'BlaBla',varlist;  donne la blabla précédé de
                    **PROCERROR, et ajoute le CL/TR ID si /not,ZPRINT(LCL/TR)
                    (le premier élément de la liste DOIT être un char string).
  symboles utiles :
      SV_CL_ID(LSV) genere "MESH-   1/Face-   2"
      en print* ou dans Z_Pr; ex : Z_Pr/Matrix D on Cl:/:SV_CL_ID(LSV);

 Nouveaux C-Plug Name et Code
=============================
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactées
Les additions suivantes sont utiles pour sélectionner les C-Plug qui
sont identifiés par (LSV).C_Plug_Nm, (LSV).C_Plug_Nb [ex: Face-1]

... /SV(LSV.eq.*-*)/  pas d'effet    [* stands for any]
... /SV(LSV.eq.Face-*)/
... /SV(LSV).eq.*-1/
... /SV(LSV.eq.*-1,2,3,4)/
... /SV(LSV.eq.Face-1,2,3,4)/
... /SV(LSV.ne.Face-*)/
... /SV(LSV.ne.Face-1,2,3,4)/ == .NOT.(LSV.eq.Face-1,2,3,4)
exemple (pas forcément à suivre)
  SKIP THRU TV(LTV.ne.LTV2)/CX(LCX.ne.LCX2) (JCX=1,*)/.SV(LSV.ne.Face-3,4,5)/
            .CL(LCL.ne.LCL2)/SV(LSV2.eq.Bulk-*)/CX(LCX3.ne.LCX)/
            .TPROBE(LTV3.ne.LTV)
  < ;continue; to next LTV; to next LCX; to next LCX3;
  >;

 Var_linked 
===========
 {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV, Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir accès à ses composantes designés par
un indice supplémentaire ex : Fi_Proc_TV(k/kCx) donne la valeur de la i ème
composante du Fi_TV linké sur Fi_Proc_TV(2); les vérifications standard de
bornes d'indice sont effectuées sur k;

 cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED 

*************************************************************************
********** Futura : Connections directes TRansfert a TRansfert **********
*************************************************************************

les : SKIP THRU TV(LTV)/CX(LCX) < ne retiennent que les TV connectés à
une cellule au moins et les CX non connectés directement à un transfert
(via l'objet (*) de la famille).

All_TV prend tous les TV (T_probes y compris), All_CX tous les CX.
On pourra alors utiliser les expressions :
IF (TV_to_TR(LTV)) then; IF (CX_to_TR(LCX)) then; pour les branchements;
TV_to_TR invoque l'expression logique : JBIT(IQ(LTV),IODITR).eq.1
CX_to_TR invoque l'expression logique : JBIT(IQ(LCX),IODITR).eq.1

Pour suivre les connections jusqu'à un transfert, on utilise alors :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)<
qui est équivalente a :
SKIP THRU Cx(LCX)
< IF (JOBIT(IQ(LCX),IODITR).eq.0) To Next LCX;
  SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)<

Dans tous les cas, on définit une matrice D particulière :

grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX); dans le cas des SKIP THRU explicites
ou alors :
grasp array D_TV (LTV2,LTR) for (*,*,LCX); dans le cas des SKIP THRU rapides;

Rq : ces dernieres macros rapides marchent aussi dans les cas standards où
on ne ferait pas reconnaissance de la Cellule médiate.

exemples complet de boucle de connection directe :
SKIP THRU Cx_to_TR(LCX)/TV(LTV2)/.TR(LTR2)
< grasp array D_TV (LTV2,LTR) for (*,*,LCX);
  D_TV(i,j)= ...;
>;
Avec boucles explicites :
SKIP THRU CX(LCX)
< IF (Cx_to_TR)
  < SKIP THRU SV(LSV)/CX(LCX2.ne.LCX)/TV(LTV2)/.TR(LTR2)
    < grasp array D_TV (LTV2,LTR) for (LCX2,*,LCX);
    ;;; on remarque que l'objet * de connexion direct des TR ne comporte qu'un SV.
    >;
  >ELSE
  < " connection aux cellules "
    ;;;
  >;
(l'intérêt réside dans le fait que la Cellule connectée ne verra pas ces CX)

**********
** VIZU **
**********

OT2CMF addition de >Fortran Call okutil, qui génère un menu 
 zoom_util
==========  avec 2 commandes :
 Borel_Fit, pour identification de modes
----------
cf > /zoom/Help/Users/Graphics_and_post_treatment/Borel_util

 Arrow_Hist, qui fabrique des map de flêches à partir de deux maps.
-----------

 Variable Mesh Facilities and maps
=================================
Pour sortir des maps en mode à maillage variable.
cf /zoom/Help/Users/Graphics_and_post_treatment/Maps <<< 

Portabilité
===========

Nouveau format des fichiers generes par zoom pour vizu.

Ils sont a present tous en BIG_ENDIAN quelque soit la machine ce qui permet de
visualiser sur n' importe quelle machine (i.e. un zoom a tourne sous linux, on rapatrie
les resultats sur HP et on peut faire make_vizu et vizu sur HP)


*************
** MORTRAN **
*************

 IF ELSEIF avec liste = con1,cond2 etc
======================================
! allowed form : if arg.eq.liste .and. ...
!                      .eq. ou .or.  // .and. ou .or.
! if k.eq.1,3,4 <
! == if (k.eq.1).or.(k.eq.3).or.(k.eq.4) <
! if k.eq.1,3 .and. l.ne.1,2 <
! == if (((k.eq.1).or.(k.eq.3)) .and. ((l.ne.1).and.(l.ne.2)) <

***********
** HELPs **
***********
Les langages sont à jours, les nouveautés marquées par "FUTURA"
Le help de ZINIT a été entièrement refondu
(préparé pour une future version html):
 > /zoom/Help/Users/Zinit/ZDL/Zdl.html

Pour les fan du Mx_Package, voire de nouveaux helps dans :
 > /zoom/Help/Programmers/Ker/Mx_Package/...

============================================================================
============================================================================
============================================================================
************
** NOYEAU **
************

sur Le Bug :
============
Il existe une autre procedure que DOPLUG pour détecter Le Bug, désormais renommé
"Clubbered Connections". Le principe est de suivre apres OFRAME l'arbre
sous une IN et de lister l'ordre des Transferts de chaque IX; il n'y a pas
de diagnostics, il faut le faire soit même; on détecte une Club' Con' en
constatant que ces listes ne sont pas naturelles. Mais, comme ça coûte très cher,
on active cette procédure dans ZINIT par :
 OZPLVL(10) = 2;

Provisonnel pour gestion des futurs nouveaux appels aux point d'entrée
======================================================================
T,F et D des Transferts :
 Flag dans /ITER/ kerTFD qui prend les valeurs 1,2,3 pour l'appel aux
T,F,D entries // calculs de Ct, Fi, D_Mx dans le splitting Futurix
 de la navette. cf /zoom/Help/Versions_futures/Futurix  <

***************
** DEBUGGING **
***************
- Original bug in OCINFA : (Lin.in).Bin(IB au lieu de JB).
- Bug in OT2HLZ Grasp Fi_Diag to be added. FAIT le 02/01/97
- OPDFI : bad Lo_Diag_Tr treatment for component => use of new macro
  Grasp Array Fi_Diag(LTR);
- OILUN initialisation de OHTITLE pour éviter nul char si pas rempli.
- petit bug dans OCIC DeClub : on avait 2 fois le même tr dans certains cas.
- Bug in OIXFAD de l'origine : on ne recodait en tête de routine que les Tr
  de la même face (que LF); or quand on crée une nouvelle IX, on recherche
  les Tr de la IN root qui codent aux mêmes Ctts, alors que les hors Fc ont
  gardés leur ancien codes; il n'y avait pas de conséquence, car on fait
  ensuite un scanning des fc/fm, sauf pour ONTRIX qui s'en trouvait récupérer
  ces extras TR.
  Correction : les extras Tr gardent forcément une IQ(LIT2+3) non nulle.

***************************************
** Re-ECRITURES de routines du noyau **
***************************************
ré-écrit en ZBM_ker : EOLE, EOLES, EOLEF, EOLMAX,  ORES.
 OCWRK et OCMX ré-écrits.
 OGAUS ré-écrit avec tous link et data precomp.
 OCMXTR en ZBM0.
============================================================================
============================================================================
============================================================================

<-----/|\------>  ./Help/Versions_futures/Futurix
==============================================================================
==============================================================================
==== ker version Futura new features =========================================
==============================================================================
==============================================================================

vendredi 06/01/1995
==================(Al1) already in dev.
 VIZU : includes dTime vector along with Time.
        ( rec len management has been changed )
        Allows thru /ZEUS/DEFAULT to change the sery of input data files
        OZDAT and OZPAR with the only mod of 'Z' in names.
        [ OZOUT.MP has to be kept. ]
        New Help in Matrix command to specify valid list formats);
        (Propagated to pro).
Rq : An additionnal flag header on data files makes VIZU to stay retro-compatible.
     ( But no possibility of Resume from a different version )

 KER : Provisional new Entry in Tr processors as : D_Entry.
       F_Entry will be used to computes Fi [and parameters].
       D_Entry to determine D_Mx for the D_loop
       T_Entry will then be devoted to Ct_SV matrices only.
       Rqs : Another D_Mx can then be computed in the T_Entry.
             A tentative to grasp Ct_SV within the T_Entry sequence results
             in an execution error.
 !!! It is recommended to User to include slowly a dummy D_entry in Tr procs.

jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''           cf $ZOOM/Help/Users/Proc/Tr_flag_bits   <<<
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Macro pour y faire (Tr Processors only)
 Grasp Array Fi_Diag(LTR);     Comme Fi_Z, exige d'etre executee apres un grasp Fi ...
;
 Call SBIT1((LTR).Status_Wd,IO2JO);
 Call SBIT1( Fi_Diag(1)    ,JOFROZ);
;
Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.
 cf $ZOOM/Help/Users/Proc/Tr_flag_bits          <<<
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
New macro used locally in Ker :
  Deck OTRDA                           
    &'ELEMENTARY(#)'='(LQ(#1-0_(#1.FM).Nxt_lvl_Ad).LE.0)' => if Elementary(LFM)<
    &';UNDER #(#)<'=';FROM #1(#2)<'                             Pour tenter JYG.
    &'DOWN(#)'='LQ(#1-0_(#1.FM).Nxt_lvl_Ad)' (not included in ZBMKEEP)
  Deck OPDFI                           
    &'NEXT(#)'='LQ((#1)+ONX)'              pour pvr ecrire Next(@Fiz(0)) par ex.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      Version PRO  du :
  ---------------------------------------------------------------
  ---- Executing The   96/04/18  ZOOM VERSION : 1.24/00   |  ----
  ---- Released date : 97/04/09  17:50                   / \ ----
  ---------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

************************************************************************
*************  Ct A-1Bt_TV product for Futura **************************
************************************************* {mardi 20/08/1996 Al1}

 cf $ZOOM/Help/Programmers/Ker/Ct_A-1B_product   <<<

************************************************************************
*************  Nouveaux C-Plug Name et Code ****************************
************************************************* {mardi 21/01/1997 Al1}
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactees
  cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< dans 'FUTURA adds'

************************************************************************
*************  Nouvelle declaration des Description banks **************
******************* Var_linked ***************************************** 
********************************************** {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV,Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir acces a ses composantes designees par
un indice supplementaire ex : Fi_Proc_TV(k/kCx) donee la valeur de la i eme
composante du Fi_TV linké sur Fi_Proc_TV(2); les verifications standard de
bornes d'indice sont effectuees sur k;

 cf $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED paragraph 

************************************************************************
************* Variable Mesh Facilities and maps *************************************** 
********************************************** {Lundi 27/10/1997 Al1}
cf $ZOOM/Help/Users/Graphics_and_post_treatment/Maps <<< 
<-----/|\------>  ./Help/Versions_futures/Futurix.bak
==============================================================================
==============================================================================
==== ker version Futura new features =========================================
==============================================================================
==============================================================================

vendredi 06/01/1995
==================(Al1) already in dev.
 VIZU : includes dTime vector along with Time.
        ( rec len management has been changed )
        Allows thru /ZEUS/DEFAULT to change the sery of input data files
        OZDAT and OZPAR with the only mod of 'Z' in names.
        [ OZOUT.MP has to be kept. ]
        New Help in Matrix command to specify valid list formats);
        (Propagated to pro).
Rq : An additionnal flag header on data files makes VIZU to stay retro-compatible.
     ( But no possibility of Resume from a different version )

 KER : Provisional new Entry in Tr processors as : D_Entry.
       F_Entry will be used to computes Fi [and parameters].
       D_Entry to determine D_Mx for the D_loop
       T_Entry will then be devoted to Ct_SV matrices only.
       Rqs : Another D_Mx can then be computed in the T_Entry.
             A tentative to grasp Ct_SV within the T_Entry sequence results
             in an execution error.
 !!! It is recommended to User to include slowly a dummy D_entry in Tr procs.

jeudi 12/01/1995
===============(Al1)
Dev Standard pour traitement des diag nulles par JOBits :
On initialise de la meme manière dans Y_Entry.
  C est Ker qui transforme :
  Diag a zero standard : SBit1 de IQ(L_Diag),JNULL
              pour K, A et PseudoK2 Tr       JKNUL

Passage en standard pour les autres JOBits :
Soit traitement du Vecteur Fi homogene : IOBits standards.
Soit on flag avec IO2JO (==aller voir composantes), et on traite
  JOCUML   comme IOCUML pour chaque composante;
  JOPSCL         IOPSCL        '' 
  JOFROZ         IOFROZ        ''           cf /zoom/Help/Users/Proc/Tr_flag_bits   <<<
  !!!!!! contrairement a IOFROZ, JOFROZ a zero == non Frozen Tr. (Sauf si Objections)

Macro pour y faire (Tr Processors only)
 Grasp Array Fi_Diag(LTR);     Comme Fi_Z, exige d'etre executee apres un grasp Fi ...
;
 Call SBIT1((LTR).Status_Wd,IO2JO);
 Call SBIT1( Fi_Diag(1)    ,JOFROZ);
;
Rq * Ces bits ne peuvent etre initialisés QUE a partir de S_Entry.
   * Les bits 1 a 16 sont disponibles pour les usages privés utilisateurs, et peuvent
   faire économiser du TD bank.
 cf /zoom/Help/Users/Proc/Tr_flag_bits          <<<
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
New macro used locally in Ker :
  Deck OTRDA                           
    &'ELEMENTARY(#)'='(LQ(#1-0_(#1.FM).Nxt_lvl_Ad).LE.0)' => if Elementary(LFM)<
    &';UNDER #(#)<'=';FROM #1(#2)<'                             Pour tenter JYG.
    &'DOWN(#)'='LQ(#1-0_(#1.FM).Nxt_lvl_Ad)' (not included in ZBMKEEP)
  Deck OPDFI                           
    &'NEXT(#)'='LQ((#1)+ONX)'              pour pvr ecrire Next(@Fiz(0)) par ex.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      Version PRO  du :
  ---------------------------------------------------------------
  ---- Executing The   96/04/18  ZOOM VERSION : 1.24/00   |  ----
  ---- Released date : 97/04/09  17:50                   / \ ----
  ---------------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

************************************************************************
*************  Ct A-1Bt_TV product for Futura **************************
************************************************* {mardi 20/08/1996 Al1}

 cf /zoom/Help/Programmers/Ker/Ct_A-1B_product   <<<

************************************************************************
*************  Nouveaux C-Plug Name et Code ****************************
************************************************* {mardi 21/01/1997 Al1}
 C-Plug Face-1  => (LSV).C_Plug_Nm et (LSV).C_Plug_Nb   (cf ZDL manual)
                     = 'Face'             = 1
et leur utilisation dans les skip thru compactees
  cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< dans 'FUTURA adds'

************************************************************************
*************  Nouvelle declaration des Description banks **************
******************* Var_linked ***************************************** 
********************************************** {mercredi 26/02/1997 Al1}
 Les link_var(i,j) ont leurs composantes qui pointent sur un data; ainsi,
pour pointer sur un TEF vecteur (Eta_SV,Fiz_TV etc), il faut une link_var
pointant sur chaque composante du vecteur.
Les var_linked pointent sur le debut de chaque tableau; il suffit donc
d'un lien sur ce tableau pour avoir acces a ses composantes designees par
un indice supplementaire ex : Fi_Proc_TV(k/kCx) donee la valeur de la i eme
composante du Fi_TV linké sur Fi_Proc_TV(2); les verifications standard de
bornes d'indice sont effectuees sur k;

 cf /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc <<< VAR_LINKED paragraph 

************************************************************************
************* Variable Mesh Facilities and maps *************************************** 
********************************************** {Lundi 27/10/1997 Al1}
cf /zoom/Help/Users/Graphics_and_post_treatment/Maps <<< 
<-----/|\------>  ./Help/Versions_futures/Stephurix.tef_zoom
*******************************************************************
************ Habillages ZOOM pour interaction CIRED ***************
*********************************************** Vendredi 11/10/2002             



idee de partir d'un cliclodrome VentSim qui prepare
// Bonin, un template de processeurs.

Autre outil important : lie aux changements de structures imposses
par etudes de boucles de retroactions diverses, dans le sens ou
elles etendent l'idee de decouple ... a developper TEF donc
=> des Ct -> des D etc.
a envisager sous la forme de moacros zinit.

pour Decembre, imaginer un cahier des charges // VentSim
par ex : un schema de connections qui genere les macros de Bonin.
? qu'est-ce qui pourrait etre fait par un cdd en 3-6 mois ?

*****************************************************************

reprise aussi d'antiennes
1/ vecteurs parametres dans ZOOM
2/ matrice A stokee
3/ recriture du produit CtA-1B
4/ sensib automatiques
5/ vers adjoint
6/ un pas de temps par famille (emboitement temporel)
7/ interet d'un developpement (numerique) a un ordre superieur (cf Al1 notes)

VIZU
****
amelioration de Borel, options divisant alpha par beta etc cf Steph notes

+++++++++++++++++++++++++++++++++++++++++++++++++++++++jeudi 23/01/2003
(apres Steph telephone)
TEF-ZOOM
Prevoir la redaction des specifs par couche pour implementer
le TEF dans un environnement logiciel.
phase interne (0) : trier parmi nos souhaits ou tout demander.
il y a donc une reunion ZOOM gene pour rassembler l'ensemble
des perpectives de developpement souhaitees.
cadre : programmation d'une action de refonte de ZOOM
(JCH pour credits INSU et +)
cible : INRIA

1ere phase : a partir des specifs, consulter les branches
correspondantes (numerique, matrices creuses, et informatiques,
langages, objets cellules transferts familles, calcul matriciel //,
mais aussi graphique coordonne)
c'est la phase la plus importante ! 6mois ?
parmi les choix, soit outil a tout faire (genre ZOOM) et pas
de limitations (ex, on doit pouvoir ecrire un simili-GCM)
soit degager x outils TEF dedies a des pb mailles d'un cote,
box models de l'autre.

2eme phase  choix effectues, voire supplements d'enquete
ou explarations preliminaires sur X voies,
on passe a la redac d'un cahier des charges d'une maquette.
2ans ?

apres, on n'a plus qu'a obtenir et rassembler les moyens
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

<-----/|\------>  ./Help/Versions_futures/Versions_prochaines
*********************************************************************
-------------- PROCHAINE VERSION --------------------------(Le7/Ramses))
*********************************************************************

D_Mx loop :
===========
               TEntry pour calculer les Ct_SV, Omega;
               DEntry pour les D_TV;
               FEntry pour Fi.;
           Rq. Les Transferts qui n ont pas le D_flag mais une matrice D devront calculer
               leur D dans les 2 (car on ne peut savoir quand ils seront appelés)
           Regler les pseudo_K Tr. Repertorier les cas traites.

      cf add. at end

Pour VIZU :
===========    On ajoute la valeur de dTime !

Variables de Transferts :
=========================
    INIDIAG sera remplacée par : un mot de status bit par variable.

    Bits :     IOFROZ pour variable gelée: Question Partie User ou Ker ?(Repertorier)
               IOCUML pour les flux cumulés  =1> C est ker qui fera le cumul
                                             =2> Dans MOVDN, ker fera FiZ=Fi+dFi pour les non cumulés.
                                             (Le test de linearite pourra donc etre fait : FiNext=Fiz?)
               Une partie pour les natures/unités ?
               IOPSCL (Pseudo Cell : Fi=Fi+dFi au même moment que Eta+dEta).
ZINIT :
=======
    Un nouveau point d'entrée ZCONV, associe soit a un common, soit a des banks, pour les
custommized convergence tests.

R et S_entry
============     Gestion des calculs de Ct et D sans duplications.
                ( flag ZENTRY,ZSOLVE NITER.eq.0   etc;
                 Pb de la creation de A-1B, et de set signed_ABt.

MACROS
======
    Prevoir un flag OARG pour abonder certains diagnostic (D_Mx entre autres).
   ( si erreur, dans array machin in array, on donne OARG non nul et
   on complete l info a la fin)

**********************************************************************
--------------------------  Pratique ---------------------------------
**********************************************************************
    Deux jours a Toulouse avec JLB VIP RF + ?? pour obtenir une version
commune qui tourne sur les trois stations(DEV uniquement).
    Definir la future version et le partage du travail.
Ces 2 jours sont independants de la semaine pleniere.

**********************************************************************
**********************************************************************
**********************************************************************
***************************  POST TOULOUSE ***************************
**********************************************************************
**********************************************************************
**********************************************************************

jeudi 08/09/1994
================(Antonio)

D_Mx loop :      Question a régler sur la propag de la philosophie S_Entries
                 (appel par classe) dans la D_Loop

**********************************************************************
-------------------  Développement PROXIMA -------
**********************************************************************
Vendredi 09/09/1994
===================(Al1) Algorithmique proposée :

D_Loop      0 : [Plus d'appel des K_Tr]
                Appel des no_DMxTr Cx to ClD (Calcul de Fi seult) I     Fi > FiZ

        i,i+1 : Meme calcul de valeurs B) et C) de la step_adv;
                Calcul des D_Mx en suivant l'arbre pour IODMX et pseudo_K
                etc ...

Step_Adv    I} Calcul des valeurs (Fi, Par)
               A) Les no D_Mx Tr restants.                        I     Fi > FiZ
               B) Les IOD_Mx Tr                                   I     Fi > FiZ
               C) Les [Pseudo K_Tr et] K_Tr                       I     Fi > FiZ
                       (cf Rq.)                                   I
               D) Les K_Entry des cellules.
                                                                  I
     Avec IOCUML Omega,...                <<<<<<<<<<<<<<<<<<<<<<<<I

           II) En suivant l arbre, calcul des Ct Mx [et [D] pour pseudo K, PSeudo Cl];

          III) Résolution   ::> dFi,dEta

          Alors, Ker pour .not.IOCUMuL, fait Fi+dFi > FiZ [ET dans Fi pour IOPSCL], par
          exemple en même temps que Eta+dEta.


Remarques diverses.
==================
  Le flag IODMX signifie non plus l'existence d une D_Mx, mais un Tr recipro_couplé à Tr;
 (Doit on le changer de nom ? IOTRTR par exemple)

  On suppose que un Tr ayant une D est soit IODMX, soit K_Tr, soit pseudo_K,
soit enfin un Pseudo_Cl (bref, flaggé). (S'il en manque, on rajoutera les classes).

  On propagera donc le D_flag aux cellules Cx a IODMX of course, Pseudo_K [et Pseudo_Cl(non, cf + bas).]

  Voir le problmeè OSTART et préciser l'appel au K_Entry des cellules.

  On propose de classer les Pseudo Cell dans la categ des pseudo K, réservant l utilisation
des INIDiag Jbit pour Fi+dFi. (En fait, non, car elles peuvent avoir ou pas de D_Mx; c est chocant
car elles  sont cellules connectées à d'autres, mais y a t il une objection théorique définitive?).

  Voir en detail le pb IOCUML, Ct*dT/2., quid si D_Mx  . On remplit Omega, on ajoute -dT*Fi ?

  F_Entry pour Tr calcule Fi, et fait les test sur la linearite en comparant
  FiZ et Fi. 
  D_Entry pour calcul des D_Mx.
=====================================================
======  Liste des Flag Bit sur Fi====================
===============================================Dec94(Al1) => 02/01/97
Les 1-16 sont ignorés de Ker
;
17-32
;
Infos composantes :
17  JOCUML   : Composante cumulée
18  JOFROZ   :            gelée ( les fro_zen(KCx) plus complexes seront traites
                                  dans les bit User ).
19  JOPSCL                pseudo_cell On peut imaginer un Tr PsC qui ait de comp. Fi
                        utilisées pour son équation d'évolution.(ex TENERG de AHR)
           => prévoir donc IOPSCL pure PsC
                           IOPSCT avec des composantes Fi (pouvant ou non avoir D_Mx)
                           (en fait un IO2BIT general)
                           IOCUML pure Cumulated Fi (ou IO2BIT si heterogene)
11  IOCUML
12  IOPSCL             cf  $ZOOM/Help/Users/Proc/Tr_flag_bits   <<<
13  IO2BIT
Remarque  Cette derniere option evite de faire un zoom dual en ayant acces
sous Zeus aux PSeudo_Cell;
;
Infos Diag steering
  JOKNUL
  JONUL


IOflags : interet de IOTRTR ET IODMX
=====================================================
======  Pb des Cumulated Tr =========================
===============================================Dec94(Al1)

dEta - dt/2*[]dFi = dEta,dec        =>
Eta  -      []dFi = dEta,dec -Fi*dt
  et
     Ct.dEta -[1+D]dFi -     D'.dFi' =      Omega       ; =>
dt/2.Ct.dEta -[1+D]dE  -dt/2.D'.dFi' = dt/2.Omega -dt.Fi;

Pour les cellules on peut etre interesse par dE. => flag Cum sur SV/CX.
-  Si Cx Tr is not Cum, on fait *dt/2 sur ABt_TV, et -Fi*dt sur dEta,dec
  cad on resoud en dFi, et on faut dE sur le calcul de dEta.
-  Si le Tr est Cum flagged, mais que l on decide de l'ecrire en dFi,
on resoud en dE, cad Ct et D' *dt/2 et dt[.5*Omega-Fi].
 Ou mieux, 2./dt*[] et Omega -2*Fi.
???

=====================================================
======  Convention de signe =========================
===============================================Dec94(Al1)
  Question sur l'opportunite de changer pour Futura la
convention :
dEta = dEta,dec + Sigma[ ABt_TV()dFi ];
K.dEta = Alpha.dt.dEta + Alpha.dt.Bt_TV().dFi

K'.dFi = D.dFi +S[ D'.dFi'] +Omega.dT.

Ct : ne change pas; D : oui; ABt : aussi.
Gamma non; -Omega non plus ...

Retro-compatibilite : grasp array old ... > flag sur AB et D.
!!! Attention : pb de compatibilite entre D_TV !!!

<-----/|\------>  ./Help/Versions_futures/Versions_prochaines.bak
*********************************************************************
-------------- PROCHAINE VERSION --------------------------(Le7/Ramses))
*********************************************************************

D_Mx loop :
===========
               TEntry pour calculer les Ct_SV, Omega;
               DEntry pour les D_TV;
               FEntry pour Fi.;
           Rq. Les Transferts qui n ont pas le D_flag mais une matrice D devront calculer
               leur D dans les 2 (car on ne peut savoir quand ils seront appelés)
           Regler les pseudo_K Tr. Repertorier les cas traites.

      cf add. at end

Pour VIZU :
===========    On ajoute la valeur de dTime !

Variables de Transferts :
=========================
    INIDIAG sera remplacée par : un mot de status bit par variable.

    Bits :     IOFROZ pour variable gelée: Question Partie User ou Ker ?(Repertorier)
               IOCUML pour les flux cumulés  =1> C est ker qui fera le cumul
                                             =2> Dans MOVDN, ker fera FiZ=Fi+dFi pour les non cumulés.
                                             (Le test de linearite pourra donc etre fait : FiNext=Fiz?)
               Une partie pour les natures/unités ?
               IOPSCL (Pseudo Cell : Fi=Fi+dFi au même moment que Eta+dEta).
ZINIT :
=======
    Un nouveau point d'entrée ZCONV, associe soit a un common, soit a des banks, pour les
custommized convergence tests.

R et S_entry
============     Gestion des calculs de Ct et D sans duplications.
                ( flag ZENTRY,ZSOLVE NITER.eq.0   etc;
                 Pb de la creation de A-1B, et de set signed_ABt.

MACROS
======
    Prevoir un flag OARG pour abonder certains diagnostic (D_Mx entre autres).
   ( si erreur, dans array machin in array, on donne OARG non nul et
   on complete l info a la fin)

**********************************************************************
--------------------------  Pratique ---------------------------------
**********************************************************************
    Deux jours a Toulouse avec JLB VIP RF + ?? pour obtenir une version
commune qui tourne sur les trois stations(DEV uniquement).
    Definir la future version et le partage du travail.
Ces 2 jours sont independants de la semaine pleniere.

**********************************************************************
**********************************************************************
**********************************************************************
***************************  POST TOULOUSE ***************************
**********************************************************************
**********************************************************************
**********************************************************************

jeudi 08/09/1994
================(Antonio)

D_Mx loop :      Question a régler sur la propag de la philosophie S_Entries
                 (appel par classe) dans la D_Loop

**********************************************************************
-------------------  Développement PROXIMA -------
**********************************************************************
Vendredi 09/09/1994
===================(Al1) Algorithmique proposée :

D_Loop      0 : [Plus d'appel des K_Tr]
                Appel des no_DMxTr Cx to ClD (Calcul de Fi seult) I     Fi > FiZ

        i,i+1 : Meme calcul de valeurs B) et C) de la step_adv;
                Calcul des D_Mx en suivant l'arbre pour IODMX et pseudo_K
                etc ...

Step_Adv    I} Calcul des valeurs (Fi, Par)
               A) Les no D_Mx Tr restants.                        I     Fi > FiZ
               B) Les IOD_Mx Tr                                   I     Fi > FiZ
               C) Les [Pseudo K_Tr et] K_Tr                       I     Fi > FiZ
                       (cf Rq.)                                   I
               D) Les K_Entry des cellules.
                                                                  I
     Avec IOCUML Omega,...                <<<<<<<<<<<<<<<<<<<<<<<<I

           II) En suivant l arbre, calcul des Ct Mx [et [D] pour pseudo K, PSeudo Cl];

          III) Résolution   ::> dFi,dEta

          Alors, Ker pour .not.IOCUMuL, fait Fi+dFi > FiZ [ET dans Fi pour IOPSCL], par
          exemple en même temps que Eta+dEta.


Remarques diverses.
==================
  Le flag IODMX signifie non plus l'existence d une D_Mx, mais un Tr recipro_couplé à Tr;
 (Doit on le changer de nom ? IOTRTR par exemple)

  On suppose que un Tr ayant une D est soit IODMX, soit K_Tr, soit pseudo_K,
soit enfin un Pseudo_Cl (bref, flaggé). (S'il en manque, on rajoutera les classes).

  On propagera donc le D_flag aux cellules Cx a IODMX of course, Pseudo_K [et Pseudo_Cl(non, cf + bas).]

  Voir le problmeè OSTART et préciser l'appel au K_Entry des cellules.

  On propose de classer les Pseudo Cell dans la categ des pseudo K, réservant l utilisation
des INIDiag Jbit pour Fi+dFi. (En fait, non, car elles peuvent avoir ou pas de D_Mx; c est chocant
car elles  sont cellules connectées à d'autres, mais y a t il une objection théorique définitive?).

  Voir en detail le pb IOCUML, Ct*dT/2., quid si D_Mx  . On remplit Omega, on ajoute -dT*Fi ?

  F_Entry pour Tr calcule Fi, et fait les test sur la linearite en comparant
  FiZ et Fi. 
  D_Entry pour calcul des D_Mx.
=====================================================
======  Liste des Flag Bit sur Fi====================
===============================================Dec94(Al1) => 02/01/97
Les 1-16 sont ignorés de Ker
;
17-32
;
Infos composantes :
17  JOCUML   : Composante cumulée
18  JOFROZ   :            gelée ( les fro_zen(KCx) plus complexes seront traites
                                  dans les bit User ).
19  JOPSCL                pseudo_cell On peut imaginer un Tr PsC qui ait de comp. Fi
                        utilisées pour son équation d'évolution.(ex TENERG de AHR)
           => prévoir donc IOPSCL pure PsC
                           IOPSCT avec des composantes Fi (pouvant ou non avoir D_Mx)
                           (en fait un IO2BIT general)
                           IOCUML pure Cumulated Fi (ou IO2BIT si heterogene)
11  IOCUML
12  IOPSCL             cf  /zoom/Help/Users/Proc/Tr_flag_bits   <<<
13  IO2BIT
Remarque  Cette derniere option evite de faire un zoom dual en ayant acces
sous Zeus aux PSeudo_Cell;
;
Infos Diag steering
  JOKNUL
  JONUL


IOflags : interet de IOTRTR ET IODMX
=====================================================
======  Pb des Cumulated Tr =========================
===============================================Dec94(Al1)

dEta - dt/2*[]dFi = dEta,dec        =>
Eta  -      []dFi = dEta,dec -Fi*dt
  et
     Ct.dEta -[1+D]dFi -     D'.dFi' =      Omega       ; =>
dt/2.Ct.dEta -[1+D]dE  -dt/2.D'.dFi' = dt/2.Omega -dt.Fi;

Pour les cellules on peut etre interesse par dE. => flag Cum sur SV/CX.
-  Si Cx Tr is not Cum, on fait *dt/2 sur ABt_TV, et -Fi*dt sur dEta,dec
  cad on resoud en dFi, et on faut dE sur le calcul de dEta.
-  Si le Tr est Cum flagged, mais que l on decide de l'ecrire en dFi,
on resoud en dE, cad Ct et D' *dt/2 et dt[.5*Omega-Fi].
 Ou mieux, 2./dt*[] et Omega -2*Fi.
???

=====================================================
======  Convention de signe =========================
===============================================Dec94(Al1)
  Question sur l'opportunite de changer pour Futura la
convention :
dEta = dEta,dec + Sigma[ ABt_TV()dFi ];
K.dEta = Alpha.dt.dEta + Alpha.dt.Bt_TV().dFi

K'.dFi = D.dFi +S[ D'.dFi'] +Omega.dT.

Ct : ne change pas; D : oui; ABt : aussi.
Gamma non; -Omega non plus ...

Retro-compatibilite : grasp array old ... > flag sur AB et D.
!!! Attention : pb de compatibilite entre D_TV !!!

<-----/|\------>  ./Help/Versions_futures/gemini.collab
De maniere incrementale, peut-on commencer par faire la liste motivees des applis?


                            titre sujet  Cadre institutionnel Collabs  Organisme/Industriel interesses
                            puis,objectifs et  but(s) de la modelisation.
Le7
Couplage convection Rayonnement
DAR ??
Electrophorese                                    UPS          LGC         RousselUclaf INSERM Pasteur ?
Reservoir                                                                  Peugoet Valeo
Siege
Fourmis thermites et robots collaborants

Albi
Sechage et suite ?                                EMA

Tarbes
Abri-bus saharien

GISE                                  EMP ENPC
HIerarchisation  des couplages

LISBONNE/COIMBRA
Reacteurs a Lits Fluidises
Solaire passif            Faisabilite/dimensionnement d'equipements solaires passif (Serre et Trombe)

LMD/Ramses                            CNRS
Developpements de modeles (Banc test) :
  Couplage Oc/Gl/Atm                                          LODYC/LMCE/CERFACS/CNRM           CE(PNEDC)
  Raccordement de modeles a maillages heterogenes
  Couplage Convection Rayonnement
  couplage physique dynamique
  PBL convection cumuliforme
  Turbulence3D/structures organisees
Sensibilites paleo-climatologiques :
  Box models                                                  LMCE
Methodes pour GCM futur :
  Assimilation variationnelle
  Initialisation ocean
  Couplages a echelles multiples/emboitement de modeles
  Analyse de mecanismes
  Determination de constantes de temps pour modeles non lineaires


Mots clefs :  Couplage, sensibilite, dimentionnement, initialisation, identification parametriques
(lissage, calage, determination), commande, propagation d'incertitudes
<-----/|\------>  ./Help/Versions_futures/pre_Futura_is_pro
  ********************************************************************
  ***** Version en pro dite pre_Futura *******************************
  ********************************************************************
  ********************************************************************

 IMPORTANT : Si vous utilisez des transferts cumules, ajouter dans le
 Zinit_Entry  Set Cumulated_Tr flag;  ou 
              Set Cum_Tr flag;


 Flags par composante (JOFlags):
 cf $ZOOM/Help/Versions_futures/Versions_prochaines

 Modifs Ker :* A la fin du step advance, apres impressions,
               Fiz = Fi+dFi pour les non Cumulated_Tr;
               (consequence : meilleur dev before entering D_loop)
               Pour les Pseudo_Cell Tr [ set Pseudo_Cell flag; ou
               set Ps_Cl flag; ] Fi=Fiz=Fi+dFi;
             * Les PseudoK_Tr dependent d'autres transferts, sans
               reciprocite : on les appelle en dernier dans la D_loop.
              [Set Pseudo1_K_Tr flag; ou Set K1_Tr flag;
               Set Pseudo2_K_Tr flag; ou Set K2_Tr flag;]


Nouvelles macros :
======================================
= Amelioration de la boucle standard :
======================================
    read thru CX(LCX) (JCx=1,*)
    < 
 genere :
    READ THRU CX(LCX)(JCx=1,0_(#U6#S6$L#C.TV).Nb_Cx_CX)<
( cad qu elle recupere l'adresse du TV superieur );

=================================
= Ecriture compactee de boucles :
=================================

      Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 cf description complete a la fin de :
 $ZOOM/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc

Problemes, suggestions
======================(les mettre dans $ZOOM/Help/Versions_futures/Futura )
<-----/|\------>  ./Help/Versions_futures/pre_Futura_is_pro.bak
  ********************************************************************
  ***** Version en pro dite pre_Futura *******************************
  ********************************************************************
  ********************************************************************

 IMPORTANT : Si vous utilisez des transferts cumules, ajouter dans le
 Zinit_Entry  Set Cumulated_Tr flag;  ou 
              Set Cum_Tr flag;


 Flags par composante (JOFlags):
 cf /zoom/Help/Versions_futures/Versions_prochaines

 Modifs Ker :* A la fin du step advance, apres impressions,
               Fiz = Fi+dFi pour les non Cumulated_Tr;
               (consequence : meilleur dev before entering D_loop)
               Pour les Pseudo_Cell Tr [ set Pseudo_Cell flag; ou
               set Ps_Cl flag; ] Fi=Fiz=Fi+dFi;
             * Les PseudoK_Tr dependent d'autres transferts, sans
               reciprocite : on les appelle en dernier dans la D_loop.
              [Set Pseudo1_K_Tr flag; ou Set K1_Tr flag;
               Set Pseudo2_K_Tr flag; ou Set K2_Tr flag;]


Nouvelles macros :
======================================
= Amelioration de la boucle standard :
======================================
    read thru CX(LCX) (JCx=1,*)
    < 
 genere :
    READ THRU CX(LCX)(JCx=1,0_(#U6#S6$L#C.TV).Nb_Cx_CX)<
( cad qu elle recupere l'adresse du TV superieur );

=================================
= Ecriture compactee de boucles :
=================================

      Skip thru CX(LCX) (JCx=1,*)/.CL(LCL)/SV(LSV2)/CX(LCX2.ne.LCX)/
                .TV(LTV2)/.TR(LTR2)
      < IF (LTR2).Types(2).EQ. 01 01 02   "TCdM"
        <
        >"End TCdM"
      > "close Skip thru CX/../TR2"

 cf description complete a la fin de :
 /zoom/Help/Users/Proc/ZBM_manuals/zbm_user_manual.doc

Problemes, suggestions
======================(les mettre dans /zoom/Help/Versions_futures/Futura )
<-----/|\------>  ./Help/Vizu_Features
La question tourne autour d'un utilitaire pour gerer les batchs de sorties OZDAT.
correspondant a un meme arbre Zinit - of course.

Le mieux serait dans vizu :

au-dessus de >Zeus ? :

>Menu HouseKeeping
>Menu OutFile
>Parameters
OFiles 'Preffix of Output Files' C D='OA'    cree OADAT.CL TR et OAPAR...
OStatus 'Status'   C D='New' R='New,Append,OverWrite'
OPosition 'preceding step' I D=0 R='it,time'
etc.
  ( option Append pour ne pas risquer d'ecraser ce qui y est acquis )
a l'execution, on a ainsi ouvert le OADAT..., positionnees et sorti le time dtime
du debut jusqu'a it choisi si not New.
On choisit ensuite dans la commande default une serie OYDAT etc, que l'on scanne tant
et plus. Quand on sait ce que l'on veut garder, back to HouseKeeping
>Menu HouseKeeping
>Menu OutFile
...
>Menu Save
>Parameters
List 'List of inc to save' C D='Current' R='Current,1-10,Triplet'
INCNB   'Start Inc #'   I D=1
INCST   'Inc Step'   I D=1
NBINC   '# of Inc'   I D=0
>...
Current appende l'increment courant du fichier de la serie en cours
1-10 - qui n'est dans le barillet que pour rappeler qu'il s'agit d'une
       liste standard de vizu est a remplacer par une liste de it.
Triplet renvoir a la gestion par les trois parametres suivants - classiques.
<-----/|\------>  ./Help/logo.al1
!*                     ---  __  __ _  _                        *
!*                      /  |  ||  ||\/|                        *
!*                     /__ |__||__||  |                        *
!*                                                             *



     ==//  __  __ _  _
      //  (  )(  )|\/|
     //==  ~~  ~~ ~  ~

     ==//  _  _ _ _                     /  --  ---
      //  ( )( )|V|   _                 /__ 7 &/  /
     //==Leseth LMD                             / -



                       /
                      /___
                     /___ /
                     /  |
                    /   |


!======================================================
!....................+
!... ==//  _  _  _ _ .
!...  //  ( )( ) |V| .
!... //== Leseth LMD .
!....................+




!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I
! ==//  _  _  _ _         """""""""""""""""""" Kernel """"""""""""""""I 
!  //  ( )( ) |V|         """"""""""""""""""""""""""""""""""""""""""""I
! //== Leseth LMD         """"""""""""" Written by Leseth & Ramses """I
!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I
! Routine giving the sign opposite to the TEF one and reverting it    I
! to take into account a possible odd error from user.                I
!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I
!::> Modified by  Machin TRUC at                                      I
! Bug in resulting sign, giving the same sign as if not in error.     I
!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I
!::> Modified by  Machin TRUC at                                      I
! Error in print : (the sign was different that the one computed).    I
!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""I
!::> Modified by  Machin TRUC at                                      I
! Dropping the first correction : sign was correct.                   I
!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
!++> expected development :  change sign of printed expression.       I
!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

> SUBROUTINE NEW_LOGO;
> &A;
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !   ====//               """"""""""""""""""""" Kernel """""""""""""""""
> !      // __             """"""""""""""" Subroutine A_Sign_Mx """""""""
> !     // (__)_ |\/|      """""""""""" Written by Leseth & Ramses """"""
> !    //====(__)|  |      Leseth LMD  ----------------------------------
> !----------------------------------------------------------------------
> ! Routine giving the sign opposite to the TEF one and reverting it    "
> ! to take into account a possible odd error from user.                "
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !::> Modified by  Machin TRUC at                                      "
> ! Bug in resulting sign, giving the same sign as if not in error.     "
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !::> Modified by  Machin TRUC at                                      "
> ! Error in print : (the sign was different that the one computed).    "
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !::> Modified by  Machin TRUC at                                      "
> ! Dropping the first correction : sign was correct.                   "
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !++> expected development :  change sign of printed expression.       "
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !...etc.                                                              "
> &A0;
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !   KKKKE               """"""""""""""""""""" Kernel """""""""""""""""
> !      E/ __             """"""""""""""" Subroutine A_Sign_Mx """""""""
> !     E/ (__)_ |\/|      """""""""""" Written by Leseth & Ramses """"""
> !    E/RRRR(__)|  |      Leseth LMD  ----------------------------------
> !----------------------------------------------------------------------
> !""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
> !   |/////               """"""""""""""""""""" Kernel """""""""""""""""
> !     /K/ __             """"""""""""""" Subroutine A_Sign_Mx """""""""
> !    /E/ (__)_ |\/|      """""""""""" Written by Leseth & Ramses """"""
> !   /R///| (__)|  |      Leseth LMD  ----------------------------------
> !----------------------------------------------------------------------

<-----/|\------>  ./Help/read_dev.ideas

dans ZINIT
==========
Si, pour un transfert, on cree deux T-Plug ayant le meme numero,
ca cree en realite deux T-Plug . Problemes assures ....


Pb dans l'intialisation des variables d'un TD ou CD Bank
========================================================
Si on fait SET .Var_Name fo XD = nnn; et que Var_Name n'est pas
utilisee dans une dimension de tableau, elle n'est pas initialiser,
et sans aucun message.    
                         JLD        21/09/1993    

dans ZINIT
==========

Pb nombreux et varier avec la macro (#:#) liee aux dimension
Pb si on fait
* dimension X(n1:n2);  (dimension FORTRAN)
* WRITE(6,:label:) ....;
* Character_var(I;J);
 ........


Regles d'or du Sentry:
======================

 - calculer Fi et Omega



dans DOPLUG :
=============

- verifier que les processeurs ont ete definis dans la proc liste en verifiant
que le nom de la class (----------| ) existe
                                  |
   **FROM:  DOPLUG ,TR OF CLASS: TFQO   (1ST CONNECTED CELL: SURF-   1)

- dire si le bank TD (ou CD) n'existe pas

ZBM bug
=======
Probleme avec .. (point on ?)

  Zprint1 = .true. .and. ZPRINT;

(00251) 10003 Zprint1=.true
**** Error #162 on Line 251: [Zprint1=@.] expression expected
(00252)       ** ZBM ERROR ** FIRST SYMBOL OF 'and.ZPRINT' IS NOT POINTED-ON


zinit-oframe... bug
===================

*  quand on demarre un numero de plug a une valeur differente de 1 (par. ex. 8),
on ecrase le fence (diagnostic  DZVERI )

*
C       < CREATE CL SURF-1 , TYPE = HAIR ;
      GOTO 10053
10052 NAME='SURF'
      CALL OHL2I1(NAME,JZNAME)
      JZCODE=1
      LZUPS=LZWF
      JZLNKS=IQ(LZWF+9)
      JZSIG=1
      CALL IHAIR(LZE)
      JZSIG=IQ(LZE+5)
      LZETA=LQ(LZE-6)
      LZCD=LQ(LZE-8)
      CALL SBIT1(IQ(LZE),1)
      IZPAR=LZE+33-JZESO*6
      CALL OCCNSE
      IQ(LZE+3)=1000*(IQ(LZE+3)/1000)+IQ(LZE+1)
                |--------------------|
                  POURQUOI ???????  a priori ici ca sert a rien, ca vaut 0
      IQ(LZE+1)=1
C       >




CMZ .....
============

 * Quand un plantage au cour de 'exe modif', pas de mise a jour de la librairie
pour recompiler les bonnes routines la foi suivante                                FAIT

lundi 10/06/1996
===============(Al1)
 pb d'initialisation (suite...)
Soit un Tr sans Mx, dont un coef depend de parametres CD cacules dans le K_Entry d'une Cl
resultat : pas de calcul de Fi possible dans le SEntry. A voir.


VIZU
====   Sortir abondament les infos sur dTime  et l'ajouter dans les args hist t it.

PROC
====(Al1,jeudi 17/02/2000)
sortie en Help de symbole/valeur d'un description bank.
Impossible, car fait par processeur et pas objet

MAC
=====(Al1,vendredi 18/02/2000)
 attention, les var_linked n'acceptenty pas de pointer sur un tableua de dim 1
(cf ex dans gicc/cepri
PROC
====
la macro skip thr SV()LSV.eq. ... n'accepte pas de liste de plug_NM, com[plets


