Download konv_impl3D.dgibi

Back to the list

* fichier :  konv_impl3D.dgibi
***********************************************************
***********************************************************
**** APPROCHE VF "Cell-Centred Formulation" pour la    ****
**** solution des                                      **** 
**** Equations d'Euler pour un gaz parfait             ****
**** OPERATEURS PRIM, PRET, KONV                       ****
**** Implicit: calcul du jacobien du residu            ****
****                                                   ****
**** Cas gaz monoespece, "calorically perfect"         ****
**** 3D                                                ****
****                                                   ****
**** Methodes: VLH                                     ****
****                                                   ****
**** A. BECCANTINI SFME/LTMF            AOUT  2001     ****
***********************************************************
***********************************************************

 'OPTION'  'DIME' 3 
     'ELEM' 'CUB8' 
     'ECHO'  0
     'TRAC' 'X' ;

*
*** GRAPH
*

 GRAPH = FAUX ;
*  GRAPH = VRAI ;

 ERRTOL = 1.0D-3 ;

***************************
***** DOMAINE SPATIAL  ****
***************************


 A0 = 0.0D0 0.0D0 0.0D0;
 A1 = 1.0D0 0.0D0 0.0D0;
 A2 = 1.0D0 1.0D0 0.0D0;
 A3 = 0.0D0 1.0D0 0.0D0;

 SUR1 = 'MANUEL' 'QUA4' A0 A1 A2 A3 ;
 DOM1 = SUR1 'VOLUME' 'TRAN' 1 (0.0 0.0 1.0) ;
 
 DOM2 = DOM1 'PLUS' (1.0 0.0 0.0) ;
 DOM3 = DOM1 'PLUS' (-1.0 0.0 0.0) ;
 DOM4 = DOM1 'PLUS' (0.0 1.0 0.0) ;
 DOM5 = DOM1 'PLUS' (0.0 -1.0 0.0) ;
 DOM6 = DOM1 'PLUS' (1.0 1.0 0.0) ;
 DOM7 = DOM1 'PLUS' (-1.0 -1.0 0.0) ;
 DOM8 = DOM1 'PLUS' (1.0 -1.0 0.0) ;
 DOM9 = DOM1 'PLUS' (-1.0 1.0 0.0) ;

 DOM10 = DOM1 'PLUS' (0.0 0.0 1.0) ;
 DOM11 = DOM1 'PLUS' (1.0 0.0 1.0) ;
 DOM12 = DOM1 'PLUS' (-1.0 0.0 1.0) ;
 DOM13 = DOM1 'PLUS' (0.0 1.0 1.0) ;
 DOM14 = DOM1 'PLUS' (0.0 -1.0 1.0) ;
 DOM15 = DOM1 'PLUS' (1.0 1.0 1.0) ;
 DOM16 = DOM1 'PLUS' (-1.0 -1.0 1.0) ;
 DOM17 = DOM1 'PLUS' (1.0 -1.0 1.0) ;
 DOM18 = DOM1 'PLUS' (-1.0 1.0 1.0) ;

 DOM19 = DOM1 'PLUS' (0.0 0.0 -1.0) ;
 DOM20 = DOM1 'PLUS' (1.0 0.0 -1.0) ;
 DOM21 = DOM1 'PLUS' (-1.0 0.0 -1.0) ;
 DOM22 = DOM1 'PLUS' (0.0 1.0 -1.0) ;
 DOM23 = DOM1 'PLUS' (0.0 -1.0 -1.0) ;
 DOM24 = DOM1 'PLUS' (1.0 1.0 -1.0) ;
 DOM25 = DOM1 'PLUS' (-1.0 -1.0 -1.0) ;
 DOM26 = DOM1 'PLUS' (1.0 -1.0 -1.0) ;
 DOM27 = DOM1 'PLUS' (-1.0 1.0 -1.0) ;

 DOMTOT = DOM1 'ET' DOM2 'ET' DOM3 'ET' DOM4 'ET' DOM5
   'ET' DOM6 'ET' DOM7 'ET' DOM8 'ET' DOM9 'ET' DOM10
   'ET' DOM11 'ET' DOM12 'ET' DOM13 'ET' DOM14 'ET' DOM15
   'ET' DOM16 'ET' DOM17 'ET' DOM18 'ET' DOM19 'ET' DOM20
   'ET' DOM21 'ET' DOM22 'ET' DOM23 'ET' DOM24 'ET' DOM25
   'ET' DOM26 'ET' DOM27 ;

 'ELIMINATION' DOMTOT 0.0001 ;

*
**** Perturbation du domaine
*

 CHPBRU = ('NOMC' 'UX' ('BRUI' 'BLAN' 'UNIF' 0.0  0.4 DOMTOT)
            'NATU' 'DISCRET') 'ET'
            ('NOMC' 'UY' ('BRUI' 'BLAN' 'UNIF' 0.0  0.2 DOMTOT)
            'NATU' 'DISCRET') 'ET'
            ('NOMC' 'UZ' ('BRUI' 'BLAN' 'UNIF' 0.0  0.3 DOMTOT)
            'NATU' 'DISCRET');
            
 'FORME' CHPBRU ;

 $DOMTOT = 'MODELISER' DOMTOT 'EULER';
 $DOM1 = 'MODELISER'  DOM1 'EULER';
 $DOM27 = 'MODELISER'  DOM27 'EULER';

 TDOMTOT = 'DOMA'  $DOMTOT 'VF';
 TDOM1 = 'DOMA'  $DOM1 'VF';
 TDOM27 = 'DOMA'  $DOM27 'VF';

 MDOM1 = TDOM1 . 'QUAF' ;
 MDOM27 = TDOM27 . 'QUAF' ;
 MDOMTOT = TDOMTOT . 'QUAF' ;

 'ELIMINATION'  (MDOMTOT ET MDOM1) 0.0001 ;
 'ELIMINATION'  (MDOMTOT ET MDOM27) 0.0001 ;

***************************************************
***** Densité, pression, vitesse, gamma ***********
***************************************************

 RN0 = 'BRUI' 'BLAN' 'UNIF' 1.11 0.5 ('DOMA' $DOMTOT 'CENTRE') ;
 PN0 = 'BRUI' 'BLAN' 'UNIF' 1234.1 800 ('DOMA' $DOMTOT 'CENTRE') ;
 GAMMAN = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 1 'SCAL' 1.4
   'NATU' 'DISCRET' ;
 CSONN = (GAMMAN '*' PN0) '/' RN0 ;
 CSONN = 'KOPS' CSONN '**' 0.5 ;
 UXN0  = 0.2 *  CSONN ;
 UYN0  = 0.3  * CSONN ;
 UZN0  = 0.4  * CSONN ;
 
 GN0 = ('NOMC' (RN0 '*' UXN0) 'UX' 'NATU' 'DISCRET') 'ET'
       ('NOMC' (RN0 '*' UYN0) 'UY' 'NATU' 'DISCRET') 'ET'
       ('NOMC' (RN0 '*' UZN0) 'UZ' 'NATU' 'DISCRET') ;

 ECIN = 0.5D0 '*' RN0 '*' ((UXN0  '*' UXN0) '+' (UYN0  '*' UYN0) '+'
      (UZN0 * UZN0)) ;
 RETN0  = 'NOMC' 'SCAL' ((PN0  '/' (GAMMAN  '-' 1.0)) '+' ECIN)
    'NATU' 'DISCRET' ;

 VIT PRES = PRIM 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;

 ERR1 = 'MAXIMUM' (PRES '-' PN0) 'ABS' ;
 ERR2 = 'MAXIMUM' (GN0 '-' (RN0 '*' VIT ('MOTS' 'SCAL' 'SCAL' 'SCAL')
         ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ'))) 'ABS' ;

 'SI' (('MAXIMUM' ('PROG' ERR1 ERR2 ) 'ABS' ) > 1.0D-6) ;
      'MESSAGE' 'Problem 0' ;
      'ERREUR' 5 ;
 'FINSI' ;
 

 'SI' GRAPH;
      'TRACER' (('DOMA' $DOMTOT 'MAILLAGE') 'ET' 
         ('DOMA' $DOMTOT 'CENTRE')) 'TITRE' 'Domaine et centre' ;
 'FINSI' ;

*
**** Les variables conservative
*
*    RN0 (densité)
*    GN0 (quantité de mouvement)
*    RETN0 (énergie totale par unité de volume)
*
*    sont definiés
*

****************************************************
****************************************************
******* Calcul du jacobien et du residu   **********
****************************************************
****************************************************
*
* JACO est le jacobien
*
* DEBRN0 le residu concernant la densité
* DEBGNX0 le residu concernant la quantité de mouvement (axe x)
* DEBGNY0 le residu concernant la quantité de mouvement (axe y)
* DEBGNZ0 le residu concernant la quantité de mouvement (axe z)
* DEBRETN0 le residu concernant l'enrgie totale par unité de volume
*

* Noms des variables

 NOMDEN = 'RN  ' ;
 NOMMOX = 'RUXN' ;
 NOMMOY = 'RUYN' ;
 NOMMOZ = 'RUZN' ;
 NOMRET = 'RETN' ;

* Methode
 
 METO = 'VLH'  ;
 
  
 LISTINCO = 'MOTS'  NOMDEN  NOMMOX  NOMMOY  NOMMOZ NOMRET ;

 VITESSE PRES   = 'PRIM' 'PERFMONO'  RN0 GN0 RETN0 GAMMAN ;

 ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  1 1
                           $DOMTOT RN0 VITESSE PRES GAMMAN ;

 CHPRES0 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
          $DOMTOT ROF VITF PF GAMF LISTINCO ;
          
 JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS' 
         $DOMTOT LISTINCO
         METO RN0 VITESSE PRES GAMMAN ;

 DEBRN0   = 'EXCO' NOMDEN CHPRES0 ;
 DEBGNX0  = 'EXCO' NOMMOX CHPRES0 ;
 DEBGNY0  = 'EXCO' NOMMOY CHPRES0 ;
 DEBGNZ0  = 'EXCO' NOMMOZ CHPRES0 ;
 DEBRETN0 = 'EXCO' NOMRET CHPRES0 ;
 


*****************************************************
*****************************************************
******** PROCEDURES *********************************
*****************************************************
*****************************************************

*
* Derivé partielle du residu en un point par rapport
* aux variable en un autre point
*

 'DEBPROC' JACOVA JACO*'MATRIK' $MODE*'MMODEL' LISTINCO*'LISTMOTS'
    PPRIM*'POINT' PDUAL*'POINT' MOTPRI*'MOT' MOTDUA*'MOT';
    
*   PPRIM = point ou est localisé la variable primale
*   PDUAL = point ou est localisé la variable duale
*   MOTPRI = nom de la composante concernante la variable primale
*   MOTDUA = nom de la composante concernante la variable duale

    ELT1 = 'MANUEL' 'POI1' PPRIM ;
    NDIM = 'DIME' LISTINCO ;
    CHPUN = 'MANUEL' 'CHPO' ELT1 1 MOTPRI 1.0 'NATURE' 'DISCRET' ;
    'REPETER' BL1 NDIM ;
       MOTCEL = 'EXTRAIRE' LISTINCO &BL1 ;
       CHPUN = CHPUN 'ET' ('MANUEL' 'CHPO' ('DOMA' $MODE 'CENTRE')
          1 MOTCEL 0.0 'NATURE' 'DISCRET') ;
    'FIN' BL1 ;
    D_DMOT = 'KOPS' JACO 'MULT' CHPUN ;
    SCAL = 'EXTRAIRE' D_DMOT PDUAL MOTDUA ;

 'FINPROC' SCAL  ;


 
 'DEBPROC' JACNUM $MODE*'MMODEL' NOMMET*'MOT' RN*'CHPOINT' GN*'CHPOINT'
    RETN*'CHPOINT' GAMN*'CHPOINT'
    LISTINCO*'LISTMOTS' PPRIM*'POINT' PDUAL*'POINT'
    MOTPRI*'MOT' MOTDUA*'MOT' EPSILON*'FLOTTANT';

*   PPRIM = point ou est localisé la variable primale
*   PDUAL = point ou est localisé la variable duale
*   MOTPRI = nom de la composante concernante la variable primale
*   MOTDUA = nom de la composante concernante la variable duale

*   Le valeur dans l'état non-perturbé en PDUAL ;
    
    RNCEL   = 'COPIER'  RN ;
    GNCEL   = 'COPIER'  GN ;
    RETNCEL = 'COPIER'  RETN ;

    VITESSE PRES   = 'PRIM' 'PERFMONO'  RNCEL GNCEL RETNCEL GAMN ;
    
    ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  1 1
                           $MODE RNCEL VITESSE PRES GAMN ;
    
    CHPRES0 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' NOMMET
          $MODE ROF VITF PF GAMF LISTINCO ;

    VAL0 = 'EXTRAIRE' CHPRES0 PDUAL MOTDUA ;
    
*   EPSILON = perturbation

*   Adimensionalisation

    dens0 = 'EXTRAIRE' RN PPRIM 'SCAL' ;
    
    VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
    CN2 = GAMN '*' (PN '/' RN) ;
    cson0 = ('EXTRAIRE' CN2 PPRIM 'SCAL') '**' 0.5 ;

    ret0 = ('EXTRAIRE' RETN PPRIM 'SCAL') '**' 0.5 ;

*   On etabli la variable à perturber

    NDIM = 'DIME' LISTINCO ;
    'REPETER' BL1 NDIM ;
       MOTCEL = 'EXTRAIRE' LISTINCO &BL1 ;
       'SI' ('EGA' MOTCEL MOTPRI) ;
          ICEL = &BL1 ;
          'QUITTER' BL1 ;
       'FINSI' ;
    'FIN' BL1 ;
    
    'SI' (ICEL > NDIM) ;
       'MESSAGE' 'Procedure JACNUM' ;
       'MESSAGE' 'MOTPRI = ??? ';
       'ERREUR' 21 ;
    'FINSI' ;
    
    ELT1 = 'MANUEL' 'POI1' PPRIM ;
    
*   ICEL = 1 -> On perturbe la densité

    'SI' ('EGA' ICEL 1) ;
       DELTATOT = (EPSILON * dens0) ;
       RNCEL = ('MANUEL' 'CHPO' ELT1 1 'SCAL' DELTATOT
          'NATURE' 'DISCRET') 'ET' RN ;
       GNCEL = 'COPIER' GN ;
       RETNCEL = 'COPIER' RETN ;
    'FINSI' ;

*   ICEL = 2 -> On perturbe la q.d.m. long  l'ax x

    'SI' ('EGA' ICEL 2) ;
       DELTATOT = (EPSILON * dens0 * cson0) ;
       GNCEL = ('MANUEL' 'CHPO' ELT1 1 'UX' DELTATOT
          'NATURE' 'DISCRET') 'ET' GN ;
       RNCEL = 'COPIER' RN ;
       RETNCEL = 'COPIER' RETN ;
    'FINSI' ;

*   ICEL = 3 -> On perturbe la q.d.m. long  l'ax y

    'SI' ('EGA' ICEL 3) ;
       DELTATOT = (EPSILON * dens0 * cson0) ;
       GNCEL = ('MANUEL' 'CHPO' ELT1 1 'UY' DELTATOT
          'NATURE' 'DISCRET') 'ET' GN ;
       RNCEL = 'COPIER' RN ;
       RETNCEL = 'COPIER' RETN ;
    'FINSI' ;

*   ICEL = 4 -> On perturbe la q.d.m. long  l'ax z

    'SI' ('EGA' ICEL 4) ;
       DELTATOT = (EPSILON * dens0 * cson0) ;
       GNCEL = ('MANUEL' 'CHPO' ELT1 1 'UZ' DELTATOT
          'NATURE' 'DISCRET') 'ET' GN ;
       RNCEL = 'COPIER' RN ;
       RETNCEL = 'COPIER' RETN ;
    'FINSI' ;

*   ICEL = 4 -> On perturbe l'énergie totale

    'SI' ('EGA' ICEL 5) ;
       DELTATOT = (EPSILON * ret0) ;
       RETNCEL = ('MANUEL' 'CHPO' ELT1 1 'SCAL' DELTATOT
          'NATURE' 'DISCRET') 'ET' RETN ;
       RNCEL = 'COPIER' RN ;
       GNCEL = 'COPIER' GN ;
    'FINSI' ;

    VITESSE PRES   = 'PRIM' 'PERFMONO'  RNCEL GNCEL RETNCEL GAMN ;
    
    ROF VITF PF GAMF   =  'PRET' 'PERFMONO'  1 1
                           $MODE RNCEL VITESSE PRES GAMN ;
    
    CHPRES1 DT = 'KONV' 'VF' 'PERFMONO' 'RESI' NOMMET
          $MODE ROF VITF PF GAMF LISTINCO ;

    VAL1 = 'EXTRAIRE' CHPRES1 PDUAL MOTDUA ;

 'FINPROC' ((VAL1 '-' VAL0) '/' DELTATOT)  ;

*****************************************************
*****************************************************
******** FIN PROCEDURES *****************************
*****************************************************
*****************************************************
*****************************************************

 
*****************************************************
******* TEST1 ***************************************
*****************************************************
*
* On compare le jacobien et la variation du residu
* en $DOM1 'CENTRE' par rapport à une variation
* infinitésimal en $DOM1 . 'CENTRE'
*

 PCEN1 = 'POIN' 1 ('DOMA' $DOM1 'CENTRE') ;

* Les grandeurs pour adimesionner les erreurs

 ro0 = 'EXTRAIRE' RN0 PCEN1 'SCAL' ;
    
 VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
 CN20 = GAMMAN '*' (PN0 '/' RN0) ;
 cson0 = ('EXTRAIRE' CN20 PCEN1 'SCAL') '**' 0.5 ;

 ret0 = ('EXTRAIRE' RETN0 PCEN1 'SCAL') ;

*
* Le jacobien exact. 
* DRR  = d(RES_ro)/dro (variable primale en PCEN1, variable duale en PCEN1) ;
* DGXR = d(RES_gx)/dro (variable primale en PCEN1, variable duale en PCEN1) ;
* ...

 DRR   = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMDEN NOMDEN ;
 DGXR  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMDEN NOMMOX ;
 DGYR  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMDEN NOMMOY ;
 DGZR  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMDEN NOMMOZ ;
 DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMDEN NOMRET ;

 DRGX   = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOX NOMDEN ;
 DGXGX  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOX NOMMOX ;
 DGYGX  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOX NOMMOY ;
 DGZGX  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOX NOMMOZ ;
 DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOX NOMRET ;

 DRGY   = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOY NOMDEN ;
 DGXGY  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOY NOMMOX ;
 DGYGY  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOY NOMMOY ;
 DGZGY  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOY NOMMOZ ;
 DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOY NOMRET ;

 DRGZ   = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOZ NOMDEN ;
 DGXGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOZ NOMMOX ;
 DGYGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOZ NOMMOY ;
 DGZGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOZ NOMMOZ ;
 DRETGZ = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMMOZ NOMRET ;

 DRRET   = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMRET NOMDEN ;
 DGXRET  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMRET NOMMOX ;
 DGYRET  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMRET NOMMOY ;
 DGZRET  = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMRET NOMMOZ ;
 DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN1 PCEN1 NOMRET NOMRET ;


* Le jacobien numerique


 DELTA = 1.0D-5 ;
 
 DRRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMDEN NOMDEN DELTA ;
 DGXRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMDEN NOMMOX DELTA ;
 DGYRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMDEN NOMMOY DELTA ;
 DGZRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMDEN NOMMOZ DELTA ;
 DRETRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMDEN NOMRET DELTA ;
   
 DRGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOX NOMDEN DELTA ;
 DGXGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOX NOMMOX DELTA ;
 DGYGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOX NOMMOY DELTA ;
 DGZGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOX NOMMOZ DELTA ;
 DRETGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOX NOMRET DELTA ;

 DRGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOY NOMDEN DELTA ;
 DGXGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOY NOMMOX DELTA ;
 DGYGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOY NOMMOY DELTA ;
 DGZGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOY NOMMOZ DELTA ;
 DRETGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOY NOMRET DELTA ;

 DRGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOZ NOMDEN DELTA ;
 DGXGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOZ NOMMOX DELTA ;
 DGYGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOZ NOMMOY DELTA ;
 DGZGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOZ NOMMOZ DELTA ;
 DRETGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMMOZ NOMRET DELTA ;

 DRRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMRET NOMDEN DELTA ;
 DGXRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMRET NOMMOX DELTA ;
 DGYRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMRET NOMMOY DELTA ;
 DGZRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1 PCEN1
   NOMRET NOMMOZ DELTA ;
 DRETRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN1
   PCEN1
   NOMRET NOMRET DELTA ;

* Test des comparaisons jacobien exact-jacobien numerique

 
 ERR1 = ('ABS' (DRRN '-' DRR)) '*' (ro0 '/' (ro0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 1';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRN '-' DGXR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 2';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRN '-' DGYR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 3';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRN '-' DGZR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 4';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETRN '-' DRETR)) '*'
        (ro0 '/' (ret0 '*' cson0)) ; 
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 5';
      'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGXN '-' DRGX))  ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 6';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGXN '-' DGXGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 7';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGXN '-' DGYGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 8';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGXN '-' DGZGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 9';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGXN '-' DRETGX)) '*'
        (ro0  / ret0) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 10';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGYN '-' DRGY))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 11';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGYN '-' DGXGY))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 12';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGYN '-' DGYGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 13';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGYN '-' DGZGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 14';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGYN '-' DRETGY))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 15';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGZN '-' DRGZ))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 16';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGZN '-' DGXGZ))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 17';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGZN '-' DGYGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 18';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGZN '-' DGZGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 19';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETGZN '-' DRETGZ))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 20';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRRETN '-' DRRET)) '*' (ret0 '/' (ro0 '*' cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 21';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRETN '-' DGXRET)) '*'
          (ret0 '/' (ro0 '*' cson0 * cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 22';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRETN '-' DGYRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 23';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRETN '-' DGZRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 24';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETRETN '-' DRETRET)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 25';
        'ERREUR' 5 ;
 'FINSI' ;


*****************************************************
*****************************************************
******* TEST2 ***************************************
*****************************************************
*****************************************************
*
* On compare le jacobien et la variation du residu
* en $DOM1 . 'CENTRE' par rapport à une variation
* infinitésimal en $DOM27 . 'CENTRE'
*

 PCEN27 = ('DOMA' $DOM27 'CENTRE') 'POIN' 1 ;
 

* Les grandeurs pour adimesionner les erreurs

 ro0 = 'EXTRAIRE' RN0 PCEN1 'SCAL' ;
    
 VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
 CN20 = GAMMAN '*' (PN0 '/' RN0) ;
 cson0 = ('EXTRAIRE' CN20 PCEN1 'SCAL') '**' 0.5 ;

 ret0 = ('EXTRAIRE' RETN0 PCEN1 'SCAL') ;

*
* Le jacobien exact. 
* DRR  = d(RES_ro)/dro (variable primale en PCEN27, variable duale en PCEN1) ;
* DGXR = d(RES_gx)/dro (variable primale en PCEN27, variable duale en PCEN1) ;
* ...

 DRR   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMDEN NOMDEN ;
 DGXR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMDEN NOMMOX ;
 DGYR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMDEN NOMMOY ;
 DGZR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMDEN NOMMOZ ;
 DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMDEN NOMRET ;

 DRGX   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOX NOMDEN ;
 DGXGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOX NOMMOX ;
 DGYGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOX NOMMOY ;
 DGZGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOX NOMMOZ ;
 DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOX NOMRET ;

 DRGY   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOY NOMDEN ;
 DGXGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOY NOMMOX ;
 DGYGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOY NOMMOY ;
 DGZGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOY NOMMOZ ;
 DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOY NOMRET ;

 DRGZ   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOZ NOMDEN ;
 DGXGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOZ NOMMOX ;
 DGYGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOZ NOMMOY ;
 DGZGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOZ NOMMOZ ;
 DRETGZ = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMMOZ NOMRET ;

 DRRET   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMRET NOMDEN ;
 DGXRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMRET NOMMOX ;
 DGYRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMRET NOMMOY ;
 DGZRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMRET NOMMOZ ;
 DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN1 NOMRET NOMRET ;


* Le jacobien numerique


 DELTA = 1.0D-5 ;
 
 DRRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMDEN NOMDEN DELTA ;
 DGXRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMDEN NOMMOX DELTA ;
 DGYRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMDEN NOMMOY DELTA ;
 DGZRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMDEN NOMMOZ DELTA ;
 DRETRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMDEN NOMRET DELTA ;
   
 DRGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOX NOMDEN DELTA ;
 DGXGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOX NOMMOX DELTA ;
 DGYGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOX NOMMOY DELTA ;
 DGZGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOX NOMMOZ DELTA ;
 DRETGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMMOX NOMRET DELTA ;

 DRGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOY NOMDEN DELTA ;
 DGXGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOY NOMMOX DELTA ;
 DGYGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOY NOMMOY DELTA ;
 DGZGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOY NOMMOZ DELTA ;
 DRETGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMMOY NOMRET DELTA ;

 DRGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOZ NOMDEN DELTA ;
 DGXGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOZ NOMMOX DELTA ;
 DGYGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOZ NOMMOY DELTA ;
 DGZGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMMOZ NOMMOZ DELTA ;
 DRETGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMMOZ NOMRET DELTA ;

 DRRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN1
   NOMRET NOMDEN DELTA ;
 DGXRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMRET NOMMOX DELTA ;
 DGYRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMRET NOMMOY DELTA ;
 DGZRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1 NOMRET NOMMOZ DELTA ;
 DRETRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN1
   NOMRET NOMRET DELTA ;

* Test des comparaisons jacobien exact-jacobien numerique

 
 ERR1 = ('ABS' (DRRN '-' DRR)) '*' (ro0 '/' (ro0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 1';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRN '-' DGXR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 2';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRN '-' DGYR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 3';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRN '-' DGZR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 4';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETRN '-' DRETR)) '*'
        (ro0 '/' (ret0 '*' cson0)) ; 
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 5';
      'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGXN '-' DRGX))  ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 6';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGXN '-' DGXGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 7';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGXN '-' DGYGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 8';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGXN '-' DGZGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 9';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGXN '-' DRETGX)) '*'
        (ro0  / ret0) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 10';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGYN '-' DRGY))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 11';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGYN '-' DGXGY))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 12';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGYN '-' DGYGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 13';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGYN '-' DGZGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 14';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGYN '-' DRETGY))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 15';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGZN '-' DRGZ))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 16';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGZN '-' DGXGZ))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 17';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGZN '-' DGYGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 18';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGZN '-' DGZGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 19';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETGZN '-' DRETGZ))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 20';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRRETN '-' DRRET)) '*' (ret0 '/' (ro0 '*' cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 21';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRETN '-' DGXRET)) '*'
          (ret0 '/' (ro0 '*' cson0 * cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 22';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRETN '-' DGYRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 23';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRETN '-' DGZRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 24';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETRETN '-' DRETRET)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 25';
        'ERREUR' 5 ;
 'FINSI' ;


*****************************************************
*****************************************************
******* TEST3 ***************************************
*****************************************************
*****************************************************
*
* On observe la variation du residu en $DOM27 . 'CENTRE'
* par rapport à une variation infinitésimal en
* $DOM27 . 'CENTRE' (NB : DOM27 est sur le bord!).
*


* Les grandeurs pour adimesionner les erreurs

 ro0 = 'EXTRAIRE' RN0 PCEN1 'SCAL' ;
    
 VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMMAN ;
 CN20 = GAMMAN '*' (PN0 '/' RN0) ;
 cson0 = ('EXTRAIRE' CN20 PCEN1 'SCAL') '**' 0.5 ;

 ret0 = ('EXTRAIRE' RETN0 PCEN1 'SCAL')  ;

*
* Le jacobien exact. 
* DRR  = d(RES_ro)/dro (variable primale en PCEN27, variable duale en PCEN1) ;
* DGXR = d(RES_gx)/dro (variable primale en PCEN27, variable duale en PCEN1) ;
* ...

 DRR   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMDEN NOMDEN ;
 DGXR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMDEN NOMMOX ;
 DGYR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMDEN NOMMOY ;
 DGZR  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMDEN NOMMOZ ;
 DRETR = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMDEN NOMRET ;

 DRGX   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOX NOMDEN ;
 DGXGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOX NOMMOX ;
 DGYGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOX NOMMOY ;
 DGZGX  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOX NOMMOZ ;
 DRETGX = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOX NOMRET ;

 DRGY   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOY NOMDEN ;
 DGXGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOY NOMMOX ;
 DGYGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOY NOMMOY ;
 DGZGY  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOY NOMMOZ ;
 DRETGY = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOY NOMRET ;

 DRGZ   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOZ NOMDEN ;
 DGXGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOZ NOMMOX ;
 DGYGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOZ NOMMOY ;
 DGZGZ  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOZ NOMMOZ ;
 DRETGZ = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMMOZ NOMRET ;

 DRRET   = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMRET NOMDEN ;
 DGXRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMRET NOMMOX ;
 DGYRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMRET NOMMOY ;
 DGZRET  = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMRET NOMMOZ ;
 DRETRET = JACOVA JACO $DOMTOT LISTINCO PCEN27 PCEN27 NOMRET NOMRET ;


* Le jacobien numerique


 DELTA = 1.0D-5 ;
 
 DRRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMDEN NOMDEN DELTA ;
 DGXRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMDEN NOMMOX DELTA ;
 DGYRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMDEN NOMMOY DELTA ;
 DGZRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMDEN NOMMOZ DELTA ;
 DRETRN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMDEN NOMRET DELTA ;
   
 DRGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMMOX NOMDEN DELTA ;
 DGXGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOX NOMMOX DELTA ;
 DGYGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOX NOMMOY DELTA ;
 DGZGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOX NOMMOZ DELTA ;
 DRETGXN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOX NOMRET DELTA ;

 DRGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMMOY NOMDEN DELTA ;
 DGXGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOY NOMMOX DELTA ;
 DGYGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOY NOMMOY DELTA ;
 DGZGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOY NOMMOZ DELTA ;
 DRETGYN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOY NOMRET DELTA ;

 DRGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27 PCEN27
   NOMMOZ NOMDEN DELTA ;
 DGXGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOZ NOMMOX DELTA ;
 DGYGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOZ NOMMOY DELTA ;
 DGZGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOZ NOMMOZ DELTA ;
 DRETGZN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMMOZ NOMRET DELTA ;

 DRRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMRET NOMDEN DELTA ;
 DGXRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMRET NOMMOX DELTA ;
 DGYRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMRET NOMMOY DELTA ;
 DGZRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27 NOMRET NOMMOZ DELTA ;
 DRETRETN = JACNUM $DOMTOT METO RN0 GN0 RETN0 GAMMAN LISTINCO PCEN27
   PCEN27
   NOMRET NOMRET DELTA ;

* Test des comparaisons jacobien exact-jacobien numerique

 
 ERR1 = ('ABS' (DRRN '-' DRR)) '*' (ro0 '/' (ro0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 1';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRN '-' DGXR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 2';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRN '-' DGYR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 3';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRN '-' DGZR)) '*'
          (ro0 '/' (ro0 '*' cson0 '*' cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 4';
       'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETRN '-' DRETR)) '*'
        (ro0 '/' (ret0 '*' cson0)) ; 
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 5';
      'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGXN '-' DRGX))  ;
 'SI' (ERR1 > ERRTOL) ;
      'MESSAGE' 'Problem 6';
      'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGXN '-' DGXGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 7';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGXN '-' DGYGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 8';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGXN '-' DGZGX)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 9';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGXN '-' DRETGX)) '*'
        (ro0  / ret0) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 10';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGYN '-' DRGY))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 11';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGYN '-' DGXGY))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 12';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGYN '-' DGYGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 13';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGYN '-' DGZGY)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 14';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETGYN '-' DRETGY))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 15';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRGZN '-' DRGZ))  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 16';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXGZN '-' DGXGZ))  '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 17';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYGZN '-' DGYGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 18';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZGZN '-' DGZGZ)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 19';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DRETGZN '-' DRETGZ))  '*'
        (ro0 / ret0)  ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 20';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRRETN '-' DRRET)) '*' (ret0 '/' (ro0 '*' cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 21';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGXRETN '-' DGXRET)) '*'
          (ret0 '/' (ro0 '*' cson0 * cson0))   ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 22';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGYRETN '-' DGYRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 23';
        'ERREUR' 5 ;
 'FINSI' ;

 ERR1 = ('ABS' (DGZRETN '-' DGZRET)) '*' 
             (ret0 '/' (ro0 '*' cson0 * cson0)) ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 24';
        'ERREUR' 5 ;
 'FINSI' ;


 ERR1 = ('ABS' (DRETRETN '-' DRETRET)) '/' cson0 ;
 'SI' (ERR1 > ERRTOL) ;
        'MESSAGE' 'Problem 25';
        'ERREUR' 5 ;
 'FINSI' ;

*****************************************************
*****************************************************
******* TEST4 ***************************************
*****************************************************
*****************************************************
*
* Jacobian == 0
*

 MAIL2 = 'DOMA' $DOMTOT 'FACE' ;

 JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS'
        $DOMTOT LISTINCO MAIL2 'VLH' RN0 VN0 PN0 GAMMAN ;
        ;

 UN = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 
       5 NOMDEN 0.1 NOMMOX 0.11
       NOMMOY 0.15 NOMMOZ 0.17 NOMRET 0.17 ;

 ERRO = 'MAXIMUM' ('KOPS' 'MULT' JACO UN) 'ABS' ;

 'SI' (ERRO > ERRTOL) ;
      'MESSAGE' 'Problem final' ;
      'ERREUR' 5 ;
 'FINSI' ;


*****************************************************
*****************************************************
******* TEST5 ***************************************
*****************************************************
*****************************************************
*
* Jacobian with respect to primitive variables
*
* We have already defined RN0, VN0, PN0, GAMN
*

 LISTCONS = 'MOTS' 'RN' 'RUX' 'RUY' 'RUZ' 'RETN' ;
 
 JACO  = 'KONV' 'VF' 'PERFMONO' 'JACOCONS'
          $DOMTOT LISTCONS 'VLH' RN0 VN0 PN0 GAMMAN ;
 
 LISTPRIM = 'MOTS' 'RN' 'UX' 'UY' 'UZ' 'PN' ;

 DUDV = 'PRIM' 'CONSPRIM' ('DOMA' $DOMTOT 'CENTRE')
         LISTCONS LISTPRIM RN0 VN0 PN0 GAMMAN ;

 JACOP = 'KONV' 'VF' 'PERFMONO' 'JACOPRIM'
         $DOMTOT LISTCONS LISTPRIM 'VLH' RN0 VN0 PN0 GAMMAN ;

 UNP = 'MANUEL' 'CHPO' ('DOMA' $DOMTOT 'CENTRE') 5  'RN' 0.11
       'UX' 0.15 'UY' 0.19 'UZ' 0.20 'PN' 0.21 ;

*  JACOP * UNP = JACO * DUDV * UNP, \forall UNP       
         
 ERRO = 'MAXIMUM' (
     ('KOPS' 'MULT'  JACOP  UNP) '-' 
     ('KOPS' 'MULT'  JACO  ('KOPS' 'MULT' DUDV  UNP))
     ) ;

      
 'SI' (ERRO > ERRTOL) ;
      'MESSAGE' 'Problem final' ;
      'ERREUR' 5 ;
 'FINSI' ;
  
 'FIN' ;
 

 

 

© Cast3M 2003 - All rights reserved.
Disclaimer