* fichier : domall.dgibi * **** Compatibility check * GRAPH = FAUX ; * CHECKERR to see the error messages. CHECKERR = FAUX ; * **** Nothing from here * 'SI' FAUX ; * **** Till here * 'FINSI' ; ***************************** **** SEG3 in 2D ************* ***************************** 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ; P1 = 1.11 0.0 ; P2 = 1.0 1.13 ; MAIL = P1 'DROIT' 5 P2 ; * * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'SEG3' ; 'ERREUR' 5 ; 'FINSI' ; * Volume VOL0 = 'PSCAL' (P2 'MOIN' P1) (P2 'MOIN' P1) ; VOL0 = VOL0 '**' 0.5 ; AA = 'MANUEL' 'CHPO' (TABM .'CENTRE') 1 'SCAL' 1.0 'NATU' 'DISCRETE' ; VOL1 = 'XTY' (TABM . 'XXVOLUM') AA ('MOTS' 'SCAL') ('MOTS' 'SCAL') ; ERRO = (VOL0 '-' VOL1) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'SEG3' ; 'ERREUR' 5 ; 'FINSI' ; ***************************** **** SEG3 in 3D ************* ***************************** 'SI' CHECKERR ; 'OPTION' 'DIME' 3 'ELEM' 'TRI3' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; MAIL = P1 'DROIT' 1 P2 ; * * * QMAIL1 = QMAIL 'PLUS' (0.0 0.0) ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; 'FINSI' ; ***************************** **** TRI3 in 3D ************* ***************************** 'OPTION' 'DIME' 3 'ELEM' 'TET4' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; P3 = 1.11 1.13 0.0 ; P4 = 0.0 1.0 0.0 ; P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0 (0.0 0.0 2.0) (1.1 1.1 2.0) ; MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4) (P4 'DROIT' 1 P1) 'PLAN' ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TRI3' ; 'ERREUR' 5 ; 'FINSI' ; * Volume NN = 'NBEL' MAIL ; 'REPETER' BL1 NN ; AA = 'MESURE' ('ELEM' &BL1 MAIL) ; BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL' ('POIN' &BL1 (TABM . 'CENTRE')) ; 'LISTE' BB ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3' ; 'ERREUR' 5 ; 'FINSI' ; 'FIN' BL1 ; ***************************** **** QUA4 in 3D ************* ***************************** 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; P3 = 1.11 1.13 0.0 ; P4 = 0.0 1.0 0.0 ; P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0 (0.0 0.0 2.0) (1.1 1.1 2.0) ; MAIL = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4) (P4 'DROIT' 2 P1) 'PLAN' ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'QUA4' ; 'ERREUR' 5 ; 'FINSI' ; * Volume NN = 'NBEL' MAIL ; 'REPETER' BL1 NN ; * * NB If the elts are not in the same plane * 'MESURE' gives not the same results * AA = 'MESURE' ('ELEM' &BL1 MAIL) ; BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL' ('POIN' &BL1 (TABM . 'CENTRE')) ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'QUA4' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL1 ; ***************************** **** TRI3 and QUA4 in 3D *** ***************************** 'OPTION' 'DIME' 3 'ELEM' 'TET4' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; P3 = 1.11 1.13 0.0 ; P4 = 0.0 1.0 0.0 ; P5 = 0.0 2.0 0.0 ; P6 = 1.0 2.0 0.0 ; MAIL1 = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4) (P4 'DROIT' 2 P1) 'PLAN' ; 'OPTION' 'ELEM' 'CUB8' ; MAIL2 = 'SURF' ((P4 'DROIT' 3 P5) 'ET' (P5 'DROIT' 2 P6) 'ET' (P6 'DROIT' 2 P3) 'ET' (P3 'DROIT' 2 P4)) 'PLAN' ; MAIL = MAIL1 'ET' MAIL2 ; 'ELIMINATION' MAIL 0.0001 ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 5 ; 'FINSI' ; * Volume MAIL = (TABM . 'MAILLAGE') ; TYPEL = MAIL 'ELEM' 'TYPE' ; NN0 = 'DIME' TYPEL ; NNE=0 ; 'REPETER' BL0 NN0 ; MAILA = MAIL 'ELEM' ('EXTRAIRE' TYPEL &BL0) ; NN = 'NBEL' MAILA ; 'REPETER' BL1 NN ; NNE = NNE '+' 1 ; * * NB If the elts are not on the same plane * 'MESURE' gives not the same results * AA = 'MESURE' ('ELEM' &BL1 MAILA) ; BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL' ('POIN' NNE (TABM . 'CENTRE')) ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL1 ; 'FIN' BL0 ; ***************************** **** TRI3 in 2D ************* ***************************** 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ; P1 = 0.0 0.0 ; P2 = 1.0 0.0 ; P3 = 1.11 1.13 ; P4 = 0.0 1.0 ; MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4) (P4 'DROIT' 1 P1) 'PLAN' ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TRI3' ; 'ERREUR' 5 ; 'FINSI' ; ***************************** **** QUA4 bizarre in 2D ***** ***************************** 'SI' CHECKERR ; * Center of gravity outside the domain 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ; P1 = 0.0 0.0 ; P2 = 1.0 0.0 ; P3 = 1.0 1.0 ; P4 = 0.75 0.1 ; MAIL = 'DALL' (P1 'DROIT' 1 P2) (P2 'DROIT' 1 P3) (P3 'DROIT' 1 P4) (P4 'DROIT' 1 P1) 'PLAN' ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; 'FINSI' ; * * Element with singular Jacobian allowed since * the center of gravity is inside of the elements * Clockwise orientation of the noeuds. * 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ; P1 = 1.0 1.0 ; P2 = 1.0 0.0 ; P3 = 0.0 0.0 ; P4 = 0.5 0.35 ; MAIL = 'MANUEL' 'QUA4' P1 P2 P3 P4 ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'QUA4' ; 'ERREUR' 5 ; 'FINSI' ; * Position of the center of gravity VOL1 = 'MESURE' ('MANUEL' 'TRI3' P1 P2 P4) ; VOL2 = 'MESURE' ('MANUEL' 'TRI3' P2 P3 P4) ; PCEN1 = (P1 'PLUS' P2 'PLUS' P4) '/' 3. ; PCEN2 = (P2 'PLUS' P3 'PLUS' P4) '/' 3. ; PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) ; PCEN = PCEN '/' (VOL1 '+' VOL2) ; 'ELIMINATION' ((TABM . CENTRE) 'ET' PCEN) 0.001 ; AA = 'DIFF' (TABM . CENTRE) ('MANUEL' 'POI1' PCEN) ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'QUA4' ; 'ERREUR' 5 ; 'FINSI' ; * Volume VOL = 'EXTRAIRE' (TABM . 'XXVOLUM') PCEN 'SCAL' ; ERRO = (VOL '-' (VOL1 '+' VOL2)) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * Normals XP1 = 'COORDONNEE' 1 P1 ; YP1 = 'COORDONNEE' 2 P1 ; XP2 = 'COORDONNEE' 1 P2 ; YP2 = 'COORDONNEE' 2 P2 ; PCEN3 = (P1 'PLUS' P2) '/' 2 ; 'ELIMINATION' ((TABM . 'FACE') 'ET' PCEN3) 0.001 ; VAL = (((XP1 '-' XP2) '**' 2) '+' ((YP2 '-' YP1) '**' 2)) '**' 0.5 ; VALNOR1 = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' PCEN3) 2 'UX' ((YP1 '-' YP2) '/' VAL) 'UY' ((XP2 '-' XP1) '/' VAL) ; VALNOR2 = 'REDU' (TABM . 'XXNORMAF') ('MANUEL' 'POI1' PCEN3) ; ERRO = 'MAXIMUM' (VALNOR1 '-' VALNOR2) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * We check that the normals modulus are 1 * AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' ('CHAIN' 'Problem QUA4') ; 'FINSI' ; * * Matrot * AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY') ('MOTS' 'UX' 'UY') ; ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY') ('MOTS' 'UX' 'UY') ; ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * Vector product COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ; COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ; ERRO = 'MAXIMUM' (COMPZ '-' 1.) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; ***************************** **** QUA4 in 2D ************* ***************************** 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ; P1 = 0.0 0.0 ; P2 = 1.0 0.0 ; P3 = 1.11 1.13 ; P4 = 0.0 1.0 ; MAIL = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4) (P4 'DROIT' 2 P1) 'PLAN' ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'QUA4' ; 'ERREUR' 5 ; 'FINSI' ; ***************************** **** TRI3 and QUA4 in 2D *** ***************************** 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ; P1 = 0.0 0.0 ; P2 = 1.0 0.0 ; P3 = 1.11 1.13 ; P4 = 0.0 1.0 ; P5 = 0.0 2.0 ; P6 = 1.0 2.0 ; MAIL1 = 'DALL' (P1 'DROIT' 2 P2) (P2 'DROIT' 2 P3) (P3 'DROIT' 2 P4) (P4 'DROIT' 2 P1) 'PLAN' ; 'OPTION' 'ELEM' 'QUA4' ; MAIL2 = 'SURF' ((P4 'DROIT' 3 P5) 'ET' (P5 'DROIT' 2 P6) 'ET' (P6 'DROIT' 2 P3) 'ET' (P3 'DROIT' 2 P4)) 'PLAN' ; MAIL = MAIL1 'ET' MAIL2 ; 'ELIMINATION' MAIL 0.0001 ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF ' ; QMAIL = TABM . 'QUAF' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 5 ; 'FINSI' ; * Volume MAIL = (TABM . 'MAILLAGE') ; TYPEL = MAIL 'ELEM' 'TYPE' ; NN0 = 'DIME' TYPEL ; NNE=0 ; 'REPETER' BL0 NN0 ; MAILA = MAIL 'ELEM' ('EXTRAIRE' TYPEL &BL0) ; NN = 'NBEL' MAILA ; 'REPETER' BL1 NN ; NNE = NNE '+' 1 ; AA = 'MESURE' ('ELEM' &BL1 MAILA) ; BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL' ('POIN' NNE (TABM . 'CENTRE')) ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL1 ; 'FIN' BL0 ; * Sommet MAILS = 'CHANGER' MAIL 'POI1' ; AA = 'DIFF' MAILS (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * Comparaison complete 'NAVIER_STOKES' - 'EULER' MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; TAB2 . 'PRECONDI' = 1 ; AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'DOMA' TAB2 'XXSURFAC' ; CHPO2 = TABM . 'XXSURFAC' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'DOMA' TAB2 'XXVOLUM' ; CHPO2 = TABM . 'XXVOLUM' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'ABS' (TABM . 'XXNORMAF') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = (TABM . 'XXDIEMIN') ; CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * on the border * AA = 'CONTOUR' MAIL ; CC = 'MODELISER' AA 'EULER' ; TT = 'DOMA' CC 'VF' ; BB = TT. 'QUAF' ; 'ELIMINATION' BB (TABM . 'QUAF') 0.0001 ; DD = TT . 'CENTRE' ; VALNOR = 'REDU' (TABM . 'XXNORMAF') DD ; VALSUR = 'REDU' (TABM . 'XXSURFAC') DD ; AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' DD 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY') ('MOTS' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' 'TRI3 et QUA4' ; 'FINSI' ; * * We check that each element satisfies the property * (normals times surfaces) = zero * * ELTFA and MAIL have the same structure * LISTYP = (TABM . 'ELTFA') 'ELEM' 'TYPE' ; LISTYP1 = (TABM . 'QUAF') 'ELEM' 'TYPE' ; * NELEM = 0 ; 'REPETER' BL1 ('DIME' LISTYP) ; MAIL1 = 'ELEM' (TABM . 'ELTFA') ('EXTRAIRE' LISTYP &BL1) ; MAIL2 = 'ELEM' (TABM . 'QUAF') ('EXTRAIRE' LISTYP1 &BL1) ; NM1 = 'NBEL' MAIL1 ; NM2 = 'NBEL' MAIL2 ; 'SI' ('NEG' NM1 NM2) ; 'ERREUR' 'QUAF and ELTFA non compatible' ; 'ERREUR' 21 ; 'FINSI' ; 'REPETER' BL2 ('NBEL' MAIL1) ; NELEM = NELEM '+' 1 ; ELE1 = 'ELEM' MAIL1 &BL2 ; ELE2 = 'CHANGER' ELE1 'POI1' ; NM2 = 'NBNO' ELE2 ; ELE3 = 'ELEM' MAIL2 &BL2 ; ELE4 = 'CHANGER' ELE3 'POI1' ; NM4 = 'NBNO' ELE4 ; ELE5 = 'DIFF' ELE4 ELE2 ; NM5 = 'NBNO' ELE5 ; 'SI' ('NEG' (NM2 '+' NM5) NM4) ; 'ERREUR' 'QUAF and ELTFA non compatible' ; 'ERREUR' 21 ; 'FINSI' ; PCEN = 'POIN' (TABM . 'CENTRE') NELEM ; DSURF = 0.0 0.0 ; 'REPETER' BL3 ('NBEL' ELE2) ; PFAC = 'POIN' &BL3 ELE2 ; SURFF = 'EXTRAIRE' (TABM . 'XXSURFAC') 'SCAL' PFAC ; PNORM = ('EXTRAIRE' (TABM . 'XXNORMAF') 'UX' PFAC) ('EXTRAIRE' (TABM . 'XXNORMAF') 'UY' PFAC); PCF = PFAC 'MOIN' PCEN ; DORIE = 'SIGNE' ('PSCAL' PNORM PCF) ; DSURF = DSURF 'PLUS' (DORIE * PNORM * SURFF) ; 'FIN' BL3 ; AA = 'MAXIMUM' ('ABS' ('PROG' ('COORDONNEE' 1 DSURF) ('COORDONNEE' 2 DSURF) ('COORDONNEE' 3 DSURF))) ; 'SI' (AA > 1.0D-12) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL2 ; 'FIN' BL1 ; * ****************************** **** TET4 ******************** ****************************** * 'OPTION' 'DIME' 3 'ELEM' 'TET4' ; * P1, P2, P3 clockwise P1 = 1.0 0.0 0.0 ; P2 = 0.0 0.0 0.0 ; P3 = 1.11 1.13 0.0 ; P4 = -0.11 1.73 1.11 ; P1 P2 P3 P4 = P1 P2 P3 P4 'TOURNER' 15.0 (0.0 0.0 2.0) (1.1 1.1 2.0) ; PCEN = P1 'PLUS' P2 'PLUS' P3 'PLUS' P4 ; PCEN = PCEN '/' 4. ; MAIL = 'MANUEL' 'TET4' P1 P2 P3 P4 ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TET4' ; 'ERREUR' 5 ; 'FINSI' ; 'ELIMINATION' ((TABM. 'CENTRE') 'ET' PCEN) 0.0001 ; AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM. 'CENTRE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'TET4' ; 'ERREUR' 5 ; 'FINSI' ; * Volume NN = 'NBEL' MAIL ; 'REPETER' BL1 NN ; AA = 'MESURE' ('ELEM' &BL1 MAIL) ; BB = 'EXTRAIRE' (TABM . 'XXVOLUM') 'SCAL' ('POIN' &BL1 (TABM . 'CENTRE')) ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TET4' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL1 ; * Sommet MAILS = 'CHANGER' MAIL 'POI1' ; AA = 'DIFF' MAILS (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TET4' ; 'ERREUR' 21 ; 'FINSI' ; * Comparaison complete 'NAVIER_STOKES' - 'EULER' MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; TAB2 . 'PRECONDI' = 1 ; AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'DOMA' TAB2 'XXSURFAC' ; CHPO2 = TABM . 'XXSURFAC' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'DOMA' TAB2 'XXVOLUM' ; CHPO2 = TABM . 'XXVOLUM' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'ABS' (TABM . 'XXNORMAF') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = (TABM . 'XXDIEMIN') ; CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * * We check the interfaces * PCEN1 = (P1 'PLUS' P2 'PLUS' P3) '/' 3. ; PCEN2 = (P2 'PLUS' P3 'PLUS' P4) '/' 3. ; PCEN3 = (P3 'PLUS' P4 'PLUS' P1) '/' 3. ; PCEN4 = (P4 'PLUS' P1 'PLUS' P2) '/' 3. ; * A1 = 'PVECT' (P2 'MOIN' P1) (P3 'MOIN' P1) ; A2 = 'PVECT' (P3 'MOIN' P2) (P4 'MOIN' P2) ; A3 = 'PVECT' (P4 'MOIN' P3) (P1 'MOIN' P3) ; A4 = 'PVECT' (P1 'MOIN' P4) (P2 'MOIN' P4) ; VALSUR1 = 'PROG' ('PSCAL' A1 A1) ('PSCAL' A2 A2) ('PSCAL' A3 A3) ('PSCAL' A4 A4) ; VALSUR1 = VALSUR1 '**' 0.5 ; VALSUR1 = VALSUR1 '*' 0.5 ; VALSURM = 'MANUEL' 'QUA4' PCEN1 PCEN2 PCEN3 PCEN4 ; 'ELIMINATION' VALSURM 0.001 (TABM . 'FACE') ; VALSUR2 = 'MANUEL' 'CHPO' VALSURM 1 'SCAL' VALSUR1 ; ERRO = 'MAXI' (VALSUR '-' VALSUR2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * We check that the normals modulus are 1 * AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * We check the normal in one face (P1, P2, P4) * VECNOR1 = 'PVEC' (P4 'MOIN' P1) (P2 'MOIN' P1) ; VECNOR1 = VECNOR1 '/' (('PSCAL' VECNOR1 VECNOR1) '**' 0.5) ; VALNOR1 = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' PCEN4) 3 'UX' ('COORDONNEE' 1 VECNOR1) 'UY' ('COORDONNEE' 2 VECNOR1) 'UZ' ('COORDONNEE' 3 VECNOR1) ; ERRO = 'MAXI' (VALNOR1 '-' ('REDU' VALNOR ('MANUEL' 'POI1' PCEN4))) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'SCAL' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * Matrot * AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ; COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ; COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ; COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ; COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ; COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ; COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; ****************************** **** PYR5 ******************** ****************************** * * General case * 'OPTION' 'DIME' 3 'ELEM' 'PYR5' ; P1 = 0.0 0.0 0.11 ; P2 = 1.1 0.0 0.13 ; P3 = 1.0 1.3 0.15 ; P4 = 0.0 1.0 0.0; P5 = 0.5 0.5 1.0 ; P1 P2 P3 P4 P5 = P1 P2 P3 P4 P5 'TOURNER' 15.0 (0.0 0.0 4.0) (1.1 1.1 4.0) ; MAIL = 'MANUEL' 'PYR5' P1 P2 P3 P4 P5 ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; MAIL1 = 'MANUEL' 'QUA4' P1 P2 P3 P4 ; MODM1 = 'MODELISER' MAIL1 'EULER' ; TABM1 = 'DOMA' MODM1 'VF' ; QMAIL1 = TABM1 . 'QUAF' ; 'ELIMINATION' QMAIL QMAIL1 0.001 ; PCENF = 'POIN' 1 (TABM1 . 'CENTRE') ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 5 ; 'FINSI' ; * Volume as the volume of 4 tetrahedra VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P2 PCENF P5) ; VOL2 = 'MESURE' ('MANUEL' 'TET4' P2 P3 PCENF P5) ; VOL3 = 'MESURE' ('MANUEL' 'TET4' P3 P4 PCENF P5) ; VOL4 = 'MESURE' ('MANUEL' 'TET4' P4 P1 PCENF P5) ; VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ; VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ; ERRO = (VOL0 '-' VOL) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; * Centre PCEN1 = P1 'PLUS' P2 'PLUS' PCENF 'PLUS' P5 ; PCEN1 = PCEN1 '/' 4. ; PCEN2 = P2 'PLUS' P3 'PLUS' PCENF 'PLUS' P5 ; PCEN2 = PCEN2 '/' 4. ; PCEN3 = P3 'PLUS' P4 'PLUS' PCENF 'PLUS' P5 ; PCEN3 = PCEN3 '/' 4. ; PCEN4 = P4 'PLUS' P1 'PLUS' PCENF 'PLUS' P5 ; PCEN4 = PCEN4 '/' 4. ; PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) 'PLUS' (VOL3 * PCEN3) 'PLUS' (VOL4 * PCEN4) ; PCEN = PCEN '/' VOL ; 'ELIMINATION' (PCEN 'ET' (TABM . 'CENTRE')) 0.0001 ; AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM . 'CENTRE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 5 ; 'FINSI' ; * Normals and surface PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' PCENF) (P4 'MOIN' PCENF)) ; PNOR2 = 0.5 '*' ('PVEC' (P2 'MOIN' PCENF) (P1 'MOIN' PCENF)) ; PNOR3 = 0.5 '*' ('PVEC' (P3 'MOIN' PCENF) (P2 'MOIN' PCENF)) ; PNOR4 = 0.5 '*' ('PVEC' (P4 'MOIN' PCENF) (P3 'MOIN' PCENF)) ; PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ; XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ; PNOR = PNOR '/' XSURF ; AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCENF)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 3 'UX' ('COORDONNEE' 1 PNOR) 'UY' ('COORDONNEE' 2 PNOR) 'UZ' ('COORDONNEE' 3 PNOR); ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCENF)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 1 'SCAL' XSURF ; ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; * * Particular case (base bizarre) * Clockwise orientation. 'OPTION' 'DIME' 3 'ELEM' 'PYR5' ; P1 = 0.0 0.0 0.12 ; P2 = 1.0 0.0 -0.1 ; P3 = 1.0 1.0 0.31 ; P4 = 0.5 0.4 -0.21 ; P5 = 0.5 0.5 2.0 ; P1 P2 P3 P4 P5 = P1 P2 P3 P4 P5 'TOURNER' 15.0 (0.0 0.0 4.0) (1.1 1.1 4.0) ; MAIL = 'MANUEL' 'PYR5' P1 P2 P3 P4 P5 ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; MAIL1 = 'MANUEL' 'QUA4' P1 P2 P3 P4 ; MODM1 = 'MODELISER' MAIL1 'EULER' ; TABM1 = 'DOMA' MODM1 'VF' ; QMAIL1 = TABM1 . 'QUAF' ; 'ELIMINATION' QMAIL QMAIL1 0.001 ; PCENF = 'POIN' 1 (TABM1 . 'CENTRE') ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 5 ; 'FINSI' ; * Volume as the volume of 4 tetrahedra VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P2 PCENF P5) ; VOL2 = 'MESURE' ('MANUEL' 'TET4' P2 P3 PCENF P5) ; VOL3 = 'MESURE' ('MANUEL' 'TET4' P3 P4 PCENF P5) ; VOL4 = 'MESURE' ('MANUEL' 'TET4' P4 P1 PCENF P5) ; VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ; VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ; ERRO = (VOL0 '-' VOL) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; * Centre PCEN1 = P1 'PLUS' P2 'PLUS' PCENF 'PLUS' P5 ; PCEN1 = PCEN1 '/' 4. ; PCEN2 = P2 'PLUS' P3 'PLUS' PCENF 'PLUS' P5 ; PCEN2 = PCEN2 '/' 4. ; PCEN3 = P3 'PLUS' P4 'PLUS' PCENF 'PLUS' P5 ; PCEN3 = PCEN3 '/' 4. ; PCEN4 = P4 'PLUS' P1 'PLUS' PCENF 'PLUS' P5 ; PCEN4 = PCEN4 '/' 4. ; PCEN = (VOL1 * PCEN1) 'PLUS' (VOL2 * PCEN2) 'PLUS' (VOL3 * PCEN3) 'PLUS' (VOL4 * PCEN4) ; PCEN = PCEN '/' VOL ; 'ELIMINATION' (PCEN 'ET' (TABM . 'CENTRE')) 0.0001 ; AA = 'DIFF' ('MANUEL' 'POI1' PCEN) (TABM . 'CENTRE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 5 ; 'FINSI' ; * Normals and surface PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' PCENF) (P4 'MOIN' PCENF)) ; PNOR2 = 0.5 '*' ('PVEC' (P2 'MOIN' PCENF) (P1 'MOIN' PCENF)) ; PNOR3 = 0.5 '*' ('PVEC' (P3 'MOIN' PCENF) (P2 'MOIN' PCENF)) ; PNOR4 = 0.5 '*' ('PVEC' (P4 'MOIN' PCENF) (P3 'MOIN' PCENF)) ; PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ; XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ; PNOR = PNOR '/' XSURF ; AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCENF)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 3 'UX' ('COORDONNEE' 1 PNOR) 'UY' ('COORDONNEE' 2 PNOR) 'UZ' ('COORDONNEE' 3 PNOR); ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCENF)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCENF) 1 'SCAL' XSURF ; ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PYR5' ; 'ERREUR' 21 ; 'FINSI' ; * * We check that the normals modulus are 1 * VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' 'PYR5' ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'SCAL' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' 'PYR5' ; 'FINSI' ; * * We check the triangular faces. * PCEN1 = (P1 'PLUS' P2 'PLUS' P5) '/' 3. ; PCEN2 = (P2 'PLUS' P3 'PLUS' P5) '/' 3. ; PCEN3 = (P3 'PLUS' P4 'PLUS' P5) '/' 3. ; PCEN4 = (P4 'PLUS' P1 'PLUS' P5) '/' 3. ; * A1 = 'PVECT' (P1 'MOIN' P5) (P2 'MOIN' P5) ; A2 = 'PVECT' (P2 'MOIN' P5) (P3 'MOIN' P5) ; A3 = 'PVECT' (P3 'MOIN' P5) (P4 'MOIN' P5) ; A4 = 'PVECT' (P4 'MOIN' P5) (P1 'MOIN' P5) ; VALSUR1 = 'PROG' ('PSCAL' A1 A1) ('PSCAL' A2 A2) ('PSCAL' A3 A3) ('PSCAL' A4 A4) ; VALSUR1 = VALSUR1 '**' 0.5 ; VALSUR1 = VALSUR1 '*' 0.5 ; VALSURM = 'MANUEL' 'QUA4' PCEN1 PCEN2 PCEN3 PCEN4 ; 'ELIMINATION' VALSURM 0.001 (TABM . 'FACE') ; VALSUR2 = 'MANUEL' 'CHPO' VALSURM 1 'SCAL' VALSUR1 ; ERRO = 'MAXI' (('REDU' VALSUR VALSURM) '-' VALSUR2) 'ABS' ; 'SI' (ERRO > 1.0D-7) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * * Matrot * AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ; COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ; COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ; COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ; COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ; COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ; COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * **** Plusieur pyr5 et CUB8 ; * P1 = 1.0 0.0 0.0 ; P2 = 0.0 0.0 0.0 ; P3 = 0.0 1.0 0.0 ; P4 = 1.0 1.0 0.0 ; P5 = 1.0 0.0 1.0 ; P6 = 0.0 0.0 1.0 ; P7 = 0.0 1.0 1.0 ; P8 = 1.0 1.0 1.0 ; P9 = 0.5 0.5 0.5 ; P10= 1.0 0.0 2.0 ; P11= 0.0 0.0 2.0 ; P12= 0.0 1.0 2.0 ; P13= 1.0 1.0 2.0 ; * MAIL1 = 'MANUEL' 'PYR5' P1 P2 P6 P5 P9 ; MAIL2 = 'MANUEL' 'PYR5' P1 P4 P8 P5 P9 ; MAIL3 = 'MANUEL' 'PYR5' P8 P7 P3 P4 P9 ; MAIL4 = 'MANUEL' 'PYR5' P7 P6 P2 P3 P9 ; MAIL5 = 'MANUEL' 'PYR5' P1 P2 P3 P4 P9 ; MAIL6 = 'MANUEL' 'PYR5' P5 P6 P7 P8 P9 ; MAIL7 = 'MANUEL' 'CUB8' P5 P6 P7 P8 P10 P11 P12 P13 ; MAILT1 = MAIL1 'ET' MAIL2 'ET' MAIL3 'ET' MAIL4 'ET' MAIL5 'ET' MAIL6 'ET' MAIL7 ; MAILT2 = MAILT1 'PLUS' (1.0 0.0 0.0) ; MAILT3 = MAILT2 'PLUS' (1.0 0.0 0.0) ; MAILT1 = MAILT1 'ET' MAILT2 'ET' MAILT3 ; 'ELIMINATION' MAILT1 0.001 ; MAILT2 = MAILT1 'PLUS' (0.0 1.0 0.0) ; MAILT3 = MAILT2 'PLUS' (0.0 1.0 0.0) ; MAILT1 = MAILT1 'ET' MAILT2 'ET' MAILT3 ; 'ELIMINATION' MAILT1 0.001 ; MAILT2 = MAILT1 'PLUS' (0.0 0.0 2.0) ; MAILT3 = MAILT2 'PLUS' (0.0 0.0 2.0) ; MAIL = MAILT1 'ET' MAILT2 'ET' MAILT3 ; 'ELIMINATION' MAIL 0.001 ; ENVMAI = 'ENVELOPPE' MAIL ; INTMAIL = 'DIFF' ('CHANGER' 'POI1' MAIL) ('CHANGER' 'POI1' ENVMAI) ; CHPO1 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ; CHPO2 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ; CHPO3 = 'BRUI' 'BLAN' 'UNIF' 0.0 0.2 INTMAIL ; CHPO = ('NOMC' CHPO1 'UX' 'NATU' 'DISCRETE') 'ET' ('NOMC' CHPO2 'UY' 'NATU' 'DISCRETE') 'ET' ('NOMC' CHPO3 'UZ' 'NATU' 'DISCRETE') ; 'FORME' CHPO ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; VOLU0 = 'MESURE' MAIL ; VOLU1 = 'XTY' (TABM . 'XXVOLUM') ('MANUEL' 'CHPO' (TABM . 'CENTRE') 1 'SCAL' 1.0) ('MOTS' 'SCAL') ('MOTS' 'SCAL') ; ERRO = (VOLU0 '-' VOLU1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem PYR5') ; 'FINSI' ; * ****************************** **** PRI6 ******************** ****************************** * * * Clockwise direction * 'OPTION' 'DIME' 3 'ELEM' 'PRI6' ; P1 = 0.1 0.0 0.1 ; P3 = 1.0 1.1 -0.13 ; P5 = 1.11 0.11 0.13 ; P10 = 0.11 0.2 3.1 ; P12 = 1.11 1. 2.7 ; P14 = 1.1 0.11 3.23 ; * P1 P3 P5 P10 P12 P14 = P1 P3 P5 P10 P12 P14 'TOURNER' 15.0 (0.0 0.0 5.0) (1.1 1.1 6.0) ; * MAIL = 'MANUEL' 'PRI6' P1 P3 P5 P10 P12 P14 ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; QMAIL1 = 'CHANGER' QMAIL 'POI1' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; VEC1 = 'VECTEUR' (TABM . 'XXNORMAF') 0.1 'UX' 'UY' 'UZ' 'ROUG' ; 'TRACER' MAIL VEC1 'TITRE' 'Normals' ; 'FINSI' ; * P16 = 'POIN' 16 QMAIL1 ; P17 = 'POIN' 17 QMAIL1 ; P18 = 'POIN' 18 QMAIL1 ; P19 = 'POIN' 19 QMAIL1 ; P20 = 'POIN' 20 QMAIL1 ; * P21 = 'POIN' 21 QMAIL1 ; * * Volume as the volume of 14 tetrahedra * VOL1 = 'MESURE' ('MANUEL' 'TET4' P1 P3 P5 P21) ; VOL2 = 'MESURE' ('MANUEL' 'TET4' P10 P12 P14 P21) ; * VOL3 = 'MESURE' ('MANUEL' 'TET4' P1 P3 P16 P21) ; VOL4 = 'MESURE' ('MANUEL' 'TET4' P3 P12 P16 P21) ; VOL5 = 'MESURE' ('MANUEL' 'TET4' P12 P10 P16 P21) ; VOL6 = 'MESURE' ('MANUEL' 'TET4' P10 P1 P16 P21) ; * VOL7 = 'MESURE' ('MANUEL' 'TET4' P3 P5 P17 P21) ; VOL8 = 'MESURE' ('MANUEL' 'TET4' P5 P14 P17 P21) ; VOL9 = 'MESURE' ('MANUEL' 'TET4' P14 P12 P17 P21) ; VOL10 = 'MESURE' ('MANUEL' 'TET4' P12 P3 P17 P21) ; * VOL11 = 'MESURE' ('MANUEL' 'TET4' P5 P14 P18 P21) ; VOL12 = 'MESURE' ('MANUEL' 'TET4' P14 P10 P18 P21) ; VOL13 = 'MESURE' ('MANUEL' 'TET4' P10 P1 P18 P21) ; VOL14 = 'MESURE' ('MANUEL' 'TET4' P1 P5 P18 P21) ; * VOL = VOL1 '+' VOL2 '+' VOL3 '+' VOL4 '+' VOL5 '+' VOL6 '+' VOL7 '+' VOL8 '+' VOL9 '+' VOL10 '+' VOL11 '+' VOL12 '+' VOL13 '+' VOL14 ; * VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ; * ERRO = (VOL0 '-' VOL) 'ABS' ; * 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; * Sommet MAILS = 'CHANGER' MAIL 'POI1' ; AA = 'DIFF' MAILS (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER') MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; MAIL1 = (TAB2 . 'ELTFA') ; MAIL2 = (TABM . 'ELTFA') ; AA = 'DIFF' MAIL1 MAIL2 ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * * Here we deplace the center of the gravity and we put * it outside. * But 'DOMA' rechanges its position. * * 'SI' CHECKERR ; * 'MESSAGE' 'PRI6' ; * 'MESSAGE' 'On deplace le centre de l''elt dehors' ; * 'MESSAGE' ; * AA = 'CHANGER' 'POI1' QMAIL ; * DP = ('POIN' 19 AA) 'MOIN' ('POIN' 21 AA) ; * BB = 'MANUEL' 'CHPO' ('MANUEL' 'POI1' ('POIN' 21 AA)) 3 * 'UX' (2 '*' ('COORDONNEE' 1 DP)) * 'UY' (2 '*' ('COORDONNEE' 2 DP)) * 'UZ' (2 '*' ('COORDONNEE' 3 DP)) ; * 'FORME' BB ; * 'SI' GRAPH ; * 'TRACER' QMAIL 'TITRE' 'Centre dehors' ; * 'FINSI' ; * MODM = 'MODELISER' QMAIL 'EULER' ; * TABM = 'DOMA' MODM 'VF' ; * 'OPTION' DONN 5 ; * 'FINSI' ; * * Normals and surface * We consider the QUA5 P1 P3 P12 P10 P16 * The point are clockwise oriented PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' P16) (P3 'MOIN' P16)) ; PNOR2 = 0.5 '*' ('PVEC' (P3 'MOIN' P16) (P12 'MOIN' P16)) ; PNOR3 = 0.5 '*' ('PVEC' (P12 'MOIN' P16) (P10 'MOIN' P16)) ; PNOR4 = 0.5 '*' ('PVEC' (P10 'MOIN' P16) (P1 'MOIN' P16)) ; PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ; XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ; PNOR = -1 '*' (PNOR '/' XSURF) ; AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' P16)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P16) 3 'UX' ('COORDONNEE' 1 PNOR) 'UY' ('COORDONNEE' 2 PNOR) 'UZ' ('COORDONNEE' 3 PNOR); ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' P16)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P16) 1 'SCAL' XSURF ; ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; * * We check that the normals modulus are 1 * VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' 'PRI6' ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'SCAL' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' 'PRI6'; 'FINSI' ; * * We check one triangular face. * PCEN1 = (P1 'PLUS' P3 'PLUS' P5) '/' 3. ; 'ELIMINATION' ((TABM . 'FACE') 'ET' PCEN1) 0.0001 ; PNOR = 0.5 '*' ('PVEC' (P3 'MOIN' P1) (P5 'MOIN' P1)) ; XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ; PNOR = (PNOR '/' XSURF) ; AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' PCEN1)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCEN1) 3 'UX' ('COORDONNEE' 1 PNOR) 'UY' ('COORDONNEE' 2 PNOR) 'UZ' ('COORDONNEE' 3 PNOR); ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' PCEN1)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' PCEN1) 1 'SCAL' XSURF ; ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'PRI6' ; 'ERREUR' 21 ; 'FINSI' ; ****************************** **** CUB8 ******************** ****************************** * * Particular case * 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; P3 = 1.0 1.0 0.0 ; P4 = 0.0 1.0 0.0 ; MAILB = 'DALLER' (P1 'DROIT' 4 P2) (P2 'DROIT' 4 P3) (P3 'DROIT' 4 P4) (P4 'DROIT' 4 P1) 'PLAN' ; MAIL = 'VOLUME' MAILB 'TRANSLATION' 4 (0.0 0.0 4.0) ; MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * Comparaison complete 'NAVIER_STOKES' - 'EULER' MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; TAB2 . 'PRECONDI' = 1 ; AA = 'DIFF' (TAB2 . 'QUAF') (TABM . 'QUAF') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'MAILLAGE') (TABM . 'MAILLAGE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'CENTRE') (TABM . 'CENTRE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'SOMMET') (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'ELTFA') (TABM . 'ELTFA') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * XXSURFAC, XXNORMAF, XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'DOMA' TAB2 'XXSURFAC' ; CHPO2 = TABM . 'XXSURFAC' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'DOMA' TAB2 'XXVOLUM' ; CHPO2 = TABM . 'XXVOLUM' ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; CHPO1 = 'ABS' (TABM . 'XXNORMAF') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXNORMAF') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * Normales dans la meme direction que FACEL NNO = 'NBEL' (TABM . 'FACEL') ; 'REPETER' BL1 NNO ; AA = 'ELEM' &BL1 (TABM . 'FACEL') ; BB = 'CHANGER' AA 'POI1' ; P1 = 'POIN' 1 BB ; P2 = 'POIN' 2 BB ; VALX = ('COORDONNEE' 1 P2) '-' ('COORDONNEE' 1 P1) ; VALY = ('COORDONNEE' 2 P2) '-' ('COORDONNEE' 2 P1) ; VALZ = ('COORDONNEE' 3 P2) '-' ('COORDONNEE' 3 P1) ; VALX1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UX' P2 ; VALY1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UY' P2 ; VALZ1 = 'EXTRAIRE' (TABM . 'XXNORMAF') 'UZ' P2 ; VAL = (VALX '*' VALX1) '+' (VALY '*' VALY1) '+' (VALZ '*' VALZ1) ; 'SI' (VAL < 0) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL1 ; CHPO1 = (TABM . 'XXDIEMIN') ; CHPO2 = ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * **** MATROT dans le cas NAVIER_STOKES * * * General case * Clockwise orientation * 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ; P1 = 0.10 0.20 0.11 ; P3 = 0.01 1.03 -0.11 ; P5 = 1.03 1.04 0.05 ; P7 = 1.01 0.02 0.03 ; P13 = 0.05 0.04 2.11 ; P15 = 0.08 1.01 1.91 ; P17 = 1.07 1.02 2.15 ; P19 = 1.06 0.03 2.13 ; * * P1 P3 P5 P7 P13 P15 P17 P19 = P1 P3 P5 P7 P13 P15 P17 P19 * 'TOURNER' 15.0 (0.0 0.0 5.0) (1.1 1.1 6.0) ; * MAIL = 'MANUEL' 'CUB8' P1 P3 P5 P7 P13 P15 P17 P19 ; MODM = 'MODELISER' MAIL 'EULER' ; QMAIL = TABM . 'QUAF' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * QMAIL1 = 'CHANGER' QMAIL 'POI1' ; P21 = 'POIN' QMAIL1 21 ; P22 = 'POIN' QMAIL1 22 ; P23 = 'POIN' QMAIL1 23 ; P24 = 'POIN' QMAIL1 24 ; P25 = 'POIN' QMAIL1 25 ; P26 = 'POIN' QMAIL1 26 ; P27 = 'POIN' QMAIL1 27 ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 5 ; 'FINSI' ; * * * Volume * VOL = 0.0D0 ; QC = P27 ; 'REPETER' BL1 6 ; 'SI' ('EGA' &BL1 1) ; Q1 = P1 ; Q2 = P3 ; Q3 = P5 ; Q4 = P7 ; QF = P25 ; 'FINSI' ; 'SI' ('EGA' &BL1 2) ; Q1 = P13 ; Q2 = P15 ; Q3 = P17 ; Q4 = P19 ; QF = P26 ; 'FINSI' ; 'SI' ('EGA' &BL1 3) ; Q1 = P1 ; Q2 = P3 ; Q3 = P15 ; Q4 = P13 ; QF = P21 ; 'FINSI' ; 'SI' ('EGA' &BL1 4) ; Q1 = P3 ; Q2 = P5 ; Q3 = P17 ; Q4 = P15 ; QF = P22 ; 'FINSI' ; 'SI' ('EGA' &BL1 5) ; Q1 = P7 ; Q2 = P5 ; Q3 = P17 ; Q4 = P19 ; QF = P23 ; 'FINSI' ; 'SI' ('EGA' &BL1 6) ; Q1 = P1 ; Q2 = P13 ; Q3 = P19 ; Q4 = P7 ; QF = P24 ; 'FINSI' ; VOL1 = 'MESURE' ('MANUEL' 'TET4' Q1 Q2 QF QC) ; VOL2 = 'MESURE' ('MANUEL' 'TET4' Q2 Q3 QF QC) ; VOL3 = 'MESURE' ('MANUEL' 'TET4' Q3 Q4 QF QC) ; VOL4 = 'MESURE' ('MANUEL' 'TET4' Q4 Q1 QF QC) ; VOL = VOL '+' VOL1 '+' VOL2 '+' VOL3 '+' VOL4 ; 'FIN' BL1 ; * VOL0 = 'MAXIMUM' (TABM . 'XXVOLUM') ; * ERRO = (VOL0 '-' VOL) 'ABS' ; * 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; * Sommet MAILS = 'CHANGER' MAIL 'POI1' ; AA = 'DIFF' MAILS (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER') MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; *MAIL1 = 'CHANGER' (TAB2 . 'ELTFA') 'POI1' ; *MAIL2 = 'CHANGER' (TABM . 'ELTFA') 'POI1' ; MAIL1 = (TAB2 . 'ELTFA') ; MAIL2 = (TABM . 'ELTFA') ; AA = 'DIFF' MAIL1 MAIL2 ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * Normals and surface * * We consider the QUA5 P1 P3 P5 P7 P25 * The point are clockwise oriented * PNOR1 = 0.5 '*' ('PVEC' (P1 'MOIN' P25) (P3 'MOIN' P25)) ; PNOR2 = 0.5 '*' ('PVEC' (P3 'MOIN' P25) (P5 'MOIN' P25)) ; PNOR3 = 0.5 '*' ('PVEC' (P5 'MOIN' P25) (P7 'MOIN' P25)) ; PNOR4 = 0.5 '*' ('PVEC' (P7 'MOIN' P25) (P1 'MOIN' P25)) ; PNOR = PNOR1 'PLUS' PNOR2 'PLUS' PNOR3 'PLUS' PNOR4 ; XSURF = (('PSCAL' PNOR PNOR) '**' 0.5) ; PNOR = (PNOR '/' XSURF) ; AA = ('REDU' (tabm . 'XXNORMAF') ('MANUEL' 'POI1' P25)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P25) 3 'UX' ('COORDONNEE' 1 PNOR) 'UY' ('COORDONNEE' 2 PNOR) 'UZ' ('COORDONNEE' 3 PNOR); ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; AA = ('REDU' (tabm . 'XXSURFAC') ('MANUEL' 'POI1' P25)) ; BB = 'MANUEL' 'CHPO' ('MANU' 'POI1' P25) 1 'SCAL' XSURF ; ERRO = 'MAXIMUM' (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 21 ; 'FINSI' ; * * We check that the normals modulus are 1 * VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' 'CUB8' ; 'FINSI' ; * * We check that the sum of (normals times surfaces) is zero * AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'SCAL' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' 'CUB8'; 'FINSI' ; **************************************** ***** GENERAL ************************** **************************************** 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ; P1 = 0.0 0.0 0.0 ; P2 = 1.0 0.0 0.0 ; P3 = 1.0 1.0 0.0 ; P4 = 0.0 1.0 0.0 ; P5 = 0.0 0.0 1.0 ; P6 = 1.0 0.0 1.0 ; P7 = 1.0 1.0 1.0 ; P8 = 0.0 1.0 1.0 ; P1P2 = P1 'DROIT' 4 P2 ; P2P3 = P2 'DROIT' 5 P3 ; P3P4 = P3 'DROIT' 4 P4 ; P4P1 = P4 'DROIT' 5 P1 ; P5P6 = P5 'DROIT' 4 P6 ; P6P7 = P6 'DROIT' 5 P7 ; P7P8 = P7 'DROIT' 4 P8 ; P8P5 = P8 'DROIT' 5 P5 ; P1P5 = P1 'DROIT' 4 P5 ; P2P6 = P2 'DROIT' 5 P6 ; P3P7 = P3 'DROIT' 4 P7 ; P4P8 = P4 'DROIT' 5 P8 ; SURFB = 'SURFACE' (P1P2 'ET' P2P3 'ET' P3P4 'ET' P4P1) 'PLAN' ; SURFH = 'SURFACE' (P5P6 'ET' P6P7 'ET' P7P8 'ET' P8P5) 'PLAN' ; SURFL1 = 'SURFACE' (P1P5 'ET' ('INVERSE' P8P5) 'ET' ('INVERSE' P4P8) 'ET' P4P1) 'PLAN' ; SURFL2 = 'SURFACE' (P1P2 'ET' P2P6 'ET' ('INVERSE' P5P6) 'ET' ('INVERSE' P1P5)) 'PLAN' ; SURFL3 = 'SURFACE' (P2P6 'ET' P6P7 'ET' ('INVERSE' P3P7) 'ET' ('INVERSE' P2P3)) 'PLAN' ; SURFL4 = 'SURFACE' (('INVERSE' P3P4) 'ET' P3P7 'ET' P7P8 'ET' ('INVERSE' P4P8)) 'PLAN' ; SURFT = SURFB 'ET' SURFH 'ET' SURFL1 'ET' SURFL2 'ET' SURFL3 'ET' SURFL4 ; MAIL = 'VOLUME' SURFT ; * MODM = 'MODELISER' MAIL 'EULER' ; TABM = 'DOMA' MODM 'VF' ; QMAIL = TABM . 'QUAF' ; * 'SI' GRAPH ; 'TRACER' (MAIL 'ET' QMAIL) 'TITRE' 'QUAF' ; 'TRACER' ((tabm . 'MAILLAGE') et ((tabm . 'CENTRE') 'COUL' 'ROUGE')) 'TITRE' 'CENTRE et MAILLAGE'; 'FINSI' ; * AA = 'DIFF' MAIL (TABM . 'MAILLAGE') ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'CUB8' ; 'ERREUR' 5 ; 'FINSI' ; * *** Border Surfaces * MODMS = 'MODELISER' SURFT 'EULER' ; TABMS = 'DOMA' MODMS 'VF' ; QSURFT = TABMS . 'QUAF' ; 'ELIMINATION' (TABMS . 'QUAF') (TABM . 'QUAF') 0.0001 ; VALNOR = 'REDU' (TABM . 'XXSURFAC') (TABMS . 'CENTRE') ; VALSUR = 'REDU' (TABM . 'XXNORMAF') (TABMS . 'CENTRE') ; AA = VALNOR '*' VALSUR ; BB = 'MANUEL' 'CHPO' (TABM . 'FACE') 1 'SCAL' 1.0 ; ERRO = 'XTY' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'SCAL' 'SCAL' 'SCAL') ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' 'GENE'; 'FINSI' ; * LISTYP = (TABMS . 'MAILLAGE') 'ELEM' 'TYPE' ; * NELEM = 0 ; 'REPETER' BL1 ('DIME' LISTYP) ; MAIL1 = 'ELEM' (TABMS . 'MAILLAGE') ('EXTRAIRE' LISTYP &BL1) ; 'REPETER' BL2 ('NBEL' MAIL1) ; ELE1 = 'ELEM' MAIL1 &BL2 ; AA = 'MESURE' ELE1 ; NELEM = NELEM '+' 1; P1 = 'POIN' (TABMS . 'CENTRE') NELEM ; BB = 'EXTRAIRE' (TABMS . 'XXVOLUM') 'SCAL' P1 ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL2 ; 'FIN' BL1 ; * Sommet MAILS = 'CHANGER' MAIL 'POI1' ; AA = 'DIFF' MAILS (TABM . 'SOMMET') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; * FACEL, FACEP, ELTFA (comparaison 'NAVIER_STOKES' - 'EULER') MOD2 = 'MODELISER' QMAIL 'NAVIER_STOKES' 'LINE' ; TAB2 = 'DOMA' MOD2 'TABLE' ; AA = 'DIFF' (TAB2 . 'FACE') (TABM . 'FACE') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEL') (TABM . 'FACEL') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; AA = 'DIFF' (TAB2 . 'FACEP') (TABM . 'FACEP') ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; MAIL1 = (TAB2 . 'ELTFA') ; MAIL2 = (TABM . 'ELTFA') ; AA = 'DIFF' MAIL1 MAIL2 ; 'SI' (('NBNO' AA) > 0 ) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * XXDIEMIN (comparaison 'NAVIER_STOKES' - 'EULER') CHPO1 = 'ABS' (TABM . 'XXDIEMIN') ; CHPO2 = 'ABS' ('DOMA' TAB2 'XXDIEMIN') ; ERRO = 'MAXIMUM' (CHPO1 '-' CHPO2) 'ABS' ; 'SI' (ERRO > 1.0D-6) ; 'MESSAGE' 'TRI3 et QUA4' ; 'ERREUR' 21 ; 'FINSI' ; * * We check that the normals modulus are 1 * VALNOR = TABM . 'XXNORMAF' ; VALSUR = TABM . 'XXSURFAC' ; AA = 'PSCAL' VALNOR VALNOR ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ') ; 'SI' ((('MAXIMUM' AA) 'NEG' 1.0 1.0D-12) 'OU' (('MINIMUM' AA) 'NEG' 1.0 1.0D-12)) ; 'ERREUR' 'CUB8' ; 'FINSI' ; * * We check that each element satisfies the property * (normals times surfaces) = zero * * ELTFA and MAIL have the same structure * LISTYP = (TABM . 'ELTFA') 'ELEM' 'TYPE' ; LISTYP1 = (TABM . 'QUAF') 'ELEM' 'TYPE' ; LISTYP0 = (TABM . 'MAILLAGE') 'ELEM' 'TYPE' ; * NELEM = 0 ; * Volume as sum of single volumes VOL = 0.0 ; 'REPETER' BL1 ('DIME' LISTYP) ; MAIL0 = 'ELEM' (TABM . 'MAILLAGE') ('EXTRAIRE' LISTYP0 &BL1) ; MAIL1 = 'ELEM' (TABM . 'ELTFA') ('EXTRAIRE' LISTYP &BL1) ; MAIL2 = 'ELEM' (TABM . 'QUAF') ('EXTRAIRE' LISTYP1 &BL1) ; NM1 = 'NBEL' MAIL1 ; NM2 = 'NBEL' MAIL2 ; 'SI' ('NEG' NM1 NM2) ; 'ERREUR' 21 ; 'FINSI' ; 'REPETER' BL2 ('NBEL' MAIL1) ; NELEM = NELEM '+' 1 ; ELEM1 = 'ELEM' MAIL0 &BL2 ; ELE1 = 'ELEM' MAIL1 &BL2 ; ELE2 = 'CHANGER' ELE1 'POI1' ; NM2 = 'NBNO' ELE2 ; ELE3 = 'ELEM' MAIL2 &BL2 ; ELE4 = 'CHANGER' ELE3 'POI1' ; NM4 = 'NBNO' ELE4 ; ELE5 = 'DIFF' ELE4 ELE2 ; NM5 = 'NBNO' ELE5 ; 'SI' ('NEG' (NM2 '+' NM5) NM4) ; 'ERREUR' 'QUAF and ELTFA non compatible' ; 'ERREUR' 21 ; 'FINSI' ; MOD2 = 'MODELISER' ELEM1 'EULER' ; TAB2 = 'DOMA' MOD2 'VF' ; ELE7 = TAB2 . 'QUAF' ; 'ELIMINATION' ELE3 ELE7 0.0001 ; AA = 'DIFF' ELE7 ELE3 ; 'SI' ('NEG' ('NBEL' AA) 0) ; 'MESSAGE' 'GENE' ; 'ERREUR' 'Anormale' ; 'FINSI' ; VOL = VOL '+' ('MAXIMUM' (TAB2 . 'XXVOLUM')) ; PCEN = 'POIN' (TABM . 'CENTRE') NELEM ; DSURF = 0.0 0.0 0.0 ; 'REPETER' BL3 ('NBEL' ELE2) ; PFAC = 'POIN' &BL3 ELE2 ; SURFF = 'EXTRAIRE' (TABM . 'XXSURFAC') 'SCAL' PFAC ; PNORM = ('EXTRAIRE' (TABM . 'XXNORMAF') 'UX' PFAC) ('EXTRAIRE' (TABM . 'XXNORMAF') 'UY' PFAC) ('EXTRAIRE' (TABM . 'XXNORMAF') 'UZ' PFAC) ; PCF = PFAC 'MOIN' PCEN ; DORIE = 'SIGNE' ('PSCAL' PNORM PCF) ; DSURF = DSURF 'PLUS' (DORIE * PNORM * SURFF) ; 'FIN' BL3 ; AA = 'MAXIMUM' ('ABS' ('PROG' ('COORDONNEE' 1 DSURF) ('COORDONNEE' 2 DSURF) ('COORDONNEE' 3 DSURF))) ; 'SI' (AA > 1.0D-12) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; 'FIN' BL2 ; 'FIN' BL1 ; * * Volume * AA = 'MESURE' MAIL ; CHPUN = 'MANUEL' 'CHPO' (TABM . 'CENTRE') 1 'SCAL' 1.0 ; BB = 'XTY' (TABM . 'XXVOLUM') CHPUN ('MOTS' 'SCAL') ('MOTS' 'SCAL') ; ERRO = (AA '-' BB) 'ABS' ; 'SI' (ERRO > 5.0D-6) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; ERRO = VOL '-' BB ; 'SI' (ERRO > 5.0D-6) ; 'MESSAGE' 'GENE' ; 'ERREUR' 21 ; 'FINSI' ; * * Matrot * AA = 'EXCO' (TABM . 'MATROT') ('MOTS' 'MX' 'MY' 'MZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO ='MAXIMUM' (AA '-' (TABM . 'XXNORMAF')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * BB = 'EXCO' (TABM . 'MATROT') ('MOTS' 'RX' 'RY' 'RZ') ('MOTS' 'UX' 'UY' 'UZ') ; ERRO = 'MAXIMUM' ('PSCAL' AA BB ('MOTS' 'UX' 'UY' 'UZ') ('MOTS' 'UX' 'UY' 'UZ')) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPZ = 'PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UY') ; COMPZ = COMPZ '-' ('PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UX')) ; COMPZ1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UZ') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPZ '-' COMPZ1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPX = 'PSCAL' AA BB ('MOTS' 'UY') ('MOTS' 'UZ') ; COMPX = COMPX '-' ('PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UY')) ; COMPX1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UX') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPX '-' COMPX1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; * COMPY = 'PSCAL' AA BB ('MOTS' 'UZ') ('MOTS' 'UX') ; COMPY = COMPY '-' ('PSCAL' AA BB ('MOTS' 'UX') ('MOTS' 'UZ')) ; COMPY1 = 'EXCO' (TABM . 'MATROT') ('MOTS' 'UY') ('MOTS' 'SCAL') ; ERRO = 'MAXIMUM' (COMPY '-' COMPY1) 'ABS' ; 'SI' (ERRO > 1.0D-12) ; 'ERREUR' ('CHAIN' 'Problem ' ('VALEUR' 'ELEM')) ; 'FINSI' ; 'FIN' ;