Skip to content
Snippets Groups Projects

Init

Merged Loic Hausammann requested to merge init into master
5 files
+ 25
7
Compare changes
  • Side-by-side
  • Inline
Files
5
+ 12
6
@@ -14,6 +14,7 @@ PyObject* pycooling_init(PyObject* self, PyObject* args) {
PyObject *pyus;
PyObject *pypconst;
/* parse arguments */
if (!PyArg_ParseTuple(args, "OOO", &pyparams, &pyus, &pypconst))
return NULL;
@@ -32,8 +33,10 @@ PyObject* pycooling_init(PyObject* self, PyObject* args) {
struct cooling_function_data cooling;
/* init cooling */
cooling_init_backend(params, us, pconst, &cooling);
/* construct python object */
PyObject *pycooling = pytools_return(&cooling, class_cooling_function_data);
return pycooling;
@@ -51,6 +54,7 @@ PyArrayObject* pycooling_rate(PyObject* self, PyObject* args) {
float dt = 1e-3;
/* parse argument */
if (!PyArg_ParseTuple(args,
"OOOOO|f",
&pypconst,
@@ -61,6 +65,7 @@ PyArrayObject* pycooling_rate(PyObject* self, PyObject* args) {
&dt))
return NULL;
/* check numpy array */
if (pytools_check_array(energy, 1, NPY_FLOAT) != SUCCESS)
{
return NULL;
@@ -76,7 +81,9 @@ PyArrayObject* pycooling_rate(PyObject* self, PyObject* args) {
pyerror("Density and energy should have the same dimension");
}
size_t N = PyArray_DIM(energy, 0);
size_t N = PyArray_DIM(energy, 0);
/* transform PyObject to C struct */
struct cooling_function_data *cooling = (struct cooling_function_data*) pytools_construct(pycooling, class_cooling_function_data);
if (cooling == NULL)
@@ -92,20 +99,19 @@ PyArrayObject* pycooling_rate(PyObject* self, PyObject* args) {
struct part p;
#ifdef COOLING_GRACKLE
grackle_data.grackle_data_file = cooling->GrackleCloudyTable;
#endif
/* return object */
PyArrayObject *rate = PyArray_NewLikeArray(energy, NPY_ANYORDER, NULL, 1);
/* loop over all particles */
for(size_t i = 0; i < N; i++)
{
/* set particle data */
p.rho = *(float*) PyArray_GETPTR1(rho, i);
float u = *(float*) PyArray_GETPTR1(energy, i);
p.entropy = gas_entropy_from_internal_energy(p.rho, u);
/* compute cooling rate */
float *tmp = PyArray_GETPTR1(rate, i);
#ifdef COOLING_GRACKLE
*tmp = cooling_rate(pconst, us, cooling, &p, dt);
#else
Loading