~njansson/dolfin/hpc

« back to all changes in this revision

Viewing changes to src/pydolfin/dolfin_mesh_pre.i

  • Committer: Anders Logg
  • Date: 2007-01-10 09:04:44 UTC
  • mfrom: (1689.1.221 trunk)
  • Revision ID: logg@simula.no-20070110090444-ecyux3n1qnei4i8h
RemoveĀ oldĀ head

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 ALL_COORDINATES(name)
 
4
%extend name {
 
5
    PyObject* coordinates() {
 
6
        // Get coordinates for all vertices in structure.
 
7
        // returns a 3xnoVertices Numeric array, x in array[0], y in array[1]
 
8
        // and z in array[2]
 
9
        int noVert = self->numVertices();
 
10
        int dim = self->geometry().dim();
 
11
        int nadims = 2;
 
12
        npy_intp adims[nadims];
 
13
 
 
14
        adims[0] = noVert;
 
15
        adims[1] = dim;
 
16
 
 
17
        PyArrayObject* arr = (PyArrayObject *)PyArray_SimpleNewFromData(nadims, adims, PyArray_DOUBLE, (char *)(self->coordinates()));
 
18
        if ( arr == NULL ) return NULL;
 
19
        PyArray_INCREF(arr);
 
20
        return (PyObject *)arr;
 
21
    }
 
22
}
 
23
%enddef
 
24
 
 
25
%define ALL_CELLS(name)
 
26
%extend name {
 
27
    PyObject* cells() {
 
28
       // Get the node-id for all vertices.
 
29
        int  nadims = 2;
 
30
        npy_intp adims[nadims];
 
31
        int no_cells = self->numCells();
 
32
        int vertices_per_cell = (self->topology().dim() == 2) ? 3 : 4;
 
33
 
 
34
        adims[0] = no_cells;
 
35
        adims[1] = vertices_per_cell;
 
36
 
 
37
        // the std. way of creating a Numeric array
 
38
        PyArrayObject* arr = (PyArrayObject *)PyArray_SimpleNewFromData(nadims, adims, PyArray_INT, (char *)(self->cells()));
 
39
        if (arr == NULL) return NULL;
 
40
        PyArray_INCREF(arr);
 
41
        return (PyObject *)arr;
 
42
    }
 
43
}
 
44
%enddef
 
45
 
 
46
ALL_COORDINATES(dolfin::Mesh)
 
47
ALL_CELLS(dolfin::Mesh)
 
48
 
 
49
%ignore dolfin::Mesh::cells;
 
50
%ignore dolfin::Mesh::coordinates;
 
51
 
 
52
//--- Mesh iterators ---
 
53
 
 
54
// Map increment operator and dereference operators for iterators
 
55
%rename(increment) dolfin::MeshEntityIterator::operator++;
 
56
%rename(dereference) dolfin::MeshEntityIterator::operator*;
 
57
 
 
58
// Rename the iterators to better match the Python syntax
 
59
%rename(vertices) dolfin::VertexIterator;
 
60
%rename(edges) dolfin::EdgeIterator;
 
61
%rename(faces) dolfin::FaceIterator;
 
62
%rename(facets) dolfin::FacetIterator;
 
63
%rename(cells) dolfin::CellIterator;
 
64
%rename(entities) dolfin::MeshEntityIterator;