Download couplage_TH1D_Th3D.dgibi

Back to the list

* fichier :  couplage_TH1D_Th3D.dgibi
'OPTION' 'ECHO' 0 ;
* From ~/nlin/sources_dev_new/util_proc :
*BEGINPROCEDUR append
************************************************************************
* NOM         : APPEND
* DESCRIPTION : Rajoute :
*               - un entier à un listentier
*               - un réel   à un listreel
*               - un objet (liste, evolution, matrice ou chpoint)
*                 à un indice de table ('MOT' ou 'ENTIER')
*                    * si l'indice n'existe pas
*                    * 'ET' si l'indice existe 
*                
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 10/09/2004, version initiale
* HISTORIQUE : v1, 10/09/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' APPEND ;
'ARGUMENT' tab/'TABLE' ;
'SI' ('EXISTE' tab) ;
   'ARGUMENT' itab/'MOT' ;
   'SI' ('NON' ('EXISTE' itab)) ;
      'ARGUMENT' itab*'ENTIER' ;
   'FINSI' ;      
   lobj = FAUX ;
   'SI' ('NON' lobj) ;
      'ARGUMENT' lr/'LISTREEL' ;
      'SI' ('EXISTE' lr) ;
         obj = lr ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' le/'LISTENTI' ;
      'SI' ('EXISTE' le) ;
         obj = le ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' lev/'EVOLUTION' ;
      'SI' ('EXISTE' lev) ;
         obj = lev ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' lm/'MAILLAGE' ;
      'SI' ('EXISTE' lm) ;
         obj = lm ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' chpo/'CHPOINT' ;
      'SI' ('EXISTE' chpo) ;
         obj = chpo ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' rig/'RIGIDITE' ;
      'SI' ('EXISTE' rig) ;
         obj = rig ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;               
   'SI' ('NON' lobj) ;
      'ARGUMENT' matk/'MATRIK' ;
      'SI' ('EXISTE' matk) ;
         obj = matk ; lobj = VRAI ;
      'FINSI' ;
   'FINSI' ;
   'SI' ('NON' lobj) ;
      cherr = 'CHAINE'
       'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
        ; 
      'ERREUR' cherr ;
   'FINSI' ;      
   'SI' ('EXISTE' tab itab) ;
      tab . itab = 'ET' (tab . itab) obj ;
   'SINON' ;
      tab . itab = obj ;
   'FINSI' ;
   'RESPRO' tab ;      
'FINSI' ;   
'ARGUMENT' lenti/'LISTENTI' ;
'ARGUMENT' lreel/'LISTREEL' ;
'SI' ('EXISTE' lenti) ;
   'ARGUMENT' enti*'ENTIER' ;
   lenti = 'ET' lenti ('LECT' enti) ;
   'RESPRO' lenti ;
'FINSI' ;   
'SI' ('EXISTE' lreel) ;
   'ARGUMENT' reel*'FLOTTANT' ;
   lreel = 'ET' lreel ('PROG' reel) ;
   'RESPRO' lreel ;
'FINSI' ;   
*
* End of procedure file APPEND
*
'FINPROC' ;
*ENDPROCEDUR append
*BEGINPROCEDUR errrel
************************************************************************
* NOM         : ERRREL
* DESCRIPTION : Calcul d'une erreur relative
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/04/2003, version initiale
* HISTORIQUE : v1, 23/04/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' ERRREL ;
'ARGUMENT' val*'FLOTTANT' ;
'ARGUMENT' valref*'FLOTTANT' ;
*
'SI' ('<' ('ABS' valref) 1.D-10) ;
   echref = 1.D0 ;
'SINON' ;
   echref = valref ;   
'FINSI' ;
*
errabs = 'ABS' ('/' ('-' val valref) echref);
*
'RESPRO' errabs ;
*
* End of procedure file ERRREL
*
'FINPROC' ;
*ENDPROCEDUR errrel
*BEGINPROCEDUR exmomod
************************************************************************
* NOM         : EXMOMOD
* DESCRIPTION : Extraction d'un mot d'un listmots
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/06/2003, version initiale
* HISTORIQUE : v1, 23/06/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' EXMOMOD ;
'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
j = 'DIME' lm ;
k = '+' (MODULO ('-' i 1) j) 1 ;
lemot = 'EXTRAIRE' lm k ;
* Usage de l'opérateur text pour éviter que lemot
* ne soit interprété comme un opérateur
'RESPRO' 'TEXTE' lemot ;
*
* End of procedure file EXMOMOD
*
'FINPROC' ;
*ENDPROCEDUR exmomod
*BEGINPROCEDUR formar
************************************************************************
* NOM         : FORMAR
* DESCRIPTION : formate un réel de facon courte
*               pratique pour les noms de
*               sauvegarde
*               Exemples :
* 'MESSAGE' ('CHAINE' (formar 2.9e5   1)) ;
* 2.9E5
* 'MESSAGE' ('CHAINE' (formar -2.9e5  1)) ;
* -2.9E5
* 'MESSAGE' ('CHAINE' (formar 2.9e-5  1)) ;
* 2.9E-5
* 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
* -2.9E-5
* 'MESSAGE' ('CHAINE' (formar 2.9     1)) ;
* 2.9
* 'MESSAGE' ('CHAINE' (formar -2.9    1)) ;
* -2.9
* 'MESSAGE' ('CHAINE' (formar 0       1)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 0       1)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 2.9e5   0)) ;
* 3E5
* 'MESSAGE' ('CHAINE' (formar -2.9e5  0)) ;
* -3E5
* 'MESSAGE' ('CHAINE' (formar 2.9e-5  0)) ;
* 3E-5
* 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
* -3E-5
* 'MESSAGE' ('CHAINE' (formar 2.9     0)) ;
* 3
* 'MESSAGE' ('CHAINE' (formar -2.9    0)) ;
* -3
* 'MESSAGE' ('CHAINE' (formar 0       0)) ;
* 0
* 'MESSAGE' ('CHAINE' (formar 0       0)) ;
* 0
*               
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 18/02/2003, version initiale
* HISTORIQUE : v1, 18/02/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' FORMAR ;
'ARGUMENT' fl*'FLOTTANT' ;
'ARGUMENT' vir/'ENTIER  ' ;
'SI' ('NON' ('EXISTE' vir)) ;
   vir = 1 ;
'SINON' ;   
   'SI' ('<' vir 0) ;
      'ERREUR' 'fournir un entier positif' ;
   'FINSI' ;
'FINSI' ;         
'SI' ('<' ('ABS' fl) 10.D-100) ;
   chfl = 'CHAINE' '0' ;
'SINON' ;
*! sans le 1.D-10, ca ne fonctionne pas
*! qd on entre pile poil une puissance de 10
   lfl = LOG10 ('ABS' fl) ;
*   lfl = '+' (LOG10 ('ABS' fl)) 1.D-10  ;
   slfl = 'SIGNE' ('ENTIER' lfl) ;
   'SI' ('EGA' slfl 1) ;
      elfl = 'ENTIER' lfl ;
   'SINON' ;
      elfl = '-' ('ENTIER' lfl) 1 ;
   'FINSI' ;
   man = '/' fl ('**' 10.D0 elfl) ;
*
* Une verrue pour des histoires de précision...
*   
   'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
      man  = '/' man 10.D0 ;
      elfl = '+' elfl 1 ;
   'FINSI' ;
*   
   sman = 'SIGNE' man ;
   'SI' ('EGA' sman 1) ;   
      fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
   'SINON' ;
      fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
   'FINSI' ;
   'SI' ('NEG' vir 0) ;   
      'SI' ('NEG' elfl 0) ;
         chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
      'SINON' ;
         chfl = 'CHAINE' 'FORMAT' fman man ;
      'FINSI' ;
   'SINON' ;
      man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
      'SI' ('NEG' elfl 0) ;
         chfl = 'CHAINE' man2 'E' elfl ;
      'SINON' ;
         chfl = 'CHAINE' man2 ;
      'FINSI' ;
   'FINSI' ;            
'FINSI' ;   
'RESPRO' chfl ;
*
* End of procedure file FORMAR
*
'FINPROC' ;
*ENDPROCEDUR formar
*BEGINPROCEDUR log10
************************************************************************
* NOM         : LOG10
* DESCRIPTION : Log_10
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 18/02/2003, version initiale
* HISTORIQUE : v1, 18/02/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' LOG10 ;
'ARGUMENT' fl/'FLOTTANT' ;
'ARGUMENT' lr/'LISTREEL' ;
'ARGUMENT' cp/'CHPOINT ' ;
'ARGUMENT' cm/'MCHAML  ' ;
'SI' ('EXISTE' fl) ;
   'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
'FINSI' ;
'SI' ('EXISTE' lr) ;
   'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
'FINSI' ;
'SI' ('EXISTE' cp) ;
   'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
'FINSI' ;
'SI' ('EXISTE' cm) ;
   'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
'FINSI' ;
*
* End of procedure file LOG10
*
'FINPROC' ;
*ENDPROCEDUR log10
*BEGINPROCEDUR modulo
************************************************************************
* NOM         : MODULO
* DESCRIPTION : Calcule un entier modulo un autre...
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 15/10/2002, version initiale
* HISTORIQUE : v1, 15/10/2002, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' MODULO ;
'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
'SI' ('EGA' j 0) ;
  'MESSAGE' 'Impossible de faire modulo 0' ;
  'ERREUR' 5 ;
'SINON' ;
  k=i '/' j ;
  mod=i '-' ( k '*'j ) ;
  'RESPRO' mod ;
'FINSI' ;
*
* End of procedure file MODULO
*
'FINPROC' ;
*ENDPROCEDUR modulo
* From . :
*BEGINPROCEDUR calcoeil
************************************************************************
* NOM         : CALCOEIL
* DESCRIPTION : Calcul un oeil absolu convenable pour les tracés
*               en donnant un oeil relatif et un maillage
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 16/11/2004, version initiale
* HISTORIQUE : v1, 16/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' CALCOEIL ;
'ARGUMENT' mt*'MAILLAGE' ;
'ARGUMENT' foeil*'POINT' ;
   foeilx foeily foeilz = 'COORDONNEE' foeil ;
   xmt ymt zmt = 'COORDONNEE' mt ;
   maxmt = 'MAXIMUM' xmt ;
   maymt = 'MAXIMUM' ymt ;
   mazmt = 'MAXIMUM' zmt ;
   dx = '-' ('MAXIMUM' xmt) ('MINIMUM' xmt) ;
   dy = '-' ('MAXIMUM' ymt) ('MINIMUM' ymt) ;
   dxy = 'MAXIMUM' ('PROG' dx dy) ;
   dz = '-' ('MAXIMUM' zmt) ('MINIMUM' zmt) ;
   xoeil = '+' maxmt ('*' dxy foeilx) ;
   yoeil = '+' maymt ('*' dxy foeily) ;
   zoeil = '+' mazmt ('*' dz foeilz) ;
   oeil = xoeil yoeil zoeil ;
'RESPRO' oeil ;
*
* End of procedure file CALCOEIL
*
'FINPROC' ;
*ENDPROCEDUR calcoeil
*BEGINPROCEDUR compute
************************************************************************
* NOM         : COMPUTE
* DESCRIPTION : Do the computations of the stationnary fields 
*               in the reactor
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 09/11/2004, version initiale
* HISTORIQUE : v1, 09/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' COMPUTE ;
*
'ARGUMENT' tabdat*'TABLE' ;
*
* First store all the parameters to make tabres self-contained
*
tabres = 'TABLE' 'INCO' ;
tabres . 'tabdat' = tabdat ;
*
* Second, retrieve parameters from tables
*
tabgeo = tabdat . 'tabgeo' ;
tabphy = tabdat . 'tabphy' ;
tabnum = tabdat . 'tabnum' ;
*
H       = tabgeo . 'H'       ;
nh      = tabgeo . 'nh'      ;
$mtcbst = tabgeo . '$mtcbst' ;
$mtcb   = tabgeo . '$mtcb'   ;
$mthe   = tabgeo . '$mthe'   ;
$sthe   = tabgeo . '$sthe'   ;
$mtif   = tabgeo . '$mtif'   ;
*'SI' logb ;
*   $mtifb   = tabgeo . '$mtifb'   ;
*'FINSI' ;   
mcf     = tabgeo . 'mcf'     ;
mfc     = tabgeo . 'mfc'     ;
*
Dh     = tabphy . 'Dh'    ;
chblock= tabphy . 'chblock' ;
*vhe    = tabphy . 'vhe'   ;
qhe    = tabphy . 'qhe'   ;
prhe   = tabphy . 'prhe'  ;
theek  = tabphy . 'theek' ;
pvol   = tabphy . 'pvol'  ;
pvar   = tabphy . 'pvar'  ;
gamma  = tabphy . 'gamma' ;
irrad  = tabphy . 'irrad' ;
pcb    = tabphy . 'pcb'   ;
*
maxit  = tabnum . 'maxit'  ;
rescvg = tabnum . 'rescvg' ;
solvit = tabnum . 'solvit' ;
omcbst = tabnum . 'omcbst' ;
omhe   = tabnum . 'omhe'   ;
*
* Initialization of the tables for the thermal
* computation in the fuel+structure (rvcbst)
* and in the helium (rvhe)
*
rvcbst = 'EQEX' 'ITMA' 1 'NITER' 1 'OMEGA' omcbst 'FIDT' 1000 ;
rvcbst = 'EQEX' rvcbst
         'OPTI' 'EF' 'IMPL'
         'ZONE' $mtcbst 'OPER' 'LAPN' 'LCBST' 'INCO' 'TCBS' 
         ;
rvcbst = 'EQEX' rvcbst
         'OPTI' 'EF' 'IMPL'
         'ZONE' $mtcb 'OPER' 'FIMP' 'PCB' 'INCO' 'TCBS' 
         ;
rvcbst = 'EQEX' rvcbst
         'OPTI' 'EF' 'IMPL'
         'ZONE' $mtif 'OPER' 'ECHI' 'H' 'T0' 'INCO' 'TCBS' 'TCBS' 
         ;
*
* Iterative solver for the fuel+structure part
*
* 1 : direct solver, more robust, slower
* 3 : iterative solver, less robust, faster
'SI' solvit ;
   rvcbst . 'METHINV' . 'TYPINV' = 3 ;
'SINON' ;   
   rvcbst . 'METHINV' . 'TYPINV' = 1 ;
'FINSI' ;   
*         
rvhe = 'EQEX' 'ITMA' 1 'NITER' 1 'OMEGA' omhe 'FIDT' 1000 ;
rvhe = 'EQEX' rvhe
         'OPTI' 'EF' 'IMPL' 'CENTREE' 'NOCONS'
         'ZONE' $mthe 'OPER' 'KONV' 'RCPHE' 'UHE' 'LHE' 'INCO' 'THE'
         ;
rvhe = 'EQEX' rvhe
         'OPTI' 'EF' 'IMPL'
         'ZONE' $mthe 'OPER' 'LAPN' 'LHE' 'INCO' 'THE'
         ;
rvhe = 'EQEX' rvhe
         'OPTI' 'EF' 'IMPL'
         'ZONE' $mthe 'OPER' 'FIMP' 'PHE' 'INCO' 'THE' 
         ;
rvhe = 'EQEX' rvhe
         'CLIM' 'THE' 'TIMP' ('DOMA' $sthe 'MAILLAGE') theek ;
rvcbst . 'INCO' = tabres ;
rvhe . 'INCO' = tabres ;
tabres . 'TCBS' = 'KCHT'  $mtcbst 'SCAL' 'SOMMET' theek ;
lupu lsic lcb okcb = PRPCB irrad theek ;
tabres . 'LCBST' = 'KCHT' $mtcbst 'SCAL' 'CENTRE' lsic
                    ('KCHT' $mtcb 'SCAL' 'CENTRE' lcb) ;
tabres . 'PCB' = pcb ;
tabres . 'T0' = 'KCHT'  $mtif 'SCAL' 'CENTRE' 0.D0 ;
tabres . 'F0' = 'KCHT'  $mtif 'SCAL' 'CENTRE' 0.D0 ;
tabres . 'H'  = 'KCHT'  $mtif 'SCAL' 'CENTRE' 0.D0 ;
tabres . 'THE' = 'KCHT' $mthe 'SCAL' 'SOMMET' theek ;
tabres . 'PHE' = 'KCHT' $mthe 'SCAL' 'CENTRE' 0.D0 ;
thep  = 'COPIER' (tabres . 'THE') ;
tcbsp = 'COPIER' (tabres . 'TCBS') ;
*
* Initialization of the physical properties of helium
*
rhe muhe lhe cphe okhe = PRPHE prhe theek ;
*qhe = '*' rhe vhe ;
qheb  = '*' qhe chblock ;
qhebi = '*' mcf ('NOEL' $mthe qheb) ;
* Ce KCHT est indispensable car '*' supprimme les valeurs nulles...
qhebi = 'KCHT' $mtif 'SCAL' 'CENTRE' qhebi ;
uhe  = 'NOMC' 'UZ' ('/' qheb rhe) 'NATURE' 'DISCRET' ;
tabres . 'RCPHE' =  'KCHT' $mthe 'SCAL' 'CENTRE' ('*' rhe cphe) ;
tabres . 'LHE' =  'KCHT' $mthe 'SCAL' 'CENTRE' lhe ;
*tabres . 'UHE' =  'KCHT' $mthe 'VECT' 'SOMMET' (0.D0 0.D0 uhe) ;
*tabres . 'QHE' = qhe ;
tabres . 'UHE' =  'KCHT' $mthe 'VECT' 'SOMMET' uhe ;
tabres . 'QHE' = qheb ;
***************************************
*
* COMPUTATIONAL LOOP
*
***************************************
* Number of non-linearity iterations
maxiter = vrai ;
*
'REPETER' bouc maxit ;
*   1) Compute a mean temperature in helium
   tmoyhe = 'NOEL' $mthe (tabres . 'THE') ;
      'MESSAGE' 'Maximum mean helium temperature (degrees C) : '
             ('-' ('MAXIMUM' tmoyhe) 273.15D0) ;
*   2) Transfer this temperature on the interfaces
   tmtif  = '*' mcf tmoyhe ;
* Ce KCHT est indispensable car '*' supprimme les valeurs nulles...
   tabres . 'T0' = 'KCHT' $mtif 'SCAL' 'CENTRE' tmtif ;
*   3) Compute the exchange coefficient at the interface
*      and the physical properties of the fuel and the
*      structure with the temperature from the
*      previous iteration
* Mixing temperature
   tm = tabres . 'T0' ;
* Wall temperature
   tp = 'NOEL' $mtif (tabres . 'TCBS') ;
   t0 = '*' ('+' tm tp) 0.5D0 ;
*   t0 = tabres . 'T0' ;
   rho0 mu0 l0 cp0 okhe = PRPHE prhe t0 ;
   pran0 = '*' ('*' mu0 cp0) ('INVERSE' l0) ;
*   reyn0 = '*' ('*' qhe Dh) ('INVERSE' mu0) ;
   reyn0 = '*' ('*' qhebi Dh) ('INVERSE' mu0) ;
*  Colburn correlation
   nuss0 = 0.023 '*' ('**' reyn0 0.8D0)
                 '*' ('**' pran0 ('/' 1.D0 3.D0)) ;
   h0 = '/' ('*' nuss0 l0) Dh ;
* Tests
*   asp = '/' H Dh ;
   minasp  = 60.  ;
   minreyn = 1.D4 ;
   minpran = 0.65 ;
   maxpran = 160. ;
   asp = '/' H ('MAXIMUM' Dh) ;
   mireyn = 'MINIMUM' reyn0 ;
   mareyn = 'MAXIMUM' reyn0 ;
   okreyn = '>' mireyn minreyn ;
   mipran = 'MINIMUM' pran0 ;
   mapran = 'MAXIMUM' pran0 ;
*   okpr   = 'ET' ('>' mipran 0.7) ('<' mapran 160.) ;
   okipr =  '>' mipran minpran ;
   okapr =  '<' mapran maxpran ; 
   okpr   = 'ET' okipr okapr ;
   okasp  = '>' asp minasp ;
   oknuss = okreyn 'ET' okpr 'ET' okasp ;
   'SI' ('NON' oknuss) ;
      cherr = 'CHAINE' '!! Correlation de Colburn non valide' ;
      'MESSAGE' cherr ;
      'SI' ('NON' okreyn) ;
         cherr = 'CHAINE' ' min Re=' (formar mireyn 2)
                          ' (should be '  (formar minreyn 2) ')' ;
         'MESSAGE' cherr ;
         cherr = 'CHAINE' '  (Note : max Re=' (formar mareyn 2) ')' ;
        'MESSAGE' cherr ;
      'FINSI' ;          
      'SI' ('NON' okipr) ;         
         cherr = 'CHAINE' ' min Pr=' (formar mipran 2)
                          ' (should be '  (formar minpran 2) ')' ;
         'MESSAGE' cherr ;
      'FINSI' ;
      'SI' ('NON' okapr) ;                                   
         cherr = 'CHAINE' ' max Pr=' (formar mapran 2)
                          ' (should be '  (formar maxpran 2) ')' ;
         'MESSAGE' cherr ;
      'FINSI' ;
      'SI' ('NON' okasp) ;                                   
         cherr = 'CHAINE' ' min H/Dh=' (formar asp 2)
                          ' (should be '  (formar minasp 2) ')' ;
         'MESSAGE' cherr ;
      'FINSI' ;
   'FINSI' ;      
*   tabres . 'H' =  'KCHT' $mtif 'SCAL' 'CENTRE' ('*' h0 chblock) ;
   tabres . 'H' =  'KCHT' $mtif 'SCAL' 'CENTRE' h0 ;
   tabres . 'nuss0' = 'KCHT' $mtif 'SCAL' 'CENTRE' nuss0 ;
   tabres . 'reyn0' = 'KCHT' $mtif 'SCAL' 'CENTRE' reyn0 ;
   tabres . 'pran0' = 'KCHT' $mtif 'SCAL' 'CENTRE' pran0 ;
   tabres . 'l0' = 'KCHT' $mtif 'SCAL' 'CENTRE' l0 ;
   tabres . 'Dh' = 'KCHT' $mtif 'SCAL' 'CENTRE' Dh ;
* Physical properties of fuel and structure
   tcbck = 'NOEL' $mtcbst (tabres . 'TCBS') ;
   lupu lsic lcb okcb = PRPCB irrad tcbck ;
   tabres . 'LCBST' = 'KCHT' $mtcbst 'SCAL' 'CENTRE' lsic
                       ('KCHT' $mtcb 'SCAL' 'CENTRE' lcb) ;
*   4) Thermal computation in fuel + structure
   EXEC rvcbst ;
*   5) Flux computation on the surface of the fuel
   rvmdia1 = 'EQEX' 'OPTI' 'VF' 'IMPL'
             'ZONE' $mtif 'OPER' 'MDIA' 'H' 'INCO' 'TCBS' 'F0' ;
   rvmdia1 . 'INCO' = tabres ;                   
   smdia1 mmdia1 = 'MDIA' (rvmdia1 . '1MDIA') ;
   rvmdia2 = 'EQEX' 'OPTI' 'VF' 'IMPL'
             'ZONE' $mtif 'OPER' 'MDIA' 'H' 'INCO' 'T0'  'F0' ;
   rvmdia2 . 'INCO' = tabres ;                   
   smdia2 mmdia2 = 'MDIA' (rvmdia2 . '1MDIA') ;
   f0 = 'NOMC' 'SCAL' ('-' ('KOPS' mmdia1 '*'
                            ('NOMC' 'TCBS' (tabres . 'TCBS')))
                           ('KOPS' mmdia2 '*'
                            ('NOMC' 'T0'  (tabres . 'T0'))))
                ;
      'MESSAGE' 'Integrated flux on the surface of the fuel (W) : '
             ('MAXIMUM' ('RESULT' f0)) ;
*   6) Transfer it to a volume power in the helium
   tabres . 'F0' = f0 ;
   phe = '*' mfc f0 ;
   tabres . 'PHE' = 'KCHT' $mthe 'SCAL' 'CENTRE' phe ;
*
*   7) Compute the physical properties of helium with temperature and
*      pressure from the previous iteration
*
   theck = 'NOEL' $mthe (tabres . 'THE') ;
   thesk = tabres . 'THE' ;
   rhec muhec lhec cphec okhe = PRPHE prhe theck ;
   rhes muhes lhes cphes okhe = PRPHE prhe thesk ;
*   uhes = 'NOMC' 'UZ' ('*' qhe ('INVERSE' rhes)) ;
   uhes = 'NOMC' 'UZ' ('*' qheb ('INVERSE' rhes)) ;
   tabres . 'RCPHE' =  'KCHT' $mthe 'SCAL' 'CENTRE' ('*' rhec cphec) ;
   tabres . 'LHE' =  'KCHT' $mthe 'SCAL' 'CENTRE' lhec ;
   tabres . 'UHE' =  'KCHT' $mthe 'VECT' 'SOMMET' uhes ;
*   8) Thermal computation in the helium
   EXEC rvhe ;
*
* Convergence check
*
   then  = 'COPIER' (tabres . 'THE') ;
   tcbsn = 'COPIER' (tabres . 'TCBS') ;
   errhe  = '/' ('MAXIMUM'  ('-' then thep) 'ABS')
               ('MAXIMUM'  thep 'ABS') ;
   errcbs = '/' ('MAXIMUM'  ('-' tcbsn tcbsp) 'ABS')
               ('MAXIMUM'  tcbsp 'ABS') ;
   'MESSAGE' ('CHAINE' 'Iteration ' &bouc) ;
   'MESSAGE' ('CHAINE' '   errhe  = ' errhe) ;
   'MESSAGE' ('CHAINE' '   errcbs = ' errcbs) ;
   thep = then ;
   tcbsp = tcbsn ;
   testcvg = 'ET' (errhe '<' rescvg)  (errcbs '<' rescvg) ;
*
* Plots 
*
*   explores tabres ;
   'SI' testcvg ;
      maxiter = faux ;
      'QUITTER' bouc ;
    'FINSI' ;      
'FIN' bouc ;
'SI' ('EGA' maxiter vrai) ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'Warning !!!!!!!!!!!!') ;
   'MESSAGE' ('CHAINE' 'The computation has not converged') ;
   'ERREUR' 'Check compute.procedur !' ;
'FINSI' ;
'RESPRO' tabres ;
*
* End of procedure file COMPUTE
*
'FINPROC' ;
*ENDPROCEDUR compute
*BEGINPROCEDUR cpowdis
************************************************************************
* NOM         : CPOWDIS
* DESCRIPTION : Compute cos (z) power distribution
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 09/11/2004, version initiale
* HISTORIQUE : v1, 09/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' CPOWDIS ;
'ARGUMENT' tabgeo*'TABLE' ;
'ARGUMENT' pvol*'FLOTTANT' ;
'ARGUMENT' gamma*'FLOTTANT' ;
'ARGUMENT' pvar*'LOGIQUE' ;
*
$mtcbst = tabgeo . '$mtcbst' ;
$mtcb   = tabgeo . '$mtcb'   ;
$mthe   = tabgeo . '$mthe'   ;
*
vcbst = 'MAXIMUM' ('RESULT' ('DOMA' $mtcbst 'VOLUME')) ;
vcb   = 'MAXIMUM' ('RESULT' ('DOMA' $mtcb 'VOLUME'))   ;
vhe   = 'MAXIMUM' ('RESULT' ('DOMA' $mthe 'VOLUME'))   ;
vcoeur = '+' vcbst vhe ;
*
pmoy = pvol '*' ('/' vcoeur vcb) ;
'SI' ('NON' pvar) ;
   pcb = 'KCHT' $mtcb 'SCAL' 'CENTRE' pmoy ;
'SINON' ;   
   raddeg = '/' 180.D0 PI ;
   zcb = 'COORDONNEE' 3 ('DOMA' $mtcb 'CENTRE') ;
   zmoy = '/' H 2.D0 ;
   zcb = '+' zcb ('*' zmoy -1.D0) ;
   pmax = '*' pmoy ('/' gamma ('SIN' ('*' raddeg gamma))) ;
   'MESSAGE' ('CHAINE' 'gamma=' gamma) ;
   'MESSAGE' ('CHAINE' 'pmax=' pmax) ;
   fccos = '/' (2.D0 '*' gamma '*' raddeg) H ;
   pcb1 = '*' ('COS' ('*' zcb fccos)) pmax ;
   chvol = 'DOMA' $mtcb 'VOLUME' ;
   puis1 = 'MAXIMUM' ('RESULT' ('*' chvol pmoy)) ;
   puis2 = 'MAXIMUM' ('RESULT' ('*' chvol pcb1)) ;
  'SI' ('NON' ('EGA' puis1 puis2 ('*' 0.1 ('ABS' puis2)))) ;
      'MESSAGE' ('CHAINE' 'puis1 = ' puis1 ) ;
      'MESSAGE' ('CHAINE' 'puis2 = ' puis2 ) ;
      'ERREUR' 'Les deux puissances devraient etre a peu pres egales' ;
  'FINSI' ;         
* Correction
   facor = '/' puis1 puis2 ;
   pcb2 = '*' pcb1 facor ;
   pcb = 'KCHT' $mtcb 'SCAL' 'CENTRE' pcb2 ;
'FINSI' ;
'RESPRO' pcb ;
*
* End of procedure file CPOWDIS
*
'FINPROC' ;
*ENDPROCEDUR cpowdis
*BEGINPROCEDUR dessevol
************************************************************************
* NOM         : DESSEVOL
* DESCRIPTION : Dessine des évolutions : choisit automatiquement
*               les options, marqueurs, couleurs...
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 16/11/2004, version initiale
* HISTORIQUE : v1, 16/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' DESSEVOL ;
'ARGUMENT' evtot*'EVOLUTION' ;
'ARGUMENT' tabt*'TABLE' ;
'ARGUMENT' tit*'MOT' ;
'ARGUMENT' tix*'MOT' ;
'ARGUMENT' tiy*'MOT' ;
'ARGUMENT' lnclk*'LOGIQUE' ;
'ARGUMENT' nb/'LOGIQUE' ;
*
'SI' ('NON' ('EXISTE' nb)) ;
   nb = FAUX ;
'FINSI' ;   
*
nt  = 'DIME' tabt ;
nev = 'DIME' evtot ;
*
* Attention, dans evtot, il y a une évolution avec des noms de points ?
*
*'SI' ('NEG' nev nt) ;
*   cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
*   'ERREUR' cherr ;
*'FINSI' ;
*
tev = 'TABLE' ;
tev . 'TITRE' = tabt ;
*
toto = 'TABLE' ;
*
lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
lmarq = 'MOTS' 'TRIB' 'TRIA' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI' ;
ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
*
'SI' nb ;
   ev2 = evtot ;
'SINON' ;
   icou = 0 ;
   'REPETER' iev nev ;
      ii = &iev ;
      evi = 'EXTRAIRE' evtot 'COUR' ii ;
      'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
         icou = '+' icou 1 ;
      'FINSI' ;         
*      ii2 = '/' ('+' ii 1) 2 ;
*      ci  = EXMOMOD lcoul ii2 ;
*      ci  = EXMOMOD lcoul ii ;
      ci  = EXMOMOD lcoul icou ;
      APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
   'FIN' iev ;
   ev2 = toto . 'EVOLUTION' ;
'FINSI' ;
*      
'REPETER' iev nev ;
   ii = &iev ;
   mi = EXMOMOD lmarq ii ;
   ti = EXMOMOD ltirr ii ;
   'SI' nb ;
      tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ;
   'SINON' ;      
      tev . ii = 'CHAINE' 'MARQ ' mi ;
   'FINSI' ;      
'FIN' iev ;   
*
'SI' lnclk ;
   'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
   'NCLK' ;
'SINON' ;   
   'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev ;
'FINSI' ;   
*
* End of procedure file DESSEVOL
*
'FINPROC' ;
*ENDPROCEDUR dessevol
*BEGINPROCEDUR explodat
************************************************************************
* NOM         : EXPLODAT
* DESCRIPTION : Explore the data interactively or not.
*
* - first argument (mandatory) : the tables with data
* - second argument (optional) : VRAI (default) interactive use
*                                     (mouse clicks)
*                                FAUX batch use
* - third argument (mandatory if 2ndarg = FAUX) : a list of integer or
*                                                  an integer  
*              an integer corresponds to a particular view
*   View 1 : the base mesh
*   View 2 : the mesh
*   View 3 : the blocked channels
*   View 4 : the power distribution
*   View 5 : fuel and structure thermal conductivity (T)
*   View 6 : Helium density
*   View 7 : Helium thermal conductivity
*   View 8 : Helium heat capacity
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 17/11/2004, version initiale
* HISTORIQUE : v1, 17/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' EXPLODAT ;
'ARGUMENT' tabdat*'TABLE';
'ARGUMENT' interact/'LOGIQUE' ;
'SI' ('NON' ('EXISTE' interact)) ;
   interact = VRAI ;
'FINSI' ;   
*
'SI' ('NON' interact) ;
   'ARGUMENT' liview/'LISTENTI' ;
   'SI' ('NON' ('EXISTE' liview)) ;
      'ARGUMENT' iview*'ENTIER' ;
      liview = 'LECT' iview ;
   'FINSI' ;      
   niview = 'DIME' liview ;
   'SI' ('<' niview 1) ;
      'QUITTER' EXPLODAT ;
   'FINSI' ;       
   iiview = 1 ;
'FINSI' ;
*
* Retrieve parameters from tables
*
tabgeo = tabdat . 'tabgeo' ;
tabphy = tabdat . 'tabphy' ;
tabin  = tabgeo . 'tabin' ;
logst  = 'EXISTE' tabin 'STRUCTURE' ;
*
H       = tabgeo . 'H'       ;
nh      = tabgeo . 'nh'      ;
$mtcbst = tabgeo . '$mtcbst' ;
$mtcb   = tabgeo . '$mtcb'   ;
$mthe   = tabgeo . '$mthe'   ;
$sthe   = tabgeo . '$sthe'   ;
$mtif   = tabgeo . '$mtif'   ;
cfc     = tabgeo . 'cfc'     ;
amtcb   = tabgeo . 'amtcb' ;
amthe   = tabgeo . 'amthe'   ;
* QUAF meshes
_mtcbst = 'DOMA' $mtcbst 'QUAF' ;
_mthe   = 'DOMA' $mthe   'QUAF' ;
mtcbst = 'DOMA' $mtcbst 'MAILLAGE' ;
mtcb   = 'DOMA' $mtcb   'MAILLAGE' ;
mthe   = 'DOMA' $mthe   'MAILLAGE' ;
'SI' logst ;
   mtst   = 'DIFF' mtcbst mtcb ;
'FINSI' ;   
mthe   = 'DOMA' $mthe   'MAILLAGE' ;
mtif   = 'DOMA' $mtif   'MAILLAGE' ;
*
Dh     = tabphy . 'Dh'    ;
chblock= tabphy . 'chblock' ;
*vhe    = tabphy . 'vhe'   ;
qhe    = tabphy . 'qhe'   ;
prhe   = tabphy . 'prhe'  ;
theek  = tabphy . 'theek' ;
pvol   = tabphy . 'pvol'  ;
pvar   = tabphy . 'pvar'  ;
gamma  = tabphy . 'gamma' ;
irrad  = tabphy . 'irrad' ;
pcb    = tabphy . 'pcb'   ;
* compute bottom He speed
rhohe muhe lhe cphe dum = PRPHE prhe theek ;
vhe = '/' qhe rhohe ;
*
* Precomputations
*
* One wants the height (z) not to be more than four times x or y dimension
*   targetz = 4.D0 ;
   targetz = 1.5D0 ;
*   targetz = 0.5D0 ;
   ftour = 0.1D0 ;
   _mtot = 'ET' _mtcbst _mthe ;
   xmt ymt zmt = 'COORDONNEE' _mtot ;
   dx = '-' ('MAXIMUM' xmt) ('MINIMUM' xmt) ;
   dy = '-' ('MAXIMUM' ymt) ('MINIMUM' ymt) ;
   dxy = 'MAXIMUM' ('PROG' dx dy) ;
   dz = '-' ('MAXIMUM' zmt) ('MINIMUM' zmt) ;
   dzdx = '/' dz dx ;
   chzscale = '>' dzdx targetz ;
   'SI' chzscale ;
      zfactor = '/' dzdx targetz ;
      factech =  ('-' ('/' 1.D0 zfactor) 1.D0) ;
      dzmt = 'NOMC' 'UZ' ('*' zmt factech) 'NATURE' 'DISCRET' ;
      orig = 'FORME' ;
      defrm = 'FORME' dzmt ;
   'FINSI' ;      
*
   'SI' interact ;                             
      mail = ('COULEUR' mtcb 'ROUG')
        'ET' ('COULEUR' mthe 'BLEU') ;
      'SI' (logst) ;
         mail = 'ET' mail ('COULEUR' mtst 'BLANC') ;
      'FINSI' ;                 
      npomail = 'NBNO' mail ;
      nelmail = 'NBEL' mail ;
      titmail = 'CHAINE' 'Mesh ' 'NBPO=' npomail
                                ' NBELEM=' nelmail ;
      TRACMESH mail titmail VRAI ;
   'FINSI' ;      
*
* Precomp of physical properties
*
*  Temperature evolutions (in °C !!!)
   Tmin = 500.D0 ;
   Tmax = 1600.D0 ;
   npasT = 10.D0 ;
   pasT = '/' ('-' Tmax Tmin) npasT ;
   prT = 'PROG' Tmin 'PAS' pasT Tmax ;
   prlupu = 'PROG' ;
   prlsic = 'PROG' ;
   prlcb  = 'PROG' ;
   nbc = 'DIME' prT ;
   'REPETER' ibc nbc ;
      T = 'EXTRAIRE' pRT &ibc ;
      T = '+' T 273.15D0 ;
      lupu lsic lcb dum = PRPCB FAUX  T ;
      prlupu  = 'ET' prlupu  ('PROG' lupu) ;
      prlsic  = 'ET' prlsic  ('PROG' lsic) ;
      prlcb   = 'ET' prlcb   ('PROG' lcb) ; 
   'FIN' ibc ;   
   evlupu = 'EVOL' 'MANU' 'T' prT 'Lambda' prlupu ;
   evlsic = 'EVOL' 'MANU' 'T' prT 'Lambda' prlsic ;
   evlcb =  'EVOL' 'MANU' 'T' prT 'Lambda' prlcb ;
* Helium prop
*  Temperature evolutions (in °C !!!)
Tmin = 450.D0 ;
Tmax = 1150.D0 ;
npasT = 10.D0 ;
pasT = '/' ('-' Tmax Tmin) npasT ;
prT    = 'PROG' Tmin 'PAS' pasT Tmax ;
prrho  = 'PROG' ;
prlamb = 'PROG' ;
prcp   = 'PROG' ;
nbc = 'DIME' prT ;
'REPETER' ibc nbc ;
   T = 'EXTRAIRE' pRT &ibc ;
   T = '+' T 273.15D0 ;
   rho mu lamb cp dum = PRPHE prhe T ;
   prrho = 'ET' prrho ('PROG' rho) ;
   prlamb = 'ET' prlamb ('PROG' lamb) ;
   prcp = 'ET' prcp ('PROG' cp) ;
'FIN' ibc ;
evrho  = 'EVOL' 'MANU' 'T' prT 'Rho' prrho ;
evlamb = 'EVOL' 'MANU' 'T' prT 'Lambda' prlamb ;
evcp   = 'EVOL' 'MANU' 'T' prT 'Cp' prcp ;
*
* Arete precomp
*   
*amtcb = 'ARETE' mtcb ;
*
   tcha = 'TABLE' ;
   tcha . 1 = 'BMesh'  ;
   tcha . 2 = 'Mesh'   ;
   tcha . 3 = 'BChan'  ;
   tcha . 4 = 'FuelT2' ;
   tcha . 5 = 'LFuel'  ;
   tcha . 6 = 'RhoHe'  ;
   tcha . 7 = 'LamHe'  ;
   tcha . 8 = 'CpHe'   ;
   ntcha = 'DIME' tcha ;
   'SI' interact ;
      itcha = 1 ;
      noclic = VRAI ;
   'SINON' ;
      itcha = 'EXTRAIRE' liview iiview ;
      noclic = FAUX ;
   'FINSI' ;            
*
'REPETER' bouc2 ;
'SI' interact ;
   'MESSAGE' 'Noclic allows not to click between each view' ;   
   'MESSAGE'
'However, one will deactivate it in order to zoom or save' ;
   noclic = 'CHOI' 'Choose desired options' noclic ;
'FINSI' ;   
*
'REPETER' bouc1;
*
'SI' ('EGA' itcha 1) ;
   bmesh = ('COULEUR' (tabin . 'FUEL') 'ROUG') 'ET' 
           ('COULEUR' (@STBL (tabin . 'CHANNEL')) 'BLEU') ;
   'SI' logst ;
      bmesh = 'ET' bmesh (tabin . 'STRUCTURE') ;
   'FINSI' ;
   oeil = (0. 0. 1000.) ;
   npomail = 'NBNO' bmesh ;
   nelmail = 'NBEL' bmesh ;
   tit = 'CHAINE' 'Base Mesh ' 'NBPO=' npomail
                               ' NBELEM=' nelmail ;
   'SI' noclic ;
      TRAC oeil bmesh 'TITRE' tit 'NCLK' ;
   'SINON' ;      
      TRAC oeil bmesh 'TITRE' tit  ;
   'FINSI' ;      
'FINSI' ;
'SI' ('EGA' itcha 2) ;
   mail = ('COULEUR' mtcb 'ROUG')
     'ET' ('COULEUR' mthe 'BLEU') ;
   'SI' (logst) ;
      mail = 'ET' mail ('COULEUR' mtst 'BLANC') ;
   'FINSI' ;                 
   npomail = 'NBNO' mail ;
   nelmail = 'NBEL' mail ;
   tit = 'CHAINE' 'Mesh ' 'NBPO=' npomail
                          ' NBELEM=' nelmail ;
   TRACMESH mail tit noclic ;
'FINSI' ;
'SI' ('EGA' itcha 3) ;
*   tit = 'CHAINE' 'Blocked channels'  ;
*   tracchml $mtif chblock tit noclic ;
   tit = 'CHAINE' 'Blocked channels'  ;
   tracchpo chblock mthe amthe tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 4) ;
   tit = 'CHAINE' 'Power Distribution (W.m-3)' ;
   tracchml $mtcb pcb amtcb tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 5) ;
   evt = evlupu 'ET' evlsic 'ET' evlcb ;
   tt = 'TABLE' ;
   'SI' irrad ;
      tt . 1 = 'CHAINE' '(U,Pu)C irr.' ;
      tt . 2 = 'CHAINE' 'SiC irr.'     ;
      tt . 3 = 'CHAINE' 'CerCer irr.'  ;
   'SINON' ;      
      tt . 1 = 'CHAINE' '(U,Pu)C' ;
      tt . 2 = 'CHAINE' 'SiC' ;
      tt . 3 = 'CHAINE' 'CerCer' ;
   'FINSI' ;      
   tit = 'CHAINE' 'Lambda(Temperature)' ;
   titx = 'CHAINE' 'T (°C)' ;
   tity = 'CHAINE' 'Lambda (W.m-1.K-1)' ;
   DESSEVOL evt tt tit titx tity noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 6) ;
   tt = 'TABLE' ;
   tt . 1 = 'CHAINE' 'Helium' ;
   tit = 'CHAINE' 'Density(Temperature)'
         ' pres= ' (formar prhe 2) ' bar' ;
   titx = 'CHAINE' 'T (°C)' ;
   tity = 'CHAINE' 'Rho (kg.m-3)' ;
   DESSEVOL evrho tt tit titx tity noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 7) ;
   tt = 'TABLE' ;
   tt . 1 = 'CHAINE' 'Helium' ;
   tit = 'CHAINE' 'Thermal Conductivity (Temperature)'
         ' pres= ' (formar prhe 2) ' bar' ;
   titx = 'CHAINE' 'T (°C)' ;
   tity = 'CHAINE' 'Lambda (W.m-1.K-1)' ;
   DESSEVOL evlamb tt tit titx tity noclic ;
'FINSI' ;   
*
'SI' ('EGA' itcha 8) ;
   tt = 'TABLE' ;
   tt . 1 = 'CHAINE' 'Helium' ;
   tit = 'CHAINE' 'Specific Heat (Temperature)'
         ' pres= ' (formar prhe 2) ' bar' ;
   titx = 'CHAINE' 'T (°C)' ;
   tity = 'CHAINE' 'Cp (J.kg-1.K-1)' ;
   DESSEVOL evcp tt tit titx tity noclic ;
'FINSI' ;   
*
'SI' interact ;
   cha = tit ;
   ret = 'MENU' cha 'Next' 'Previous' 'Options' ;
   'SI' ('EGA' ret 'Options') ; 'QUITTER' bouc1  ; 'FINSI';
   'SI' ('EGA' ret 'Quitter') ; 'QUITTER' bouc2; 'FINSI';
   'SI' ('EGA' ret 'Next') ; itcha = '+' itcha 1 ; 'FINSI' ; 
   'SI' ('EGA' ret 'Previous') ; itcha = '-' itcha 1 ; 'FINSI' ; 
   'SI' (itcha > ntcha); itcha = 1      ; 'FINSI';
   'SI' (itcha < 1); itcha = ntcha      ; 'FINSI';
'SINON' ;
   iiview = '+' iiview 1 ;
   'SI' ('>' iiview niview) ;
      'QUITTER' bouc2 ;
   'SINON' ;
      itcha = 'EXTRAIRE' liview iiview ;
   'FINSI' ;
'FINSI' ;            
*
'FIN' bouc1;
'FIN' bouc2 ;
*
'SI' chzscale ;
   'FORME' orig ;
'FINSI' ;      
*
* End of procedure file EXPLODAT
*
'FINPROC' ;
*ENDPROCEDUR explodat
*BEGINPROCEDUR explores
************************************************************************
* NOM         : EXPLORES
* DESCRIPTION : Explore the Results interactively or not.
*
* EXPLORES does graphical output of results
* - first argument (mandatory) : the table with the fields
* - second argument (optional) : VRAI (default) interactive use
*                                     (mouse clicks)
*                                FAUX batch use
* - third argument (mandatory if 2ndarg = FAUX) : a list of integer or
*                                                 an integer  
*              an integer corresponds to a particular view
*   View 1 : temperature (fuel + He)
*   View 2 : temperature (fuel)
*   View 3 : temperature (fuel : 2 viewpoints)
*   View 4 : exchange coefficient
*   View 5 : temperature (helium)
*   View 6 : vertical speed (helium)
*   View 7 : temperature profiles per channel (helium)
*   View 8 : vertical speed profiles per channel (helium)
*   View 9  : Nusselt number
*   View 10 : Reynolds number
*   View 11 : Prandtl number
*   View 12 : Lambda Helium
*   View 13 : Hydraulic diameter
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 17/11/2004, version initiale
* HISTORIQUE : v1, 17/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' EXPLORES ;
'ARGUMENT' tabres*'TABLE' ;
'ARGUMENT' interact/'LOGIQUE' ;
'SI' ('NON' ('EXISTE' interact)) ;
   interact = VRAI ;
'FINSI' ;   
*
'SI' ('NON' interact) ;
   'ARGUMENT' liview/'LISTENTI' ;
   'SI' ('NON' ('EXISTE' liview)) ;
      'ARGUMENT' iview*'ENTIER' ;
      liview = 'LECT' iview ;
   'FINSI' ;      
   niview = 'DIME' liview ;
   'SI' ('<' niview 1) ;
      'QUITTER' EXPLORES ;
   'FINSI' ;       
   iiview = 1 ;
'FINSI' ;
*
* Retrieve parameters from tables
*
tabdat = tabres . 'tabdat' ;
tabgeo = tabdat . 'tabgeo' ;
tabin  = tabgeo . 'tabin' ;
logst  = 'EXISTE' tabin 'STRUCTURE' ;
*
H       = tabgeo . 'H'       ;
nh      = tabgeo . 'nh'      ;
$mtcbst = tabgeo . '$mtcbst' ;
$mtcb   = tabgeo . '$mtcb'   ;
$mthe   = tabgeo . '$mthe'   ;
$sthe   = tabgeo . '$sthe'   ;
$mtif   = tabgeo . '$mtif'   ;
cfc     = tabgeo . 'cfc'     ;
amtcbst = tabgeo . 'amtcbst' ;
amthe   = tabgeo . 'amthe'   ;
* QUAF meshes
_mtcbst = 'DOMA' $mtcbst 'QUAF' ;
_mthe   = 'DOMA' $mthe   'QUAF' ;
mtcbst = 'DOMA' $mtcbst 'MAILLAGE' ;
mtcb   = 'DOMA' $mtcb   'MAILLAGE' ;
'SI' logst ;
   mtst   = 'DIFF' mtcbst mtcb ;
'FINSI' ;   
mtst   = 'DIFF' mtcbst mtcb ;
mthe   = 'DOMA' $mthe   'MAILLAGE' ;
mtif   = 'DOMA' $mtif   'MAILLAGE' ;
*
* Precomputations
*
* One wants the height (z) not to be more than four times x or y dimension
*   targetz = 4.D0 ;
   targetz = 1.5D0 ;
   ftour = 0.1D0 ;
   _mtot = 'ET' _mtcbst _mthe ;
   xmt ymt zmt = 'COORDONNEE' _mtot ;
   dx = '-' ('MAXIMUM' xmt) ('MINIMUM' xmt) ;
   dy = '-' ('MAXIMUM' ymt) ('MINIMUM' ymt) ;
   dxy = 'MAXIMUM' ('PROG' dx dy) ;
   dz = '-' ('MAXIMUM' zmt) ('MINIMUM' zmt) ;
   dzdx = '/' dz dx ;
   chzscale = '>' dzdx targetz ;
   'SI' chzscale ;
      zfactor = '/' dzdx targetz ;
      factech =  ('-' ('/' 1.D0 zfactor) 1.D0) ;
      dzmt = 'NOMC' 'UZ' ('*' zmt factech) 'NATURE' 'DISCRET' ;
      orig = 'FORME' ;
      defrm = 'FORME' dzmt ;
   'FINSI' ;      
*
* manipulation maillage et champ de temperature
   tcbsc = ('-' (tabres . 'TCBS') 273.15D0) ;
   thec  = ('-' (tabres . 'THE')  273.15D0) ;
   cech  = tabres . 'H' ;
   nuss0 = tabres . 'nuss0' ;
   reyn0 = tabres . 'reyn0' ;
   pran0 = tabres . 'pran0' ;
   l0 = tabres . 'l0' ;
   Dh = tabres . 'Dh' ;
   uz = 'EXCO' 'UZ' (tabres . 'UHE') ;
* tournage 
   mtot = 'ET' mtcbst mthe ;
   xmt ymt zmt = 'COORDONNEE' mtot ;
   mixmt = 'MINIMUM' xmt ;
   miymt = 'MINIMUM' ymt ;
   mizmt = 'MINIMUM' zmt ;
   dx = '-' ('MAXIMUM' xmt) ('MINIMUM' xmt) ;
   dy = '-' ('MAXIMUM' ymt) ('MINIMUM' ymt) ;
   dz = '-' ('MAXIMUM' zmt) ('MINIMUM' zmt) ;
   p1 = ('-' mixmt ('*' dx ftour))
        ('-' miymt ('*' dy ftour))
        mizmt ;
   p2 = ('-' mixmt ('*' dx ftour))
        ('-' miymt ('*' dy ftour))
        ('+' mizmt 1.D0) ;
*   amtcbst  = 'ARETE' mtcbst  ;
*   amthe    = 'ARETE' mthe    ;
   tcbsc2 thec2 mtcbst2 mthe2 amtcbst2 amthe2 =
    'TOURNER' tcbsc thec mtcbst mthe amtcbst amthe 180. p1 p2 ;
   tcbsct  = 'ET' tcbsc tcbsc2 ;
   thect   = 'ET' thec  thec2 ;
   mtcbstt = 'ET' mtcbst mtcbst2 ;
   mthet   = 'ET' mthe   mthe2 ;
   amtcbstt = 'ET' amtcbst amtcbst2 ;
   amthet   = 'ET' amthe   amthe2 ;
*
   'SI' interact ;                             
      mail = ('COULEUR' mtcb 'ROUG')
        'ET' ('COULEUR' mthe 'BLEU') ;
      'SI' (logst) ;
         mail = 'ET' mail ('COULEUR' mtst 'BLANC') ;
      'FINSI' ;                 
      npomail = 'NBNO' mail ;
      nelmail = 'NBEL' mail ;
      titmail = 'CHAINE' 'Mesh ' 'NBPO=' npomail
                                ' NBELEM=' nelmail ;
      TRACMESH mail titmail VRAI ;
   'FINSI' ;      
*
* Evol precalc
*
   'SI' chzscale ;
      'FORME' orig ;
   'FINSI' ;      
   nchan = 'DIME' (tabin . 'CHANNEL') ;
   tt = 'TABLE' ;
   tev = 'TABLE' ;
   'REPETER' ichan nchan ;
      lighe = tabgeo . 'tlchan' . &ichan ;
      evthec = 'EVOL' 'CHPO' thec lighe ;
      APPEND tev 'TEMPERATURE' evthec ;
      evuhe = 'EVOL' 'CHPO' uz lighe ;
      APPEND tev 'VITESSE' evuhe ;
      tt . &ichan = 'CHAINE' 'Canal ' &ichan ;
   'FIN' ichan ;
   'SI' chzscale ;
      'FORME' defrm ;
   'FINSI' ;      
*
   tcha = 'TABLE' ;
   tcha . 1 = 'T' ;
   tcha . 2 = 'FuelT' ;
   tcha . 3 = 'FuelT2' ;
   tcha . 4 = 'Excoef' ;
   tcha . 5 = 'HeT' ;
   tcha . 6 = 'HeUz' ;
   tcha . 7 = 'HeevT' ;
   tcha . 8 = 'HeevUz' ;
   tcha . 9 = 'Nuss' ;
   tcha . 10 = 'Reyn' ;
   tcha . 11 = 'Prand' ;
   tcha . 12 = 'LamHe' ;
   tcha . 13 = 'Dh' ;
   ntcha = 'DIME' tcha ;
   'SI' interact ;
      itcha = 1 ;
      noclic = VRAI ;
   'SINON' ;
      itcha = 'EXTRAIRE' liview iiview ;
      noclic = FAUX ;
   'FINSI' ;            
*
'REPETER' bouc2 ;
'SI' interact ;
   'MESSAGE' 'Noclic allows not to click between each view' ;   
   'MESSAGE'
'However, one will deactivate it in order to zoom or save' ;
   noclic = 'CHOI' 'Choose desired options' noclic ;
'FINSI' ;   
*
'REPETER' bouc1;
*
'SI' ('EGA' itcha 1) ;
   tit = 'CHAINE' 'Temp. (°C)' ;
   tracchpo  (tcbsct 'ET' thect)
             (mtcbstt 'ET' mthet)
             (amtcbstt 'ET' amthet)
             tit noclic ;
'FINSI' ;
'SI' ('EGA' itcha 2) ;
   tit = 'CHAINE' 'Fuel Temp. (°C)' ;
   tracchpo tcbsc mtcbst amtcbst tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 3) ;
   tit = 'CHAINE' 'Fuel Temp. (°C)' ;
   tracchpo tcbsct mtcbstt amtcbstt tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 4) ;
   tit = 'CHAINE' 'Exchange coeff. (W.m-2.K-1)'  ;
   tracchml $mtif cech ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 5) ;
   tit = 'CHAINE' 'Temp. He (°C)' ;
   tracchpo thect mthe amthe tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 6) ;
   tit = 'CHAINE' 'Uz He (m.s-1)' ;
   tracchpo uz  mthe amthe tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 7) ;
    tit = 'CHAINE' 'Helium Temperature' ;
    titxthe = 'CHAINE' 's (m)' ;
    titythe = 'CHAINE' 'T (°C)' ;
    DESSEVOL (tev . 'TEMPERATURE') tt tit titxthe titythe noclic ;
'FINSI' ;
'SI' ('EGA' itcha 8) ;
    tit = 'CHAINE' 'Helium Vertical Speed' ;
    titxuhe = 'CHAINE' 's (m)' ;
    tityuhe = 'CHAINE' 'uz (m.s-1)' ;
    DESSEVOL (tev . 'VITESSE') tt tit titxuhe tityuhe noclic ;
'FINSI' ;       
'SI' ('EGA' itcha 9) ;
   tit = 'CHAINE' 'Nusselt number'  ;
   tracchml $mtif nuss0 ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 10) ;
   tit = 'CHAINE' 'Reynolds number'  ;
   tracchml $mtif reyn0 ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 11) ;
   tit = 'CHAINE' 'Prandtl number'  ;
   tracchml $mtif pran0 ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 12) ;
   tit = 'CHAINE' 'Lambda (He)'  ;
   tracchml $mtif l0 ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
'SI' ('EGA' itcha 13) ;
   tit = 'CHAINE' 'Hydraulic diameter (m)'  ;
   tracchml $mtif Dh ('CONTOUR' mtif) tit noclic ;
'FINSI' ;   
*
'SI' interact ;
   cha = tit ;
   ret = 'MENU' cha 'Next' 'Previous' 'Options' ;
   'SI' ('EGA' ret 'Options') ; 'QUITTER' bouc1  ; 'FINSI';
   'SI' ('EGA' ret 'Quitter') ; 'QUITTER' bouc2; 'FINSI';
   'SI' ('EGA' ret 'Next') ; itcha = '+' itcha 1 ; 'FINSI' ; 
   'SI' ('EGA' ret 'Previous') ; itcha = '-' itcha 1 ; 'FINSI' ; 
   'SI' (itcha > ntcha); itcha = 1      ; 'FINSI';
   'SI' (itcha < 1); itcha = ntcha      ; 'FINSI';
'SINON' ;
   iiview = '+' iiview 1 ;
   'SI' ('>' iiview niview) ;
      'QUITTER' bouc2 ;
   'SINON' ;
      itcha = 'EXTRAIRE' liview iiview ;
   'FINSI' ;
'FINSI' ;            
*
'FIN' bouc1;
'FIN' bouc2 ;
*
'SI' chzscale ;
   'FORME' orig ;
'FINSI' ;      
*
* End of procedure file EXPLORES
*
'FINPROC' ;
*ENDPROCEDUR explores
*BEGINPROCEDUR genmema
************************************************************************
* NOM         : GENMEMA
* DESCRIPTION : Generate meshes and coupling matrix given base surface
*               mesh
*
* Input for GENMEMA procedure
* tabin . 'INTERFACE'  . i : i-th interface       (line mesh)
* tabin . 'CHANNEL'    . i : i-th helium channel  (surface mesh)
* tabin . 'FUEL'           : fuel mesh (surface mesh)
* tabin . 'STRUCTURE'      : structure mesh (surface mesh) (optional)
* H : height (m) and nh : number of elements in the height
* (regular meshing in z direction)
*
* Temporary table for GENMEMA procedure
* tabout . 'INTERFACE'  . i : i-th interface       (surface mesh)
* tabout . 'CHANNEL'    . i : i-th helium channel  (volume mesh)
* tabout . 'CCONINCH'   . i : i-th coupling connectivity intreface <-> channel
* tabout . 'CMATCHIN'   . i : i-th coupling matrix channel -> interface
* tabout . 'CMATINCH'   . i : i-th coupling matrix interface -> channel
* tabin . 'FUEL'           : fuel mesh (volume mesh)
* tabin . 'STRUCTURE'      : structure mesh (volume mesh) (optional)
*
* Output table for GENMEMA procedure
*
* output tabgeo should contain all the necessary geometric information
* needed further
* tabgeo . 'tabin'   = tabin
* tabgeo . 'H'       = H   : height
* tabgeo . 'nh'      = nh  : number of elements in the height
* tabgeo . '$mtcbst' = NS model objet (fuel+structure)
* tabgeo . '$mtcb'   = NS model objet (fuel only)
* tabgeo . '$mthe'   = NS model objet (helium channels)
* tabgeo . '$sthe'   = NS model objet (bottom of the helium channels)
* tabgeo . '$mtif'   = NS model objet (interfaces)
* tabgeo . '$mtifb'  = NS model objet (blocked interfaces)
* tabgeo . 'mcf'     = coupling matrix helium -> fuel
* tabgeo . 'mfc'     = coupling matrix fuel -> helium
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 09/11/2004, version initiale
* HISTORIQUE : v1, 09/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GENMEMA ;
'ARGUMENT' tabin*'TABLE' ;
'ARGUMENT' H*'FLOTTANT' ;
'ARGUMENT' nh*'ENTIER' ;
*
tabout = 'TABLE' ;
tabout . 'INTERFACE' = 'TABLE' ;
tabout . 'CHANNEL'   = 'TABLE' ;
tabout . 'CCONINCH'  = 'TABLE' ;
tabout . 'CMATCHIN'  = 'TABLE' ;
tabout . 'CMATINCH'  = 'TABLE' ;
*
hnh    = '/' H ('FLOTTANT' nh) ;
vechnh = (0. 0. hnh) ;
*
* Treatment of everything except 'OTHER'
*
ninterf = 'DIME' (tabin . 'INTERFACE') ;
nchanne = 'DIME' (tabin . 'CHANNEL') ;
'SI' ('NEG' ninterf nchanne) ;
   cherr = 'CHAINE' 'NEG (DIME (tabin . INTERFACE)) '
                    '(DIME (tabin . CHANNEL))' ;
   'ERREUR' cherr ;                    
'FINSI' ;
*
* Loop on interfaces
*
*   Préconditionnement
*
   mott = 'MOTS' 'T' ;
   pr1  = 'PROG' 0.D0 0.D0 ;
   pr3  = 'PROG' 0.D0 1.D0 ;
*
'REPETER' iinterf ninterf ;
   lpreums = vrai ;
   linterf = tabin  . 'INTERFACE' . &iinterf ;
   scan    = tabin  . 'CHANNEL'   . &iinterf ;
* Loop on height   
   'REPETER' ih nh ;
      vectran = (0. 0. ('*' hnh ('FLOTTANT' ('-' &ih 1)))) ;
      tli = 'PLUS' linterf vectran ;
      tsc = 'PLUS' scan    vectran ;
      sli = 'TRANSLATION' tli 1 vechnh ;
      vsc  = 'VOLUME' tsc 'TRAN' 1 vechnh ;
      cvsc = 'BARYCENTRE' vsc ;
      vvsc = 'MESURE' vsc ;
      ivvsc = '/' 1.D0 vvsc ;
      pr2i  = 'PROG' ivvsc 0.D0 ;
*      'LISTE' cvsc ; 'LISTE' cvsc2 ;
      APPEND (tabout . 'CHANNEL')  &iinterf vsc ;
* Loop on interface elements
      nsli = 'NBEL' sli ;
      'REPETER' isli nsli ;
         esli  = 'ELEM' sli &isli ;
         cesli = 'BARYCENTRE' esli ;
         cco = 'MANUEL' 'SEG2' cesli cvsc ;
         mci = 'MANUEL' 'RIGIDITE' cco mott 'QUEL' pr3 pr1 ;
*                ('PROG' 0.D0 1.D0) ('PROG' 0.D0 0.D0) ;
         mic = 'MANUEL' 'RIGIDITE' cco mott 'QUEL' pr1 pr2i ;
         'SI' lpreums ;
            tabout . 'INTERFACE' . &iinterf = esli ;
            tabout . 'CCONINCH'  . &iinterf = cco ;
            tabout . 'CMATCHIN'  . &iinterf = mci ;
            tabout . 'CMATINCH'  . &iinterf = mic ;
            lpreums = faux ;
         'SINON' ;
            tabout . 'INTERFACE' . &iinterf = 'ET'
               (tabout . 'INTERFACE' . &iinterf) esli ;
            tabout . 'CCONINCH'  . &iinterf = 'ET'
               (tabout . 'CCONINCH'  . &iinterf) cco ;
            tabout . 'CMATCHIN'  . &iinterf = 'ET' 
               (tabout . 'CMATCHIN'  . &iinterf) mci ;
            tabout . 'CMATINCH'  . &iinterf = 'ET'
               (tabout . 'CMATINCH' . &iinterf) mic ;
         'FINSI' ;
      'FIN' isli ;
   'FIN' ih ;
'FIN' iinterf ;                            
*
* Treatment of 'FUEL' and 'STRUCTURE'
*
sother = tabin . 'FUEL' ;
vother = 'VOLUME' sother 'TRAN' nh (0. 0. H) ;
tabout . 'FUEL' = vother ;
tabout . 'FUEL2' = 'VOLUME' sother 'TRAN' 1 (0. 0. H) ;
'SI' ('EXISTE' tabin 'STRUCTURE') ;
   sother = tabin . 'STRUCTURE' ;
   vother = 'VOLUME' sother 'TRAN' nh (0. 0. H) ;
   tabout . 'STRUCTURE' = vother ;
   tabout . 'STRUCT2'   = 'VOLUME' sother 'TRAN' 1 (0. 0. H) ;
'FINSI' ;   
*
* Some eliminations
*
tinter = @STBL (tabout . 'INTERFACE') ;
tother = tabout . 'FUEL' ;
'SI' ('EXISTE' tabout 'STRUCTURE') ;
   tother = 'ET' tother (tabout . 'STRUCTURE') ;
'FINSI' ;   
'ELIMINATION' ('ET' tinter tother) 1.D-6 ;
*
* Second part : tabgeo
*
tabgeo = 'TABLE' ;
*
* Build the global meshes
*
*  Structure & Combustible
mtcb   = tabout . 'FUEL' ;
amtcb  = 'ARETE' (tabout . 'FUEL2') ;
'SI' ('EXISTE' tabout 'STRUCTURE') ;
   mtcbst  = 'ET' mtcb (tabout . 'STRUCTURE') ;
   amtcbst = 'ET' amtcb ('ARETE' (tabout . 'STRUCT2')) ;
'SINON' ;
   mtcbst  = mtcb ;
   amtcbst = amtcb ;
'FINSI' ;   
*  Channels
*mthe = @STBL (tabout . 'CHANNEL') ;
tmthe = tabout . 'CHANNEL' ;
sthe =  @STBL (tabin  . 'CHANNEL') ;
amthe = 'TRANSLATION' ('CONTOUR' sthe) 1 (0. 0. H) ;
*  Line in channels
nchan = 'DIME' (tabin . 'CHANNEL') ;
tlchan = 'TABLE' ;
tpechan = 'TABLE' ;
tpschan = 'TABLE' ;
'REPETER' ichan nchan ;
   selem1 = 'ELEM' (tabin . 'CHANNEL' . &ichan) 1 ;
   po1    = 'POIN' ('CONTOUR' selem1) 1 ;
   po2    =  'PLUS' po1 (0. 0. H) ;
   lighe  = 'DROIT' nh po1 po2 ;
   tlchan . &ichan  = lighe ;
   tpechan . &ichan = po1 ;
   tpschan . &ichan = po2 ;
'FIN' ichan ;   
*  Interfaces
tmtif = tabout . 'INTERFACE' ;
mtif = @STBL (tabout . 'INTERFACE') ;
* Blocked interfaces
lblock = tabin . 'BLOCKED' ;
dblock = 'DIME' lblock ;
logb =  ('>' dblock 0) ;
'SI' logb ;
   tchan = 'TABLE' ;
   'REPETER' iblock dblock ;
      iib = 'EXTRAIRE' lblock &iblock ;
      APPEND tchan 'mtifb' (tabout . 'INTERFACE' . iib) ;
   'FIN' iblock ;
   mtifb = tchan . 'mtifb' ;      
'FINSI' ;
*  Coupling
cfc = @STBL (tabout . 'CCONINCH') ;
mcf = @STBL (tabout . 'CMATCHIN') ;
mfc = @STBL (tabout . 'CMATINCH') ;
mcf = 'CHANGER' mcf 'INCO' ('MOTS' 'T') ('MOTS' 'SCAL')
                           ('MOTS' 'Q') ('MOTS' 'SCAL') ;
mfc = 'CHANGER' mfc 'INCO' ('MOTS' 'T') ('MOTS' 'SCAL')
                           ('MOTS' 'Q') ('MOTS' 'SCAL') ;
*  Generate the QUAF meshes
*   Channels
nhe = 'DIME' tmthe ;
_tmthe = 'TABLE' ;
'REPETER' ihe nhe ;
   _tmthe . &ihe = QUAFME (tmthe . &ihe) ;
'FIN' ihe ;
_mthe = @STBL _tmthe ;
*   Interface
nif = 'DIME' tmtif ;
_tmtif = 'TABLE' ;
'REPETER' iif nif ;
   _tmtif . &iif = QUAFME (tmtif . &iif) ;
'FIN' iif ;
_mtif = @STBL _tmtif ;
*   Other
 _mtcbst _mtcb _sthe =
   QUAFME mtcbst mtcb sthe ;
mcbt = _mtcbst 'ET' _mtcb 'ET' _mtif 'ET' cfc
       'ET' amtcb 'ET' amtcbst ;
'SI' logb ;
   _mtifb = QUAFME mtifb ;
   mcbt = 'ET' mcbt _mtifb ;
'FINSI' ;   
*  Elimination of points with same coordinates
'ELIMINATION' mcbt 1.D-6 ;
ttlchan = @STBL tlchan ;
'ELIMINATION' (_mthe 'ET' _sthe 'ET' cfc 'ET' amthe 'ET' ttlchan)
              1.D-6 ;
* Create the Navier-Stokes model objects
*  Channels
$tmthe = 'TABLE' ;
'REPETER' ihe nhe ;
   $tmthe . &ihe = MODNAV 'LINE' (_tmthe . &ihe) ;
'FIN' ihe ;
*  Interface
$tmtif = 'TABLE' ;
'REPETER' iif nif ;
   $tmtif . &iif = MODNAV 'LINE' (_tmtif . &iif) ;
'FIN' iif ;
$mtcbst $mtcb $mthe $mtif $sthe =
   MODNAV 'LINE' _mtcbst _mtcb _mthe _mtif _sthe ;
* Create the hydraulic diameter table 
tdhif = 'TABLE' ;
'REPETER' iif nif ;
   tdhif . &iif = 'KCHT' ($tmtif . &iif) 'SCAL' 'CENTRE'
                          (tabin . 'DH' .&iif) ;
'FIN' iif ;
dh = @STBL tdhif ;
*
* Store results
*
tabgeo . 'tabin'   = tabin   ;
tabgeo . 'H'       = H       ;
tabgeo . 'nh'      = nh      ;
tabgeo . '$mtcbst' = $mtcbst ;
tabgeo . '$mtcb'   = $mtcb   ;
tabgeo . '$tmthe'  = $tmthe   ;
tabgeo . '$mthe'   = $mthe   ;
tabgeo . '$sthe'   = $sthe   ;
tabgeo . '$mtif'   = $mtif   ;
tabgeo . 'amtcb'   = amtcb   ;
tabgeo . 'amtcbst' = amtcbst ;
tabgeo . 'amthe'   = amthe   ;
tabgeo . 'mcf'     = mcf     ;
tabgeo . 'mfc'     = mfc     ;
tabgeo . 'cfc'     = cfc     ;
'SI' logb ;
   $mtifb = MODNAV 'LINE' _mtifb ;
   tabgeo . '$mtifb' = $mtifb ;
'FINSI' ;
tabgeo . 'Dh' = dh ;
tabgeo . 'tlchan' = tlchan ;
tabgeo . 'tpechan' = tpechan ;
tabgeo . 'tpschan' = tpschan ;
'RESPRO' tabgeo ;
*
* End of procedure file GENMEMA
*
'FINPROC' ;
*ENDPROCEDUR genmema
*BEGINPROCEDUR geomhex1
************************************************************************
* NOM         : GEOMHEX1
* DESCRIPTION : 30° symmetry cell of an hexagonal geometry
*               in the x-y plane
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, ??/??/2004, version initiale
* HISTORIQUE : v1, ??/??/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMHEX1 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' pas*'FLOTTANT' ;
*
* Geometric quantities deduced from the one given above
*
q = '/' pas 2.D0 ;
R = '/' Dh 2.D0 ;
*
*  Geometric discretization parameters 
*  (number of elements)
*  nb (base) : number of elements for the line in (x-y) plane
*              with smallest length
*
nb = 7 ;
s30 = 'SIN' 30.D0 ;
c30 = 'COS' 30.D0 ;
t30 = '/' s30 c30 ;
* length of each line
lcer = ('*' ('/' PI 6.D0) R) ;
lpdia = '-' q R ;
lgdia = '-' ('/' q c30) R ;
lhex  = ('*' q t30) ;
* scaling based on shortest line
lbase = 'MINIMUM' ('PROG' lcer lpdia lgdia lhex) ;
* factors in order to have an almost regular mesh
fcer  = '/' lcer lbase ;
fpdia = '/' lpdia lbase ;
fgdia = '/' lgdia lbase ;
fhex  = '/' lhex lbase ;
* mesh
rbase = 'FLOTTANT' nb ;
ncer  = '*' rbase fcer ;
nhex  = '*' rbase fhex ;
npdia  = '*' rbase fpdia ;
ngdia  = '*' rbase fgdia ;
*
ncer = 'ENTIER' ('+' ncer 0.99D0) ;
nhex = 'ENTIER' ('+' nhex 0.99D0) ;
npdia = 'ENTIER' ('+' npdia 0.99D0) ;
ngdia = 'ENTIER' ('+' ngdia 0.99D0) ;
* Points definition for fuel
p0 = 0.D0 0.D0 0.D0 ;
p1 = R    0.D0 0.D0 ;
p2 = q    0.D0 0.D0 ;
p3 = q    ('*' q t30) 0.D0 ;
p4 = ('*' R c30) ('*' R s30) 0.D0 ;
* Lines definition for fuel
l1 = 'DROIT' npdia p1 p2 ;
l2 = 'DROIT' nhex  p2 p3 ;
l3 = 'DROIT' ngdia p3 p4 ;
l4 = 'CERCLE' ncer p4 p0 p1 ;
* Surfaces definition for fuel
ctn  = l1 'ET' l2 'ET' l3 'ET' l4 ;
stcb = 'SURFACE' ctn 'PLANE' ;
* Points and surface definitions for helium (an isocele triangle with
* surface equal to the corresponding circular sector
Rp = '*' R ('**' ('/' PI 3.D0) 0.5D0) ;
p5 = Rp   0.D0 0.D0 ;
p6 = ('*' Rp c30) ('*' Rp s30) 0.D0 ;
sthe = 'MANUEL' 'TRI3' p0 p5 p6 ;
*
* Output results in a table suitable for GENMEMA
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
*
tabin . 'INTERFACE' . 1 = l4 ;
tabin . 'CHANNEL'   . 1 = sthe ;
tabin . 'FUEL'          = stcb ;
'RESPRO' tabin ;
*
* End of procedure file GEOMHEX1
*
'FINPROC' ;
*ENDPROCEDUR geomhex1
*BEGINPROCEDUR geomhex2
************************************************************************
* NOM         : GEOMHEX2
* DESCRIPTION : Same as GEOMHEX1 but larger symmetry cell
*               in the x-y plane
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 18/11/2004, version initiale
* HISTORIQUE : v1, 18/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMHEX2 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' pas*'FLOTTANT' ;
*
* Geometric quantities deduced from the one given above
*
q = '/' pas 2.D0 ;
R = '/' Dh 2.D0 ;
*
*  Geometric discretization parameters 
*  (number of elements)
*  nb (base) : number of elements for the line in (x-y) plane
*              with smallest length
*
nb = 7 ;
s30 = 'SIN' 30.D0 ;
c30 = 'COS' 30.D0 ;
t30 = '/' s30 c30 ;
* length of each line
lcera = ('*' ('/' PI 6.D0) R) ;
lcerb = ('*' ('/' PI 2.D0) R) ;
lpdia = '-' pas Dh ;
lgdia = '-' ('/' pas c30) R ;
lhex  = '-' ('*' pas t30) R ;
* scaling based on shortest line
lbase = 'MINIMUM' ('PROG' lcera lcerb lpdia lgdia lhex) ;
* factors in order to have an almost regular mesh
fcera = '/' lcera lbase ;
fcerb = '/' lcerb lbase ;
fpdia = '/' lpdia lbase ;
fgdia = '/' lgdia lbase ;
fhex  = '/' lhex lbase ;
* mesh
rbase = 'FLOTTANT' nb ;
ncera  = '*' rbase fcera ;
ncerb  = '*' rbase fcerb ;
nhex  = '*' rbase fhex ;
npdia  = '*' rbase fpdia ;
ngdia  = '*' rbase fgdia ;
*
ncera = 'ENTIER' ('+' ncera 0.99D0) ;
ncerb = 'ENTIER' ('+' ncerb 0.99D0) ;
nhex = 'ENTIER' ('+' nhex 0.99D0) ;
npdia = 'ENTIER' ('+' npdia 0.99D0) ;
ngdia = 'ENTIER' ('+' ngdia 0.99D0) ;
* Points definition for fuel
p0 = 0.D0 0.D0 0.D0 ;
p1 = R    0.D0 0.D0 ;
p2 = ('-' pas R) 0.D0 0.D0 ;
p3 = pas  0.D0 0.D0 ;
p4 = pas  R 0.D0    ;
p5 = pas  ('*' pas t30) 0.D0 ;
p6 = ('*' R c30) ('*' R s30) 0.D0 ;
* Lines definition for fuel
l1 = 'DROIT' npdia p1 p2 ;
l2 = 'CERCLE' ncerb p2 p3 p4 ;
l3 = 'DROIT' nhex  p4 p5 ;
l4 = 'DROIT' ngdia p5 p6 ;
l5 = 'CERCLE' ncera p6 p0 p1 ;
* Surfaces definition for fuel
ctn  = l1 'ET' l2 'ET' l3 'ET' l4 'ET' l5 ;
stcb = 'SURFACE' ctn 'PLANE' ;
* Points and surface definitions for helium (two isocele triangles with
* surface equal to the corresponding circular sector
Rpa = '*' R ('**' ('/' PI 3.D0) 0.5D0) ;
p7 = Rpa   0.D0  0.D0 ;
p8 = ('*' Rpa c30) ('*' Rpa s30) 0.D0 ;
sthea = 'MANUEL' 'TRI3' p0 p7 p8 ;
Rpb = '*' R ('**' ('/' PI 2.D0) 0.5D0) ;
p9  = ('-' pas Rpb) 0.D0 0.D0 ;
p10 = pas Rpb 0.D0 ;
stheb = 'MANUEL' 'TRI3' p9 p3 p10 ;
*
* Output results in a table suitable for GENMEMA
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
*
tabin . 'INTERFACE' . 1 = l5 ;
tabin . 'CHANNEL'   . 1 = sthea ;
tabin . 'INTERFACE' . 2 = l2 ;
tabin . 'CHANNEL'   . 2 = stheb ;
tabin . 'FUEL'          = stcb ;
'RESPRO' tabin ;
*
* End of procedure file GEOMHEX2
*
'FINPROC' ;
*ENDPROCEDUR geomhex2
*BEGINPROCEDUR geompl21
************************************************************************
* NOM         : GEOMPL21
* DESCRIPTION : Type 1 symmetry cell for GEOMPLA2
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/11/2004, version initiale
* HISTORIQUE : v1, 23/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPL21 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' ef*'FLOTTANT' ;
'ARGUMENT' ep*'FLOTTANT' ;
'ARGUMENT' nchan*'ENTIER' ;
'ARGUMENT' nc2*'ENTIER' ;
'ARGUMENT' nf*'ENTIER' ;
'ARGUMENT' np*'ENTIER' ;
*
'SI' ('NEG' (MODULO nchan 2) 1) ;
   cherr = 'CHAINE' 'nchan should be odd' ;
'FINSI' ;   
*
* Geometric quantities deduced from the one given above
*
ec  = '/' Dh 2.D0 ;
ec2 = '/' ec 2 ;
nplate = '+' nchan 1 ;
L2 = '+' ('*' nplate ep) ('*' nchan ec) '+' ('*' ef 2) ;
L4 = '/' L2 2.D0 ;
*
* Discretisation
* 
nplate2 = '/' nplate 2 ;
nc = '*' nc2 2 ;
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
*
* Part1 : Lines
*
p0 = 0. 0. 0. ; 
p1 = 0. ('*' ef -1.D0) 0. ;
lcor = 'DROIT' nf p0 p1 ;
tablig = 'TABLE' ;
bp = p1 ;
'REPETER' ipl nplate2 ;
   p2 = 'PLUS' bp (0. ('*' ep -1.D0) 0.) ;
   APPEND tablig 'LIG' ('DROIT' bp p2 np) ;
   bp = p2 ;
* The last one is an half channel
   'SI' ('NEG' &ipl nplate2) ;   
      p2 = 'PLUS' bp (0. ('*' ec -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc) ;
      bp = p2 ;
   'SINON' ;      
      p2 = 'PLUS' bp (0. ('*' ec2 -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc2) ;
      bp = p2 ;
   'FINSI' ;
'FIN' ipl ;
lcb = tablig . 'LIG' ;
p2  = 'PLUS' p0 bp ;
lch = 'DROIT' p1 p2 1 ;
*
* Part1 : left structure
*
bp = 0. 0. 0. ;
vt = ef 0. 0. ;
APPEND tabin 'STRUCTURE' ('TRANSLATION' (lcor 'ET' lcb) nf vt) ;
bp = 'PLUS' bp vt ;
*
* Loop on plates
*
'REPETER' iplate nplate ;
*  Structure part
   vt = ep 0. 0. ;
   lcort = 'PLUS' lcor bp ;
   APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort np vt) ;
* Fuel part
   lcbt = 'PLUS' lcb bp ;
   APPEND tabin 'FUEL'  ('TRANSLATION' lcbt np vt) ;
   lcbtt = 'PLUS' lcbt vt ;
   'SI' ('>' &iplate 1) ;
      APPEND (tabin . 'INTERFACE') ('-' iitf 1) lcbt ;
   'FINSI' ;      
   'SI' ('<' &iplate nplate) ;
      APPEND (tabin . 'INTERFACE') iitf lcbtt ;
   'FINSI' ;      
   bp = 'PLUS' bp vt ;
   'SI' ('<' &iplate nplate) ;
* Structure part 
      vt = ec 0. 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t   = 'PLUS' p1   bp ;
      p2t   = 'PLUS' p1t  vt ;
      APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort nc vt) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p1t p2t nc) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
      bp = 'PLUS' bp vt ;
   'FINSI' ;      
'FIN' iplate ;    
* Part1 : right structure
vt = ef 0. 0. ;
lcct = 'PLUS' ('ET' lcor lcb) bp ;
APPEND tabin 'STRUCTURE' ('TRANSLATION' lcct nf vt) ;
*
'RESPRO' tabin ;
*
* End of procedure file GEOMPL21
*
'FINPROC' ;
*ENDPROCEDUR geompl21
*BEGINPROCEDUR geompl22
************************************************************************
* NOM         : GEOMPL22
* DESCRIPTION : Type 2 symmetry cell for GEOMPLA2
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/11/2004, version initiale
* HISTORIQUE : v1, 23/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPL22 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' ef*'FLOTTANT' ;
'ARGUMENT' ep*'FLOTTANT' ;
'ARGUMENT' nchan*'ENTIER' ;
'ARGUMENT' nc2*'ENTIER' ;
'ARGUMENT' nf*'ENTIER' ;
'ARGUMENT' np*'ENTIER' ;
*
'SI' ('NEG' (MODULO nchan 2) 1) ;
   cherr = 'CHAINE' 'nchan should be odd' ;
'FINSI' ;   
*
* Geometric quantities deduced from the one given above
*
ec  = '/' Dh 2.D0 ;
ec2 = '/' ec 2 ;
nplate = '+' nchan 1 ;
L2 = '+' ('*' nplate ep) ('*' nchan ec) '+' ('*' ef 2) ;
L4 = '/' L2 2.D0 ;
*
* Discretisation
* 
nplate2 = '/' nplate 2 ;
nc = '*' nc2 2 ;
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
*
* Part1 : Lines
*
p0 = 0. 0. 0. ; 
p1 = 0. ('*' ef -1.D0) 0. ;
lcor = 'DROIT' nf p0 p1 ;
tablig = 'TABLE' ;
bp = p1 ;
'REPETER' ipl nplate2 ;
   p2 = 'PLUS' bp (0. ('*' ep -1.D0) 0.) ;
   APPEND tablig 'LIG' ('DROIT' bp p2 np) ;
   bp = p2 ;
* The last one is an half channel
   'SI' ('NEG' &ipl nplate2) ;   
      p2 = 'PLUS' bp (0. ('*' ec -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc) ;
      bp = p2 ;
   'SINON' ;      
      p2 = 'PLUS' bp (0. ('*' ec2 -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc2) ;
      bp = p2 ;
   'FINSI' ;
'FIN' ipl ;
lcb = tablig . 'LIG' ;
p2  = 'PLUS' p0 bp ;
lch = 'DROIT' p1 p2 1 ;
*
* Part1 : left structure
*
bp = 0. 0. 0. ;
vt = ef 0. 0. ;
APPEND tabin 'STRUCTURE' ('TRANSLATION' (lcor 'ET' lcb) nf vt) ;
bp = 'PLUS' bp vt ;
*
* Loop on plates
*
'REPETER' iplate nplate2 ;
*  Structure part
   vt = ep 0. 0. ;
   lcort = 'PLUS' lcor bp ;
   APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort np vt) ;
* Fuel part
   lcbt = 'PLUS' lcb bp ;
   APPEND tabin 'FUEL'  ('TRANSLATION' lcbt np vt) ;
   lcbtt = 'PLUS' lcbt vt ;
   'SI' ('>' &iplate 1) ;
      APPEND (tabin . 'INTERFACE') ('-' iitf 1) lcbt ;
   'FINSI' ;      
   APPEND (tabin . 'INTERFACE') iitf lcbtt ;
   bp = 'PLUS' bp vt ;
   'SI' ('<' &iplate nplate2) ;
* Structure part 
      vt = ec 0. 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t   = 'PLUS' p1   bp ;
      p2t   = 'PLUS' p1t  vt ;
      APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort nc vt) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p1t p2t nc) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
      bp = 'PLUS' bp vt ;
* The last one is a half channel      
   'SINON' ;      
* Structure part 
      vt = ec2 0. 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t   = 'PLUS' p1   bp ;
      p2t   = 'PLUS' p1t  vt ;
      APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort nc2 vt) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p1t p2t nc2) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
   'FINSI' ;      
'FIN' iplate ;
*
'RESPRO' tabin ;
*
* End of procedure file GEOMPL22
*
'FINPROC' ;
*ENDPROCEDUR geompl22
*BEGINPROCEDUR geompl23
************************************************************************
* NOM         : GEOMPL23
* DESCRIPTION : Type 3 symmetry cell for GEOMPLA2
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/11/2004, version initiale
* HISTORIQUE : v1, 23/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPL23 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' ef*'FLOTTANT' ;
'ARGUMENT' ep*'FLOTTANT' ;
'ARGUMENT' nchan*'ENTIER' ;
'ARGUMENT' nc2*'ENTIER' ;
'ARGUMENT' nf*'ENTIER' ;
'ARGUMENT' np*'ENTIER' ;
*
'SI' ('NEG' (MODULO nchan 2) 1) ;
   cherr = 'CHAINE' 'nchan should be odd' ;
'FINSI' ;   
*
* Geometric quantities deduced from the one given above
*
ec  = '/' Dh 2.D0 ;
ec2 = '/' ec 2 ;
nplate = '+' nchan 1 ;
L2 = '+' ('*' nplate ep) ('*' nchan ec) '+' ('*' ef 2) ;
L4 = '/' L2 2.D0 ;
*
* Discretisation
* 
nplate2 = '/' nplate 2 ;
nc = '*' nc2 2 ;
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
*
* Part1 : Lines
*
p0 = 0. 0. 0. ; 
p1 = ef 0. 0. ;
lcorg = 'DROIT' nf p0 p1 ;
tablig = 'TABLE' ;
bp = p1 ;
'REPETER' iplate nplate ;
   p2 = 'PLUS' bp (ep 0. 0.) ;
   APPEND tablig 'LIG' ('DROIT' bp p2 np) ;
   bp = p2 ;
   'SI' ('<' &iplate nplate) ;   
      p2 = 'PLUS' bp (ec 0. 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc) ;
      bp = p2 ;
   'FINSI' ;
'FIN' iplate ;
lcb = tablig . 'LIG' ;
p2  = 'PLUS' p0 bp ;
lch = 'DROIT' p1 p2 1 ;
bp = p2 ;
p3 = 'PLUS' bp (ef 0. 0.) ;
lcord = 'DROIT' nf p2 p3 ;
lcor = 'ET' lcorg lcord ;
*
* Part1 : bottom structure
*
bp = 0. 0. 0. ;
vt = 0. ef 0. ;
APPEND tabin 'STRUCTURE' ('TRANSLATION' (lcor 'ET' lcb) nf vt) ;
bp = 'PLUS' bp vt ;
*
* Loop on plates
*
'REPETER' iplate nplate2 ;
*  Structure part
   vt = 0. ep 0. ;
   lcort = 'PLUS' lcor bp ;
   APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort np vt) ;
* Fuel part
   lcbt = 'PLUS' lcb bp ;
   APPEND tabin 'FUEL'  ('TRANSLATION' lcbt np vt) ;
   lcbtt = 'PLUS' lcbt vt ;
   'SI' ('>' &iplate 1) ;
      APPEND (tabin . 'INTERFACE') ('-' iitf 1) lcbt ;
   'FINSI' ;      
   APPEND (tabin . 'INTERFACE') iitf lcbtt ;
   bp = 'PLUS' bp vt ;
   'SI' ('<' &iplate nplate2) ;
* Structure part 
      vt = 0. ec 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t    = 'PLUS' p1   bp ;
      p1tt   = 'PLUS' p1t  vt ;
      p2t    = 'PLUS' p2   bp ;
      p2tt   = 'PLUS' p2t  vt ;
      APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort nc vt) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p1t p1tt nc) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p2t p2tt nc) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
      bp = 'PLUS' bp vt ;
* The last one is a half channel      
   'SINON' ;      
* Structure part 
      vt = 0. ec2 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t    = 'PLUS' p1   bp ;
      p1tt   = 'PLUS' p1t  vt ;
      p2t    = 'PLUS' p2   bp ;
      p2tt   = 'PLUS' p2t  vt ;
      APPEND tabin 'STRUCTURE' ('TRANSLATION' lcort nc2 vt) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p1t p1tt nc2) ;
      APPEND (tabin . 'INTERFACE') iitf ('DROIT' p2t p2tt nc2) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
   'FINSI' ;      
'FIN' iplate ;
*
'RESPRO' tabin ;
*
* End of procedure file GEOMPL23
*
'FINPROC' ;
*ENDPROCEDUR geompl23
*BEGINPROCEDUR geompla1
************************************************************************
* NOM         : GEOMPLA1
* DESCRIPTION : Mesh of a plate geometry : small symmetry cell
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 22/11/2004, version initiale
* HISTORIQUE : v1, 22/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPLA1 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' ef*'FLOTTANT' ;
'ARGUMENT' ep*'FLOTTANT' ;
'ARGUMENT' nchan*'ENTIER' ;
*
'SI' ('NEG' (MODULO nchan 2) 1) ;
   cherr = 'CHAINE' 'nchan should be odd' ;
'FINSI' ;   
*
* Geometric quantities deduced from the one given above
*
ec  = '/' Dh 2.D0 ;
ec2 = '/' ec 2 ;
nplate = '+' nchan 1 ;
L2 = '+' ('*' nplate ep) ('*' nchan ec) '+' ('*' ef 2) ;
L4 = '/' L2 2.D0 ;
*
* Discretisation
* 
nplate2 = '/' nplate 2 ;
nc2 = 1 ;
nc = '*' nc2 2 ;
nf = 2 ;
np = 2 ;
*
* Tables
*
tabin1 = 'TABLE' ;
tabin1 . 'INTERFACE' = 'TABLE' ;
tabin1 . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
*
* Part1 : Lines
*
p0 = 0. 0. 0. ; 
p1 = 0. ('*' ef -1.D0) 0. ;
lcor = 'DROIT' nf p0 p1 ;
tablig = 'TABLE' ;
bp = p1 ;
'REPETER' ipl nplate2 ;
   p2 = 'PLUS' bp (0. ('*' ep -1.D0) 0.) ;
   APPEND tablig 'LIG' ('DROIT' bp p2 np) ;
   bp = p2 ;
* The last one is an half channel
   'SI' ('NEG' &ipl nplate2) ;   
      p2 = 'PLUS' bp (0. ('*' ec -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc) ;
      bp = p2 ;
   'SINON' ;      
      p2 = 'PLUS' bp (0. ('*' ec2 -1.D0) 0.) ;
      APPEND tablig 'LIG' ('DROIT' bp p2 nc2) ;
      bp = p2 ;
   'FINSI' ;
'FIN' ipl ;
lcb = tablig . 'LIG' ;
p2  = 'PLUS' p0 bp ;
lch = 'DROIT' p1 p2 1 ;
*
* Part1 : left structure
*
bp = 0. 0. 0. ;
vt = ef 0. 0. ;
APPEND tabin1 'STRUCTURE' ('TRANSLATION' (lcor 'ET' lcb) nf vt) ;
bp = 'PLUS' bp vt ;
*
* Loop on plates
*
'REPETER' iplate nplate2 ;
*  Structure part
   vt = ep 0. 0. ;
   lcort = 'PLUS' lcor bp ;
   APPEND tabin1 'STRUCTURE' ('TRANSLATION' lcort np vt) ;
* Fuel part
   lcbt = 'PLUS' lcb bp ;
   APPEND tabin1 'FUEL'  ('TRANSLATION' lcbt np vt) ;
   lcbtt = 'PLUS' lcbt vt ;
   'SI' ('>' &iplate 1) ;
      APPEND (tabin1 . 'INTERFACE') ('-' iitf 1) lcbt ;
   'FINSI' ;      
   APPEND (tabin1 . 'INTERFACE') iitf lcbtt ;
   bp = 'PLUS' bp vt ;
   'SI' ('<' &iplate nplate2) ;
* Structure part 
      vt = ec 0. 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t   = 'PLUS' p1   bp ;
      p2t   = 'PLUS' p1t  vt ;
      APPEND tabin1 'STRUCTURE' ('TRANSLATION' lcort nc vt) ;
      APPEND (tabin1 . 'INTERFACE') iitf ('DROIT' p1t p2t nc) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin1 . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
      bp = 'PLUS' bp vt ;
* The last one is a half channel      
   'SINON' ;      
* Structure part 
      vt = ec2 0. 0. ;
      lcort = 'PLUS' lcor bp ;
      p1t   = 'PLUS' p1   bp ;
      p2t   = 'PLUS' p1t  vt ;
      APPEND tabin1 'STRUCTURE' ('TRANSLATION' lcort nc2 vt) ;
      APPEND (tabin1 . 'INTERFACE') iitf ('DROIT' p1t p2t nc2) ;
* Channel part
      lcht = 'PLUS' lch bp ;
      APPEND (tabin1 . 'CHANNEL') iitf ('TRANSLATION'  lcht 1 vt) ;
      iitf = '+' iitf 1 ;
   'FINSI' ;      
'FIN' iplate ;
nitf = ('-' iitf 1) ;
*
* Perform rotations
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
pr = 0. 0. 1. ;
'REPETER' bclrot 4 ;
   arot = '*' 90. ('-' &bclrot 1) ;
   append tabin 'STRUCTURE'
      ('TOURNER' (tabin1 . 'STRUCTURE') arot p0 pr) ;
   append tabin 'FUEL'
      ('TOURNER' (tabin1 . 'FUEL') arot p0 pr) ;
   'REPETER' bitf nitf ;
      append (tabin . 'INTERFACE') iitf
         ('TOURNER' (tabin1 . 'INTERFACE' . &bitf) arot p0 pr) ;
      append (tabin . 'CHANNEL') iitf
         ('TOURNER' (tabin1 . 'CHANNEL' . &bitf) arot p0 pr) ;
      iitf = '+' iitf 1 ;
   'FIN' bitf ;
'FIN' bclrot ;            
*
'RESPRO' tabin ;
*
* End of procedure file GEOMPLA1
*
'FINPROC' ;
*ENDPROCEDUR geompla1
*BEGINPROCEDUR geompla2
************************************************************************
* NOM         : GEOMPLA2
* DESCRIPTION : Mesh of a plate geometry
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 22/11/2004, version initiale
* HISTORIQUE : v1, 22/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPLA2 ;
'ARGUMENT' Dh*'FLOTTANT' ;
'ARGUMENT' ef*'FLOTTANT' ;
'ARGUMENT' ep*'FLOTTANT' ;
'ARGUMENT' nchan*'ENTIER' ;
*
'SI' ('NEG' (MODULO nchan 2) 1) ;
   cherr = 'CHAINE' 'nchan should be odd' ;
'FINSI' ;   
*
* Geometric quantities deduced from the one given above
*
ec  = '/' Dh 2.D0 ;
ec2 = '/' ec 2 ;
nplate = '+' nchan 1 ;
L2 = '+' ('*' nplate ep) ('*' nchan ec) '+' ('*' ef 2) ;
mL2 = '*' L2 -1.D0 ;
L4 = '/' L2 2.D0 ;
*
* Discretization
*
nc2 = 1 ;
nf  = 2 ;
np  = 2 ;
*
* Type 1 cells 
*
tabin1 = GEOMPL21 Dh ef ep nchan nc2 nf np ;
*
* Type 2 cells
*
tabin2 = GEOMPL22 Dh ef ep nchan nc2 nf np ;
*
* Type 3 cells
*
tabin3 = GEOMPL23 Dh ef ep nchan nc2 nf np ;
*
* Perform rotations and translations to generate total mesh
*
tabin = 'TABLE' ;
tabin . 'INTERFACE' = 'TABLE' ;
tabin . 'CHANNEL'   = 'TABLE' ;
iitf = 1 ;
*
* part1 : Type 1 cells
*
nitf = 'DIME' (tabin1 . 'INTERFACE') ;
append tabin 'STRUCTURE' (tabin1 . 'STRUCTURE') ;
append tabin 'FUEL'      (tabin1 . 'FUEL') ;
'REPETER' bitf nitf ;
   append (tabin . 'INTERFACE') iitf
          (tabin1 . 'INTERFACE' . &bitf) ;
   append (tabin . 'CHANNEL') iitf
          (tabin1 . 'CHANNEL' . &bitf) ;
   iitf = '+' iitf 1 ;
'FIN' bitf ;
*
* part2 : two Type2 cells
*
'REPETER' btype2 2 ;
   'SI' ('EGA' &btype2 1) ;
      arot = 90.D0 ;
      vtra = (L2 0.D0 0.D0) ;
      lsym = VRAI ;
   'FINSI' ;    
   'SI' ('EGA' &btype2 2) ;
      arot = 180.D0 ;
      vtra = (L2 0.D0 0.D0) ;
      lsym = VRAI ;
   'FINSI' ;    
   nitf = 'DIME' (tabin2 . 'INTERFACE') ;
   append tabin 'STRUCTURE'
      (SYTOPL (tabin2 . 'STRUCTURE') arot vtra lsym) ;
   append tabin 'FUEL'
      (SYTOPL (tabin2 . 'FUEL') arot vtra lsym) ;
   'REPETER' bitf nitf ;
      append (tabin . 'INTERFACE') iitf
         (SYTOPL (tabin2 . 'INTERFACE' . &bitf) arot vtra lsym) ;
      append (tabin . 'CHANNEL') iitf
         (SYTOPL (tabin2 . 'CHANNEL' . &bitf) arot vtra lsym) ;
      iitf = '+' iitf 1 ;
   'FIN' bitf ;
'FIN' btype2 ;   
*
* part3 : Type 1 cells
*
nitf = 'DIME' (tabin3 . 'INTERFACE') ;
append tabin 'STRUCTURE' (tabin3 . 'STRUCTURE') ;
append tabin 'FUEL'      (tabin3 . 'FUEL') ;
'REPETER' bitf nitf ;
   append (tabin . 'INTERFACE') iitf
          (tabin3 . 'INTERFACE' . &bitf) ;
   append (tabin . 'CHANNEL') iitf
          (tabin3 . 'CHANNEL' . &bitf) ;
   iitf = '+' iitf 1 ;
'FIN' bitf ;
*
* part4 : two Type2 cells
*
'REPETER' btype2 2 ;
   'SI' ('EGA' &btype2 1) ;
      arot = 180.D0 ;
      vtra = (0.D0 0.D0 0.D0) ;
      lsym = FAUX ;
   'FINSI' ;    
   'SI' ('EGA' &btype2 2) ;
      arot = 270.D0 ;
      vtra = (0.D0 0.D0 0.D0) ;
      lsym = FAUX ;
   'FINSI' ;    
   nitf = 'DIME' (tabin2 . 'INTERFACE') ;
   append tabin 'STRUCTURE'
      (SYTOPL (tabin2 . 'STRUCTURE') arot vtra lsym) ;
   append tabin 'FUEL'
      (SYTOPL (tabin2 . 'FUEL') arot vtra lsym) ;
   'REPETER' bitf nitf ;
      append (tabin . 'INTERFACE') iitf
         (SYTOPL (tabin2 . 'INTERFACE' . &bitf) arot vtra lsym) ;
      append (tabin . 'CHANNEL') iitf
         (SYTOPL (tabin2 . 'CHANNEL' . &bitf) arot vtra lsym) ;
      iitf = '+' iitf 1 ;
   'FIN' bitf ;
'FIN' btype2 ;   
*
'RESPRO' tabin ;
*
* End of procedure file GEOMPLA2
*
'FINPROC' ;
*ENDPROCEDUR geompla2
*BEGINPROCEDUR geomplh1
************************************************************************
* NOM         : GEOMPLH1
* DESCRIPTION : Géométrie hexagonale à plaques
*               Technical report DM2S/SFME/LTMF/RT/05-050/A
*               typgeo = 1 small losange cell
*               typgeo = 2 normal hexagonal cell
*               typgeo = 3 large two hexagonal cells
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 21/03/2005, version initiale
* HISTORIQUE : v1, 21/03/2005, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' GEOMPLH1 ;
'ARGUMENT' ept*'FLOTTANT' ;
'ARGUMENT' eps*'FLOTTANT' ;
'ARGUMENT' epp*'FLOTTANT' ;
'ARGUMENT' epg*'FLOTTANT' ;
'ARGUMENT' npp*'ENTIER' ;
'ARGUMENT' typgeo*'ENTIER' ;
*
* On commence par projeter toutes les quantités sur une génératrice
*
ff = '/' 2.D0 ('**' 3.D0 0.5D0) ;
l   = '*' ('/' ept 2.D0) ff ;
eps = '*' eps ff ;
epp = '*' epp ff ;
epg = '*' epg ff ;
eps2 = '/' eps 2.D0 ;
*
res = '-' l (eps2 '+' ('*' epp npp) '+' ('*' epg ('-' npp 1))
                  '+' eps) ;
epg2 = '/' res 2.D0 ;
*
* Discrétisation 
*
ns2 = 1 ;
*ns2 = 2 ;
ns  = '*' ns2 2 ;
ng  = 2 ;
ng2 = 'ENTIER' ('+' ('*' ng ('/' epg2 epg)) 0.5D0) ;
*'MESSAGE' ('CHAINE' 'ng2 = ' ng2) ;
*'MESSAGE' ('CHAINE' 'epg = ' epg) ;
*'MESSAGE' ('CHAINE' 'epg2 = ' epg2) ;
*'MESSAGE' ('CHAINE' 'epg '-' epg2  = ' ('-' epg epg2)) ;
*ng2 = 1 ;
*ng2 = 2 ;
np  = 3 ;
*ns2 = 3 ;
*ns  = 3 ;
*ng  = 3 ;
*ng2 = 3 ;
*np  = 3 ;
*
* Build the horizontal generator
*
itg = 0 ;
tabgen = 'TABLE' ;
bp  = 0.D0 0.D0 0.D0 ;
*  left structure
bpp = 'PLUS'  bp (eps2 0. 0.) ;
ss  = 'DROIT' bp ns2 bpp ;
bp  = bpp ;
itg = '+' itg 1 ;
tabgen . itg = 'TABLE' ;
tabgen . itg . 'TYPE' = 'CHAINE' 'ST' ;
tabgen . itg . 'SEG'  = ss ;
*  left gas channel
bpp = 'PLUS' bp (epg2 0. 0.) ;
ss  = 'DROIT' bp ng2 bpp ;
bp  = bpp ;
itg = '+' itg 1 ;
tabgen . itg = 'TABLE' ;
tabgen . itg . 'TYPE' = 'CHAINE' 'CH' ;
tabgen . itg . 'SEG'  = ss ;
*  plates and channel
'REPETER' ipp npp ;
   bpp = 'PLUS' bp (epp 0. 0.) ;
   ss  = 'DROIT' bp np bpp ;
   bp  = bpp ;
   itg = '+' itg 1 ;
   tabgen . itg = 'TABLE' ;
   tabgen . itg . 'TYPE' = 'CHAINE' 'FU' ;
   tabgen . itg . 'SEG'  = ss ;
   'SI' ('NEG' &ipp npp) ;
      bpp = 'PLUS' bp (epg 0. 0.) ;
      ss  = 'DROIT' bp ng bpp ;
      bp  = bpp ;
      itg = '+' itg 1 ;
      tabgen . itg = 'TABLE' ;
      tabgen . itg . 'TYPE' = 'CHAINE' 'CH' ;
      tabgen . itg . 'SEG'  = ss ;
   'FINSI' ;
'FIN' ipp ;   
*
*  right gas channel
bpp = 'PLUS' bp (epg2 0. 0.) ;
ss  = 'DROIT' bp ng2 bpp ;
bp  = bpp ;
itg = '+' itg 1 ;
tabgen . itg = 'TABLE' ;
tabgen . itg . 'TYPE' = 'CHAINE' 'CH' ;
tabgen . itg . 'SEG'  = ss ;
*  right structure
bpp = 'PLUS'  bp (eps 0. 0.) ;
ss  = 'DROIT' bp ns bpp ;
bp  = bpp ;
itg = '+' itg 1 ;
tabgen . itg = 'TABLE' ;
tabgen . itg . 'TYPE' = 'CHAINE' 'ST' ;
tabgen . itg . 'SEG'  = ss ;
*
* Build the vertical generators
*
prot1 = 0.D0 0.D0 0.D0 ;
prot2 = 0.D0 0.D0 1.D0 ;
arot = 120.D0 ;
tabtmp = 'TABLE' ;
'REPETER' iitg ('DIME' tabgen) ;
   titg = tabgen . &iitg ;
   'SI' ('EGA' (titg . 'TYPE') 'ST') ;
      APPEND tabtmp 'GENSTR' (titg . 'SEG') ;
   'SINON' ;      
      APPEND tabtmp 'GENFU' (titg . 'SEG') ;
   'FINSI' ;
'FIN' iitg ;
genstr  = tabtmp . 'GENSTR' ;   
genfu = tabtmp . 'GENFU' ;
*
genstr  = 'TOURNER' genstr  arot prot1 prot2 ;
genfu   = 'TOURNER' genfu   arot prot1 prot2 ;
gench   = 'DROIT' ('POIN' genfu 'INITIAL') 1 ('POIN' genfu 'FINAL') ;
*gent = 'ET' (tabtmp . 'GENSTR') (tabtmp . 'GENFU') ;
*'LISTE' genstr ;
*'LISTE' genfu ;
*'LISTE' gent ;
*strgen = 'COULEUR' (genstr 'GENERATRICE' gent) 'BLAN' ;
*fugen  = 'COULEUR' (genfu  'GENERATRICE' gent) 'ROUG' ;
*'OPTION' 'DIME' 2 ;
*'TRACER' ('ET' genstr ('COULEUR' gent 'ROUG')) ;
*'TRACER' fugen ;
*'TRACER' (fugen 'ET' strgen) ;
*
* Construire une cellule élémentaire dans tabin1
*
tabin1 = 'TABLE' ;
tabin1 . 'INTERFACE' = 'TABLE' ;
tabin1 . 'CHANNEL'   = 'TABLE' ;
tabin1 . 'DH'        = 'TABLE' ;
ich = 0 ;
bp = 0. 0. 0. ;
'REPETER' iitg ('DIME' tabgen) ;
   titg = tabgen . &iitg ;
   'SI' ('EGA' (titg . 'TYPE') 'ST') ;
      li = titg . 'SEG' ;
      su = ('PLUS' ('ET' genstr genfu) bp) 'GENERATRICE' li ;
      APPEND tabin1 'STRUCTURE' su ;
      bp = 'POIN' li 'FINAL' ;
   'FINSI' ;
   'SI' ('EGA' (titg . 'TYPE') 'CH') ;
      li  = titg . 'SEG' ;
      ct  = 'CONTOUR' (('PLUS' genfu bp) 'GENERATRICE' li) ;
      dh  = '/' ('*' ('MESURE' ct 'SURF') 4.D0) ('MESURE' ct) ;
*      'MESSAGE' ('CHAINE' 'Dh = ' dh) ;
      li2 = 'DROIT' ('POIN' li 'INITIAL') 1 ('POIN' li 'FINAL') ;
      su  = ('PLUS' gench bp) 'GENERATRICE' li2 ;
      ich = '+' ich 1 ;
      APPEND (tabin1 . 'INTERFACE') ich ct ;
      APPEND (tabin1 . 'CHANNEL')   ich su ;
      tabin1 . 'DH' . ich = dh ;
      su  = ('PLUS' genstr bp) 'GENERATRICE' li ;
      APPEND tabin1 'STRUCTURE' su ;
      bp = 'POIN' li 'FINAL' ;
   'FINSI' ;
   'SI' ('EGA' (titg . 'TYPE') 'FU') ;
      li  = titg . 'SEG' ;
      su  = ('PLUS' genfu bp) 'GENERATRICE' li ;
      APPEND tabin1 'FUEL' su ;
      su  = ('PLUS' genstr bp) 'GENERATRICE' li ;
      APPEND tabin1 'STRUCTURE' su ;
      bp = 'POIN' li 'FINAL' ;
   'FINSI' ;
'FIN' iitg ;
*
* Construire un bloc de trois cellules 
*
tabin2 = 'TABLE' ;
tabin2 . 'INTERFACE' = 'TABLE' ;
tabin2 . 'CHANNEL'   = 'TABLE' ;
tabin2 . 'DH'        = 'TABLE' ;
iitf = 0 ;
p0 = 0. 0. 0. ;
pr = 0. 0. 1. ;
'REPETER' bclrot 3 ;
   arot = '*' 120.D0 ('-' &bclrot 1) ;
   append tabin2 'STRUCTURE'
      ('TOURNER' (tabin1 . 'STRUCTURE') arot p0 pr) ;
   append tabin2 'FUEL'
      ('TOURNER' (tabin1 . 'FUEL') arot p0 pr) ;
   'REPETER' bich ich ;
      iitf = '+' iitf 1 ;
      append (tabin2 . 'INTERFACE') iitf
         ('TOURNER' (tabin1 . 'INTERFACE' . &bich) arot p0 pr) ;
      append (tabin2 . 'CHANNEL') iitf
         ('TOURNER' (tabin1 . 'CHANNEL' . &bich) arot p0 pr) ;
      tabin2 . 'DH' . iitf = tabin1 . 'DH' . &bich ;         
   'FIN' bich ;
'FIN' bclrot ;
*
* Construire un bloc de 2 hexagones
* 
tabin3 = 'TABLE' ;
tabin3 . 'INTERFACE' = 'TABLE' ;
tabin3 . 'CHANNEL'   = 'TABLE' ;
tabin3 . 'DH'        = 'TABLE' ;
nitf = iitf ;
iitf = 0 ;
lrot = '/' ('*' l 1.5D0) ('COS' 30.) ;
'REPETER' ibloc 2 ;
   'SI' ('EGA' &ibloc 1) ;
      ltra = 0. 0. 0. ;
   'SINON' ;
      arot = '+' 90.D0 ('*' 60.D0 ('-' &ibloc 2)) ;
      ltra = ('*' lrot ('COS' arot))  ('*' lrot ('SIN' arot)) 0. ;
   'FINSI' ;
   append tabin3 'STRUCTURE'
      ('PLUS' (tabin2 . 'STRUCTURE') ltra) ;
   append tabin3 'FUEL'
      ('PLUS' (tabin2 . 'FUEL') ltra) ;
   'REPETER' bitf nitf ;
      iitf = '+' iitf 1 ;
      append (tabin3 . 'INTERFACE') iitf
         ('PLUS' (tabin2 . 'INTERFACE' . &bitf) ltra) ;
      append (tabin3 . 'CHANNEL') iitf
         ('PLUS' (tabin2 . 'CHANNEL' . &bitf) ltra) ;
      tabin3 . 'DH' . iitf = tabin2 . 'DH' . &bitf ;         
   'FIN' bitf ;
'FIN' ibloc ;   
*
* Compute hydraulic diameter
*
'SI' ('EGA' typgeo 1) ;
   tabin = tabin1 ;
'FINSI' ;   
'SI' ('EGA' typgeo 2) ;
   tabin = tabin2 ;
'FINSI' ;   
'SI' ('EGA' typgeo 3) ;
   tabin = tabin3 ;
'FINSI' ;   
*'LISTE' (tabin . 'DH') ;
*fu = 'COULEUR' (tabin . 'FUEL') 'ROUG' ;
*st = 'COULEUR' (tabin . 'STRUCTURE') 'BLAN' ;
*ch = 'COULEUR' (@STBL (tabin . 'CHANNEL')) 'BLEU' ;
*it = 'COULEUR' (@STBL (tabin . 'INTERFACE')) 'JAUN' ;
*'OPTION' 'DIME' 2 ;
*'TRACER' (fu 'ET' st 'ET' ch) ;
*'TRACER' it ;
*'FIN' ;
*
*tabin = 'TABLE' ;
'RESPRO' tabin epg2 ;
*
* End of procedure file GEOMPLH1
*
'FINPROC' ;
*ENDPROCEDUR geomplh1
*BEGINPROCEDUR modnav
************************************************************************
* NOM         : MODNAV
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 04/06/2003, version initiale
* HISTORIQUE : v1, 04/06/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' MODNAV ;
'ARGUMENT' dd*'MOT' ;
'REPETER' bcl ;
   'ARGUMENT' mquaf/'MAILLAGE' ;
   'SI' ('EXISTE' mquaf) ;
      modn = 'MODELISER' mquaf 'NAVIER_STOKES' dd ;
      'RESPRO' modn ;                  
   'SINON' ;
      'QUITTER' bcl ;
   'FINSI' ;
'FIN' bcl ;
*
* End of procedure file MODNAV
*
'FINPROC' ;
*ENDPROCEDUR modnav
*BEGINPROCEDUR prpcb
************************************************************************
* NOM         : PRPCB
*-----------------------------------------------------------------------
*                Thermal conductivity of a CerCer fuel
*-----------------------------------------------------------------------
* Input : T ou TS : temperature (CHPOINT or FLOTTANT)
*                   (degree K)
*         Validity domaine : 500 to 1300 degree C
*         IRRAD : Irradiated fuel ?
* Output : LUPU : thermal conductivity of (U,Pu) same type as T
*          LSIC : thermal conductivity of SiC same type as T
*          LCB  : thermal conductivity of CerCer fuel same type as T
*                 (W.m-1.K-1)
*-----------------------------------------------------------------------
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : 
**********************************************************************
* VERSION    : v1.1, 06/10/2004 Test domaine de validité
* VERSION    : v1, 20/10/2003, version initiale
* HISTORIQUE : v1, 20/10/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
*
'DEBPROC' PRPCB ;
'ARGUMENT' irrad*'LOGIQUE' ;
'ARGUMENT' t/'CHPOINT' ;
'SI' ('EXISTE' t) ;
   typarg = 'MOT' 'CHPOINT' ;
'SINON' ;
   'ARGUMENT' t*'FLOTTANT' ;
   typarg = 'MOT' 'FLOTTANT' ;
'FINSI';
*
* Validity domain (in °C)
*
vdinfc = 499.D0 ;
vdsupc = 1301.D0 ;
*         PORO : Porosity (controled size)
*         BETA : Coefficient to take into account the porosity
*                in the Maxwell-Eucken law
*         FVOL : Volume fraction of (U,Pu)C inclusions in the SiC
*                matrix
*                 If irrad=true, we choose a
*         combrat (at%) combustion ratio of 10 at% for (U,PU)C
*         tirradc (°C)  and an irradiation temperature of
*                       1125°C for the SiC .
poro = 0.15D0 ;
beta = 2.D0 ;
fvol = 0.7D0 ;
combrat = 10.D0 ;
tirradc = 1125.D0 ;
*
* Coefficients for the correlations
*
* (U,Pu)C
c1 = 12.76D0 ;
c2 = 8.71D-3 ;
c3 = -1.88D-6 ;
* SiC
a = 42.58D0 ;
b = -1.5564D4 ;
c = 1.2977D7 ;
d = -1.8458D9 ;
* SiC irradié
e = 3.91112D-2 ;
f = 2.24732D-3 ;
*
'SI' ('EGA' typarg 'FLOTTANT') ;
   t1 = 1.D0 ;
'SINON' ;
   t = 'NOMC' 'SCAL' t ;
   tmail = 'EXTRAIRE'  t 'MAIL' ;
   t1 = 'MANUEL' 'CHPO' tmail 1 'SCAL' 1.D0 'NATURE' 'DISCRET' ;
'FINSI' ;
*
tc = '-' t ('*' t1 273.15D0) ;
*
* Test if temperature is in the validity range 
*
'SI' ('EGA' typarg 'FLOTTANT') ;
   mintc = tc ; maxtc = tc ;
'SINON' ;
   mintc = 'MINIMUM' tc ;
   maxtc = 'MAXIMUM' tc ;
'FINSI' ;
testval = 'ET' ('>' mintc vdinfc) ('<' maxtc vdsupc) ;
*
tc2 = '**' tc 2 ;
* (U,Pu)C non irradiated and 100% dense
lupu1 = '+' ('+' ('*' tc c2) ('*' tc2 c3))
               c1 ;
* (U,Pu)C non irradiated, porous
cpor = '/' ('-' 1.d0 poro) ('+' 1.d0 ('*' beta poro)) ;
lupu2 = '*' lupu1 cpor ;
* (U,Pu)C irradiated porous
'SI' irrad ;
   cirrad = ('-' 1.d0 ('*' 0.02d0 combrat)) ;
   lupu = '*' lupu2 cirrad ;
'SINON' ;
   lupu = lupu2 ;
'FINSI' ;
* SiC non irradiated and 100% dense
it = '/' t1 t ;
it2 = '**' it 2 ;
it3 = '*' it2 it ;
lsic1 = '+' ('+' ('*' it b)
                 ('+' ('*' it2 c) ('*' it3 d)))
            a ;
* SiC irradiated               
'SI' irrad ;
   cirrad = '*' ('EXP' ('*' tirradc f))
                e ;
   lsic = '*' lsic1 cirrad ;
'SINON' ;
   lsic = lsic1 ;                                  
'FINSI' ;
* CerCer
lmat  = lsic ;
lincl = lupu ;
lmat2 = '*' lmat 2.d0 ;
lmi = '-' lmat lincl ;
numer = '+' lincl
            ('+' lmat2
                 ('*' lmi ('*' -2.d0 fvol))) ;
denom = '+' lincl
            ('+' lmat2
                 ('*' lmi fvol)) ;
lcb = '*' lmat ('/' numer denom) ;
'RESPRO' lupu lsic lcb testval ;
*
* End of procedure file PRPCB
*
'FINPROC' ;
*ENDPROCEDUR prpcb
*BEGINPROCEDUR prphe
************************************************************************
* NOM         : PRPHE
*-----------------------------------------------------------------------
*               Thermal properties of Helium 4
*-----------------------------------------------------------------------
* Input : ptot : pressure (bars)
*         T    : temperature (K) (CHPOINT or FLOTTANT)
*
* Output : RHOHE : density (kg.m-3)
*          MUHE  : viscosity (kg.m-1.s-1)
*          LHE   : thermal conductivity (W.m-1.K-1)
*          CPHE  : specific heat (at constant pressure) (J.kg-1.K-1)
*-----------------------------------------------------------------------
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : 
**********************************************************************
* VERSION    : v1.1, 06/10/2004, test + simplification
* VERSION    : v1, 26/02/2003, version initiale
* HISTORIQUE : v1, 26/02/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' PRPHE ;
'ARGUMENT' ptot*'FLOTTANT' ;
'ARGUMENT' t/'CHPOINT' ;
'SI' ('EXISTE' t) ;
   typarg = 'MOT' 'CHPOINT' ;
'SINON' ;
   'ARGUMENT' t*'FLOTTANT' ;
   typarg = 'MOT' 'FLOTTANT' ;
'FINSI';
*
pref = 101325. ;
ppa = '*' ptot pref ;
*
* Validity domain
*
vdpinf = 1. ;
vdpsup = 100. ;
vdtinf = 273. ;
vdtsup = 1500. ;
* Perfect gas constant for helium
rhe = 2077.22 ;
cphe = 5193. ;
C1 = 9.489433E-04 ;
C2 = 9.528079E-04 ;
C3 = 3.420680E-02 ;
C4 = 2.739470E-03 ;
C5 = 9.409120E-04 ;
*
'SI' ('EGA' typarg 'FLOTTANT') ;
   t1 = 1.D0 ;
'SINON' ;
   t = 'NOMC' 'SCAL' t ;
   tmail = 'EXTRAIRE'  t 'MAIL' ;
   t1 = 'MANUEL' 'CHPO' tmail 1 'SCAL' 1.D0 'NATURE' 'DISCRET' ;
'FINSI' ;
* Test validity range 
*
minp = ptot ;
maxp = ptot ;
'SI' ('EGA' typarg 'FLOTTANT') ;
   mint = t ; maxt = t ;
'SINON' ;
   mint = 'MINIMUM' t ;
   maxt = 'MAXIMUM' t ;
'FINSI' ;
testval = 'ET' ('ET' ('>' mint vdtinf) ('<' maxt vdtsup))
               ('ET' ('>' minp vdpinf) ('<' maxp vdpsup))
 ;
*
b =     ('/' ('*' t1 c4) ('+' t1 ('*' t c5)))
    '+' ('/' ('*' t1 c2) ('-' t1 ('*' t c3)))
    '+' c1 ;
rhohe = '*' ('/' t1 ('+' ('*' t rhe) ('*' b ppa))) ppa ;
muhe  = '*' ('**' t 0.687) 3.953D-7 ;
lhe   = '*' ('**' t 0.701) 2.774D-3 ;
'RESPRO' rhohe muhe lhe cphe testval ;
*
* End of procedure file PRPHE
*
'FINPROC' ;
*ENDPROCEDUR prphe
*BEGINPROCEDUR quafme
************************************************************************
* NOM         : QUAFME
* DESCRIPTION :
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 04/06/2003, version initiale
* HISTORIQUE : v1, 04/06/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' QUAFME ;
'REPETER' bcl ;
   'ARGUMENT' mquad/'MAILLAGE' ;
   'SI' ('EXISTE' mquad) ;
      mquaf = 'CHANGER' mquad 'QUAF' ;
      'RESPRO' mquaf ;                  
   'SINON' ;
      'QUITTER' bcl ;
   'FINSI' ;
'FIN' bcl ;
*
* End of procedure file QUAFME
*
'FINPROC' ;
*ENDPROCEDUR quafme
*BEGINPROCEDUR summdat
************************************************************************
* NOM         : SUMMDAT
* DESCRIPTION : 
* SUMMDAT prints a summary of the datas.
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 17/11/2004, version initiale
* HISTORIQUE : v1, 17/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' SUMMDAT ;
'ARGUMENT' tabdat*'TABLE' ;
*
* Retrieve parameters from tables
*
tabgeo = tabdat . 'tabgeo' ;
tabin  = tabgeo . 'tabin'  ;
tabphy = tabdat . 'tabphy' ;
tabnum = tabdat . 'tabnum' ;
*
ikas = tabdat . 'ikas' ; 
*
lblock  = tabin . 'BLOCKED' ;
*
H       = tabgeo . 'H'       ;
$mtcbst = tabgeo . '$mtcbst' ;
$mthe   = tabgeo . '$mthe'   ;
* QUAF meshes
mtcbst = 'DOMA' $mtcbst 'MAILLAGE' ;
mthe   = 'DOMA' $mthe   'MAILLAGE' ;
*
tabphy = tabdat . 'tabphy' ;
* Interface
Dh = tabphy . 'Dh' ;
* Helium
* vhe   = tabphy . 'vhe'   ;
 qhe   = tabphy . 'qhe'   ;
 prhe  = tabphy . 'prhe'  ;
 theek = tabphy . 'theek' ;
 theec = '-' theek 273.15D0 ;
* compute bottom He speed
 rhohe muhe lhe cphe dum = PRPHE prhe theek ;
 vhe = '/' qhe rhohe ;
* Fuel 
 pvol  = tabphy . 'pvol'  ;
 pvar  = tabphy . 'pvar'  ;
 gamma = tabphy . 'gamma' ;
 irrad = tabphy . 'irrad' ;
 maxit  = tabnum . 'maxit'  ;
 rescvg = tabnum . 'rescvg' ;
 solvit = tabnum . 'solvit' ;
*
'MESSAGE' '**************' ;
'MESSAGE' ('CHAINE' 'Case ' ikas) ;
'SI' ('ET' ('>EG' ikas 1)  ('<EG' ikas 3)) ;
   chcore = 'CHAINE' 'Hexagonal core' ;
'FINSI' ;   
'SI' ('ET' ('>EG' ikas 4)  ('<EG' ikas 6)) ;
   chcore = 'CHAINE' 'Plate core' ;
'FINSI' ;   
'SI' ('ET' ('>EG' ikas 7)  ('<EG' ikas 29)) ;
   chcore = 'CHAINE' 'Hexagonal plate core' ;
'FINSI' ;   
'SI' ('>EG' ikas 30) ;
   chcore = 'CHAINE' 'Modified hexagonal plate core' ;
'FINSI' ;   
dlblock = 'DIME' lblock ;
'SI' ('EGA' dlblock 0) ;
   cblock = 'CHAINE' 'with no blocked channels' ;
'SINON' ;   
   cblock = 'CHAINE' 'with ' dlblock ' blocked channels :' ;
'FINSI' ;
'MESSAGE' ('CHAINE' chcore ' ' cblock) ;
'SI' ('NEG' dlblock 0) ;
   cnum = 'CHAINE' ' '  ;
   'REPETER' ilblock dlblock ;
      cnum = 'CHAINE' cnum ('EXTRAIRE' lblock &ilblock) ' ' ;
   'FIN' ilblock ;
   'MESSAGE' cnum ;
   pcflow= 'ENTIER' ('*' fblock 100.) ;
   'SI' ('>' pcflow 0) ;
      'MESSAGE' ('CHAINE' 'Residual flow rate = ' pcflow ' %') ;
   'SINON' ;      
      'MESSAGE' ('CHAINE' 'Residual flow rate = ' (formar pcflow 2)) ;
   'FINSI' ;
'FINSI' ;
*
* Geometry
*
'MESSAGE' '-----------' ;
'MESSAGE' 'Geometry :' ;
'MESSAGE' ('CHAINE' 'Height = ' (formar H 2) ' m') ;
mail = mtcbst 'ET' mthe ;
npomail = 'NBNO' mail ;
nelmail = 'NBEL' mail ;
'MESSAGE' ('CHAINE' 'Mesh : nb. points=' npomail
                    ' ; nb. elem=' nelmail) ;
*
* Physics
*
'MESSAGE' '-----------' ;
'MESSAGE' 'Physics :' ;
dhmin = 'MINIMUM' Dh ;
dhmax = 'MAXIMUM' Dh ;
'MESSAGE' ('CHAINE' 'Min hydraulic diameter = ' (formar dhmin 2) ' m') ;
'MESSAGE' ('CHAINE' 'Max hydraulic diameter = ' (formar dhmax 2) ' m') ;
'MESSAGE' ('CHAINE' 'He pressure            = '
                    (formar prhe 2) ' bar') ;
'MESSAGE' ('CHAINE' 'He flow rate          = ' (formar qhe  2)
                    ' kg.m-2.s-1') ;
'MESSAGE' ('CHAINE' 'Bottom He speed       = ' (formar vhe  2)
                    ' m.s-1') ;
'MESSAGE' ('CHAINE' 'Bottom He temp.       = ' (formar theec 2)
                    ' degrees C') ;
'MESSAGE' ('CHAINE' 'Volumetric core power = ' (formar pvol  2)
                                               ' W.m-3') ;
'SI' pvar ;
   chpvar = 'CHAINE'
        'Z-cosine power profile with peaking factor gamma = '
        (formar gamma 2) ;
'SINON' ;        
   chpvar = 'Z-constant power profile ' ;
'FINSI' ;   
'MESSAGE' chpvar ;
'SI' irrad ;
   chirr = 'The fuel is irradiated ' ;
'SINON' ;        
   chirr = 'The fuel is new ' ;
'FINSI' ;   
'MESSAGE' chirr ;
*
* Numerics
*
'MESSAGE' '-----------' ;
'MESSAGE' 'Numerics :' ;
'MESSAGE' ('CHAINE' 'Max. nb of non-linear iterations : ' maxit) ;
'MESSAGE' ('CHAINE' 'Max. temperature residual        : '
                    (formar rescvg 2)) ;
'SI' solvit ;
   chsol = 'CHAINE' 'Iterative linear solver' ;
'SINON' ;
   chsol = 'CHAINE' 'Direct linear solver' ;
'FINSI' ;
'MESSAGE' chsol ;   
'MESSAGE' ('CHAINE' '3D Thermics relaxation factor    : '
                    (formar omcbst 2)) ;
'MESSAGE' ('CHAINE' '1D Thermohydraulics rel. factor  : '
                    (formar omhe 2)) ;
'MESSAGE' '**************' ;
*
* End of procedure file SUMMDAT
*
'FINPROC' ;
*ENDPROCEDUR summdat
*BEGINPROCEDUR summres
************************************************************************
* NOM         : SUMMRES
* DESCRIPTION : 
* SUMMRES prints a summary of the results of the computation
*         it also does some validation tests (hence the return value).
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 17/11/2004, version initiale
* HISTORIQUE : v1, 17/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' SUMMRES ;
'ARGUMENT' tabres*'TABLE' ;
*
* Retrieve parameters from tables
*
tabdat = tabres . 'tabdat' ;
ikas   = tabdat . 'ikas' ;
tabgeo = tabdat . 'tabgeo' ;
tabin  = tabgeo . 'tabin' ;
H       = tabgeo . 'H'       ;
nh      = tabgeo . 'nh'      ;
$mtcbst = tabgeo . '$mtcbst' ;
$mtcb   = tabgeo . '$mtcb'   ;
$mthe   = tabgeo . '$mthe'   ;
$sthe   = tabgeo . '$sthe'   ;
$mtif   = tabgeo . '$mtif'   ;
* QUAF meshes
_mtcbst = 'DOMA' $mtcbst 'QUAF' ;
_mthe   = 'DOMA' $mthe   'QUAF' ;
mtcbst = 'DOMA' $mtcbst 'MAILLAGE' ;
mthe   = 'DOMA' $mthe   'MAILLAGE' ;
mtif   = 'DOMA' $mtif   'MAILLAGE' ;
*
tabphy = tabdat . 'tabphy' ;
prhe = tabphy . 'prhe' ;
*
tcpus = tabres . 'tcpus' ;
*
testerr = FAUX ;
'MESSAGE' '**************' ;
'MESSAGE' ('CHAINE' 'Case ' ikas) ;
mail = mtcbst 'ET' mthe ;
npomail = 'NBNO' mail ;
nelmail = 'NBEL' mail ;
'MESSAGE' ('CHAINE' 'nb. points=' npomail ' ; nb. elem=' nelmail) ;
'MESSAGE' ('CHAINE' 'CPU Time (s)=' tcpus) ;
*
* Verification of energy balance
*
'MESSAGE' '-----------' ;
'MESSAGE' 'Energy balance :' ;
*  Power in the fuel
pcb = tabres . 'PCB' ;
chvolcb = 'DOMA' $mtcb 'VOLUME' ;
pdegcb = 'MAXIMUM' ('RESULT' ('*' chvolcb pcb)) ;
*  Integrated flux on the channel boundaries
f0 = tabres . 'F0' ;
pdegif = 'MAXIMUM' ('RESULT' f0) ;
errpif = '*' (ERRREL pdegif pdegcb) 100.D0 ;
*  Power gained by helium..
the = tabres . 'THE' ;
qhe = tabres . 'QHE' ;
*    .. in each channels
nchan = 'DIME' (tabin . 'CHANNEL') ;
pgcan = 0.D0 ;
'REPETER' ichan nchan ;
   po1    = tabgeo . 'tpechan' . &ichan ;
   po2    = tabgeo . 'tpschan' . &ichan ;
   tent = 'EXTRAIRE' the 'SCAL' po1 ;
   tsor = 'EXTRAIRE' the 'SCAL' po2 ;
   qent = 'EXTRAIRE' qhe 'SCAL' po1 ;
   qsor = 'EXTRAIRE' qhe 'SCAL' po2 ;
   'SI' ('NEG' qent qsor) ;
      cherr = 'CHAINE' 'Débit pas constant dans le canal ' &ichan
                       ' ???' ;
      'ERREUR' cherr ;
   'FINSI' ;                             
* cp is supposed to be constant; this is ok.
* However we suppose h = rho cp T, which is dubious
* we should have a procedure to compute h by integration
   selem1 = 'ELEM' (tabin . 'CHANNEL' . &ichan) 1 ;
   she  = 'MESURE' selem1 ;
   rhe muhe lhe cphe dum = PRPHE prhe tent ;
*   qhe = tabres . 'QHE' ;
*   pdeghe = qhe '*' she '*' cphe '*' ('-' tsor tent) ;
   pdeghe = qent '*' she '*' cphe '*' ('-' tsor tent) ;
   pgcan = '+' pgcan pdeghe ;
'FIN' ichan ;
pdeghe = pgcan ;
errphe = '*' (ERRREL pdeghe pdegcb) 100.D0 ;
'MESSAGE' ('CHAINE' 'Fuel power                 = ' (formar pdegcb 2)
          ' W') ;
'MESSAGE' ('CHAINE' 'Flux on channel boundaries = ' (formar pdegif 2)
          ' W') ;
'MESSAGE' ('CHAINE' '                    errpif = ' (formar errpif 2)
                                          ' %') ;
'MESSAGE' ('CHAINE' 'Power gained by Helium     = ' (formar pdeghe 2)
          'W') ;
'MESSAGE' ('CHAINE' '                    errphe = ' (formar errphe 2)
                                          ' %') ;
*  % error (i.e. limit to 0.1% = 1.D-4 error)
testene1 = > errpif 1.D0 ;
testene2 = > errphe 1.D0 ;
'SI' ('OU' testene1 testene2) ;
   'MESSAGE' '!!Pb. energy conservation' ;
'FINSI' ;
testerr = testerr 'OU' testene1 'OU' testene2 ;
'SI' testerr ;
   cherr = 'CHAINE' 'Error on the energy conservation !' ;
   'ERREUR' cherr ;
'FINSI' ;
* MinMax Helium Exit Temperature Speed
'MESSAGE' '-----------' ;
'MESSAGE' 'Helium Results :' ;
the = tabres . 'THE' ;
uhe = 'EXCO' 'UZ' (tabres . 'UHE') ;
miu = 'MINIMUM' uhe ;
mau = 'MAXIMUM' uhe ;
mit = 'MINIMUM' the ;
mat = 'MAXIMUM' the ;
'MESSAGE' ('CHAINE' 'Min. He speed  = ' (formar miu 2) ' m.s-1') ;
'MESSAGE' ('CHAINE' 'Max. He speed  = ' (formar mau 2) ' m.s-1') ;
'MESSAGE' ('CHAINE' 'Min. He temp.  = ' (formar ('-' mit 273.15D0) 2)
              ' degrees C') ;
'MESSAGE' ('CHAINE' 'Max. He temp.  = ' (formar ('-' mat 273.15D0) 2)
              ' degrees C') ;
* MinMax Fuel temperature + locations
'MESSAGE' '-----------' ;
'MESSAGE' 'Fuel Results :' ;
tcb = tabres . 'TCBS' ;
nmaxloc = 4 ;
tcbmi = 'MINIMUM' tcb ;
tcbmi = '*' tcbmi 1.0001D0 ;
mtcbmi = tcb 'POIN' 'INFERIEUR' tcbmi ;
nmtcbmi = 'NBNO' mtcbmi ;
'MESSAGE' ('CHAINE' 'Min fuel temp. = ' (formar ('-' tcbmi 273.15D0) 2)
                    ' degres C') ;
'MESSAGE' ('CHAINE' 'Location(m)'/1 '  x'/15  '  y'/30   '  z'/45) ;
'REPETER' imaxloc ('MINIMUM' ('LECT' nmaxloc nmtcbmi)) ;
   poi = 'POIN' mtcbmi &imaxloc ;
   xp yp zp = 'COORDONNEE' poi ;
   cxp = formar xp 2 ;
   cyp = formar yp 2 ;
   czp = formar zp 2 ;
   'MESSAGE' ('CHAINE' cxp*20  cyp*35 czp*50) ;
'FIN' imaxloc ;
'SI' ('>' nmtcbmi nmaxloc) ;
   'MESSAGE' ('CHAINE' 'etc...'/20) ;
'FINSI' ;   
*
nmaxloc = 4 ;
tcbma = 'MAXIMUM' tcb ;
tcbma = '*' tcbma 0.9999D0 ;
mtcbma = tcb 'POIN' 'SUPERIEUR' tcbma ;
nmtcbma = 'NBNO' mtcbma ;
'MESSAGE' ('CHAINE' 'Max fuel temp. = ' (formar ('-' tcbma 273.15D0) 2)
                    ' degrees C') ;
'MESSAGE' ('CHAINE' 'Location(m)'/1 '  x'/15  '  y'/30   '  z'/45) ;
'REPETER' imaxloc ('MINIMUM' ('LECT' nmaxloc nmtcbma)) ;
   poi = 'POIN' mtcbma &imaxloc ;
   xp yp zp = 'COORDONNEE' poi ;
   cxp = formar xp 2 ;
   cyp = formar yp 2 ;
   czp = formar zp 2 ;
   'MESSAGE' ('CHAINE' cxp*20  cyp*35 czp*50) ;
'FIN' imaxloc ;
'SI' ('>' nmtcbma nmaxloc) ;
   'MESSAGE' ('CHAINE' 'etc...'/20) ;
'FINSI' ;   
'MESSAGE' '**************' ;
*
* End of procedure file SUMMRES
*
'FINPROC' ;
*ENDPROCEDUR summres
*BEGINPROCEDUR sytopl
************************************************************************
* NOM         : SYTOPL
* DESCRIPTION : eventual symmetry + rotation + translation
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 23/11/2004, version initiale
* HISTORIQUE : v1, 23/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' SYTOPL ;
'ARGUMENT' mail*'MAILLAGE' ;
'ARGUMENT' arot*'FLOTTANT' ;
'ARGUMENT' vtra*'POINT' ;
'ARGUMENT' lsym*'LOGIQUE' ;
p0 = 0. 0. 0. ;
p1 = 0. 1. 0. ;
pr = 0. 0. 1. ;
'SI' lsym ;
   mail = 'SYMETRIE' mail 'DROIT' p0 p1 ;
'FINSI' ;
mail3 = 'TOURNER' mail arot p0 pr ;
mail2 = 'PLUS' mail3 vtra ;
'RESPRO' mail2 ;
*
* End of procedure file SYTOPL
*
'FINPROC' ;
*ENDPROCEDUR sytopl
*BEGINPROCEDUR tracchml
************************************************************************
* NOM         : TRACCHML
* DESCRIPTION : Trace un CHPOINT défini sur les centres des éléments
*               (valeur constante par élément) avec titre optionnel
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 12/03/2003, version initiale
* HISTORIQUE : v1, 12/03/2003, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' TRACCHML ;
'ARGUMENT' chml*'CHPOINT ' ;
'ARGUMENT' $mt*'MMODEL  ' ;
'ARGUMENT' tit*'MOT     ' ;
'ARGUMENT' mt2/'MAILLAGE' ;
'ARGUMENT' foeil/'POINT   ' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
*
rescal = 'KCHA' $mt chml 'CHAM' ;
mt = 'DOMA' $mt 'MAILLAGE' ;
'SI' ('NON' ('EXISTE' foeil)) ;
   foeil = (2.D0 -3.D0 0.7D0) ;
'FINSI' ;
oeil = CALCOEIL mt foeil ;
'SI' ('NON' ('EXISTE' lnclk)) ;
   lnclk = FAUX ;
'FINSI' ;   
modbid = 'MODELISER' ('DOMA' $mt 'MAILLAGE') 'THERMIQUE' ;
'SI' ('EXISTE' mt2) ;
   'SI' lnclk ;
      'TRACER' oeil 'CACH' rescal modbid mt2 'TITR' tit nbisov 'NCLK' ;
   'SINON' ;
      'TRACER' oeil 'CACH' rescal modbid mt2 'TITR' tit nbisov ;
   'FINSI' ;      
'SINON' ;
   'SI' lnclk ;
      'TRACER' oeil 'CACH' rescal modbid mt 'TITR' tit nbisov 'NCLK' ;
   'SINON' ;      
      'TRACER' oeil 'CACH' rescal modbid mt 'TITR' tit nbisov ;
   'FINSI' ;      
'FINSI' ;
*
* End of procedure file TRACCHML
*
'FINPROC' ;
*ENDPROCEDUR tracchml
*BEGINPROCEDUR tracchpo
************************************************************************
* NOM         : TRACCHPO
* DESCRIPTION : Tracé d'un chpoint avec titre optionnel.
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 14/10/2002, version initiale
* HISTORIQUE : v1, 14/10/2002, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' TRACCHPO ;
'ARGUMENT' pn*'CHPOINT ' ;
'ARGUMENT' mt*'MAILLAGE' ;
'ARGUMENT' mt2/'MAILLAGE' ;
'ARGUMENT' tit*'MOT     ' ;
'ARGUMENT' foeil/'POINT   ' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
rescal = pn ;
'SI' ('NON' ('EXISTE' foeil)) ;
   foeil = (2.D0 -3.D0 0.7D0) ;
'FINSI' ;
oeil = CALCOEIL mt foeil ;
'SI' ('NON' ('EXISTE' lnclk)) ;
   lnclk = FAUX ;
'FINSI' ;   
'SI' ('EXISTE' mt2) ;
   'SI' lnclk ;
      'TRACER' oeil 'CACH' rescal mt mt2 'TITR' tit nbisov 'NCLK' ;
   'SINON' ;      
      'TRACER' oeil 'CACH' rescal mt mt2 'TITR' tit nbisov ;
   'FINSI' ;      
'SINON' ;
   'SI' lnclk ;
      'TRACER' oeil 'CACH' rescal mt mt 'TITR' tit nbisov 'NCLK' ;
   'SINON' ;      
      'TRACER' oeil 'CACH' rescal mt mt 'TITR' tit nbisov ;
   'FINSI' ;      
'FINSI' ;
*
* End of procedure file TRACCHPO
*
'FINPROC' ;
*ENDPROCEDUR tracchpo
*BEGINPROCEDUR tracmesh
************************************************************************
* NOM         : TRACMESH
* DESCRIPTION : Tracé d'un maillage
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 16/11/2004, version initiale
* HISTORIQUE : v1, 16/11/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
* Prière de PRENDRE LE TEMPS de compléter les commentaires
* en cas de modification de ce sous-programme afin de faciliter
* la maintenance !
************************************************************************
*
*
'DEBPROC' TRACMESH ;
'ARGUMENT' mt*'MAILLAGE' ;
'ARGUMENT' tit*'MOT' ;
'ARGUMENT' foeil/'POINT   ' ;
'ARGUMENT' lnclk/'LOGIQUE' ;
*
'SI' ('NON' ('EXISTE' foeil)) ;
   foeil = (2.D0 -3.D0 0.7D0) ;
'FINSI' ;
oeil = CALCOEIL mt foeil ;
'SI' ('NON' ('EXISTE' lnclk)) ;
   lnclk = FAUX ;
'FINSI' ;   
'SI' lnclk ;
   'TRACER' oeil mt 'CACH' 'TITRE' tit 'NCLK' ;
'SINON' ;   
   'TRACER' oeil mt 'CACH' 'TITRE' tit ;
'FINSI' ;   
*
* End of procedure file TRACMESH
*
'FINPROC' ;
*
* 
*
*ENDPROCEDUR tracmesh
'OPTION' 'ECHO' 1 ;
************************************************************************
* NOM         : COUPLAGE_TH1D_TH3D
* DESCRIPTION : 
* Idem COUPLAGE_TH1D_TH3D_x, (x=1 or) but better :
* we try to write an easy to use dgibi file with well
* specified inputs and outputs.
*
* See technical reports DM2S/SFME/LTMF/RT/03-012/A
*                       DM2S/SFME/LTMF/RT/03-012/B
*                       DM2S/SFME/LTMF/RT/04-024/A
*                       DM2S/SFME/LTMF/RT/05-050/A
* Coupled modelization 3D thermic-1D thermohydraulics
* of a gas-cooled reactor.
*
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : gounand@semt2.smts.cea.fr
**********************************************************************
* VERSION    : v1, 09/10/2004, version initiale
* HISTORIQUE : v1, 09/10/2004, création
* HISTORIQUE :
* HISTORIQUE :
************************************************************************
*
* Some global options and settings
*
* 
* complet  = VRAI : runs all the cases
* interact = VRAI : interactive use
* graph    = VRAI : if one wants graphic output (TRAC, DESS)
complet = FAUX ;
interact= FAUX ;
graph   = FAUX ;
*
'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
'OPTION' 'ISOV' 'SULI' ;
* nbisov : number of isovalues 
nbisov = 25 ;
'SI' ('NON' interact) ;
  'OPTION' 'TRAC' 'PSC' ;
   'OPTION' 'ECHO' 0 ;
'SINON' ;
  'OPTION' 'TRAC' 'X' ;
*  'OPTION' 'TRAC' 'OPEN' ;
'FINSI' ;  
***************************************
*
* Geometry-related settings
*
***************************************
*
* Geometry data for hexagonal configuration
* (quantities to be specified)
*  pas : dimension of the unit cell (m)
*  Dh     : Hydraulique diameter (m)
*  H      : Core height (m)   
* Geometry data for plate configuration
* (quantities to be specified)
*  Dh     : Hydraulique diameter (m)
*  ef     : width of the structure part (m)
*  ep     : width of a fuel plate (m) ;
*  nchan  : number of channels
*  H      : Core height (m)
*
* Geometry data for hexagonal plate configuration
*
* ept : Entreplat (m)
* eps : Epaisseur de structure (m)
* epp : Epaisseur de plaque (m)
* epg : Epaisseur lame de gaz (m)
* epge : Epaisseur lame de gaz extrême (m)
* npp : Nombre de plaques (m)
*
*
*  Geometric discretization parameters 
*  (number of elements)
*  nh (height) : number of elements in the height
*
***************************************
*
* Physics-related settings
*
***************************************
*
* Helium
*
* prhe : Helium pressure (bar)
* qhe  : Helium flow rate (bottom of the core) (kg.m-2.s-1)
* theec, theek : Cold Helium temperature in degree C and in K
* fblock : relative residual flow rate in blocked channels (between 0.
*          and 1.)
*
* Fuel
*
* pvol : Volumic power
* It is the power per unit of total core (fuel+helium+structure)
* and not the power per unit of fuel (W.m-3)
* gamma : Gamma factor (power peaking factor)
*         1.3 < gamma < 2.0
* pvar     = VRAI : sinusoidal power profile in the fuel
*          = FAUX : constant power profile in the fuel
* irrad    = VRAI : for used nuclear fuel (new otherwise)
*
***************************************
*
* Solver-related settings
*
***************************************
*
* Solver parameters
*
* maxit  : maximum number of non-linear iterations
* rescvg : convergence occur for a temperature residual < rescvg
* solvit = FAUX : direct solver, more robust, slower
*        = VRAI : iterative solver, less robust, faster
* omcbst : relaxation factor for 3D thermics
* omhe   : relaxation factor for 1D thermo-hydraulics
*
*
*************************************
*
* Definition of the test cases :
****
*   ikas : 1 to 3  Technical report DM2S/SFME/LTMF/RT/03-012/B
*   ikas = 1 : Hexagonal core, nominal case, small  symmetry cell
*   ikas = 2 : Hexagonal core, nominal case, larger symmetry cell
*   ikas = 3 : Hexagonal core, accidental case, larger symmetry cell
****
*   ikas : 4 to 6  Technical report DM2S/SFME/LTMF/RT/04-024/A
*   ikas = 4 : Square core, nominal case, small  symmetry cell
*   ikas = 5 : Square core, nominal case, larger symmetry cell
*   ikas = 6 : Square core, accidental case, larger symmetry cell
****
*   ikas : 7 to    Technical report DM2S/SFME/LTMF/RT/05-050/A
*   ikas = 7 : Hexagonal core, nominal case, small losange cell
*   ikas = 8 : Hexagonal core, channel 2 blocked, small losange cell
*      chapter 2
*   ikas = 9  : Hexagonal core, nominal case, normal hexa cell
*   ikas = 10 : Hexagonal core, channel 1 blocked, normal hexa cell
*   ikas = 11 : Hexagonal core, channel 2 blocked, normal hexa cell
*   ikas = 12 : Hexagonal core, channel 5 blocked, normal hexa cell
*   ikas = 13 : Hexagonal core, channel 4 and 6 blocked, normal hexa cell
*   ikas = 14 : Hexagonal core, channel 5 and 6 blocked, normal hexa
*               cell (doesn't work)
*   ikas = 15 : Hexagonal core, channel 5 and 6 95% blocked, normal hexa
*               cell
*   ikas = 16 : Hexagonal core, channel 2 blocked, large 2 hexa cells
*    chapter 4
*   ikas = 17 : Hexagonal core, channel 2 blocked, normal hexa cell
*               Reduced Pvol and Qhe : * 75 %
*   ikas = 18 : Hexagonal core, channel 2 blocked, normal hexa cell
*               Reduced Pvol and Qhe : * 40 %
*   ikas = 19 : Hexagonal core, channel 2 blocked, normal hexa cell
*               Qhe Increase : + 50 %
*   ikas = 20 : Hexagonal core, channel 2 blocked, normal hexa cell
*               ((Pvol Qhe)*75%) + Qhe Increase : + 25 %
*    chapter 3
*   ikas = 30 : Modified hexagonal core, nominal case, normal hexa cell
*   ikas = 31 : Modified hexagonal core, channel 1 blocked, normal hexa cell 
*   ikas = 32 : Modified hexagonal core, channel 2 blocked, normal hexa cell
*   ikas = 33 : Modified hexagonal core, channel 5 blocked, normal hexa cell
*   ikas = 34 : Modified hexagonal core, channel 4 and 6 blocked,
*               normal hexa cell
*   ikas = 35 : Modified hexagonal core, channel 5 and 6 blocked, normal hexa
*               cell (doesn't work)
*   ikas = 36 : Modified hexagonal core, channel 5 and 6 95% blocked,
*               normal hexa cell


*
* Tabtot stores tabres + maxi temperature
*
tabtot = 'TABLE' ;
* Non-regression testing on the maximum temperature in fuel and
* structure in listem 
* Obtained on 01/12/05
listem = 'PROG'
  1154. 1154. 1595. 1101. 1101. 1865. 1080. 1910. 1110. 1700.
  1840. 1700. 1810. 0.    4470. 1820. 1690. 1500. 1580. 1550.
  0.    0.    0.    0.    0.    0.    0.    0.    0.    1070.
  1760. 1760. 1760. 1870. 0.    4680. ;
'SI' complet ;
   lkas   = 'LECT' 1 2 3 4 5 6 7 8 9 10 11 12 13 15
                   16 17 18 19 20 30 31 32 33 34 36 ;
'SINON' ;   
   lkas   = 'LECT' 1 2 3 4 ;
'FINSI' ;
listemc = 'EXTRAIRE' listem lkas ;
nkas = 'DIME' lkas ;
'REPETER' bikas nkas ;
ikas = 'EXTRAIRE' lkas &bikas ;
tabtot . ikas = 'TABLE' ;
'TEMPS' 'ZERO' ;
petitb = 0.D0 ;
omcbst = 0.9 ;
omhe   = 0.5 ;
*
'SI' ('ET' ('>EG' ikas 1)  ('<EG' ikas 3)) ;
   pas  = 21.1D-3 ;
   Dh   = 16.5D-3 ;
   H    = 2.D0 ;
   nh = 7 ;
   prhe = 90.D0 ;
   qhe  = 210.D0 ;
   theec = 480.D0 ;
   theek = '+' theec 273.15D0 ;
   pvol = 100.D6  ;
   gamma = 1.5D0 ;
   pvar    = VRAI ;
   irrad   = VRAI ;
   maxit  = 40 ;
   rescvg = 1.D-4 ;
   solvit = FAUX ;
   'SI' ('EGA' ikas 1) ;   
      tabin = GEOMHEX1 Dh pas ;
      tabin . 'BLOCKED'   = 'LECT' ;
   'FINSI' ;      
   'SI' ('EGA' ikas 2) ;   
      tabin = GEOMHEX2 Dh pas ;
      tabin . 'BLOCKED'   = 'LECT' ;
   'FINSI' ;      
   'SI' ('EGA' ikas 3) ;   
      tabin = GEOMHEX2 Dh pas ;
      tabin . 'BLOCKED'   = 'LECT' 1 ;
   'FINSI' ;
   nchan = 'DIME' (tabin . 'CHANNEL') ;
   tabin . 'DH' = 'TABLE' ;
   'REPETER' ichan nchan ;
      tabin . 'DH' . &ichan = Dh ;
   'FIN' ichan ;      
   fblock = petitb ;
'FINSI' ;   
'SI' ('ET' ('>EG' ikas 4)  ('<EG' ikas 6)) ;
   Dh = 2.D-2 ;
   ef = 3.04D-3 ;
   ep = 1.04D-2 ;
   nchan = 5 ;
   H  = 4.2D0 ;
   nh = 7 ;
   prhe = 90.D0 ;
   qhe  = 278.D0 ;
   theec = 480.D0 ;
   theek = '+' theec 273.15D0 ;
   pvol = 40.D6  ;
   gamma = 1.3D0 ;
   pvar    = VRAI ;
   irrad   = VRAI ;
   maxit  = 40 ;
   rescvg = 1.D-4 ;
   solvit = VRAI ;
   'SI' ('EGA' ikas 4) ;   
      tabin = GEOMPLA1 Dh ef ep nchan ;
      tabin . 'BLOCKED'   = 'LECT' ;
   'FINSI' ;      
   'SI' ('EGA' ikas 5) ;   
      tabin = GEOMPLA2 Dh ef ep nchan ;
      tabin . 'BLOCKED'   = 'LECT' ;
   'FINSI' ;      
   'SI' ('EGA' ikas 6) ;
      tabin = GEOMPLA2 Dh ef ep nchan ;
      tabin . 'BLOCKED'   = 'LECT' 1 ;
   'FINSI' ;
   nchan = 'DIME' (tabin . 'CHANNEL') ;
   tabin . 'DH' = 'TABLE' ;
   'REPETER' ichan nchan ;
      tabin . 'DH' . &ichan = Dh ;
   'FIN' ichan ;      
   fblock = petitb ;
'FINSI' ;
'SI' ('>EG' ikas 7) ;
   H = 1.55D0 ;
   nh = 7 ;
   prhe = 90.D0 ;
   qhe  = 210.D0 ;
   theec = 480.D0 ;
   theek = '+' theec 273.15D0 ;
   pvol = 100.D6  ;
   gamma = 1.5D0 ;
   pvar    = VRAI ;
   irrad   = VRAI ;
   maxit  = 40 ;
   rescvg = 1.D-4 ;
   solvit = VRAI ;
   ept = 211.3D-3 ;
   eps = 1.5D-3 ;
   epp = 7.D-3  ;
   epg = 4.6D-3 ;
   npp  = 9 ;
   ff = '/' 2.D0 ('**' 3.D0 0.5D0) ;
   'SI' ('>EG' ikas 30) ;
      ept = '+' ept ('*' ('-' 4.6D-3 ('/' 2.08D-3 ff)) 4.) ;
   'FINSI' ;      
   'SI' ('EGA' ikas 7) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 1 ;
      tabin . 'BLOCKED' = 'LECT' ;
      fblock = 0.D0 ;
   'FINSI' ;      
   'SI' ('EGA' ikas 8) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 1 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 9) ('EGA' ikas 30)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 10) ('EGA' ikas 31)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 1 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 11) ('EGA' ikas 32)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 12) ('EGA' ikas 33)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 5 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 13) ('EGA' ikas 34)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 4 6 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 14) ('EGA' ikas 35)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 5 6 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('OU' ('EGA' ikas 15) ('EGA' ikas 36)) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 5 6 ;
      fblock = 0.05D0 ;
   'FINSI' ;
   'SI' ('EGA' ikas 16) ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 3 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('EGA' ikas 17) ;
      fq = 1.D0 ;
      fp = 0.75D0 ;
      pvol = '*' pvol fp ;
      qhe  = '*' ('*' qhe fp) fq ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('EGA' ikas 18) ;
      fq = 1.D0 ;
      fp = 0.4D0 ;
      pvol = '*' pvol fp ;
      qhe  = '*' ('*' qhe fp) fq ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('EGA' ikas 19) ;
      fq = 1.5D0 ;
      fp = 1.0D0 ;
      pvol = '*' pvol fp ;
      qhe  = '*' ('*' qhe fp) fq ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
   'SI' ('EGA' ikas 20) ;
      fq = 1.25D0 ;
      fp = 0.75D0 ;
      pvol = '*' pvol fp ;
      qhe  = '*' ('*' qhe fp) fq ;
      tabin epge = GEOMPLH1 ept eps epp epg npp 2 ;
      tabin . 'BLOCKED' = 'LECT' 2 ;
      fblock = 0.D0 ;
   'FINSI' ;
*   
   'SAUTER' 2 'LIGN' ;
   'MESSAGE' ('CHAINE' '***************')  ;
   'MESSAGE' ('CHAINE' 'Epai. gaz extreme : ' (formar ('/' epge ff) 2)
                       ' m') ;
   'MESSAGE' ('CHAINE' 'Entreplat         : ' (formar ept 5)
                       ' m') ;
   'MESSAGE' ('CHAINE' '***************')  ;
   'SAUTER' 2 'LIGN' ;
'FINSI' ;
* Input for GENMEMA procedure
* tabin . 'INTERFACE'  . i : i-th interface       (line mesh)
* tabin . 'CHANNEL'    . i : i-th helium channel  (surface mesh)
* tabin . 'FUEL'           : fuel mesh (surface mesh)
* tabin . 'STRUCTURE'      : structure mesh (surface mesh) (optional)
* tabin . 'BLOCKED'        : LISTENTI : list of the numbers
*                            of the blocked channels (can be empty)
* H : height (m) and nh : number of elements in the height
* (regular meshing in z direction)
*
* output tabgeo should contain all the necessary geometric information
* needed further
* tabgeo . 'tabin'   = tabin
* tabgeo . 'H'       = H   : height
* tabgeo . 'nh'      = nh  : number of elements in the height
* tabgeo . '$mtcbst' = NS model objet (fuel+structure)
* tabgeo . '$mtcb'   = NS model objet (fuel only)
* tabgeo . '$mthe'   = NS model objet (helium channels)
* tabgeo . '$sthe'   = NS model objet (bottom of the helium channels)
* tabgeo . '$mtif'   = NS model objet (interfaces)
* tabgeo . '$mtifb'  = NS model objet (blocked interfaces) (if any)
* tabgeo . 'mcf'     = coupling matrix helium -> fuel
* tabgeo . 'mfc'     = coupling matrix fuel -> helium
* GENMEMA is slow
tabgeo = GENMEMA tabin H nh ;
*
* Compute power distribution
*
pcb = CPOWDIS tabgeo pvol gamma pvar ;
*
* chblock
* Volumic field = 1 in unblocked channels
*               = fblock (between 0. and 1.) in blocked channels
*
$tmthe  = tabgeo . '$tmthe' ;
nhe     = 'DIME' $tmthe ;
lblock  = tabin . 'BLOCKED' ;
tablock = 'TABLE' ;
'REPETER' ihe nhe ;
   $mthei = $tmthe . &ihe ;
   'SI' ('DANS' ('LECT' &ihe) lblock) ;
      APPEND tablock 'chblock' ('KCHT' $mthei 'SCAL' 'SOMMET' fblock) ;
   'SINON' ;      
      APPEND tablock 'chblock' ('KCHT' $mthei 'SCAL' 'SOMMET' 1.D0) ;
   'FINSI' ;
'FIN' ihe ;
chblock = 'KCHT' (tabgeo . '$mthe') 'SCAL' 'SOMMET'
                                    (tablock . 'chblock') ;
*
* Put the physics in a table 
*
tabphy = 'TABLE' ;
* Interface
tabphy . 'Dh'      = tabgeo . 'Dh' ;
tabphy . 'chblock' = chblock    ;
* Helium
tabphy . 'qhe'   = qhe    ;
tabphy . 'prhe'  = prhe   ;
tabphy . 'theek' = theek  ;
* Fuel 
tabphy . 'pvol'  = pvol   ;
tabphy . 'pvar'  = pvar   ;
tabphy . 'gamma' = gamma  ;
tabphy . 'irrad' = irrad  ;
tabphy . 'pcb'   = pcb    ;
*
* Put the numerics in a table
*
tabnum = 'TABLE' ;
tabnum . 'maxit'  = maxit  ;
tabnum . 'rescvg' = rescvg ;
tabnum . 'solvit' = solvit ;
tabnum . 'omcbst' = omcbst ;
tabnum . 'omhe'   = omhe ;
*
* Put the tables in a table !
*
tabdat = 'TABLE' ;
tabdat . 'ikas' = ikas ;
tabdat . 'tabgeo' = tabgeo ;
tabdat . 'tabphy' = tabphy ;
tabdat . 'tabnum' = tabnum ;
*
* Text summary of data
*
'SAUTER' 2 'LIGN' ;
SUMMDAT tabdat ;
'SAUTER' 2 'LIGN' ;
*
* EXPLODAT does graphical output of data
* - first argument (mandatory) : the tables with data
* - second argument (optional) : VRAI (default) interactive use
*                                     (mouse clicks)
*                                FAUX batch use
* - third argument (mandatory if 2ndarg = FAUX) : a list of integer or
*                                                  an integer  
*              an integer corresponds to a particular view
*   View 1 : the base mesh
*   View 2 : the mesh
*   View 3 : the blocked channels
*   View 4 : the power distribution
*   View 5 : fuel and structure thermal conductivity (T)
*   View 6 : Helium density
*   View 7 : Helium thermal conductivity
*   View 8 : Helium heat capacity
*
* Graphical output of data
*
'SI' graph ;
   'SI' interact ;
     EXPLODAT tabdat ;
   'SINON' ;   
*      EXPLODAT tabdat FAUX ('LECT' 1 2 3 4) ;
*      EXPLODAT tabdat FAUX ('LECT' 1) ;
   'FINSI' ;
'FINSI' ;
***************************************
*
* DO THE COMPUTATIONS
*
***************************************
tabres = COMPUTE tabdat ;
tcpu = 'TEMPS' 'NOEC' ;
tcpus = '/' ('FLOTTANT' tcpu) 100.D0 ;
'MESSAGE' ('CHAINE' 'tcpus=' tcpus) ;
tabres . 'tcpus' = tcpus ;
***************************************
*
* POST-TREATEMENT
*
***************************************
*
* Text summary of results :
* SUMMRES prints a summary of the results of the computation
*         it also does some tests (energy conservation...)
*
'SAUTER' 2 'LIGN' ;
SUMMRES tabres ;
'SAUTER' 2 'LIGN' ;
*
* EXPLORES does graphical output of results
* - first argument (mandatory) : the table with the results
* - second argument (optional) : VRAI (default) interactive use
*                                     (mouse clicks)
*                                FAUX batch use
* - third argument (mandatory if 2ndarg = FAUX) : a list of integer or
*                                                 an integer  
*              an integer corresponds to a particular view
*   View 1 : temperature (fuel + He)
*   View 2 : temperature (fuel)
*   View 3 : temperature (fuel : 2 viewpoints)
*   View 4 : exchange coefficient
*   View 5 : temperature (helium)
*   View 6 : vertical speed (helium)
*   View 7 : temperature profiles per channel (helium)
*   View 8 : vertical speed profiles per channel (helium)
*   View 9  : Nusselt number
*   View 10 : Reynolds number
*   View 11 : Prandtl number
*   View 12 : Lambda Helium
*   View 13 : Hydraulic diameter
'SI' graph ;
   'SI' interact ;
      EXPLORES tabres ;
   'SINON' ;   
*      EXPLORES tabres FAUX ('LECT' 2 4 5 7) ;
      EXPLORES tabres FAUX ('LECT' 3 4 5 6 7 8) ;
   'FINSI' ;
'FINSI' ;
*interact = VRAI ;
*explores tabres ;
*
* Save the results (Maximum temperature & cpu time)
*
tabtot . ikas . 'maxtem' = 'MAXIMUM' (tabres . 'TCBS') ;
tabtot . ikas . 'tcpus'  = tabres . 'tcpus' ;
*tabtot . ikas . 'tabdat' = tabdat ;
*tabtot . ikas . 'tabres' = tabres ;
'FIN' bikas ;
*'SI' interact ;
*   'OPTION' 'ECHO' 1 ;
*   'OPTION' 'DONN' 5 ;
*'FINSI' ;   
*'TEMPS' 'IMPR' ;
*
* Non-regression testing on the maximum temperature in fuel and structure.
*
'MESSAGE' '**********************' ;
'MESSAGE' 'Non regression testing' ;
testerr = FAUX ;
* 1 % tolerance
toler   = 0.01 ;
'REPETER' bikas nkas ;
   ikas = 'EXTRAIRE' lkas &bikas ;
   maxtem   = tabtot . ikas . 'maxtem' ;
   tcpus    = tabtot . ikas . 'tcpus' ;
   maxexpc  = 'EXTRAIRE' listemc &bikas ;
   maxexp = '+' maxexpc 273.15D0 ;
   testerr = 'OU' testerr ('NEG' maxtem maxexp ('*' maxexp toler)) ; 
   'MESSAGE' ('CHAINE' 'Ikas            = ' ikas) ;
   'MESSAGE' ('CHAINE' 'CPU Time (s)    =' tcpus) ;
   maxtemc = '-' maxtem 273.15D0 ;
   'MESSAGE' ('CHAINE' 'Maxtem          = ' (formar maxtemc 3)
              ' degrees C') ;
   'MESSAGE' ('CHAINE' 'Expected Maxtem = ' (formar maxexpc 3)
              ' degrees C') ;
'FIN' bikas ;
'MESSAGE' '**********************' ;
*!
*! Error checking
*!
'SI' testerr ;
   'MESSAGE' 'There were some errors' ;
   'SI' interact ;
      'OPTION' 'ECHO' 1 ;
      'OPTION' 'DONN' 5 ;
   'FINSI' ;         
   'ERREUR' 5 ;
'SINON' ;   
   'MESSAGE' 'Everything went ok' ;
'FINSI' ;
'SI' interact ;
   'OPTION' 'ECHO' 1 ;
   'OPTION' 'DONN' 5 ;
'FINSI' ;   
*
* End of dgibi file COUPLAGE_TH1D_TH3D
*
'FIN' ;

 

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer