* fichier : ale_mecaflu.dgibi ************************************************************************ ************************************************************************ *************************************************************** * * * NOM : ale_mecaflu.dgibi * * DESCRIPTION : fiche de validation CASTEM2000 * * Mécanique des Fluides * * Equations de Navier-Stokes en description ALE * * (Arbitraire Lagrange-Euler) * * géométrie initiale : cavité rectangulaire (2D)* * FONCTIONS * * TESTEES : 'NS' option 'CENTREE' & 'ALE' incompressible * * (entre formulation non conservative * * autres) éléments QUA4 * * 'FORME' pour les déplacements du maillage * * 'LAPN' option 'EF' 'IMPL' * * pour le calcul de la vitesse du * * maillage * * * * AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF) * * e-mail : gounand@semt2.smts.cea.fr * * * *************************************************************** * * * VERSION : v1, 29/12/97, version initiale * * HISTORIQUE : v1, 29/12/97, création * * HISTORIQUE : * * HISTORIQUE : * * HISTORIQUE : * * * *************************************************************** * * * Priere de completer la partie HISTORIQUE apres modification * * du jeu de donnees afin de faciliter la maintenance * * * *************************************************************** * * DESCRIPTION DETAILLEE : * * Géométrie : * --------- * A l'instant initial, le fluide est au repos dans une * cavité rectangulaire LxH ouverte (comme une gouttière). * Le fluide est newtonien,visqueux et incompressible. * Il est soumis à l'accélération de la pesanteur. * * z * ^ * | * * | | * | | * R|----------------|Q * | | | * | | | g * |H | | * | L | \/ * ------------------ - - - - - -> x * O P * On modélise son comportement par les équations de * Navier-Stokes en description ALE (les noeuds du maillage * sont mobiles). On désigne par v, la vitesse absolue du * fluide aux noeuds du maillage et par w, la vitesse absolue * de déplacement des noeuds du maillage. * Dans la description ALE, seul le terme de convection des * équations de Navier-Stokes change, il s'écrit : * (v-w).grad(v) * Si w=0, on retrouve la description eulérienne classique. * Si w=v, le terme de convection disparait => description * lagrangienne. * Dans le cas général, il nous faut une équation qui precrit w. * * Condition initiale : * ------------------ * A l'instant t=0, on imprime un pulse de pression sur la * surface libre (RQ) de la forme : * P(t) = A Dirac(t) cos(pi x / L) * Celle-ci se met à osciller librement. * * Conditions aux limites : * ---------------------- * - contrainte nulle sur la surface ; * - v.n = 0 sur les bords (il faut que Q et R puissent se * déplacer). * * Prescription de w : * ----------------- * Trois facons de prescrire w ont été implémentés * (voir aussi plus loin les procédures correspondantes) : * - LAGR : lagrangienne : w=v * - SLAG : surface lagrangienne : w|surf=v|surf * et Laplacien(w)=0 sur le * domaine. * - CVS2LF : on impose w // Oz ie les points du maillage * doivent se déplacer uniquement verticalement. * Ceci nous amène à résoudre une équation de convection 1D sur la * surface qui est discrétisée en DF centrées <=> EF centrés. * * Tests effectués : * --------------- * - on prescrit w par CVS2LF (le plus compliqué) ; * - on vérifie que le volume se conserve (les schémas utilisés * ne conservent PAS, a priori, le volume) ; * - on compare les ordonnées des points Q et R en fonction du * temps (zQ(t) et zR(t)) avec les profils obtenus par une * autre simulation numérique (Ramaswamy). * * Voir rapport CEA/DMT 97/371 * pour plus de précisions * ************************************************************* * Références : - Gounand, S. 1997 * Simulation Numérique d'écoulements à surface * libre. * Rapport CEA/DMT 97/371. * - Ramaswamy, B. 1990 * Numerical simulation of unsteady viscous * free surface flow * J. Comp. Phys. Vol. 90 pp. 396-430. * - Ramaswamy, B. & Kawahara, M. 1987 * Lagrangian finite element analysis applied * to viscous free surface fluid flow. * Int. J. for Num. Meth. in Fluids * Vol. 7 pp. 953-984. * *************************************************************** * * JEU DE DONNEE : * **** Options * court = VRAI : le cas-test s'effectue en une trentaine * de secondes. * court = FAUX : le cas-test est plus long. On ne raffine * pas le maillage mais on allonge le temps * de simulation, ce qui permet une "vrai" * comparaison sur zQ(t) et zR(t) avec les * résultat de notre ami Ramaswamy. * graph = VRAI : on trace les graphiques (historiques, champs) * On met graph = faux pour la fiche * de validation. * inta = VRAI si on est en interactif ; 0 sinon * * N.B. si inta et graph sont VRAIs, on a droit au film des * champs de vitesses en fin d'exécution... * * * discconv : option de discrétisation des termes de * convection pour les équations de Navier-Stokes * info 'NS' ; pour les choix possibles * court = VRAI ; graph = FAUX ; inta = FAUX ; typelem = 'QUA4' ; discconv = 'CENTREE' ; * * Méthodes de déplacement du maillage (vmail) : * LAGR - déplacement lagrangien du maillage * SLAG - surface lagrangienne, vitesse intérieure interpolée * par un laplacien. * TOTAL : le contour entier est lagrangien (w=v) * INTBOR : la surface libre est lagrangienne (w|surf = v|surf) * Sur le fond, w=0 * Sur les bords : interpolation linéaire de w * BORLIB : meme chose que INTBOR sauf : * Sur les bords : condition de Neumann pour le * laplacien * CVS2LF - w // axe z sur la surface => eqn conv resolue * par un schéma Leap-Frog (disc centrée dérivée 1°) * Options : idem SLAG sauf TOTAL. * *vmail = 'LAGR' ; optlapn = 'TOTAL' ; *vmail = 'SLAG' ; * optlapn = 'TOTAL' ; * optlapn = 'INTBOR' ; * optlapn = 'BORLIB' ; vmail = 'CVS2LF' ; optlapn = 'INTBOR' ; * optlapn = 'BORLIB' ; 'OPTION' 'ECHO' 1 ; 'SI' ('NON' inta) ; 'OPTION' 'TRAC' 'PS' ; 'SINON' ; **od = 'TEXTE' 'OPTION DONN 3' ; 'FINSI' ; ************************************************************* **** Définition de quelques (!) procédures : * ** **** D'intéret général : * -> LOG10 : * LOG base10 * -> CALCERR : * Erreur relative entre deux champoints (norme Linfini) * -> TRMAIL : * Tracé d'un maillage * -> TRVIT : * Tracé d'un chpoint de vitesse VECT SOMMET * -> TRCH : * Tracé d'un chpoint SCAL ** **** Spécifique à l'ALE : * Elles sont en grand nombre car il faut gérer soi-meme les * dicrétisations temporelle et spatiale (domaine mobile). * On ne peut pas utiliser (pour l'instant ?) EXEC pour s'en * occuper. * En outre, on propose plusieurs méthodes pour déplacer le * maillage. * -> CREMAIL : * Création de la cavité et de tous les sous-maillages * nécessaires. * Tout ce qui concerne la géométrie doit se trouver ici * -> CDXHAUT : * Création des deltax pour la surface libre (ici $haut) * pour utilisation dans la procedure CVS2LF * (Différences Finies) * -> INITVAR : * Initialisation de la table des variables * Variables aux instants n+1/2 et n-1/2 (si nécessaire) * -> INITPDT : * Initialisation de la table des pas de temps * Tout ce qui concerne le calcul du pas de temps * -> INITHIST : * Initialisation de la table des historiques * Toutes les listes de scalaires * -> INITSAUV : * Initialisation de la table des sauvegardes * Sauvegarde des champoints dans une table indicée * par un entier associé à un de pas de temps * -> MAJPDT : * Mise à jour de la table des pas de temps * i.e calcul du nouveau * -> MAJHIST : * Mise à jour des différents historiques * -> MAJSAUV : * On sauvegarde les différents champoints dans une table * -> SUMMARY : * Affiche un résumé des paramètres * -> TRTOUT : * Trace tous les champs ** NB : pour simplifier, on ne transmet pas les paramètres à ** SUMMARY et TRTOUT. C'est de la mauvaise programmation... * -> MESI : * Affichage du message pour la boucle d'itérations * -> MEST : * Affichage du message pour l'avance d'un pas de temps * -> CALCON : * Calcul de la contrainte appliquée sur la surface au premier * pas de temps * -> PREPAS : * Faire le premier pas de temps * -> CVIT : * Faire un pas de temps : termes sources en n-1/2 * matrice-masse en n * divergence-pression en n+1/2 * -> LAGR : * vitesse du fluide (v) => * vitesse du maillage (w) en LAGRangien (soit w=v) * -> SLAG : * on choisit w|surf = v|surf (Surface LAGrangienne) * on interpole ensuite w sur le reste du maillage par * une équation au laplacien * -> CVS2LF : * on calcule w|surf avec v|surf en imposant w|surf // Oy * => eqn convection sur la surface. * Elle est discrétisée en différences finies centrées * d'où le nom : ConVection Surface ordre 2 (schéma de * type Leap-Frog) * on interpole ensuite w sur le reste du maillage par * une équation au laplacien * ---> IVECT : * Interpolation d'un vecteur entre deux points sur * un segment. Un chpoint VECT => 2 chpos SCAL * ---> LAPC : * Résolution d'une équation scalaire en implicite ; * Laplacien + conditions Dirichlet ou Neumann * * -> ETENDRE : * Procédure qui étend un champoint VECT SOMMET a tous les * points (FACE, CENTRE...) du maillage total * -> CINVPDTM : * Calcul du pas de temps dit "de maillage" ** **** Post-traitement : * -> FILMVIT : * Construit une somme de déformées pour faire un film * avec les champs de vitesse sauvegardés * -> TRHIST * Tracé des historiques (la non plus, les paramètres ne * sont pas transmis). * * LOG base10 * 'DEBPROC' LOG10 machin*'FLOTTANT' ; 'SI' (machin '<EG' 0.D0) ; a = -365.25 ; 'MESSAGE' 'Procédure LOG10 : donnée <= 0' ; 'SINON' ; a = (('LOG' machin) / ('LOG' 10.)) ; 'FINSI' ; 'FINPROC' a ; * * Erreur relative entre deux champoints (norme Linfini) * 'DEBPROC' CALCERR vitp1*'CHPOINT ' vit*'CHPOINT ' ; 'SI' ('EGA' cle 'ECHELLE') ; 'ARGUMENT' vref*'FLOTTANT' ; 'SI' (vref '<EG' 0.D0) ; 'ERREUR' 'L échelle doit etre positive' ; 'FINSI' ; 'SINON' ; mavp1 = 'MAXIMUM' vitp1 'ABS' ; mav = 'MAXIMUM' vit 'ABS' ; mimav = 'MINIMUM' pmav ; mamav = 'MAXIMUM' pmav ; 'SI' (mamav '<EG' 0.D0) ; 'ERREUR' 'Les deux champs sont nuls' ; 'FINSI' ; 'SI' (mimav '<EG' 0.D0) ; 'MESSAGE' 'Procédure CALCERR : un des champs est nul' ; 'MESSAGE' ' => option MOYENNE' ; cle = 'MOYENNE' ; 'FINSI' ; 'SI' ('EGA' cle 'MINMAX') ; vref = mimav ; 'SINON' ; 'SI' ('EGA' cle 'MOYENNE') ; vref = (mimav '+' mamav ) '/' 2.0D0 ; 'SINON' ; 'ERREUR' 'Mauvaise option' ; 'FINSI' ; 'FINSI' ; 'FINSI' ; 'FINPROC' (('MAXIMUM' (vitp1 '-' vit) 'ABS') '/' vref) ; * * Tracé d'un maillage * 'DEBPROC' TRMAIL mailp*'MAILLAGE' tphyp/'FLOTTANT' ; 'SI' ('EXISTE' tphyp) ; 'SINON' ; 'TRACER' mailp 'TITR' 'Maillage' ; 'FINSI' ; 'FINPROC' ; * * Tracé d'un chpoint de vitesse VECT SOMMET * 'DEBPROC' TRVIT vitp*'CHPOINT ' vitp2/'CHPOINT ' ; 'ARGUMENT' mailp*'MAILLAGE' ; titvp = 'Vitesses' ; 'REPETER' OPT ; 'SI' ('NON' ('EXISTE' cle)) ; 'QUITTER' OPT ; 'FINSI' ; 'SI' ('EGA' cle 'AMPLIF') ; 'ARGUMENT' amp*'FLOTTANT' ; 'FINSI' ; 'SI' ('EGA' cle 'TEMPS') ; 'ARGUMENT' tphp*'FLOTTANT' ; titvp = ('CHAINE' titvp ' à t=' tphp) ; 'FINSI' ; 'FIN' OPT ; mvp = ('MAXIMUM' vitp 'ABS') ; 'SI' (mvp '<EG' 0.D0) ; * 'ERREUR' 'Champ de vitesses nul' ; 'MESSAGE' 'TRVIT : Champ de vitesses nul' ; 'QUITTER' TRVIT ; 'SINON' ; xp yp = 'COORDONNEE' mailp ; amp = ('MAXIMUM' rp) '/' (15.D0 '*' mvp) ; 'FINSI' ; 'FINSI' ; ungp = 'VECTEUR' vitp amp 'UX' 'UY' 'JAUNE' ; 'SI' ('EXISTE' vitp2) ; ungp2 = 'VECTEUR' vitp2 amp 'UX' 'UY' 'ROUGE' ; ungp = (ungp2 'ET' ungp) ; 'FINSI' ; 'TRACER' ungp mailp 'TITR' titvp ; 'FINPROC'; * * Tracé d'un chpoint SCAL * 'DEBPROC' TRCH vvp*'CHPOINT ' ; 'ERREUR' 'Il faut un champ à UNE composante' ; 'FINSI' ; 'SI' ('EGA' tvvp 'CENTRE ') ; 'SI' ('EGA' cle 'TRICHE') ; mvvp = ($tdefp . 'MAILLAGE') ; tm = mvvp ; 'SINON' ; 'SI' ('EGA' cle 'NORMAL') ; tm = ($tdefp . 'MAILLAGE') ; mvvp = 'MODELISER' tm 'THERMIQUE' ; 'SINON' ; 'ERREUR' 'Mauvaise option' ; 'FINSI' ; 'FINSI' ; 'SINON' ; 'ERREUR' 'Les CHPOINTs FACE ne sont pas traités...' ; 'SINON' ; 'SI' ('NON' ('EGA' tvvp 'SOMMET ')) ; 'FINSI' ; 'ARGUMENT' mvvp*'MAILLAGE' ; tm = mvvp ; 'FINSI' ; 'FINSI' ; 'ARGUMENT' nbisov/'ENTIER ' ; 'SI' ('EXISTE' nomvp) ; titvp = ('CHAINE' nomvp ' ; chpoint SCAL ' tvvp ) ; 'SINON' ; titvp = ('CHAINE' 'Chpoint SCAL ' tvvp) ; 'FINSI' ; 'SI' ('EXISTE' tphp) ; titvp = ('CHAINE' titvp ' à t=' tphp) ; 'FINSI' ; 'SI' ('NON' ('EXISTE' cmvvp)) ; cmvvp = 'CONTOUR' tm ; 'FINSI' ; maxvvp = ('MAXIMUM' vvp 'ABS') ; minvvp = ('MINIMUM' vvp 'ABS') ; 'SI' (maxvvp '<EG' (minvvp 'ABS')) ; * 'ERREUR' 'Champ constant' ; 'MESSAGE' ('CHAINE' 'TRCH : Champ constant = ' maxvvp ) ; 'QUITTER' TRCH ; 'FINSI' ; 'SI' ('EXISTE' nbisov) ; 'TRACER' vvp mvvp cmvvp nbisov 'TITR' titvp ; 'SINON' ; 'TRACER' vvp mvvp cmvvp 'TITR' titvp ; 'FINSI' ; 'FINPROC' ; * * Création de la cavité et de tous les sous-maillages * nécessaires. * Tout ce qui concerne la géométrie doit se trouver ici * 'DEBPROC' CREMAIL $cav*'TABLE ' ; 'ARGUMENT' l*'FLOTTANT' h*'FLOTTANT' ; 'ARGUMENT' nl*'ENTIER ' nh*'ENTIER ' ; 'ARGUMENT' egeom*'FLOTTANT' ; p00 = 0.D0 0.D0 ; pl0 = l 0.D0 ; p0h = 0.D0 h ; plh = l h ; dxg = 1.0D0 ; dxd = 1.0D0 ; dyb = 1.0D0 ; dyh = 1.0D0 ; 'REPETER' OPT ; 'SI' ('NON' ('EXISTE' cle)) ; 'QUITTER' OPT ; 'FINSI' ; 'SI' ('EGA' cle 'DX') ; 'ARGUMENT' dgp*'FLOTTANT' ddp*'FLOTTANT' ; dxmoy = l '/' nl ; dxg = dgp '*' dxmoy ; dxd = ddp '*' dxmoy ; 'FINSI' ; 'SI' ('EGA' cle 'DY') ; 'ARGUMENT' dbp*'FLOTTANT' dhp*'FLOTTANT' ; dymoy = h '/' nh ; dyb = dbp '*' dymoy ; dyh = dhp '*' dymoy ; 'FINSI' ; 'FIN' OPT ; bas = pl0 'DROIT' (-1 '*' nl) p00 'DINI' dxd 'DFIN' dxg ; haut = p0h 'DROIT' (-1 '*' nl) plh 'DINI' dxg 'DFIN' dxd ; rwall = plh 'DROIT' (-1 '*' nh) pl0 'DINI' dyh 'DFIN' dyb ; lwall = p00 'DROIT' (-1 '*' nh) p0h 'DINI' dyb 'DFIN' dyh ; $cav . 'dxg' = dxg ; $cav . 'dxd' = dxd ; $cav . 'dyb' = dyb ; $cav . 'dyh' = dyh ; mt = 'DALLER' haut rwall bas lwall ; mt = ($mt . 'MAILLAGE') ; 'TASSER' mt ; *haut = 'CHANGER' haut SEG2 ; bas = 'CHANGER' bas SEG2 ; *lwall = 'CHANGER' lwall SEG2 ; rwall = 'CHANGER' rwall SEG2 ; 'ELIMINATION' (mt 'ET' lmt 'ET' bas 'ET' rwall 'ET' haut 'ET' lwall) egeom ; contini = 'COULEUR' cmt 'ROUG' ; $cav . 'l' = l ; $cav . 'nl' = nl ; $cav . 'h' = h ; $cav . 'nh' = nh ; $cav . 'volini' = 'MESURE' mt ; $cav . '$mt' = $mt ; $cav . '$cmt' = $cmt ; $cav . '$lmt' = $lmt ; $cav . '$haut' = $haut ; $cav . '$bas' = $bas ; $cav . '$lwall' = $lwall ; $cav .'$rwall' = $rwall ; * Définition des conditions aux limites pour Navier-Stokes * VN nulle sur lwall, rwall et bas $cav . 'CLIM' = (clr 'ET' cb) ; 'MESSAGE' 'Procédure CREMAIL : table MAILLAGE créée' ; 'FINPROC' $cav ; * * Création des deltax pour la surface libre (ici $haut) * pour utilisation dans la procedure CVS2LF * (Différences Finies) * 'DEBPROC' CDXHAUT $h*'TABLE ' ; h = ($h . 'MAILLAGE') ; 'REPETER' BBB ($h . 'NPTD') ; 'FIN' BBB ; $h . 'dxh' = ('EXTRAIRE' psd xh) '-' ('EXTRAIRE' psg xh) ; 'FINPROC' $h ; * * Initialisation de la table des variables * Variables aux instants n+1/2 et n-1/2 (si nécessaire) * 'DEBPROC' INITVAR $v*'TABLE ' ; 'ARGUMENT' $c*'TABLE ' ; $mt = $c . '$mt' ; * Champoints * Configuration $v . 'cnfn' = 'FORME' ; $v . 'cnfnm05' = 'FORME' ; $v . 'cnfnp05i' = 'FORME' ; 'MESSAGE' 'Procédure INITVAR : table VARIABLE créée' ; 'FINPROC' $v ; * * Initialisation de la table des pas de temps * Tout ce qui concerne le calcul du pas de temps * 'DEBPROC' INITPDT $t*'TABLE ' ; 'ARGUMENT' alfa*'FLOTTANT' gamma*'FLOTTANT' ; 'ARGUMENT' dtini*'FLOTTANT' poini*'ENTIER ' ; * Entiers $t . 'nupdt' = 0 ; $t . 'iter' = 0 ; * Réels $t . 'tphyn' = 0.D0 ; $t . 'tpscpu' = 0.D0 ; $t . 'alfa' = alfa ; $t . 'gamma' = gamma ; $t . 'poini' = poini ; $t . 'mail' = dtini ; $t . 'moy' = 0.D0 ; $t . 'min' = dtini ; 'MESSAGE' 'Procédure INITPDT : table PASDETPS créée' ; 'FINPROC' $t ; * * Initialisation de la table des historiques * Toutes les listes de scalaires * 'DEBPROC' INITHIST $h*'TABLE ' ; * Listes $h . 'lpdt' = 'TABLE' 'LPDT' ; hl = $h . 'lpdt' ; 'MESSAGE' 'Procédure INITHIST : table HIST créée' ; 'FINPROC' $h ; * * Initialisation de la table des sauvegardes * Sauvegarde des champoints dans une table indicée * par un entier associé à un pas de temps * 'DEBPROC' INITSAUV $s*'TABLE ' ; * Entiers $s . 'ntrc' = 0 ; * Listes * Tables $s . 'DELTAX' = 'TABLE' 'DELTAX' ; $s . 'VITESSE' = 'TABLE' 'VITESSE' ; *$s . 'PRESSION' = 'TABLE' 'PRESSION' ; *$s . 'DIVV' = 'TABLE' 'DIVV' ; 'MESSAGE' 'Procédure INITSAUV : table SAUV créée' ; 'FINPROC' $s ; * * Mise à jour de la table des pas de temps * i.e calcul du nouveau * 'DEBPROC' MAJPDT $p*'TABLE ' ; dtmr = ($p . 'gamma') '*' ($p . 'mail') ; dtmoy = ($p . 'moy') ; npdt = ($p . 'nupdt') ; poi = ($p . 'poini') ; $p . 'moy' = (((npdt '+' poi) '*' dtmoy) '+' dti) / (npdt '+' poi '+' 1) ; 'FINPROC' $p ; * * Mise à jour des différents historiques * 'DEBPROC' MAJHIST $h*'TABLE ' $c*'TABLE ' ; 'ARGUMENT' $p*'TABLE ' $v*'TABLE ' ; r = (($c . '$haut' . 'MAILLAGE') 'POINT' 'INITIAL') ; q = (($c . '$haut' . 'MAILLAGE') 'POINT' 'FINAL') ; hini = ($c . 'h') ; volini = ($c . 'volini') ; $h . 'lvol' = (($h . 'lvol') 'ET' ('PROG' ((('MESURE' ($c . '$mt' . 'MAILLAGE')) '-' volini) '/' volini))) ; $hl = ($h . 'lpdt') ; 'FINPROC' $h ; * * On sauvegarde les différents champoints dans une table * 'DEBPROC' MAJSAUV $s*'TABLE ' ; 'ARGUMENT' $v*'TABLE ' $p*'TABLE ' ; $s . 'ntrc' = (($s . 'ntrc') '+' 1) ; $s . 'DELTAX' . ($s . 'ntrc') = 'COPIE' ($v . 'deltaxn') ; $s . 'VITESSE' . ($s . 'ntrc') = 'COPIE' ($v . 'unp05i') ; *$s . 'PRESSION' . ($s . 'ntrc') = 'COPIE' ($v . 'pnp05i') ; *$s . 'DIVV' . ($s . 'ntrc') = 'COPIE' ($v . 'dnp05i') ; 'FINPROC' $s ; * * Affiche un résumé des paramètres * 'DEBPROC' SUMMARY ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' 'Programme : ' prg) ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' '*** GEOMETRIE :') ; 'MESSAGE' ('CHAINE' ' soient : ' nl 'x' nh '=' (nl '*' nh) ' éléments ' typelem) ; *'MESSAGE' ('CHAINE' ' soient : ' (nl '*' nh '*' 4) * ' éléments linéaires') ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' '*** PHYSIQUE :') ; 'MESSAGE' ('CHAINE' 'Gravité : ' ('COORDONNEES' 2 g) ' uz ; viscosité :' nu) ; 'MESSAGE' ('CHAINE' 'Intensité Dirac Pression : ' pt0) ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' '*** NUMERIQUE :') ; 'MESSAGE' ('CHAINE' 'Discrétisation ' discconv ' des termes de convection.'); 'MESSAGE' ('CHAINE' ' Alfa = ' alfa) ; 'MESSAGE' ('CHAINE' ' Gamma = ' gamma) ; 'MESSAGE' ('CHAINE' ' Cvg (bcl iter) = ' cvg) ; 'MESSAGE' ('CHAINE' ' Poids (pdt1) = ' poini) ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' '*** TEMPS :') ; 'MESSAGE' ('CHAINE' 'Temps physique : ' ($pdt . 'tphyn')) ; 'MESSAGE' ('CHAINE' 'Temps CPU : ' ($pdt . 'tpscpu')) ; 'FINPROC' ; * * Trace tous les champs * 'DEBPROC' TRTOUT ; $mt = ($cavite . '$mt') ; mtm = ($mt . 'MAILLAGE') ; cini = ($cavite . 'contini') ; TRMAIL (mtm 'ET' cini) ($pdt . 'tphyn') ; 'SI' ('NON' inta) ; TRVIT ($var . 'unm05') (('CONTOUR' mtm) 'ET' cini) 'AMPLIF' ampvit 'TEMPS' ($pdt . 'tphyn') ; 'SINON' ; TRVIT ($var . 'unm05') ($var . 'wnm05') (('CONTOUR' mtm) 'ET' cini) 'AMPLIF' ampvit 'TEMPS' ($pdt . 'tphyn') ; 'FINSI' ; TRCH ($var . 'pnp05i') $mt 'NORMAL' 'Pression' ($pdt . 'tphyn') ; 'FINPROC' ; * * Affichage du message pour la boucle d'itérations * 'DEBPROC' MESI $v*'TABLE ' $p*'TABLE ' ; 'SI' ('EGA' ($p . 'iter') 1) ; 'MESSAGE' ('CHAINE' 'Iter'/1 'Dtconv'/7 'Dtdiff'/21 'Dtmaill'/35 'Dt'/49 'Erreur (log)'/61) ; 'FINSI' ; 'FINPROC' ; * * Affichage du message pour l'avance d'un pas de temps * 'DEBPROC' MEST $v*'TABLE ' $p*'TABLE ' ; 'MESSAGE' ('CHAINE' ($p . 'nupdt')*9 ($p . 'tphyn')/13 ($p . 'min')/27 ('MAXIMUM' ($v . 'dnp05i') 'ABS')/41 ('MINIMUM' ($v . 'pnp05i') 'ABS')/55) ; 'FINPROC' ; * * Calcul de la contrainte appliquée sur la surface au premier * pas de temps * 'DEBPROC' CALCON $h*'TABLE ' ac*'FLOTTANT' ; lini = 'ABS' ( ('COORDONNEE' 1 (($h . 'MAILLAGE') 'POINT' 'INITIAL')) '-' ('COORDONNEE' 1 (($h . 'MAILLAGE') 'POINT' 'FINAL'))) ; xhaut = 'COORDONNEE' 1 ($h . 'CENTRE') ; * * Faire le premier pas de temps * 'DEBPROC' PREPAS $v*'TABLE ' $p*'TABLE ' ; 'ARGUMENT' $c*'TABLE ' ; 'ARGUMENT' tsu*'CHPOINT ' nu*'FLOTTANT' g*'POINT ' ; $mt = $c . '$mt' ; $haut = $c . '$haut' ; rvp = rv . 'PRESSION' ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'UN' = 'COPIE' ($v . 'unm05') ; rv . 'CLIM' = 'COPIE' ($c . 'CLIM') ; ****** * Calcul des matrices masse diagonales 'KDIA' rv ; rvp . 'CLIM' = rv . 'CLIM' ; rvp . 'DIAGV' = (rv . 'KIZD' . 'UN') ; * Calcul des matrices de la divergence * Calcul des termes source nbop = 'DIMENSION' (rv . 'LISTOPER') ; 'REPETER' BLOP nbop ; nomper = 'EXTRAIRE' &BLOP (rv . 'LISTOPER') ; ('TEXTE' nomper) (rv . notable) ; 'FIN' BLOP ; 'OUBLIER' $mt 'MATESI' ; 'OUBLIER' $mt 'XXPSOML' ; 'OUBLIER' $mt 'XXDXDY' ; 'OUBLIER' $mt 'XXVOLUM' ; dt = ($p . 'min') ; rv . 'PASDETPS' . 'DELTAT' = dt ; * Calcul de la pression rvp . 'DELTAT' = dt ; rvp . 'PRESSION' = P ; * Avance en temps $v . 'unp05im1' = ('COPIE' ($v . 'unp05i')) ; $v . 'pnp05i' = rvp . 'PRESSION' ; $p . 'iter' = ($p . 'iter' '+' 1) ; FINPROC $v $p ; * * Faire un pas de temps : termes sources en n-1/2 * matrice-masse en n * divergence-pression en n+1/2 * 'DEBPROC' CVIT $c*'TABLE ' $v*'TABLE ' $p*'TABLE ' ; $mt = $c . '$mt' ; rvp = rv . 'PRESSION' ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'UN' = ('COPIE' ($v . 'unm05')) ; rv . 'PASDETPS' . 'PDTIMP' = ($p . 'min') ; rv . 'CLIM' = ($c . 'CLIM') ; ***** * Calcul des matrices masse diagonales 'FORME' ($v . 'cnfn') ; 'KDIA' rv ; rvp . 'CLIM' = rv . 'CLIM' ; rvp . 'DIAGV' = (rv . 'KIZD' . 'UN') ; * Calcul des matrices de la divergence 'FORME' ($v . 'cnfnp05i') ; * Calcul des termes source 'FORME' ($v . 'cnfnm05') ; 'OUBLIER' $mt 'MATESI' ; 'OUBLIER' $mt 'XXPSOML' ; 'OUBLIER' $mt 'XXDXDY' ; 'OUBLIER' $mt 'XXVOLUM' ; dt = ($p . 'min') ; rv . 'PASDETPS' . 'DELTAT' = dt ; * Calcul de la pression 'FORME' ($v . 'cnfnp05i') ; rvp . 'DELTAT' = dt ; rvp . 'PRESSION' = P ; * Avance en temps $v . 'unp05im1' = ('COPIE' ($v . 'unp05i')) ; $v . 'pnp05i' = rvp . 'PRESSION' ; 'FINPROC' $v $p ; * * vitesse du fluide (v) => * vitesse du maillage (w) en Lagrangien * 'FINPROC' ('COPIE' veuler) ; * * on choisit w|surf = v|surf (Surface LAGrangienne) * on interpole ensuite w sur le reste du maillage par * une équation au laplacien * 'DEBPROC' SLAG veuler*'CHPOINT ' $c*'TABLE ' ; $haut = ($c . '$haut') ; $bas = ($c . '$bas') ; $lwall = ($c . '$lwall') ; $rwall = ($c . '$rwall') ; $cmt = ($c . '$cmt') ; $mt = ($c . '$mt') ; haut = ($haut . 'MAILLAGE') ; bas = ($bas . 'MAILLAGE') ; lwall = ($lwall . 'MAILLAGE') ; rwall = ($rwall . 'MAILLAGE') ; sauvform = 'FORME' ; 'FORME' conflap ; 'SI' ('EGA' optlap 'INTBOR') ; vlwx vlwy = IVECT $lwall veuler ; vrwx vrwy = IVECT $rwall veuler ; vmx = LAPC $mt vcx ; vmy = LAPC $mt vcy ; 'SINON' ; 'SI' ('EGA' optlap 'BORLIB') ; vmx = LAPC $mt vcx ; vmy = LAPC $mt vcy ; 'SINON' ; 'SI' ('EGA' optlap 'TOTAL') ; vmx = LAPC $mt vcx ; vmy = LAPC $mt vcy ; 'SINON' ; 'ERREUR' 'Pas la bonne option pour le laplacien...' ; 'FINSI' ; 'FINSI' ; 'FINSI' ; 'FORME' sauvform ; * * on calcule w|surf avec v|surf en imposant w|surf // Oy * => eqn convection sur la surface. * Elle est discrétisée en différences finies centrées * d'où le nom : ConVection Surface ordre 2 (schéma de * type Leap-Frog) * on interpole ensuite w sur le reste du maillage par * une équation au laplacien * 'DEBPROC' CVS2LF veuler*'CHPOINT ' $c*'TABLE ' ; $haut = ($c . '$haut') ; $bas = ($c . '$bas') ; $lwall = ($c . '$lwall') ; $rwall = ($c . '$rwall') ; $cmt = ($c . '$cmt') ; $mt = ($c . '$mt') ; haut = ($haut . 'MAILLAGE') ; bas = ($bas . 'MAILLAGE') ; lwall = ($lwall . 'MAILLAGE') ; rwall = ($rwall . 'MAILLAGE') ; ** Calcul de withy, withx est nul * Calcul des paramètres pour le schéma aux différences finies nblh = ($haut . 'NELD') ; nbph = ($haut . 'NPTD') ; dxh = ($haut . 'dxh') ; psm = ($haut . 'psm') ; psg = ($haut . 'psgg') ; psd = ($haut . 'psdd') ; 'REPETER' BBB nbph ; ppp = haut 'POINT' (&BBB) ; 'FIN' BBB ; vi = 'EXTRAIRE' v psm ; ui = 'EXTRAIRE' u psm ; *vip1 = 'EXTRAIRE' v psd ; uip1 = 'EXTRAIRE' u psd ; *vim1 = 'EXTRAIRE' v psg ; uim1 = 'EXTRAIRE' u psg ; hi = 'EXTRAIRE' h psm ; hip1 = 'EXTRAIRE' h psd ; him1 = 'EXTRAIRE' h psg ; dxi = 'EXTRAIRE' dxh psm ; dxim1 = 'EXTRAIRE' dxh psg ; * points intermédaires dxi2 = dxi '*' dxi ; dxim12 = dxim1 '*' dxim1 ; dxp = dxi '+' dxim1 ; dxf = dxim1 '*' dxi ; dxm = dxi '-' dxim1 ; hxi = ((((dxim12 '*' hip1) '-' (dxi2 '*' him1) '/' dxp) '+' ( dxm '*' hi )) '/' dxf) ; lwithy = vi '-' (ui '*' hxi) ; * 1er point * dernier point sdtl = (ui '/' dxim1) '+' (ui '/' dxi) ; dtmax = 1.D0 '/' ('MAXIMUM' sdtl) ; 'MESSAGE' 'Procédure CVS2LF : dtmax =' dtmax ; *withyg = 'MANUEL' 'CHPO' ($haut . 'SOMMET') 1 'SCAL' lwithy ; * Interpolation de wity a partir de withy sur le reste du * maillage sauvform = 'FORME' ; 'FORME' conflap ; 'SI' ('EGA' optlap 'INTBOR') ; vlwx vlwy = IVECT $lwall veuler ; vrwx vrwy = IVECT $rwall veuler ; vmy = LAPC $mt vcy ; 'SINON' ; 'SI' ('EGA' optlap 'BORLIB') ; vmy = LAPC $mt vcy ; 'SINON' ; 'ERREUR' 'Pas la bonne option pour le laplacien...' ; 'FINSI' ; 'FINSI' ; 'FORME' sauvform ; * * Interpolation d'un vecteur entre deux points sur * un segment. Un chpoint VECT => 2 chpos SCAL * 'DEBPROC' IVECT $dom*'TABLE ' chv*'CHPOINT' ; dom = ($dom . 'MAILLAGE') ; nbd = ($dom . 'NPTD') ; cyd = 'COORDONNEES' 2 dom ; 'REPETER' BBB nbd ; ppp = dom 'POINT' (&BBB) ; 'FIN' BBB ; di = dom 'POINT' 'INITIAL' ; df = dom 'POINT' 'FINAL' ; yi = 'EXTRAIRE' yd 1 ; yf = 'EXTRAIRE' yd nbd ; vdxi = 'EXTRAIRE' chv 'UX' di ; vdxf = 'EXTRAIRE' chv 'UX' df ; vdyi = 'EXTRAIRE' chv 'UY' di ; vdyf = 'EXTRAIRE' chv 'UY' df ; ax = (vdxf '-' vdxi) '/' (yf '-' yi) ; bx = vdxi '-' (ax '*' yi) ; ay = (vdyf '-' vdyi) '/' (yf '-' yi) ; by = vdyi '-' (ay '*' yi) ; 'FINPROC' vdx vdy ; * * Résolution d'une équation scalaire en implicite ; * Laplacien + conditions Dirichlet ou Neumann * 'DEBPROC' LAPC $dom*'TABLE ' condlim*'CHPOINT ' ; rt . 'INCO' = 'TABLE' 'INCO' ; rt . 'CLIM' = condlim ; EXEC rt ; * 'OUBLIER' $mt 'MATESI' ; * 'OUBLIER' $mt 'XXDXDY' ; 'OUBLIER' $mt 'XXVOLUM' ; * 'OUBLIER' $mt 'XXDIAME' ; 'OUBLIER' $mt 'XXDIEMIN' ; 'FINPROC' (rt . 'INCO' . 'SCAL') ; * * Procédure qui étend un champoint VECT SOMMET a tous les * points (FACE, CENTRE...) du maillage total * 'DEBPROC' ETENDRE $c*'TABLE ' depli*'CHPOINT ' ; $mt = ($c . '$mt') ; $lmt = ($c . '$lmt') ; 'FINPROC' (depli 'ET' deplic 'ET' deplif) ; * * Calcul du pas de temps dit "de maillage" * 'DEBPROC' CINVPDTM dvit*'CHPOINT ' $mt*'TABLE ' ; 'FINPROC' ('MINIMUM' lmg) ; * * Construit une somme de déformées pour faire un film * avec les champs de vitesse sauvegardés * 'DEBPROC' FILMVIT $s*'TABLE ' $v*'TABLE ' ; indmax = ($s . 'ntrc') ; $s . 'anim' = 'TABLE' 'ANIM' ; 'REPETER' BCL1 indmax ; ind = &BCL1 ; dx = ($s . 'DELTAX' . ind) ; vv = 'VECTEUR' ($s . 'VITESSE' . ind) ampvit 'UX' 'UY' 'JAUNE' ; $s . 'anim' . ind = ('DEFORME' ($cavite . '$mt' . 'MAILLAGE') dx 1.D0 vv) ; 'FIN' BCL1 ; * * Tracé d'historiques * 'DEBPROC' TRHIST ; ltps = ($hist . 'ltps') ; liter = ($hist . 'liter') ; ldv = ($hist . 'ldv') ; lvol = ($hist . 'lvol') ; ltps = ($hist . 'ltps') ; lzr = ($hist . 'lzr') ; lzq = ($hist . 'lzq') ; $hl = ($hist . 'lpdt') ; lpdt = ($hl . 'min') ; *evpdt = 'EVOL' 'MANU' 'TEMPS' ltps 'PDT' lpdt ; *'DESSIN' evpdt 'MIMA' 'TITR' 'Pas de temps' ; ltma = ('LOG' (($hl . 'mail') '*' ($pdt . 'gamma'))) '/' ('LOG' 10.) ; ltmo = ('LOG' ($hl . 'moy')) '/' ('LOG' 10.) ; ltmi = ('LOG' ($hl . 'min')) '/' ('LOG' 10.) ; tabt = 'TABLE' ; tabt . 'TITRE' = 'TABLE' ; tabt . 1 = 'TIRL' ; tabt . 'TITRE' . 1 = 'Pdt diffusion' ; tabt . 2 = 'TIRR' ; tabt . 'TITRE' . 2 = 'Pdt maillage' ; tabt . 3 = 'TIRM' ; tabt . 'TITRE' . 3 = 'Pdt moyen' ; tabt . 4 = 'NOLI' ; tabt . 'TITRE' . 4 = 'Pdt minimum' ; tabt . 5 = 'TIRC' ; tabt . 'TITRE' . 5 = 'Pdt convection' ; * On ne dessine pas le pdt de conv en lagrangien (infini) 'SI' ('NON' ('EGA' vmail 'LAGR')) ; evtot = (evdi 'ET' evma 'ET' evmo 'ET' evmi 'ET' evco) ; 'SINON' ; evtot = (evdi 'ET' evma 'ET' evmo 'ET' evmi) ; 'FINSI' ; 'DESSIN' evtot 'MIMA' 'TITR' 'Pas de temps' 'LEGE' tabt ; maxy = (('ENTIER' ('MAXIMUM' liter)) '+' 1.) ; ldv = (('LOG' ldv) '/' ('LOG' 10.)) ; 'DESSIN' evdv 'MIMA' 'TITR' 'Div v' ; 'FINPROC' ; * ** Fin de la définition des procédures ************************************************************** ************************************************************** ** Début du 'main' * **** Définition des constantes * l, h, nl, nh : données pour la boite carrée * dh, db, dg, dd : densités (facultatives) pour la boite * egeom : erreur géométrique pour 'ELIMINATION' * cvg : critère de convergence pour la boucle d'itérations * nitmax : nombre maximum d'itérations * minnz : zéro pour ne pas avoir de pbs avec / , LOG ... * nu, g, rho : paramètres pour l'eau * minnu, ming : squizzage de certains termes dans NS * alfa : paramètre pour NS * gamma : coeff. gamma = 1 => le maillage dégénère * psauv : fréquence de sauvegarde des chpoints * tmax : temps d'arret * pt0 : coeff intensité du cos de pression sur la surface * dtini : 1er pas de temps * poids du dt initial dans dtmoy l = 4.8D0 ; nl = 14 ; h = 4.0D0 ; nh = 22 ; db = 3.0D0 ; dh = 0.3D0 ; dg = 2.0D0 ; dd = 0.5D0 ; egeom = 1.D-4 ; cvg = 1.D-6 ; npdtmax = -1 ; nitmax = -1 ; minnz = 1.D-13 ; nu = 1.D-2 ; minnu = nu '*' minnz ; g = (0.D0 -1.D0) ; ming = (0.D0 0.D0) ; rho = 1.D3 ; alfa = 0.8D0 ; gamma = 0.01D0 ; psauv = 1 ; *pt0 = -1.D0 ; dtini = 0.25D0 ; pt0 = -1.D0 ; dtini = 2.5D-6 ; poini = 0 ; 'SI' ('NON' court) ; tmax = 4.0D0 ; ptrc = 1.0D0 ; ttrc = ptrc ; * tmax = 60.0D0 ; ptrc = 10.0D0 ; ttrc = ptrc ; * fsauv = 'CHAINE' 'nlt' ('ENTIER' tmax) vmail optlapn * 'a' ('ENTIER' (alfa '*' 10)) * 'c' ('ENTIER' ((LOG10 cvg) '-' 0.5D0)) * 'g' ('ENTIER' ((LOG10 gamma) '-' 0.5D0)) 'po' poini '.sauv' ; 'SINON' ; tmax = 0.25D0 ; ptrc = 0.05D0 ; ttrc = ptrc ; * tmax = 0.25D0 ; ptrc = 0.25D0 ; ttrc = ptrc ; * fsauv = '/test4/gounand/ale/dumb' ; 'FINSI' ; **** Création des maillages $cavite = 'TABLE' 'MAILLAGE' ; $cavite = CREMAIL $cavite l h nl nh egeom ; * 'DX' dg dd 'DY' db dh ; 'SI' ('EGA' vmail 'CVS2LF') ; CDXHAUT ($cavite . '$haut') ; 'FINSI' ; **** Initialisation des tables diverses $var = 'TABLE' 'VARIABLE' ; $pdt = 'TABLE' 'PASDETPS' ; INITVAR $var $cavite ; INITPDT $pdt alfa gamma dtini poini ; INITHIST $hist ; 'SI' (graph 'ET' inta) ; INITSAUV $sauv ; 'FINSI' ; **** Premier pas de temps * Calcul de la contrainte à appliquer sur la surface rits = CALCON ($cavite . '$haut') pt0 ; * Calcul des champs à l'instant dtini * Peu d'avance en temps => pas de diffusion * Dirac => champ de pression du à g négligeable $var $pdt = PREPAS $var $pdt $cavite rits minnu ming ; * Pour ne pas avoir une estimation de pas de temps avec 0 $var . 'wnp05i' = ('TEXTE' vmail) ($var . 'unp05i') $cavite optlapn ($cavite . 'cnfini') ; $var . 'erri' = CALCERR ($var . 'unp05i') ($var . 'unp05im1') 'MINMAX' ; $pdt . 'nupdt' = (($pdt . 'nupdt') '+' 1) ; $var . 'unm05' = ('COPIE' ($var . 'unp05i')) ; $var . 'wnm05' = ('COPIE' ($var . 'wnp05i')) ; ampvit = l '/' (10.D0 '*' ('MAXIMUM' ($var . 'unm05') 'ABS')) ; MESI $var $pdt ; MEST $var $pdt ; 'SI' graph ; TRTOUT ; 'SI' inta ; MAJSAUV $sauv $var $pdt ; 'FINSI' ; 'FINSI' ; ***** Boucle sur les pas de temps 'REPETER' TITER npdtmax ; **** Boucle d'itérations * Initialisation $pdt . 'iter' = 0 ; $var . 'unp05i' = ('COPIER' ($var . 'unm05')) ; $var . 'wnp05i' = ('COPIER' ($var . 'wnm05')) ; 'FORME' ($var . 'cnfnm05') ; $var . 'cnfnp05i' = 'FORME' ; * Estimation du pas de temps pour le maillage pm = CINVPDTM ($var . 'wnm05') ($cavite . '$mt') ; $pdt . 'mail' = (-1.0D0 '/' pm) ; MAJPDT $pdt ; * Boucle 'REPETER' BITER nitmax ; * On bouge le maillage -> xn+1/2(i) 'FORME' ($var . 'cnfnp05i') ; $var . 'wnp05i' = ('TEXTE' vmail) ($var . 'unp05i') $cavite optlapn ($cavite . 'cnfini') ; 'FORME' ($var . 'cnfn') ; $var . 'cnfnp05i' = 'FORME' dxns2 ; * Calcul de un+1/2(i) $var $pdt = CVIT $cavite $var $pdt nu g discconv ; $var . 'erri' = (CALCERR ($var . 'unp05i') ($var . 'unp05im1') 'MINMAX') ; $pdt . 'iter' = (($pdt . 'iter') '+' 1) ; MESI $var $pdt ; 'SI' (($var . 'erri') '<' cvg) ; 'QUITTER' BITER ; 'FINSI' ; 'FIN' BITER ; * On avance d'un pas de temps : * estimation des maillages xn+1/2 * et xn+1 avec le dernier u calculé 'FORME' ($var . 'cnfnp05i') ; $var . 'wnp05i' = ('TEXTE' vmail) ($var . 'unp05i') $cavite optlapn ($cavite . 'cnfini') ; $var . 'deltaxn' = (($var . 'deltaxn') '+' (2.0D0 '*' dxns2)) ; $pdt . 'nupdt' = (($pdt . 'nupdt') '+' 1) ; $pdt . 'tphyn' = (($pdt . 'tphyn') '+' ($pdt . 'min')) ; $var . 'unm05' = ('COPIE' ($var . 'unp05i')) ; $var . 'wnm05' = ('COPIE' ($var . 'wnp05i')) ; 'FORME' ($var . 'cnfn') ; $var . 'cnfnm05' = 'FORME' dxns2 ; * Sauvegarde éventuelle des champs à n-1/2 MAJSAUV $sauv $var $pdt ; 'FINSI' ; $var . 'cnfn' = 'FORME' dxns2 ; * Sauvegarde du reste (volume, pos des points) à n MAJHIST $hist $cavite $pdt $var ; 'SI' ((($pdt . 'tphyn') '>EG' ttrc) 'ET' graph) ; TRTOUT ; ttrc = ttrc '+' ptrc ; 'FINSI' ; MEST $var $pdt ; 'SI' (($pdt . 'tphyn') '>' tmax) ; 'QUITTER' TITER ; 'FINSI' ; 'MENAGE' ; 'FIN' TITER ; TABTPS = 'TEMPS' 'NOEC' ; $pdt . 'tpscpu' = TABTPS.'TEMPS_CPU'.'INITIAL' ; ** Sauvegarde 'SI' ('EXISTE' ($cavite . '$mt') 'MATESI') ; 'OUBLIER' ($cavite . '$mt') 'MATESI' ; 'FINSI' ; 'MENAGE' ; *'OPTION' 'SAUV' fsauv ; *'SAUVER' ; * ** Fin du 'main' ************************************************************** ************************************************************** ** Début du post-traitement * 'SI' graph ; 'SI' inta ; 'FORME' ($cavite . 'cnfini') ; fv = FILMVIT $sauv $var ; 'TRACER' fv 'ANIME' ; 'OUBLIER' fv ; MENAGE ; 'FINSI' ; TRHIST; 'FINSI' ; *** Les tests... ltps = ($hist . 'ltps') ; lvol = ($hist . 'lvol') ; lzr = ($hist . 'lzr') ; lzq = ($hist . 'lzq') ; ** Ici, on teste la conservation du volume du domaine critere1 = 'MAXIMUM' lvol 'ABS' ; * Résultat obtenu le 29/12/97 : * critere1 = .9806970050855623D-14 limite1 = 1.D-10 ; 'SI' graph ; 'DESSIN' evvol 'AXES' 'MIMA' 'TITR' 'Ecart au volume initial' ; 'FINSI' ; ltrram = ('PROG' 0.0 0.4 0.9 1.55 2.35 3.1 3.9 4.7 5.65 6.75 7.75 8.6 9.25 9.95 10.65 11.35 11.9 12.45) '*' (4. '/' 12.) ; ltqram = ('PROG' 0.0 0.5 1. 1.6 2.25 2.9 3.7 4.4 5.1 6.1 7.1 7.9 8.6 9.2 9.9 10.5 11.1 11.6 12. 12.45) '*' (4. '/' 12.) ; lzrram = ('PROG' 0.0 0.45 1.05 1.6 2.4 2.95 3.5 3.8 3.95 3.95 3.75 3.25 2.8 2.15 1.6 0.9 0.3 -0.25) '*' ((-2.) '/' 11.8) ; lzqram = ('PROG' 0.0 0.75 1.35 2.3 3.25 4.15 5.15 5.8 6.3 6.5 6.4 5.85 5.25 4.5 3.8 3. 2.25 1.45 0.75 0.25) '*' (2. '/' 11.8) ; * Comparaison des profils zQ(t) et zR(t) de Ramaswami aux notres * on les remet sur ltps par interpolation linéaire * échelles pour r et q critere2 = ('MAXIMUM' (lzrint '-' lzr) 'ABS') '/' echrq ; critere3 = ('MAXIMUM' (lzqint '-' lzq) 'ABS') '/' echrq ; * Résultats obtenus le 29/12/97 : * critere2 = .4174969242483980D-01 * critere3 = .9776923547482334D-01 limite2 = 0.05D0 ; limite3 = 0.12D0 ; 'SI' graph ; tabevzqr = 'TABLE' ; tabevzqr . 'TITRE' = 'TABLE' ; tabevzqr . 1 = 'NOLI' ; tabevzqr . 'TITRE' . 1 = 'zQ (Castem 2000)' ; tabevzqr . 2 = 'NOLI' ; tabevzqr . 'TITRE' . 2 = 'zR (Castem 2000)' ; tabevzqr . 3 = 'TIRR' ; tabevzqr . 'TITRE' . 3 = 'zQ (Rama. interpolé)' ; tabevzqr . 4 = 'TIRR' ; tabevzqr . 'TITRE' . 4 = 'zR (Rama. interpolé)' ; tabevzqr . 5 = 'NOLI MARQ CARR' ; tabevzqr . 'TITRE' . 5 = 'zQ (Ramaswami)' ; tabevzqr . 6 = 'NOLI MARQ CARR' ; tabevzqr . 'TITRE' . 6 = 'zR (Ramaswami)' ; 'DESSIN' (evzq 'ET' evzr 'ET' evzqint 'ET' evzrint 'ET' evzqram 'ET' evzrram) 'MIMA' 'TITR' 'Amplitude de Q et R' 'XBOR' 0. tmax 'LEGE' 'AXES' tabevzqr ; 'FINSI' ; * ** Affichage des messages et des erreurs éventuelles * 'OPTION' 'ECHO' 0 ; SUMMARY ; 'SAUTER' 2 'LIGNE' ; 'MESSAGE' 'Debriefing :' ; 'MESSAGE' '------------' ; 'MESSAGE' 'Conservation relative du volume' ; 'MESSAGE' 'Valeur / Limite :' ; 'MESSAGE' ('CHAINE' 'FORMAT' '(D24.16)' critere1 ' / ' limite1) ; 'SAUTER' 'LIGNE' ; 'MESSAGE' 'Comparaison d ordonnées (points extremes de la surface)' ; 'MESSAGE' 'avec une autre simulation numérique (Ramaswamy)' ; 'MESSAGE' 'zR(t) (Erreur / Limite) :' ; 'MESSAGE' ('CHAINE' 'FORMAT' '(D24.16)' critere2 ' / ' limite2) ; 'MESSAGE' 'zQ(t) (Erreur / Limite) :' ; 'MESSAGE' ('CHAINE' 'FORMAT' '(D24.16)' critere3 ' / ' limite3) ; 'SAUTER' 'LIGNE' ; 'MESSAGE' ('CHAINE' 'Temps CPU / Temps CPU (29/12/97) (interactif) : ') ; 'MESSAGE' ('CHAINE' ('ENTIER' (($pdt . 'tpscpu') '/' 100.0D0)) ' / ~28' ' secondes') ; 'SI' ('OU' (critere1 '>' limite1) ('OU' (critere2 '>' limite2) (critere3 '>' limite3))) ; 'ERREUR' 5 ; 'FINSI' ; 'MESSAGE' 'Tout s est bien passé' ; 'OPTION' 'ECHO' 1 ; 'SI' inta ; 'OPTION' 'DONN' 5 ; 'FINSI' ; * ** Fin du post-traitement ************************************************************** 'FIN' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales