~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to dolfin/swig/dolfin_mesh_pre.i

  • Committer: Niclas Jansson
  • Date: 2010-10-17 10:21:52 UTC
  • Revision ID: njansson@csc.kth.se-20101017102152-e6u3c9uwxa4z19c8
Minor fixes in configure.ac

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// --- Return NumPy arrays for Mesh::cells() and Mesh::coordinates() ---
2
 
 
3
 
%define MAKE_ARRAY(dim_size, m, n, dataptr, TYPE)
4
 
        npy_intp adims[dim_size];
5
 
 
6
 
        adims[0] = m;
7
 
        if (dim_size == 2)
8
 
            adims[1] = n;
9
 
 
10
 
        PyArrayObject* array = reinterpret_cast<PyArrayObject*>(PyArray_SimpleNewFromData(dim_size, adims, TYPE, (char *)(dataptr)));
11
 
        if ( array == NULL ) return NULL;
12
 
        PyArray_INCREF(array);
13
 
%enddef
14
 
 
15
 
 
16
 
%define ALL_COORDINATES(name)
17
 
%extend name {
18
 
    PyObject* coordinates() {
19
 
        // Get coordinates for all vertices in structure.
20
 
        // returns a 3xnumVertices numpy array, x in array[0], y in array[1]
21
 
        // and z in array[2]
22
 
        int m = self->numVertices();
23
 
        int n = self->geometry().dim();
24
 
 
25
 
        MAKE_ARRAY(2, m, n, self->coordinates(), NPY_DOUBLE)
26
 
 
27
 
        return reinterpret_cast<PyObject*>(array);
28
 
    }
29
 
}
30
 
%enddef
31
 
 
32
 
%define ALL_CELLS(name)
33
 
%extend name {
34
 
    PyObject* cells() {
35
 
       // Get the node-id for all vertices.
36
 
        int m = self->numCells();
37
 
        int n = 0;
38
 
        if(self->topology().dim() == 1)
39
 
          n = 2;
40
 
        else if(self->topology().dim() == 2)
41
 
          n = 3;
42
 
        else
43
 
          n = 4;
44
 
 
45
 
        MAKE_ARRAY(2, m, n, self->cells(), NPY_INT)
46
 
 
47
 
        return reinterpret_cast<PyObject*>(array);
48
 
    }
49
 
}
50
 
%enddef
51
 
 
52
 
%define ALL_VALUES(name, TYPE)
53
 
%extend name {
54
 
    PyObject* values() {
55
 
        int m = self->size();
56
 
        int n = 0;
57
 
 
58
 
        MAKE_ARRAY(1, m, n, self->values(), TYPE)
59
 
 
60
 
        return reinterpret_cast<PyObject*>(array);
61
 
    }
62
 
}
63
 
%enddef
64
 
 
65
 
ALL_COORDINATES(dolfin::Mesh)
66
 
ALL_CELLS(dolfin::Mesh)
67
 
ALL_VALUES(dolfin::MeshFunction<real>, NPY_DOUBLE)
68
 
ALL_VALUES(dolfin::MeshFunction<int>, NPY_INT)
69
 
ALL_VALUES(dolfin::MeshFunction<bool>, NPY_BOOL)
70
 
ALL_VALUES(dolfin::MeshFunction<unsigned int>, NPY_UINT)
71
 
 
72
 
%ignore dolfin::Mesh::cells;
73
 
%ignore dolfin::Mesh::coordinates;
74
 
%ignore dolfin::MeshFunction::values;
75
 
%ignore dolfin::MeshEditor::open(Mesh&, CellType::Type, uint, uint);
76
 
 
77
 
//--- Mesh iterators ---
78
 
 
79
 
// Map increment operator and dereference operators for iterators
80
 
%rename(increment) dolfin::MeshEntityIterator::operator++;
81
 
%rename(dereference) dolfin::MeshEntityIterator::operator*;
82
 
 
83
 
// Rename the iterators to better match the Python syntax
84
 
%rename(vertices) dolfin::VertexIterator;
85
 
%rename(edges) dolfin::EdgeIterator;
86
 
%rename(faces) dolfin::FaceIterator;
87
 
%rename(facets) dolfin::FacetIterator;
88
 
%rename(cells) dolfin::CellIterator;
89
 
%rename(entities) dolfin::MeshEntityIterator;