Mercurial > fem-fenics-eugenio
annotate src/Function.cc @ 270:f4d6ae912a08 default tip
Correct typos in the doc-strings
author | Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> |
---|---|
date | Thu, 14 Aug 2014 17:55:32 +0200 |
parents | 61830a4f9ab9 |
children |
rev | line source |
---|---|
151 | 1 /* |
2 Copyright (C) 2013 Marco Vassallo <gedeone-octave@users.sourceforge.net> | |
3 | |
4 This program is free software; you can redistribute it and/or modify it under | |
5 the terms of the GNU General Public License as published by the Free Software | |
6 Foundation; either version 3 of the License, or (at your option) any later | |
7 version. | |
8 | |
9 This program is distributed in the hope that it will be useful, but WITHOUT | |
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | |
12 details. | |
13 | |
14 You should have received a copy of the GNU General Public License along with | |
15 this program; if not, see <http://www.gnu.org/licenses/>. | |
16 */ | |
17 | |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
18 #include <dolfin.h> |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
19 #include "functionspace.h" |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
20 #include "function.h" |
253
5e9b5bbdc56b
Support both DOLFIN 1.3.0 and 1.4.0
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
240
diff
changeset
|
21 #include "dolfin_compat.h" |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
22 #ifdef LATEST_DOLFIN |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
23 #include <boost/mpi.hpp> |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
24 #include <boost/serialization/vector.hpp> |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
25 #include <boost/serialization/utility.hpp> |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
26 #endif |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
27 |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
28 void copy_vector (Array <double> const &, SHARED_PTR <dolfin::GenericVector>); |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
29 |
78
670a5d91c397
Rename the function visible from the user accordingly to dolfin interface.
gedeone-octave <marcovass89@hotmail.it>
parents:
61
diff
changeset
|
30 DEFUN_DLD (Function, args, , "-*- texinfo -*-\n\ |
48
c73bca616ca7
Add texinfo description for the DLD functions
gedeone-octave <marco.vassallo@outlook.com>
parents:
46
diff
changeset
|
31 @deftypefn {Function File} {[@var{func}]} = \ |
182
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
32 Function (@var{name}, @var{FunctionSpace} (or @var{Function}),\ |
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
33 @var{Vector} (or @var{index}))\n\ |
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
34 Initialize an object with the values specified in a vector or extracting \ |
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
35 a component from a vectorial field.\n\ |
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
36 This function can be used in two different ways\n\ |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
37 @itemize @bullet \n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
38 @item To create a function from a vector. In this case, the arguments are:\n\ |
48
c73bca616ca7
Add texinfo description for the DLD functions
gedeone-octave <marco.vassallo@outlook.com>
parents:
46
diff
changeset
|
39 @itemize @bullet \n\ |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
40 @item @var{name} is a string representing the name of the function\n\ |
182
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
41 @item @var{FunctionSpace} is the fem-fenics function space where \ |
48
c73bca616ca7
Add texinfo description for the DLD functions
gedeone-octave <marco.vassallo@outlook.com>
parents:
46
diff
changeset
|
42 the vector is defined\n\ |
182
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
43 @item @var{Vector} specifies the values of the coefficients\ |
270
f4d6ae912a08
Correct typos in the doc-strings
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
268
diff
changeset
|
44 for each basis function of the @var{FunctioSpace}\n\ |
50
fcfecdd3a9b5
Maint: improve the documentation
gedeone-octave <marco.vassallo@outlook.com>
parents:
49
diff
changeset
|
45 @end itemize\n\ |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
46 @item To extract a scalar field from a vectorial one\n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
47 @itemize @bullet \n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
48 @item @var{name} is a string representing the name of the function\n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
49 @item @var{Function} is the vector valued Function\n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
50 @item @var{Index} contains the index of the scalar field to extract.\ |
270
f4d6ae912a08
Correct typos in the doc-strings
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
268
diff
changeset
|
51 Indices start from 1. \n\ |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
52 @end itemize\n\ |
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
53 @end itemize \n\ |
182
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
54 The output @var{func} is an object which contains a representation of the \ |
b40f22aad4af
Improve the documentation for the pkg release.
gedeone-octave <marcovass89@hotmail.it>
parents:
173
diff
changeset
|
55 function @var{Vector} which can be plotted or saved or passed as argument \ |
240
a57001686abb
Document function evaluation
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
182
diff
changeset
|
56 for a variational problem. Moreover, it is possible to evaluate it on points \ |
a57001686abb
Document function evaluation
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
182
diff
changeset
|
57 of its domain.\n\ |
143
9486cbdc0a2e
Maint: update the documentation
gedeone-octave <marcovass89@hotmail.it>
parents:
119
diff
changeset
|
58 @seealso{Constant, Expression, plot, save}\n\ |
48
c73bca616ca7
Add texinfo description for the DLD functions
gedeone-octave <marco.vassallo@outlook.com>
parents:
46
diff
changeset
|
59 @end deftypefn") |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
60 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
61 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
62 int nargin = args.length (); |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
63 octave_value retval; |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
64 |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
65 if (nargin < 3 || nargin > 3) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
66 { print_usage (); } |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
67 else |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
68 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
69 if (! functionspace_type_loaded) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
70 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
71 functionspace::register_type (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
72 functionspace_type_loaded = true; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
73 mlock (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
74 } |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
75 |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
76 if (! function_type_loaded) |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
77 { |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
78 function::register_type (); |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
79 function_type_loaded = true; |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
80 mlock (); |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
81 } |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
82 |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
83 if (args(1).type_id () == functionspace::static_type_id ()) |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
84 { |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
85 std::string str = args(0).string_value (); |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
86 const functionspace & fspo = |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
87 static_cast<const functionspace &> (args(1).get_rep ()); |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
88 Array <double> myu = args(2).array_value (); |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
89 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
90 if (!error_state) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
91 { |
253
5e9b5bbdc56b
Support both DOLFIN 1.3.0 and 1.4.0
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
240
diff
changeset
|
92 const SHARED_PTR <const dolfin::FunctionSpace> |
173
9e944b0d0fc8
Some Formatting improvements (?)
gedeone-octave <marcovass89@hotmail.it>
parents:
168
diff
changeset
|
93 & V = fspo.get_pfsp (); |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
94 |
49
a4ef215d1eed
Check if size of input parameters agree
gedeone-octave <marco.vassallo@outlook.com>
parents:
48
diff
changeset
|
95 if (V->dim () != myu.length ()) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
96 { |
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
97 error ("The size of the functional space \ |
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
98 and of the vector must agree"); |
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
99 } |
49
a4ef215d1eed
Check if size of input parameters agree
gedeone-octave <marco.vassallo@outlook.com>
parents:
48
diff
changeset
|
100 else |
a4ef215d1eed
Check if size of input parameters agree
gedeone-octave <marco.vassallo@outlook.com>
parents:
48
diff
changeset
|
101 { |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
102 dolfin::Function aux (V); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
103 copy_vector (myu, aux.vector ()); |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
104 |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
105 SHARED_PTR <dolfin::Function const> |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
106 u (new dolfin::Function (aux)); |
61
93e538063278
Add a string field to the class function
gedeone-octave <marco.vassallo@outlook.com>
parents:
50
diff
changeset
|
107 retval = new function (str, u); |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
108 } |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
109 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
110 } |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
111 else if (args(1).type_id () == function::static_type_id ()) |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
112 { |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
113 std::string str = args(0).string_value (); |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
114 const function & fspo = |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
115 static_cast<const function &> (args(1).get_rep ()); |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
116 int idx = args(2).int_value (); |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
117 |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
118 if (!error_state) |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
119 { |
253
5e9b5bbdc56b
Support both DOLFIN 1.3.0 and 1.4.0
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
240
diff
changeset
|
120 const SHARED_PTR <const dolfin::Function> |
173
9e944b0d0fc8
Some Formatting improvements (?)
gedeone-octave <marcovass89@hotmail.it>
parents:
168
diff
changeset
|
121 & f = fspo.get_pfun (); |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
122 |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
123 if (f->value_rank () < 1) |
173
9e944b0d0fc8
Some Formatting improvements (?)
gedeone-octave <marcovass89@hotmail.it>
parents:
168
diff
changeset
|
124 error ("Function: The function you provided\ |
9e944b0d0fc8
Some Formatting improvements (?)
gedeone-octave <marcovass89@hotmail.it>
parents:
168
diff
changeset
|
125 isn't a vecotr field"); |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
126 else |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
127 { |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
128 if (idx < 1 || idx > f->value_dimension (0)) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
129 { error ("Function: index out of bounds"); } |
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
130 else |
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
131 { |
253
5e9b5bbdc56b
Support both DOLFIN 1.3.0 and 1.4.0
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
240
diff
changeset
|
132 SHARED_PTR <const dolfin::Function> |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
133 u (new dolfin::Function ((*f)[idx - 1])); |
173
9e944b0d0fc8
Some Formatting improvements (?)
gedeone-octave <marcovass89@hotmail.it>
parents:
168
diff
changeset
|
134 |
119
4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
gedeone-octave <marcovass89@hotmail.it>
parents:
87
diff
changeset
|
135 retval = new function (str, u); |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
136 } |
87
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
137 } |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
138 } |
d03627091414
New constructor for the dld function Function
gedeone-octave <marcovass89@hotmail.it>
parents:
78
diff
changeset
|
139 } |
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
140 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
141 return retval; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
142 } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
143 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
144 void |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
145 copy_vector (Array <double> const & arr, SHARED_PTR <dolfin::GenericVector> vec) |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
146 { |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
147 unsigned const size = |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
148 #ifdef LATEST_DOLFIN |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
149 dolfin::MPI::size (MPI_COMM_WORLD); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
150 #else |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
151 dolfin::MPI::num_processes (); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
152 #endif |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
153 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
154 if (size > 1) |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
155 { |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
156 std::vector <double> locvals; |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
157 boost::mpi::communicator world; |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
158 unsigned const rank = world.rank (); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
159 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
160 std::pair <std::size_t, std::size_t> const loc_range = |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
161 vec->local_range (); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
162 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
163 for (unsigned p = 1; p < size; ++p) |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
164 if (rank == p) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
165 { world.send (0, p, loc_range); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
166 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
167 if (rank == 0) |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
168 { |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
169 for (unsigned p = 0; p < size; ++p) |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
170 { |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
171 std::pair <std::size_t, std::size_t> range; |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
172 if (p == 0) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
173 { range = loc_range; } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
174 else |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
175 { world.recv (p, p, range); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
176 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
177 std::vector <double> entries; |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
178 for (std::size_t i = range.first; i < range.second; ++i) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
179 { entries.push_back (arr(i)); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
180 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
181 if (p == 0) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
182 { locvals = entries; } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
183 else |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
184 { world.send (p, p, entries); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
185 } |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
186 } |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
187 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
188 for (unsigned p = 1; p < size; ++p) |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
189 { |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
190 if (rank == p) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
191 { world.recv (0, p, locvals); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
192 } |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
193 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
194 vec->set_local (locvals); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
195 } |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
196 else |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
197 for (std::size_t i = 0; i < arr.length (); ++i) |
268
61830a4f9ab9
Improve formatting
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
256
diff
changeset
|
198 { vec->setitem (i, arr (i)); } |
256
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
199 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
200 vec->apply ("insert"); |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
201 |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
202 return; |
8fe68d94ab76
Add parallel assembly of matrices and vectors
Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
parents:
253
diff
changeset
|
203 } |