Mercurial > fem-fenics-eugenio
annotate src/fem_func.cc @ 46:a64e195d0611
Wrapper class for dolfin::Function
* function.h: definition of the new clas function which derives from
octave_base_value
* fem_func.cc: take as input a functionspace and a vector and creates
an object of type function
* fem_init_env: register also the class function
author | gedeone-octave <marco.vassallo@outlook.com> |
---|---|
date | Mon, 22 Jul 2013 14:56:51 +0200 |
parents | |
children | c73bca616ca7 |
rev | line source |
---|---|
46
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
1 #include <dolfin.h> |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
2 #include "functionspace.h" |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
3 #include "function.h" |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
4 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
5 DEFUN_DLD (fem_func, args, , "fem_func: functionspace V, vector u") |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
6 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
7 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
8 int nargin = args.length (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
9 octave_value retval=0; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
10 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
11 if (nargin < 2 || nargin > 2) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
12 print_usage (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
13 else |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
14 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
15 if (! functionspace_type_loaded) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
16 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
17 functionspace::register_type (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
18 functionspace_type_loaded = true; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
19 mlock (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
20 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
21 if (args(0).type_id () == functionspace::static_type_id ()) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
22 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
23 const functionspace & fspo = |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
24 static_cast<const functionspace&> (args(0).get_rep ()); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
25 Array <double> myu = args(1).array_value (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
26 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
27 if (!error_state) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
28 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
29 const boost::shared_ptr<const dolfin::FunctionSpace> & V = fspo.get_pfsp (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
30 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
31 dolfin::Vector du(myu.length ()); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
32 for (std::size_t i = 0; i < myu.length (); ++i) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
33 du.setitem (i, myu(i)); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
34 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
35 boost::shared_ptr<dolfin::Vector> uu (new dolfin::Vector(du)); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
36 boost::shared_ptr <const dolfin::Function> u (new dolfin::Function(V, uu)); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
37 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
38 if (! function_type_loaded) |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
39 { |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
40 function::register_type (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
41 function_type_loaded = true; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
42 mlock (); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
43 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
44 |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
45 retval = new function (u); |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
46 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
47 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
48 } |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
49 return retval; |
a64e195d0611
Wrapper class for dolfin::Function
gedeone-octave <marco.vassallo@outlook.com>
parents:
diff
changeset
|
50 } |