<div>Hi,</div>
<div>&nbsp;</div>
<div>I tried to do it in 2 ways: </div>
<div>&nbsp;</div>
<div>A:</div>
<div>&nbsp;</div>
<div>1.Do initial sweep:</div>
<div>&nbsp;</div>
<div>do j=1,size_y 
<p>&nbsp;do i=1,size_x</p>
<p>&nbsp;&nbsp;matsetvalue ....</p>
<p>&nbsp;end do</p>
<p>end do&quot;</p>
<p>2.<font color="#550055">matssemblybegin/end </font></p>
<p><span class="gmail_quote">3 do a loop using <font color="#550055">matzerorows&nbsp;</font>to zeros the particular rows</span></p>
<p><span class="gmail_quote">4. do loop and use&nbsp;<font color="#550055">matsetvalues</font> to insert values into those rows which I had zeroed previously</span></p>
<p><span class="gmail_quote">5 <font color="#550055">matssemblybegin/end </font></span></p>
<p><span class="gmail_quote">6 solve</span></p>
<p><span class="gmail_quote"></span>&nbsp;</p>
<p><span class="gmail_quote">B:</span></p>
<p><span class="gmail_quote">1. Same as A</span></p>
<p><span class="gmail_quote">2&nbsp;use matsetvalues to put zeros into those location where I earlier insert in the 1st full i,j sweep</span></p>
<div>3. insert correct value using matsetvalues</div>
<div>&nbsp;</div>
<div>4. finally matassemblybegin/end - just once.</div>
<div>&nbsp;</div>
<div>5. solve</div>
<p><span class="gmail_quote">l realised that B is about&nbsp; 3 times faster than A. May I know why this is so? In A, I only call&nbsp;<font color="#550055">matssemblybegin/end&nbsp;</font>once more. Is it so serious to the performance?
</span></p>
<p><span class="gmail_quote"></span>&nbsp;</p>
<p><span class="gmail_quote">Thanks</span></p></div>
<div><span class="gmail_quote"></span>&nbsp;</div>
<div><span class="gmail_quote">On 6/11/07, <b class="gmail_sendername">Barry Smith</b> &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:</span></div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br><br>On Mon, 11 Jun 2007, Ben Tay wrote:<br><br>&gt; Thanks Barry,<br>&gt;<br>&gt; I managed to get it working. I realise that I had to call
<br>&gt; matssemblybegin/end each time after I zero a particular row. I also tried<br>&gt; MatSetOption(mat,MAT_KEEP_ZEROED_ROWS) as what you &#39;ve suggested.<br>&gt;<br>&gt; So do I have to callMatSetOption(mat,MAT_KEEP_ZEROED_ROWS) everytime just
<br>&gt; before I need to zero it or just once ie after the 1st matassemblybegin/end?<br><br>Call it once when&nbsp;&nbsp;the matrix is created is fine.<br>&gt;<br>&gt; Calling matassemblybegin/end each time before matzerorows gives me the
<br>&gt; impression that it is very inefficient. Is that so?<br><br>Yes, if you do this a bunch of imes<br><br>&gt;<br>&gt; In that case, I wonder if it is better for me to :<br>&gt;<br>&gt; 1 use matsetvalues to put zeros into those location where I earlier insert
<br>&gt; in the 1st full i,j sweep<br>&gt; 2. insert correct value using matsetvalues<br>&gt; 3. finally matassemblybegin/end - just once.<br><br>You can do this<br><br>&gt;<br>&gt; Lastly, is MatZeroRowsIS exactly the same as matzerorows, except that it is
<br>&gt; meant for just 1 row instead of consecutive no. of rows?<br><br>They are the same but one takes an array of integers while the other<br>takes an IS. Neither require &quot;consecutive no. of rows&quot; you can zero
<br>whatever rows you want together.<br><br>&nbsp;&nbsp;Barry<br><br>&gt;<br>&gt; Thanks again<br>&gt;<br>&gt;<br>&gt; On 6/11/07, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>&gt; &gt;<br>
&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; On Sun, 10 Jun 2007, Ben Tay wrote:<br>&gt; &gt;<br>&gt; &gt; &gt; Hi,<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; I need to insert values into a matrix and then solve this poisson eqn as<br>&gt; &gt; &gt; part of my cfd code. For efficiency sake, I&nbsp;&nbsp;simply use
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; &quot;do j=1,size_y<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; do i=1,size_x<br>&gt; &gt; &gt;<br>&gt; &gt; &gt;&nbsp;&nbsp;matsetvalue ....<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; end do<br>&gt; &gt; &gt;
<br>&gt; &gt; &gt; end do&quot;<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; to insert values into all the cells<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Then for specific cells, I need to enter some other values. In other<br>&gt; &gt; words,
<br>&gt; &gt; &gt; for specific rows of the matrix, I need to zero the whole row and insert<br>&gt; &gt; new<br>&gt; &gt; &gt; values. How can I do that?<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; I tried to use MatZeroRows but it says it&#39;s not for unassembled matrix.
<br>&gt; &gt; But<br>&gt; &gt; &gt; I need to zero the particular row, insert values, and then finally<br>&gt; &gt; assembly<br>&gt; &gt; &gt; it. Is there a command to do this?<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp; matassemblybegin/end
<br>&gt; &gt;&nbsp;&nbsp; matzerorows<br>&gt; &gt;&nbsp;&nbsp; matsetvalues, matsetvalues, matsetvalue<br>&gt; &gt;&nbsp;&nbsp; matssemblybegin/end<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp; For improved efficiency you will want to call<br>&gt; &gt;&nbsp;&nbsp; MatSetOption(mat,MAT_KEEP_ZEROED_ROWS); before the matzerorows()
<br>&gt; &gt;<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Thanks<br>&gt; &gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt;<br><br></blockquote><br>