summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/tng_io.c29
-rw-r--r--src/lib/tng_io.h35
2 files changed, 52 insertions, 12 deletions
diff --git a/src/lib/tng_io.c b/src/lib/tng_io.c
index 3da1ceb..fd20180 100644
--- a/src/lib/tng_io.c
+++ b/src/lib/tng_io.c
@@ -6228,11 +6228,12 @@ tng_function_status tng_trajectory_copy(tng_trajectory_t src,
dest->medium_stride_length = src->medium_stride_length;
dest->long_stride_length = src->long_stride_length;
- dest->n_particle_data_blocks = src->n_particle_data_blocks;
- dest->n_data_blocks = src->n_data_blocks;
-
- dest->non_tr_particle_data = src->non_tr_particle_data;
- dest->non_tr_data = src->non_tr_data;
+ /* Currently the non trajectory data blocks are not copied since it
+ * can lead to problems when freeing memory in a parallel block. */
+ dest->n_particle_data_blocks = 0;
+ dest->n_data_blocks = 0;
+ dest->non_tr_particle_data = 0;
+ dest->non_tr_data = 0;
frame_set->first_frame = -1;
frame_set->n_mapping_blocks = 0;
@@ -6974,10 +6975,10 @@ tng_function_status tng_num_frame_sets_get(const tng_trajectory_t tng_data,
}
tng_function_status tng_current_frame_set_get
- (const tng_trajectory_t tng_data,
- tng_trajectory_frame_set_t frame_set)
+ (tng_trajectory_t tng_data,
+ tng_trajectory_frame_set_t *frame_set)
{
- frame_set = &tng_data->current_trajectory_frame_set;
+ *frame_set = &tng_data->current_trajectory_frame_set;
return(TNG_SUCCESS);
}
@@ -7625,6 +7626,18 @@ tng_function_status tng_frame_set_prev_frame_set_file_pos_get
return(TNG_SUCCESS);
}
+tng_function_status tng_frame_set_frame_range_get
+ (const tng_trajectory_t tng_data,
+ const tng_trajectory_frame_set_t frame_set,
+ int64_t *first_frame,
+ int64_t *last_frame)
+{
+ *first_frame = frame_set->first_frame;
+ *last_frame = *first_frame + frame_set->n_frames - 1;
+
+ return(TNG_SUCCESS);
+}
+
/** Translate from the particle numbering used in a frame set to the real
* particle numbering - used in the molecule description.
* @param frame_set is the frame_set containing the mappings to use.
diff --git a/src/lib/tng_io.h b/src/lib/tng_io.h
index a5af682..38c9d43 100644
--- a/src/lib/tng_io.h
+++ b/src/lib/tng_io.h
@@ -353,6 +353,10 @@ tng_function_status tng_trajectory_destroy_(tng_trajectory_t *tng_data_p)
/**
* @brief Copy a trajectory data container (dest is setup as well).
+ * @details This does not copy all data - only what is absolute necessary for
+ * parallel i/o. This can be used inside pragma omp for setting up a thread
+ * local copy of src. It can be freed (using tng_trajectory_destroy at the
+ * end of the parallel block.
* @param src the original trajectory.
* @param dest_p a pointer to memory to initialise as a trajectory.
* @details Memory is allocated during initialisation.
@@ -964,11 +968,11 @@ tng_function_status tng_num_frame_sets_get_
* @return TNG_SUCCESS (0) if successful.
*/
tng_function_status tng_current_frame_set_get
- (const tng_trajectory_t tng_data,
- tng_trajectory_frame_set_t frame_set);
+ (tng_trajectory_t tng_data,
+ tng_trajectory_frame_set_t *frame_set);
tng_function_status tng_current_frame_set_get_
- (const tng_trajectory_t tng_data,
- tng_trajectory_frame_set_t frame_set)
+ (tng_trajectory_t tng_data,
+ tng_trajectory_frame_set_t *frame_set)
{
return(tng_current_frame_set_get(tng_data, frame_set));
}
@@ -1048,6 +1052,29 @@ tng_function_status tng_frame_set_prev_frame_set_file_pos_get_
}
/**
+ * @brief Get the first and last frames of the frame set.
+ * @param tng_data is a trajectory data container.
+ * @param frame_set is the frame set of which to get the frame range.
+ * @param first_frame is set to the first frame of the frame set.
+ * @param last_frame is set to the last frame of the frame set.
+ * @return TNG_SUCCESS (0) if successful.
+ */
+tng_function_status tng_frame_set_frame_range_get
+ (const tng_trajectory_t tng_data,
+ const tng_trajectory_frame_set_t frame_set,
+ int64_t *first_frame,
+ int64_t *last_frame);
+tng_function_status tng_frame_set_frame_range_get_
+ (const tng_trajectory_t tng_data,
+ const tng_trajectory_frame_set_t frame_set,
+ int64_t *first_frame,
+ int64_t *last_frame)
+{
+ return(tng_frame_set_frame_range_get(tng_data, frame_set, first_frame,
+ last_frame));
+}
+
+/**
* @brief Setup a molecule container.
* @param tng_data is a trajectory data container.
* @param molecule is the molecule to initialise. Memory must be preallocated.
contact: Jan Huwald // Impressum