[petsc-users] Non-uniform Cartisian Grid

Zhenglun (Alan) Wei zhenglun.wei at gmail.com
Thu Feb 28 19:05:13 CST 2013


Dear Matt,
     Thanks for your reply on the 1st question and I'm sorry for the 
confusion on the 2nd one.
     In order to create a non-uniform Cartesian grid, I expected that 
the way I was programming can let me freely control the grid size. In 
the code attached in the previous E-mail, the 'DMDASetUniformCoordinate' 
generates a uniform coordinate with 100*48*48 grid number and 
0.1*0.1*0.1 grid size. I was trying to manually double the grid size in 
the y-direction for the whole mesh with operations of DMDA in the 
'SetNonUniformGrid()', which follows the method that 
/src/ksp/ksp/examples/tutorials/ex49.c used. However, as you can see in 
the figure attached in the previous E-mail, only the mesh on z = 0 plane 
and x = 0 plane has been changed to dy = 0.2; while I expected all mesh 
should have dy = 0.2 after I call 'SetNonUniformGrid()'.
     Any idea about this?

thanks,
Alan

On 2/28/2013 6:31 PM, Matthew Knepley wrote:
> On Thu, Feb 28, 2013 at 7:19 PM, Zhenglun (Alan) Wei 
> <zhenglun.wei at gmail.com <mailto:zhenglun.wei at gmail.com>> wrote:
>
>     Dear folks,
>         Here are several questions following up my previous ones:
>     1, I modified my code based on ex49.c. However, I found that if I
>     don't call 'DMDASetUniformCoordinates' before calling
>     'DMDAVecGetArray', then an error comes up:
>     [0]PETSC ERROR: Null argument, when expecting valid pointer!
>     [0]PETSC ERROR: Null Object: Parameter # 2!
>         The code do works if I add a call for
>     'DMDASetUniformCoordinates' in it. However, I feel it is a waste
>     of calling 'DMDASetUniformCoordinates' since what follows this
>     calling is to change the coordinate to a non-uniform gird. Does it
>     have any way to bypass this call or you think it is fine to keep
>     it here.
>
>
> If you do not call it, then you have to create the coordinate vector 
> yourself. I would just call it.
>
>     2, Also, if I do by this way, the outputted mesh looks weird, as
>     shown in the figure.
>         I was trying to double the dy value manually in the
>     SetNonUniformGrid(). However, the only mesh changed is just on the
>     z=0 and x=0 plane. Here I attached my code. Do I need to do
>     anything else except DMDAVecRestoreArray() after I modified the
>     coordinate information?
>
>
> I do not understand what you want here.
>
>   Matt
>
>     thanks,
>     Alan
>
>
>     On 2/26/2013 8:46 PM, Barry Smith wrote:
>
>         On Feb 26, 2013, at 4:49 PM, "Zhenglun (Alan)
>         Wei"<zhenglun.wei at gmail.com <mailto:zhenglun.wei at gmail.com>>
>          wrote:
>
>             Dear folks,
>                   I have one question for the ex49.
>                   It do show a way to 'get' the 'coord' by the
>             'DMDAVecGetArray'. Should I just modified the coordinate
>             on the 'coord' in order to obtain a non-uniform grid? and
>             then, use DMDAVecRestoreArray to link the modified 'coord'
>             back to 'cda' so that the 'coord' will be updated to the
>             mesh I want?
>
>             Yes, you can do this.
>
>
>             thanks,
>             Alan
>
>             On 2/22/2013 3:20 PM, Matthew Knepley wrote:
>
>                 On Fri, Feb 22, 2013 at 3:57 PM, Zhenglun (Alan)
>                 Wei<zhenglun.wei at gmail.com
>                 <mailto:zhenglun.wei at gmail.com>>  wrote:
>                 Dear all,
>                 I hope you're having a nice day.
>                 I wonder if anyone could point out a example for me
>                 about the
>                 DMDASetCoordinates(). I found this
>                 (http://www.mcs.anl.gov/petsc/petsc-current/src/dm/impls/da/dacorn.c.html#DMDASetCoordinates)
>                 online; however it does not really demonstrate how to
>                 create the
>                 'coordinate vector - c'.
>                 Also, I found that in the petsc sub-folder:
>                 /petsc-dev/src/dm/impls/patch has a patch.c, which I
>                 suppose that it
>                 does a local refinement for mesh. Does this a mature
>                 model that we can
>                 use or just a testing code?
>
>                 Look at KSP ex49. In the routine
>                 DMDACoordViewGnuplot2d() it reads out the coordinates.
>                 You could just as easily set them in this fashion.
>
>                     Matt
>                   thanks,
>                 Alan
>
>                 On 11/7/2012 6:55 PM, Barry Smith wrote:
>
>                     On Nov 7, 2012, at 6:50 PM,
>                     Alan<zhenglun.wei at gmail.com
>                     <mailto:zhenglun.wei at gmail.com>>  wrote:
>
>                         Dear folks,
>                         I hope you're having a nice day.
>                         I'm testing the Poisson solver in
>                         /src/ksp/ksp/examples/tutorials/ex45.
>                         It uses the 'DMDACreate3d' to generate a
>                         Cartisian structured grid and
>                         solve it with uniform grid size. However, I
>                         attempt to modify it to
>                         obtain solution with a Cartsian structured
>                         grid and non-uniform grid (It
>                         is not unstructured local refined mesh).
>                         Should I still use the
>                         'DMDACreate3d' and implement different grid
>                         size in 'ComputeMatrix' and
>                         'ComputeRHS'? In other words, does
>                         'DMDACreate3d' itself include any
>                         mesh size information?
>
>                         You can use DMDASetCoordinates() and
>                     DMDAGetCoordinates() (called DMSetCoordinates()
>                     and DMGetCoordinates() in petsc-dev) to keep track
>                     of the coordinates but you are responsible for
>                     generating the correctly scaled entries in the
>                     matrix etc.
>
>                         Barry
>
>                         thanks,
>                         Alan
>
>
>
>                 -- 
>                 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
>
>
>
>
>
> -- 
> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130228/e7d262c5/attachment.html>


More information about the petsc-users mailing list