Hello,

Thank you for your answer, I agree with you.

I have adapted the ex12 example for the system:

-\nabla \nabla u + u + f = 0 in \Omega  (1)

with f = 4-x^2-y^2
The solution is still x^2-y^2.

It consists in adding the following gradient function:

void g0_uu(const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], const PetscReal x[], PetscScalar g0[])
{
  g0[0] = 1.0;
}
...
//and set gradient
ierr = PetscDSSetJacobian(prob, 0, 0, g0_uu, NULL, NULL, g3_uu);CHKERRQ(ierr);
...
Of course, I have modified the f0_u function.


With Dirichlet BC, I get the solution.

With Neumann BC, the solution is still shifted down (-2/3). The problem (1) with Neumann BC has a unique solution.
How remove the condition \int_\Omega u = 0 ?

Thanks
Olivier Bonnefon





On 11/06/2014 07:14 AM, Matthew Knepley wrote:
On Mon, Nov 3, 2014 at 9:46 AM, Olivier Bonnefon <[email protected] <mailto:[email protected]>> wrote:

    Hello,

    Thank for your answer, I'll explain my trouble:

    My problem is that the BC Neumann leads to wrong result.

    With Dirichlet BC, I get:
    -------------------------------

    > ./ex12 -run_type full -refinement_limit 0.0 -bc_type dirichlet
    -interpolate 0 -petscspace_order 1 -show_initial -show_solution
    -dm_plex_print_fem 1
    ...
    ...
    Solution
    Vec Object:potential 1 MPI processes
      type: seq
    0.5

    This result is correct.

    With Neuman BC, I get:
    --------------------------------

    > ./ex12 -run_type full -refinement_limit 0.0 -bc_type neumann
    -interpolate 1 -petscspace_order 1 -show_initial
    -dm_plex_print_fem 1 -show_solution -bd_petscspace_order 1
    -snes_linesearch_monitor -snes_monitor -ksp_monitor_true_residual
    -snes_converged_reason -ksp_converged_reason
    ....
    ....


    Solution
    Vec Object:potential 1 MPI processes
      type: seq
    -0.75
    -0.583333
    0.0833333
    -0.583333
    -0.333333
    0.416667
    0.0833333
    0.416667
    1.25


    That is not the values of the solution x*x+y*y.


Sorry, this is poor documentation on my part. I will fix it in the example. The Naumann solution
explicitly discards the constant part, meaning

  \int_\Omega u = 0

If we look at my solution

  \int^1_0 dx \int^1_0 dy x^2 + y^2 = 2/3

However, this is for the continuum result, whereas we are enforcing this in the discrete case. Thus, what we really get is 0.75, since we are integrating linear patches instead of quadratic patches. After shifting by that, you still do not get exactly x^2 + y^2 since there is some discretization error. If you run with P2 you should get the exact answer, shifted down to eliminate
the DC component.

  Thanks,

     Matt


    I tried many ksp options.
    Moreover, the neumann BC with "-run_type full" is not cover in the
    list
    
https://bitbucket.org/petsc/petsc/src/fced3c3f9e703542693913793d15321603e40fe6/config/builder.py?at=master#cl-257

    Do you know what is wrong ?

    Thanks,

    Olivier Bonnefon

    On 10/31/2014 06:50 PM, Matthew Knepley wrote:
    On Fri, Oct 31, 2014 at 10:43 AM, Olivier Bonnefon
    <[email protected]
    <mailto:[email protected]>> wrote:

        Hello,

        I'm working on the snes/examples/tutorial/ex12 version 3.5.2.

        I didn't succed to run the simplest case with Neumann BC:

        ./ex12 -run_type full -refinement_limit 0.0 -bc_type neumann
        -interpolate 1 -petscspace_order 1 -show_initial
        -dm_plex_print_fem 1 -show_solution -bd_petscspace_order 1
        -snes_linesearch_monitor -snes_monitor
        -ksp_monitor_true_residual -snes_converged_reason
        -ksp_converged_reason

        This leads to dofs negatives values.


    I do not understand what you mean. Please always mail the full
    error message.

        Do you know the options to get a correct result with Neumann BC ?


    There are some tests here:

    
https://bitbucket.org/petsc/petsc/src/fced3c3f9e703542693913793d15321603e40fe6/config/builder.py?at=master#cl-257

       Matt

        Regards,
        Olivier Bonnefon




-- What most experimenters take for granted before they begin their
    experiments is infinitely more interesting than any results to
    which their experiments lead.
    -- Norbert Wiener


-- Olivier Bonnefon
    INRA PACA-Avignon, Unité BioSP
    Tel:+33 (0)4 32 72 21 58  <tel:%2B33%20%280%294%2032%2072%2021%2058>




--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener


--
Olivier Bonnefon
INRA PACA-Avignon, Unité BioSP
Tel: +33 (0)4 32 72 21 58

Reply via email to