Changeset 8569
- Timestamp:
- Sep 10, 2012, 6:47:31 PM (13 years ago)
- Location:
- trunk/anuga_core/source/anuga/abstract_2d_finite_volumes
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/quantity.py
r8505 r8569 311 311 # @brief Compute interpolated values at edges and centroid. 312 312 # @note vertex_values must be set before calling this. 313 def interpolate (self):313 def interpolate_old(self): 314 314 """Compute interpolated values at edges and centroid 315 315 Pre-condition: vertex_values have been set … … 337 337 self.interpolate_from_vertices_to_edges() 338 338 339 340 ## 341 # @brief Compute interpolated values at edges and centroid. 342 # @note vertex_values must be set before calling this. 343 def interpolate(self): 344 """Compute interpolated values at edges and centroid 345 Pre-condition: vertex_values have been set 346 """ 347 from quantity_ext import interpolate 348 interpolate(self) 349 350 339 351 def interpolate_from_vertices_to_edges(self): 340 352 # Call correct module function (either from this module or C-extension) 353 354 from quantity_ext import interpolate_from_vertices_to_edges 341 355 interpolate_from_vertices_to_edges(self) 342 356 343 357 def interpolate_from_edges_to_vertices(self): 344 358 # Call correct module function (either from this module or C-extension) 359 360 from quantity_ext import interpolate_from_edges_to_vertices 345 361 interpolate_from_edges_to_vertices(self) 346 362 -
trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/quantity_ext.c
r8123 r8569 663 663 } 664 664 665 int _interpolate(int N, 666 double* vertex_values, 667 double* edge_values, 668 double* centroid_values) { 669 670 int k, k3; 671 double q0, q1, q2; 672 673 674 for (k=0; k<N; k++) { 675 k3 = 3*k; 676 677 q0 = vertex_values[k3 + 0]; 678 q1 = vertex_values[k3 + 1]; 679 q2 = vertex_values[k3 + 2]; 680 681 centroid_values[k] = (q0+q1+q2)/3.0; 682 683 edge_values[k3 + 0] = 0.5*(q1+q2); 684 edge_values[k3 + 1] = 0.5*(q0+q2); 685 edge_values[k3 + 2] = 0.5*(q0+q1); 686 } 687 return 0; 688 } 689 665 690 int _interpolate_from_vertices_to_edges(int N, 666 691 double* vertex_values, … … 984 1009 985 1010 return Py_BuildValue(""); 1011 } 1012 1013 1014 1015 PyObject *interpolate(PyObject *self, PyObject *args) { 1016 // 1017 //Compute edge and centroid values from vertex values using linear interpolation 1018 // 1019 1020 PyObject *quantity; 1021 PyArrayObject *vertex_values, *edge_values, *centroid_values; 1022 1023 int N, err; 1024 1025 // Convert Python arguments to C 1026 if (!PyArg_ParseTuple(args, "O", &quantity)) { 1027 PyErr_SetString(PyExc_RuntimeError, 1028 "quantity_ext.c: interpolate could not parse input"); 1029 return NULL; 1030 } 1031 1032 vertex_values = get_consecutive_array(quantity, "vertex_values"); 1033 edge_values = get_consecutive_array(quantity, "edge_values"); 1034 centroid_values = get_consecutive_array(quantity, "centroid_values"); 1035 1036 N = vertex_values -> dimensions[0]; 1037 1038 err = _interpolate(N, 1039 (double*) vertex_values -> data, 1040 (double*) edge_values -> data, 1041 (double*) centroid_values -> data); 1042 1043 if (err != 0) { 1044 PyErr_SetString(PyExc_RuntimeError, 1045 "Interpolate could not be computed"); 1046 return NULL; 1047 } 1048 1049 // Release and return 1050 Py_DECREF(vertex_values); 1051 Py_DECREF(edge_values); 1052 Py_DECREF(centroid_values); 1053 1054 return Py_BuildValue(""); 1055 986 1056 } 987 1057 … … 2193 2263 {"saxpy_centroid_values", saxpy_centroid_values, METH_VARARGS, "Print out"}, 2194 2264 {"compute_gradients", compute_gradients, METH_VARARGS, "Print out"}, 2195 {"compute_local_gradients", compute_gradients, METH_VARARGS, "Print out"},2265 {"compute_local_gradients", compute_gradients, METH_VARARGS, "Print out"}, 2196 2266 {"extrapolate_from_gradient", extrapolate_from_gradient, 2197 2267 METH_VARARGS, "Print out"}, … … 2206 2276 interpolate_from_edges_to_vertices, 2207 2277 METH_VARARGS, "Print out"}, 2278 {"interpolate", interpolate, METH_VARARGS, "Print out"}, 2208 2279 {"average_vertex_values", average_vertex_values, METH_VARARGS, "Print out"}, 2209 2280 {NULL, NULL, 0, NULL} // sentinel
Note: See TracChangeset
for help on using the changeset viewer.