Dear Yassine,
The slice operation is only for
graphical post-processing. You cannot use a sliced solution into
computations because the obtained vector represent the value of
the solution on a cut mesh representing the computed intersection.
The obtained vector is no longer a dof vector on the meshfem mfu.
The standard way to compute this error is to produce a cut
integration method, and just compute the L2 or H1 norms in a
standard way with it. You can produce cut integration method with
the MeshLevelSet and MeshIM('levelset') objects. An example of use
in the python test program "demo_fictitious_domains.py"
Best regards,
Yves
Le 18/12/2018 à 18:54, Yassine ZAIM a
écrit :
Dear
getfem++ users,
I
am trying to learn how to implement the
fictitious domain method for the simple problem of
Poisson. My domain of interest Omega is a circle of
center (x0=0,y0=0) and radius r=0.35.
I made the resolution in the fictitious domain (the
square [-0.5, 0.5]^2) and after that, I used the
slice to restrict my solution to the physical
domain.
sl =
gf.Slice(('comp',('ball', +1, [x0, y0], r)), m, 5)
sl.export_to_vtk('App_Solution.vtk', 'ascii', mfu,
Uap)
sl.export_to_vtk('Exc_Solution.vtk', 'ascii', mfu,
Uex)
sl.export_to_vtk('Error-Ex-App.vtk', 'ascii', mfu,
Uap-Uex)
When
I see the approximate and the exact solution in
addition to the error I can say that I get a good
approximate solution. But I am trying to get the
optimal order of convergence (h and h^2) like in
the papers "J. Haslinger and Y. Renard" or "E.
Burman and P. Hansbo". So I interpolate the exact
and approximate solution in the slice (domain of
interest).
Ue =
gf.compute(mfu, Uex, 'interpolate on', sl)
U =
gf.compute(mfu, Uap, 'interpolate on', sl)
And after
that I tried to calculate the error for
different values of NX=[16,32,..]
L2error = gf.compute(mfu, U-Ue, 'L2 norm', mim)
H1error = gf.compute(mfu, U-Ue, 'H1 norm', mim)
such that
:
mim =
gf.MeshIm('levelset',mls,'inside',
gf.Integ('IM_TRIANGLE(6)'))
and
mfu.set_fem(gf.Fem('FEM_PK(2,1)'))
But
I get the following error in the "compute"
function (of the errors) :
return
getfem('compute', mf, U, what, *args)
RuntimeError:
(Getfem::InterfaceError) -- The trailing
dimension of argument 2 (an array of size
4670) has 4670 elements, 289 were expected.
My
question is how to calculate the error just in
the interesting domain (physical domain, slice
sl in my case).
Thank
you in advance.
--
ZAIM Yassine
PhD
in Applied Mathematics
--
Yves Renard (address@hidden) tel : (33) 04.72.43.87.08
INSA-Lyon
20, rue Albert Einstein
69621 Villeurbanne Cedex, FRANCE
http://math.univ-lyon1.fr/~renard
---------
|