* fichier : test_fimp_dual2DT.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. * q=2(x+y) *Ce cas test vérifie l'option INCOD KPRES de FIMP *avec KPRES = CENTREP1,CENTRE,MSOMMET *et DISCR = QUAF,MACRO,CENTRE * * Cas 2D quadrangle * opti dime 2 elem QUA4; opti trace 'PSC'; GRAPH = VRAI ; GRAPH = FAUX ; L=1. ; H = 1.; nb = 20; *L=1. ; H = 1.; nb = 5; *L=1. ; H = 1.; nb = 2; p0=0. 0.; p1=L 0.; p2=0. H ; l1= p0 d nb p1; mt = l1 trans nb p2; cnt = cont mt ; opti elem TRI3; mt= surf cnt 'PLAN'; Mmt= chan mt 'QUAF'; lmaxerr=prog; REPETER BLOCKAS 7 ; 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'; Finsi; Si (EGA &BLOCKAS 2); DISCR='MACRO';KPRES='CENTREP1'; 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 4 ((nbel mtp) - 3); mtp=elem mtp le; Finsi; Finsi; Si(EGA KPRES 'MSOMMET'); dgp= doma $mt 'XXMSOMME'; mess ' Différence entre XXINTG 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.); rv.'INCO'.'TN'=kcht $mt scal sommet 1.; cx=1. ; cy=1.; cx=1. ; cy=0.; x= coor 1 mt; y= coor 2 mt; xp= coor 1 mp1; yp= coor 2 mp1; x2= (x*x*cx) CHAN 'ATTRIBUT' 'NATURE' 'DIFFUS'; y2= (y*y*cy) CHAN 'ATTRIBUT' 'NATURE' 'DIFFUS'; dvu=2*((x*cx)+(y*cy)); dvup=2*((xp*cx)+(yp*cy)); rv.'INCO'.'DSRC'=kcht $mt scal sommet dvu; *rv.'INCO'.'DSRC'=kcht $mt scal sommet 1. ; UN= (nomc x2 '1UN') et (nomc y2 '2UN'); *-------------------- 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 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 > 5.E-2); erreur 5 ; finsi ; FIN ;