Generated by Cython 0.29.30
Yellow lines hint at Python interaction.
Click on a line that starts with a "+
" to see the C code that Cython generated for it.
Raw output: quantity_ext.c
+001: #cython: wraparound=False, boundscheck=False, cdivision=True, profile=False, nonecheck=False, overflowcheck=False, cdivision_warnings=False, unraisable_tracebacks=False
__pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
002: import cython
003:
004: # import both numpy and the Cython declarations for numpy
+005: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
006: cimport numpy as np
007:
008: ctypedef long keyint
009:
010: # declare the interface to the C code
011: cdef extern from "quantity.c":
012: int _compute_gradients(keyint N, double* centroids, double* centroid_values, long* number_of_boundaries, long* surrogate_neighbours, double* a, double* b)
013: int _compute_local_gradients(keyint N, double* vertex_coordinates, double* vertex_values, double* a, double* b)
014: int _extrapolate_from_gradient(keyint N, double* centroids, double* centroid_values, double* vertex_coordinates, double* vertex_values, double* edge_values, double* a, double* b)
015: int _extrapolate_and_limit_from_gradient(keyint N, double beta, double* centroids, long* neighbours, double* centroid_values, double* vertex_coordinates, double* vertex_values, double* edge_values, double* phi, double* x_gradient, double* y_gradient)
016: int _limit_vertices_by_all_neighbours(keyint N, double beta, double* centroid_values, double* vertex_values, double* edge_values, long* neighbours, double* x_gradient, double* y_gradient)
017: int _limit_edges_by_all_neighbours(keyint N, double beta, double* centroid_values, double* vertex_values, double* edge_values, long* neighbours, double* x_gradient, double* y_gradient)
018: int _limit_edges_by_neighbour(keyint N, double beta, double* centroid_values, double* vertex_values, double* edge_values, long* neighbours)
019: int _limit_gradient_by_neighbour(keyint N, double beta, double* centroid_values, double* vertex_values, double* edge_values, double* x_gradient, double* y_gradient, long* neighbours)
020: int _bound_vertices_below_by_constant(keyint N, double bound, double* centroid_values, double* vertex_values, double* edge_values, double* x_gradient, double* y_gradient)
021: int _bound_vertices_below_by_quantity(keyint N, double* bound_vertex_values, double* centroid_values, double* vertex_values, double* edge_values, double* x_gradient, double* y_gradient)
022: int _interpolate(keyint N, double* vertex_values, double* edge_values, double* centroid_values)
023: int _interpolate_from_vertices_to_edges(keyint N, double* vertex_values, double* edge_values)
024: int _interpolate_from_edges_to_vertices(keyint N, double* vertex_values, double* edge_values)
025: int _backup_centroid_values(keyint N, double* centroid_values, double* centroid_backup_values)
026: int _saxpy_centroid_values(keyint N, double a, double b, double* centroid_values, double* centroid_backup_values)
027: int _update(keyint N, double timestep, double* centroid_values, double* explicit_update, double* semi_implicit_update)
028: int _average_vertex_values(keyint N, long* vertex_value_indices, long* number_of_triangles_per_node, double* vertex_values, double* A)
029: int _average_centroid_values(keyint N, long* vertex_value_indices, long* number_of_triangles_per_node, double* centroid_values, double* A)
030: int _set_vertex_values_c(keyint num_verts, long* vertices, long* node_index, long* number_of_triangles_per_node, long* vertex_value_indices, double* vertex_values, double* A)
031: int _min_and_max_centroid_values(keyint N, double* qc, double* qv, long* neighbours, double* qmin, double* qmax)
032:
033: cdef extern from "util_ext.h":
034: void _limit_old(int N, double beta, double* qc, double* qv, double* qmin, double* qmax)
035:
036:
+037: def update(object quantity, double timestep):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_1update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_5anuga_26abstract_2d_finite_volumes_12quantity_ext_update[] = "Update centroid values based on values stored in\n explicit_update and semi_implicit_update as well as given timestep\n\n Function implementing forcing terms must take on argument\n which is the domain and they must update either explicit\n or implicit updates, e,g,:\n\n def gravity(domain):\n ....\n domain.quantities['xmomentum'].explicit_update = ...\n domain.quantities['ymomentum'].explicit_update = ...\n\n\n\n Explicit terms must have the form\n\n G(q, t)\n\n and explicit scheme is\n\n q^{(n+1}) = q^{(n)} + delta_t G(q^{n}, n delta_t)\n\n\n Semi implicit forcing terms are assumed to have the form\n\n G(q, t) = H(q, t) q\n\n and the semi implicit scheme will then be\n\n q^{(n+1}) = q^{(n)} + delta_t H(q^{n}, n delta_t) q^{(n+1})"; static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_1update = {"update", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_1update, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5anuga_26abstract_2d_finite_volumes_12quantity_ext_update}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_1update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_quantity = 0; double __pyx_v_timestep; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_quantity,&__pyx_n_s_timestep,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_quantity)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timestep)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("update", 1, 2, 2, 1); __PYX_ERR(0, 37, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) __PYX_ERR(0, 37, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_quantity = values[0]; __pyx_v_timestep = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_timestep == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("update", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 37, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.update", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_update(__pyx_self, __pyx_v_quantity, __pyx_v_timestep); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity, double __pyx_v_timestep) { PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_explicit_update = 0; PyArrayObject *__pyx_v_semi_implicit_update = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_explicit_update; __Pyx_Buffer __pyx_pybuffer_explicit_update; __Pyx_LocalBuf_ND __pyx_pybuffernd_semi_implicit_update; __Pyx_Buffer __pyx_pybuffer_semi_implicit_update; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("update", 0); __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_explicit_update.pybuffer.buf = NULL; __pyx_pybuffer_explicit_update.refcount = 0; __pyx_pybuffernd_explicit_update.data = NULL; __pyx_pybuffernd_explicit_update.rcbuffer = &__pyx_pybuffer_explicit_update; __pyx_pybuffer_semi_implicit_update.pybuffer.buf = NULL; __pyx_pybuffer_semi_implicit_update.refcount = 0; __pyx_pybuffernd_semi_implicit_update.data = NULL; __pyx_pybuffernd_semi_implicit_update.rcbuffer = &__pyx_pybuffer_semi_implicit_update; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_explicit_update.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.update", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_explicit_update.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_explicit_update); __Pyx_XDECREF((PyObject *)__pyx_v_semi_implicit_update); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__3 = PyTuple_Pack(7, __pyx_n_s_quantity, __pyx_n_s_timestep, __pyx_n_s_centroid_values, __pyx_n_s_explicit_update, __pyx_n_s_semi_implicit_update, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_1update, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_update, __pyx_t_1) < 0) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_update, 37, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 37, __pyx_L1_error)
038: """Update centroid values based on values stored in
039: explicit_update and semi_implicit_update as well as given timestep
040:
041: Function implementing forcing terms must take on argument
042: which is the domain and they must update either explicit
043: or implicit updates, e,g,:
044:
045: def gravity(domain):
046: ....
047: domain.quantities['xmomentum'].explicit_update = ...
048: domain.quantities['ymomentum'].explicit_update = ...
049:
050:
051:
052: Explicit terms must have the form
053:
054: G(q, t)
055:
056: and explicit scheme is
057:
058: q^{(n+1}) = q^{(n)} + delta_t G(q^{n}, n delta_t)
059:
060:
061: Semi implicit forcing terms are assumed to have the form
062:
063: G(q, t) = H(q, t) q
064:
065: and the semi implicit scheme will then be
066:
067: q^{(n+1}) = q^{(n)} + delta_t H(q^{n}, n delta_t) q^{(n+1})"""
068:
069: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
070: cdef np.ndarray[double, ndim=1, mode="c"] explicit_update
071: cdef np.ndarray[double, ndim=1, mode="c"] semi_implicit_update
072:
073: cdef keyint N
074: cdef int err
075:
+076: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 76, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 76, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+077: explicit_update = quantity.explicit_update
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_explicit_update); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 77, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_explicit_update.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_explicit_update.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_explicit_update.rcbuffer->pybuffer, (PyObject*)__pyx_v_explicit_update, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_explicit_update.diminfo[0].strides = __pyx_pybuffernd_explicit_update.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_explicit_update.diminfo[0].shape = __pyx_pybuffernd_explicit_update.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_explicit_update = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+078: semi_implicit_update = quantity.semi_implicit_update
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_semi_implicit_update); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 78, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer, (PyObject*)__pyx_v_semi_implicit_update, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_semi_implicit_update.diminfo[0].strides = __pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_semi_implicit_update.diminfo[0].shape = __pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 78, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_semi_implicit_update = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
079:
+080: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
081:
+082: err = _update(N, timestep, ¢roid_values[0], &explicit_update[0], &semi_implicit_update[0])
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_v_err = _update(__pyx_v_N, __pyx_v_timestep, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_explicit_update.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_explicit_update.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_semi_implicit_update.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_semi_implicit_update.diminfo[0].strides))));
083:
+084: assert err == 0, "quantity_ext.c: update, division by zero in semi implicit update - call Stephen :)"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_quantity_ext_c_update_division_b); __PYX_ERR(0, 84, __pyx_L1_error) } } #endif
085:
086:
+087: def backup_centroid_values(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_3backup_centroid_values(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_3backup_centroid_values = {"backup_centroid_values", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_3backup_centroid_values, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_3backup_centroid_values(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("backup_centroid_values (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_2backup_centroid_values(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_2backup_centroid_values(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_centroid_backup_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; CYTHON_UNUSED int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_backup_values; __Pyx_Buffer __pyx_pybuffer_centroid_backup_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("backup_centroid_values", 0); __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_centroid_backup_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_backup_values.refcount = 0; __pyx_pybuffernd_centroid_backup_values.data = NULL; __pyx_pybuffernd_centroid_backup_values.rcbuffer = &__pyx_pybuffer_centroid_backup_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.backup_centroid_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_backup_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__5 = PyTuple_Pack(5, __pyx_n_s_quantity, __pyx_n_s_centroid_values, __pyx_n_s_centroid_backup_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_3backup_centroid_values, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_backup_centroid_values, __pyx_t_1) < 0) __PYX_ERR(0, 87, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_backup_centroid_values, 87, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 87, __pyx_L1_error)
088:
089: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
090: cdef np.ndarray[double, ndim=1, mode="c"] centroid_backup_values
091:
092: cdef keyint N
093: cdef int err
094:
+095: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 95, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 95, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+096: centroid_backup_values = quantity.centroid_backup_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_backup_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 96, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_backup_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_centroid_backup_values.diminfo[0].strides = __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_backup_values.diminfo[0].shape = __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 96, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_centroid_backup_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
097:
+098: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
099:
+100: err = _backup_centroid_values(N, ¢roid_values[0], ¢roid_backup_values[0])
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_v_err = _backup_centroid_values(__pyx_v_N, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_centroid_backup_values.diminfo[0].strides))));
101:
+102: def saxpy_centroid_values(object quantity, double a, double b):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_5saxpy_centroid_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_5saxpy_centroid_values = {"saxpy_centroid_values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_5saxpy_centroid_values, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_5saxpy_centroid_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_quantity = 0; double __pyx_v_a; double __pyx_v_b; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("saxpy_centroid_values (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_quantity,&__pyx_n_s_a,&__pyx_n_s_b,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_quantity)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("saxpy_centroid_values", 1, 3, 3, 1); __PYX_ERR(0, 102, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("saxpy_centroid_values", 1, 3, 3, 2); __PYX_ERR(0, 102, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "saxpy_centroid_values") < 0)) __PYX_ERR(0, 102, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_quantity = values[0]; __pyx_v_a = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error) __pyx_v_b = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("saxpy_centroid_values", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 102, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.saxpy_centroid_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_4saxpy_centroid_values(__pyx_self, __pyx_v_quantity, __pyx_v_a, __pyx_v_b); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_4saxpy_centroid_values(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity, double __pyx_v_a, double __pyx_v_b) { PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_centroid_backup_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; CYTHON_UNUSED int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_backup_values; __Pyx_Buffer __pyx_pybuffer_centroid_backup_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("saxpy_centroid_values", 0); __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_centroid_backup_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_backup_values.refcount = 0; __pyx_pybuffernd_centroid_backup_values.data = NULL; __pyx_pybuffernd_centroid_backup_values.rcbuffer = &__pyx_pybuffer_centroid_backup_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.saxpy_centroid_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_backup_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__7 = PyTuple_Pack(7, __pyx_n_s_quantity, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_centroid_values, __pyx_n_s_centroid_backup_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_5saxpy_centroid_values, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_saxpy_centroid_values, __pyx_t_1) < 0) __PYX_ERR(0, 102, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_saxpy_centroid_values, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(0, 102, __pyx_L1_error)
103:
104: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
105: cdef np.ndarray[double, ndim=1, mode="c"] centroid_backup_values
106:
107: cdef keyint N
108: cdef int err
109:
+110: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 110, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 110, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+111: centroid_backup_values = quantity.centroid_backup_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_backup_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 111, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_backup_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_centroid_backup_values.diminfo[0].strides = __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_backup_values.diminfo[0].shape = __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 111, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_centroid_backup_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
112:
+113: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
114:
+115: err = _saxpy_centroid_values(N, a, b, ¢roid_values[0], ¢roid_backup_values[0])
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_v_err = _saxpy_centroid_values(__pyx_v_N, __pyx_v_a, __pyx_v_b, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_backup_values.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_centroid_backup_values.diminfo[0].strides))));
116:
117:
+118: def set_vertex_values_c(object quantity, np.ndarray[long, ndim=1, mode="c"] vertices not None, np.ndarray[double, ndim=1, mode="c"] A not None):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_7set_vertex_values_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_7set_vertex_values_c = {"set_vertex_values_c", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_7set_vertex_values_c, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_7set_vertex_values_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_quantity = 0; PyArrayObject *__pyx_v_vertices = 0; PyArrayObject *__pyx_v_A = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_vertex_values_c (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_quantity,&__pyx_n_s_vertices,&__pyx_n_s_A,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_quantity)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vertices)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_vertex_values_c", 1, 3, 3, 1); __PYX_ERR(0, 118, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("set_vertex_values_c", 1, 3, 3, 2); __PYX_ERR(0, 118, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_vertex_values_c") < 0)) __PYX_ERR(0, 118, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v_quantity = values[0]; __pyx_v_vertices = ((PyArrayObject *)values[1]); __pyx_v_A = ((PyArrayObject *)values[2]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("set_vertex_values_c", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 118, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.set_vertex_values_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertices), __pyx_ptype_5numpy_ndarray, 0, "vertices", 0))) __PYX_ERR(0, 118, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_5numpy_ndarray, 0, "A", 0))) __PYX_ERR(0, 118, __pyx_L1_error) __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_6set_vertex_values_c(__pyx_self, __pyx_v_quantity, __pyx_v_vertices, __pyx_v_A); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_6set_vertex_values_c(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_A) { PyObject *__pyx_v_domain = 0; PyObject *__pyx_v_mesh = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_node_index = 0; PyArrayObject *__pyx_v_number_of_triangles_per_node = 0; PyArrayObject *__pyx_v_vertex_value_indices = 0; CYTHON_UNUSED int __pyx_v_err; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_num_verts; __Pyx_LocalBuf_ND __pyx_pybuffernd_A; __Pyx_Buffer __pyx_pybuffer_A; __Pyx_LocalBuf_ND __pyx_pybuffernd_node_index; __Pyx_Buffer __pyx_pybuffer_node_index; __Pyx_LocalBuf_ND __pyx_pybuffernd_number_of_triangles_per_node; __Pyx_Buffer __pyx_pybuffer_number_of_triangles_per_node; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_value_indices; __Pyx_Buffer __pyx_pybuffer_vertex_value_indices; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertices; __Pyx_Buffer __pyx_pybuffer_vertices; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_vertex_values_c", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_node_index.pybuffer.buf = NULL; __pyx_pybuffer_node_index.refcount = 0; __pyx_pybuffernd_node_index.data = NULL; __pyx_pybuffernd_node_index.rcbuffer = &__pyx_pybuffer_node_index; __pyx_pybuffer_number_of_triangles_per_node.pybuffer.buf = NULL; __pyx_pybuffer_number_of_triangles_per_node.refcount = 0; __pyx_pybuffernd_number_of_triangles_per_node.data = NULL; __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer = &__pyx_pybuffer_number_of_triangles_per_node; __pyx_pybuffer_vertex_value_indices.pybuffer.buf = NULL; __pyx_pybuffer_vertex_value_indices.refcount = 0; __pyx_pybuffernd_vertex_value_indices.data = NULL; __pyx_pybuffernd_vertex_value_indices.rcbuffer = &__pyx_pybuffer_vertex_value_indices; __pyx_pybuffer_vertices.pybuffer.buf = NULL; __pyx_pybuffer_vertices.refcount = 0; __pyx_pybuffernd_vertices.data = NULL; __pyx_pybuffernd_vertices.rcbuffer = &__pyx_pybuffer_vertices; __pyx_pybuffer_A.pybuffer.buf = NULL; __pyx_pybuffer_A.refcount = 0; __pyx_pybuffernd_A.data = NULL; __pyx_pybuffernd_A.rcbuffer = &__pyx_pybuffer_A; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertices, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 118, __pyx_L1_error) } __pyx_pybuffernd_vertices.diminfo[0].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertices.diminfo[0].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_A.rcbuffer->pybuffer, (PyObject*)__pyx_v_A, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 118, __pyx_L1_error) } __pyx_pybuffernd_A.diminfo[0].strides = __pyx_pybuffernd_A.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_A.diminfo[0].shape = __pyx_pybuffernd_A.rcbuffer->pybuffer.shape[0]; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_node_index.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.set_vertex_values_c", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_node_index.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF(__pyx_v_mesh); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_node_index); __Pyx_XDECREF((PyObject *)__pyx_v_number_of_triangles_per_node); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_value_indices); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__9 = PyTuple_Pack(12, __pyx_n_s_quantity, __pyx_n_s_vertices, __pyx_n_s_A, __pyx_n_s_domain, __pyx_n_s_mesh, __pyx_n_s_vertex_values, __pyx_n_s_node_index, __pyx_n_s_number_of_triangles_per_node, __pyx_n_s_vertex_value_indices, __pyx_n_s_N, __pyx_n_s_err, __pyx_n_s_num_verts); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_7set_vertex_values_c, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_vertex_values_c, __pyx_t_1) < 0) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(3, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_set_vertex_values_c, 118, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 118, __pyx_L1_error)
119:
120: cdef object domain
121: cdef object mesh
122:
123: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
124: cdef np.ndarray[long, ndim=1, mode="c"] node_index
125: cdef np.ndarray[long, ndim=1, mode="c"] number_of_triangles_per_node
126: cdef np.ndarray[long, ndim=1, mode="c"] vertex_value_indices
127:
128: cdef keyint N
129: cdef int err
130: cdef keyint num_verts
131:
+132: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
+133: mesh = domain.mesh
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_mesh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_mesh = __pyx_t_1; __pyx_t_1 = 0;
134:
+135: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 135, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 135, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+136: node_index = mesh.node_index
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_node_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 136, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_node_index.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_node_index.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_node_index.rcbuffer->pybuffer, (PyObject*)__pyx_v_node_index, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_node_index.diminfo[0].strides = __pyx_pybuffernd_node_index.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_node_index.diminfo[0].shape = __pyx_pybuffernd_node_index.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 136, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_node_index = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+137: number_of_triangles_per_node = mesh.number_of_triangles_per_node
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_number_of_triangles_per_node); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 137, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer, (PyObject*)__pyx_v_number_of_triangles_per_node, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].shape = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 137, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_number_of_triangles_per_node = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+138: vertex_value_indices = mesh.vertex_value_indices
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_vertex_value_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 138, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_value_indices, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_value_indices.diminfo[0].shape = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 138, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_vertex_value_indices = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
139:
+140: num_verts = vertices.shape[0]
__pyx_v_num_verts = (__pyx_v_vertices->dimensions[0]);
141:
+142: err = _set_vertex_values_c(num_verts, &vertices[0], &node_index[0], &number_of_triangles_per_node[0], &vertex_value_indices[0], &vertex_values[0,0], &A[0])
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_v_err = _set_vertex_values_c(__pyx_v_num_verts, (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_vertices.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_vertices.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_node_index.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_node_index.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_A.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_A.diminfo[0].strides))));
143:
144:
+145: def interpolate(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_9interpolate(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_9interpolate = {"interpolate", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_9interpolate, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_9interpolate(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_8interpolate(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_8interpolate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__11 = PyTuple_Pack(6, __pyx_n_s_quantity, __pyx_n_s_vertex_values, __pyx_n_s_edge_values, __pyx_n_s_centroid_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_9interpolate, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_interpolate, __pyx_t_1) < 0) __PYX_ERR(0, 145, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_interpolate, 145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 145, __pyx_L1_error)
146:
147: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
148: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
149: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
150:
151: cdef keyint N
152: cdef int err
153:
+154: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 154, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 154, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+155: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 155, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 155, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+156: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 156, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 156, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
157:
+158: N = vertex_values.shape[0]
__pyx_v_N = (__pyx_v_vertex_values->dimensions[0]);
159:
+160: err = _interpolate(N, &vertex_values[0,0], &edge_values[0,0], ¢roid_values[0])
__pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_v_err = _interpolate(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_centroid_values.diminfo[0].strides))));
161:
+162: assert err == 0, "Interpolate could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Interpolate_could_not_be_compute); __PYX_ERR(0, 162, __pyx_L1_error) } } #endif
163:
+164: def interpolate_from_vertices_to_edges(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_11interpolate_from_vertices_to_edges(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_11interpolate_from_vertices_to_edges = {"interpolate_from_vertices_to_edges", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_11interpolate_from_vertices_to_edges, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_11interpolate_from_vertices_to_edges(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate_from_vertices_to_edges (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_10interpolate_from_vertices_to_edges(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_10interpolate_from_vertices_to_edges(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_edge_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate_from_vertices_to_edges", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.interpolate_from_vertices_to_edges", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__13 = PyTuple_Pack(5, __pyx_n_s_quantity, __pyx_n_s_vertex_values, __pyx_n_s_edge_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__13); __Pyx_GIVEREF(__pyx_tuple__13); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_11interpolate_from_vertices_to_edges, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_interpolate_from_vertices_to_edg, __pyx_t_1) < 0) __PYX_ERR(0, 164, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_interpolate_from_vertices_to_edg, 164, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 164, __pyx_L1_error)
165:
166: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
167: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
168:
169: cdef keyint N
170: cdef int err
171:
+172: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 172, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 172, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+173: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 173, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 173, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
174:
+175: N = vertex_values.shape[0]
__pyx_v_N = (__pyx_v_vertex_values->dimensions[0]);
176:
+177: err = _interpolate_from_vertices_to_edges(N, &vertex_values[0,0], &edge_values[0,0])
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_v_err = _interpolate_from_vertices_to_edges(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_edge_values.diminfo[1].strides))));
178:
+179: assert err == 0, "Interpolate could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Interpolate_could_not_be_compute); __PYX_ERR(0, 179, __pyx_L1_error) } } #endif
180:
+181: def interpolate_from_edges_to_vertices(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_13interpolate_from_edges_to_vertices(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_13interpolate_from_edges_to_vertices = {"interpolate_from_edges_to_vertices", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_13interpolate_from_edges_to_vertices, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_13interpolate_from_edges_to_vertices(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate_from_edges_to_vertices (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_12interpolate_from_edges_to_vertices(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_12interpolate_from_edges_to_vertices(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_edge_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("interpolate_from_edges_to_vertices", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.interpolate_from_edges_to_vertices", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__15 = PyTuple_Pack(5, __pyx_n_s_quantity, __pyx_n_s_vertex_values, __pyx_n_s_edge_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_13interpolate_from_edges_to_vertices, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_interpolate_from_edges_to_vertic, __pyx_t_1) < 0) __PYX_ERR(0, 181, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_interpolate_from_edges_to_vertic, 181, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 181, __pyx_L1_error)
182:
183: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
184: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
185:
186: cdef keyint N
187: cdef int err
188:
+189: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 189, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 189, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 189, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+190: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 190, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 190, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
191:
+192: N = vertex_values.shape[0]
__pyx_v_N = (__pyx_v_vertex_values->dimensions[0]);
193:
+194: err = _interpolate_from_edges_to_vertices(N, &vertex_values[0,0], &edge_values[0,0])
__pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_v_err = _interpolate_from_edges_to_vertices(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_edge_values.diminfo[1].strides))));
195:
+196: assert err == 0, "Interpolate could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Interpolate_could_not_be_compute); __PYX_ERR(0, 196, __pyx_L1_error) } } #endif
197:
+198: def average_vertex_values(np.ndarray[long, ndim=1, mode="c"] vertex_value_indices not None, np.ndarray[long, ndim=1, mode="c"] number_of_triangles_per_node not None, np.ndarray[double, ndim=2, mode="c"] vertex_values not None, np.ndarray[double, ndim=1, mode="c"] A not None):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_15average_vertex_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_15average_vertex_values = {"average_vertex_values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_15average_vertex_values, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_15average_vertex_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_vertex_value_indices = 0; PyArrayObject *__pyx_v_number_of_triangles_per_node = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_A = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("average_vertex_values (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vertex_value_indices,&__pyx_n_s_number_of_triangles_per_node,&__pyx_n_s_vertex_values,&__pyx_n_s_A,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vertex_value_indices)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_number_of_triangles_per_node)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_vertex_values", 1, 4, 4, 1); __PYX_ERR(0, 198, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vertex_values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_vertex_values", 1, 4, 4, 2); __PYX_ERR(0, 198, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_vertex_values", 1, 4, 4, 3); __PYX_ERR(0, 198, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "average_vertex_values") < 0)) __PYX_ERR(0, 198, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_vertex_value_indices = ((PyArrayObject *)values[0]); __pyx_v_number_of_triangles_per_node = ((PyArrayObject *)values[1]); __pyx_v_vertex_values = ((PyArrayObject *)values[2]); __pyx_v_A = ((PyArrayObject *)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("average_vertex_values", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 198, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.average_vertex_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertex_value_indices), __pyx_ptype_5numpy_ndarray, 0, "vertex_value_indices", 0))) __PYX_ERR(0, 198, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_number_of_triangles_per_node), __pyx_ptype_5numpy_ndarray, 0, "number_of_triangles_per_node", 0))) __PYX_ERR(0, 198, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertex_values), __pyx_ptype_5numpy_ndarray, 0, "vertex_values", 0))) __PYX_ERR(0, 198, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_5numpy_ndarray, 0, "A", 0))) __PYX_ERR(0, 198, __pyx_L1_error) __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_14average_vertex_values(__pyx_self, __pyx_v_vertex_value_indices, __pyx_v_number_of_triangles_per_node, __pyx_v_vertex_values, __pyx_v_A); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_14average_vertex_values(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_vertex_value_indices, PyArrayObject *__pyx_v_number_of_triangles_per_node, PyArrayObject *__pyx_v_vertex_values, PyArrayObject *__pyx_v_A) { __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_A; __Pyx_Buffer __pyx_pybuffer_A; __Pyx_LocalBuf_ND __pyx_pybuffernd_number_of_triangles_per_node; __Pyx_Buffer __pyx_pybuffer_number_of_triangles_per_node; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_value_indices; __Pyx_Buffer __pyx_pybuffer_vertex_value_indices; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("average_vertex_values", 0); __pyx_pybuffer_vertex_value_indices.pybuffer.buf = NULL; __pyx_pybuffer_vertex_value_indices.refcount = 0; __pyx_pybuffernd_vertex_value_indices.data = NULL; __pyx_pybuffernd_vertex_value_indices.rcbuffer = &__pyx_pybuffer_vertex_value_indices; __pyx_pybuffer_number_of_triangles_per_node.pybuffer.buf = NULL; __pyx_pybuffer_number_of_triangles_per_node.refcount = 0; __pyx_pybuffernd_number_of_triangles_per_node.data = NULL; __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer = &__pyx_pybuffer_number_of_triangles_per_node; __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_A.pybuffer.buf = NULL; __pyx_pybuffer_A.refcount = 0; __pyx_pybuffernd_A.data = NULL; __pyx_pybuffernd_A.rcbuffer = &__pyx_pybuffer_A; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_value_indices, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 198, __pyx_L1_error) } __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_value_indices.diminfo[0].shape = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer, (PyObject*)__pyx_v_number_of_triangles_per_node, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 198, __pyx_L1_error) } __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].shape = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 198, __pyx_L1_error) } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_A.rcbuffer->pybuffer, (PyObject*)__pyx_v_A, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 198, __pyx_L1_error) } __pyx_pybuffernd_A.diminfo[0].strides = __pyx_pybuffernd_A.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_A.diminfo[0].shape = __pyx_pybuffernd_A.rcbuffer->pybuffer.shape[0]; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.average_vertex_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__17 = PyTuple_Pack(6, __pyx_n_s_vertex_value_indices, __pyx_n_s_number_of_triangles_per_node, __pyx_n_s_vertex_values, __pyx_n_s_A, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_15average_vertex_values, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_average_vertex_values, __pyx_t_1) < 0) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_average_vertex_values, 198, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 198, __pyx_L1_error)
199:
200: cdef keyint N
201: cdef int err
202:
+203: N = vertex_value_indices.shape[0]
__pyx_v_N = (__pyx_v_vertex_value_indices->dimensions[0]);
204:
+205: err = _average_vertex_values(N, &vertex_value_indices[0], &number_of_triangles_per_node[0], &vertex_values[0,0], &A[0])
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_v_err = _average_vertex_values(__pyx_v_N, (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.buf, __pyx_t_1, __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.buf, __pyx_t_2, __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_4, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_A.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_A.diminfo[0].strides))));
206:
+207: assert err == 0, "average_vertex_values could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_average_vertex_values_could_not); __PYX_ERR(0, 207, __pyx_L1_error) } } #endif
208:
+209: def average_centroid_values(np.ndarray[long, ndim=1, mode="c"] vertex_value_indices not None, np.ndarray[long, ndim=1, mode="c"] number_of_triangles_per_node not None, np.ndarray[double, ndim=1, mode="c"] centroid_values not None, np.ndarray[double, ndim=1, mode="c"] A not None):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_17average_centroid_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_17average_centroid_values = {"average_centroid_values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_17average_centroid_values, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_17average_centroid_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_vertex_value_indices = 0; PyArrayObject *__pyx_v_number_of_triangles_per_node = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_A = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("average_centroid_values (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vertex_value_indices,&__pyx_n_s_number_of_triangles_per_node,&__pyx_n_s_centroid_values,&__pyx_n_s_A,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vertex_value_indices)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_number_of_triangles_per_node)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_centroid_values", 1, 4, 4, 1); __PYX_ERR(0, 209, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_centroid_values)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_centroid_values", 1, 4, 4, 2); __PYX_ERR(0, 209, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("average_centroid_values", 1, 4, 4, 3); __PYX_ERR(0, 209, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "average_centroid_values") < 0)) __PYX_ERR(0, 209, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_vertex_value_indices = ((PyArrayObject *)values[0]); __pyx_v_number_of_triangles_per_node = ((PyArrayObject *)values[1]); __pyx_v_centroid_values = ((PyArrayObject *)values[2]); __pyx_v_A = ((PyArrayObject *)values[3]); } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("average_centroid_values", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 209, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.average_centroid_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertex_value_indices), __pyx_ptype_5numpy_ndarray, 0, "vertex_value_indices", 0))) __PYX_ERR(0, 209, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_number_of_triangles_per_node), __pyx_ptype_5numpy_ndarray, 0, "number_of_triangles_per_node", 0))) __PYX_ERR(0, 209, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_centroid_values), __pyx_ptype_5numpy_ndarray, 0, "centroid_values", 0))) __PYX_ERR(0, 209, __pyx_L1_error) if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_5numpy_ndarray, 0, "A", 0))) __PYX_ERR(0, 209, __pyx_L1_error) __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_16average_centroid_values(__pyx_self, __pyx_v_vertex_value_indices, __pyx_v_number_of_triangles_per_node, __pyx_v_centroid_values, __pyx_v_A); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_16average_centroid_values(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_vertex_value_indices, PyArrayObject *__pyx_v_number_of_triangles_per_node, PyArrayObject *__pyx_v_centroid_values, PyArrayObject *__pyx_v_A) { __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_A; __Pyx_Buffer __pyx_pybuffer_A; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_number_of_triangles_per_node; __Pyx_Buffer __pyx_pybuffer_number_of_triangles_per_node; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_value_indices; __Pyx_Buffer __pyx_pybuffer_vertex_value_indices; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("average_centroid_values", 0); __pyx_pybuffer_vertex_value_indices.pybuffer.buf = NULL; __pyx_pybuffer_vertex_value_indices.refcount = 0; __pyx_pybuffernd_vertex_value_indices.data = NULL; __pyx_pybuffernd_vertex_value_indices.rcbuffer = &__pyx_pybuffer_vertex_value_indices; __pyx_pybuffer_number_of_triangles_per_node.pybuffer.buf = NULL; __pyx_pybuffer_number_of_triangles_per_node.refcount = 0; __pyx_pybuffernd_number_of_triangles_per_node.data = NULL; __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer = &__pyx_pybuffer_number_of_triangles_per_node; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_A.pybuffer.buf = NULL; __pyx_pybuffer_A.refcount = 0; __pyx_pybuffernd_A.data = NULL; __pyx_pybuffernd_A.rcbuffer = &__pyx_pybuffer_A; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_value_indices, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 209, __pyx_L1_error) } __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_value_indices.diminfo[0].shape = __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer, (PyObject*)__pyx_v_number_of_triangles_per_node, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 209, __pyx_L1_error) } __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].shape = __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 209, __pyx_L1_error) } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_A.rcbuffer->pybuffer, (PyObject*)__pyx_v_A, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 209, __pyx_L1_error) } __pyx_pybuffernd_A.diminfo[0].strides = __pyx_pybuffernd_A.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_A.diminfo[0].shape = __pyx_pybuffernd_A.rcbuffer->pybuffer.shape[0]; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.average_centroid_values", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_A.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__19 = PyTuple_Pack(6, __pyx_n_s_vertex_value_indices, __pyx_n_s_number_of_triangles_per_node, __pyx_n_s_centroid_values, __pyx_n_s_A, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 209, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_17average_centroid_values, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_average_centroid_values, __pyx_t_1) < 0) __PYX_ERR(0, 209, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_average_centroid_values, 209, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 209, __pyx_L1_error)
210:
211: cdef keyint N
212: cdef int err
213:
+214: N = vertex_value_indices.shape[0]
__pyx_v_N = (__pyx_v_vertex_value_indices->dimensions[0]);
215:
+216: err = _average_centroid_values(N, &vertex_value_indices[0], &number_of_triangles_per_node[0], ¢roid_values[0], &A[0])
__pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_v_err = _average_centroid_values(__pyx_v_N, (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_vertex_value_indices.rcbuffer->pybuffer.buf, __pyx_t_1, __pyx_pybuffernd_vertex_value_indices.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_number_of_triangles_per_node.rcbuffer->pybuffer.buf, __pyx_t_2, __pyx_pybuffernd_number_of_triangles_per_node.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_A.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_A.diminfo[0].strides))));
217:
+218: assert err == 0, "average_centroid_values could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_average_centroid_values_could_no); __PYX_ERR(0, 218, __pyx_L1_error) } } #endif
219:
+220: def extrapolate_from_gradient(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_19extrapolate_from_gradient(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_19extrapolate_from_gradient = {"extrapolate_from_gradient", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_19extrapolate_from_gradient, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_19extrapolate_from_gradient(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_from_gradient (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_18extrapolate_from_gradient(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_18extrapolate_from_gradient(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_centroids = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_vertex_coordinates = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_edge_values = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_number_of_boundaries = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_surrogate_neighbours = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroids; __Pyx_Buffer __pyx_pybuffer_centroids; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_number_of_boundaries; __Pyx_Buffer __pyx_pybuffer_number_of_boundaries; __Pyx_LocalBuf_ND __pyx_pybuffernd_surrogate_neighbours; __Pyx_Buffer __pyx_pybuffer_surrogate_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_coordinates; __Pyx_Buffer __pyx_pybuffer_vertex_coordinates; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_from_gradient", 0); __pyx_pybuffer_centroids.pybuffer.buf = NULL; __pyx_pybuffer_centroids.refcount = 0; __pyx_pybuffernd_centroids.data = NULL; __pyx_pybuffernd_centroids.rcbuffer = &__pyx_pybuffer_centroids; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_vertex_coordinates.pybuffer.buf = NULL; __pyx_pybuffer_vertex_coordinates.refcount = 0; __pyx_pybuffernd_vertex_coordinates.data = NULL; __pyx_pybuffernd_vertex_coordinates.rcbuffer = &__pyx_pybuffer_vertex_coordinates; __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_number_of_boundaries.pybuffer.buf = NULL; __pyx_pybuffer_number_of_boundaries.refcount = 0; __pyx_pybuffernd_number_of_boundaries.data = NULL; __pyx_pybuffernd_number_of_boundaries.rcbuffer = &__pyx_pybuffer_number_of_boundaries; __pyx_pybuffer_surrogate_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_surrogate_neighbours.refcount = 0; __pyx_pybuffernd_surrogate_neighbours.data = NULL; __pyx_pybuffernd_surrogate_neighbours.rcbuffer = &__pyx_pybuffer_surrogate_neighbours; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.extrapolate_from_gradient", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_centroids); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_coordinates); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_number_of_boundaries); __Pyx_XDECREF((PyObject *)__pyx_v_surrogate_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__21 = PyTuple_Pack(13, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_centroids, __pyx_n_s_centroid_values, __pyx_n_s_vertex_coordinates, __pyx_n_s_vertex_values, __pyx_n_s_edge_values, __pyx_n_s_number_of_boundaries, __pyx_n_s_surrogate_neighbours, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_19extrapolate_from_gradient, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_extrapolate_from_gradient, __pyx_t_1) < 0) __PYX_ERR(0, 220, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_extrapolate_from_gradient, 220, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 220, __pyx_L1_error)
221:
222: cdef object domain
223:
224: cdef np.ndarray[double, ndim=2, mode="c"] centroids
225: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
226: cdef np.ndarray[double, ndim=2, mode="c"] vertex_coordinates
227: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
228: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
229: cdef np.ndarray[long, ndim=1, mode="c"] number_of_boundaries
230: cdef np.ndarray[long, ndim=2, mode="c"] surrogate_neighbours
231: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
232: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
233:
234: cdef keyint N
235: cdef int err
236:
+237: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
238:
+239: centroids = domain.centroid_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_centroid_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 239, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroids, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroids.diminfo[0].strides = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroids.diminfo[0].shape = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_centroids.diminfo[1].strides = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_centroids.diminfo[1].shape = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 239, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroids = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+240: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 240, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 240, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+241: surrogate_neighbours = domain.surrogate_neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_surrogate_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 241, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_surrogate_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_surrogate_neighbours.diminfo[0].strides = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_surrogate_neighbours.diminfo[0].shape = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_surrogate_neighbours.diminfo[1].strides = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_surrogate_neighbours.diminfo[1].shape = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 241, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_surrogate_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+242: number_of_boundaries = domain.number_of_boundaries
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_number_of_boundaries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 242, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_v_number_of_boundaries, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_number_of_boundaries.diminfo[0].strides = __pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_number_of_boundaries.diminfo[0].shape = __pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 242, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_number_of_boundaries = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+243: vertex_coordinates = domain.vertex_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_vertex_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 243, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_coordinates, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_coordinates.diminfo[0].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[0].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 243, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_vertex_coordinates = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+244: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 244, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 244, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+245: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 245, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 245, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+246: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 246, __pyx_L1_error) __pyx_t_13 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 246, __pyx_L1_error) } __pyx_t_13 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+247: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 247, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 247, __pyx_L1_error) } __pyx_t_14 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
248:
+249: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
250:
+251: err = _extrapolate_from_gradient(N,\
__pyx_v_err = _extrapolate_from_gradient(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_centroids.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_centroids.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_vertex_coordinates.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_vertex_coordinates.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+252: ¢roids[0,0],\
__pyx_t_15 = 0; __pyx_t_16 = 0;
+253: ¢roid_values[0],\
__pyx_t_17 = 0;
+254: &vertex_coordinates[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+255: &vertex_values[0,0],\
__pyx_t_20 = 0; __pyx_t_21 = 0;
+256: &edge_values[0,0],\
__pyx_t_22 = 0; __pyx_t_23 = 0;
+257: &x_gradient[0],\
__pyx_t_24 = 0;
+258: &y_gradient[0])
__pyx_t_25 = 0;
259:
+260: assert err == 0, "Internal function _extrapolate failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__extrapolate_f); __PYX_ERR(0, 260, __pyx_L1_error) } } #endif
261:
+262: def compute_local_gradients(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_21compute_local_gradients(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_21compute_local_gradients = {"compute_local_gradients", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_21compute_local_gradients, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_21compute_local_gradients(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compute_local_gradients (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_20compute_local_gradients(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_20compute_local_gradients(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_coordinates = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_coordinates; __Pyx_Buffer __pyx_pybuffer_vertex_coordinates; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compute_local_gradients", 0); __pyx_pybuffer_vertex_coordinates.pybuffer.buf = NULL; __pyx_pybuffer_vertex_coordinates.refcount = 0; __pyx_pybuffernd_vertex_coordinates.data = NULL; __pyx_pybuffernd_vertex_coordinates.rcbuffer = &__pyx_pybuffer_vertex_coordinates; __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.compute_local_gradients", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_coordinates); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__23 = PyTuple_Pack(8, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_coordinates, __pyx_n_s_vertex_values, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_21compute_local_gradients, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_compute_local_gradients, __pyx_t_1) < 0) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_compute_local_gradients, 262, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 262, __pyx_L1_error)
263:
264: cdef object domain
265:
266: cdef np.ndarray[double, ndim=2, mode="c"] vertex_coordinates
267: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
268: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
269: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
270:
271: cdef keyint N
272: cdef int err
273:
+274: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
275:
+276: vertex_coordinates = domain.vertex_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_vertex_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 276, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_coordinates, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_coordinates.diminfo[0].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[0].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 276, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_vertex_coordinates = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+277: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 277, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 277, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+278: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 278, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 278, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 278, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+279: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 279, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 279, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
280:
+281: N = vertex_values.shape[0]
__pyx_v_N = (__pyx_v_vertex_values->dimensions[0]);
282:
+283: err = _compute_local_gradients(N, &vertex_coordinates[0,0], &vertex_values[0,0], &x_gradient[0], &y_gradient[0])
__pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_v_err = _compute_local_gradients(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_vertex_coordinates.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_vertex_coordinates.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
284:
+285: assert err == 0, "Internal function _compute_local_gradient failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__compute_local); __PYX_ERR(0, 285, __pyx_L1_error) } } #endif
286:
+287: def extrapolate_second_order_and_limit_by_edge(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_23extrapolate_second_order_and_limit_by_edge(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_23extrapolate_second_order_and_limit_by_edge = {"extrapolate_second_order_and_limit_by_edge", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_23extrapolate_second_order_and_limit_by_edge, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_23extrapolate_second_order_and_limit_by_edge(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_second_order_and_limit_by_edge (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_22extrapolate_second_order_and_limit_by_edge(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_22extrapolate_second_order_and_limit_by_edge(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_domain_centroids = 0; PyArrayObject *__pyx_v_domain_vertex_coordinates = 0; PyArrayObject *__pyx_v_domain_number_of_boundaries = 0; PyArrayObject *__pyx_v_domain_surrogate_neighbours = 0; PyArrayObject *__pyx_v_domain_neighbours = 0; PyArrayObject *__pyx_v_quantity_centroid_values = 0; PyArrayObject *__pyx_v_quantity_vertex_values = 0; PyArrayObject *__pyx_v_quantity_edge_values = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_quantity_phi = 0; PyArrayObject *__pyx_v_quantity_x_gradient = 0; PyArrayObject *__pyx_v_quantity_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_ntri; double __pyx_v_beta; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_centroids; __Pyx_Buffer __pyx_pybuffer_domain_centroids; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_neighbours; __Pyx_Buffer __pyx_pybuffer_domain_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_number_of_boundaries; __Pyx_Buffer __pyx_pybuffer_domain_number_of_boundaries; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_surrogate_neighbours; __Pyx_Buffer __pyx_pybuffer_domain_surrogate_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_vertex_coordinates; __Pyx_Buffer __pyx_pybuffer_domain_vertex_coordinates; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_centroid_values; __Pyx_Buffer __pyx_pybuffer_quantity_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_edge_values; __Pyx_Buffer __pyx_pybuffer_quantity_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_phi; __Pyx_Buffer __pyx_pybuffer_quantity_phi; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_vertex_values; __Pyx_Buffer __pyx_pybuffer_quantity_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_x_gradient; __Pyx_Buffer __pyx_pybuffer_quantity_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_y_gradient; __Pyx_Buffer __pyx_pybuffer_quantity_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_second_order_and_limit_by_edge", 0); __pyx_pybuffer_domain_centroids.pybuffer.buf = NULL; __pyx_pybuffer_domain_centroids.refcount = 0; __pyx_pybuffernd_domain_centroids.data = NULL; __pyx_pybuffernd_domain_centroids.rcbuffer = &__pyx_pybuffer_domain_centroids; __pyx_pybuffer_domain_vertex_coordinates.pybuffer.buf = NULL; __pyx_pybuffer_domain_vertex_coordinates.refcount = 0; __pyx_pybuffernd_domain_vertex_coordinates.data = NULL; __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer = &__pyx_pybuffer_domain_vertex_coordinates; __pyx_pybuffer_domain_number_of_boundaries.pybuffer.buf = NULL; __pyx_pybuffer_domain_number_of_boundaries.refcount = 0; __pyx_pybuffernd_domain_number_of_boundaries.data = NULL; __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer = &__pyx_pybuffer_domain_number_of_boundaries; __pyx_pybuffer_domain_surrogate_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_domain_surrogate_neighbours.refcount = 0; __pyx_pybuffernd_domain_surrogate_neighbours.data = NULL; __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer = &__pyx_pybuffer_domain_surrogate_neighbours; __pyx_pybuffer_domain_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_domain_neighbours.refcount = 0; __pyx_pybuffernd_domain_neighbours.data = NULL; __pyx_pybuffernd_domain_neighbours.rcbuffer = &__pyx_pybuffer_domain_neighbours; __pyx_pybuffer_quantity_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_centroid_values.refcount = 0; __pyx_pybuffernd_quantity_centroid_values.data = NULL; __pyx_pybuffernd_quantity_centroid_values.rcbuffer = &__pyx_pybuffer_quantity_centroid_values; __pyx_pybuffer_quantity_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_vertex_values.refcount = 0; __pyx_pybuffernd_quantity_vertex_values.data = NULL; __pyx_pybuffernd_quantity_vertex_values.rcbuffer = &__pyx_pybuffer_quantity_vertex_values; __pyx_pybuffer_quantity_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_edge_values.refcount = 0; __pyx_pybuffernd_quantity_edge_values.data = NULL; __pyx_pybuffernd_quantity_edge_values.rcbuffer = &__pyx_pybuffer_quantity_edge_values; __pyx_pybuffer_quantity_phi.pybuffer.buf = NULL; __pyx_pybuffer_quantity_phi.refcount = 0; __pyx_pybuffernd_quantity_phi.data = NULL; __pyx_pybuffernd_quantity_phi.rcbuffer = &__pyx_pybuffer_quantity_phi; __pyx_pybuffer_quantity_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_quantity_x_gradient.refcount = 0; __pyx_pybuffernd_quantity_x_gradient.data = NULL; __pyx_pybuffernd_quantity_x_gradient.rcbuffer = &__pyx_pybuffer_quantity_x_gradient; __pyx_pybuffer_quantity_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_quantity_y_gradient.refcount = 0; __pyx_pybuffernd_quantity_y_gradient.data = NULL; __pyx_pybuffernd_quantity_y_gradient.rcbuffer = &__pyx_pybuffer_quantity_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.extrapolate_second_order_and_limit_by_edge", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_domain_centroids); __Pyx_XDECREF((PyObject *)__pyx_v_domain_vertex_coordinates); __Pyx_XDECREF((PyObject *)__pyx_v_domain_number_of_boundaries); __Pyx_XDECREF((PyObject *)__pyx_v_domain_surrogate_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_domain_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_phi); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__25 = PyTuple_Pack(16, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_domain_centroids, __pyx_n_s_domain_vertex_coordinates, __pyx_n_s_domain_number_of_boundaries, __pyx_n_s_domain_surrogate_neighbours, __pyx_n_s_domain_neighbours, __pyx_n_s_quantity_centroid_values, __pyx_n_s_quantity_vertex_values, __pyx_n_s_quantity_edge_values, __pyx_n_s_quantity_phi, __pyx_n_s_quantity_x_gradient, __pyx_n_s_quantity_y_gradient, __pyx_n_s_ntri, __pyx_n_s_beta, __pyx_n_s_err); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 287, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_23extrapolate_second_order_and_limit_by_edge, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_extrapolate_second_order_and_lim, __pyx_t_1) < 0) __PYX_ERR(0, 287, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_extrapolate_second_order_and_lim, 287, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 287, __pyx_L1_error)
288:
289: cdef object domain
290:
291: cdef np.ndarray[double, ndim=2, mode="c"] domain_centroids
292: cdef np.ndarray[double, ndim=2, mode="c"] domain_vertex_coordinates
293: cdef np.ndarray[long, ndim=1, mode="c"] domain_number_of_boundaries
294: cdef np.ndarray[long, ndim=2, mode="c"] domain_surrogate_neighbours
295: cdef np.ndarray[long, ndim=2, mode="c"] domain_neighbours
296:
297: cdef np.ndarray[double, ndim=1, mode="c"] quantity_centroid_values
298: cdef np.ndarray[double, ndim=2, mode="c"] quantity_vertex_values
299: cdef np.ndarray[double, ndim=2, mode="c"] quantity_edge_values
300: cdef np.ndarray[double, ndim=1, mode="c"] quantity_phi
301: cdef np.ndarray[double, ndim=1, mode="c"] quantity_x_gradient
302: cdef np.ndarray[double, ndim=1, mode="c"] quantity_y_gradient
303:
304: cdef keyint ntri
305: cdef double beta
306: cdef int err
307:
+308: domain = quantity.object
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_object); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
309:
+310: domain_centroids = domain.centroid_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_centroid_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 310, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_centroids, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_centroids.diminfo[0].strides = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_centroids.diminfo[0].shape = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_centroids.diminfo[1].strides = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_centroids.diminfo[1].shape = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 310, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_domain_centroids = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+311: domain_surrogate_neighbours = domain.surrogate_neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_surrogate_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 311, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_surrogate_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].strides = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].shape = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].strides = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].shape = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 311, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_domain_surrogate_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+312: domain_number_of_boundaries = domain.number_of_boundaries
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_number_of_boundaries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 312, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_number_of_boundaries, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].strides = __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].shape = __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 312, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_domain_number_of_boundaries = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+313: domain_vertex_coordinates = domain.vertex_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_vertex_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 313, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_vertex_coordinates, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].strides = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].shape = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].strides = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].shape = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 313, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_domain_vertex_coordinates = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+314: domain_neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 314, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_neighbours.diminfo[0].strides = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_neighbours.diminfo[0].shape = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_neighbours.diminfo[1].strides = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_neighbours.diminfo[1].shape = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 314, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_domain_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
315:
+316: quantity_centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 316, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides = __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_centroid_values.diminfo[0].shape = __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 316, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_quantity_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+317: quantity_vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 317, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_vertex_values.diminfo[0].shape = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_quantity_vertex_values.diminfo[1].shape = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 317, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_quantity_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+318: quantity_edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 318, __pyx_L1_error) __pyx_t_13 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_edge_values.diminfo[0].shape = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_quantity_edge_values.diminfo[1].shape = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) } __pyx_t_13 = 0; __pyx_v_quantity_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+319: quantity_phi = quantity.phi
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_phi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 319, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_phi, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_phi.diminfo[0].strides = __pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_phi.diminfo[0].shape = __pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 319, __pyx_L1_error) } __pyx_t_14 = 0; __pyx_v_quantity_phi = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+320: quantity_x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 320, __pyx_L1_error) __pyx_t_15 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides = __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_x_gradient.diminfo[0].shape = __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 320, __pyx_L1_error) } __pyx_t_15 = 0; __pyx_v_quantity_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+321: quantity_y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 321, __pyx_L1_error) __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides = __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_y_gradient.diminfo[0].shape = __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 321, __pyx_L1_error) } __pyx_t_16 = 0; __pyx_v_quantity_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
322:
+323: beta = quantity.beta
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_beta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta = __pyx_t_17;
324:
+325: ntri = quantity_centroid_values.shape[0]
__pyx_v_ntri = (__pyx_v_quantity_centroid_values->dimensions[0]);
326:
+327: err = _compute_gradients(ntri,\
__pyx_v_err = _compute_gradients(__pyx_v_ntri, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_domain_centroids.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_domain_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+328: &domain_centroids[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+329: &quantity_centroid_values[0],\
__pyx_t_20 = 0;
+330: &domain_number_of_boundaries[0],\
__pyx_t_21 = 0;
+331: &domain_surrogate_neighbours[0,0],\
__pyx_t_22 = 0; __pyx_t_23 = 0;
+332: &quantity_x_gradient[0],\
__pyx_t_24 = 0;
+333: &quantity_y_gradient[0])
__pyx_t_25 = 0;
334:
+335: assert err == 0, "Internal function _compute_gradient failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__compute_gradi); __PYX_ERR(0, 335, __pyx_L1_error) } } #endif
336:
+337: err = _extrapolate_from_gradient(ntri,\
__pyx_v_err = _extrapolate_from_gradient(__pyx_v_ntri, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_domain_centroids.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_domain_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+338: &domain_centroids[0,0],\
__pyx_t_25 = 0; __pyx_t_24 = 0;
+339: &quantity_centroid_values[0],\
__pyx_t_23 = 0;
+340: &domain_vertex_coordinates[0,0],\
__pyx_t_22 = 0; __pyx_t_21 = 0;
+341: &quantity_vertex_values[0,0],\
__pyx_t_20 = 0; __pyx_t_19 = 0;
+342: &quantity_edge_values[0,0],\
__pyx_t_18 = 0; __pyx_t_26 = 0;
+343: &quantity_x_gradient[0],\
__pyx_t_27 = 0;
+344: &quantity_y_gradient[0])
__pyx_t_28 = 0;
345:
+346: assert err == 0, "Internal function _extrapolate_from_gradient failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__extrapolate_f_2); __PYX_ERR(0, 346, __pyx_L1_error) } } #endif
347:
+348: err = _limit_edges_by_all_neighbours(ntri, beta,\
__pyx_v_err = _limit_edges_by_all_neighbours(__pyx_v_ntri, __pyx_v_beta, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_domain_neighbours.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_domain_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+349: &quantity_centroid_values[0],\
__pyx_t_28 = 0;
+350: &quantity_vertex_values[0,0],\
__pyx_t_27 = 0; __pyx_t_26 = 0;
+351: &quantity_edge_values[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+352: &domain_neighbours[0,0],\
__pyx_t_20 = 0; __pyx_t_21 = 0;
+353: &quantity_x_gradient[0],\
__pyx_t_22 = 0;
+354: &quantity_y_gradient[0])
__pyx_t_23 = 0;
355:
+356: assert err == 0, "Internal function _limit_edges_by_all_neighbours failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_edges_b); __PYX_ERR(0, 356, __pyx_L1_error) } } #endif
357:
+358: def extrapolate_second_order_and_limit_by_vertex(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_25extrapolate_second_order_and_limit_by_vertex(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_25extrapolate_second_order_and_limit_by_vertex = {"extrapolate_second_order_and_limit_by_vertex", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_25extrapolate_second_order_and_limit_by_vertex, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_25extrapolate_second_order_and_limit_by_vertex(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_second_order_and_limit_by_vertex (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_24extrapolate_second_order_and_limit_by_vertex(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_24extrapolate_second_order_and_limit_by_vertex(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_domain_centroids = 0; PyArrayObject *__pyx_v_domain_vertex_coordinates = 0; PyArrayObject *__pyx_v_domain_number_of_boundaries = 0; PyArrayObject *__pyx_v_domain_surrogate_neighbours = 0; PyArrayObject *__pyx_v_domain_neighbours = 0; PyArrayObject *__pyx_v_quantity_centroid_values = 0; PyArrayObject *__pyx_v_quantity_vertex_values = 0; PyArrayObject *__pyx_v_quantity_edge_values = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_quantity_phi = 0; PyArrayObject *__pyx_v_quantity_x_gradient = 0; PyArrayObject *__pyx_v_quantity_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_ntri; double __pyx_v_beta; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_centroids; __Pyx_Buffer __pyx_pybuffer_domain_centroids; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_neighbours; __Pyx_Buffer __pyx_pybuffer_domain_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_number_of_boundaries; __Pyx_Buffer __pyx_pybuffer_domain_number_of_boundaries; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_surrogate_neighbours; __Pyx_Buffer __pyx_pybuffer_domain_surrogate_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_domain_vertex_coordinates; __Pyx_Buffer __pyx_pybuffer_domain_vertex_coordinates; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_centroid_values; __Pyx_Buffer __pyx_pybuffer_quantity_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_edge_values; __Pyx_Buffer __pyx_pybuffer_quantity_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_phi; __Pyx_Buffer __pyx_pybuffer_quantity_phi; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_vertex_values; __Pyx_Buffer __pyx_pybuffer_quantity_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_x_gradient; __Pyx_Buffer __pyx_pybuffer_quantity_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_quantity_y_gradient; __Pyx_Buffer __pyx_pybuffer_quantity_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("extrapolate_second_order_and_limit_by_vertex", 0); __pyx_pybuffer_domain_centroids.pybuffer.buf = NULL; __pyx_pybuffer_domain_centroids.refcount = 0; __pyx_pybuffernd_domain_centroids.data = NULL; __pyx_pybuffernd_domain_centroids.rcbuffer = &__pyx_pybuffer_domain_centroids; __pyx_pybuffer_domain_vertex_coordinates.pybuffer.buf = NULL; __pyx_pybuffer_domain_vertex_coordinates.refcount = 0; __pyx_pybuffernd_domain_vertex_coordinates.data = NULL; __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer = &__pyx_pybuffer_domain_vertex_coordinates; __pyx_pybuffer_domain_number_of_boundaries.pybuffer.buf = NULL; __pyx_pybuffer_domain_number_of_boundaries.refcount = 0; __pyx_pybuffernd_domain_number_of_boundaries.data = NULL; __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer = &__pyx_pybuffer_domain_number_of_boundaries; __pyx_pybuffer_domain_surrogate_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_domain_surrogate_neighbours.refcount = 0; __pyx_pybuffernd_domain_surrogate_neighbours.data = NULL; __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer = &__pyx_pybuffer_domain_surrogate_neighbours; __pyx_pybuffer_domain_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_domain_neighbours.refcount = 0; __pyx_pybuffernd_domain_neighbours.data = NULL; __pyx_pybuffernd_domain_neighbours.rcbuffer = &__pyx_pybuffer_domain_neighbours; __pyx_pybuffer_quantity_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_centroid_values.refcount = 0; __pyx_pybuffernd_quantity_centroid_values.data = NULL; __pyx_pybuffernd_quantity_centroid_values.rcbuffer = &__pyx_pybuffer_quantity_centroid_values; __pyx_pybuffer_quantity_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_vertex_values.refcount = 0; __pyx_pybuffernd_quantity_vertex_values.data = NULL; __pyx_pybuffernd_quantity_vertex_values.rcbuffer = &__pyx_pybuffer_quantity_vertex_values; __pyx_pybuffer_quantity_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_quantity_edge_values.refcount = 0; __pyx_pybuffernd_quantity_edge_values.data = NULL; __pyx_pybuffernd_quantity_edge_values.rcbuffer = &__pyx_pybuffer_quantity_edge_values; __pyx_pybuffer_quantity_phi.pybuffer.buf = NULL; __pyx_pybuffer_quantity_phi.refcount = 0; __pyx_pybuffernd_quantity_phi.data = NULL; __pyx_pybuffernd_quantity_phi.rcbuffer = &__pyx_pybuffer_quantity_phi; __pyx_pybuffer_quantity_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_quantity_x_gradient.refcount = 0; __pyx_pybuffernd_quantity_x_gradient.data = NULL; __pyx_pybuffernd_quantity_x_gradient.rcbuffer = &__pyx_pybuffer_quantity_x_gradient; __pyx_pybuffer_quantity_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_quantity_y_gradient.refcount = 0; __pyx_pybuffernd_quantity_y_gradient.data = NULL; __pyx_pybuffernd_quantity_y_gradient.rcbuffer = &__pyx_pybuffer_quantity_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.extrapolate_second_order_and_limit_by_vertex", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_domain_centroids); __Pyx_XDECREF((PyObject *)__pyx_v_domain_vertex_coordinates); __Pyx_XDECREF((PyObject *)__pyx_v_domain_number_of_boundaries); __Pyx_XDECREF((PyObject *)__pyx_v_domain_surrogate_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_domain_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_phi); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_quantity_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__27 = PyTuple_Pack(16, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_domain_centroids, __pyx_n_s_domain_vertex_coordinates, __pyx_n_s_domain_number_of_boundaries, __pyx_n_s_domain_surrogate_neighbours, __pyx_n_s_domain_neighbours, __pyx_n_s_quantity_centroid_values, __pyx_n_s_quantity_vertex_values, __pyx_n_s_quantity_edge_values, __pyx_n_s_quantity_phi, __pyx_n_s_quantity_x_gradient, __pyx_n_s_quantity_y_gradient, __pyx_n_s_ntri, __pyx_n_s_beta, __pyx_n_s_err); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_25extrapolate_second_order_and_limit_by_vertex, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_extrapolate_second_order_and_lim_2, __pyx_t_1) < 0) __PYX_ERR(0, 358, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_extrapolate_second_order_and_lim_2, 358, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 358, __pyx_L1_error)
359:
360: cdef object domain
361:
362: cdef np.ndarray[double, ndim=2, mode="c"] domain_centroids
363: cdef np.ndarray[double, ndim=2, mode="c"] domain_vertex_coordinates
364: cdef np.ndarray[long, ndim=1, mode="c"] domain_number_of_boundaries
365: cdef np.ndarray[long, ndim=2, mode="c"] domain_surrogate_neighbours
366: cdef np.ndarray[long, ndim=2, mode="c"] domain_neighbours
367:
368: cdef np.ndarray[double, ndim=1, mode="c"] quantity_centroid_values
369: cdef np.ndarray[double, ndim=2, mode="c"] quantity_vertex_values
370: cdef np.ndarray[double, ndim=2, mode="c"] quantity_edge_values
371: cdef np.ndarray[double, ndim=1, mode="c"] quantity_phi
372: cdef np.ndarray[double, ndim=1, mode="c"] quantity_x_gradient
373: cdef np.ndarray[double, ndim=1, mode="c"] quantity_y_gradient
374:
375: cdef keyint ntri
376: cdef double beta
377: cdef int err
378:
+379: domain = quantity.object
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_object); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
380:
+381: domain_centroids = domain.centroid_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_centroid_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 381, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_centroids, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_centroids.diminfo[0].strides = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_centroids.diminfo[0].shape = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_centroids.diminfo[1].strides = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_centroids.diminfo[1].shape = __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 381, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_domain_centroids = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+382: domain_surrogate_neighbours = domain.surrogate_neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_surrogate_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 382, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_surrogate_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].strides = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].shape = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].strides = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].shape = __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 382, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_domain_surrogate_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+383: domain_number_of_boundaries = domain.number_of_boundaries
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_number_of_boundaries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 383, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_number_of_boundaries, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].strides = __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].shape = __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 383, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_domain_number_of_boundaries = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+384: domain_vertex_coordinates = domain.vertex_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_vertex_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 384, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_vertex_coordinates, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].strides = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].shape = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].strides = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].shape = __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 384, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_domain_vertex_coordinates = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+385: domain_neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 385, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_domain_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_domain_neighbours.diminfo[0].strides = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_domain_neighbours.diminfo[0].shape = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_domain_neighbours.diminfo[1].strides = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_domain_neighbours.diminfo[1].shape = __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 385, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_domain_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
386:
+387: quantity_centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 387, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides = __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_centroid_values.diminfo[0].shape = __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 387, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_quantity_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+388: quantity_vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 388, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_vertex_values.diminfo[0].shape = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_quantity_vertex_values.diminfo[1].shape = __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 388, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_quantity_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+389: quantity_edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 389, __pyx_L1_error) __pyx_t_13 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_edge_values.diminfo[0].shape = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_quantity_edge_values.diminfo[1].shape = __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 389, __pyx_L1_error) } __pyx_t_13 = 0; __pyx_v_quantity_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+390: quantity_phi = quantity.phi
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_phi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 390, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_phi, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_phi.diminfo[0].strides = __pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_phi.diminfo[0].shape = __pyx_pybuffernd_quantity_phi.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 390, __pyx_L1_error) } __pyx_t_14 = 0; __pyx_v_quantity_phi = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+391: quantity_x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 391, __pyx_L1_error) __pyx_t_15 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides = __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_x_gradient.diminfo[0].shape = __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 391, __pyx_L1_error) } __pyx_t_15 = 0; __pyx_v_quantity_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+392: quantity_y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 392, __pyx_L1_error) __pyx_t_16 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_quantity_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides = __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_quantity_y_gradient.diminfo[0].shape = __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 392, __pyx_L1_error) } __pyx_t_16 = 0; __pyx_v_quantity_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
393:
+394: beta = quantity.beta
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_beta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_17 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_17 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 394, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta = __pyx_t_17;
395:
+396: ntri = quantity_centroid_values.shape[0]
__pyx_v_ntri = (__pyx_v_quantity_centroid_values->dimensions[0]);
397:
+398: err = _compute_gradients(ntri,\
__pyx_v_err = _compute_gradients(__pyx_v_ntri, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_domain_centroids.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_domain_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_domain_number_of_boundaries.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_domain_number_of_boundaries.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_domain_surrogate_neighbours.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_domain_surrogate_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+399: &domain_centroids[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+400: &quantity_centroid_values[0],\
__pyx_t_20 = 0;
+401: &domain_number_of_boundaries[0],\
__pyx_t_21 = 0;
+402: &domain_surrogate_neighbours[0,0],\
__pyx_t_22 = 0; __pyx_t_23 = 0;
+403: &quantity_x_gradient[0],\
__pyx_t_24 = 0;
+404: &quantity_y_gradient[0])
__pyx_t_25 = 0;
405:
+406: assert err == 0, "Internal function _compute_gradient failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__compute_gradi); __PYX_ERR(0, 406, __pyx_L1_error) } } #endif
407:
+408: err = _extrapolate_from_gradient(ntri,\
__pyx_v_err = _extrapolate_from_gradient(__pyx_v_ntri, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_centroids.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_domain_centroids.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_domain_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_domain_vertex_coordinates.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_domain_vertex_coordinates.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_domain_vertex_coordinates.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+409: &domain_centroids[0,0],\
__pyx_t_25 = 0; __pyx_t_24 = 0;
+410: &quantity_centroid_values[0],\
__pyx_t_23 = 0;
+411: &domain_vertex_coordinates[0,0],\
__pyx_t_22 = 0; __pyx_t_21 = 0;
+412: &quantity_vertex_values[0,0],\
__pyx_t_20 = 0; __pyx_t_19 = 0;
+413: &quantity_edge_values[0,0],\
__pyx_t_18 = 0; __pyx_t_26 = 0;
+414: &quantity_x_gradient[0],\
__pyx_t_27 = 0;
+415: &quantity_y_gradient[0])
__pyx_t_28 = 0;
416:
+417: assert err == 0, "Internal function _extrapolate_from_gradient failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__extrapolate_f_2); __PYX_ERR(0, 417, __pyx_L1_error) } } #endif
418:
+419: err = _limit_vertices_by_all_neighbours(ntri, beta,\
__pyx_v_err = _limit_vertices_by_all_neighbours(__pyx_v_ntri, __pyx_v_beta, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_quantity_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_quantity_vertex_values.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_quantity_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_quantity_edge_values.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_quantity_edge_values.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_quantity_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_domain_neighbours.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_domain_neighbours.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_domain_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_quantity_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_quantity_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_quantity_y_gradient.diminfo[0].strides))));
+420: &quantity_centroid_values[0],\
__pyx_t_28 = 0;
+421: &quantity_vertex_values[0,0],\
__pyx_t_27 = 0; __pyx_t_26 = 0;
+422: &quantity_edge_values[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+423: &domain_neighbours[0,0],\
__pyx_t_20 = 0; __pyx_t_21 = 0;
+424: &quantity_x_gradient[0],\
__pyx_t_22 = 0;
+425: &quantity_y_gradient[0])
__pyx_t_23 = 0;
426:
+427: assert err == 0, "Internal function _limit_edges_by_all_neighbours failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_edges_b); __PYX_ERR(0, 427, __pyx_L1_error) } } #endif
428:
+429: def compute_gradients(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_27compute_gradients(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_27compute_gradients = {"compute_gradients", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_27compute_gradients, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_27compute_gradients(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compute_gradients (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_26compute_gradients(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_26compute_gradients(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_centroids = 0; PyArrayObject *__pyx_v_centroid_values = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_vertex_coordinates = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_vertex_values = 0; CYTHON_UNUSED PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_number_of_boundaries = 0; PyArrayObject *__pyx_v_surrogate_neighbours = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroids; __Pyx_Buffer __pyx_pybuffer_centroids; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_number_of_boundaries; __Pyx_Buffer __pyx_pybuffer_number_of_boundaries; __Pyx_LocalBuf_ND __pyx_pybuffernd_surrogate_neighbours; __Pyx_Buffer __pyx_pybuffer_surrogate_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_coordinates; __Pyx_Buffer __pyx_pybuffer_vertex_coordinates; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compute_gradients", 0); __pyx_pybuffer_centroids.pybuffer.buf = NULL; __pyx_pybuffer_centroids.refcount = 0; __pyx_pybuffernd_centroids.data = NULL; __pyx_pybuffernd_centroids.rcbuffer = &__pyx_pybuffer_centroids; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_vertex_coordinates.pybuffer.buf = NULL; __pyx_pybuffer_vertex_coordinates.refcount = 0; __pyx_pybuffernd_vertex_coordinates.data = NULL; __pyx_pybuffernd_vertex_coordinates.rcbuffer = &__pyx_pybuffer_vertex_coordinates; __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_number_of_boundaries.pybuffer.buf = NULL; __pyx_pybuffer_number_of_boundaries.refcount = 0; __pyx_pybuffernd_number_of_boundaries.data = NULL; __pyx_pybuffernd_number_of_boundaries.rcbuffer = &__pyx_pybuffer_number_of_boundaries; __pyx_pybuffer_surrogate_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_surrogate_neighbours.refcount = 0; __pyx_pybuffernd_surrogate_neighbours.data = NULL; __pyx_pybuffernd_surrogate_neighbours.rcbuffer = &__pyx_pybuffer_surrogate_neighbours; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.compute_gradients", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_centroids); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_coordinates); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_number_of_boundaries); __Pyx_XDECREF((PyObject *)__pyx_v_surrogate_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__29 = PyTuple_Pack(13, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_centroids, __pyx_n_s_centroid_values, __pyx_n_s_vertex_coordinates, __pyx_n_s_vertex_values, __pyx_n_s_edge_values, __pyx_n_s_number_of_boundaries, __pyx_n_s_surrogate_neighbours, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_27compute_gradients, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_compute_gradients, __pyx_t_1) < 0) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_compute_gradients, 429, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 429, __pyx_L1_error)
430:
431: cdef object domain
432:
433: cdef np.ndarray[double, ndim=2, mode="c"] centroids
434: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
435: cdef np.ndarray[double, ndim=2, mode="c"] vertex_coordinates
436: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
437: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
438: cdef np.ndarray[long, ndim=1, mode="c"] number_of_boundaries
439: cdef np.ndarray[long, ndim=2, mode="c"] surrogate_neighbours
440: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
441: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
442:
443: cdef keyint N
444: cdef int err
445:
+446: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
447:
+448: centroids = domain.centroid_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_centroid_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 448, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroids.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroids, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroids.diminfo[0].strides = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroids.diminfo[0].shape = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_centroids.diminfo[1].strides = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_centroids.diminfo[1].shape = __pyx_pybuffernd_centroids.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 448, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroids = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+449: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 449, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 449, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+450: surrogate_neighbours = domain.surrogate_neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_surrogate_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 450, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 450, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_surrogate_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_surrogate_neighbours.diminfo[0].strides = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_surrogate_neighbours.diminfo[0].shape = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_surrogate_neighbours.diminfo[1].strides = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_surrogate_neighbours.diminfo[1].shape = __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 450, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_surrogate_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+451: number_of_boundaries = domain.number_of_boundaries
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_number_of_boundaries); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 451, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer, (PyObject*)__pyx_v_number_of_boundaries, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_number_of_boundaries.diminfo[0].strides = __pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_number_of_boundaries.diminfo[0].shape = __pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 451, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_number_of_boundaries = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+452: vertex_coordinates = domain.vertex_coordinates
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_vertex_coordinates); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 452, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 452, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_coordinates, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_vertex_coordinates.diminfo[0].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[0].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].strides = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_coordinates.diminfo[1].shape = __pyx_pybuffernd_vertex_coordinates.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 452, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_vertex_coordinates = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+453: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 453, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 453, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+454: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 454, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 454, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+455: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 455, __pyx_L1_error) __pyx_t_13 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 455, __pyx_L1_error) } __pyx_t_13 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+456: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 456, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 456, __pyx_L1_error) } __pyx_t_14 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
457:
+458: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
459:
+460: err = _compute_gradients(N,\
__pyx_v_err = _compute_gradients(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_centroids.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_centroids.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_centroids.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(long *, __pyx_pybuffernd_number_of_boundaries.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_number_of_boundaries.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_surrogate_neighbours.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_surrogate_neighbours.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_surrogate_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+461: ¢roids[0,0],\
__pyx_t_15 = 0; __pyx_t_16 = 0;
+462: ¢roid_values[0],\
__pyx_t_17 = 0;
+463: &number_of_boundaries[0],\
__pyx_t_18 = 0;
+464: &surrogate_neighbours[0,0],\
__pyx_t_19 = 0; __pyx_t_20 = 0;
+465: &x_gradient[0],\
__pyx_t_21 = 0;
+466: &y_gradient[0])
__pyx_t_22 = 0;
467:
+468: assert err == 0, "Gradient could not be computed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Gradient_could_not_be_computed); __PYX_ERR(0, 468, __pyx_L1_error) } } #endif
469:
+470: def limit_old(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_29limit_old(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_29limit_old = {"limit_old", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_29limit_old, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_29limit_old(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_old (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_28limit_old(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_28limit_old(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_qc = 0; PyArrayObject *__pyx_v_qv = 0; PyArrayObject *__pyx_v_neighbours = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; double __pyx_v_beta_w; int __pyx_v_err; PyArrayObject *__pyx_v_qmin = 0; PyArrayObject *__pyx_v_qmax = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_neighbours; __Pyx_Buffer __pyx_pybuffer_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_qc; __Pyx_Buffer __pyx_pybuffer_qc; __Pyx_LocalBuf_ND __pyx_pybuffernd_qmax; __Pyx_Buffer __pyx_pybuffer_qmax; __Pyx_LocalBuf_ND __pyx_pybuffernd_qmin; __Pyx_Buffer __pyx_pybuffer_qmin; __Pyx_LocalBuf_ND __pyx_pybuffernd_qv; __Pyx_Buffer __pyx_pybuffer_qv; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_old", 0); __pyx_pybuffer_qc.pybuffer.buf = NULL; __pyx_pybuffer_qc.refcount = 0; __pyx_pybuffernd_qc.data = NULL; __pyx_pybuffernd_qc.rcbuffer = &__pyx_pybuffer_qc; __pyx_pybuffer_qv.pybuffer.buf = NULL; __pyx_pybuffer_qv.refcount = 0; __pyx_pybuffernd_qv.data = NULL; __pyx_pybuffernd_qv.rcbuffer = &__pyx_pybuffer_qv; __pyx_pybuffer_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_neighbours.refcount = 0; __pyx_pybuffernd_neighbours.data = NULL; __pyx_pybuffernd_neighbours.rcbuffer = &__pyx_pybuffer_neighbours; __pyx_pybuffer_qmin.pybuffer.buf = NULL; __pyx_pybuffer_qmin.refcount = 0; __pyx_pybuffernd_qmin.data = NULL; __pyx_pybuffernd_qmin.rcbuffer = &__pyx_pybuffer_qmin; __pyx_pybuffer_qmax.pybuffer.buf = NULL; __pyx_pybuffer_qmax.refcount = 0; __pyx_pybuffernd_qmax.data = NULL; __pyx_pybuffernd_qmax.rcbuffer = &__pyx_pybuffer_qmax; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qc.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qmax.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qmin.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qv.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.limit_old", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qc.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qmax.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qmin.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qv.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_qc); __Pyx_XDECREF((PyObject *)__pyx_v_qv); __Pyx_XDECREF((PyObject *)__pyx_v_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_qmin); __Pyx_XDECREF((PyObject *)__pyx_v_qmax); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_qc, __pyx_n_s_qv, __pyx_n_s_neighbours, __pyx_n_s_N, __pyx_n_s_beta_w, __pyx_n_s_err, __pyx_n_s_qmin, __pyx_n_s_qmax); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 470, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_29limit_old, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_limit_old, __pyx_t_1) < 0) __PYX_ERR(0, 470, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_limit_old, 470, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 470, __pyx_L1_error)
471:
472: cdef object domain
473:
474: cdef np.ndarray[double, ndim=1, mode="c"] qc
475: cdef np.ndarray[double, ndim=2, mode="c"] qv
476: cdef np.ndarray[long, ndim=2, mode="c"] neighbours
477:
478: cdef keyint N
479: cdef double beta_w
480: cdef int err
481:
+482: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
483:
+484: neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 484, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_neighbours.diminfo[0].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_neighbours.diminfo[0].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_neighbours.diminfo[1].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_neighbours.diminfo[1].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 484, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
485:
+486: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 486, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_7;
487:
+488: qc = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 488, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 488, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qc.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qc.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qc.rcbuffer->pybuffer, (PyObject*)__pyx_v_qc, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_qc.diminfo[0].strides = __pyx_pybuffernd_qc.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_qc.diminfo[0].shape = __pyx_pybuffernd_qc.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 488, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_qc = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+489: qv = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 489, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_qv.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qv.rcbuffer->pybuffer, (PyObject*)__pyx_v_qv, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_qv.diminfo[0].strides = __pyx_pybuffernd_qv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_qv.diminfo[0].shape = __pyx_pybuffernd_qv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_qv.diminfo[1].strides = __pyx_pybuffernd_qv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_qv.diminfo[1].shape = __pyx_pybuffernd_qv.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 489, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_qv = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
490:
+491: N = qc.shape[0]
__pyx_v_N = (__pyx_v_qc->dimensions[0]);
492:
+493: cdef np.ndarray[double, ndim=1, mode="c"] qmin = np.empty(N, dtype=np.float64)
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_float64); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 493, __pyx_L1_error) __pyx_t_14 = ((PyArrayObject *)__pyx_t_13); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qmin.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { __pyx_v_qmin = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_qmin.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 493, __pyx_L1_error) } else {__pyx_pybuffernd_qmin.diminfo[0].strides = __pyx_pybuffernd_qmin.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_qmin.diminfo[0].shape = __pyx_pybuffernd_qmin.rcbuffer->pybuffer.shape[0]; } } __pyx_t_14 = 0; __pyx_v_qmin = ((PyArrayObject *)__pyx_t_13); __pyx_t_13 = 0;
+494: cdef np.ndarray[double, ndim=1, mode="c"] qmax = np.empty(N, dtype=np.float64)
__Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyInt_From_long(__pyx_v_N); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_dtype, __pyx_t_12) < 0) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 494, __pyx_L1_error) __pyx_t_15 = ((PyArrayObject *)__pyx_t_12); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_qmax.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { __pyx_v_qmax = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_qmax.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 494, __pyx_L1_error) } else {__pyx_pybuffernd_qmax.diminfo[0].strides = __pyx_pybuffernd_qmax.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_qmax.diminfo[0].shape = __pyx_pybuffernd_qmax.rcbuffer->pybuffer.shape[0]; } } __pyx_t_15 = 0; __pyx_v_qmax = ((PyArrayObject *)__pyx_t_12); __pyx_t_12 = 0;
495:
+496: err = _min_and_max_centroid_values(N, &qc[0], &qv[0,0], &neighbours[0,0], &qmin[0], &qmax[0])
__pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_v_err = _min_and_max_centroid_values(__pyx_v_N, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qc.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_qc.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_qv.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_qv.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_qv.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_neighbours.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qmin.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_qmin.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qmax.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_qmax.diminfo[0].strides))));
497:
+498: assert err == 0, "Internal function _min_and_max_centroid_values failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__min_and_max_c); __PYX_ERR(0, 498, __pyx_L1_error) } } #endif
499:
+500: _limit_old(N, beta_w, &qc[0], &qv[0,0], &qmin[0], &qmax[0])
__pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0; __pyx_t_18 = 0; _limit_old(__pyx_v_N, __pyx_v_beta_w, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qc.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_qc.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_qv.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_qv.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_qv.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qmin.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_qmin.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_qmax.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_qmax.diminfo[0].strides))));
501:
+502: def limit_vertices_by_all_neighbours(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_31limit_vertices_by_all_neighbours(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_31limit_vertices_by_all_neighbours = {"limit_vertices_by_all_neighbours", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_31limit_vertices_by_all_neighbours, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_31limit_vertices_by_all_neighbours(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_vertices_by_all_neighbours (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_30limit_vertices_by_all_neighbours(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_30limit_vertices_by_all_neighbours(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_neighbours = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; double __pyx_v_beta_w; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_neighbours; __Pyx_Buffer __pyx_pybuffer_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_vertices_by_all_neighbours", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_neighbours.refcount = 0; __pyx_pybuffernd_neighbours.data = NULL; __pyx_pybuffernd_neighbours.rcbuffer = &__pyx_pybuffer_neighbours; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.limit_vertices_by_all_neighbours", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__33 = PyTuple_Pack(11, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_neighbours, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_beta_w, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_31limit_vertices_by_all_neighbours, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_limit_vertices_by_all_neighbours, __pyx_t_1) < 0) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_limit_vertices_by_all_neighbours, 502, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 502, __pyx_L1_error)
503:
504: cdef object domain
505:
506: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
507: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
508: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
509: cdef np.ndarray[long, ndim=2, mode="c"] neighbours
510: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
511: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
512:
513: cdef double beta_w
514: cdef keyint N
515: cdef int err
516:
+517: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
518:
+519: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 519, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
520:
+521: neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 521, __pyx_L1_error) __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_neighbours.diminfo[0].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_neighbours.diminfo[0].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_neighbours.diminfo[1].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_neighbours.diminfo[1].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 521, __pyx_L1_error) } __pyx_t_3 = 0; __pyx_v_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+522: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 522, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 522, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+523: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 523, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 523, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+524: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 524, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 524, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+525: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 525, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 525, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+526: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 526, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 526, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+527: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
528:
+529: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
530:
+531: err = _limit_vertices_by_all_neighbours(N, beta_w,\
__pyx_v_err = _limit_vertices_by_all_neighbours(__pyx_v_N, __pyx_v_beta_w, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_neighbours.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+532: ¢roid_values[0],\
__pyx_t_13 = 0;
+533: &vertex_values[0,0],\
__pyx_t_14 = 0; __pyx_t_15 = 0;
+534: &edge_values[0,0],\
__pyx_t_16 = 0; __pyx_t_17 = 0;
+535: &neighbours[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+536: &x_gradient[0],\
__pyx_t_20 = 0;
+537: &y_gradient[0])
__pyx_t_21 = 0;
538:
+539: assert err == 0, "Internal function _limit_by_vertex failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_by_vert); __PYX_ERR(0, 539, __pyx_L1_error) } } #endif
540:
+541: def limit_edges_by_all_neighbours(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_33limit_edges_by_all_neighbours(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_33limit_edges_by_all_neighbours = {"limit_edges_by_all_neighbours", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_33limit_edges_by_all_neighbours, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_33limit_edges_by_all_neighbours(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_edges_by_all_neighbours (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_32limit_edges_by_all_neighbours(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_32limit_edges_by_all_neighbours(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_neighbours = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; double __pyx_v_beta_w; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_neighbours; __Pyx_Buffer __pyx_pybuffer_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_edges_by_all_neighbours", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_neighbours.refcount = 0; __pyx_pybuffernd_neighbours.data = NULL; __pyx_pybuffernd_neighbours.rcbuffer = &__pyx_pybuffer_neighbours; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.limit_edges_by_all_neighbours", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_neighbours); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__35 = PyTuple_Pack(11, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_neighbours, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_beta_w, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_33limit_edges_by_all_neighbours, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_limit_edges_by_all_neighbours, __pyx_t_1) < 0) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_limit_edges_by_all_neighbours, 541, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 541, __pyx_L1_error)
542:
543: cdef object domain
544:
545: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
546: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
547: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
548: cdef np.ndarray[long, ndim=2, mode="c"] neighbours
549: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
550: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
551:
552: cdef double beta_w
553: cdef keyint N
554: cdef int err
555:
+556: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
557:
+558: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 558, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
559:
+560: neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 560, __pyx_L1_error) __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_neighbours.diminfo[0].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_neighbours.diminfo[0].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_neighbours.diminfo[1].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_neighbours.diminfo[1].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 560, __pyx_L1_error) } __pyx_t_3 = 0; __pyx_v_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+561: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 561, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 561, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 561, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+562: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 562, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 562, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+563: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 563, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 563, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+564: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 564, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 564, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+565: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 565, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 565, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+566: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
567:
+568: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
569:
+570: err = _limit_edges_by_all_neighbours(N, beta_w,\
__pyx_v_err = _limit_edges_by_all_neighbours(__pyx_v_N, __pyx_v_beta_w, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_neighbours.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_neighbours.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+571: ¢roid_values[0],\
__pyx_t_13 = 0;
+572: &vertex_values[0,0],\
__pyx_t_14 = 0; __pyx_t_15 = 0;
+573: &edge_values[0,0],\
__pyx_t_16 = 0; __pyx_t_17 = 0;
+574: &neighbours[0,0],\
__pyx_t_18 = 0; __pyx_t_19 = 0;
+575: &x_gradient[0],\
__pyx_t_20 = 0;
+576: &y_gradient[0])
__pyx_t_21 = 0;
577:
+578: assert err == 0, "Internal function _limit_by_edges failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_by_edge); __PYX_ERR(0, 578, __pyx_L1_error) } } #endif
579:
+580: def bound_vertices_below_by_constant(object quantity, double bound):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_35bound_vertices_below_by_constant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_35bound_vertices_below_by_constant = {"bound_vertices_below_by_constant", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_35bound_vertices_below_by_constant, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_35bound_vertices_below_by_constant(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_quantity = 0; double __pyx_v_bound; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_vertices_below_by_constant (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_quantity,&__pyx_n_s_bound,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_quantity)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bound)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_vertices_below_by_constant", 1, 2, 2, 1); __PYX_ERR(0, 580, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_vertices_below_by_constant") < 0)) __PYX_ERR(0, 580, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_quantity = values[0]; __pyx_v_bound = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_bound == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 580, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_vertices_below_by_constant", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 580, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.bound_vertices_below_by_constant", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_34bound_vertices_below_by_constant(__pyx_self, __pyx_v_quantity, __pyx_v_bound); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_34bound_vertices_below_by_constant(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity, double __pyx_v_bound) { CYTHON_UNUSED PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_vertices_below_by_constant", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.bound_vertices_below_by_constant", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__37 = PyTuple_Pack(10, __pyx_n_s_quantity, __pyx_n_s_bound, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 580, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_35bound_vertices_below_by_constant, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_bound_vertices_below_by_constant, __pyx_t_1) < 0) __PYX_ERR(0, 580, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_bound_vertices_below_by_constant, 580, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 580, __pyx_L1_error)
581:
582: cdef object domain
583:
584: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
585: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
586: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
587: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
588: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
589:
590: cdef keyint N
591: cdef int err
592:
+593: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
594:
+595: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 595, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 595, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+596: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 596, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 596, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+597: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 597, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 597, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+598: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 598, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 598, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 598, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+599: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 599, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 599, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
600:
+601: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
602:
+603: err = _bound_vertices_below_by_constant(N, bound,\
__pyx_v_err = _bound_vertices_below_by_constant(__pyx_v_N, __pyx_v_bound, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+604: ¢roid_values[0],\
__pyx_t_11 = 0;
+605: &vertex_values[0,0],\
__pyx_t_12 = 0; __pyx_t_13 = 0;
+606: &edge_values[0,0],\
__pyx_t_14 = 0; __pyx_t_15 = 0;
+607: &x_gradient[0],\
__pyx_t_16 = 0;
+608: &y_gradient[0])
__pyx_t_17 = 0;
609:
+610: assert err == 0, "Internal function _bound_vertices_below_by_constant failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__bound_vertice); __PYX_ERR(0, 610, __pyx_L1_error) } } #endif
611:
+612: def bound_vertices_below_by_quantity(object quantity, object bounding_quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_37bound_vertices_below_by_quantity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_37bound_vertices_below_by_quantity = {"bound_vertices_below_by_quantity", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_37bound_vertices_below_by_quantity, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_37bound_vertices_below_by_quantity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_quantity = 0; PyObject *__pyx_v_bounding_quantity = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_vertices_below_by_quantity (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_quantity,&__pyx_n_s_bounding_quantity,0}; PyObject* values[2] = {0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_quantity)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bounding_quantity)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("bound_vertices_below_by_quantity", 1, 2, 2, 1); __PYX_ERR(0, 612, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound_vertices_below_by_quantity") < 0)) __PYX_ERR(0, 612, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); } __pyx_v_quantity = values[0]; __pyx_v_bounding_quantity = values[1]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("bound_vertices_below_by_quantity", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 612, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.bound_vertices_below_by_quantity", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_36bound_vertices_below_by_quantity(__pyx_self, __pyx_v_quantity, __pyx_v_bounding_quantity); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_36bound_vertices_below_by_quantity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity, PyObject *__pyx_v_bounding_quantity) { CYTHON_UNUSED PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; PyArrayObject *__pyx_v_bound_vertex_values = 0; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_bound_vertex_values; __Pyx_Buffer __pyx_pybuffer_bound_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("bound_vertices_below_by_quantity", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; __pyx_pybuffer_bound_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_bound_vertex_values.refcount = 0; __pyx_pybuffernd_bound_vertex_values.data = NULL; __pyx_pybuffernd_bound_vertex_values.rcbuffer = &__pyx_pybuffer_bound_vertex_values; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.bound_vertices_below_by_quantity", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_bound_vertex_values); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__39 = PyTuple_Pack(11, __pyx_n_s_quantity, __pyx_n_s_bounding_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_bound_vertex_values, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__39); __Pyx_GIVEREF(__pyx_tuple__39); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_37bound_vertices_below_by_quantity, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_bound_vertices_below_by_quantity, __pyx_t_1) < 0) __PYX_ERR(0, 612, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_bound_vertices_below_by_quantity, 612, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 612, __pyx_L1_error)
613:
614: cdef object domain
615:
616: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
617: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
618: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
619: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
620: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
621: cdef np.ndarray[double, ndim=2, mode="c"] bound_vertex_values
622:
623: cdef keyint N
624: cdef int err
625:
+626: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 626, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
627:
+628: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 628, __pyx_L1_error) __pyx_t_2 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 628, __pyx_L1_error) } __pyx_t_2 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+629: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 629, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 629, __pyx_L1_error) } __pyx_t_7 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+630: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 630, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 630, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+631: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 631, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 631, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+632: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 632, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6); } __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 632, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+633: bound_vertex_values = bounding_quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_bounding_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 633, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer); __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_3 < 0)) { PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_bound_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4); } __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0; } __pyx_pybuffernd_bound_vertex_values.diminfo[0].strides = __pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bound_vertex_values.diminfo[0].shape = __pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_bound_vertex_values.diminfo[1].strides = __pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_bound_vertex_values.diminfo[1].shape = __pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 633, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_bound_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
634:
+635: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
636:
+637: err = _bound_vertices_below_by_quantity(N,\
__pyx_v_err = _bound_vertices_below_by_quantity(__pyx_v_N, (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_bound_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_bound_vertex_values.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_bound_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_18, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_y_gradient.diminfo[0].strides))));
+638: &bound_vertex_values[0,0],\
__pyx_t_12 = 0; __pyx_t_13 = 0;
+639: ¢roid_values[0],\
__pyx_t_14 = 0;
+640: &vertex_values[0,0],\
__pyx_t_15 = 0; __pyx_t_16 = 0;
+641: &edge_values[0,0],\
__pyx_t_17 = 0; __pyx_t_18 = 0;
+642: &x_gradient[0],\
__pyx_t_19 = 0;
+643: &y_gradient[0])
__pyx_t_20 = 0;
644:
+645: assert err == 0, "Internal function _bound_vertices_below_by_quantity failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__bound_vertice_2); __PYX_ERR(0, 645, __pyx_L1_error) } } #endif
646:
+647: def limit_edges_by_neighbour(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_39limit_edges_by_neighbour(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_39limit_edges_by_neighbour = {"limit_edges_by_neighbour", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_39limit_edges_by_neighbour, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_39limit_edges_by_neighbour(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_edges_by_neighbour (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_38limit_edges_by_neighbour(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_38limit_edges_by_neighbour(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_neighbours = 0; double __pyx_v_beta_w; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_neighbours; __Pyx_Buffer __pyx_pybuffer_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_edges_by_neighbour", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_neighbours.refcount = 0; __pyx_pybuffernd_neighbours.data = NULL; __pyx_pybuffernd_neighbours.rcbuffer = &__pyx_pybuffer_neighbours; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.limit_edges_by_neighbour", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_neighbours); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__41 = PyTuple_Pack(9, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_neighbours, __pyx_n_s_beta_w, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__41); __Pyx_GIVEREF(__pyx_tuple__41); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_39limit_edges_by_neighbour, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_limit_edges_by_neighbour, __pyx_t_1) < 0) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_anuga_abstract_2d_finite_volumes, __pyx_n_s_limit_edges_by_neighbour, 647, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 647, __pyx_L1_error)
648:
649: cdef object domain
650:
651: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
652: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
653: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
654: cdef np.ndarray[long, ndim=2, mode="c"] neighbours
655:
656: cdef double beta_w
657: cdef keyint N
658: cdef int err
659:
+660: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
661:
+662: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 662, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
663:
+664: neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 664, __pyx_L1_error) __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_neighbours.diminfo[0].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_neighbours.diminfo[0].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_neighbours.diminfo[1].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_neighbours.diminfo[1].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 664, __pyx_L1_error) } __pyx_t_3 = 0; __pyx_v_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+665: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 665, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 665, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 665, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+666: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 666, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 666, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+667: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 667, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 667, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
668:
+669: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
670:
+671: err = _limit_edges_by_neighbour(N, beta_w,\
__pyx_v_err = _limit_edges_by_neighbour(__pyx_v_N, __pyx_v_beta_w, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_neighbours.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_neighbours.diminfo[1].strides))));
+672: ¢roid_values[0],\
__pyx_t_11 = 0;
+673: &vertex_values[0,0],\
__pyx_t_12 = 0; __pyx_t_13 = 0;
+674: &edge_values[0,0],\
__pyx_t_14 = 0; __pyx_t_15 = 0;
+675: &neighbours[0,0])
__pyx_t_16 = 0; __pyx_t_17 = 0;
676:
+677: assert err == 0, "Internal function _limit_edges_by_neighbour failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_edges_b_2); __PYX_ERR(0, 677, __pyx_L1_error) } } #endif
678:
+679: def limit_gradient_by_neighbour(object quantity):
/* Python wrapper */ static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_41limit_gradient_by_neighbour(PyObject *__pyx_self, PyObject *__pyx_v_quantity); /*proto*/ static PyMethodDef __pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_41limit_gradient_by_neighbour = {"limit_gradient_by_neighbour", (PyCFunction)__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_41limit_gradient_by_neighbour, METH_O, 0}; static PyObject *__pyx_pw_5anuga_26abstract_2d_finite_volumes_12quantity_ext_41limit_gradient_by_neighbour(PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_gradient_by_neighbour (wrapper)", 0); __pyx_r = __pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_40limit_gradient_by_neighbour(__pyx_self, ((PyObject *)__pyx_v_quantity)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_5anuga_26abstract_2d_finite_volumes_12quantity_ext_40limit_gradient_by_neighbour(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_quantity) { PyObject *__pyx_v_domain = 0; PyArrayObject *__pyx_v_vertex_values = 0; PyArrayObject *__pyx_v_centroid_values = 0; PyArrayObject *__pyx_v_edge_values = 0; PyArrayObject *__pyx_v_x_gradient = 0; PyArrayObject *__pyx_v_y_gradient = 0; PyArrayObject *__pyx_v_neighbours = 0; double __pyx_v_beta_w; __pyx_t_5anuga_26abstract_2d_finite_volumes_12quantity_ext_keyint __pyx_v_N; int __pyx_v_err; __Pyx_LocalBuf_ND __pyx_pybuffernd_centroid_values; __Pyx_Buffer __pyx_pybuffer_centroid_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_edge_values; __Pyx_Buffer __pyx_pybuffer_edge_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_neighbours; __Pyx_Buffer __pyx_pybuffer_neighbours; __Pyx_LocalBuf_ND __pyx_pybuffernd_vertex_values; __Pyx_Buffer __pyx_pybuffer_vertex_values; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_gradient; __Pyx_Buffer __pyx_pybuffer_x_gradient; __Pyx_LocalBuf_ND __pyx_pybuffernd_y_gradient; __Pyx_Buffer __pyx_pybuffer_y_gradient; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("limit_gradient_by_neighbour", 0); __pyx_pybuffer_vertex_values.pybuffer.buf = NULL; __pyx_pybuffer_vertex_values.refcount = 0; __pyx_pybuffernd_vertex_values.data = NULL; __pyx_pybuffernd_vertex_values.rcbuffer = &__pyx_pybuffer_vertex_values; __pyx_pybuffer_centroid_values.pybuffer.buf = NULL; __pyx_pybuffer_centroid_values.refcount = 0; __pyx_pybuffernd_centroid_values.data = NULL; __pyx_pybuffernd_centroid_values.rcbuffer = &__pyx_pybuffer_centroid_values; __pyx_pybuffer_edge_values.pybuffer.buf = NULL; __pyx_pybuffer_edge_values.refcount = 0; __pyx_pybuffernd_edge_values.data = NULL; __pyx_pybuffernd_edge_values.rcbuffer = &__pyx_pybuffer_edge_values; __pyx_pybuffer_x_gradient.pybuffer.buf = NULL; __pyx_pybuffer_x_gradient.refcount = 0; __pyx_pybuffernd_x_gradient.data = NULL; __pyx_pybuffernd_x_gradient.rcbuffer = &__pyx_pybuffer_x_gradient; __pyx_pybuffer_y_gradient.pybuffer.buf = NULL; __pyx_pybuffer_y_gradient.refcount = 0; __pyx_pybuffernd_y_gradient.data = NULL; __pyx_pybuffernd_y_gradient.rcbuffer = &__pyx_pybuffer_y_gradient; __pyx_pybuffer_neighbours.pybuffer.buf = NULL; __pyx_pybuffer_neighbours.refcount = 0; __pyx_pybuffernd_neighbours.data = NULL; __pyx_pybuffernd_neighbours.rcbuffer = &__pyx_pybuffer_neighbours; /* … */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("anuga.abstract_2d_finite_volumes.quantity_ext.limit_gradient_by_neighbour", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF(__pyx_v_domain); __Pyx_XDECREF((PyObject *)__pyx_v_vertex_values); __Pyx_XDECREF((PyObject *)__pyx_v_centroid_values); __Pyx_XDECREF((PyObject *)__pyx_v_edge_values); __Pyx_XDECREF((PyObject *)__pyx_v_x_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_y_gradient); __Pyx_XDECREF((PyObject *)__pyx_v_neighbours); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* … */ __pyx_tuple__43 = PyTuple_Pack(11, __pyx_n_s_quantity, __pyx_n_s_domain, __pyx_n_s_vertex_values, __pyx_n_s_centroid_values, __pyx_n_s_edge_values, __pyx_n_s_x_gradient, __pyx_n_s_y_gradient, __pyx_n_s_neighbours, __pyx_n_s_beta_w, __pyx_n_s_N, __pyx_n_s_err); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 679, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); /* … */ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5anuga_26abstract_2d_finite_volumes_12quantity_ext_41limit_gradient_by_neighbour, NULL, __pyx_n_s_anuga_abstract_2d_finite_volumes_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_limit_gradient_by_neighbour, __pyx_t_1) < 0) __PYX_ERR(0, 679, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
680:
681: cdef object domain
682:
683: cdef np.ndarray[double, ndim=2, mode="c"] vertex_values
684: cdef np.ndarray[double, ndim=1, mode="c"] centroid_values
685: cdef np.ndarray[double, ndim=2, mode="c"] edge_values
686: cdef np.ndarray[double, ndim=1, mode="c"] x_gradient
687: cdef np.ndarray[double, ndim=1, mode="c"] y_gradient
688: cdef np.ndarray[long, ndim=2, mode="c"] neighbours
689:
690: cdef double beta_w
691: cdef keyint N
692: cdef int err
693:
+694: domain = quantity.domain
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_domain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_domain = __pyx_t_1; __pyx_t_1 = 0;
695:
+696: beta_w = domain.beta_w
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_beta_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 696, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta_w = __pyx_t_2;
697:
+698: neighbours = domain.neighbours
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_domain, __pyx_n_s_neighbours); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 698, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 698, __pyx_L1_error) __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_neighbours.rcbuffer->pybuffer, (PyObject*)__pyx_v_neighbours, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_neighbours.diminfo[0].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_neighbours.diminfo[0].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_neighbours.diminfo[1].strides = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_neighbours.diminfo[1].shape = __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 698, __pyx_L1_error) } __pyx_t_3 = 0; __pyx_v_neighbours = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+699: centroid_values = quantity.centroid_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_centroid_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 699, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_centroid_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_centroid_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_centroid_values.diminfo[0].strides = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_centroid_values.diminfo[0].shape = __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 699, __pyx_L1_error) } __pyx_t_8 = 0; __pyx_v_centroid_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+700: vertex_values = quantity.vertex_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_vertex_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 700, __pyx_L1_error) __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertex_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertex_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_vertex_values.diminfo[0].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertex_values.diminfo[0].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertex_values.diminfo[1].strides = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertex_values.diminfo[1].shape = __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 700, __pyx_L1_error) } __pyx_t_9 = 0; __pyx_v_vertex_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+701: edge_values = quantity.edge_values
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_edge_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 701, __pyx_L1_error) __pyx_t_10 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_edge_values.rcbuffer->pybuffer, (PyObject*)__pyx_v_edge_values, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_edge_values.diminfo[0].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_edge_values.diminfo[0].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_edge_values.diminfo[1].strides = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_edge_values.diminfo[1].shape = __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.shape[1]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 701, __pyx_L1_error) } __pyx_t_10 = 0; __pyx_v_edge_values = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+702: x_gradient = quantity.x_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_x_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 702, __pyx_L1_error) __pyx_t_11 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7); } __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0; } __pyx_pybuffernd_x_gradient.diminfo[0].strides = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_gradient.diminfo[0].shape = __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 702, __pyx_L1_error) } __pyx_t_11 = 0; __pyx_v_x_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
+703: y_gradient = quantity.y_gradient
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_quantity, __pyx_n_s_y_gradient); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 703, __pyx_L1_error) __pyx_t_12 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer); __pyx_t_4 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack); if (unlikely(__pyx_t_4 < 0)) { PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y_gradient.rcbuffer->pybuffer, (PyObject*)__pyx_v_y_gradient, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); __Pyx_RaiseBufferFallbackError(); } else { PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5); } __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0; } __pyx_pybuffernd_y_gradient.diminfo[0].strides = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y_gradient.diminfo[0].shape = __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.shape[0]; if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 703, __pyx_L1_error) } __pyx_t_12 = 0; __pyx_v_y_gradient = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0;
704:
+705: N = centroid_values.shape[0]
__pyx_v_N = (__pyx_v_centroid_values->dimensions[0]);
706:
+707: err = _limit_gradient_by_neighbour(N, beta_w,\
__pyx_v_err = _limit_gradient_by_neighbour(__pyx_v_N, __pyx_v_beta_w, (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_centroid_values.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_centroid_values.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_vertex_values.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vertex_values.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vertex_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_edge_values.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_edge_values.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_edge_values.diminfo[1].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_x_gradient.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_x_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig1d(double *, __pyx_pybuffernd_y_gradient.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_y_gradient.diminfo[0].strides))), (&(*__Pyx_BufPtrCContig2d(long *, __pyx_pybuffernd_neighbours.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_neighbours.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_neighbours.diminfo[1].strides))));
+708: ¢roid_values[0],\
__pyx_t_13 = 0;
+709: &vertex_values[0,0],\
__pyx_t_14 = 0; __pyx_t_15 = 0;
+710: &edge_values[0,0],\
__pyx_t_16 = 0; __pyx_t_17 = 0;
+711: &x_gradient[0],\
__pyx_t_18 = 0;
+712: &y_gradient[0],\
__pyx_t_19 = 0;
+713: &neighbours[0,0])
__pyx_t_20 = 0; __pyx_t_21 = 0;
714:
+715: assert err == 0, "Internal function _limit_gradient_by_neighbour failed"
#ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_err == 0) != 0))) { PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Internal_function__limit_gradien); __PYX_ERR(0, 715, __pyx_L1_error) } } #endif
716: