* fichier : difasyk2D.dgibi ************************************************************************** * * CAS TEST DIPHASIQUE LIQUIDE-LIQUIDE 2D PLAN * *************************************************************************** * * * Présentation: Ce cas test permet la simulation de la sédimention * de gouttes sphériques de liquide immergé dans * un milieu continu (autre liquide) de densité moindre. * Bien entendu les densités peuvent être modifiées. * * * * Le modèle : Le modèle simulé consiste à résoudre 2 équations de la * quantité de mouvement sur les flux volumiques des 2 * phases JC et JD. Ensuite on résout une équation de la * conservation de la masse qui porte sur la fraction * volumique de la phase dispersée : AD (pour alpha_D). * La conservation de la fraction voumique de la phase * continue AC s'en déduite par AD + AC = 1. * L'équation d'incompressibilité du fluide est * Div(JC+JD) = 0. * * le modèle de coalescence est simplifié, ce qui * revient à jouer sur la viscosité efficace de l'émulsion * MUEFF qui tend vers la valeur de la phase pure * reconstituée lorsque la fraction volumique dépasse * un certain seuil. Le présent cas-test, pour des raisons * d'obtention de résultats analytiques, laisse la * viscosité efficace constante quelque soit la valeur de * AD. Le front de sédimentation est alors très raide * et notre problème revient regarder évoluer le front * de sédimentation de billes tombant toujours à la * même vitesse puis s'arrêtant brutalement lorsqu'elles * rencontrent la zone sédimentée. * * * Le maillage fait une maille d'épaisseur pour accélérer * la simulation dans le cadre des tests du répertoire * castem/dgibi. * * * Auteur : Gilles Bernard-Michel * * Révision : version 1 * * date : 21/12/99 * ************************ Options générales ********************************* * * ** Sortie graphique. * GRAPH = 'O'; * *test long ou court. * COMPLET = FAUX; * *période des sorties graphiques : tous les NITMA/PERIO pas de temps * PERIO = 1 ; * * nombre de mailles, pas de temps , intervalle de temps. * SI (NON COMPLET) ; nptx = 1. ; npty = 10. ; DELTATPS = 2.; * nombre pas de temps NITMA = 10 ; * nombre points fixes NITER = 3 ; * convergence point fixe. SINON; nptx = 1; npty = 30; DELTATPS = 0.5D0; * nombre pas de temps NITMA = 40 ; * nombre points fixes NITER = 5 ; * convergence point fixe. FINSI; * ************************ On définit les propriétés physiques *************** * * ** viscosité dynamique mu/rho. * nu =1.E-6 ; * ********************* On traite les aspects géométriques ******************** * * ** Les paramètres de la géométrie. * rint = 0. ; rext = 0.1; hh = 0.5 ; * ** Densité du maillage. * dx = (rext - rint) / nptx; dy = hh / npty ; * ** Les sommets du bol * p1 = rint 0. ; p2 = rext 0. ; p3 = rext hh ; p4 = rint hh ; p6 = 1.0*dx 0.0; p8 = 1.D0*dx hh; * ** Assemblage des bords du domaine. * bas = p1 'DROIT' dini dx dfin dx p2 ; cotd = p2 'DROIT' dini dy dfin dy p3 ; haut = p3 'DROIT' dini dx dfin dx p4 ; cotg = p4 'DROIT' dini dy dfin dy p1 ; cnt = bas 'ET' cotd 'ET' haut 'ET' cotg ; * ** On maille avec des rectangles. * mt= bas cotd haut cotg 'DALLER' ; 'TASSER' mt ; * ** On réoriente les éléments. * mt = 'ORIENTER' mt ; &mt = CHANGER mt QUAF ; &bas = CHANGER bas QUAF ; &cotd = CHANGER cotd QUAF ; &haut = CHANGER haut QUAF ; &cotg = CHANGER cotg QUAF; &cnt = CHANGER cnt QUAF ; 'ELIMINATION' 1.e-6 (&mt 'ET' &cnt 'ET' &cotg 'ET' &haut 'ET' &cotg 'ET' &cnt); * ** On crée le domaine associé au maillage. * * On crée une droite pour tracer des profils de fraction volumique. lmt = 'CHANGE' mt LIGNE ; * ** on crée une frontière moins un noeud pour le cas ** de cavités carrés. Il ne faut pas retirer un coin ** car on peut avoir un champ sortant. * $cnt = 'MODELISER' &cnt 'NAVIER_STOKES' QUAF; cntcc = 'CHANGER' cntcc POI1; retir = p8 'MANUEL' POI1; * ********************************* * PROCEDURE CALCULANT LE MODULO * ********************************* * DEBPROC MODULO i*ENTIER j*ENTIER ; k*ENTIER = i / j ; mod = i - ( k * j ) ; FINPROC mod ; *------------------------------------------------------------------------ *----------------------------------------------------------------------- * - LIREXY3 - - * PROCEDURE POUR OBTENIR UNE LISTE CONTENANT LES VALEURS DU CHPO AUX - * POINTS DE DONNEES : premiere étape pour le tracé d'histogramme - * PROCEDURE EN TOUT POINT COMPARABLE A LIREXY SAUF QUE L'ON A UNE - * TABLE EN SORTIE : POUR TRACE D'HISTOGRAMMES. - * (VOIR REMARQUE SUR POINT PROCHE DANS LIREXY). - *----------------------------------------------------------------------- * En entrée ... - * - CHPOD : champ point dont on extrait les valeurs, - * - MAILD : maillage des points centres où prendre les valeurs - * - K : le nom (MOT) de la composante du champ que l'on extrait. - *----------------------------------------------------------------------- * En sortie ... - * la liste des valeurs f(xi,yi) - *----------------------------------------------------------------------- REPETER BACQ NPT; I = &bacq; Pt = MAILD POINT I; KI = 'EXTRAIRE' CHPOD Pt K; SI (I EGA 1); SINON; FINSI; FIN BACQ; dessin evo; 'FINPROC'; * Idem pour points sommet. NPT = NPT + 1 ; REPETER BACQ NPT; I = &bacq; Pt = MAILD POINT I; KI = 'EXTRAIRE' CHPOD Pt K; SI (I EGA 1); SINON; FINSI; FIN BACQ; dessin evo; 'FINPROC'; * * *************************************** * PROCEDURE DE CALCUL DES COEFFICIENTS * DES EQUATIONS DE QUANTITE DE MOUVEMENT * *************************************** * DEBPROC ACTU RV*'TABLE' $mt*'MMODEL' ; * constantes du probleme roc = RV.INCO.'ROC' ; rod = RV.INCO.'ROD' ; muc = RV.INCO.'MUC' ; mud = RV.INCO.'MUD' ; expo = RV.INCO.'EXPOS' ; farcc = RV.INCO.'FARCC' ; farcd = RV.INCO.'FARCD' ; * LECTURE DES INCONNUES * RJC = RV.INCO.'RJC' ; RJD = RV.INCO.'RJD' ; JC = RV.INCO.'JC' ; JD = RV.INCO.'JD' ; * implicitation en alpha pour les frottements. ALPM = RV.INCO.'AM' ; *ALPD = 'COPIER' RV.INCO.'ALPD'; MASK1D = ALPD MASQUE 'INFERIEUR' (1.D0 '-' 1.D-15) ; MASK1D = ALPD MASQUE 'SUPERIEUR' 1D-15 ; RAYC = RV.INCO.'RAYC' ; ALPI = RV.INCO.'RALPI' ; COAL = RV.INCO.'COAL' ; *** COUPLAGE DYNAMIQUE *** * VISCOSITE DYNAMIQUE EFFICACE MUEFF = ALPD ; ** UC ET UD : VITESSES INSTANTANEES relaxées ** SEUIL = (('TANH' (1.D20 * (ALPC '-' 1.D-3))) '+' 1)/2.D0; ALPCV = ALPCX 'ET' ALPCY ; SEUIL = (('TANH' (1.D20 * (ALPD '-' 1.D-3))) '+' 1)/2.D0; ALPDV = ALPDX 'ET' ALPDY ; ** VUD : VITESSES INSTANTANEES lissées** * COEFF DE FROTTEMENT *on calcule une fraction volumique ALPD prenant *en compte les parois verticales = max (alpd alpdm). maskp = ALPD 'MASQUE' 'SUPERIEUR' ALPM ; *HINDER = ALPDF ; *HINDER = ALPC; RV.INCO.'AD') ; RV.INCO.'AD') ; RV.INCO.'AD') ; RV.INCO.'AD') ; * COEFFICIENT DE COALESCENCE MDIST = DIST MASQUE 'SUPERIEURE' 1.D-4 ; * termes de pression RV.INCO.'PUD' = 1.0 * RV.INCO.'PUD'; * terme source pesanteur signe + si TOIMP * signe - si MDIA ou dans DFDT. on met de l'ordre * 2, au lieu de alpc alpd(n+1), on a * (alpc-alpd)alpd(n+1) + alpd*alpd farchci = -1.D0 * farchc ; *partie expl farchce = -1.D0 * farchce; farchdi = -1.D0 * farchd ; *partie expl farchde = -1.D0 * farchde; * equation du rayon RV.INCO.'RAYALPI' = (1.D0/3.D0)* RV.INCO.'ALPI'; * terme de stabilisation QDM RV.INCO.'GRALPC' = 'ABS' RV.INCO.'GRALPC'; RV.INCO.'GRALPC' = .1D0 * RV.INCO.'GRALPC'; RV.INCO.'GRALJDM' = 0.1D0 * RV.INCO.'GRALJD'; RV.INCO.'GRALJD' = -10.D0 * RV.INCO.'GRALJD'; FINPROC RV; ************************* *** DONNEES PHYSIQUES *** ************************* * formule Ishii *expo= -4.1; * ON NE FAIT PAS VARIER MUEFF VOIR DESCRIPTION DU MODELE expo = -0.0D0; *Densité volumique ROC = 1000.D0 ; ROD = 1100.D0 ; epsilc = (ROC - ROD) / ROC ; epsild = (ROD - ROC) / ROD ; * Viscosite cinématique et dynamique de la phase liquide MUC = 0.001D0 ; NUC = MUC / ROC ; MUD = 0.001D0 ; NUD = MUD / ROD ; * Rayon initial des gouttes ray0 = 1.D-4 ; * Concentration initiale de la phase dispersée ALPD0 = 0.3D0 ; ALPI0 = 3.D0 * ALPD0 / ray0 ; * Concentration initiale de la phase continue ALPC0 = 1 - ALPD0 ; C0 = 1.D-2 ; * Coeff. de Pénalisation * EPSS=1.D-9; * Valeur minimale de EPSN * MIEPS = 1.e-5 ; * Valeur maximale de EPSN * MAEPS = 0.99999 ; * Vicosité maximale et truc maximal * ALPMAX = 0.9D0 ; MUMAX = 1.D-1 ; RAY2 = 1.D-3; * poussée d'Archimède multipliée par +1 car TOIMP à droite de l'égaZZlité archi = gravos ; farcc = epsilc* archi ; farcd = epsild* archi ; * fraction vol max alphadm = 0.9900000001D0 ; alphacm = MIEPS ; * profil de fraction volumique cory = 'COORDONNEE' 2 &mt; alpd1 = 'TANH' (200.D0 * (cory '-' (3.*hh/10.D0))) ; alpd1 = (0.999 '-' ALPD0) * (1.D0 '-' alpd1) '/' 2.D0; alpd2 = 'TANH' (200.D0 * (cory '-' (9.D0 * hh/10.D0))) ; alpd2 = ALPD0 * (1.D0 '-' alpd2) '/' 2.D0; alpd = alpd1 '+' alpd2; alpini = alpd; *'TRACER' ALPD &mt; * PAS DE TEMPS * TERDT = DELTATPS ; ************************************ *** SYSTEMES D'EQUATIONS ET C.L. *** ************************************ * * ************************************* *** SYSTEME PORTANT SUR : *** *** UN, VN, P *** ************************************* * EQUATION DE CONSERVATION DE LA QUANTIE DE MVT PHASE CONT * * composantes r,z OPTI 'EFM1' 'IMPL' 'CONS' 'BDF2' 'CENTREE' ZONE $mt OPER 'MDIA' 'FARCHCI' INCO 'AD' 'JC' ; RV = 'EQEX' RV OPTI 'EFM1' 'IMPL' 'CENTREE' ZONE $mt OPER 'MDIA' 'FRCD' INCO 'JD' 'JC' ZONE $mt OPER 'MDIA' 'FRCC' INCO 'JC' 'JC' *OPTI 'EF' 'IMPL' 'CONS' 'CENTREE' 'MUCONS' OPTI 'EF' 'IMPL' 'CONS' 'CENTREE' *ZONE $mt OPER 'KONV' 1.D0 'UC' 1.D-15 DT INCO 'JC' ZONE $mt OPER 'LAPN' 'NUEFFC' INCO 'JC' ; RV = EQEX RV OPTI 'EF' 'IMPL' 'CENTREP1' 'CENTREE' ; * * EQUATION DE CONSERVATION DE LA QUANTITE DE MVT PHASE DISP * * composantes r, z RV = EQEX RV OPTI 'EFM1' 'IMPL' 'BDF2' 'CONS' 'CENTREE' ZONE $mt OPER 'MDIA' 'FARCHDI' INCO 'AD' 'JD' ZONE $mt OPER 'MDIA' 'FRDC' INCO 'JC' 'JD' ZONE $mt OPER 'MDIA' 'FRDD' INCO 'JD' 'JD' OPTI 'EF' 'IMPL' 'CENTREE' *ZONE $mt OPER 'TOIMP' 'FARCHD' INCO 'JD' ; RV = EQEX RV *OPTI 'EF' 'IMPL' 'CENTREE' 'MUCONS' OPTI 'EF' 'IMPL' 'CENTREE' ZONE $mt OPER 'LAPN' 'NUEFFD' INCO 'JC' ZONE $mt OPER 'LAPN' 'NUEFFD' INCO 'JD' OPTI 'EF' 'IMPL' 'CONS' 'SUPG' *ZONE $mt OPER 'KONV' 1.D0 'UD' 1.D-15 DT INCO 'JD' ; ; RV = EQEX RV OPTI 'EF' 'IMPL' 'CENTREP1' 'CENTREE' *ZONE $mt OPER 'KMBT' 'GRALPS' 0.D0 'SOMM' 1.D-15 INCO 'AD' 'JD' *ZONE $mt OPER 'KMBT' -0.001 0.D0 'SOMM' 1.D-15 INCO 'AD' 'JD' ; * * EQUATION DE CONSERVATION DU VOLUME (INCOMPRESSIBLE) * RV = EQEX RV OPTI 'EFM1' 'IMPL' 'CENTREP1' 'CENTREE' *OPTI 'EFMC' 'IMPL' 'CENTREE' 'INCOD' CENTREP1 *ZONE $mt OPER 'DFDT' EPSS 'PRES' DT 'JNUL' 1.D+15 INCO 'PRES' ; * * EQUATION DE CONSERVATION DE LA FRACTION VOLUMIQUE * RV = EQEX RV OPTI 'EFM1' 'IMPL' 'CONS' 'BDF2' 'CENTREE' OPTI 'EF' 'IMPL' 'CENTREP1' 'CONS' 'SUPG' 'CMD' 0.20 *OPTI 'EF' 'IMPL' 'CENTREE' *ZONE $mt OPER 'LAPM' 'GRALPC' INCO 'AD' ; *** FIN SECOND SYSTEME *** ************************** * * CONDITION AUX LIMITES * RV = EQEX RV 'CLIM' 'JC' 'UIMP' (&cotg 'ET' &cotd) 0.D0 'JC' 'VIMP' (&bas 'ET' &haut) 0.D0 'JD' 'UIMP' (&cotg 'ET' &cotd) 0.D0 'JD' 'VIMP' (&bas 'ET' &haut) 0.D0 'AD' 'TIMP' (&bas) 1.D0 'AD' 'TIMP' (&haut) 0.D0 ; RV = EQEX RV 'CLIM' * ******************************************* * INITIALISATION DES TABLES DES INCONNUES ******************************************* * * RV.INCO = TABLE INCO ; RV.INCO.'ROC' = ROC ; RV.INCO.'ROD' = ROD ; RV.INCO.'MUC' = MUC ; RV.INCO.'MUD' = MUD ; RV.INCO.'EXPOS' = expo ; RV.INCO.'FARCC' = farcc ; RV.INCO.'FARCD' = farcd ; RV.INCO.'ALPHADMAX' = alphadm ; * RV.'DT' = DELTATPS ; RV.INCO.'DT' = RV.'DT' ; RV.INCO.'GDT' = -1.D0 * epsild * 9.81D0 * DELTATPS ; * INITIALISATION DES COEFFICIENTS * *COEFFICIENT DE RELAXATION ALFI = 1.0D0 ; ALFID = 1.0D0 ; ALFII = 1.D0 ; * Compteur des pas de temps ntemp = 0 ; *** Calcul de ALPM frac vol pour la paroi *********************** *** distance à la paroi la plus proche ************************** masko = corx 'MASQUE' 'INFERIEUR' corxi ; drel = 2.D0 * (alphadm**0.34); * on fabrique une fraction volumique telle que les écarts * entre particules soient identiques à la distance à la paroi * la plus proche. *'TRACER' RV.INCO.'AM' &mt ('CONTOUR' &mt); * **** BOUCLES DES ITERATIONS INTERNES ET EN TEMPS **************** * REPETER BLOCKT NITMA ; * ntemp = ntemp + 1 ; 'MESSAGE' 'Itération externe N°' ntemp; ntempi = 0 ; * On stocke les variables au pas de temps ntemp * On effectue les itérations de point fixe * 'REPETER' BLOCKI NITER ; * ntempi = ntempi + 1 ; * * ************************************* *** SYSTEME PORTANT SUR : *** *** UN, VN, P *** ************************************* * * On charge les résultats du vrai pas de temps précédent * resultats de l'iter interne préc. * Rayon moyen *RAY = 'KOPS' ALPDIP '/' ALPIIP ; *RAY = 'KCHT' $mt SCAL 'SOMMET' RAY ; *RAY = 'KOPS' RAY '*' ECSTA2 ; *RAY = 'KOPS' RAY '*' 3 ; RV.INCO.'RAYC' = RAYC ; * * On réactualise les données. * RV = ACTU RV $mt; * On affecte le terme source expl de QDM par le biais de DFDT * coef 2 car ordre 2 en temps dans dfdt. JCPP sinon la poussee * archi est rechargéee * fois lors des reinitialisations EXEC RV ; 'MESSAGE' 'Boucle interne N°' ntempi; * CALCUL DE L'ERREUR RELATIVE MAX. * ERR = 0.D0 ; '/' ('MAXIMUM' ('ABS' JCIP) '+' 1.D-10) ; '/' ('MAXIMUM' ('ABS' JDIP) '+' 1.D-10) ; ERRC = 'MAXIMUM' ('ABS' ERRC) ; ERRD = 'MAXIMUM' ('ABS' ERRD) ; 'SI' (ERRC > ERR) ; ERR = ERRC ; 'FINSI' ; 'SI' (ERRD > ERR) ; ERR = ERRD ; 'FINSI' ; '/' ('MAXIMUM' ('ABS' ALPDIP) '+' 1.D-10) ; ERRA = 'MAXIMUM' ('ABS' ERRA) ; 'SI' (ERRA > ERR) ; ERR = ERRA ; 'FINSI' ; * CALCUL DE L'ERREUR RELATIVE MAX. * *'LIST' VAR; 'MESSAGE' ERR; 'MESSAGE' ERRC ERRD ERRA; QUITTER BLOCKI ; 'FINSI' ; * 'FIN' BLOCKI ; * 'MESSAGE' 'NBR ITER INTERNES' ntempi; 'MESSAGE' 'ERREUR RELATIVE MAX' ERR ; 'MESSAGE' 'Max JC' ('MAXIMUM' (RV.INCO.'JC')) ; 'MESSAGE' 'Min JC' ('MINIMUM' (RV.INCO.'JC')) ; 'MESSAGE' 'Max JD' ('MAXIMUM' (RV.INCO.'JD')) ; 'MESSAGE' 'Min JD' ('MINIMUM' (RV.INCO.'JD')) ; 'MESSAGE' 'Max AlpD' ('MAXIMUM' (RV.INCO.'AD')) ; 'MESSAGE' 'Min AlpD' ('MINIMUM' (RV.INCO.'AD')) ; SI (EGA GRAPH O); 'SI' ('EGA' (ntemp MODULO (NITMA/PERIO)) 0 ) ; toto = RV.INCO.'AD'; 'Frac vol phase Dispersee - comparaison solu init' ; uref = 1.D+2; 'DESSIN' Ejc 'TITRE' 'Profil vertical de Jc'; uref = 1.D+2; 'DESSIN' Ejd 'TITRE' 'Profil vertical de Jd '; dessin Epp 'TITRE' 'pression réduite'; 'FINSI' ; FINSI; 'FIN' BLOCKT ; ************* calcul de l'erreur ************************************ * calcul de la solution analytique. * La vitesse volumique max de sédimentation pour JD jdsolm = ALPD0 '*' (1.D0 '-' ALPD0); coefsol = 2. * ray0 * ray0 * 9.81 * (rod - roc) / (9. * nu * roc); jdsolm = coefsol * jdsolm; * Le profile de fraction volumique au temps final NITMA * DELTATPS deplabas = (3. * hh/10.) + (jdsolm * nitma * DELTATPS); deplahau = hh - (hh/10.) - ((deplabas - (3.* hh/10.))/ alpd0); cory = 'COORDONNEE' 2 &mt; alpd1 = 'TANH' (20000.D0 * (cory '-' (deplabas))) ; alpd1 = (0.999 '-' ALPD0) * (1.D0 '-' alpd1) '/' 2.D0; alpd2 = 'TANH' (200.D0 * (cory '-' (deplahau))) ; alpd2 = ALPD0 * (1.D0 '-' alpd2) '/' 2.D0; alpd = alpd1 '+' alpd2; alpfin = alpd; * la vitesse de sédimenation pour JD (flux volumique), pour * alpd numérique donné coefsol = -2. * ray0 * ray0 * 9.81 * (rod - roc) / (9. * nu * roc); jdsol = coefsol * jdsol; * la vitesse volumique verticale calculée numériquement * idem mais avec la fraction volumique analytique jdsol1 = coefsol * jdsol1; * calcul de l'erreur L2 sur la fraction volumique DEBPROC CALCURR vit*'CHPOINT' vitsol*'CHPOINT' mod*'MMODEL' mt*'MAILLAGE' coupe*'MAILLAGE'; * ud2 = MAXI ud2; usol2 = vitsol * vitsol; * us2 = (MAXI us2) + 1.e-14; err = ud2 / us2; err = err**0.5; FINPROC err ; * erreur en pression (choque inclus) en norme L2. errorp = CALCURR RV.INCO.'AD' alpfin $mt mt alpdco; * erreur en flux vol de vitesse JD (choque inclus) * par rapport à la solution semi analytique (formule * analytique faisant intervenir AD calculé numériquement). errorv = CALCURR jdsoln jdsol $mt mt alpdco; * erreur pour JD par rapport à la solution analytique errorv1 = CALCURR jdsoln jdsol1 $mt mt alpdco; SI (EGA GRAPH O); trac mt; 'Frac vol phase Dispersee - comparaison solu analytique' ; * on compare maintenant les flux avec le flux analytique mais * utilisant la fraction volumique calculée numériquement. * ceci permet d'évaluer la résolution intrinsèque de la quantité * de mouvement. On pourrait aussi comparer avec la solution * analytique. FINSI; * SI (NON COMPLET); SI (errorp > 0.07D0); ERREUR 5; FINSI; SI (errorv > 1.D-3); ERREUR 5; FINSI; SI (errorv1 > 0.16D0); ERREUR 5; FINSI; SINON; SI (errorp > 0.03D0); ERREUR 5; FINSI; SI (errorv > 0.001D0); ERREUR 5; FINSI; SI (errorv1 > 0.010); ERREUR 5; FINSI; FINSI; *OPTI SAUV '/u2/gbm/castem/diphiplan.res' ; *REPIX RV ; *REPIX RA ; *SAUV ; fin;
© Cast3M 2003 - Tous droits réservés.
Mentions légales