<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Thank you, Matthew! It does solve the problem. 
<div><br>
</div>
<div>Best,</div>
<div>Hui</div>
<div><br>
</div>
<div><br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div id="divRpF506078" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Matthew Knepley [knepley@gmail.com]<br>
<b>Sent:</b> Tuesday, March 03, 2015 8:26 AM<br>
<b>To:</b> Sun, Hui<br>
<b>Cc:</b> Dave May; petsc-users@mcs.anl.gov<br>
<b>Subject:</b> Re: [petsc-users] A very strange bug about using multiple KSPs<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Tue, Mar 3, 2015 at 10:15 AM, Sun, Hui <span dir="ltr">
<<a href="mailto:hus003@ucsd.edu" target="_blank">hus003@ucsd.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">
<div>Dave, thank you for your suggestions. I don't have a debugger, and I think without debugger we can still figure out if a function is called or not. </div>
<div><br>
</div>
<div>Putting the print commend before or after PetscFunctionBeginUser doesn't really matter. I just tried to put it after <font>PetscFunctionBeginUser, but something doesn't </font>print<font> just doesn't print. </font></div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>The ComputeMatrix function is stored in the DM, or more precisely in the DMKSP object. Since both KSPs have the</div>
<div>same DM, they have the same function.</div>
<div><br>
</div>
<div>I believe you can DMClone(da, &da2), and then this will work. Please tell me if it does not.</div>
<div><br>
</div>
<div>  Thanks,</div>
<div><br>
</div>
<div>    Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">
<div><font>There are other ways to see that computeMatrix1 is not called. For example, I just change b1 to a vector of 1's, and b2 to a vector of 0.5's, and ComputeMatrix1 to give diagonal matrix with entries 1, and </font><span style="font-size:small"> </span><span style="font-size:small">ComputeMatrix2
 to give diagonal matrix with entries 2. </span></div>
<div><font><br>
</font></div>
<div><font>Then I output the matrices and the vectors into a file, and visualize them in MATLAB. It does show me that the ksp1 and ksp2 both use </font><span style="font-size:small">ComputeMatrix2; while the ksp1 uses the rhs b1, and the ksp2 uses the rhs b2.
 This is not expected because I've set ksp1 to use ComputeMatrix1 before:</span></div>
<span class="">
<div><span style="font-size:small"><br>
</span></div>
<div>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp1,ComputeMatrix1,<span style="color:#bb2ca2">NULL</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp2,ComputeMatrix2,<span style="color:#bb2ca2">NULL</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo"><br>
</p>
</div>
</span>
<div><span style="font-size:small">Now if I comment out the lines </span></div>
<div><span style="font-size:small"><br>
</span></div>
<div>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp2,ComputeMatrix2,<span style="color:rgb(187,44,162)">NULL</span>);CHKERRQ(ierr);</p>
</div>
<div><span style="font-size:small"><br>
</span></div>
<div><font>and</font></div>
<div><font><br>
</font></div>
<div>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSolve(ksp2,b2,x2);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo"><br>
</p>
</div>
<div><font>Then ksp1 start to use ComputeMatrix1, as can be visualized from both the output file and the terminal print. So it shows me that there are some crosstalk between ksp1 and ksp2. If I set </font></div>
<div><font><br>
</font></div>
<div><span style="font-family:Menlo; font-size:11px">    ierr = KSPSetComputeOperators(ksp1,ComputeMatrix1,</span><span style="font-family:Menlo; font-size:11px; color:rgb(187,44,162)">NULL</span><span style="font-family:Menlo; font-size:11px">);CHKERRQ(ierr);</span></div>
<div><font><br>
</font></div>
<div><font>ksp1 uses ComputeMatrix1. But if I set</font></div>
<span class="">
<div><font><br>
</font></div>
<div>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp1,ComputeMatrix1,<span style="color:rgb(187,44,162)">NULL</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp2,ComputeMatrix2,<span style="color:rgb(187,44,162)">NULL</span>);CHKERRQ(ierr);</p>
</div>
<div><font><br>
</font></div>
</span>
<div><font>ksp1 uses ComputeMatrix2. </font></div>
<div><br>
</div>
<div><br>
</div>
<br>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr>
<div style="direction:ltr"><font face="Tahoma" color="#000000"><b>From:</b> Dave May [<a href="mailto:dave.mayhem23@gmail.com" target="_blank">dave.mayhem23@gmail.com</a>]<br>
<b>Sent:</b> Tuesday, March 03, 2015 1:11 AM<br>
<b>To:</b> Sun, Hui<br>
<b>Cc:</b> <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a><br>
<b>Subject:</b> Re: [petsc-users] A very strange bug about using multiple KSPs<br>
</font><br>
</div>
<div>
<div class="h5">
<div></div>
<div>Try moving your print statement in ComputeMatrix2 to be after PetscFunctionBeginUser;<br>
<br>
You should really use a debugger to see if these functions are being called or not - don't use print statements. <br>
<br>
On Tuesday, 3 March 2015, Sun, Hui <<a href="mailto:hus003@ucsd.edu" target="_blank">hus003@ucsd.edu</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">I set up 2 KSPs through KSPSetComputeOperators, <span style="font-size:10pt">with separate compute matrix functions. </span>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    </p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp1,ComputeMatrix1,<span style="color:#bb2ca2">NULL</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr = KSPSetComputeOperators(ksp2,ComputeMatrix2,<span style="color:#bb2ca2">NULL</span>);CHKERRQ(ierr);</p>
<div><span style="font-size:10pt"><br>
</span></div>
<div>Within each computeMatrix function, I define the matrix, and I also print something to the screen. So</div>
<div><br>
</div>
<div>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">PetscErrorCode ComputeMatrix1(KSP ksp, Mat J,Mat jac,
<span style="color:#bb2ca2">void</span> *ctx)</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">{</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ......</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr    = PetscPrintf(PETSC_COMM_WORLD,<span style="color:rgb(209,47,27)">"1\n"</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ......</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">}</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo"><br>
</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">PetscErrorCode ComputeMatrix2(KSP ksp, Mat J,Mat jac, <span style="color:rgb(187,44,162)">void</span> *ctx)</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">{</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ......</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ierr    = PetscPrintf(PETSC_COMM_WORLD,<span style="color:rgb(209,47,27)">"2\n"</span>);CHKERRQ(ierr);</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">    ......</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo">}</p>
<p style="margin-right:0px; margin-left:0px; font-size:11px; font-family:Menlo"><br>
</p>
</div>
<div>Now if I compile and execute the code, it only print 2, completely ignoring 1, which is not expected, since I have setup ksp1 to use ComputeMatrix1. </div>
<div><br>
</div>
<div>Does anyone know what might be wrong? Thank you. I have attached the short code here in this email as well. </div>
<div><br>
</div>
<div>Hui</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
<div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>