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

« back to all changes in this revision

Viewing changes to src/vec/impls/seq/bvec2.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:04:02+00:00">
 
6
<meta name="generator" content="c2html 0.9.4">
 
7
<meta name="date" content="2004-02-27T19:57:52+00:00">
8
8
</head>
9
9
 
10
10
<body bgcolor="#FFFFFF">
13
13
<a name="line3">  3: </a><font color="#B22222">   Implements the sequential vectors.</font>
14
14
<a name="line4">  4: </a><font color="#B22222">*/</font>
15
15
 
16
 
<a name="line6"> 6: </a> #include <A href="../../../../src/vec/vecimpl.h.html">src/vec/vecimpl.h</A>
 
16
<a name="line6"> 6: </a> #include <A href="../../../../include/vecimpl.h.html">vecimpl.h</A>
17
17
<a name="line7"> 7: </a> #include <A href="../../../../src/vec/impls/dvecimpl.h.html">src/vec/impls/dvecimpl.h</A>
18
18
<a name="line8"> 8: </a> #include <A href="../../../../src/inline/dot.h.html">src/inline/dot.h</A>
19
19
<a name="line9"> 9: </a> #include <A href="../../../../include/petscblaslapack.h.html">petscblaslapack.h</A>
20
 
<a name="line10"> 10: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
21
 
<a name="line11"> 11: </a><strong><font color="#4169E1">EXTERN int <A href="../../../../docs/manualpages/Viewer/PetscViewerAMSGetAMSComm.html#PetscViewerAMSGetAMSComm">PetscViewerAMSGetAMSComm</A>(<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A>,AMS_Comm *)</font></strong>;
22
 
<a name="line12"> 12: </a><font color="#A020F0">#endif</font>
23
 
 
24
 
<a name="line14"> 14: </a><strong><font color="#4169E1"><a name="VecNorm_Seq"></a>int VecNorm_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Vec/NormType.html#NormType">NormType</A> type,PetscReal* z)</font></strong>
25
 
<a name="line15"> 15: </a>{
26
 
<a name="line16"> 16: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx;
27
 
<a name="line17"> 17: </a>  int         n=xin-&gt;n,ierr,one = 1;
28
 
 
29
 
<a name="line20"> 20: </a>  <font color="#4169E1">if</font> (type == NORM_2) {
30
 
<a name="line21"> 21: </a>    VecGetArrayFast(xin,&amp;xx);
31
 
<a name="line22"> 22: </a>    <font color="#B22222">/*</font>
32
 
<a name="line23"> 23: </a><font color="#B22222">      This is because the Fortran BLAS 1 Norm is very slow! </font>
33
 
<a name="line24"> 24: </a><font color="#B22222">    */</font>
34
 
<a name="line25"> 25: </a><font color="#A020F0">#if defined(PETSC_HAVE_SLOW_NRM2)</font>
35
 
<a name="line26"> 26: </a><font color="#A020F0">#if defined(PETSC_USE_FORTRAN_KERNEL_NORM)</font>
36
 
<a name="line27"> 27: </a>    fortrannormsqr_(xx,&amp;n,z);
37
 
<a name="line28"> 28: </a>    *z = sqrt(*z);
38
 
<a name="line29"> 29: </a><font color="#A020F0">#elif defined(PETSC_USE_UNROLLED_NORM)</font>
39
 
<a name="line30"> 30: </a>    {
40
 
<a name="line31"> 31: </a>    PetscReal work = 0.0;
41
 
<a name="line32"> 32: </a>    <font color="#4169E1">switch</font> (n &amp; 0x3) {
42
 
<a name="line33"> 33: </a>      <font color="#4169E1">case</font> 3: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++;
43
 
<a name="line34"> 34: </a>      <font color="#4169E1">case</font> 2: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++;
44
 
<a name="line35"> 35: </a>      <font color="#4169E1">case</font> 1: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++; n -= 4;
45
 
<a name="line36"> 36: </a>    }
46
 
<a name="line37"> 37: </a>    <font color="#4169E1">while</font> (n&gt;0) {
47
 
<a name="line38"> 38: </a>      work += PetscRealPart(xx[0]*PetscConj(xx[0])+xx[1]*PetscConj(xx[1])+
48
 
<a name="line39"> 39: </a>                        xx[2]*PetscConj(xx[2])+xx[3]*PetscConj(xx[3]));
49
 
<a name="line40"> 40: </a>      xx += 4; n -= 4;
50
 
<a name="line41"> 41: </a>    }
51
 
<a name="line42"> 42: </a>    *z = sqrt(work);}
52
 
<a name="line43"> 43: </a><font color="#A020F0">#else</font>
53
 
<a name="line44"> 44: </a>    {
54
 
<a name="line45"> 45: </a>      int         i;
55
 
<a name="line46"> 46: </a>      <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> sum=0.0;
56
 
<a name="line47"> 47: </a>      <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
57
 
<a name="line48"> 48: </a>        sum += (xx[i])*(PetscConj(xx[i]));
58
 
<a name="line49"> 49: </a>      }
59
 
<a name="line50"> 50: </a>      *z = sqrt(PetscRealPart(sum));
60
 
<a name="line51"> 51: </a>    }
61
 
<a name="line52"> 52: </a><font color="#A020F0">#endif</font>
62
 
<a name="line53"> 53: </a><font color="#A020F0">#else</font>
63
 
<a name="line54"> 54: </a>    *z = BLnrm2_(&amp;n,xx,&amp;one);
64
 
<a name="line55"> 55: </a><font color="#A020F0">#endif</font>
65
 
<a name="line56"> 56: </a>    VecRestoreArrayFast(xin,&amp;xx);
66
 
<a name="line57"> 57: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(2*n-1);
67
 
<a name="line58"> 58: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_INFINITY) {
68
 
<a name="line59"> 59: </a>    int          i;
69
 
<a name="line60"> 60: </a>    PetscReal    max = 0.0,tmp;
70
 
 
71
 
<a name="line62"> 62: </a>    VecGetArrayFast(xin,&amp;xx);
72
 
<a name="line63"> 63: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
73
 
<a name="line64"> 64: </a>      <font color="#4169E1">if</font> ((tmp = PetscAbsScalar(*xx)) &gt; max) max = tmp;
74
 
<a name="line65"> 65: </a>      <font color="#B22222">/* check special case of tmp == NaN */</font>
75
 
<a name="line66"> 66: </a>      <font color="#4169E1">if</font> (tmp != tmp) {max = tmp; <font color="#4169E1">break</font>;}
76
 
<a name="line67"> 67: </a>      xx++;
77
 
<a name="line68"> 68: </a>    }
78
 
<a name="line69"> 69: </a>    VecRestoreArrayFast(xin,&amp;xx);
79
 
<a name="line70"> 70: </a>    *z   = max;
80
 
<a name="line71"> 71: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_1) {
81
 
<a name="line72"> 72: </a>    VecGetArrayFast(xin,&amp;xx);
82
 
<a name="line73"> 73: </a>    *z = BLasum_(&amp;n,xx,&amp;one);
83
 
<a name="line74"> 74: </a>    VecRestoreArrayFast(xin,&amp;xx);
84
 
<a name="line75"> 75: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(n-1);
85
 
<a name="line76"> 76: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_1_AND_2) {
86
 
<a name="line77"> 77: </a>    VecNorm_Seq(xin,NORM_1,z);
87
 
<a name="line78"> 78: </a>    VecNorm_Seq(xin,NORM_2,z+1);
88
 
<a name="line79"> 79: </a>  }
89
 
<a name="line80"> 80: </a>  <font color="#4169E1">return</font>(0);
90
 
<a name="line81"> 81: </a>}
91
 
 
92
 
<a name="line83"> 83: </a> #include <A href="../../../../include/petscviewer.h.html">petscviewer.h</A>
93
 
<a name="line84"> 84: </a> #include <A href="../../../../include/petscsys.h.html">petscsys.h</A>
94
 
 
95
 
<a name="line86"> 86: </a><strong><font color="#4169E1"><a name="VecView_Seq_File"></a>int VecView_Seq_File(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
96
 
<a name="line87"> 87: </a>{
97
 
<a name="line88"> 88: </a>  Vec_Seq           *x = (Vec_Seq *)xin-&gt;data;
98
 
<a name="line89"> 89: </a>  int               i,n = xin-&gt;n,ierr;
99
 
<a name="line90"> 90: </a>  char              *name;
100
 
<a name="line91"> 91: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFormat.html#PetscViewerFormat">PetscViewerFormat</A> format;
101
 
 
102
 
<a name="line94"> 94: </a>  PetscViewerGetFormat(viewer,&amp;format);
103
 
<a name="line95"> 95: </a>  <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_MATLAB) {
104
 
<a name="line96"> 96: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectGetName.html#PetscObjectGetName">PetscObjectGetName</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)xin,&amp;name);
105
 
<a name="line97"> 97: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%s = [n"</font>,name);
106
 
<a name="line98"> 98: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
107
 
<a name="line99"> 99: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
108
 
<a name="line100">100: </a>      <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &gt; 0.0) {
109
 
<a name="line101">101: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e + %18.16ein"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
110
 
<a name="line102">102: </a>      } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &lt; 0.0) {
111
 
<a name="line103">103: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e - %18.16ein"</font>,PetscRealPart(x-&gt;array[i]),-PetscImaginaryPart(x-&gt;array[i]));
112
 
<a name="line104">104: </a>      } <font color="#4169E1">else</font> {
113
 
<a name="line105">105: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16en"</font>,PetscRealPart(x-&gt;array[i]));
114
 
<a name="line106">106: </a>      }
115
 
<a name="line107">107: </a><font color="#A020F0">#else</font>
116
 
<a name="line108">108: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16en"</font>,x-&gt;array[i]);
117
 
<a name="line109">109: </a><font color="#A020F0">#endif</font>
118
 
<a name="line110">110: </a>    }
119
 
<a name="line111">111: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"];n"</font>);
120
 
<a name="line112">112: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_SYMMODU) {
121
 
<a name="line113">113: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
122
 
<a name="line114">114: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
123
 
<a name="line115">115: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e %18.16en"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
 
20
<a name="line10"> 10: </a><font color="#A020F0">#if defined(PETSC_HAVE_PNETCDF)</font>
 
21
<a name="line11"> 11: </a>EXTERN_C_BEGIN
 
22
<a name="line12"> 12: </a><font color="#A020F0">#include </font><font color="#666666">"pnetcdf.h"</font><font color="#A020F0"></font>
 
23
<a name="line13"> 13: </a>EXTERN_C_END
 
24
<a name="line14"> 14: </a><font color="#A020F0">#endif</font>
 
25
<a name="line15"> 15: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
26
<a name="line16"> 16: </a><strong><font color="#4169E1">EXTERN int <A href="../../../../docs/manualpages/Viewer/PetscViewerAMSGetAMSComm.html#PetscViewerAMSGetAMSComm">PetscViewerAMSGetAMSComm</A>(<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A>,AMS_Comm *)</font></strong>;
 
27
<a name="line17"> 17: </a><font color="#A020F0">#endif</font>
 
28
 
 
29
<a name="line21"> 21: </a><strong><font color="#4169E1"><a name="VecNorm_Seq"></a>int VecNorm_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Vec/NormType.html#NormType">NormType</A> type,<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>* z)</font></strong>
 
30
<a name="line22"> 22: </a>{
 
31
<a name="line23"> 23: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx;
 
32
<a name="line24"> 24: </a>  int         n=xin-&gt;n,ierr,one = 1;
 
33
 
 
34
<a name="line27"> 27: </a>  <font color="#4169E1">if</font> (type == NORM_2 || type == NORM_FROBENIUS) {
 
35
<a name="line28"> 28: </a>    <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(xin,&amp;xx);
 
36
<a name="line29"> 29: </a>    <font color="#B22222">/*</font>
 
37
<a name="line30"> 30: </a><font color="#B22222">      This is because the Fortran BLAS 1 Norm is very slow! </font>
 
38
<a name="line31"> 31: </a><font color="#B22222">    */</font>
 
39
<a name="line32"> 32: </a><font color="#A020F0">#if defined(PETSC_HAVE_SLOW_NRM2)</font>
 
40
<a name="line33"> 33: </a><font color="#A020F0">#if defined(PETSC_USE_FORTRAN_KERNEL_NORM)</font>
 
41
<a name="line34"> 34: </a>    fortrannormsqr_(xx,&amp;n,z);
 
42
<a name="line35"> 35: </a>    *z = sqrt(*z);
 
43
<a name="line36"> 36: </a><font color="#A020F0">#elif defined(PETSC_USE_UNROLLED_NORM)</font>
 
44
<a name="line37"> 37: </a>    {
 
45
<a name="line38"> 38: </a>    <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A> work = 0.0;
 
46
<a name="line39"> 39: </a>    <font color="#4169E1">switch</font> (n &amp; 0x3) {
 
47
<a name="line40"> 40: </a>      <font color="#4169E1">case</font> 3: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++;
 
48
<a name="line41"> 41: </a>      <font color="#4169E1">case</font> 2: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++;
 
49
<a name="line42"> 42: </a>      <font color="#4169E1">case</font> 1: work += PetscRealPart(xx[0]*PetscConj(xx[0])); xx++; n -= 4;
 
50
<a name="line43"> 43: </a>    }
 
51
<a name="line44"> 44: </a>    <font color="#4169E1">while</font> (n&gt;0) {
 
52
<a name="line45"> 45: </a>      work += PetscRealPart(xx[0]*PetscConj(xx[0])+xx[1]*PetscConj(xx[1])+
 
53
<a name="line46"> 46: </a>                        xx[2]*PetscConj(xx[2])+xx[3]*PetscConj(xx[3]));
 
54
<a name="line47"> 47: </a>      xx += 4; n -= 4;
 
55
<a name="line48"> 48: </a>    }
 
56
<a name="line49"> 49: </a>    *z = sqrt(work);}
 
57
<a name="line50"> 50: </a><font color="#A020F0">#else</font>
 
58
<a name="line51"> 51: </a>    {
 
59
<a name="line52"> 52: </a>      int         i;
 
60
<a name="line53"> 53: </a>      <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> sum=0.0;
 
61
<a name="line54"> 54: </a>      <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
62
<a name="line55"> 55: </a>        sum += (xx[i])*(PetscConj(xx[i]));
 
63
<a name="line56"> 56: </a>      }
 
64
<a name="line57"> 57: </a>      *z = sqrt(PetscRealPart(sum));
 
65
<a name="line58"> 58: </a>    }
 
66
<a name="line59"> 59: </a><font color="#A020F0">#endif</font>
 
67
<a name="line60"> 60: </a><font color="#A020F0">#else</font>
 
68
<a name="line61"> 61: </a>    *z = BLnrm2_(&amp;n,xx,&amp;one);
 
69
<a name="line62"> 62: </a><font color="#A020F0">#endif</font>
 
70
<a name="line63"> 63: </a>    <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(xin,&amp;xx);
 
71
<a name="line64"> 64: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(2*n-1);
 
72
<a name="line65"> 65: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_INFINITY) {
 
73
<a name="line66"> 66: </a>    int          i;
 
74
<a name="line67"> 67: </a>    <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>    max = 0.0,tmp;
 
75
 
 
76
<a name="line69"> 69: </a>    <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(xin,&amp;xx);
 
77
<a name="line70"> 70: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
78
<a name="line71"> 71: </a>      <font color="#4169E1">if</font> ((tmp = PetscAbsScalar(*xx)) &gt; max) max = tmp;
 
79
<a name="line72"> 72: </a>      <font color="#B22222">/* check special case of tmp == NaN */</font>
 
80
<a name="line73"> 73: </a>      <font color="#4169E1">if</font> (tmp != tmp) {max = tmp; <font color="#4169E1">break</font>;}
 
81
<a name="line74"> 74: </a>      xx++;
 
82
<a name="line75"> 75: </a>    }
 
83
<a name="line76"> 76: </a>    <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(xin,&amp;xx);
 
84
<a name="line77"> 77: </a>    *z   = max;
 
85
<a name="line78"> 78: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_1) {
 
86
<a name="line79"> 79: </a>    <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(xin,&amp;xx);
 
87
<a name="line80"> 80: </a>    *z = BLasum_(&amp;n,xx,&amp;one);
 
88
<a name="line81"> 81: </a>    <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(xin,&amp;xx);
 
89
<a name="line82"> 82: </a>    <A href="../../../../docs/manualpages/Profiling/PetscLogFlops.html#PetscLogFlops">PetscLogFlops</A>(n-1);
 
90
<a name="line83"> 83: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (type == NORM_1_AND_2) {
 
91
<a name="line84"> 84: </a>    VecNorm_Seq(xin,NORM_1,z);
 
92
<a name="line85"> 85: </a>    VecNorm_Seq(xin,NORM_2,z+1);
 
93
<a name="line86"> 86: </a>  }
 
94
<a name="line87"> 87: </a>  <font color="#4169E1">return</font>(0);
 
95
<a name="line88"> 88: </a>}
 
96
 
 
97
<a name="line90"> 90: </a> #include <A href="../../../../include/petscviewer.h.html">petscviewer.h</A>
 
98
<a name="line91"> 91: </a> #include <A href="../../../../include/petscsys.h.html">petscsys.h</A>
 
99
 
 
100
<a name="line95"> 95: </a><strong><font color="#4169E1"><a name="VecView_Seq_File"></a>int VecView_Seq_File(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
 
101
<a name="line96"> 96: </a>{
 
102
<a name="line97"> 97: </a>  Vec_Seq           *x = (Vec_Seq *)xin-&gt;data;
 
103
<a name="line98"> 98: </a>  int               i,n = xin-&gt;n,ierr;
 
104
<a name="line99"> 99: </a>  char              *name;
 
105
<a name="line100">100: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFormat.html#PetscViewerFormat">PetscViewerFormat</A> format;
 
106
 
 
107
<a name="line103">103: </a>  PetscViewerGetFormat(viewer,&amp;format);
 
108
<a name="line104">104: </a>  <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_MATLAB) {
 
109
<a name="line105">105: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectGetName.html#PetscObjectGetName">PetscObjectGetName</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)xin,&amp;name);
 
110
<a name="line106">106: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%s = [\n"</font>,name);
 
111
<a name="line107">107: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
112
<a name="line108">108: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
 
113
<a name="line109">109: </a>      <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &gt; 0.0) {
 
114
<a name="line110">110: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e + %18.16ei\n"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
 
115
<a name="line111">111: </a>      } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &lt; 0.0) {
 
116
<a name="line112">112: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e - %18.16ei\n"</font>,PetscRealPart(x-&gt;array[i]),-PetscImaginaryPart(x-&gt;array[i]));
 
117
<a name="line113">113: </a>      } <font color="#4169E1">else</font> {
 
118
<a name="line114">114: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e\n"</font>,PetscRealPart(x-&gt;array[i]));
 
119
<a name="line115">115: </a>      }
124
120
<a name="line116">116: </a><font color="#A020F0">#else</font>
125
 
<a name="line117">117: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16en"</font>,x-&gt;array[i]);
 
121
<a name="line117">117: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e\n"</font>,x-&gt;array[i]);
126
122
<a name="line118">118: </a><font color="#A020F0">#endif</font>
127
123
<a name="line119">119: </a>    }
128
 
<a name="line120">120: </a>  } <font color="#4169E1">else</font> {
129
 
<a name="line121">121: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
130
 
<a name="line122">122: </a>      <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_INDEX) {
131
 
<a name="line123">123: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%d: "</font>,i);
132
 
<a name="line124">124: </a>      }
133
 
<a name="line125">125: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
134
 
<a name="line126">126: </a>      <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &gt; 0.0) {
135
 
<a name="line127">127: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g + %g in"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
136
 
<a name="line128">128: </a>      } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &lt; 0.0) {
137
 
<a name="line129">129: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g - %g in"</font>,PetscRealPart(x-&gt;array[i]),-PetscImaginaryPart(x-&gt;array[i]));
138
 
<a name="line130">130: </a>      } <font color="#4169E1">else</font> {
139
 
<a name="line131">131: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%gn"</font>,PetscRealPart(x-&gt;array[i]));
140
 
<a name="line132">132: </a>      }
141
 
<a name="line133">133: </a><font color="#A020F0">#else</font>
142
 
<a name="line134">134: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%gn"</font>,x-&gt;array[i]);
143
 
<a name="line135">135: </a><font color="#A020F0">#endif</font>
144
 
<a name="line136">136: </a>    }
145
 
<a name="line137">137: </a>  }
146
 
<a name="line138">138: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFlush.html#PetscViewerFlush">PetscViewerFlush</A>(viewer);
147
 
<a name="line139">139: </a>  <font color="#4169E1">return</font>(0);
148
 
<a name="line140">140: </a>}
149
 
 
150
 
<a name="line142">142: </a><strong><font color="#4169E1"><a name="VecView_Seq_Draw_LG"></a>static int VecView_Seq_Draw_LG(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> v)</font></strong>
151
 
<a name="line143">143: </a>{
152
 
<a name="line144">144: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
153
 
<a name="line145">145: </a>  int         i,n = xin-&gt;n,ierr;
154
 
<a name="line146">146: </a>  <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>   win;
155
 
<a name="line147">147: </a>  PetscReal   *xx;
156
 
<a name="line148">148: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLG.html#PetscDrawLG">PetscDrawLG</A> lg;
157
 
 
158
 
<a name="line151">151: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDrawLG.html#PetscViewerDrawGetDrawLG">PetscViewerDrawGetDrawLG</A>(v,0,&amp;lg);
159
 
<a name="line152">152: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGGetDraw.html#PetscDrawLGGetDraw">PetscDrawLGGetDraw</A>(lg,&amp;win);
160
 
<a name="line153">153: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawCheckResizedWindow.html#PetscDrawCheckResizedWindow">PetscDrawCheckResizedWindow</A>(win);
161
 
<a name="line154">154: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGReset.html#PetscDrawLGReset">PetscDrawLGReset</A>(lg);
162
 
<a name="line155">155: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((n+1)*<font color="#4169E1">sizeof</font>(PetscReal),&amp;xx);
163
 
<a name="line156">156: </a>  <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
164
 
<a name="line157">157: </a>    xx[i] = (PetscReal) i;
165
 
<a name="line158">158: </a>  }
166
 
<a name="line159">159: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
167
 
<a name="line160">160: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGAddPoints.html#PetscDrawLGAddPoints">PetscDrawLGAddPoints</A>(lg,n,&amp;xx,&amp;x-&gt;array);
168
 
<a name="line161">161: </a><font color="#A020F0">#else </font>
169
 
<a name="line162">162: </a>  {
170
 
<a name="line163">163: </a>    PetscReal *yy;
171
 
<a name="line164">164: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((n+1)*<font color="#4169E1">sizeof</font>(PetscReal),&amp;yy);
172
 
<a name="line165">165: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
173
 
<a name="line166">166: </a>      yy[i] = PetscRealPart(x-&gt;array[i]);
174
 
<a name="line167">167: </a>    }
175
 
<a name="line168">168: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLGAddPoints.html#PetscDrawLGAddPoints">PetscDrawLGAddPoints</A>(lg,n,&amp;xx,&amp;yy);
176
 
<a name="line169">169: </a>    <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(yy);
177
 
<a name="line170">170: </a>  }
178
 
<a name="line171">171: </a><font color="#A020F0">#endif</font>
179
 
<a name="line172">172: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(xx);
180
 
<a name="line173">173: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGDraw.html#PetscDrawLGDraw">PetscDrawLGDraw</A>(lg);
181
 
<a name="line174">174: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(win);
182
 
<a name="line175">175: </a>  <font color="#4169E1">return</font>(0);
183
 
<a name="line176">176: </a>}
184
 
 
185
 
<a name="line178">178: </a><strong><font color="#4169E1"><a name="VecView_Seq_Draw"></a>static int VecView_Seq_Draw(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> v)</font></strong>
186
 
<a name="line179">179: </a>{
187
 
<a name="line180">180: </a>  int               ierr;
188
 
<a name="line181">181: </a>  <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>         draw;
189
 
<a name="line182">182: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>        isnull;
190
 
<a name="line183">183: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFormat.html#PetscViewerFormat">PetscViewerFormat</A> format;
191
 
 
192
 
<a name="line186">186: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDraw.html#PetscViewerDrawGetDraw">PetscViewerDrawGetDraw</A>(v,0,&amp;draw);
193
 
<a name="line187">187: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawIsNull.html#PetscDrawIsNull">PetscDrawIsNull</A>(draw,&amp;isnull); <font color="#4169E1">if</font> (isnull) <font color="#4169E1">return</font>(0);
194
 
<a name="line188">188: </a>
195
 
<a name="line189">189: </a>  PetscViewerGetFormat(v,&amp;format);
196
 
<a name="line190">190: </a>  <font color="#B22222">/*</font>
197
 
<a name="line191">191: </a><font color="#B22222">     Currently it only supports drawing to a line graph */</font>
198
 
<a name="line192">192: </a>  <font color="#4169E1">if</font> (format != PETSC_VIEWER_DRAW_LG) {
199
 
<a name="line193">193: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerPushFormat.html#PetscViewerPushFormat">PetscViewerPushFormat</A>(v,PETSC_VIEWER_DRAW_LG);
200
 
<a name="line194">194: </a>  }
201
 
<a name="line195">195: </a>  VecView_Seq_Draw_LG(xin,v);
202
 
<a name="line196">196: </a>  <font color="#4169E1">if</font> (format != PETSC_VIEWER_DRAW_LG) {
203
 
<a name="line197">197: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerPopFormat.html#PetscViewerPopFormat">PetscViewerPopFormat</A>(v);
204
 
<a name="line198">198: </a>  }
205
 
 
206
 
<a name="line200">200: </a>  <font color="#4169E1">return</font>(0);
207
 
<a name="line201">201: </a>}
208
 
 
209
 
<a name="line203">203: </a><strong><font color="#4169E1"><a name="VecView_Seq_Binary"></a>static int VecView_Seq_Binary(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
210
 
<a name="line204">204: </a>{
211
 
<a name="line205">205: </a>  Vec_Seq  *x = (Vec_Seq *)xin-&gt;data;
212
 
<a name="line206">206: </a>  int      ierr,fdes,n = xin-&gt;n,cookie=VEC_FILE_COOKIE;
213
 
<a name="line207">207: </a>  FILE     *file;
214
 
 
215
 
<a name="line210">210: </a>  ierr  = <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryGetDescriptor.html#PetscViewerBinaryGetDescriptor">PetscViewerBinaryGetDescriptor</A>(viewer,&amp;fdes);
216
 
<a name="line211">211: </a>  <font color="#B22222">/* Write vector header */</font>
217
 
<a name="line212">212: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,&amp;cookie,1,PETSC_INT,0);
218
 
<a name="line213">213: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,&amp;n,1,PETSC_INT,0);
219
 
 
220
 
<a name="line215">215: </a>  <font color="#B22222">/* Write vector contents */</font>
221
 
<a name="line216">216: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,x-&gt;array,n,PETSC_SCALAR,0);
222
 
 
223
 
<a name="line218">218: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryGetInfoPointer.html#PetscViewerBinaryGetInfoPointer">PetscViewerBinaryGetInfoPointer</A>(viewer,&amp;file);
224
 
<a name="line219">219: </a>  <font color="#4169E1">if</font> (file &amp;&amp; xin-&gt;bs &gt; 1) {
225
 
<a name="line220">220: </a>    fprintf(file,<font color="#666666">"-vecload_block_size %dn"</font>,xin-&gt;bs);
226
 
<a name="line221">221: </a>  }
227
 
<a name="line222">222: </a>  <font color="#4169E1">return</font>(0);
228
 
<a name="line223">223: </a>}
229
 
 
230
 
 
231
 
<a name="line226">226: </a><strong><font color="#4169E1"><a name="VecView_Seq"></a>int VecView_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
232
 
<a name="line227">227: </a>{
233
 
<a name="line228">228: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
234
 
<a name="line229">229: </a>  int         ierr;
235
 
<a name="line230">230: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>  isdraw,isascii,issocket,isbinary,ismathematica;
236
 
 
237
 
<a name="line233">233: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_DRAW,&amp;isdraw);
238
 
<a name="line234">234: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_ASCII,&amp;isascii);
239
 
<a name="line235">235: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_SOCKET,&amp;issocket);
240
 
<a name="line236">236: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_BINARY,&amp;isbinary);
241
 
<a name="line237">237: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_MATHEMATICA,&amp;ismathematica);
242
 
<a name="line238">238: </a>  <font color="#4169E1">if</font> (isdraw){
243
 
<a name="line239">239: </a>    VecView_Seq_Draw(xin,viewer);
244
 
<a name="line240">240: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isascii){
245
 
<a name="line241">241: </a>    VecView_Seq_File(xin,viewer);
246
 
<a name="line242">242: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (issocket) {
247
 
<a name="line243">243: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerSocketPutScalar.html#PetscViewerSocketPutScalar">PetscViewerSocketPutScalar</A>(viewer,xin-&gt;n,1,x-&gt;array);
248
 
<a name="line244">244: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isbinary) {
249
 
<a name="line245">245: </a>    VecView_Seq_Binary(xin,viewer);
250
 
<a name="line246">246: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ismathematica) {
251
 
<a name="line247">247: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerMathematicaPutVector.html#PetscViewerMathematicaPutVector">PetscViewerMathematicaPutVector</A>(viewer,xin);
252
 
<a name="line248">248: </a>  } <font color="#4169E1">else</font> {
253
 
<a name="line249">249: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Viewer type %s not supported by this vector object"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer)-&gt;type_name);
254
 
<a name="line250">250: </a>  }
255
 
<a name="line251">251: </a>  <font color="#4169E1">return</font>(0);
256
 
<a name="line252">252: </a>}
257
 
 
258
 
<a name="line254">254: </a><strong><font color="#4169E1"><a name="VecSetValues_Seq"></a>int VecSetValues_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,int ni,const int ix[],const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> y[],<A href="../../../../docs/manualpages/Sys/InsertMode.html#InsertMode">InsertMode</A> m)</font></strong>
259
 
<a name="line255">255: </a>{
260
 
<a name="line256">256: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
261
 
<a name="line257">257: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx = x-&gt;array;
262
 
<a name="line258">258: </a>  int         i;
263
 
 
264
 
<a name="line261">261: </a>  <font color="#4169E1">if</font> (m == INSERT_VALUES) {
265
 
<a name="line262">262: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
266
 
<a name="line263">263: </a>      <font color="#4169E1">if</font> (ix[i] &lt; 0) <font color="#4169E1">continue</font>;
267
 
<a name="line264">264: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
268
 
<a name="line265">265: </a>      <font color="#4169E1">if</font> (ix[i] &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,ix[i],xin-&gt;n);
269
 
<a name="line266">266: </a><font color="#A020F0">#endif</font>
270
 
<a name="line267">267: </a>      xx[ix[i]] = y[i];
271
 
<a name="line268">268: </a>    }
272
 
<a name="line269">269: </a>  } <font color="#4169E1">else</font> {
273
 
<a name="line270">270: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
274
 
<a name="line271">271: </a>      <font color="#4169E1">if</font> (ix[i] &lt; 0) <font color="#4169E1">continue</font>;
275
 
<a name="line272">272: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
276
 
<a name="line273">273: </a>      <font color="#4169E1">if</font> (ix[i] &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,ix[i],xin-&gt;n);
277
 
<a name="line274">274: </a><font color="#A020F0">#endif</font>
278
 
<a name="line275">275: </a>      xx[ix[i]] += y[i];
279
 
<a name="line276">276: </a>    }
280
 
<a name="line277">277: </a>  }
281
 
<a name="line278">278: </a>  <font color="#4169E1">return</font>(0);
282
 
<a name="line279">279: </a>}
283
 
 
284
 
<a name="line281">281: </a><strong><font color="#4169E1"><a name="VecSetValuesBlocked_Seq"></a>int VecSetValuesBlocked_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,int ni,const int ix[],const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> yin[],<A href="../../../../docs/manualpages/Sys/InsertMode.html#InsertMode">InsertMode</A> m)</font></strong>
285
 
<a name="line282">282: </a>{
286
 
<a name="line283">283: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
287
 
<a name="line284">284: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx = x-&gt;array,*y = (<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*)yin;
288
 
<a name="line285">285: </a>  int         i,bs = xin-&gt;bs,start,j;
289
 
 
290
 
<a name="line287">287: </a>  <font color="#B22222">/*</font>
291
 
<a name="line288">288: </a><font color="#B22222">       For optimization could treat bs = 2, 3, 4, 5 as special cases with loop unrolling</font>
292
 
<a name="line289">289: </a><font color="#B22222">  */</font>
293
 
<a name="line291">291: </a>  <font color="#4169E1">if</font> (m == INSERT_VALUES) {
294
 
<a name="line292">292: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
295
 
<a name="line293">293: </a>      start = bs*ix[i];
296
 
<a name="line294">294: </a>      <font color="#4169E1">if</font> (start &lt; 0) <font color="#4169E1">continue</font>;
297
 
<a name="line295">295: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
298
 
<a name="line296">296: </a>      <font color="#4169E1">if</font> (start &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,start,xin-&gt;n);
299
 
<a name="line297">297: </a><font color="#A020F0">#endif</font>
300
 
<a name="line298">298: </a>      <font color="#4169E1">for</font> (j=0; j&lt;bs; j++) {
301
 
<a name="line299">299: </a>        xx[start+j] = y[j];
302
 
<a name="line300">300: </a>      }
303
 
<a name="line301">301: </a>      y += bs;
304
 
<a name="line302">302: </a>    }
305
 
<a name="line303">303: </a>  } <font color="#4169E1">else</font> {
306
 
<a name="line304">304: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
307
 
<a name="line305">305: </a>      start = bs*ix[i];
308
 
<a name="line306">306: </a>      <font color="#4169E1">if</font> (start &lt; 0) <font color="#4169E1">continue</font>;
309
 
<a name="line307">307: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
310
 
<a name="line308">308: </a>      <font color="#4169E1">if</font> (start &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,start,xin-&gt;n);
311
 
<a name="line309">309: </a><font color="#A020F0">#endif</font>
312
 
<a name="line310">310: </a>      <font color="#4169E1">for</font> (j=0; j&lt;bs; j++) {
313
 
<a name="line311">311: </a>        xx[start+j] += y[j];
314
 
<a name="line312">312: </a>      }
315
 
<a name="line313">313: </a>      y += bs;
316
 
<a name="line314">314: </a>    }
317
 
<a name="line315">315: </a>  }
318
 
<a name="line316">316: </a>  <font color="#4169E1">return</font>(0);
319
 
<a name="line317">317: </a>}
320
 
 
321
 
 
322
 
<a name="line320">320: </a><strong><font color="#4169E1"><a name="VecDestroy_Seq"></a>int VecDestroy_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v)</font></strong>
323
 
<a name="line321">321: </a>{
324
 
<a name="line322">322: </a>  Vec_Seq *vs = (Vec_Seq*)v-&gt;data;
325
 
<a name="line323">323: </a>  int     ierr;
326
 
 
327
 
 
328
 
<a name="line327">327: </a>  <font color="#B22222">/* if memory was published with AMS then destroy it */</font>
329
 
<a name="line328">328: </a>  PetscObjectDepublish(v);
330
 
 
331
 
<a name="line330">330: </a><font color="#A020F0">#if defined(PETSC_USE_LOG)</font>
332
 
<a name="line331">331: </a>  PetscLogObjectState((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"Length=%d"</font>,v-&gt;n);
333
 
<a name="line332">332: </a><font color="#A020F0">#endif</font>
334
 
<a name="line333">333: </a>  <font color="#4169E1">if</font> (vs-&gt;array_allocated) {<A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(vs-&gt;array_allocated);}
335
 
<a name="line334">334: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(vs);
336
 
 
337
 
<a name="line336">336: </a>  <font color="#4169E1">return</font>(0);
338
 
<a name="line337">337: </a>}
339
 
 
340
 
<a name="line339">339: </a><strong><font color="#4169E1"><a name="VecPublish_Seq"></a>static int VecPublish_Seq(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A> obj)</font></strong>
341
 
<a name="line340">340: </a>{
342
 
<a name="line341">341: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
343
 
<a name="line342">342: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          v = (<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>) obj;
344
 
<a name="line343">343: </a>  Vec_Seq      *s = (Vec_Seq*)v-&gt;data;
345
 
<a name="line344">344: </a>  int          ierr,(*f)(AMS_Memory,char *,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>);
346
 
<a name="line345">345: </a><font color="#A020F0">#endif</font>
347
 
 
348
 
 
349
 
<a name="line349">349: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
350
 
<a name="line350">350: </a>  <font color="#B22222">/* if it is already published then return */</font>
351
 
<a name="line351">351: </a>  <font color="#4169E1">if</font> (v-&gt;amem &gt;=0) <font color="#4169E1">return</font>(0);
352
 
 
353
 
<a name="line353">353: </a>  <font color="#B22222">/* if array in vector was not allocated (for example PCSetUp_BJacobi_Singleblock()) then</font>
354
 
<a name="line354">354: </a><font color="#B22222">     cannot AMS publish the object*/</font>
355
 
<a name="line355">355: </a>  <font color="#4169E1">if</font> (!s-&gt;array) <font color="#4169E1">return</font>(0);
356
 
 
357
 
<a name="line357">357: </a>  PetscObjectPublishBaseBegin(obj);
358
 
<a name="line358">358: </a>  AMS_Memory_add_field((AMS_Memory)v-&gt;amem,<font color="#666666">"values"</font>,s-&gt;array,v-&gt;n,AMS_DOUBLE,AMS_READ,
359
 
<a name="line359">359: </a>                                AMS_DISTRIBUTED,AMS_REDUCT_UNDEF);
360
 
 
361
 
<a name="line361">361: </a>  <font color="#B22222">/* if the vector knows its "layout" let it set it*/</font>
362
 
<a name="line362">362: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectQueryFunction.html#PetscObjectQueryFunction">PetscObjectQueryFunction</A>(obj,<font color="#666666">"AMSSetFieldBlock_C"</font>,(void (**)(void))&amp;f);
363
 
<a name="line363">363: </a>  <font color="#4169E1">if</font> (f) {
364
 
<a name="line364">364: </a>    (*f)((AMS_Memory)v-&gt;amem,<font color="#666666">"values"</font>,v);
365
 
<a name="line365">365: </a>  }
366
 
<a name="line366">366: </a>  PetscObjectPublishBaseEnd(obj);
367
 
<a name="line367">367: </a><font color="#A020F0">#endif</font>
368
 
 
369
 
<a name="line369">369: </a>  <font color="#4169E1">return</font>(0);
370
 
<a name="line370">370: </a>}
371
 
 
372
 
<a name="line372">372: </a>static <font color="#4169E1">struct _VecOps</font> DvOps = {VecDuplicate_Seq,
373
 
<a name="line373">373: </a>            VecDuplicateVecs_Default,
374
 
<a name="line374">374: </a>            VecDestroyVecs_Default,
375
 
<a name="line375">375: </a>            VecDot_Seq,
376
 
<a name="line376">376: </a>            VecMDot_Seq,
377
 
<a name="line377">377: </a>            VecNorm_Seq,
378
 
<a name="line378">378: </a>            VecTDot_Seq,
379
 
<a name="line379">379: </a>            VecMTDot_Seq,
380
 
<a name="line380">380: </a>            VecScale_Seq,
381
 
<a name="line381">381: </a>            VecCopy_Seq,
382
 
<a name="line382">382: </a>            VecSet_Seq,
383
 
<a name="line383">383: </a>            VecSwap_Seq,
384
 
<a name="line384">384: </a>            VecAXPY_Seq,
385
 
<a name="line385">385: </a>            VecAXPBY_Seq,
386
 
<a name="line386">386: </a>            VecMAXPY_Seq,
387
 
<a name="line387">387: </a>            VecAYPX_Seq,
388
 
<a name="line388">388: </a>            VecWAXPY_Seq,
389
 
<a name="line389">389: </a>            VecPointwiseMult_Seq,
390
 
<a name="line390">390: </a>            VecPointwiseDivide_Seq,
391
 
<a name="line391">391: </a>            VecSetValues_Seq,0,0,
392
 
<a name="line392">392: </a>            VecGetArray_Seq,
393
 
<a name="line393">393: </a>            VecGetSize_Seq,
394
 
<a name="line394">394: </a>            VecGetSize_Seq,
395
 
<a name="line395">395: </a>            VecRestoreArray_Seq,
396
 
<a name="line396">396: </a>            VecMax_Seq,
397
 
<a name="line397">397: </a>            VecMin_Seq,
398
 
<a name="line398">398: </a>            VecSetRandom_Seq,0,
399
 
<a name="line399">399: </a>            VecSetValuesBlocked_Seq,
400
 
<a name="line400">400: </a>            VecDestroy_Seq,
401
 
<a name="line401">401: </a>            VecView_Seq,
402
 
<a name="line402">402: </a>            VecPlaceArray_Seq,
403
 
<a name="line403">403: </a>            VecReplaceArray_Seq,
404
 
<a name="line404">404: </a>            VecDot_Seq,
405
 
<a name="line405">405: </a>            VecTDot_Seq,
406
 
<a name="line406">406: </a>            VecNorm_Seq,
407
 
<a name="line407">407: </a>            VecLoadIntoVector_Default,
408
 
<a name="line408">408: </a>            VecReciprocal_Default,
409
 
<a name="line409">409: </a>            0, <font color="#B22222">/* VecViewNative */</font>
410
 
<a name="line410">410: </a>            VecConjugate_Seq,
411
 
<a name="line411">411: </a>            0,
412
 
<a name="line412">412: </a>            0,
413
 
<a name="line413">413: </a>            VecResetArray_Seq};
414
 
 
415
 
 
416
 
<a name="line416">416: </a><font color="#B22222">/*</font>
417
 
<a name="line417">417: </a><font color="#B22222">      This is called by VecCreate_Seq() (i.e. <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>()) and <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A>()</font>
418
 
<a name="line418">418: </a><font color="#B22222">*/</font>
419
 
<a name="line419">419: </a><strong><font color="#4169E1"><a name="VecCreate_Seq_Private"></a>static int VecCreate_Seq_Private(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> array[])</font></strong>
420
 
<a name="line420">420: </a>{
421
 
<a name="line421">421: </a>  Vec_Seq *s;
422
 
<a name="line422">422: </a>  int     ierr;
423
 
 
424
 
<a name="line425">425: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(v-&gt;ops,&amp;DvOps,<font color="#4169E1">sizeof</font>(DvOps));
425
 
<a name="line426">426: </a>  <A href="../../../../docs/manualpages/Sys/PetscNew.html#PetscNew">PetscNew</A>(Vec_Seq,&amp;s);
426
 
<a name="line427">427: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(s,<font color="#4169E1">sizeof</font>(Vec_Seq));
427
 
<a name="line428">428: </a>  v-&gt;data            = (void*)s;
428
 
<a name="line429">429: </a>  v-&gt;bops-&gt;publish   = VecPublish_Seq;
429
 
<a name="line430">430: </a>  v-&gt;n               = PetscMax(v-&gt;n,v-&gt;N);
430
 
<a name="line431">431: </a>  v-&gt;N               = PetscMax(v-&gt;n,v-&gt;N);
431
 
<a name="line432">432: </a>  v-&gt;bs              = -1;
432
 
<a name="line433">433: </a>  v-&gt;petscnative     = PETSC_TRUE;
433
 
<a name="line434">434: </a>  s-&gt;array           = (<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *)array;
434
 
<a name="line435">435: </a>  s-&gt;array_allocated = 0;
435
 
<a name="line436">436: </a>  <font color="#4169E1">if</font> (!v-&gt;map) {
436
 
<a name="line437">437: </a>    <A href="../../../../docs/manualpages/Vec/PetscMapCreateMPI.html#PetscMapCreateMPI">PetscMapCreateMPI</A>(v-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,v-&gt;n,v-&gt;N,&amp;v-&gt;map);
437
 
<a name="line438">438: </a>  }
438
 
<a name="line439">439: </a>  PetscObjectChangeTypeName((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,VECSEQ);
439
 
<a name="line440">440: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB_ENGINE) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
440
 
<a name="line441">441: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"PetscMatlabEnginePut_C"</font>,<font color="#666666">"VecMatlabEnginePut_Default"</font>,VecMatlabEnginePut_Default);
441
 
<a name="line442">442: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"PetscMatlabEngineGet_C"</font>,<font color="#666666">"VecMatlabEngineGet_Default"</font>,VecMatlabEngineGet_Default);
442
 
<a name="line443">443: </a><font color="#A020F0">#endif</font>
443
 
<a name="line444">444: </a>  PetscPublishAll(v);
444
 
<a name="line445">445: </a>  <font color="#4169E1">return</font>(0);
445
 
<a name="line446">446: </a>}
446
 
 
447
 
<a name="line448">448: </a><font color="#B22222">/*@C</font>
448
 
<a name="line449">449: </a><font color="#B22222">   <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A> - Creates a standard,sequential array-style vector,</font>
449
 
<a name="line450">450: </a><font color="#B22222">   where the user provides the array space to store the vector values.</font>
450
 
 
451
 
<a name="line452">452: </a><font color="#B22222">   Collective on MPI_Comm</font>
452
 
 
453
 
<a name="line454">454: </a><font color="#B22222">   Input Parameter:</font>
454
 
<a name="line455">455: </a><font color="#B22222">+  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - the communicator, should be PETSC_COMM_SELF</font>
455
 
<a name="line456">456: </a><font color="#B22222">.  n - the vector length </font>
456
 
<a name="line457">457: </a><font color="#B22222">-  array - memory where the vector elements are to be stored.</font>
457
 
 
458
 
<a name="line459">459: </a><font color="#B22222">   Output Parameter:</font>
459
 
<a name="line460">460: </a><font color="#B22222">.  V - the vector</font>
460
 
 
461
 
<a name="line462">462: </a><font color="#B22222">   Notes:</font>
462
 
<a name="line463">463: </a><font color="#B22222">   Use <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>() or <A href="../../../../docs/manualpages/Vec/VecDuplicateVecs.html#VecDuplicateVecs">VecDuplicateVecs</A>() to form additional vectors of the</font>
463
 
<a name="line464">464: </a><font color="#B22222">   same type as an existing vector.</font>
464
 
 
465
 
<a name="line466">466: </a><font color="#B22222">   If the user-provided array is PETSC_NULL, then <A href="../../../../docs/manualpages/Vec/VecPlaceArray.html#VecPlaceArray">VecPlaceArray</A>() can be used</font>
466
 
<a name="line467">467: </a><font color="#B22222">   at a later stage to SET the array for storing the vector values.</font>
467
 
 
468
 
<a name="line469">469: </a><font color="#B22222">   PETSc does NOT free the array when the vector is destroyed via <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>().</font>
469
 
<a name="line470">470: </a><font color="#B22222">   The user should not free the array until the vector is destroyed.</font>
470
 
 
471
 
<a name="line472">472: </a><font color="#B22222">   Level: intermediate</font>
472
 
 
473
 
<a name="line474">474: </a><font color="#B22222">   Concepts: vectors^creating with array</font>
474
 
 
475
 
<a name="line476">476: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/Vec/VecCreateMPIWithArray.html#VecCreateMPIWithArray">VecCreateMPIWithArray</A>(), <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(), <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(), <A href="../../../../docs/manualpages/Vec/VecDuplicateVecs.html#VecDuplicateVecs">VecDuplicateVecs</A>(), </font>
476
 
<a name="line477">477: </a><font color="#B22222">          <A href="../../../../docs/manualpages/Vec/VecCreateGhost.html#VecCreateGhost">VecCreateGhost</A>(), <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>(), <A href="../../../../docs/manualpages/Vec/VecPlaceArray.html#VecPlaceArray">VecPlaceArray</A>()</font>
477
 
<a name="line478">478: </a><font color="#B22222">@*/</font>
478
 
<a name="line479">479: </a><strong><font color="#4169E1"><a name="VecCreateSeqWithArray"></a>int <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A>(MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,int n,const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> array[],<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> *V)</font></strong>
479
 
<a name="line480">480: </a>{
480
 
<a name="line481">481: </a>  int  ierr;
481
 
 
482
 
<a name="line484">484: </a>  <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,V);
483
 
<a name="line485">485: </a>  <A href="../../../../docs/manualpages/Vec/VecSetSizes.html#VecSetSizes">VecSetSizes</A>(*V,n,n);
484
 
<a name="line486">486: </a>  VecCreate_Seq_Private(*V,array);
485
 
<a name="line487">487: </a>  <font color="#4169E1">return</font>(0);
486
 
<a name="line488">488: </a>}
487
 
 
488
 
<a name="line490">490: </a><strong><font color="#4169E1"><a name="VecCreate_Seq"></a>EXTERN_C_BEGIN</font></strong>
489
 
<a name="line491">491: </a><strong><font color="#4169E1">int VecCreate_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> V)</font></strong>
490
 
<a name="line492">492: </a>{
491
 
<a name="line493">493: </a>  Vec_Seq      *s;
492
 
<a name="line494">494: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  *array;
493
 
<a name="line495">495: </a>  int          ierr,n = PetscMax(V-&gt;n,V-&gt;N);
494
 
 
495
 
<a name="line498">498: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((n+1)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;array);
496
 
<a name="line499">499: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(array,n*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
497
 
<a name="line500">500: </a>  VecCreate_Seq_Private(V,array);
498
 
<a name="line501">501: </a>  s    = (Vec_Seq*)V-&gt;data;
499
 
<a name="line502">502: </a>  s-&gt;array_allocated = array;
500
 
<a name="line503">503: </a>  <A href="../../../../docs/manualpages/Vec/VecSetSerializeType.html#VecSetSerializeType">VecSetSerializeType</A>(V,VEC_SER_SEQ_BINARY);
501
 
<a name="line504">504: </a>  <font color="#4169E1">return</font>(0);
502
 
<a name="line505">505: </a>}
503
 
 
504
 
<a name="line507">507: </a><strong><font color="#4169E1"><a name="VecSerialize_Seq"></a>int VecSerialize_Seq(MPI_Comm <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>, <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> *vec, <A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer, <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A> store)</font></strong>
505
 
<a name="line508">508: </a>{
506
 
<a name="line509">509: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          v;
507
 
<a name="line510">510: </a>  Vec_Seq     *x;
508
 
<a name="line511">511: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *array;
509
 
<a name="line512">512: </a>  int          fd;
510
 
<a name="line513">513: </a>  int          vars;
511
 
<a name="line514">514: </a>  int          ierr;
512
 
 
513
 
<a name="line517">517: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryGetDescriptor.html#PetscViewerBinaryGetDescriptor">PetscViewerBinaryGetDescriptor</A>(viewer, &amp;fd);
514
 
<a name="line518">518: </a>  <font color="#4169E1">if</font> (store) {
515
 
<a name="line519">519: </a>    v    = *vec;
516
 
<a name="line520">520: </a>    x    = (Vec_Seq *) v-&gt;data;
517
 
<a name="line521">521: </a>    <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fd, &amp;v-&gt;n,     1,    PETSC_INT,    0);
518
 
<a name="line522">522: </a>    <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fd,  x-&gt;array, v-&gt;n, PETSC_SCALAR, 0);
519
 
<a name="line523">523: </a>  } <font color="#4169E1">else</font> {
520
 
<a name="line524">524: </a>    <A href="../../../../docs/manualpages/Sys/PetscBinaryRead.html#PetscBinaryRead">PetscBinaryRead</A>(fd, &amp;vars,  1,    PETSC_INT);
521
 
<a name="line525">525: </a>    <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>, &amp;v);
522
 
<a name="line526">526: </a>    <A href="../../../../docs/manualpages/Vec/VecSetSizes.html#VecSetSizes">VecSetSizes</A>(v, vars, vars);
523
 
<a name="line527">527: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>(vars * <font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>), &amp;array);
524
 
<a name="line528">528: </a>    <A href="../../../../docs/manualpages/Sys/PetscBinaryRead.html#PetscBinaryRead">PetscBinaryRead</A>(fd,  array, vars, PETSC_SCALAR);
525
 
<a name="line529">529: </a>    VecCreate_Seq_Private(v, array);
526
 
<a name="line530">530: </a>    ((Vec_Seq *) v-&gt;data)-&gt;array_allocated = array;
527
 
 
528
 
<a name="line532">532: </a>    <A href="../../../../docs/manualpages/Vec/VecAssemblyBegin.html#VecAssemblyBegin">VecAssemblyBegin</A>(v);
529
 
<a name="line533">533: </a>    <A href="../../../../docs/manualpages/Vec/VecAssemblyEnd.html#VecAssemblyEnd">VecAssemblyEnd</A>(v);
530
 
<a name="line534">534: </a>    *vec = v;
531
 
<a name="line535">535: </a>  }
532
 
 
533
 
<a name="line537">537: </a>  <font color="#4169E1">return</font>(0);
534
 
<a name="line538">538: </a>}
535
 
<a name="line539">539: </a><strong><font color="#4169E1"><a name="VecDuplicate_Seq"></a>EXTERN_C_END</font></strong>
536
 
 
537
 
 
538
 
<a name="line542">542: </a><strong><font color="#4169E1">int VecDuplicate_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> win,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> *V)</font></strong>
539
 
<a name="line543">543: </a>{
540
 
<a name="line544">544: </a>  int     ierr;
541
 
 
542
 
<a name="line547">547: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>(win-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,win-&gt;n,V);
543
 
<a name="line548">548: </a>  <font color="#4169E1">if</font> (win-&gt;mapping) {
544
 
<a name="line549">549: </a>    (*V)-&gt;mapping = win-&gt;mapping;
545
 
<a name="line550">550: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectReference.html#PetscObjectReference">PetscObjectReference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)win-&gt;mapping);
546
 
<a name="line551">551: </a>  }
547
 
<a name="line552">552: </a>  <font color="#4169E1">if</font> (win-&gt;bmapping) {
548
 
<a name="line553">553: </a>    (*V)-&gt;bmapping = win-&gt;bmapping;
549
 
<a name="line554">554: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectReference.html#PetscObjectReference">PetscObjectReference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)win-&gt;bmapping);
550
 
<a name="line555">555: </a>  }
551
 
<a name="line556">556: </a>  (*V)-&gt;bs = win-&gt;bs;
552
 
<a name="line557">557: </a>  PetscOListDuplicate(win-&gt;olist,&amp;(*V)-&gt;olist);
553
 
<a name="line558">558: </a>  <A href="../../../../docs/manualpages/Sys/PetscFListDuplicate.html#PetscFListDuplicate">PetscFListDuplicate</A>(win-&gt;qlist,&amp;(*V)-&gt;qlist);
554
 
<a name="line559">559: </a>  <font color="#4169E1">return</font>(0);
555
 
<a name="line560">560: </a>}
 
124
<a name="line120">120: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"];\n"</font>);
 
125
<a name="line121">121: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_SYMMODU) {
 
126
<a name="line122">122: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
127
<a name="line123">123: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
 
128
<a name="line124">124: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e %18.16e\n"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
 
129
<a name="line125">125: </a><font color="#A020F0">#else</font>
 
130
<a name="line126">126: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%18.16e\n"</font>,x-&gt;array[i]);
 
131
<a name="line127">127: </a><font color="#A020F0">#endif</font>
 
132
<a name="line128">128: </a>    }
 
133
<a name="line129">129: </a>  } <font color="#4169E1">else</font> {
 
134
<a name="line130">130: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
135
<a name="line131">131: </a>      <font color="#4169E1">if</font> (format == PETSC_VIEWER_ASCII_INDEX) {
 
136
<a name="line132">132: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%d: "</font>,i);
 
137
<a name="line133">133: </a>      }
 
138
<a name="line134">134: </a><font color="#A020F0">#if defined(PETSC_USE_COMPLEX)</font>
 
139
<a name="line135">135: </a>      <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &gt; 0.0) {
 
140
<a name="line136">136: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g + %g i\n"</font>,PetscRealPart(x-&gt;array[i]),PetscImaginaryPart(x-&gt;array[i]));
 
141
<a name="line137">137: </a>      } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (PetscImaginaryPart(x-&gt;array[i]) &lt; 0.0) {
 
142
<a name="line138">138: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g - %g i\n"</font>,PetscRealPart(x-&gt;array[i]),-PetscImaginaryPart(x-&gt;array[i]));
 
143
<a name="line139">139: </a>      } <font color="#4169E1">else</font> {
 
144
<a name="line140">140: </a>        <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g\n"</font>,PetscRealPart(x-&gt;array[i]));
 
145
<a name="line141">141: </a>      }
 
146
<a name="line142">142: </a><font color="#A020F0">#else</font>
 
147
<a name="line143">143: </a>      <A href="../../../../docs/manualpages/Viewer/PetscViewerASCIIPrintf.html#PetscViewerASCIIPrintf">PetscViewerASCIIPrintf</A>(viewer,<font color="#666666">"%g\n"</font>,x-&gt;array[i]);
 
148
<a name="line144">144: </a><font color="#A020F0">#endif</font>
 
149
<a name="line145">145: </a>    }
 
150
<a name="line146">146: </a>  }
 
151
<a name="line147">147: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFlush.html#PetscViewerFlush">PetscViewerFlush</A>(viewer);
 
152
<a name="line148">148: </a>  <font color="#4169E1">return</font>(0);
 
153
<a name="line149">149: </a>}
 
154
 
 
155
<a name="line153">153: </a><strong><font color="#4169E1"><a name="VecView_Seq_Draw_LG"></a>static int VecView_Seq_Draw_LG(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> v)</font></strong>
 
156
<a name="line154">154: </a>{
 
157
<a name="line155">155: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
 
158
<a name="line156">156: </a>  int         i,n = xin-&gt;n,ierr;
 
159
<a name="line157">157: </a>  <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>   win;
 
160
<a name="line158">158: </a>  <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>   *xx;
 
161
<a name="line159">159: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLG.html#PetscDrawLG">PetscDrawLG</A> lg;
 
162
 
 
163
<a name="line162">162: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDrawLG.html#PetscViewerDrawGetDrawLG">PetscViewerDrawGetDrawLG</A>(v,0,&amp;lg);
 
164
<a name="line163">163: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGGetDraw.html#PetscDrawLGGetDraw">PetscDrawLGGetDraw</A>(lg,&amp;win);
 
165
<a name="line164">164: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawCheckResizedWindow.html#PetscDrawCheckResizedWindow">PetscDrawCheckResizedWindow</A>(win);
 
166
<a name="line165">165: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGReset.html#PetscDrawLGReset">PetscDrawLGReset</A>(lg);
 
167
<a name="line166">166: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((n+1)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>),&amp;xx);
 
168
<a name="line167">167: </a>  <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
169
<a name="line168">168: </a>    xx[i] = (<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>) i;
 
170
<a name="line169">169: </a>  }
 
171
<a name="line170">170: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
 
172
<a name="line171">171: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGAddPoints.html#PetscDrawLGAddPoints">PetscDrawLGAddPoints</A>(lg,n,&amp;xx,&amp;x-&gt;array);
 
173
<a name="line172">172: </a><font color="#A020F0">#else </font>
 
174
<a name="line173">173: </a>  {
 
175
<a name="line174">174: </a>    <A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A> *yy;
 
176
<a name="line175">175: </a>    <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>((n+1)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscReal.html#PetscReal">PetscReal</A>),&amp;yy);
 
177
<a name="line176">176: </a>    <font color="#4169E1">for</font> (i=0; i&lt;n; i++) {
 
178
<a name="line177">177: </a>      yy[i] = PetscRealPart(x-&gt;array[i]);
 
179
<a name="line178">178: </a>    }
 
180
<a name="line179">179: </a>    <A href="../../../../docs/manualpages/Draw/PetscDrawLGAddPoints.html#PetscDrawLGAddPoints">PetscDrawLGAddPoints</A>(lg,n,&amp;xx,&amp;yy);
 
181
<a name="line180">180: </a>    <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(yy);
 
182
<a name="line181">181: </a>  }
 
183
<a name="line182">182: </a><font color="#A020F0">#endif</font>
 
184
<a name="line183">183: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(xx);
 
185
<a name="line184">184: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawLGDraw.html#PetscDrawLGDraw">PetscDrawLGDraw</A>(lg);
 
186
<a name="line185">185: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawSynchronizedFlush.html#PetscDrawSynchronizedFlush">PetscDrawSynchronizedFlush</A>(win);
 
187
<a name="line186">186: </a>  <font color="#4169E1">return</font>(0);
 
188
<a name="line187">187: </a>}
 
189
 
 
190
<a name="line191">191: </a><strong><font color="#4169E1"><a name="VecView_Seq_Draw"></a>static int VecView_Seq_Draw(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> v)</font></strong>
 
191
<a name="line192">192: </a>{
 
192
<a name="line193">193: </a>  int               ierr;
 
193
<a name="line194">194: </a>  <A href="../../../../docs/manualpages/Draw/PetscDraw.html#PetscDraw">PetscDraw</A>         draw;
 
194
<a name="line195">195: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>        isnull;
 
195
<a name="line196">196: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerFormat.html#PetscViewerFormat">PetscViewerFormat</A> format;
 
196
 
 
197
<a name="line199">199: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerDrawGetDraw.html#PetscViewerDrawGetDraw">PetscViewerDrawGetDraw</A>(v,0,&amp;draw);
 
198
<a name="line200">200: </a>  <A href="../../../../docs/manualpages/Draw/PetscDrawIsNull.html#PetscDrawIsNull">PetscDrawIsNull</A>(draw,&amp;isnull); <font color="#4169E1">if</font> (isnull) <font color="#4169E1">return</font>(0);
 
199
<a name="line201">201: </a>
 
200
<a name="line202">202: </a>  PetscViewerGetFormat(v,&amp;format);
 
201
<a name="line203">203: </a>  <font color="#B22222">/*</font>
 
202
<a name="line204">204: </a><font color="#B22222">     Currently it only supports drawing to a line graph */</font>
 
203
<a name="line205">205: </a>  <font color="#4169E1">if</font> (format != PETSC_VIEWER_DRAW_LG) {
 
204
<a name="line206">206: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerPushFormat.html#PetscViewerPushFormat">PetscViewerPushFormat</A>(v,PETSC_VIEWER_DRAW_LG);
 
205
<a name="line207">207: </a>  }
 
206
<a name="line208">208: </a>  VecView_Seq_Draw_LG(xin,v);
 
207
<a name="line209">209: </a>  <font color="#4169E1">if</font> (format != PETSC_VIEWER_DRAW_LG) {
 
208
<a name="line210">210: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerPopFormat.html#PetscViewerPopFormat">PetscViewerPopFormat</A>(v);
 
209
<a name="line211">211: </a>  }
 
210
 
 
211
<a name="line213">213: </a>  <font color="#4169E1">return</font>(0);
 
212
<a name="line214">214: </a>}
 
213
 
 
214
<a name="line218">218: </a><strong><font color="#4169E1"><a name="VecView_Seq_Binary"></a>static int VecView_Seq_Binary(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
 
215
<a name="line219">219: </a>{
 
216
<a name="line220">220: </a>  Vec_Seq  *x = (Vec_Seq *)xin-&gt;data;
 
217
<a name="line221">221: </a>  int      ierr,fdes,n = xin-&gt;n,cookie=VEC_FILE_COOKIE;
 
218
<a name="line222">222: </a>  FILE     *file;
 
219
 
 
220
<a name="line225">225: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryGetDescriptor.html#PetscViewerBinaryGetDescriptor">PetscViewerBinaryGetDescriptor</A>(viewer,&amp;fdes);
 
221
<a name="line226">226: </a>  <font color="#B22222">/* Write vector header */</font>
 
222
<a name="line227">227: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,&amp;cookie,1,PETSC_INT,0);
 
223
<a name="line228">228: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,&amp;n,1,PETSC_INT,0);
 
224
 
 
225
<a name="line230">230: </a>  <font color="#B22222">/* Write vector contents */</font>
 
226
<a name="line231">231: </a>  <A href="../../../../docs/manualpages/Sys/PetscBinaryWrite.html#PetscBinaryWrite">PetscBinaryWrite</A>(fdes,x-&gt;array,n,PETSC_SCALAR,0);
 
227
 
 
228
<a name="line233">233: </a>  <A href="../../../../docs/manualpages/Viewer/PetscViewerBinaryGetInfoPointer.html#PetscViewerBinaryGetInfoPointer">PetscViewerBinaryGetInfoPointer</A>(viewer,&amp;file);
 
229
<a name="line234">234: </a>  <font color="#4169E1">if</font> (file &amp;&amp; xin-&gt;bs &gt; 1) {
 
230
<a name="line235">235: </a>    <font color="#4169E1">if</font> (xin-&gt;prefix) {
 
231
<a name="line236">236: </a>      fprintf(file,<font color="#666666">"-%s_vecload_block_size %d\n"</font>,xin-&gt;prefix,xin-&gt;bs);
 
232
<a name="line237">237: </a>    } <font color="#4169E1">else</font> {
 
233
<a name="line238">238: </a>      fprintf(file,<font color="#666666">"-vecload_block_size %d\n"</font>,xin-&gt;bs);
 
234
<a name="line239">239: </a>    }
 
235
<a name="line240">240: </a>  }
 
236
<a name="line241">241: </a>  <font color="#4169E1">return</font>(0);
 
237
<a name="line242">242: </a>}
 
238
 
 
239
<a name="line244">244: </a><font color="#A020F0">#if defined(PETSC_HAVE_PNETCDF)</font>
 
240
<a name="line247">247: </a><strong><font color="#4169E1"><a name="VecView_Seq_Netcdf"></a>int VecView_Seq_Netcdf(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> v)</font></strong>
 
241
<a name="line248">248: </a>{
 
242
<a name="line249">249: </a>  int         n = xin-&gt;n,ierr,ncid,xdim,xdim_num=1,xin_id,xstart=0;
 
243
<a name="line250">250: </a>  <A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A>    <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> = xin-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>;
 
244
<a name="line251">251: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *values,*xarray;
 
245
 
 
246
<a name="line254">254: </a><font color="#A020F0">#if !defined(PETSC_USE_COMPLEX)</font>
 
247
<a name="line255">255: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(xin,&amp;xarray);
 
248
<a name="line256">256: </a>  PetscViewerNetcdfGetID(v,&amp;ncid);
 
249
<a name="line257">257: </a>  <font color="#4169E1">if</font> (ncid &lt; 0) <A href="../../../../docs/manualpages/Sys/SETERRQ.html#SETERRQ">SETERRQ</A>(1,<font color="#666666">"First call PetscViewerNetcdfOpen to create NetCDF dataset"</font>);
 
250
<a name="line258">258: </a>  <font color="#B22222">/* define dimensions */</font>
 
251
<a name="line259">259: </a>  ncmpi_def_dim(ncid,<font color="#666666">"PETSc_Vector_Global_Size"</font>,n,&amp;xdim);
 
252
<a name="line260">260: </a>  <font color="#B22222">/* define variables */</font>
 
253
<a name="line261">261: </a>  ncmpi_def_var(ncid,<font color="#666666">"PETSc_Vector_Seq"</font>,NC_DOUBLE,xdim_num,&amp;xdim,&amp;xin_id);
 
254
<a name="line262">262: </a>  <font color="#B22222">/* leave define mode */</font>
 
255
<a name="line263">263: </a>  ncmpi_enddef(ncid);
 
256
<a name="line264">264: </a>  <font color="#B22222">/* store the vector */</font>
 
257
<a name="line265">265: </a>  <A href="../../../../docs/manualpages/Vec/VecGetOwnershipRange.html#VecGetOwnershipRange">VecGetOwnershipRange</A>(xin,&amp;xstart,<A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
 
258
<a name="line266">266: </a>  ncmpi_put_vara_double_all(ncid,xin_id,(const size_t*)&amp;xstart,(const size_t*)&amp;n,xarray);
 
259
<a name="line267">267: </a><font color="#A020F0">#else </font>
 
260
<a name="line268">268: </a>    <A href="../../../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(<A href="../../../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,<font color="#666666">"NetCDF viewer not supported for complex numbers\n"</font>);
 
261
<a name="line269">269: </a><font color="#A020F0">#endif</font>
 
262
<a name="line270">270: </a>  <font color="#4169E1">return</font>(0);
 
263
<a name="line271">271: </a>}
 
264
<a name="line272">272: </a><font color="#A020F0">#endif</font>
 
265
 
 
266
<a name="line274">274: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
267
<a name="line275">275: </a><font color="#A020F0">#include </font><font color="#666666">"mat.h"</font><font color="#A020F0">   </font><font color="#B22222">/* Matlab include file */</font><font color="#A020F0"></font>
 
268
<a name="line276">276: </a>EXTERN_C_BEGIN
 
269
<a name="line279">279: </a><strong><font color="#4169E1"><a name="VecView_Seq_Matlab"></a>int VecView_Seq_Matlab(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> vec,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
 
270
<a name="line280">280: </a>{
 
271
<a name="line281">281: </a>  int         ierr,n;
 
272
<a name="line282">282: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *array;
 
273
<a name="line283">283: </a>
 
274
<a name="line285">285: </a>  <A href="../../../../docs/manualpages/Vec/VecGetArray.html#VecGetArray">VecGetArray</A>(vec,&amp;array);
 
275
<a name="line286">286: </a>  <A href="../../../../docs/manualpages/Vec/VecGetLocalSize.html#VecGetLocalSize">VecGetLocalSize</A>(vec,&amp;n);
 
276
<a name="line287">287: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectName.html#PetscObjectName">PetscObjectName</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)vec);
 
277
<a name="line288">288: </a>  <A href="../../../../docs/manualpages/Sys/PetscViewerMatlabPutArray.html#PetscViewerMatlabPutArray">PetscViewerMatlabPutArray</A>(viewer,n,1,array,vec-&gt;name);
 
278
<a name="line289">289: </a>  <A href="../../../../docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray">VecRestoreArray</A>(vec,&amp;array);
 
279
<a name="line290">290: </a>  <font color="#4169E1">return</font>(0);
 
280
<a name="line291">291: </a>}
 
281
<a name="line292">292: </a>EXTERN_C_END
 
282
<a name="line293">293: </a><font color="#A020F0">#endif</font>
 
283
 
 
284
<a name="line297">297: </a><strong><font color="#4169E1"><a name="VecView_Seq"></a>int VecView_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A> viewer)</font></strong>
 
285
<a name="line298">298: </a>{
 
286
<a name="line299">299: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
 
287
<a name="line300">300: </a>  int         ierr;
 
288
<a name="line301">301: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>  isdraw,isascii,issocket,isbinary,ismathematica;
 
289
<a name="line302">302: </a><font color="#A020F0">#if defined(PETSC_HAVE_PNETCDF)</font>
 
290
<a name="line303">303: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>  isnetcdf;
 
291
<a name="line304">304: </a><font color="#A020F0">#endif</font>
 
292
<a name="line305">305: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
293
<a name="line306">306: </a>  <A href="../../../../docs/manualpages/Sys/PetscTruth.html#PetscTruth">PetscTruth</A>  ismatlab;
 
294
<a name="line307">307: </a><font color="#A020F0">#endif</font>
 
295
 
 
296
<a name="line310">310: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_DRAW,&amp;isdraw);
 
297
<a name="line311">311: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_ASCII,&amp;isascii);
 
298
<a name="line312">312: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_SOCKET,&amp;issocket);
 
299
<a name="line313">313: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_BINARY,&amp;isbinary);
 
300
<a name="line314">314: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_MATHEMATICA,&amp;ismathematica);
 
301
<a name="line315">315: </a><font color="#A020F0">#if defined(PETSC_HAVE_PNETCDF)</font>
 
302
<a name="line316">316: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,PETSC_VIEWER_NETCDF,&amp;isnetcdf);
 
303
<a name="line317">317: </a><font color="#A020F0">#endif</font>
 
304
<a name="line318">318: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
305
<a name="line319">319: </a>  <A href="../../../../docs/manualpages/Sys/PetscTypeCompare.html#PetscTypeCompare">PetscTypeCompare</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer,<A href="../../../../docs/manualpages/Sys/PETSC_VIEWER_MATLAB.html#PETSC_VIEWER_MATLAB">PETSC_VIEWER_MATLAB</A>,&amp;ismatlab);
 
306
<a name="line320">320: </a><font color="#A020F0">#endif</font>
 
307
 
 
308
<a name="line322">322: </a>  <font color="#4169E1">if</font> (isdraw){
 
309
<a name="line323">323: </a>    VecView_Seq_Draw(xin,viewer);
 
310
<a name="line324">324: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isascii){
 
311
<a name="line325">325: </a>    VecView_Seq_File(xin,viewer);
 
312
<a name="line326">326: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (issocket) {
 
313
<a name="line327">327: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerSocketPutScalar.html#PetscViewerSocketPutScalar">PetscViewerSocketPutScalar</A>(viewer,xin-&gt;n,1,x-&gt;array);
 
314
<a name="line328">328: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isbinary) {
 
315
<a name="line329">329: </a>    VecView_Seq_Binary(xin,viewer);
 
316
<a name="line330">330: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ismathematica) {
 
317
<a name="line331">331: </a>    <A href="../../../../docs/manualpages/Viewer/PetscViewerMathematicaPutVector.html#PetscViewerMathematicaPutVector">PetscViewerMathematicaPutVector</A>(viewer,xin);
 
318
<a name="line332">332: </a><font color="#A020F0">#if defined(PETSC_HAVE_PNETCDF)</font>
 
319
<a name="line333">333: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (isnetcdf) {
 
320
<a name="line334">334: </a>    VecView_Seq_Netcdf(xin,viewer);
 
321
<a name="line335">335: </a><font color="#A020F0">#endif</font>
 
322
<a name="line336">336: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
323
<a name="line337">337: </a>  } <font color="#4169E1">else</font> <font color="#4169E1">if</font> (ismatlab) {
 
324
<a name="line338">338: </a>    VecView_Seq_Matlab(xin,viewer);
 
325
<a name="line339">339: </a><font color="#A020F0">#endif</font>
 
326
<a name="line340">340: </a>  } <font color="#4169E1">else</font> {
 
327
<a name="line341">341: </a>    <A href="../../../../docs/manualpages/Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(1,<font color="#666666">"Viewer type %s not supported by this vector object"</font>,((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)viewer)-&gt;type_name);
 
328
<a name="line342">342: </a>  }
 
329
<a name="line343">343: </a>  <font color="#4169E1">return</font>(0);
 
330
<a name="line344">344: </a>}
 
331
 
 
332
<a name="line348">348: </a><strong><font color="#4169E1"><a name="VecSetValues_Seq"></a>int VecSetValues_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,int ni,const int ix[],const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> y[],<A href="../../../../docs/manualpages/Sys/InsertMode.html#InsertMode">InsertMode</A> m)</font></strong>
 
333
<a name="line349">349: </a>{
 
334
<a name="line350">350: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
 
335
<a name="line351">351: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx = x-&gt;array;
 
336
<a name="line352">352: </a>  int         i;
 
337
 
 
338
<a name="line355">355: </a>  <font color="#4169E1">if</font> (m == INSERT_VALUES) {
 
339
<a name="line356">356: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
 
340
<a name="line357">357: </a>      <font color="#4169E1">if</font> (ix[i] &lt; 0) <font color="#4169E1">continue</font>;
 
341
<a name="line358">358: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
 
342
<a name="line359">359: </a>      <font color="#4169E1">if</font> (ix[i] &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,ix[i],xin-&gt;n);
 
343
<a name="line360">360: </a><font color="#A020F0">#endif</font>
 
344
<a name="line361">361: </a>      xx[ix[i]] = y[i];
 
345
<a name="line362">362: </a>    }
 
346
<a name="line363">363: </a>  } <font color="#4169E1">else</font> {
 
347
<a name="line364">364: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
 
348
<a name="line365">365: </a>      <font color="#4169E1">if</font> (ix[i] &lt; 0) <font color="#4169E1">continue</font>;
 
349
<a name="line366">366: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
 
350
<a name="line367">367: </a>      <font color="#4169E1">if</font> (ix[i] &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,ix[i],xin-&gt;n);
 
351
<a name="line368">368: </a><font color="#A020F0">#endif</font>
 
352
<a name="line369">369: </a>      xx[ix[i]] += y[i];
 
353
<a name="line370">370: </a>    }
 
354
<a name="line371">371: </a>  }
 
355
<a name="line372">372: </a>  <font color="#4169E1">return</font>(0);
 
356
<a name="line373">373: </a>}
 
357
 
 
358
<a name="line377">377: </a><strong><font color="#4169E1"><a name="VecSetValuesBlocked_Seq"></a>int VecSetValuesBlocked_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> xin,int ni,const int ix[],const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> yin[],<A href="../../../../docs/manualpages/Sys/InsertMode.html#InsertMode">InsertMode</A> m)</font></strong>
 
359
<a name="line378">378: </a>{
 
360
<a name="line379">379: </a>  Vec_Seq     *x = (Vec_Seq *)xin-&gt;data;
 
361
<a name="line380">380: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *xx = x-&gt;array,*y = (<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>*)yin;
 
362
<a name="line381">381: </a>  int         i,bs = xin-&gt;bs,start,j;
 
363
 
 
364
<a name="line383">383: </a>  <font color="#B22222">/*</font>
 
365
<a name="line384">384: </a><font color="#B22222">       For optimization could treat bs = 2, 3, 4, 5 as special cases with loop unrolling</font>
 
366
<a name="line385">385: </a><font color="#B22222">  */</font>
 
367
<a name="line387">387: </a>  <font color="#4169E1">if</font> (m == INSERT_VALUES) {
 
368
<a name="line388">388: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
 
369
<a name="line389">389: </a>      start = bs*ix[i];
 
370
<a name="line390">390: </a>      <font color="#4169E1">if</font> (start &lt; 0) <font color="#4169E1">continue</font>;
 
371
<a name="line391">391: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
 
372
<a name="line392">392: </a>      <font color="#4169E1">if</font> (start &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,start,xin-&gt;n);
 
373
<a name="line393">393: </a><font color="#A020F0">#endif</font>
 
374
<a name="line394">394: </a>      <font color="#4169E1">for</font> (j=0; j&lt;bs; j++) {
 
375
<a name="line395">395: </a>        xx[start+j] = y[j];
 
376
<a name="line396">396: </a>      }
 
377
<a name="line397">397: </a>      y += bs;
 
378
<a name="line398">398: </a>    }
 
379
<a name="line399">399: </a>  } <font color="#4169E1">else</font> {
 
380
<a name="line400">400: </a>    <font color="#4169E1">for</font> (i=0; i&lt;ni; i++) {
 
381
<a name="line401">401: </a>      start = bs*ix[i];
 
382
<a name="line402">402: </a>      <font color="#4169E1">if</font> (start &lt; 0) <font color="#4169E1">continue</font>;
 
383
<a name="line403">403: </a><font color="#A020F0">#if defined(PETSC_USE_BOPT_g)</font>
 
384
<a name="line404">404: </a>      <font color="#4169E1">if</font> (start &gt;= xin-&gt;n) <A href="../../../../docs/manualpages/Sys/SETERRQ2.html#SETERRQ2">SETERRQ2</A>(PETSC_ERR_ARG_OUTOFRANGE,<font color="#666666">"Out of range index value %d maximum %d"</font>,start,xin-&gt;n);
 
385
<a name="line405">405: </a><font color="#A020F0">#endif</font>
 
386
<a name="line406">406: </a>      <font color="#4169E1">for</font> (j=0; j&lt;bs; j++) {
 
387
<a name="line407">407: </a>        xx[start+j] += y[j];
 
388
<a name="line408">408: </a>      }
 
389
<a name="line409">409: </a>      y += bs;
 
390
<a name="line410">410: </a>    }
 
391
<a name="line411">411: </a>  }
 
392
<a name="line412">412: </a>  <font color="#4169E1">return</font>(0);
 
393
<a name="line413">413: </a>}
 
394
 
 
395
 
 
396
<a name="line418">418: </a><strong><font color="#4169E1"><a name="VecDestroy_Seq"></a>int VecDestroy_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v)</font></strong>
 
397
<a name="line419">419: </a>{
 
398
<a name="line420">420: </a>  Vec_Seq *vs = (Vec_Seq*)v-&gt;data;
 
399
<a name="line421">421: </a>  int     ierr;
 
400
 
 
401
 
 
402
<a name="line425">425: </a>  <font color="#B22222">/* if memory was published with AMS then destroy it */</font>
 
403
<a name="line426">426: </a>  PetscObjectDepublish(v);
 
404
 
 
405
<a name="line428">428: </a><font color="#A020F0">#if defined(PETSC_USE_LOG)</font>
 
406
<a name="line429">429: </a>  PetscLogObjectState((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"Length=%d"</font>,v-&gt;n);
 
407
<a name="line430">430: </a><font color="#A020F0">#endif</font>
 
408
<a name="line431">431: </a>  <font color="#4169E1">if</font> (vs-&gt;array_allocated) {<A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(vs-&gt;array_allocated);}
 
409
<a name="line432">432: </a>  <A href="../../../../docs/manualpages/Sys/PetscFree.html#PetscFree">PetscFree</A>(vs);
 
410
 
 
411
<a name="line434">434: </a>  <font color="#4169E1">return</font>(0);
 
412
<a name="line435">435: </a>}
 
413
 
 
414
<a name="line439">439: </a><strong><font color="#4169E1"><a name="VecPublish_Seq"></a>static int VecPublish_Seq(<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A> obj)</font></strong>
 
415
<a name="line440">440: </a>{
 
416
<a name="line441">441: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
417
<a name="line442">442: </a>  <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>          v = (<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>) obj;
 
418
<a name="line443">443: </a>  Vec_Seq      *s = (Vec_Seq*)v-&gt;data;
 
419
<a name="line444">444: </a>  int          ierr,(*f)(AMS_Memory,char *,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>);
 
420
<a name="line445">445: </a><font color="#A020F0">#endif</font>
 
421
 
 
422
 
 
423
<a name="line449">449: </a><font color="#A020F0">#if defined(PETSC_HAVE_AMS)</font>
 
424
<a name="line450">450: </a>  <font color="#B22222">/* if it is already published then return */</font>
 
425
<a name="line451">451: </a>  <font color="#4169E1">if</font> (v-&gt;amem &gt;=0) <font color="#4169E1">return</font>(0);
 
426
 
 
427
<a name="line453">453: </a>  <font color="#B22222">/* if array in vector was not allocated (for example PCSetUp_BJacobi_Singleblock()) then</font>
 
428
<a name="line454">454: </a><font color="#B22222">     cannot AMS publish the object*/</font>
 
429
<a name="line455">455: </a>  <font color="#4169E1">if</font> (!s-&gt;array) <font color="#4169E1">return</font>(0);
 
430
 
 
431
<a name="line457">457: </a>  PetscObjectPublishBaseBegin(obj);
 
432
<a name="line458">458: </a>  AMS_Memory_add_field((AMS_Memory)v-&gt;amem,<font color="#666666">"values"</font>,s-&gt;array,v-&gt;n,AMS_DOUBLE,AMS_READ,
 
433
<a name="line459">459: </a>                                AMS_DISTRIBUTED,AMS_REDUCT_UNDEF);
 
434
 
 
435
<a name="line461">461: </a>  <font color="#B22222">/* if the vector knows its "layout" let it set it*/</font>
 
436
<a name="line462">462: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectQueryFunction.html#PetscObjectQueryFunction">PetscObjectQueryFunction</A>(obj,<font color="#666666">"AMSSetFieldBlock_C"</font>,(void (**)(void))&amp;f);
 
437
<a name="line463">463: </a>  <font color="#4169E1">if</font> (f) {
 
438
<a name="line464">464: </a>    (*f)((AMS_Memory)v-&gt;amem,<font color="#666666">"values"</font>,v);
 
439
<a name="line465">465: </a>  }
 
440
<a name="line466">466: </a>  PetscObjectPublishBaseEnd(obj);
 
441
<a name="line467">467: </a><font color="#A020F0">#endif</font>
 
442
 
 
443
<a name="line469">469: </a>  <font color="#4169E1">return</font>(0);
 
444
<a name="line470">470: </a>}
 
445
 
 
446
<a name="line472">472: </a><strong><font color="#4169E1">extern int VecLoad_Binary(<A href="../../../../docs/manualpages/Viewer/PetscViewer.html#PetscViewer">PetscViewer</A>,const <A href="../../../../docs/manualpages/Vec/VecType.html#VecType">VecType</A>, <A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A>*)</font></strong>;
 
447
 
 
448
<a name="line474">474: </a>static <font color="#4169E1">struct _VecOps</font> DvOps = {VecDuplicate_Seq,
 
449
<a name="line475">475: </a>            VecDuplicateVecs_Default,
 
450
<a name="line476">476: </a>            VecDestroyVecs_Default,
 
451
<a name="line477">477: </a>            VecDot_Seq,
 
452
<a name="line478">478: </a>            VecMDot_Seq,
 
453
<a name="line479">479: </a>            VecNorm_Seq,
 
454
<a name="line480">480: </a>            VecTDot_Seq,
 
455
<a name="line481">481: </a>            VecMTDot_Seq,
 
456
<a name="line482">482: </a>            VecScale_Seq,
 
457
<a name="line483">483: </a>            VecCopy_Seq,
 
458
<a name="line484">484: </a>            VecSet_Seq,
 
459
<a name="line485">485: </a>            VecSwap_Seq,
 
460
<a name="line486">486: </a>            VecAXPY_Seq,
 
461
<a name="line487">487: </a>            VecAXPBY_Seq,
 
462
<a name="line488">488: </a>            VecMAXPY_Seq,
 
463
<a name="line489">489: </a>            VecAYPX_Seq,
 
464
<a name="line490">490: </a>            VecWAXPY_Seq,
 
465
<a name="line491">491: </a>            VecPointwiseMult_Seq,
 
466
<a name="line492">492: </a>            VecPointwiseDivide_Seq,
 
467
<a name="line493">493: </a>            VecSetValues_Seq,0,0,
 
468
<a name="line494">494: </a>            VecGetArray_Seq,
 
469
<a name="line495">495: </a>            VecGetSize_Seq,
 
470
<a name="line496">496: </a>            VecGetSize_Seq,
 
471
<a name="line497">497: </a>            VecRestoreArray_Seq,
 
472
<a name="line498">498: </a>            VecMax_Seq,
 
473
<a name="line499">499: </a>            VecMin_Seq,
 
474
<a name="line500">500: </a>            VecSetRandom_Seq,0,
 
475
<a name="line501">501: </a>            VecSetValuesBlocked_Seq,
 
476
<a name="line502">502: </a>            VecDestroy_Seq,
 
477
<a name="line503">503: </a>            VecView_Seq,
 
478
<a name="line504">504: </a>            VecPlaceArray_Seq,
 
479
<a name="line505">505: </a>            VecReplaceArray_Seq,
 
480
<a name="line506">506: </a>            VecDot_Seq,
 
481
<a name="line507">507: </a>            VecTDot_Seq,
 
482
<a name="line508">508: </a>            VecNorm_Seq,
 
483
<a name="line509">509: </a>            VecLoadIntoVector_Default,
 
484
<a name="line510">510: </a>            VecReciprocal_Default,
 
485
<a name="line511">511: </a>            0, <font color="#B22222">/* VecViewNative */</font>
 
486
<a name="line512">512: </a>            VecConjugate_Seq,
 
487
<a name="line513">513: </a>            0,
 
488
<a name="line514">514: </a>            0,
 
489
<a name="line515">515: </a>            VecResetArray_Seq,
 
490
<a name="line516">516: </a>            0,
 
491
<a name="line517">517: </a>            VecMaxPointwiseDivide_Seq,
 
492
<a name="line518">518: </a>            VecLoad_Binary};
 
493
 
 
494
 
 
495
<a name="line521">521: </a><font color="#B22222">/*</font>
 
496
<a name="line522">522: </a><font color="#B22222">      This is called by VecCreate_Seq() (i.e. <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>()) and <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A>()</font>
 
497
<a name="line523">523: </a><font color="#B22222">*/</font>
 
498
<a name="line526">526: </a><strong><font color="#4169E1"><a name="VecCreate_Seq_Private"></a>static int VecCreate_Seq_Private(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> v,const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> array[])</font></strong>
 
499
<a name="line527">527: </a>{
 
500
<a name="line528">528: </a>  Vec_Seq *s;
 
501
<a name="line529">529: </a>  int     ierr;
 
502
 
 
503
<a name="line532">532: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(v-&gt;ops,&amp;DvOps,<font color="#4169E1">sizeof</font>(DvOps));
 
504
<a name="line533">533: </a>  <A href="../../../../docs/manualpages/Sys/PetscNew.html#PetscNew">PetscNew</A>(Vec_Seq,&amp;s);
 
505
<a name="line534">534: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(s,<font color="#4169E1">sizeof</font>(Vec_Seq));
 
506
<a name="line535">535: </a>  v-&gt;data            = (void*)s;
 
507
<a name="line536">536: </a>  v-&gt;bops-&gt;publish   = VecPublish_Seq;
 
508
<a name="line537">537: </a>  v-&gt;n               = <A href="../../../../docs/manualpages/Sys/PetscMax.html#PetscMax">PetscMax</A>(v-&gt;n,v-&gt;N);
 
509
<a name="line538">538: </a>  v-&gt;N               = <A href="../../../../docs/manualpages/Sys/PetscMax.html#PetscMax">PetscMax</A>(v-&gt;n,v-&gt;N);
 
510
<a name="line539">539: </a>  v-&gt;petscnative     = PETSC_TRUE;
 
511
<a name="line540">540: </a>  s-&gt;array           = (<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> *)array;
 
512
<a name="line541">541: </a>  s-&gt;array_allocated = 0;
 
513
<a name="line542">542: </a>  <font color="#4169E1">if</font> (!v-&gt;map) {
 
514
<a name="line543">543: </a>    <A href="../../../../docs/manualpages/Vec/PetscMapCreateMPI.html#PetscMapCreateMPI">PetscMapCreateMPI</A>(v-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,v-&gt;n,v-&gt;N,&amp;v-&gt;map);
 
515
<a name="line544">544: </a>  }
 
516
<a name="line545">545: </a>  PetscObjectChangeTypeName((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,VECSEQ);
 
517
<a name="line546">546: </a><font color="#A020F0">#if defined(PETSC_HAVE_MATLAB) &amp;&amp; !defined(PETSC_USE_COMPLEX) &amp;&amp; !defined(PETSC_USE_SINGLE)</font>
 
518
<a name="line547">547: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"PetscMatlabEnginePut_C"</font>,<font color="#666666">"VecMatlabEnginePut_Default"</font>,VecMatlabEnginePut_Default);
 
519
<a name="line548">548: </a>  <A href="../../../../docs/manualpages/Sys/PetscObjectComposeFunctionDynamic.html#PetscObjectComposeFunctionDynamic">PetscObjectComposeFunctionDynamic</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)v,<font color="#666666">"PetscMatlabEngineGet_C"</font>,<font color="#666666">"VecMatlabEngineGet_Default"</font>,VecMatlabEngineGet_Default);
 
520
<a name="line549">549: </a><font color="#A020F0">#endif</font>
 
521
<a name="line550">550: </a>  PetscPublishAll(v);
 
522
<a name="line551">551: </a>  <font color="#4169E1">return</font>(0);
 
523
<a name="line552">552: </a>}
 
524
 
 
525
<a name="line556">556: </a><font color="#B22222">/*@C</font>
 
526
<a name="line557">557: </a><font color="#B22222">   <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A> - Creates a standard,sequential array-style vector,</font>
 
527
<a name="line558">558: </a><font color="#B22222">   where the user provides the array space to store the vector values.</font>
 
528
 
 
529
<a name="line560">560: </a><font color="#B22222">   Collective on <A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A></font>
 
530
 
 
531
<a name="line562">562: </a><font color="#B22222">   Input Parameter:</font>
 
532
<a name="line563">563: </a><font color="#B22222">+  <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A> - the communicator, should be <A href="../../../../docs/manualpages/Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A></font>
 
533
<a name="line564">564: </a><font color="#B22222">.  n - the vector length </font>
 
534
<a name="line565">565: </a><font color="#B22222">-  array - memory where the vector elements are to be stored.</font>
 
535
 
 
536
<a name="line567">567: </a><font color="#B22222">   Output Parameter:</font>
 
537
<a name="line568">568: </a><font color="#B22222">.  V - the vector</font>
 
538
 
 
539
<a name="line570">570: </a><font color="#B22222">   Notes:</font>
 
540
<a name="line571">571: </a><font color="#B22222">   Use <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>() or <A href="../../../../docs/manualpages/Vec/VecDuplicateVecs.html#VecDuplicateVecs">VecDuplicateVecs</A>() to form additional vectors of the</font>
 
541
<a name="line572">572: </a><font color="#B22222">   same type as an existing vector.</font>
 
542
 
 
543
<a name="line574">574: </a><font color="#B22222">   If the user-provided array is <A href="../../../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>, then <A href="../../../../docs/manualpages/Vec/VecPlaceArray.html#VecPlaceArray">VecPlaceArray</A>() can be used</font>
 
544
<a name="line575">575: </a><font color="#B22222">   at a later stage to SET the array for storing the vector values.</font>
 
545
 
 
546
<a name="line577">577: </a><font color="#B22222">   PETSc does NOT free the array when the vector is destroyed via <A href="../../../../docs/manualpages/Vec/VecDestroy.html#VecDestroy">VecDestroy</A>().</font>
 
547
<a name="line578">578: </a><font color="#B22222">   The user should not free the array until the vector is destroyed.</font>
 
548
 
 
549
<a name="line580">580: </a><font color="#B22222">   Level: intermediate</font>
 
550
 
 
551
<a name="line582">582: </a><font color="#B22222">   Concepts: vectors^creating with array</font>
 
552
 
 
553
<a name="line584">584: </a><font color="#B22222">.seealso: <A href="../../../../docs/manualpages/Vec/VecCreateMPIWithArray.html#VecCreateMPIWithArray">VecCreateMPIWithArray</A>(), <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(), <A href="../../../../docs/manualpages/Vec/VecDuplicate.html#VecDuplicate">VecDuplicate</A>(), <A href="../../../../docs/manualpages/Vec/VecDuplicateVecs.html#VecDuplicateVecs">VecDuplicateVecs</A>(), </font>
 
554
<a name="line585">585: </a><font color="#B22222">          <A href="../../../../docs/manualpages/Vec/VecCreateGhost.html#VecCreateGhost">VecCreateGhost</A>(), <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>(), <A href="../../../../docs/manualpages/Vec/VecPlaceArray.html#VecPlaceArray">VecPlaceArray</A>()</font>
 
555
<a name="line586">586: </a><font color="#B22222">@*/</font>
 
556
<a name="line587">587: </a><strong><font color="#4169E1"><a name="VecCreateSeqWithArray"></a>int <A href="../../../../docs/manualpages/Vec/VecCreateSeqWithArray.html#VecCreateSeqWithArray">VecCreateSeqWithArray</A>(<A href="../../../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> <A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,int n,const <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A> array[],<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> *V)</font></strong>
 
557
<a name="line588">588: </a>{
 
558
<a name="line589">589: </a>  int  ierr;
 
559
 
 
560
<a name="line592">592: </a>  <A href="../../../../docs/manualpages/Vec/VecCreate.html#VecCreate">VecCreate</A>(<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,V);
 
561
<a name="line593">593: </a>  <A href="../../../../docs/manualpages/Vec/VecSetSizes.html#VecSetSizes">VecSetSizes</A>(*V,n,n);
 
562
<a name="line594">594: </a>  VecCreate_Seq_Private(*V,array);
 
563
<a name="line595">595: </a>  <font color="#4169E1">return</font>(0);
 
564
<a name="line596">596: </a>}
 
565
 
 
566
<a name="line598">598: </a>EXTERN_C_BEGIN
 
567
<a name="line601">601: </a><strong><font color="#4169E1"><a name="VecCreate_Seq"></a>int VecCreate_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> V)</font></strong>
 
568
<a name="line602">602: </a>{
 
569
<a name="line603">603: </a>  Vec_Seq      *s;
 
570
<a name="line604">604: </a>  <A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>  *array;
 
571
<a name="line605">605: </a>  int          ierr,n = <A href="../../../../docs/manualpages/Sys/PetscMax.html#PetscMax">PetscMax</A>(V-&gt;n,V-&gt;N);
 
572
 
 
573
<a name="line608">608: </a>  <A href="../../../../docs/manualpages/Sys/PetscMalloc.html#PetscMalloc">PetscMalloc</A>( ( n &gt; 0 ? n : 1)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>),&amp;array);
 
574
<a name="line609">609: </a>  <A href="../../../../docs/manualpages/Sys/PetscMemzero.html#PetscMemzero">PetscMemzero</A>(array,( n &gt; 0 ? n : 1)*<font color="#4169E1">sizeof</font>(<A href="../../../../docs/manualpages/Sys/PetscScalar.html#PetscScalar">PetscScalar</A>));
 
575
<a name="line610">610: </a>  VecCreate_Seq_Private(V,array);
 
576
<a name="line611">611: </a>  s    = (Vec_Seq*)V-&gt;data;
 
577
<a name="line612">612: </a>  s-&gt;array_allocated = array;
 
578
<a name="line613">613: </a>  <font color="#4169E1">return</font>(0);
 
579
<a name="line614">614: </a>}
 
580
<a name="line615">615: </a>EXTERN_C_END
 
581
 
 
582
 
 
583
<a name="line620">620: </a><strong><font color="#4169E1"><a name="VecDuplicate_Seq"></a>int VecDuplicate_Seq(<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> win,<A href="../../../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> *V)</font></strong>
 
584
<a name="line621">621: </a>{
 
585
<a name="line622">622: </a>  int     ierr;
 
586
 
 
587
<a name="line625">625: </a>  <A href="../../../../docs/manualpages/Vec/VecCreateSeq.html#VecCreateSeq">VecCreateSeq</A>(win-&gt;<A href="../../../../docs/manualpages/Sys/comm.html#comm">comm</A>,win-&gt;n,V);
 
588
<a name="line626">626: </a>  <font color="#4169E1">if</font> (win-&gt;mapping) {
 
589
<a name="line627">627: </a>    (*V)-&gt;mapping = win-&gt;mapping;
 
590
<a name="line628">628: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectReference.html#PetscObjectReference">PetscObjectReference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)win-&gt;mapping);
 
591
<a name="line629">629: </a>  }
 
592
<a name="line630">630: </a>  <font color="#4169E1">if</font> (win-&gt;bmapping) {
 
593
<a name="line631">631: </a>    (*V)-&gt;bmapping = win-&gt;bmapping;
 
594
<a name="line632">632: </a>    <A href="../../../../docs/manualpages/Sys/PetscObjectReference.html#PetscObjectReference">PetscObjectReference</A>((<A href="../../../../docs/manualpages/Sys/PetscObject.html#PetscObject">PetscObject</A>)win-&gt;bmapping);
 
595
<a name="line633">633: </a>  }
 
596
<a name="line634">634: </a>  (*V)-&gt;bs = win-&gt;bs;
 
597
<a name="line635">635: </a>  PetscOListDuplicate(win-&gt;olist,&amp;(*V)-&gt;olist);
 
598
<a name="line636">636: </a>  <A href="../../../../docs/manualpages/Sys/PetscFListDuplicate.html#PetscFListDuplicate">PetscFListDuplicate</A>(win-&gt;qlist,&amp;(*V)-&gt;qlist);
 
599
<a name="line637">637: </a>  <font color="#4169E1">return</font>(0);
 
600
<a name="line638">638: </a>}
556
601
 
557
602
</pre>
558
603
</body>