Download test_fimp_dual3DQ.dgibi

Back to the list

* fichier : test_fimp_dual3DQ.dgibi
*Ce test vérifie l'égalité discrète Div U - q = 0
*ou q est la discrétisation via l'opérateur FIMP de
*la divergence continue.
* U = (u,v,w)  avec u=x**2. , v=y**2. , w=z**2.
* q=2(x+y+z)
*Ce cas test vérifie l'option INCOD KPRES de FIMP
*avec KPRES = CENTREP1,CENTRE,MSOMMET
*et DISCR = QUAF,MACRO,CENTRE
*
* Cas 3D hexaèdres
*
opti dime 3 elem CUB8;

opti trace 'PSC';

GRAPH = VRAI ;
GRAPH = FAUX ;

L=1. ; H = 1.; E = 1.; nb = 20;
L=1. ; H = 1.; E = 1.; nb = 10;
L=1. ; H = 1.; E = 1.; nb = 8;
*L=1. ; H = 1.; E = 1.; nb = 2;

p0=0. 0. 0.;
p1=L  0. 0.;
p2=0. H  0.;
p3=0. 0. E ;

l1= p0 d nb p1;
mt = l1 trans nb p2;
*cnt = cont mt ;
*opti elem TRI3;
*mt= surf cnt 'PLAN';
*opti elem PRI6;
mt = volu mt 'TRANS' nb p3;
Mmt= chan mt 'QUAF';

lmaxerr=prog;
REPETER BLOCKAS 7 ;

cp=1.;
Si (EGA &BLOCKAS 5);
DISCR='LINE';KPRES='MSOMMET';
Finsi;

Si (EGA &BLOCKAS 6);
DISCR='MACRO';KPRES='MSOMMET';
Finsi;

Si (EGA &BLOCKAS 7);
DISCR='QUAF';KPRES='MSOMMET';
Finsi;

Si (EGA &BLOCKAS 1);
DISCR='QUAF';KPRES='CENTREP1';
cp=0.01;
Finsi;

Si (EGA &BLOCKAS 2);
DISCR='MACRO';KPRES='CENTREP1';
cp=0.01;
Finsi;

Si (EGA &BLOCKAS 3);
DISCR='MACRO';KPRES='CENTRE';
Finsi;

Si (EGA &BLOCKAS 4);
DISCR='LINE';KPRES='CENTRE';
Finsi;

mess ;
mess ;
mess ' ====================================';
mess ' ====================================';
mess ' DISCR=' DISCR ' KPRES=' KPRES;

$mt = model Mmt 'NAVIER_STOKES' DISCR;
doma $mt 'IMPR';
at= doma $mt table ;
mt = doma $mt maillage ;
dg = doma $mt 'XXDIAGSI';


Si(EGA KPRES 'CENTREP1');
mp1=doma $mt 'CENTREP1';
mp1 = mp1 coul rouge;
mtp=doma $mt 'ELTP1NC';
Si GRAPH;
trace (at.'QUAF' et mp1);
Finsi;
dgp=doma $mt 'XXCTREP1';
mess (somt dgp);
Finsi;

Si(EGA KPRES 'CENTRE');
dgp=doma $mt 'XXVOLUM';
mtp=doma $mt maillage ;
mp1=doma $mt 'CENTRE';
mp1 = mp1 coul rouge;
Si(EGA DISCR 'MACRO');
mtp=at.'MELSTB ';
le=lect 1 pas 8 ((nbel mtp) - 7);
mtp=elem mtp le;
Finsi;
Finsi;

Si(EGA KPRES 'MSOMMET');
dgp= doma $mt 'XXMSOMME';
mess ' Différence  entre XXSOMME et XXDIAGSI' ;
mess ' maxi (dgp - dg)=' (maxi (dgp - dg));
mtp=doma $mt 'MMAIL' ;
mp1=doma $mt 'MSOMMET';
Finsi;

lt = chai '  ' DISCR ' ' KPRES ;

rv= eqex $mt
opti 'EF' 'CENTREE' 'INCOD' KPRES
'ZONE' $mt 'OPER' 'FIMP' 'DSRC' INCO 'PRES'
opti 'EF' 'IMPL' KPRES
'ZONE' $mt 'OPER' 'KMAB' 1. 1.e-2 INCO 'UN' 'PRES'
opti 'EF' 'CENTREE' 
'ZONE' $mt 'OPER' 'LAPN' 'DSRC' INCO 'TN'
opti 'EF' 'CENTREE' 'INCOD' 'SOMMET'
'ZONE' $mt 'OPER' 'FIMP' 'DSRC' INCO 'TN';
 ;

rv.'INCO'=table 'INCO';
rv.'INCO'.'PRES'=kcht $mt scal KPRES 1.;
rv.'INCO'.'UN'=kcht $mt vect sommet (1. 1. 1.);
rv.'INCO'.'TN'=kcht $mt scal sommet 1.;

cx=1. ; cy=0.; cz=0.;
cx=1. ; cy=1.; cz=1.;
x= coor 1 mt;
y= coor 2 mt;
z= coor 3 mt;
xp= coor 1 mp1;
yp= coor 2 mp1;
zp= coor 3 mp1;
x2= (x*x*cx) CHAN 'ATTRIBUT' 'NATURE' 'DIFFUS';
y2= (y*y*cy) CHAN 'ATTRIBUT' 'NATURE' 'DIFFUS';
z2= (z*z*cz) CHAN 'ATTRIBUT' 'NATURE' 'DIFFUS';

dvu=2*((x*cx)+(y*cy)+(z*cz));
dvup=2*((xp*cx)+(yp*cy)+(zp*cz));

rv.'INCO'.'DSRC'=kcht $mt scal sommet dvu;
*rv.'INCO'.'DSRC'=kcht $mt scal sommet 1. ;

UN= (nomc x2 '1UN') et (nomc y2 '2UN') et (nomc z2 '3UN');

*-------------------- CUN -----------------------------------
 cs C  = kmab (rv.'2KMAB');


 cun = kops C '*' un ;

 cund=(nomc cun 'SCAL') *(inve dgp);
 cuns = kcht $mt scal KPRES (nomc cun 'SCAL') ;
 cuns=elno $mt cuns KPRES ;
 cund = nomc cund 'SCAL';
 dcunp = somt (dgp*(cund - dvup)*(cund - dvup));
 mess 'Erreur L2 cund - dvup =' dcunp;

 Si Graph;
 trace cuns mt TITR (chai ' CUNS (ELNO) ' lt);

 Si((EGA KPRES 'MSOMMET') ou (EGA KPRES 'CENTREP1')
 ou ((EGA KPRES 'CENTRE') et (EGA DISCR 'MACRO'))
 );
 trace dvup mtp TITR (chai ' DVUP' lt);
 trace cun mtp TITR (chai ' CUN' lt);
 trace cund mtp TITR (chai ' D-1 *  CUN' lt);
 trace (dvup - cund) mtp
 TITR (chai ' (dvup - (D-1 * cun)) ' lt);
 Finsi ;
 Finsi ;
*-------------------- CUN -----------------------------------

*-------------------- MSF -----------------------------------
 msf ma = fimp (rv.'1FIMP');
 msfd=(nomc msf 'SCAL') *(inve dgp);
 dmsf = somt (dgp*(msfd - dvup)*(msfd - dvup));
 mess 'Erreur L2 msfd - dvup =' dmsf;

 msfs = elno $mt msf kpres;
 dcusf = nomc (cun - msf) 'SCAL';
 dcusf = somt (dgp*dcusf*dcusf);
 mess 'Erreur L2 (cun - msf) =' dcusf;

 Si Graph;
 trace msfs mt TITR (chai ' MSFs (elno MSF) '  lt);

 Si((EGA KPRES 'MSOMMET') ou (EGA KPRES 'CENTREP1')
 ou ((EGA KPRES 'CENTRE') et (EGA DISCR 'MACRO'))
 );
 trace (cun - msf) mtp TITR (chai ' Différence entre CUN et MSF ' lt);
 trace msf mtp TITR (chai ' MSF' lt);
 Finsi ;
 Finsi ;
*-------------------- MSF -----------------------------------

*-------------------- MSG -----------------------------------
 msg ma = fimp (rv.'4FIMP');
 msg = nomc msg 'SCAL';
 msgd=msg *(inve dg);
 Si Graph;
 trace msg mt TITR (chai ' MSG (FIMP normal) ' lt);
 trace msgd mt TITR (chai ' D-1 * MSG (FIMP normal) ' lt);
 trace (dvu - msgd) mt
  TITR (chai ' (dvu - (D-1 * MSG)) (FIMP normal) ' lt);
 Finsi;
 dmsgd = somt (dg*(msgd - dvu)*(msgd - dvu));
 mess 'Erreur L2 msgd - dvu =' dmsgd;
*-------------------- MSG -----------------------------------

 ms ma = lapn (rv.'3LAPN');

 mess;
 mess;
 mess (chai lt '  Erreurs L2 : ')
 ' dcunp=' dcunp ' dmsf=' dmsf ' dcusf=' dcusf ' dmsgd='  dmsgd ;
 err = (MAXI (prog (dcunp*cp) (dmsf*cp) dcusf dmsgd));
 lmaxerr = lmaxerr et (prog err);
 Mess (chai lt '  MAXI des erreurs = ') err;
 mess;
 mess;


FIN BLOCKAS;


 list lmaxerr ;
 er=maxi lmaxerr;
 si ( er > 1.E-2); erreur 5 ; finsi ;

 FIN ;
 

© Cast3M 2003 - All rights reserved.
Disclaimer