<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;">
<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 size="2">PetscFunctionBeginUser, but something doesn't </font>print<font size="2"> just doesn't print. </font></div>
<div><font size="2"><br>
</font></div>
<div><font size="2">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 size="2"><br>
</font></div>
<div><font size="2">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>
<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>
<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 size="2">and</font></div>
<div><font size="2"><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 size="2">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 size="2"><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 size="2"><br>
</font></div>
<div><font size="2">ksp1 uses ComputeMatrix1. But if I set</font></div>
<div><font size="2"><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 size="2"><br>
</font></div>
<div><font size="2">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 tabindex="-1">
<div id="divRpF519161" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Dave May [dave.mayhem23@gmail.com]<br>
<b>Sent:</b> Tuesday, March 03, 2015 1:11 AM<br>
<b>To:</b> Sun, Hui<br>
<b>Cc:</b> 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>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>
</body>
</html>