Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
SWIFTsim
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SWIFT
SWIFTsim
Commits
02704bc5
Commit
02704bc5
authored
5 years ago
by
Matthieu Schaller
Browse files
Options
Downloads
Plain Diff
Merge branch 'logger_add_incref' into 'master'
Logger add incref See merge request
!974
parents
28ea87dd
6c149cd8
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!974
Logger add incref
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
logger/examples/reader_example.py
+2
-0
2 additions, 0 deletions
logger/examples/reader_example.py
logger/logger_python_wrapper.c
+25
-10
25 additions, 10 deletions
logger/logger_python_wrapper.c
with
27 additions
and
10 deletions
logger/examples/reader_example.py
+
2
−
0
View file @
02704bc5
...
@@ -51,6 +51,8 @@ print("time: %g" % time)
...
@@ -51,6 +51,8 @@ print("time: %g" % time)
t
=
logger
.
getTimeLimits
(
basename
)
t
=
logger
.
getTimeLimits
(
basename
)
data
=
logger
.
loadSnapshotAtTime
(
basename
,
time
)
data
=
logger
.
loadSnapshotAtTime
(
basename
,
time
)
print
(
"
The data contains the following elements:
"
)
print
(
data
.
dtype
.
names
)
pos
=
data
[
"
positions
"
]
pos
=
data
[
"
positions
"
]
...
...
This diff is collapsed.
Click to expand it.
logger/logger_python_wrapper.c
+
25
−
10
View file @
02704bc5
...
@@ -35,6 +35,7 @@ typedef struct {
...
@@ -35,6 +35,7 @@ typedef struct {
}
PyLoggerParticle
;
}
PyLoggerParticle
;
static
PyTypeObject
PyLoggerParticle_Type
;
static
PyTypeObject
PyLoggerParticle_Type
;
const
char
*
particle_name
=
"Particle"
;
PyArray_Descr
*
logger_particle_descr
;
PyArray_Descr
*
logger_particle_descr
;
...
@@ -89,12 +90,16 @@ static PyObject *loadSnapshotAtTime(__attribute__((unused)) PyObject *self,
...
@@ -89,12 +90,16 @@ static PyObject *loadSnapshotAtTime(__attribute__((unused)) PyObject *self,
PyArrayObject
*
out
=
(
PyArrayObject
*
)
PyArray_SimpleNewFromDescr
(
PyArrayObject
*
out
=
(
PyArrayObject
*
)
PyArray_SimpleNewFromDescr
(
1
,
&
n_tot
,
logger_particle_descr
);
1
,
&
n_tot
,
logger_particle_descr
);
/* Reference is stolen, therefore need to take it into account */
Py_INCREF
(
logger_particle_descr
);
void
*
data
=
PyArray_DATA
(
out
);
/* Allows to use threads */
/* Allows to use threads */
Py_BEGIN_ALLOW_THREADS
;
Py_BEGIN_ALLOW_THREADS
;
/* Read the particle. */
/* Read the particle. */
logger_reader_read_all_particles
(
&
reader
,
time
,
logger_reader_const
,
logger_reader_read_all_particles
(
&
reader
,
time
,
logger_reader_const
,
data
,
PyArray_DATA
(
out
),
n_tot
);
n_tot
);
/* No need of threads anymore */
/* No need of threads anymore */
Py_END_ALLOW_THREADS
;
Py_END_ALLOW_THREADS
;
...
@@ -129,7 +134,7 @@ static PyObject *getTimeLimits(__attribute__((unused)) PyObject *self,
...
@@ -129,7 +134,7 @@ static PyObject *getTimeLimits(__attribute__((unused)) PyObject *self,
struct
logger_reader
reader
;
struct
logger_reader
reader
;
logger_reader_init
(
&
reader
,
basename
,
verbose
);
logger_reader_init
(
&
reader
,
basename
,
verbose
);
if
(
verbose
>
1
)
message
(
"Reading
particle
s."
);
if
(
verbose
>
1
)
message
(
"Reading
time limit
s."
);
/* Get the time limits */
/* Get the time limits */
double
time_min
=
logger_reader_get_time_begin
(
&
reader
);
double
time_min
=
logger_reader_get_time_begin
(
&
reader
);
...
@@ -253,6 +258,13 @@ static struct PyModuleDef libloggermodule = {
...
@@ -253,6 +258,13 @@ static struct PyModuleDef libloggermodule = {
PyDict_SetItem(fields, PyUnicode_FromString(name), tuple); \
PyDict_SetItem(fields, PyUnicode_FromString(name), tuple); \
})
})
void
pylogger_particle_define_typeobject
(
void
)
{
PyLoggerParticle_Type
.
tp_name
=
particle_name
;
PyLoggerParticle_Type
.
tp_print
=
NULL
;
PyType_Ready
(
&
PyLoggerParticle_Type
);
}
void
pylogger_particle_define_descr
(
void
)
{
void
pylogger_particle_define_descr
(
void
)
{
/* Generate list of field names */
/* Generate list of field names */
PyObject
*
names
=
PyTuple_New
(
9
);
PyObject
*
names
=
PyTuple_New
(
9
);
...
@@ -269,14 +281,14 @@ void pylogger_particle_define_descr(void) {
...
@@ -269,14 +281,14 @@ void pylogger_particle_define_descr(void) {
/* Generate list of fields */
/* Generate list of fields */
PyObject
*
fields
=
PyDict_New
();
PyObject
*
fields
=
PyDict_New
();
CREATE_FIELD_3D
(
fields
,
"positions"
,
pos
,
NPY_DOUBLE
);
CREATE_FIELD_3D
(
fields
,
"positions"
,
pos
,
NPY_DOUBLE
);
CREATE_FIELD
(
fields
,
"velocities"
,
vel
,
NPY_FLOAT32
);
CREATE_FIELD
_3D
(
fields
,
"velocities"
,
vel
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"accelerations"
,
acc
,
NPY_FLOAT32
);
CREATE_FIELD
_3D
(
fields
,
"accelerations"
,
acc
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"entropies"
,
entropy
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"entropies"
,
entropy
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"smoothing_leng
h
ts"
,
h
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"smoothing_lengt
h
s"
,
h
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"densities"
,
density
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"densities"
,
density
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"masses"
,
mass
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"masses"
,
mass
,
NPY_FLOAT32
);
CREATE_FIELD
(
fields
,
"ids"
,
id
,
NPY_
U
LONGLONG
);
CREATE_FIELD
(
fields
,
"ids"
,
id
,
NPY_LONGLONG
);
CREATE_FIELD
(
fields
,
"times"
,
id
,
NPY_DOUBLE
);
CREATE_FIELD
(
fields
,
"times"
,
time
,
NPY_DOUBLE
);
/* Generate descriptor */
/* Generate descriptor */
logger_particle_descr
=
PyObject_New
(
PyArray_Descr
,
&
PyArrayDescr_Type
);
logger_particle_descr
=
PyObject_New
(
PyArray_Descr
,
&
PyArrayDescr_Type
);
...
@@ -284,14 +296,15 @@ void pylogger_particle_define_descr(void) {
...
@@ -284,14 +296,15 @@ void pylogger_particle_define_descr(void) {
// V if for an arbitrary kind of array
// V if for an arbitrary kind of array
logger_particle_descr
->
kind
=
'V'
;
logger_particle_descr
->
kind
=
'V'
;
// Not well documented (seems any value is fine)
// Not well documented (seems any value is fine)
logger_particle_descr
->
type
=
'
p
'
;
logger_particle_descr
->
type
=
'
v
'
;
// Native byte ordering
// Native byte ordering
logger_particle_descr
->
byteorder
=
'='
;
logger_particle_descr
->
byteorder
=
'='
;
// Flags
// Flags
logger_particle_descr
->
flags
=
NPY_USE_GETITEM
|
NPY_USE_SETITEM
;
logger_particle_descr
->
flags
=
NPY_USE_GETITEM
|
NPY_USE_SETITEM
;
// id of the data type (assigned automatically)
// id of the data type (assigned automatically)
logger_particle_descr
->
type_num
=
0
;
logger_particle_descr
->
type_num
=
0
;
// Size of an element
// Size of an element (using more size than required in order to log
// everything)
logger_particle_descr
->
elsize
=
sizeof
(
struct
logger_particle
);
logger_particle_descr
->
elsize
=
sizeof
(
struct
logger_particle
);
// alignment (doc magic)
// alignment (doc magic)
logger_particle_descr
->
alignment
=
offsetof
(
logger_particle_descr
->
alignment
=
offsetof
(
...
@@ -320,6 +333,8 @@ PyMODINIT_FUNC PyInit_liblogger(void) {
...
@@ -320,6 +333,8 @@ PyMODINIT_FUNC PyInit_liblogger(void) {
clocks_set_cpufreq
(
0
);
clocks_set_cpufreq
(
0
);
import_array
();
import_array
();
/* Define the type object */
pylogger_particle_define_typeobject
();
/* Define the descr of the logger_particle */
/* Define the descr of the logger_particle */
pylogger_particle_define_descr
();
pylogger_particle_define_descr
();
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment