[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Getfem-users] Calculate the error in the physical domain

From: Yves Renard
Subject: Re: [Getfem-users] Calculate the error in the physical domain
Date: Wed, 19 Dec 2018 14:39:54 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1

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 ""

Best regards,


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)
  20, rue Albert Einstein
  69621 Villeurbanne Cedex, FRANCE


reply via email to

[Prev in Thread] Current Thread [Next in Thread]