* fichier : test_kres_lapn.dgibi ************************************************************************ * NOM : TEST_KRES_LAPN * DESCRIPTION : Test d'options de KRES sur un laplacien * - Scaling ou pas * - solveurs itératifs : CG; BiCGStab, GMRES * - préconditionneurs ilu0, ilut, ilut + pivoting * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 14/02/2005, version initiale * HISTORIQUE : v1, 14/02/2005, création * HISTORIQUE : * HISTORIQUE : ************************************************************************ * Prière de PRENDRE LE TEMPS de compléter les commentaires * en cas de modification de ce sous-programme afin de faciliter * la maintenance ! ************************************************************************ * interact= FAUX ; complet = FAUX ; graph = FAUX ; ************************************************************************ * NOM : MODULO * DESCRIPTION : Calcule un entier modulo un autre... * * 'DEBPROC' MODULO ; 'ARGUMENT' i*'ENTIER' j*'ENTIER' ; 'SI' ('EGA' j 0) ; 'MESSAGE' 'Impossible de faire modulo 0' ; 'ERREUR' 5 ; 'SINON' ; k=i '/' j ; mod=i '-' ( k '*'j ) ; 'RESPRO' mod ; 'FINSI' ; * * End of procedure file MODULO * 'FINPROC' ; ************************************************************************ * NOM : LOG10 * DESCRIPTION : Log_10 * 'DEBPROC' LOG10 ; 'ARGUMENT' fl/'FLOTTANT' ; 'ARGUMENT' lr/'LISTREEL' ; 'ARGUMENT' cp/'CHPOINT ' ; 'ARGUMENT' cm/'MCHAML ' ; 'SI' ('EXISTE' fl) ; 'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ; 'FINSI' ; 'SI' ('EXISTE' lr) ; 'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ; 'FINSI' ; 'SI' ('EXISTE' cp) ; 'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ; 'FINSI' ; 'SI' ('EXISTE' cm) ; 'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ; 'FINSI' ; * * End of procedure file LOG10 * 'FINPROC' ; ************************************************************************ * NOM : FORMAR * DESCRIPTION : formate un réel de facon courte * 'DEBPROC' FORMAR ; 'ARGUMENT' fl*'FLOTTANT' ; 'ARGUMENT' vir/'ENTIER ' ; 'SI' ('NON' ('EXISTE' vir)) ; vir = 1 ; 'SINON' ; 'SI' ('<' vir 0) ; 'ERREUR' 'fournir un entier positif' ; 'FINSI' ; 'FINSI' ; 'SI' ('<' ('ABS' fl) 10.D-100) ; chfl = 'CHAINE' '0' ; 'SINON' ; *! sans le 1.D-10, ca ne fonctionne pas *! qd on entre pile poil une puissance de 10 lfl = LOG10 ('ABS' fl) ; * lfl = '+' (LOG10 ('ABS' fl)) 1.D-10 ; slfl = 'SIGNE' ('ENTIER' lfl) ; 'SI' ('EGA' slfl 1) ; elfl = 'ENTIER' lfl ; 'SINON' ; elfl = '-' ('ENTIER' lfl) 1 ; 'FINSI' ; man = '/' fl ('**' 10.D0 elfl) ; * * Une verrue pour des histoires de précision... * 'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ; man = '/' man 10.D0 ; elfl = '+' elfl 1 ; 'FINSI' ; * sman = 'SIGNE' man ; 'SI' ('EGA' sman 1) ; fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ; 'SINON' ; fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ; 'FINSI' ; 'SI' ('NEG' vir 0) ; 'SI' ('NEG' elfl 0) ; chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ; 'SINON' ; chfl = 'CHAINE' 'FORMAT' fman man ; 'FINSI' ; 'SINON' ; man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ; 'SI' ('NEG' elfl 0) ; chfl = 'CHAINE' man2 'E' elfl ; 'SINON' ; chfl = 'CHAINE' man2 ; 'FINSI' ; 'FINSI' ; 'FINSI' ; 'RESPRO' chfl ; * * End of procedure file FORMAR * 'FINPROC' ; * * Procédure CMAIL * 'DEBPROC' CMAIL ; 'ARGUMENT' imail*'ENTIER' ; 'ARGUMENT' iquad*'ENTIER' ; 'SI' ('EGA' imail 1) ; 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ; 'SI' complet ; nmail = 75 ; 'SINON' ; nmail = 10 ; 'FINSI' ; 'SI' ('EGA' iquad 1) ; nmail = '*' nmail 2 ; 'FINSI' ; pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ; l1 = 'DROIT' nmail pA pB ; l2 = 'DROIT' nmail pB pC ; l3 = 'DROIT' nmail pC pD ; l4 = 'DROIT' nmail pD pA ; mt = 'DALLER' l1 l2 l3 l4 ; cmt = l1 'ET' l2 'ET' l3 'ET' l4 ; _mt = 'CHANGER' mt 'QUAF' ; _cmt = 'CHANGER' cmt 'QUAF' ; 'FINSI' ; 'SI' ('EGA' imail 2) ; 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ; dini = 0.2D0 ; dfin = 0.004D0 ; 'SI' complet ; dini = '/' dini 4.D0 ; dfin = '/' dfin 4.D0 ; 'FINSI' ; 'SI' ('EGA' iquad 1) ; dini = '/' dini 2.D0 ; dfin = '/' dfin 2.D0 ; 'FINSI' ; pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ; l1 = 'DROIT' pA pB 'DINI' dini 'DFIN' dini ; l2 = 'DROIT' pB pC 'DINI' dini 'DFIN' dfin ; l3 = 'DROIT' pC pD 'DINI' dfin 'DFIN' dini ; l4 = 'DROIT' pD pA 'DINI' dini 'DFIN' dini ; cmt = l1 'ET' l2 'ET' l3 'ET' l4 ; mt = 'SURFACE' cmt ; _mt = 'CHANGER' mt 'QUAF' ; _cmt = 'CHANGER' cmt 'QUAF' ; 'FINSI' ; 'SI' ('EGA' imail 3) ; 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ; 'SI' complet ; nmail = 15 ; 'SINON' ; nmail = 5 ; 'FINSI' ; 'SI' ('EGA' iquad 1) ; nmail = '*' nmail 2 ; 'FINSI' ; pA = 0. 0. 0. ; pB = 1. 0. 0. ; pC = 1. 1. 0. ; pD = 0. 1. 0. ; l1 = 'DROIT' nmail pA pB ; l2 = 'DROIT' nmail pB pC ; l3 = 'DROIT' nmail pC pD ; l4 = 'DROIT' nmail pD pA ; smt = 'DALLER' l1 l2 l3 l4 'PLAN' ; mt = 'VOLUME' nmail smt 'TRAN' (0. 0. 1.) ; cmt = 'ENVELOPPE' mt ; _mt = 'CHANGER' mt 'QUAF' ; _cmt = 'CHANGER' cmt 'QUAF' ; 'FINSI' ; 'ELIMINATION' ('ET' _mt _cmt) 1.D-5 ; 'SI' graph ; mtot = 'ET' _mt ('COULEUR' _cmt 'ROUG') ; titch = 'CHAINE' 'Maillage et contour nbel =' ('NBEL' mtot) ; 'TRACER' 'CACH' mtot 'TITR' titch ; 'FINSI' ; tabmod = 'TABLE' ; tabmod . 'MT' = 'TABLE' ; tabmod . 'MT' . 'QUAF' = _mt ; tabmod . 'MT' . 'LINE' = mt ; tabmod . 'CMT' = 'TABLE' ; tabmod . 'CMT' . 'QUAF' = _cmt ; tabmod . 'CMT' . 'LINE' = cmt ; 'RESPRO' tabmod ; 'FINPROC' ; * 'DEBPROC' RESOU ; 'ARGUMENT' mat/'RIGIDITE' ; 'SI' ('NON' ('EXISTE' mat) ); 'ARGUMENT' mat*'MATRIK' ; 'SINON' ; lispri = 'MOTS' 'T' ; lisdua = 'MOTS' 'Q' ; mat = 'KOPS' 'CHANINCO' lispri lispri lisdua lispri ('KOPS' 'RIMA' mat) ; 'FINSI' ; 'ARGUMENT' clim*'CHPOINT' ; 'ARGUMENT' pcmlag*'ENTIER' ; 'ARGUMENT' scaling*'ENTIER' ; 'ARGUMENT' typinv*'ENTIER' ; 'ARGUMENT' typrec*'ENTIER' ; * rv = 'EQEX' ; rvc = 'TABLE' ; rvm = rv . 'METHINV' ; rvm . 'TYPINV' = typinv '+' 1 ; rvm . 'IMPINV' = 0 ; rvm . 'PCMLAG' = 'CHAINE' 'APR' ('+' pcmlag 1) ; rvm . 'SCALING' = '-' scaling 1 ; 'SI' ('EGA' typrec 1) ; rvm . 'PRECOND' = 3 ; 'SINON' ; 'SI' ('ET' ('>EG' typrec 2) ('