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

« back to all changes in this revision

Viewing changes to src/mat/impls/normal/normm.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:
 
1
<center><a href="normm.c">Actual source code: normm.c</a></center><br>
 
2
 
 
3
<html>
 
4
<head>
 
5
<title></title>
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T20:00:46+00:00">
 
8
</head>
 
9
 
 
10
<body bgcolor="#FFFFFF">
 
11
<pre width="80"><a name="line1">  1: </a><font color="#B22222">/*$Id: bvec2.c,v 1.202 2001/09/12 03:26:24 bsmith Exp $*/</font>
 
12
 
 
13
<a name="line3"> 3: </a> #include <A href="../../../../src/mat/matimpl.h.html">src/mat/matimpl.h</A>
 
14
 
 
15
<a name="line5">  5: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
 
16
<a name="line6">  6: </a>  <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A;
 
17
<a name="line7">  7: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> w;
 
18
<a name="line8">  8: </a>} Mat_Normal;
 
19
 
 
20
<a name="line12"> 12: </a><strong><font color="#4169E1"><a name="MatMult_Normal"></a>int MatMult_Normal(<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> N,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> x,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> y)</font></strong>
 
21
<a name="line13"> 13: </a>{
 
22
<a name="line14"> 14: </a>  Mat_Normal *Na = (Mat_Normal*)N-&gt;data;
 
23
<a name="line15"> 15: </a>  int        ierr;
 
24
 
 
25
<a name="line18"> 18: </a>  <A href="../../../../docs/manualpages/Mat/MatMult.html#MatMult">MatMult</A>(Na-&gt;A,x,Na-&gt;w);
 
26
<a name="line19"> 19: </a>  <A href="../../../../docs/manualpages/Mat/MatMultTranspose.html#MatMultTranspose">MatMultTranspose</A>(Na-&gt;A,Na-&gt;w,y);
 
27
<a name="line20"> 20: </a>  <font color="#4169E1">return</font>(0);
 
28
<a name="line21"> 21: </a>}
 
29
 
 
30
<a name="line25"> 25: </a><strong><font color="#4169E1"><a name="MatDestroy_Normal"></a>int MatDestroy_Normal(<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> N)</font></strong>
 
31
<a name="line26"> 26: </a>{
 
32
<a name="line27"> 27: </a>  Mat_Normal *Na = (Mat_Normal*)N-&gt;data;
 
33
<a name="line28"> 28: </a>  int        ierr;
 
34
 
 
35
<a name="line31"> 31: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectDereference.html#PetscObjectDereference">PetscObjectDereference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)Na-&gt;A);
 
36
<a name="line32"> 32: </a>  <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>(Na-&gt;w);
 
37
<a name="line33"> 33: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(Na);
 
38
<a name="line34"> 34: </a>  <font color="#4169E1">return</font>(0);
 
39
<a name="line35"> 35: </a>}
 
40
<a name="line36"> 36: </a>
 
41
<a name="line37"> 37: </a><font color="#B22222">/*</font>
 
42
<a name="line38"> 38: </a><font color="#B22222">      Slow, nonscalable version</font>
 
43
<a name="line39"> 39: </a><font color="#B22222">*/</font>
 
44
<a name="line42"> 42: </a><strong><font color="#4169E1"><a name="MatGetDiagonal_Normal"></a>int MatGetDiagonal_Normal(<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> N,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v)</font></strong>
 
45
<a name="line43"> 43: </a>{
 
46
<a name="line44"> 44: </a>  Mat_Normal  *Na = (Mat_Normal*)N-&gt;data;
 
47
<a name="line45"> 45: </a>  <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A>         A = Na-&gt;A;
 
48
<a name="line46"> 46: </a>  int         ierr,i,j,rstart,rend,nnz,*cols;
 
49
<a name="line47"> 47: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *diag,*work,*values;
 
50
<a name="line48"> 48: </a>  <A href="../../../../docs/manualpages/Vec/PetscMap.html#PetscMap">PetscMap</A>    cmap;
 
51
 
 
52
<a name="line51"> 51: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(2*A-&gt;N*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;diag);
 
53
<a name="line52"> 52: </a>  work = diag + A-&gt;N;
 
54
<a name="line53"> 53: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(work,A-&gt;N*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
 
55
<a name="line54"> 54: </a>  <A href="../../../../docs/manualpages/Mat/MatGetOwnershipRange.html#MatGetOwnershipRange">MatGetOwnershipRange</A>(A,&amp;rstart,&amp;rend);
 
56
<a name="line55"> 55: </a>  <font color="#4169E1">for</font> (i=rstart; i&lt;rend; i++) {
 
57
<a name="line56"> 56: </a>    <A href="../../../../docs/manualpages/Mat/MatGetRow.html#MatGetRow">MatGetRow</A>(A,i,&amp;nnz,&amp;cols,&amp;values);
 
58
<a name="line57"> 57: </a>    <font color="#4169E1">for</font> (j=0; j&lt;nnz; j++) {
 
59
<a name="line58"> 58: </a>      work[cols[j]] += values[j]*values[j];
 
60
<a name="line59"> 59: </a>    }
 
61
<a name="line60"> 60: </a>    <A href="../../../../docs/manualpages/Mat/MatRestoreRow.html#MatRestoreRow">MatRestoreRow</A>(A,i,&amp;nnz,&amp;cols,&amp;values);
 
62
<a name="line61"> 61: </a>  }
 
63
<a name="line62"> 62: </a>  <A href="http://www.mcs.anl.gov/mpi/www/www3/MPI_Allreduce.html#MPI_Allreduce">MPI_Allreduce</A>(work,diag,A-&gt;N,MPIU_SCALAR,MPI_SUM,N-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>);
 
64
<a name="line63"> 63: </a>  <A href="../../../../docs/manualpages/Mat/MatGetPetscMaps.html#MatGetPetscMaps">MatGetPetscMaps</A>(A,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&amp;cmap);
 
65
<a name="line64"> 64: </a>  <A href="../../../../docs/manualpages/Vec/PetscMapGetLocalRange.html#PetscMapGetLocalRange">PetscMapGetLocalRange</A>(cmap,&amp;rstart,&amp;rend);
 
66
<a name="line65"> 65: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(v,&amp;values);
 
67
<a name="line66"> 66: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(values,diag+rstart,(rend-rstart)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
 
68
<a name="line67"> 67: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(v,&amp;values);
 
69
<a name="line68"> 68: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(diag);
 
70
<a name="line69"> 69: </a>  <font color="#4169E1">return</font>(0);
 
71
<a name="line70"> 70: </a>}
 
72
 
 
73
<a name="line74"> 74: </a><font color="#B22222">/*@</font>
 
74
<a name="line75"> 75: </a><font color="#B22222">      MatCreateNormal - Creates a new matrix object that behaves like A'*A.</font>
 
75
 
 
76
<a name="line77"> 77: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A></font>
 
77
 
 
78
<a name="line79"> 79: </a><font color="#B22222">   Input Parameter:</font>
 
79
<a name="line80"> 80: </a><font color="#B22222">.   A  - the (possibly rectangular) matrix</font>
 
80
 
 
81
<a name="line82"> 82: </a><font color="#B22222">   Output Parameter:</font>
 
82
<a name="line83"> 83: </a><font color="#B22222">.   N - the matrix that represents A'*A</font>
 
83
 
 
84
<a name="line85"> 85: </a><font color="#B22222">   Notes: The product A'*A is NOT actually formed! Rather the new matrix</font>
 
85
<a name="line86"> 86: </a><font color="#B22222">          object performs the matrix-vector product by first multiplying by</font>
 
86
<a name="line87"> 87: </a><font color="#B22222">          A and then A'</font>
 
87
<a name="line88"> 88: </a><font color="#B22222">@*/</font>
 
88
<a name="line89"> 89: </a><strong><font color="#4169E1"><a name="MatCreateNormal"></a>int MatCreateNormal(<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> A,<A href="../../../../docs/manualpages/Mat/Mat.html#Mat">Mat</A> *N)</font></strong>
 
89
<a name="line90"> 90: </a>{
 
90
<a name="line91"> 91: </a>  int        ierr,m,n;
 
91
<a name="line92"> 92: </a>  Mat_Normal *Na;
 
92
 
 
93
<a name="line95"> 95: </a>  <A href="../../../../docs/manualpages/Mat/MatGetLocalSize.html#MatGetLocalSize">MatGetLocalSize</A>(A,&amp;m,&amp;n);
 
94
<a name="line96"> 96: </a>  <A href="../../../../docs/manualpages/Mat/MatCreate.html#MatCreate">MatCreate</A>(A-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,n,n,<A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,<A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,N);
 
95
<a name="line97"> 97: </a>  PetscObjectChangeTypeName((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)*N,MATNORMAL);
 
96
<a name="line98"> 98: </a>
 
97
<a name="line99"> 99: </a>  <A href="../../../../docs/manualpages/Sys/PetscNew.html#PetscNew">PetscNew</A>(Mat_Normal,&amp;Na);
 
98
<a name="line100">100: </a>  Na-&gt;A     = A;
 
99
<a name="line101">101: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectReference.html#PetscObjectReference">PetscObjectReference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)A);
 
100
<a name="line102">102: </a>  (*N)-&gt;data = (void*) Na;
 
101
 
 
102
<a name="line104">104: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateMPI.html#VecCreateMPI">VecCreateMPI</A>(A-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,m,<A href="../../../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,&amp;Na-&gt;w);
 
103
<a name="line105">105: </a>  (*N)-&gt;ops-&gt;destroy     = MatDestroy_Normal;
 
104
<a name="line106">106: </a>  (*N)-&gt;ops-&gt;mult        = MatMult_Normal;
 
105
<a name="line107">107: </a>  (*N)-&gt;ops-&gt;getdiagonal = MatGetDiagonal_Normal;
 
106
<a name="line108">108: </a>  (*N)-&gt;assembled        = PETSC_TRUE;
 
107
<a name="line109">109: </a>  (*N)-&gt;N                = A-&gt;N;
 
108
<a name="line110">110: </a>  (*N)-&gt;M                = A-&gt;N;
 
109
<a name="line111">111: </a>  (*N)-&gt;n                = A-&gt;n;
 
110
<a name="line112">112: </a>  (*N)-&gt;m                = A-&gt;n;
 
111
<a name="line113">113: </a>  <font color="#4169E1">return</font>(0);
 
112
<a name="line114">114: </a>}
 
113
 
 
114
</pre>
 
115
</body>
 
116
 
 
117
</html>