Question on using DMMG
Matthew Knepley
knepley at gmail.com
Fri Feb 20 12:44:31 CST 2009
On Fri, Feb 20, 2009 at 12:34 PM, Randall Mackie <rlmackie862 at gmail.com>wrote:
> Thanks Barry, this was useful and I now understand how to set the levels
> and
> the grid size at the coarsest level.
>
> I'm trying to run a simple test problem, and it seems to be taking
> *forever*
> in the routine setting the Jacobian. In my old code, where I use
> MATCreateMPIAIJ
> to set up the matrix with the correct pre-allocation, it takes no time to
> fill
> this matrix.
>
> Here's a sketch of my ComputeJacobian routine:
>
> call DMMGGetDA
> Call DAGetGlobalIndices
>
> Loop through model:
>
> v(ic)=fact
> col(ic)=ltog(idltog +.....)
>
> etc
>
> call MatSetValues(...)
>
>
>
> I suspect this is a problem of the default stencil that is set up, with
> many more entries than I'm using. Any way to just use
> MATMPIAIJSetPreallocation,
> or do I need to use DASetBlockFills?
1) More entires would not cause a slowdown, but fewer would.
2) I believe that DA matrices are flagged to generate an error when a malloc
is
generated. You can run with -log to check this.
Matt
>
> Thanks, Randy
>
>
> Barry Smith wrote:
>
>>
>> On Feb 19, 2009, at 3:48 PM, Randall Mackie wrote:
>>
>> Barry,
>>>
>>> I'm a little confused then, by how you set the size of the coarse grid
>>> in relation to the fine grid. What if my fine grid is 283x107x113? Can
>>> I just use a coarse grid of 3x3x3 and then the finer ones are generated
>>> until it gets to my fine grid? I've been trying to follow ex22f.F, where
>>> you set the coarse grid, and number of levels, but I can't figure out
>>> the relation between the grid size on each level and how you specify
>>>
>>
>> ^^^^^^^^^^^^^^^^
>>
>>>
>>> the grid size at the finest level.
>>>
>>
>> We don't specify the grid size at the finest level; it just comes out
>> from the coarse
>> grid size and the number of levels.
>>
>>>
>>>
>>> In ex22f.F, when I run it, I see the first level is 27x27 (since the
>>> 3D grid is 3x3x3). Then at the next level it goes to 125x125 or 5x5x5.
>>> Then the final level is 729x729, or 9x9x9.
>>>
>>
>> By default, with nonperiodic domains the grid spacing (distance between
>> grid points)
>> is cut in half with each refinement. So, for one dimension this looks like
>>
>> * * *
>> + + + + +
>> x x x x x x x x x
>>
>> that's 3 points, then 5, then 9.
>>
>> To get the 113 with three levels then make it 29 on the coarsest, then
>> it becomes 57 then it
>> becomes 113. For four levels start with 15.
>>
>> You can refine by other factors like 3 using DASetRefinementFactor()
>> call this after
>> DACreate but before DMMGSetDA() You can also control this via the options
>> database
>> see the manual page.
>>
>> Barry
>>
>>
>>
>>>
>>> Thanks, Randy
>>>
>>> Barry Smith wrote:
>>>
>>>> On Feb 19, 2009, at 3:22 PM, Randall Mackie wrote:
>>>>
>>>>> I'm trying to modify my code to use the DMMG routines to solve my
>>>>> system
>>>>> by multi-grid, instead of the usual krylov solver. In my previous code,
>>>>> I would set up a DA for my finite difference grid, set the matrix
>>>>> preallocation using MATCreateMPIAIJ, then fill the matrix, etc.
>>>>>
>>>>> In the code I've modified to use DMMG, here is my sequence of routines
>>>>> so far:
>>>>>
>>>>> call DMMGCreate(...)
>>>>> call DACreate3D(....) ! to set the DA on the finest level
>>>>> call DMMGSetDM(...)
>>>>>
>>>>>
>>>>> call DMMGSETKSP(...)
>>>>>
>>>>>
>>>>> Questions:
>>>>>
>>>>> 1) I want to set the DA on the finest level and use Galerkin to get
>>>>> the coarser matrices. So, is the DACreate above the way to do this?
>>>>>
>>>> The current design always has you setting the coarsest DA; DMMG
>>>> generates all the finer ones
>>>> automatically. This is independent of using Galerkin coarse grids or
>>>> not.
>>>> To have DMMG use Galerkin to generate the coarser matrices call
>>>> DMMGSetUseGalerkinCoarse()
>>>> after you se the number of levels or use the option -dmmg_galerkin
>>>>
>>>>>
>>>>>
>>>>> 2) How do I set the matrix preallocation here for use in the DMMG
>>>>> routines?
>>>>> Would I use the same MATCreateMPIAIJ as before, and if so, where do I
>>>>> put that? In the routine that fills the Jacobian, or in the main
>>>>> program
>>>>> someplace?
>>>>>
>>>> DMMG manages all this for you; it creates the empty matrices (based on
>>>> the DA stencil) and gives them
>>>> the right nonzero structure.
>>>> See, for example, src/ksp/ksp/examples/tutorials/ex34.c
>>>> Barry
>>>>
>>>>>
>>>>>
>>>>>
>>>>> Thanks, Randy
>>>>>
>>>>
>>
--
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/20090220/5837abd4/attachment.htm>
More information about the petsc-users
mailing list