* fichier : ns1.dgibi 'OPTI' 'ECHO' 0 ; ************************************************************************ * NOM : NS1 * DESCRIPTION : Ecoulement de Navier-Stokes dans une tete de Mickey * avec force tangente sur le bord * On utilise bloq depl dire pour imposer u.n = 0 * Le test vérifie u.n=0 * * * LANGAGE : GIBIANE-CAST3M * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) * mél : gounand@semt2.smts.cea.fr ********************************************************************** * VERSION : v1, 06/06/2008, version initiale * HISTORIQUE : v1, 06/06/2008, création * HISTORIQUE : * HISTORIQUE : ************************************************************************ * 'SAUTER' 2 'LIGNE' ; 'MESSAGE' ' Execution de ns1.dgibi' ; 'SAUTER' 2 'LIGNE' ; * * interact = FAUX ; graph = FAUX ; * 'OPTION' 'DIME' 2 'ELEM' 'QUA8' ; 'SI' ('NON' interact) ; 'OPTION' 'TRAC' 'PS' ; 'SINON' ; 'OPTION' 'TRAC' 'X' ; 'FINSI' ; lok = VRAI ; * * Procédure de calcul de la normale à un contour * * _mt : maillage de surface * discg : discrétisation géométrique * mnor : noms de composantes pour la normale * discm : discrétisation pour la normale * 'DEBPROC' VNOR ; 'ARGUMENT' _mt*'MAILLAGE' ; 'ARGUMENT' discg*'MOT' ; 'ARGUMENT' mnor*'LISTMOTS' ; 'ARGUMENT' discm*'MOT' ; * idim = 'VALEUR' 'DIME' ; numop = idim ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ; A = ININLIN numop numvar numdat numcof numder ; A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ; A . 'VAR' . 1 . 'DISC' = 'CSTE' ; A . 'VAR' . 1 . 'VALEUR' = 1.D0 ; 'REPETER' iiidim idim ; iidim = &iiidim ; A . iidim . 1 . 0 = 'LECT' ; 'FIN' iiidim ; numvar = idim ; numcof = idim ; B = ININLIN numop numvar numdat numcof numder ; 'REPETER' iiidim idim ; iidim = &iiidim ; nominc = 'EXTRAIRE' mnor iidim ; * 'LISTE' nominc ; B . 'VAR' . iidim . 'NOMDDL' = 'MOTS' nominc ; B . 'VAR' . iidim . 'DISC' = discm ; B . 'COF' . iidim . 'COMPOR' = 'CHAINE' 'VNOR' iidim ; B . 'COF' . iidim . 'LDAT' = 'LECT' ; B . iidim . iidim . 0 = 'LECT' iidim ; 'FIN' iiidim ; chnori = 'NLIN' discg _mt A B 'GAU7' ; * Matrice masse numop = 1 ; numder = idim ; numvar = 1 ; numdat = 0 ; numcof = 0 ; A = ININLIN numop numvar numdat numcof numder ; A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'DUMM' ; A . 'VAR' . 1 . 'DISC' = 'CSTE' ; A . 'VAR' . 1 . 'VALEUR' = 1.D0 ; A . 1 . 1 . 0 = 'LECT' ; B = ININLIN numop numvar numdat numcof numder ; B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ; B . 'VAR' . 1 . 'DISC' = discm ; B . 1 . 1 . 0 = 'LECT' ; chmass = 'NLIN' discg _mt A B 'GAU7' ; chnor = '/' chnori chmass ; 'RESPRO' chnor ; 'FINPROC' ; * * Tracé des vitesses * 'DEBPROC' TRACVIT ; 'ARGUMENT' rvx*'TABLE' ; 'SI' ('EXISTE' rvx 'EQEX') ; rv = rvx . 'EQEX' ; lrvx = VRAI ; domz = rvx . 'DOMZ' ; 'SINON' ; rv = rvx ; lrvx = FAUX ; 'ARGUMENT' domz*'MMODEL' ; 'FINSI' ; nuit = rv . 'NUITER' ; chv = rv . 'INCO' . 'UN' ; maxv = 'MAXIMUM' chv 'ABS' ; 'SI' ('<' maxv 1.D-8) ; maxv = 1.D0 ; 'FINSI' ; echvit = maxv ; mt = 'DOMA' domz 'MAILLAGE' ; echmvi = '**' ('/' ('MESURE' mt) ('NBEL' mt)) ('/' 1.D0 ('VALEUR' 'DIME')) ; vref = '/' ('*' echmvi 2.D0) echvit ; * Vecteur unité mpA = mt 'POIN' 'PROC' (0. 0.) ; cvecu = 'MANUEL' 'CHPO' mpA 2 'UX' echvit 'UY' 0.D0 'NATURE' 'DISCRET' ; vecvit1 = 'VECTEUR' chv vref 'DEPL' 'JAUN' ; vecvit2 = 'VECTEUR' cvecu vref 'DEPL' 'ROUG' ; vecvit = vecvit1 'ET' vecvit2 ; tit = 'CHAINE' 'Vitesse ; nuiter=' nuit ' ; echvit=' echvit ; 'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit 'NCLK' ; 'SI' lrvx ; 'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit 'NCLK' ; mat chpo = 'KOPS' 'MATRIK' ; 'RESPRO' mat chpo ; 'SINON' ; 'TRACER' vecvit mt ('CONTOUR' mt) 'TITR' tit ; 'FINSI' ; 'FINPROC' ; * * Imposition d'une force * 'DEBPROC' KTOIM ; 'ARGUMENT' rvx*'TABLE' ; rv = rvx . 'EQEX' ; mq = 'DOMA' (rvx . 'DOMZ') 'QUAF' ; for = rvx . 'ARG1' ; nominc = 'EXTRAIRE' (rvx . 'LISTINCO') 1 ; ni1 = 'CHAINE' '1' nominc ; ni2 = 'CHAINE' '2' nominc ; * Matrice masse idim = 'VALEUR' 'DIME' ; numop = 2 ; numder = idim ; numvar = 2 ; numdat = 0 ; numcof = 0 ; A = ININLIN numop numvar numdat numcof numder ; A . 'VAR' . 1 . 'NOMDDL' = 'MOTS' 'FX' ; A . 'VAR' . 1 . 'DISC' = 'QUAF' ; A . 'VAR' . 1 . 'VALEUR' = for ; A . 'VAR' . 2 . 'NOMDDL' = 'MOTS' 'FY' ; A . 'VAR' . 2 . 'DISC' = 'QUAF' ; A . 'VAR' . 2 . 'VALEUR' = for ; A . 1 . 1 . 0 = 'LECT' ; A . 2 . 2 . 0 = 'LECT' ; B = ININLIN numop numvar numdat numcof numder ; B . 'VAR' . 1 . 'NOMDDL' = 'MOTS' ni1 ; B . 'VAR' . 1 . 'DISC' = 'QUAF' ; B . 'VAR' . 2 . 'NOMDDL' = 'MOTS' ni2 ; B . 'VAR' . 2 . 'DISC' = 'QUAF' ; B . 1 . 1 . 0 = 'LECT' ; B . 2 . 2 . 0 = 'LECT' ; forint = 'NLIN' 'QUAF' mq A B 'GAU7' ; chvid matvid = 'KOPS' 'MATRIK' ; 'RESPRO' forint matvid ; 'FINPROC' ; * * Bloquage des vitesses suivant un champ de normale * 'DEBPROC' KBLOQ ; 'ARGUMENT' rvx*'TABLE' ; rv = rvx . 'EQEX' ; 'SI' ('EXISTE' rvx 'MATRICE') ; mnormal = rvx . 'MATRICE' ; 'SINON' ; vnormal = rv . 'VNORMAL' ; mail = 'DOMA' (rvx . 'DOMZ') 'MAILLAGE' ; mn = 'BLOQUE' 'DEPL' 'DIRE' vnormal mail ; mn = 'KOPS' 'RIMA' mn ; nominc = 'EXTRAIRE' (rvx . 'LISTINCO') 1 ; ni1 = 'CHAINE' '1' nominc ; ni2 = 'CHAINE' '2' nominc ; mnormal = 'KOPS' 'CHANINCO' mn ('MOTS' 'LX' 'UX' 'UY') ('MOTS' 'LX' ni1 ni2) ('MOTS' 'FLX' 'FX' 'FY') ('MOTS' 'LX' ni1 ni2) ; rvx . 'MATRICE' = mnormal ; 'FINSI' ; chvid matvid = 'KOPS' 'MATRIK' ; 'RESPRO' chvid mnormal ; 'FINPROC' ; * * Maillage * * Paramètres Rgrand = 1. ; Dpetit = 1. ; ang = 45. ; dang = 10. ; den = 0.1 ; 'DENS' den ; * Points p0 = 0. 0. ; p1 = 0. ('*' Rgrand -1.) ; p2 = POINTCYL Rgrand ('-' ang dang) ; p3 = POINTCYL ('+' Rgrand Dpetit) ang ; p4 = POINTCYL Rgrand ('+' ang dang) ; p5 = POINTCYL Rgrand ('-' 180. ('+' ang dang)) ; p6 = POINTCYL ('+' Rgrand Dpetit) ('-' 180. ang) ; p7 = POINTCYL Rgrand ('-' 180. ('-' ang dang)) ; * Contour l1 = 'CER3' p7 p1 p2 ; l2 = 'CER3' p2 p3 p4 ; l3 = 'CERCLE' p4 p0 p5 ; l4 = 'CER3' p5 p6 p7 ; cmt = l1 'ET' l2 'ET' l3 'ET' l4 ; _cmt = cmt ; mt = 'SURFACE' cmt ; _mt = 'CHANGER' mt 'QUAF' ; * * Normale au contour * vnormal = VNOR cmt 'QUAF' ('MOTS' 'UX' 'UY') 'QUAF' ; * * Discrétisation * disv = 'QUAF' ; disp = 'CENTREP1' ; dec = 'CENTREE' ; * Re = 30. ; dif = '/' 1. Re ; omeg = 1. ; nitmax = 5 ; xfor = '**' 3. 0.5 ; yfor = PI ; fnormal = 'MANUEL' 'CHPO' _cmt ('MOTS' 'FX' 'FY') ('PROG' xfor yfor) ; * 'SI' graph ; vvno = 'VECT' vnormal 'DEPL' 'JAUN' ; vfno = 'VECT' fnormal 'FORC' 'ROUG' ; vtot = 'ET' vvno vfno ; tit = 'CHAINE' 'Maillage' ' ' 'Jaune:normale' ' ' 'Rouge:force imposee' ; 'TRACER' vtot _mt 'TITR' tit ; 'FINSI' ; * $mt = 'MODELISER' _mt 'NAVIER_STOKES' disv ; $cmt = 'MODELISER' cmt 'NAVIER_STOKES' disv ; ppres = 'POIN' ('DOMA' $mt disp) 'PROC' (0.5 0.5) ; mp1 = 'MANUEL' ppres 'POI1' ; * rv = 'EQEX' 'ITMA' 1 'NITER' nitmax 'OMEGA' omeg ; 'SI' graph ; rv = 'EQEX' rv 'ZONE' $mt 'OPER' 'TRACVIT' ; 'FINSI' ; * rv = 'EQEX' rv 'OPTI' 'EF' 'IMPL' dec disp 'ZONE' $mt 'OPER' 'KONV' 1. 'UN' dif 'INCO' 'UN' 'OPTI' 'EF' 'IMPL' dec disp 'FTAU' 'ZONE' $mt 'OPER' 'LAPN' dif 'INCO' 'UN' 'OPTI' 'EF' 'IMPL' dec disp 'ZONE' $mt 'OPER' 'KBBT' -1. 'INCO' 'UN' 'PN' ; * 'OPTI' 'EF' 'IMPL' 'CENTREE' disp * 'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM' 'DT' 'UN' dif 'INCO' 'UN' ; rv = 'EQEX' rv 'ZONE' $cmt 'OPER' 'KTOIM' fnormal 'INCO' 'UN' ; rv = 'EQEX' rv 'ZONE' $cmt 'OPER' 'KBLOQ' 'INCO' 'UN' ; rv = 'EQEX' rv 'CLIM' 'PN' 'TIMP' mp1 0. ; rv . 'INCO' = 'TABLE' 'INCO' ; rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0. 0.) ; rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' disp 0. ; rv . 'VNORMAL' = vnormal ; * EXEC rv ; * 'SI' graph ; TRACVIT rv $mt ; mt = 'DOMA' $mt 'MAILLAGE' ; fcou = FCOURANT mt (rv . 'INCO' . 'UN') ; 'OPTI' 'ISOV' 'SULI' ; tit = 'CHAINE' 'Fonction de courant ; Re=' Re ; 'TRACER' fcou _mt _cmt 'TITR' tit ; 'OPTI' 'ISOV' 'SURF' ; MONTAGNE fcou _mt 'TITRE' tit 'SUPER' ; 'FINSI' ; * * Vérification que la vitesse est bien orthogonale à la normale * vit = rv . 'INCO' . 'UN' ; mvit = 'MOTS' 'UX' 'UY' ; ps = 'PSCAL' vit vnormal mvit mvit ; mps = 'MAXIMUM' ps 'ABS' ; valim = 1.D-12 ; tst = ('<' mps valim) ; 'SI' ('NON' tst) ; cherr = 'CHAINE' '!!! Erreur, on aurait voulu ' 'mps=' mps ' < ' 'valim=' valim ; 'MESSAGE' cherr ; 'FINSI' ; lok = lok 'ET' tst ; * * Fin du jeu de donnees * 'SAUTER' 2 'LIGNE' ; 'SI' lok ; 'MESSAGE' 'Tout sest bien passe' ; 'SINON' ; 'MESSAGE' 'Il y a eu des erreurs' ; 'FINSI' ; 'SAUTER' 2 'LIGNE' ; 'SI' interact ; 'OPTION' 'DONN' 5 'ECHO' 1 ; 'FINSI' ; 'SI' ('NON' lok) ; 'ERREUR' 5 ; 'FINSI' ; * * End of dgibi file NS1 * 'FIN' ;