Dear Dr. Smith,
Indeed, non-uniform grid with the Poisson has only 1st order; my docx.
file shows that also. However, it should recover to 'exact solution'
with only small round-off error if the 'exact solution' is a polynomial
function of degree 2 or less. In my tests, I constructed a quadratic
function and the round-off error is quite large. I wonder if my usage of
ksp solver or pc has some problems.

thanks,
Alan
>  
>   Alan,
>
>     For non-uniform grid with the Poisson the order is no longer 2nd order. 
> It is only for uniform grid that you get “magic” cancelation that makes it 
> second order.
>
>     Barry
>
> On Dec 10, 2013, at 12:45 AM, Alan <[email protected]> wrote:
>
>> Thank you, Dr. Smith.
>> I 'cooked up' a 4th-order polynomial and find out that the Poisson
>> solver with uniform Cartesian mesh is 2nd order of accuracy. Also, if
>> the solution is 3rd or less order polynomial, the L2Norm shows very
>> small round-off error, which is usually 1e-7 if the -ksp_rtol is 1-e7.
>> Following this idea, I re-derived the coefficients for the Poisson
>> equation for solver with non-uniform grid, which is attached with a
>> .docx file. From the equation, it indicates that at least 3rd or higher
>> order polynomial should be constructed for the solution to detect the
>> real order of accuracy. In other words, for solution of 2nd or lower
>> order polynomials, the L2Norm should show very small round-off error.
>> However, the reality is not and here is a brief description of my tests.
>> The test focuses on the three-dimensional Poisson solver with
>> non-uniform Cartesian mesh, which is modified from
>> /src/ksp/ksp/example/tutorial/ex45.c. For simplicity, in this test, only
>> x-direction has non-uniform grid, y- and z- are uniform grid. I have 3
>> sets of tests, which are recorded in TestRun attached. The difference
>> among these 3 sets of tests are the -ksp_rtol. Each set has 3 different
>> commands to run the program with different ksp solver (GMRES or
>> richardson) and pc type (GAMG and Hypre boomeramg).
>> As I recorded in TestRun, while the ksp_rtol is 1e-7, the L2Norm is
>> fairly large. As Dr. Smith explained, tight algebraic tolerances are
>> needed to eliminate the algebraic error. Therefore, I changed ksp_rtol
>> to 10-e15. However, the L2Norm can only reach 1e-7. Compared with the
>> Poisson solver with uniform Cartesian mesh (which the L2Norm exhibits
>> 1e-7 round-off error as -ksp_rtol = 1e-7), the L2Norm from the
>> non-uniform Poisson solver is relatively high. Is this normal?
>> Moreover, the Residual norm shown for cases with ksp_rtol = 1e-15 is
>> around 7, 28 or even 81, which are far away from the real ksp_rtol
>> imported. I monitored the ksp iterations with ksp_monitor and found out
>> that these solvers usually iterate around 20 times. Why wouldn't them
>> continue to iterate until the 1e-15 is achieved?
>> Based on my observation, neither solver/pc works fine for this Poisson
>> solver with non-uniform mesh. Is there any other option to made some
>> improvements?
>> At last, for the Poisson solver with non-uniform Cartesian grid, is
>> there any better way to prove its validity?
>>
>> sincerely appreciate,
>> Alan
>>
>>>  Alan,
>>>
>>>   I changed your initial grid size to 10 to get faster solve times and get 
>>> what is below.  Note that your “exact solution” is quadratic, since the 
>>> method is second order this means that not only is the “exact solution” an 
>>> exact solution to the PDE, it is also an exact solution to the algebraic 
>>> equations (for any grid size) hence the L2Norm of the error is only due to 
>>> the round off of the algebraic solution, not due to any discretization 
>>> error. In general, when testing for discretization error you always need to 
>>> “cook up” an exact solution that is not completely represented in the 
>>> approximation space. You also need to use a really tight algebraic 
>>> tolerance to eliminate the algebraic error from the computation
>>>
>>>
>>>
>>> ~/Src/petsc/test-dir  master $ ./ex45 -pc_type mg  -ksp_rtol 1e-12 
>>> mx = 10, my = 10, mz =10, mm = 1, nn = 1, pp = 1
>>> Residual norm 1.81616e-12
>>> L2Norm = 1.107359e-12
>>> Total Time Elapsed: 0.048599
>>> ~/Src/petsc/test-dir  master $ ./ex45 -pc_type mg  -ksp_rtol 1e-12 
>>> -da_refine 1
>>> mx = 19, my = 19, mz =19, mm = 1, nn = 1, pp = 1
>>> Residual norm 3.36741e-12
>>> L2Norm = 1.037148e-12
>>> Total Time Elapsed: 0.183398
>>> ~/Src/petsc/test-dir  master $ ./ex45 -pc_type mg  -ksp_rtol 1e-12 
>>> -da_refine 2
>>> mx = 37, my = 37, mz =37, mm = 1, nn = 1, pp = 1
>>> Residual norm 1.09476e-11
>>> L2Norm = 2.330658e-12
>>> Total Time Elapsed: 1.180839
>>> ~/Src/petsc/test-dir  master $ ./ex45 -pc_type mg  -ksp_rtol 1e-12 
>>> -da_refine 3
>>> mx = 73, my = 73, mz =73, mm = 1, nn = 1, pp = 1
>>> Residual norm 3.19809e-11
>>> L2Norm = 2.278763e-12
>>> Total Time Elapsed: 10.819450
>>> ~/Src/petsc/test-dir  master $ ./ex45 -pc_type mg   -da_refine 3
>>> mx = 73, my = 73, mz =73, mm = 1, nn = 1, pp = 1
>>> Residual norm 0.000103197
>>> L2Norm = 1.011806e-05
>>> Total Time Elapsed: 7.250106
>>>
>>>
>>> On Dec 4, 2013, at 5:25 PM, Alan Z. Wei <[email protected]> wrote:
>>>
>>>> Dear all, 
>>>>    I hope you had a great Thanksgiving. 
>>>>    Currently, I tested the order of accuracy for 
>>>> /src/ksp/ksp/tutorial/example/ex45.c. Since the 2nd-order discretization 
>>>> is used in this program and ksp solver is converged to 10^-7, I expected 
>>>> that the solution should provides a 2nd-order in L2 norm. However, as I 
>>>> tested (even with a Laplace equation), the L2 norm slope is much less than 
>>>> 2. Sometime, if the grid size is reduced, the L2 norm increases. Could 
>>>> anyone help me about this issue, please?
>>>>
>>>> Here is the L2 norm outputted:
>>>>
>>>> Grid       L2 norm (10^-8)
>>>> 0.05       4.36242
>>>> 0.025      2.20794
>>>> 0.0125     7.02749
>>>> 0.00625    12.64   
>>>>    Once the grid size is reduced to half, the number of the grid will be 
>>>> multiplied by 8 in order to keep the same size of the computational domain.
>>>>    The code is also attached. It is from ex45.c with very little 
>>>> modifications. 
>>>>
>>>> thanks in advance,
>>>> Alan
>>>>
>>>> <ex45.c><TestRun.txt>
>> <ex45.c><makefile.txt><TestRun.txt><Non-Uniform Poisson.docx>

Reply via email to