On Jan 13, 2011, at 12:00 PM, Gianluca Meneghello wrote:

> Dear Barry and Jed,
> 
> thanks again for your answers. I'm at the moment trying to understand more 
> about how ASM and FieldSplit works. I've started reading Barry's book "Domain 
> Decomposition, Parallel Multilevel Methods for Elliptic Partial Differential 
> Equations". I hope it's the right starting point. 
> 
> Please let me know if you have further suggested readings, taking into 
> account that I know nothing on domain decomposition in general --- but 
> something in multigrid.
> 
> Let me ask you a couple of questions for the moment:
> Is PCFIELDSPLIT additive the same as PCASM (I guess no as it does not use 
> overlap)?

   It can be additive or multiplicative depending on what you set with 
PCFieldSplitSetType()

> Or is it a Substructuring Method (I haven't yet arrived to that chapter of 
> the book!).

   No, nothing to do with substructuring.

> What's the difference between multiplicative and symmetric-multiplicative for 
> PCFIELDSPLIT?  Does symmetric-multiplicative refers to eq 1.15 of "Domain 
> Decomposition"?

  Yes

> 
> Is it possible use ASM and/or FieldSplit with a matrix-free method?

   Yes, BUT the algorithms are coded around MatGetSubMatrix() and or 
MatGetSubMatrices() so to do matrix free you need to have code that applies 
"part" of the operator at a time (that is you cannot just have a matrix vector 
product that applies the entire operator to the entire vector. Once you have 
the ability to apply "part" of the operator at a time you need to code up a 
MATSHELL that responds appropriately to MatGetSubMatrix() and or 
MatGetSubMatrices() and returns new matrix-free shell matrices that apply only 
"their" part of the operator. This is non-trivial for many people but possible.

   Barry


> 
> Thanks
> 
> Gianluca
> 
> Il giorno 06/gen/2011, alle ore 21.55, Barry Smith ha scritto:
> 
>> 
>> On Jan 6, 2011, at 6:01 AM, Gianluca Meneghello wrote:
>> 
>>> Dear Barry,
>>> 
>>> thanks a lot for your answer.
>>> 
>>> I tried to do some experiments with MatGetSubMatrix, but I guess I'm
>>> doing something wrong as it looks like being painfully slow.
>> 
>> Hmm, we've always found the getsubmatrix takes a few percent of the time. 
>> Perhaps you are calling it repeatedly for the each domain, rather than once 
>> and reusing it? Also use MatGetSubMatrices() and get all the submatrices in 
>> one call rather than one at a time.
>> 
>>> 
>>> I changed approach and now I'm using the ASM preconditioner. What I'm
>>> actually trying to do is to split the domain in different parts ---
>>> like interior and boundaries --- and relax (solve) each one with a
>>> different smoother (solver). In your opinion, is this the right
>>> approach?
>> 
>>  Worth trying since it is easy. You can experiment with different smoothers 
>> on the subdomains using the -sub_pc_type etc options and set different 
>> prefixes for different subdomains.
>> 
>>> So far it looks much faster than my previous approach of
>>> extracting each submatrix.
>> 
>>  ASM just uses MatGetSubMatrices() so shouldn't be faster or slower than a 
>> custom code that does the same thing.
>> 
>>> 
>>> Also, please let me ask you one more thing. When using ASM with
>>> different subdomains on the same process, is the order in which the
>>> domains are solved the same as the one in which they are stored in the
>>> IS array passed to PCASMSetLocalSubdomains()? I would be interested in
>>> controlling this in order to build a downstream marching smoother.
>> 
>> It is only additive, there is no order as Jed noted. Doing multiplicative in 
>> general is tricky because you want to just update the parts of the residual 
>> that need to be updated.
>> 
>>> 
>>> Looking at the references, I've noticed you have worked on multigrid.
>>> What I'm trying to do is close to what is described in Diskin, Thomas,
>>> Mineck, "Textbook Multigrid Efficiency for Leading Edge Stagnation",
>>> in case you already know the paper.
>>> http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20040081104_2004082284.pdf
>>> 
>>> Again, thanks a lot.
>>> 
>>> Gianluca
>>> 
>>> On 3 January 2011 17:43, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>>> 
>>>> Gianluca,
>>>> 
>>>>  The expected use is with the VecScatter object. First you create a 
>>>> VecScatter object with VecScatterCreate() then each time you need the 
>>>> "subvector" you call VecScatterBegin() followed by VecScatterEnd() Note 
>>>> that usually the VecScatter object is retained and used many times.
>>>> 
>>>> Barry
>>>> 
>>>> 
>>>> 
>>>> On Jan 3, 2011, at 5:22 AM, Gianluca Meneghello wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> I'm new to PETSc, so that this can be a very simple question:
>>>>> 
>>>>> I'm looking for something like VecGetSubVector, which I've seen it
>>>>> exists in the dev version but not in the released one.
>>>>> 
>>>>> I need to write a smoother for a multigrid algorithm (something like a
>>>>> block Gauss Seidel) which can be written in matlab as
>>>>> 
>>>>> for j = 1:ny
>>>>> P = <some matrix indices as function of j>;
>>>>> du(P) = L(P,P) \ (  rhs(P) - L(P,:)*du + D2(P,P)*du(P) );
>>>>> end
>>>>> 
>>>>> where L is a matrix (in my case the linearized Navier Stokes).
>>>>> 
>>>>> I was thinking about using IS for declaring P, so that D2(P,P) can be
>>>>> obtained using MatGetSubMatrix. I would need the same for the vector
>>>>> du.
>>>>> 
>>>>> Is there a way to do that without using the developer version? (I
>>>>> really don't feel like being "experienced with building, using and
>>>>> debugging PETSc).
>>>>> 
>>>>> Thanks in advance
>>>>> 
>>>>> Gianluca
>>>> 
>>>> 
>> 
> 

Reply via email to