<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Dmitry,<div><br></div><div>I got the newest petsc-dev and I run the test by</div><div><br></div><div>&nbsp; &nbsp; mpirun -np 1 ./gasm_test -dd_type gasm -n 64 -dd_ksp_view</div><div><br></div><div>which gives the following output</div><div><br></div><div><div>PC Object:(dd_) 1 MPI processes</div><div>&nbsp; type: asm</div><div>&nbsp; &nbsp; Additive Schwarz: total subdomain blocks = 1, amount of overlap = 1</div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^^^</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;note the above number, it should be 2&nbsp;</div><div><br></div><div>While PCASM has no such problem.</div><div><br></div><div>Thanks,</div><div>Hui</div><div><br></div><div><br><div><div><br></div><blockquote type="cite">Hui,<div><br>The convergence issue should be resolved in the latest petsc-dev.</div><div>I'm attaching a slightly modified gasm_test.c (reflecting some upcoming API changes)&nbsp;</div><div>that should verify that.</div><div>

<br></div><div>Let me know if it works for you.</div><div>Thanks.</div><div>Dmitry.<br><div class="gmail_quote">On Fri, May 11, 2012 at 12:31 PM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Dmitry,<div><br></div><div>thanks for useful hints. &nbsp;Good day!</div><span class="HOEnZb"><font color="#888888"><div>

<br></div><div>Hui</div></font></span><div><div class="h5"><div><br><div><div>On May 11, 2012, at 7:17 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite">You can call PCSetUp(pc) on either ASM or GASM, and that will destroy and recreate the matrices (including calling&nbsp;<div>

your modification subroutine),&nbsp;but not the subdomains or the subdomain solvers.&nbsp;</div><div>If you just want to modify the submatrices, you can call PC(G)ASMGetSubmatrices() and modify the matrices it returns</div>

<div>(in the same order as the subdomains were set). That's a bit of a hack,&nbsp;since you will essentially be modifying the PC's internal data structures. &nbsp;As long as you are careful, you should be okay, since you already effectively have the same type of access to the submatrices through the Modify callback.</div>



<div><br></div><div>Dmitry.</div><div><div><br><div class="gmail_quote">On Fri, May 11, 2012 at 11:52 AM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">I just have a question about reuse of PCASM or PCGASM.<div>Suppose I have seted up the PCASM and related KSP and I solved one time.</div>



<div>Next for the same linear system (matrix and RHS), I just want PCASM modify the submatrices (PCSetModifySubmatrices) in a different way, using the same routine for modifying but with</div><div>different user context for the modifying routine. &nbsp;</div>



<div><br></div><div>What can I do for this task? &nbsp;Currently, I destroy the KSP and re-construct it. I guess</div><div>even for PCASM I can re-use it because the partition of subdomains remain the same.</div><div><br></div>



<div>Thanks!</div><div><div><div><br><div><br><div><div>On May 10, 2012, at 6:37 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite">Hui,<div>There've been several changes to PCGASM ahead of the new release.</div>



<div>Let me go back and see if it affected the convergence problem.</div><div>Dmitry.<br><br><div class="gmail_quote">On Thu, May 10, 2012 at 4:16 AM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>





<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Dmitry,<div><br></div><div>is there any news about PCGASM?&nbsp;</div><div><br></div><div>





thanks,</div><div>Hui</div><div><div><div><br><div><div>On Feb 20, 2012, at 6:38 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite">Okay, thanks.<div>I'll take a look.</div><div><br></div><div>Dmitry.<br>

<br><div class="gmail_quote">On Mon, Feb 20, 2012 at 11:30 AM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">For reference, my results are attached.<div><br></div><div>asm1.txt for asm with 1 process,</div>







<div>asm2.txt for asm with 2 processes,</div><div>gasm1.txt for gasm with 1 process, (with the iteration numbers different from others)</div><div>gasm2.txt for gasm with 2 processes</div><div><br></div><div></div></div><br>







<div style="word-wrap:break-word"><div></div></div><br><div style="word-wrap:break-word"><div></div></div><br><div style="word-wrap:break-word"><div></div></div><br><div style="word-wrap:break-word"><div></div><div><br></div>







<div>thank you,</div><div>Hui<br><div><br><div><div>On Feb 20, 2012, at 3:06 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite"><br><br><div class="gmail_quote">On Mon, Feb 20, 2012 at 12:59 AM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>







<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word"><br><div><div><div>On Feb 20, 2012, at 12:41 AM, Dmitry Karpeev wrote:</div><br><blockquote type="cite"><br><br><div class="gmail_quote">On Sun, Feb 19, 2012 at 3:08 PM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>









<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word">I have a new problem: the results from ASM and GASM are different and it seems<div>GASM has something wrong with SetModifySubMatrices. Numerical tests are with&nbsp;</div><div>each subdomain supported only by one subdomain. There are no problems when</div>











<div>I did not modify submatrices. &nbsp;But when I modify submatrices, there are problems</div><div>with GASM but no problems with ASM.&nbsp;</div><div><br></div><div>For example, I use two subdomains. In the first case each subdomain is supported by</div>











<div>one processor and&nbsp;there seems no problem with GASM. But when I use run my program&nbsp;</div><div>with only one proc.&nbsp;so that it supports both of the two subdomains, the iteration&nbsp;</div><div>number is different from the first&nbsp;case and is much larger. &nbsp;On the other hand</div>











<div>ASM has no such problem.</div></div></blockquote><div>&nbsp;</div><div>Are the solutions the same?</div><div>What problem are you solving?</div></div></blockquote><div><br></div></div><div>Yes, the solutions are the same. That's why ASM gives the same results with one or</div>









<div>two processors. But GASM did not. &nbsp;</div></div></div></blockquote><div>Sorry, I wasn't clear: ASM and GASM produced different solutions in the case of two domains per processor?</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">









<div style="word-wrap:break-word"><div><div>I'm solving the Helmholtz equation. &nbsp;Maybe&nbsp;</div><div>I can prepare a simpler example to show this difference.</div></div></div></blockquote><div>That would be helpful. &nbsp;</div>









<div>Thanks.</div><div><br></div><div>Dmitry.&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><div><br><blockquote type="cite">









<div class="gmail_quote"><div><br></div><div>Dmitry.&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><div><div><div><br><div><br><div><div>On Feb 15, 2012, at 6:46 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite"><div bgcolor="#FFFFFF"><div>You should be able to.&nbsp;</div>

<div>This behavior is the same as in PCASM,</div><div>except in GASM the matrices live on subcommunicators.</div><div>I am in transit right now, but I can take a closer look in Friday.</div><div><br></div><div>Dmitry<br>










<br>
<br></div><div><br>On Feb 15, 2012, at 8:07, Hui Zhang &lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div><div>On Feb 15, 2012, at 11:19 AM, Hui Zhang wrote:</div>











<div><br><blockquote type="cite"><div style="word-wrap:break-word">Hi Dmitry,<div><br></div><div>thanks a lot! Currently, I'm not using ISColoring. Just comes another question</div><div>on PCGASMSetModifySubMatrices(). The user provided function has the prototype</div>











<div><br></div><div><span style="font-family:monospace;white-space:pre-wrap">    func (</span><span style="font-family:monospace;white-space:pre-wrap"><a>PC</a></span><span style="font-family:monospace;white-space:pre-wrap"> pc,</span><span style="font-family:monospace;white-space:pre-wrap"><a>PetscInt</a></span><span style="font-family:monospace;white-space:pre-wrap"> nsub,</span><span style="font-family:monospace;white-space:pre-wrap"><a>IS</a></span><span style="font-family:monospace;white-space:pre-wrap"> *row,</span><span style="font-family:monospace;white-space:pre-wrap"><a>IS</a></span><span style="font-family:monospace;white-space:pre-wrap"> *col,</span><span style="font-family:monospace;white-space:pre-wrap"><a>Mat</a></span><span style="font-family:monospace;white-space:pre-wrap"> *submat,void *ctx);</span></div>











<div><span style="font-family:monospace;white-space:pre-wrap"><br></span></div><div><span style="white-space:pre-wrap">I think the coloumns from the parameter 'col' are always the same <font face="monospace">as the rows </font></span></div>











<div><span style="white-space:pre-wrap"><font face="monospace">from the parameter 'row'. Because PCGASMSetLocalSubdomains() only accepts </font></span></div><div><span style="white-space:pre-wrap"><font face="monospace">index sets but not rows and columns. Has I misunderstood something?</font></span></div>











</div></blockquote><div><br></div><div>As I tested, the row and col are always the same.&nbsp;</div><div><br></div><div>I have a new question. Am I allowed to SetLocalToGlobalMapping() for the submat's</div><div>in the above func()?</div>











<div><br></div><div>thanks,</div><div>Hui</div><br><blockquote type="cite"><div style="word-wrap:break-word"><span style="white-space:pre-wrap"><font face="monospace"><br></font></span></div><div><span style="white-space:pre-wrap"><font face="monospace">thanks,</font></span></div>











<div><span style="white-space:pre-wrap"><font face="monospace">Hui</font></span></div><div><br></div><div><br><div><div>On Feb 11, 2012, at 3:36 PM, Dmitry Karpeev wrote:</div><br><blockquote type="cite">Yes, that's right.<div>











There is no good way to help the user assemble the subdomains at the moment beyond the 2D stuff.</div><div>It is expected that they are generated from mesh subdomains.</div><div>Each IS does carry the subdomains subcomm.</div>













<div><br></div><div>There is ISColoringToList() that is supposed to convert a "coloring" of indices to an array of ISs,</div><div>each having the indices with the same color and the subcomm that supports that color. It is</div>













<div>largely untested, though. &nbsp;You could try using it and give us feedback on any problems you encounter.</div><div><br></div><div>Dmitry.</div><div><br><br><div class="gmail_quote">On Sat, Feb 11, 2012 at 6:06 AM, Hui Zhang <span dir="ltr">&lt;<a href="mailto:mike.hui.zhang@hotmail.com" target="_blank"></a><a href="mailto:mike.hui.zhang@hotmail.com" target="_blank">mike.hui.zhang@hotmail.com</a>&gt;</span> wrote:<br>













<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">About PCGASMSetLocalSubdomains(), in the case of one subdomain supported by<br>
multiple processors, shall I always create the arguments 'is[s]' and 'is_local[s]'<br>
in a subcommunicator consisting of processors supporting the subdomain 's'?<br>
<br>
The source code of PCGASMCreateSubdomains2D() seemingly does so.<br>
<br>
Thanks,<br>
Hui<br>
<br>
</blockquote></div><br></div>
</blockquote></div><br></div></blockquote></div><br></div></blockquote></div></blockquote></div><br></div></div></div></div></div></div></blockquote></div><br>
</blockquote></div></div></div><br></div></blockquote></div><br>
</blockquote></div><br></div></div></div><br></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></div></blockquote></div><br></div></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>
<span>&lt;gasm_test.c&gt;</span></blockquote></div><br></div></body></html>