~ubuntu-branches/ubuntu/warty/petsc/warty

« back to all changes in this revision

Viewing changes to src/mat/utils/getcolv.c.html

  • Committer: Bazaar Package Importer
  • Author(s): Adam C. Powell, IV
  • Date: 2004-06-07 13:41:43 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040607134143-92p586zrauvie0le
Tags: 2.2.0-2
* Upstream patch level 2.
* New PETSC_BOPT_EXTRA option for different BOPT and lib names, with _c++
  symlinks only for plain and single (closes: #249617).
* New DEBIAN_DIST=contrib option to link with hypre, parmetis (closes:
  #249619).
* Combined petsc-c and petsc-fortran substvars into petsc-compilers.
* Extra quote in -dev prerm eliminates "too many arguments" problem.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
<html>
4
4
<head>
5
5
<title></title>
6
 
<meta name="generator" content="c2html 0.9.1">
7
 
<meta name="date" content="2002-05-31T16:19:42+00:00">
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T20:01:06+00:00">
8
8
</head>
9
9
 
10
10
<body bgcolor="#FFFFFF">
12
12
 
13
13
<a name="line3"> 3: </a> #include <A href="../../../src/mat/matimpl.h.html">src/mat/matimpl.h</A>
14
14
 
15
 
<a name="line5">  5: </a><font color="#B22222">/*@</font>
16
 
<a name="line6">  6: </a><font color="#B22222">   <A href="../../../docs/manualpages/Mat/MatGetColumnVector.html#MatGetColumnVector">MatGetColumnVector</A> - Gets the values from a given column of a matrix.</font>
17
 
 
18
 
<a name="line8">  8: </a><font color="#B22222">   Not Collective</font>
19
 
 
20
 
<a name="line10"> 10: </a><font color="#B22222">   Input Parameters:</font>
21
 
<a name="line11"> 11: </a><font color="#B22222">+  A - the matrix</font>
22
 
<a name="line12"> 12: </a><font color="#B22222">.  yy - the vector</font>
23
 
<a name="line13"> 13: </a><font color="#B22222">-  c - the column requested (in global numbering)</font>
24
 
 
25
 
<a name="line15"> 15: </a><font color="#B22222">   Level: advanced</font>
26
 
 
27
 
<a name="line17"> 17: </a><font color="#B22222">   Notes:</font>
28
 
<a name="line18"> 18: </a><font color="#B22222">   Each processor for which this is called gets the values for its rows.</font>
29
 
 
30
 
<a name="line20"> 20: </a><font color="#B22222">   Since PETSc matrices are usually stored in compressed row format, this routine</font>
31
 
<a name="line21"> 21: </a><font color="#B22222">   will generally be slow.</font>
32
 
 
33
 
<a name="line23"> 23: </a><font color="#B22222">   The vector must have the same parallel row layout as the matrix.</font>
34
 
 
35
 
<a name="line25"> 25: </a><font color="#B22222">   Contributed by: Denis Vanderstraeten</font>
36
 
 
37
 
<a name="line27"> 27: </a><font color="#B22222">.keywords: matrix, column, get </font>
38
 
 
39
 
<a name="line29"> 29: </a><font color="#B22222">.seealso: <A href="../../../docs/manualpages/Mat/MatGetRow.html#MatGetRow">MatGetRow</A>(), <A href="../../../docs/manualpages/Mat/MatGetDiagonal.html#MatGetDiagonal">MatGetDiagonal</A>()</font>
40
 
 
41
 
<a name="line31"> 31: </a><font color="#B22222">@*/</font>
42
 
<a name="line32"> 32: </a><strong><font color="#4169E1"><a name="MatGetColumnVector"></a>int <A href="../../../docs/manualpages/Mat/MatGetColumnVector.html#MatGetColumnVector">MatGetColumnVector</A>(<A href="../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A,<A href="../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> yy,int col)</font></strong>
43
 
<a name="line33"> 33: </a>{
44
 
<a name="line34"> 34: </a>  <A href="../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>   *y,*v,zero = 0.0;
45
 
<a name="line35"> 35: </a>  int      ierr,i,j,nz,*idx,N,Rs,Re,rs,re;
46
 
<a name="line36"> 36: </a>  MPI_Comm <A href="../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
47
 
<a name="line37"> 37: </a>
48
 
 
49
 
<a name="line42"> 42: </a>  <font color="#4169E1">if</font> (col &lt; 0)  <A href="../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Requested negative column: %d"</font>,col);
50
 
<a name="line43"> 43: </a>  <A href="../../../docs/manualpages/Mat/MatGetSize.html#MatGetSize">MatGetSize</A>(A,PETSC_NULL,&amp;N);
51
 
<a name="line44"> 44: </a>  <font color="#4169E1">if</font> (col &gt;= N)  <A href="../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(1,<font color="#666666">"Requested column %d larger than number columns in matrix %d"</font>,col,N);
52
 
 
53
 
<a name="line46"> 46: </a>  <A href="../../../docs/manualpages/Mat/MatGetOwnershipRange.html#MatGetOwnershipRange">MatGetOwnershipRange</A>(A,&amp;Rs,&amp;Re);
54
 
 
55
 
<a name="line48"> 48: </a>  <A href="../../../docs/manualpages/Sys/PetscObjectGetComm.html#PetscObjectGetComm">PetscObjectGetComm</A>((<A href="../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)yy,&amp;<A href="../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
56
 
<a name="line49"> 49: </a>  <A href="../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(yy,&amp;rs,&amp;re);
57
 
<a name="line50"> 50: </a>  <font color="#4169E1">if</font> (Rs != rs || Re != re) SETERRQ4(1,<font color="#666666">"Matrix %d %d does not have same ownership range (<A href="../../../docs/manualpages/Sys/size.html#size">size</A>) as vector %d %d"</font>,Rs,Re,rs,re);
58
 
 
59
 
<a name="line52"> 52: </a>  <A href="../../../docs/manualpages/Vec/VecSet.html#VecSet">VecSet</A>(&amp;zero,yy);
60
 
<a name="line53"> 53: </a>  <A href="../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(yy,&amp;y);
61
 
 
62
 
<a name="line55"> 55: </a>  <font color="#4169E1">for</font> (i=Rs; i&lt;Re; i++) {
63
 
<a name="line56"> 56: </a>    <A href="../../../docs/manualpages/Mat/MatGetRow.html#MatGetRow">MatGetRow</A>(A,i,&amp;nz,&amp;idx,&amp;v);
64
 
<a name="line57"> 57: </a>    <font color="#4169E1">if</font> (nz &amp;&amp; idx[0] &lt;= col) {
65
 
<a name="line58"> 58: </a>      <font color="#B22222">/*</font>
66
 
<a name="line59"> 59: </a><font color="#B22222">          Should use faster search here </font>
67
 
<a name="line60"> 60: </a><font color="#B22222">      */</font>
68
 
<a name="line61"> 61: </a>      <font color="#4169E1">for</font> (j=0; j&lt;nz; j++) {
69
 
<a name="line62"> 62: </a>        <font color="#4169E1">if</font> (idx[j] &gt;= col) {
70
 
<a name="line63"> 63: </a>          <font color="#4169E1">if</font> (idx[j] == col) y[i-rs] = v[j];
71
 
<a name="line64"> 64: </a>          <font color="#4169E1">break</font>;
72
 
<a name="line65"> 65: </a>        }
73
 
<a name="line66"> 66: </a>      }
74
 
<a name="line67"> 67: </a>    }
75
 
<a name="line68"> 68: </a>    <A href="../../../docs/manualpages/Mat/MatRestoreRow.html#MatRestoreRow">MatRestoreRow</A>(A,i,&amp;nz,&amp;idx,&amp;v);
76
 
<a name="line69"> 69: </a>  }
77
 
 
78
 
<a name="line71"> 71: </a>  <A href="../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(yy,&amp;y);
79
 
<a name="line72"> 72: </a>  <font color="#4169E1">return</font>(0);
80
 
<a name="line73"> 73: </a>}
 
15
<a name="line7">  7: </a><font color="#B22222">/*@</font>
 
16
<a name="line8">  8: </a><font color="#B22222">   <A href="../../../docs/manualpages/Mat/MatGetColumnVector.html#MatGetColumnVector">MatGetColumnVector</A> - Gets the values from a given column of a matrix.</font>
 
17
 
 
18
<a name="line10"> 10: </a><font color="#B22222">   Not Collective</font>
 
19
 
 
20
<a name="line12"> 12: </a><font color="#B22222">   Input Parameters:</font>
 
21
<a name="line13"> 13: </a><font color="#B22222">+  A - the matrix</font>
 
22
<a name="line14"> 14: </a><font color="#B22222">.  yy - the vector</font>
 
23
<a name="line15"> 15: </a><font color="#B22222">-  c - the column requested (in global numbering)</font>
 
24
 
 
25
<a name="line17"> 17: </a><font color="#B22222">   Level: advanced</font>
 
26
 
 
27
<a name="line19"> 19: </a><font color="#B22222">   Notes:</font>
 
28
<a name="line20"> 20: </a><font color="#B22222">   Each processor for which this is called gets the values for its rows.</font>
 
29
 
 
30
<a name="line22"> 22: </a><font color="#B22222">   Since PETSc matrices are usually stored in compressed row format, this routine</font>
 
31
<a name="line23"> 23: </a><font color="#B22222">   will generally be slow.</font>
 
32
 
 
33
<a name="line25"> 25: </a><font color="#B22222">   The vector must have the same parallel row layout as the matrix.</font>
 
34
 
 
35
<a name="line27"> 27: </a><font color="#B22222">   Contributed by: Denis Vanderstraeten</font>
 
36
 
 
37
<a name="line29"> 29: </a><font color="#B22222">.keywords: matrix, column, get </font>
 
38
 
 
39
<a name="line31"> 31: </a><font color="#B22222">.seealso: <A href="../../../docs/manualpages/Mat/MatGetRow.html#MatGetRow">MatGetRow</A>(), <A href="../../../docs/manualpages/Mat/MatGetDiagonal.html#MatGetDiagonal">MatGetDiagonal</A>()</font>
 
40
 
 
41
<a name="line33"> 33: </a><font color="#B22222">@*/</font>
 
42
<a name="line34"> 34: </a><strong><font color="#4169E1"><a name="MatGetColumnVector"></a>int <A href="../../../docs/manualpages/Mat/MatGetColumnVector.html#MatGetColumnVector">MatGetColumnVector</A>(<A href="../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A,<A href="../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> yy,int col)</font></strong>
 
43
<a name="line35"> 35: </a>{
 
44
<a name="line36"> 36: </a>  <A href="../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>   *y,*v,zero = 0.0;
 
45
<a name="line37"> 37: </a>  int      ierr,i,j,nz,*idx,N,Rs,Re,rs,re;
 
46
<a name="line38"> 38: </a>  <A href="../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
 
47
<a name="line39"> 39: </a>
 
48
 
 
49
<a name="line44"> 44: </a>  <font color="#4169E1">if</font> (col &lt; 0)  <A href="../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Requested negative column: %d"</font>,col);
 
50
<a name="line45"> 45: </a>  <A href="../../../docs/manualpages/Mat/MatGetSize.html#MatGetSize">MatGetSize</A>(A,<A href="../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;N);
 
51
<a name="line46"> 46: </a>  <font color="#4169E1">if</font> (col &gt;= N)  <A href="../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(1,<font color="#666666">"Requested column %d larger than number columns in matrix %d"</font>,col,N);
 
52
 
 
53
<a name="line48"> 48: </a>  <A href="../../../docs/manualpages/Mat/MatGetOwnershipRange.html#MatGetOwnershipRange">MatGetOwnershipRange</A>(A,&amp;Rs,&amp;Re);
 
54
 
 
55
<a name="line50"> 50: </a>  <A href="../../../docs/manualpages/Sys/PetscObjectGetComm.html#PetscObjectGetComm">PetscObjectGetComm</A>((<A href="../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)yy,&amp;<A href="../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
 
56
<a name="line51"> 51: </a>  <A href="../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(yy,&amp;rs,&amp;re);
 
57
<a name="line52"> 52: </a>  <font color="#4169E1">if</font> (Rs != rs || Re != re) SETERRQ4(1,<font color="#666666">"Matrix %d %d does not have same ownership range (<A href="../../../docs/manualpages/Sys/size.html#size">size</A>) as vector %d %d"</font>,Rs,Re,rs,re);
 
58
 
 
59
<a name="line54"> 54: </a>  <A href="../../../docs/manualpages/Vec/VecSet.html#VecSet">VecSet</A>(&amp;zero,yy);
 
60
<a name="line55"> 55: </a>  <A href="../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(yy,&amp;y);
 
61
 
 
62
<a name="line57"> 57: </a>  <font color="#4169E1">for</font> (i=Rs; i&lt;Re; i++) {
 
63
<a name="line58"> 58: </a>    <A href="../../../docs/manualpages/Mat/MatGetRow.html#MatGetRow">MatGetRow</A>(A,i,&amp;nz,&amp;idx,&amp;v);
 
64
<a name="line59"> 59: </a>    <font color="#4169E1">if</font> (nz &amp;&amp; idx[0] &lt;= col) {
 
65
<a name="line60"> 60: </a>      <font color="#B22222">/*</font>
 
66
<a name="line61"> 61: </a><font color="#B22222">          Should use faster search here </font>
 
67
<a name="line62"> 62: </a><font color="#B22222">      */</font>
 
68
<a name="line63"> 63: </a>      <font color="#4169E1">for</font> (j=0; j&lt;nz; j++) {
 
69
<a name="line64"> 64: </a>        <font color="#4169E1">if</font> (idx[j] &gt;= col) {
 
70
<a name="line65"> 65: </a>          <font color="#4169E1">if</font> (idx[j] == col) y[i-rs] = v[j];
 
71
<a name="line66"> 66: </a>          <font color="#4169E1">break</font>;
 
72
<a name="line67"> 67: </a>        }
 
73
<a name="line68"> 68: </a>      }
 
74
<a name="line69"> 69: </a>    }
 
75
<a name="line70"> 70: </a>    <A href="../../../docs/manualpages/Mat/MatRestoreRow.html#MatRestoreRow">MatRestoreRow</A>(A,i,&amp;nz,&amp;idx,&amp;v);
 
76
<a name="line71"> 71: </a>  }
 
77
 
 
78
<a name="line73"> 73: </a>  <A href="../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(yy,&amp;y);
 
79
<a name="line74"> 74: </a>  <font color="#4169E1">return</font>(0);
 
80
<a name="line75"> 75: </a>}
81
81
</pre>
82
82
</body>
83
83