From cca9c47f46ea4bc4cde0f8734a36b9a6dd78c8fc Mon Sep 17 00:00:00 2001 From: Jonathan Lambrechts <jonathan.lambrechts@uclouvain.be> Date: Mon, 30 Mar 2015 13:59:18 +0000 Subject: [PATCH] dg : conservation law python --- wrappers/gmshpy/gmshNumeric.i | 12 ++++++++++++ wrappers/gmshpy/gmshtypemaps.i | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/wrappers/gmshpy/gmshNumeric.i b/wrappers/gmshpy/gmshNumeric.i index 9fca5e851b..bf281cbac6 100644 --- a/wrappers/gmshpy/gmshNumeric.i +++ b/wrappers/gmshpy/gmshNumeric.i @@ -31,3 +31,15 @@ %include "polynomialBasis.h" %include "pyramidalBasis.h" %include "BasisFactory.h" +%extend nodalBasis { + fullMatrix<double> F(const fullMatrix<double> &xi) { + fullMatrix<double> psi; + $self->f(xi, psi); + return psi; + } + fullMatrix<double> DF(const fullMatrix<double> &xi) { + fullMatrix<double> dpsi; + $self->df(xi, dpsi); + return dpsi; + } +} diff --git a/wrappers/gmshpy/gmshtypemaps.i b/wrappers/gmshpy/gmshtypemaps.i index 42a077fb82..22b493849f 100644 --- a/wrappers/gmshpy/gmshtypemaps.i +++ b/wrappers/gmshpy/gmshtypemaps.i @@ -128,21 +128,17 @@ { npy_intp dims[2] = {fm.size1(), fm.size2()}; double *data = (double*)fm.getDataPtr(); - /*PyObject *array = PyArray_New(&PyArray_Type, 2, dims, NPY_DOUBLE, NULL, NULL, 0, NPY_ARRAY_F_CONTIGUOUS, NULL); - // copy data - memcpy((void*)PyArray_DATA(array), data, dims[0] * dims[1] * sizeof(double));*/ // do not copy data PyObject *array = PyArray_New(&PyArray_Type, 2, dims, NPY_DOUBLE, NULL, (void*)data, 0, NPY_ARRAY_F_CONTIGUOUS, NULL); PyArray_UpdateFlags((PyArrayObject*)array, NPY_ARRAY_ALIGNED); - /*if (fm.getOwnData()) { - fm.setOwnData(false); - %#if PY_MAJOR_VERSION==2 && PY_MINOR_VERSION==6 - PyObject *capsule = PyCObject_FromVoidPtr((void*)data, deleteCapsuleArray); - %#else - PyObject *capsule = PyCapsule_New((void*) data, NULL, deleteCapsuleArray); - %#endif - PyArray_SetBaseObject((PyArrayObject*)array, capsule); - }*/ + return array; + } + PyObject *fullMatrix2PyArrayProxy(const fullMatrix<double> &fm) + { + npy_intp dims[2] = {fm.size1(), fm.size2()}; + double *data = (double*)fm.getDataPtr(); + PyObject *array = PyArray_New(&PyArray_Type, 2, dims, NPY_DOUBLE, NULL, (void*)data, 0, NPY_ARRAY_F_CONTIGUOUS, NULL); + PyArray_UpdateFlags((PyArrayObject*)array, NPY_ARRAY_ALIGNED |NPY_ARRAY_WRITEABLE); return array; } PyObject *fullVector2PyArrayProxy(fullVector<double> &fv) @@ -211,6 +207,10 @@ $result = fullMatrix2PyArrayConst(*$1); } +%typemap(out, fragment="fullMatrixConversion") fullMatrix<double>& { + $result = fullMatrix2PyArrayProxy(*$1); +} + %typemap(out, fragment="fullMatrixConversion") fullVector<double>& { $result = fullVector2PyArrayProxy(*$1); } -- GitLab