[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to zero all values on a particular row?



Thanks Barry,
 
I managed to get it working. I realise that I had to call matssemblybegin/end each time after I zero a particular row. I also tried MatSetOption(mat,MAT_KEEP_ZEROED_ROWS) as what you 've suggested.
 
So do I have to callMatSetOption(mat,MAT_KEEP_ZEROED_ROWS) everytime just before I need to zero it or just once ie after the 1st matassemblybegin/end?
 
Calling matassemblybegin/end each time before matzerorows gives me the impression that it is very inefficient. Is that so?
 
In that case, I wonder if it is better for me to :
 
1 use matsetvalues to put zeros into those location where I earlier insert in the 1st full i,j sweep
2. insert correct value using matsetvalues
3. finally matassemblybegin/end - just once.
 
Lastly, is MatZeroRowsIS exactly the same as matzerorows, except that it is meant for just 1 row instead of consecutive no. of rows?
 
Thanks again

 
On 6/11/07, Barry Smith <bsmith@xxxxxxxxxxx> wrote:


On Sun, 10 Jun 2007, Ben Tay wrote:

> Hi,
>
> I need to insert values into a matrix and then solve this poisson eqn as
> part of my cfd code. For efficiency sake, I  simply use
>
> "do j=1,size_y
>
> do i=1,size_x
>
>  matsetvalue ....
>
> end do
>
> end do"
>
> to insert values into all the cells
>
> Then for specific cells, I need to enter some other values. In other words,
> for specific rows of the matrix, I need to zero the whole row and insert new
> values. How can I do that?
>
> I tried to use MatZeroRows but it says it's not for unassembled matrix. But
> I need to zero the particular row, insert values, and then finally assembly
> it. Is there a command to do this?

  matassemblybegin/end
  matzerorows
  matsetvalues, matsetvalues, matsetvalue
  matssemblybegin/end

  For improved efficiency you will want to call
  MatSetOption(mat,MAT_KEEP_ZEROED_ROWS); before the matzerorows()

>
> Thanks
>