* fichier : mdiavf2.dgibi * * Utilisation de l'operateur MDIA pour creér un jacobien analytique * dans le cas d'injection subsonic d'air dans l'air * * A. Beccantini, SFME/LTMF * 'OPTION' 'DIME' 2 'ELEM' 'QUA4' 'ISOV' 'SULI' 'ECHO' 0 'TRAC' 'X' ; GRAPH = VRAI ; GRAPH = FAUX ; ****************** **** MAILLAGE **** ****************** RAF = 8 ; L = 10. ; DX = 1.0 '/' RAF ; NX = 2 ; LINJ = NX '*' DX ; P2 = LINJ 0.0 ; P3 = 0.0 0.0 ; NY = 'ENTIER' ((L '/' DX) '+' 0.5) ; P2P3 = P2 'DROIT' NX P3 ; DOMINT = P2P3 'TRANSLATION' NY (0. L) ; * * Creation of MAILEN (maillage à l'entrée) * LIGAPP = ('CHANGER' 'POI1' P2P3) ; MAILEN = DOMINT 'ELEM' 'APPUYE' 'LARGEMENT' LIGAPP ; * **** Creation of DOMAINE tables via the MODEL object * MDOMINT = 'MODELISER' DOMINT 'EULER' ; MP2P3 = 'MODELISER' P2P3 'EULER' ; MMAILEN = 'MODELISER' MAILEN 'EULER' ; $DOMINT = 'DOMA' MDOMINT 'VF' ; $P2P3 = 'DOMA' MP2P3 'VF' ; $MAILEN = 'DOMA' MMAILEN 'VF' ; QDOMINT = 'DOMA' MDOMINT 'QUAF' ; QP2P3 = 'DOMA' MP2P3 'QUAF' ; QMAILEN = 'DOMA' MMAILEN 'QUAF' ; 'ELIMINATION' (QDOMINT 'ET' QP2P3 'ET' QMAILEN) 0.001 ; 'SI' GRAPH ; 'TRACER' (DOMINT 'ET' (MAILEN 'COULEUR' 'ROUG')) 'TITR' 'Maillage entree'; 'FINSI' ; * * MAIFA1 = internel cells close to ghost cells * SURP2P3 = 'DOMA' $P2P3 'VOLUME' ; VOLDOMI = 'DOMA' $DOMINT 'VOLUME' ; POIN0 = 'POIN' 1 ($P2P3 . 'CENTRE') ; POIN1 = 'POIN' 1 (($DOMINT . 'FACEL') 'ELEM' 'CONTENANT' POIN0) ; MAIFA1 = 'MANUEL' 'POI1' POIN1 ; LISTVOLU = 'PROG' ('EXTRAIRE' VOLDOMI POIN1 'SCAL') ; LISTSURF = 'PROG' ('EXTRAIRE' SURP2P3 POIN0 'SCAL') ; 'REPETER' BLLIM (('NBNO' ($P2P3 . 'CENTRE')) '-' 1) ; POIN0 = 'POIN' (&BLLIM '+' 1) ($P2P3 . 'CENTRE') ; POIN1 = 'POIN' 1 (($DOMINT . 'FACEL') 'ELEM' 'CONTENANT' POIN0) ; MAIFA1 = MAIFA1 'ET' ('MANUEL' 'POI1' POIN1) ; LISTVOLU = LISTVOLU 'ET' ('PROG' ('EXTRAIRE' VOLDOMI POIN1 'SCAL')) ; LISTSURF = LISTSURF 'ET' ('PROG' ('EXTRAIRE' SURP2P3 POIN0 'SCAL')) ; 'FIN' BLLIM ; CHSURF = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LISTSURF 'NATU' 'DISCRET' ; CHVOLU = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LISTVOLU 'NATU' 'DISCRET' ; 'SI' GRAPH ; 'TRACER' (DOMINT 'ET' MAIFA1) 'TITRE' 'Domain and faces -> centres' ; 'FINSI' ; ************** **** I.C. **** ************** UN = ('NOMC' 'RN' ('BRUI' 'BLAN' 'UNIF' 1.0 0.1 ($DOMINT . 'CENTRE')) 'NATU' 'DISCRET') 'ET' ('NOMC' 'RUX' ('BRUI' 'BLAN' 'UNIF' 300.0 10.0 ($DOMINT . 'CENTRE')) 'NATU' 'DISCRET') 'ET' ('NOMC' 'RUY' ('BRUI' 'BLAN' 'UNIF' 300.0 10.0 ($DOMINT . 'CENTRE')) 'NATU' 'DISCRET') 'ET' ('NOMC' 'RETN' ('BRUI' 'BLAN' 'UNIF' 1D6 0.1 ($DOMINT . 'CENTRE')) 'NATU' 'DISCRET') ; ********************************************************************* **** Procedure RESL ************************************************* ********************************************************************* * 'DEBP' RESL ; 'ARGU' RVX*'TABLE' ; * **** Euler Monocomponent 2D * Subsonic injection of air * * A definir: * * RVX . 'DOMA' = table domaine des "internal cells close to the * injection interfaces" * RVX . 'DOMA' ne serve que pour MDIA * * RVX . 'VOLUME' = volume des "internal cells close to the injection * interfaces" * * RVX . 'SURFACE'= CHPOINT defini sur les centres des "internal cells * close to the injection interfaces", qui contient * la surface des faces d'injection * |-------| * | | * +---> | * | | * |-------| * * RVX . 'MAILLAGE' = maillage de 'POI1' (centres des "internal cells * close to the injection interfaces") * * RVX . 'GAMLIM' (objet de type FLOTTANT) (gamma du gaz); * RVX . 'ROVINF' (objet de type FLOTTANT) (flux de masse à l'injection) ; * RVX . 'RTINF' (objet de type FLOTTANT) (temperature à l'injection); * * RVX . 'DX' (objet de type FLOTTANT) (longuer pour le calcul du pas * de temps de stabilité pour l'algorithme temporel * explicite) * RVX . 'ALPHA' (objet de type FLOTTANT) (coefficient de securité pour * le calcul du pas de temps de stabilité pour * l'algorithme temporel explicite) * RV = RVX . 'EQEX' ; $DOMA = RVX . 'DOMA' ; CHVOLUME = RVX . 'VOLUME' ; CHSFACE = RVX . 'SURFACE' ; AA = 'TYPE' (RVX . 'GAMLIM') ; 'SI' ('NEG' AA 'FLOTTANT') ; 'MESSAGE' 'RV . GAMLIM ???' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'TYPE' (RVX . 'ROVINF') ; 'SI' ('NEG' AA 'FLOTTANT') ; 'MESSAGE' 'RV . ROVINF ???' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'TYPE' (RVX . 'RTINF') ; 'SI' ('NEG' AA 'FLOTTANT') ; 'MESSAGE' 'RV . RTINF ???' ; 'ERREUR' 21 ; 'FINSI' ; * Inconnue UN = 'COPIER' (RV . 'UN') ; MAIFA1 = RVX . 'MAILLAGE' ; UNRED = 'REDU' UN MAIFA1 ; RNRED = 'EXCO' 'RN' UNRED ; GNRED = 'EXCO' ('MOTS' 'RUX' 'RUY') UNRED ('MOTS' 'UX' 'UY') ; RETNRED = 'EXCO' 'RETN' UNRED ; GAMLIM = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' (RVX . 'GAMLIM') ; GAMSCAL = (RVX . 'GAMLIM') ; VNRED PNRED = 'PRIM' 'PERFMONO' RNRED GNRED RETNRED GAMLIM ; * LISTREEL pour les conditions limites (flux) . LRET = 'PROG' ; LRUN = 'PROG' ; LR = 'PROG' ; * LISTREEL pour les conditions limites (jacobien) . LRUYR = 'PROG' ; LRETR = 'PROG' ; LRUYUX = 'PROG' ; LRETUX = 'PROG' ; LRUYUY = 'PROG' ; LRETUY = 'PROG' ; LRUYRET = 'PROG' ; LRETRET = 'PROG' ; * Boucle sur maifa1 pour calculer les conditions à imposer NN = 'NBNO' MAIFA1 ; RTG = RVX . 'RTINF' ; GG = RVX . 'ROVINF' ; 'REPETER' BL1 NN ; PCEL = 'POIN' MAIFA1 &BL1 ; SURCEL = 'EXTRAIRE' CHSFACE 'SCAL' PCEL ; VOLCEL = 'EXTRAIRE' CHVOLUME 'SCAL' PCEL ; ROD = 'EXTRAIRE' RNRED 'SCAL' PCEL ; PD = 'EXTRAIRE' PNRED 'SCAL' PCEL ; UYD = 'EXTRAIRE' VNRED 'UY' PCEL ; UXD = 'EXTRAIRE' VNRED 'UX' PCEL ; UND = UYD ; UTD = UXD ; PG = PD ; ROG = PG '/' RTG ; UNG = GG '/' ROG ; RHTG = ((PG '*' GAMSCAL) '/' (GAMSCAL '-' 1.)) '+' (0.5 '*' ROG '*' UNG '*' UNG) ; * DROUYDP = d(RHOUY)/dP_(primitive) DROUYDP = 1. '-' ((GG '*' GG '*' RTG) '/' (PD '*' PD)) ; * DRETDP = d(RET)/dP_(primitive) DRETDP = -1 '*' ((GG '*' GG '*' GG '*' RTG '*' RTG) '/' (PD '*' PD '*' PD)) ; * * d/dro_(conservative) = DPDRO '*' d()/dP_(primitive) DPDRO = (GAMSCAL '-' 1.) '*' ((UXD ** 2) '+' (UYD ** 2)) '/' 2. ; * * d/droux_(conservative) = DPDUX '*' d()/dP_(primitive) DPDUX = -1 '*' (GAMSCAL '-' 1.) '*' UXD ; * * d/drouy_(conservative) = DPDUY '*' d()/dP_(primitive) DPDUY = -1 '*' (GAMSCAL '-' 1.) '*' UYD ; * * d/dret_(conservative) = DPDRET '*' d()/dP_(primitive) DPDRET = (GAMSCAL '-' 1.) ; * * * Le flux * * ^ * |--> * -------------- * LR = LR 'ET' ('PROG' ((ROG '*' UNG) '*' (SURCEL '/' VOLCEL))); LRUN = LRUN 'ET' ('PROG' (((ROG '*' UNG '*' UNG) '+' PG) '*' (SURCEL '/' VOLCEL))) ; LRET = LRET 'ET' ('PROG' ((UNG '*' RHTG) '*' (SURCEL '/' VOLCEL))) ; * * Le jacobien du flux * * Inverse du volume est lié a la syntaxe de MDIA * VOLCEL2 = VOLCEL '*' VOLCEL ; LRUYR = LRUYR 'ET' ('PROG' ((DPDRO '*' DROUYDP) '*' (SURCEL '/' VOLCEL2))) ; LRETR = LRETR 'ET' ('PROG' ((DPDRO '*' DRETDP) '*' (SURCEL '/' VOLCEL2))) ; LRUYUX = LRUYUX 'ET' ('PROG' ((DPDUX '*' DROUYDP) '*' (SURCEL '/' VOLCEL2))) ; LRETUX = LRETUX 'ET' ('PROG' ((DPDUX '*' DRETDP) '*' (SURCEL '/' VOLCEL2))) ; LRUYUY = LRUYUY 'ET' ('PROG' ((DPDUY'*' DROUYDP) '*' (SURCEL '/' VOLCEL2))) ; LRETUY = LRETUY'ET' ('PROG' ((DPDUY'*' DRETDP) '*' (SURCEL '/' VOLCEL2))) ; LRUYRET = LRUYRET 'ET' ('PROG' ((DPDRET '*' DROUYDP) '*' (SURCEL '/' VOLCEL2))) ; LRETRET = LRETRET 'ET' ('PROG' ((DPDRET '*' DRETDP) '*' (SURCEL '/' VOLCEL2))) ; 'FIN' BL1 ; RESLIM = 'MANUEL' 'CHPO' MAIFA1 4 'RN' LR 'RUX' 0.0 'RUY' LRUN 'RETN' LRET 'NATU' 'DISCRET' ; UPC = ((GAMSCAL '*' PG '/' ROG) '**' 0.5) '+' UNG ; IALPDT = 'PROG' (((RVX . 'ALPHA') '*' (RVX . 'DX')) '/' UPC) ; THETA = RVX . 'THETA' ; 'SI' (RVX . 'IMPL') ; * **** Jacobian avec MDIA * * La matrice met en relation les couples suivantes: * PRIMALES DUALES *1 densité (q.d.m.)y *2 densité energie totale * *3 (q.d.m.)x (q.d.m.)y *4 (q.d.m.)x energie totale * *5 (q.d.m.)y (q.d.m.)y *6 (q.d.m.)y energie totale * *7 energie totale (q.d.m.)y *8 energie totale energie totale * * **** Test of inlet implicit boundary conditions * * La matrice met en relation les couples suivantes: * PRIMALES DUALES *1 densité (q.d.m.)y *2 densité energie totale * *3 (q.d.m.)x (q.d.m.)y *4 (q.d.m.)x energie totale * *5 (q.d.m.)y (q.d.m.)y *6 (q.d.m.)y energie totale * *7 energie totale (q.d.m.)y *8 energie totale energie totale * * CHRUYR = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRUYR ; CHRUYR = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRUYR ; CHRETR = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRETR ; CHRETR = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRETR ; CHRUYRUX = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRUYUX ; CHRUYRUX = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRUYRUX ; CHRETRUX = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRETUX ; CHRETRUX = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRETRUX ; CHRUYRUY = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRUYUY ; CHRUYRUY = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRUYRUY ; CHRETRUY = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRETUY ; CHRETRUY = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRETRUY ; CHRUYRET = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRUYRET ; CHRUYRET = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRUYRET ; CHRETRET = 'MANUEL' 'CHPO' MAIFA1 1 'SCAL' LRETRET ; CHRETRET = 'KCHT' $DOMA 'SCAL' 'CENTRE' CHRETRET ; RVDIA = 'EQEX' $DOMA 'ITMA' 1 'OPTI' 'VF' 'IMPL' 'CENTREE' *1 'ZONE' $DOMA 'OPER' 'MDIA' CHRUYR 'INCO' 'RN' 'RUY' *2 'ZONE' $DOMA 'OPER' 'MDIA' CHRETR 'INCO' 'RN' 'RETN' *3 'ZONE' $DOMA 'OPER' 'MDIA' CHRUYRUX 'INCO' 'RUX' 'RUY' *4 'ZONE' $DOMA 'OPER' 'MDIA' CHRETRUX 'INCO' 'RUX' 'RETN' *5 'ZONE' $DOMA 'OPER' 'MDIA' CHRUYRUY 'INCO' 'RUY' 'RUY' ; * RVDIA = 'EQEX' RVDIA 'OPTI' 'VF' 'IMPL' 'CENTREE' *6 'ZONE' $DOMA 'OPER' 'MDIA' CHRETRUY 'INCO' 'RUY' 'RETN' *7 'ZONE' $DOMA 'OPER' 'MDIA' CHRUYRET 'INCO' 'RETN' 'RUY' *8 'ZONE' $DOMA 'OPER' 'MDIA' CHRETRET 'INCO' 'RETN' 'RETN' ; RVDIA . 'INCO' = 'TABLE' 'INCO' ; RVDIA . 'INCO' . 'RN' = 'KCHT' $DOMA 'SCAL' 'CENTRE' 0.0 ; RVDIA . 'INCO' . 'RUX' = 'KCHT' $DOMA 'SCAL' 'CENTRE' 0.0 ; RVDIA . 'INCO' . 'RUY' = 'KCHT' $DOMA 'SCAL' 'CENTRE' 0.0 ; RVDIA . 'INCO' . 'RETN' = 'KCHT' $DOMA 'SCAL' 'CENTRE' 0.0 ; MDIA (RVDIA . '1MDIA') ; MAT1 = RVDIA . '1MDIA' . 'MATELM' ; MDIA (RVDIA . '2MDIA') ; MAT2 = RVDIA . '2MDIA' . 'MATELM' ; MDIA (RVDIA . '3MDIA') ; MAT3 = RVDIA . '3MDIA' . 'MATELM' ; MDIA (RVDIA . '4MDIA') ; MAT4 = RVDIA . '4MDIA' . 'MATELM' ; MDIA (RVDIA . '5MDIA') ; MAT5 = RVDIA . '5MDIA' . 'MATELM' ; MDIA (RVDIA . '6MDIA') ; MAT6 = RVDIA . '6MDIA' . 'MATELM' ; MDIA (RVDIA . '7MDIA') ; MAT7 = RVDIA . '7MDIA' . 'MATELM' ; MDIA (RVDIA . '8MDIA') ; MAT8 = RVDIA . '8MDIA' . 'MATELM' ; IJACO = MAT1 'ET' MAT2 'ET' MAT3 'ET' MAT4 'ET' MAT5 'ET' MAT6 'ET' MAT7 'ET' MAT8 ; 'SINON' ; CACCA IJACO = 'KOPS' 'MATRIK' ; 'FINSI' ; 'RESPRO' IJACO RESLIM IALPDT THETA ; 'FINP' ; ********************************************************************* **** Fin procedure RESL ********************************************* ********************************************************************* ********************************************************************* **** Procedure JACOVA *********************************************** ********************************************************************* * Derivé partielle du residu en un point par rapport * aux variable dans le meme point * 'DEBPROC' JACOVA JACO*'MATRIK' $DOMA*'TABLE' LISTINCO*'LISTMOTS' PPRIM*'POINT' MOTPRI*'MOT' MOTDUA*'MOT'; * PPRIM = point ou est localisé la variable primale * PPRIM = 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 . 'CENTRE') 1 MOTCEL 0.0 'NATURE' 'DISCRET') ; 'FIN' BL1 ; D_DMOT = 'KOPS' JACO 'MULT' CHPUN ; SCAL = 'EXTRAIRE' D_DMOT PPRIM MOTDUA ; 'FINPROC' SCAL ; ********************************************************************* **** Fin procedure JACOVA ******************************************* ********************************************************************* ********************************************************************* **** Procedure JACNUM *********************************************** ********************************************************************* 'DEBPROC' JACNUM RVX*'TABLE' LISTINCO*'LISTMOTS' PPRIM*'POINT' MOTPRI*'MOT' MOTDUA*'MOT' EPSILON*'FLOTTANT'; * PPRIM = point ou est localisé la variable primale * PPRIM = 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 PPRIM ; RV = RVX . 'EQEX' ; UN0 = 'COPIER' (RV . 'UN') ; THETA0 = RVX . 'THETA' ; RVX . 'THETA' = 0.0 ; IMPL0 = RVX . 'IMPL' ; RVX . 'IMPL' = FAUX ; IJACEL CHPRES0 DT ALPDT = RESL RVX ; VAL0 = 'EXTRAIRE' CHPRES0 PPRIM MOTDUA ; * EPSILON = perturbation * 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 ; $DOMA = RVX . 'DOMA' ; CHPERT = ('MANUEL' 'CHPO' ($DOMA . 'CENTRE') 4 'RN' 1.0 'RUX' 1.0 'RUY' 1.0 'RETN' 1.0 'NATU' 'DISCRET') '+' ('MANUEL' 'CHPO' ($DOMA . 'CENTRE') 1 MOTPRI EPSILON) ; RV . 'UN' = UN0 '*' CHPERT LISTINCO LISTINCO LISTINCO ; DELTATOT = ('EXTRAIRE' (RV . 'UN') PPRIM MOTPRI) '-' ('EXTRAIRE' UN0 PPRIM MOTPRI) ; IJACEL CHPRES0 DT ALPDT = RESL RVX ; VAL1 = 'EXTRAIRE' CHPRES0 PPRIM MOTDUA ; RV . 'UN' = UN0 ; RVX . 'THETA' = THETA0 ; RVX . 'IMPL' = IMPL0 ; 'FINPROC' ((VAL1 '-' VAL0) '/' DELTATOT) ; ********************************************************************* ***** Fin procedure JACNUM ****************************************** ********************************************************************* RV = 'TABLE' ; RV . 'UN' = UN ; * **** Table pour RESL * RV . '3RESL' = 'TABLE' ; RV . '3RESL' . 'EQEX' = RV ; RV . '3RESL' . 'THETA' = 1.0 ; RV . '3RESL' . 'IMPL' = VRAI ; RV . '3RESL' . 'DOMA' = $MAILEN ; RV . '3RESL' . 'VOLUME' = CHVOLU ; RV . '3RESL' . 'SURFACE' = CHSURF ; RV . '3RESL' . 'MAILLAGE' = MAIFA1 ; RV . '3RESL' . 'GAMLIM' = 1.4 ; RV . '3RESL' . 'ROVINF' = 1.0 ; RV . '3RESL' . 'RTINF' = (288. '*' 600.) ; RV . '3RESL' . 'DX' = 'MINIMUM' (2 '*' ('DOMA' $DOMINT 'DIAMIN')) ; RV . '3RESL' . 'ALPHA' = 1.0 ; ******************** **** Test case ***** ******************** IJAC IRES IALP THE = RESL (RV . '3RESL') ; POI1 = ($MAILEN . 'CENTRE') 'POIN' 1 ; LISTINC1 = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ; LISTINC2 = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ; DELTA = 1.0D-4 ; 'REPETER' BL1 4 ; 'REPETER' BL2 4 ; MOT1 = 'EXTRAIRE' LISTINC1 &BL1 ; MOT2 = 'EXTRAIRE' LISTINC1 &BL2 ; CACCA1 = JACOVA IJAC $DOMINT LISTINC1 POI1 MOT1 MOT2 ; CACCA2 = JACNUM (RV . '3RESL') LISTINC2 POI1 MOT1 MOT2 DELTA ; 'MESSAGE' ('CHAINE' 'Analyt.= ' CACCA1 ' Num.= ' CACCA2 ' Err = ' ('ABS' (CACCA1 '-' CACCA2))) ; 'SI' (('ABS' CACCA1) > 1.0D-4) ; ERRO = 'ABS' ((CACCA1 '-' CACCA2) '/' CACCA1) ; 'SINON' ; ERRO = 'ABS' (CACCA1 '-' CACCA2) ; 'FINSI' ; 'SI' (ERRO > 5.0D-4) ; 'ERREUR' 5 ; 'FINSI' ; 'FIN' BL2 ; 'FIN' BL1 ; 'FIN' ;