struct DLManagedTensorVersioned;
typedef struct DLManagedTensorVersioned RKRDLManagedTensorVersioned;
#ifndef READCON_H
#define READCON_H
#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#ifdef __cplusplus
namespace readcon {
#endif
#define CON_SPEC_VERSION 2
#define RKR_CON_SPEC_VERSION 2
typedef enum RKRStatus {
RKR_STATUS_SUCCESS = 0,
RKR_STATUS_NULL_POINTER = -1,
RKR_STATUS_INVALID_UTF8 = -2,
RKR_STATUS_INVALID_JSON = -3,
RKR_STATUS_IO_ERROR = -4,
RKR_STATUS_INDEX_OUT_OF_BOUNDS = -5,
RKR_STATUS_BUFFER_TOO_SMALL = -6,
RKR_STATUS_INTERNAL_ERROR = -7,
RKR_STATUS_SECTION_ABSENT = -8,
RKR_STATUS_VALIDATION_ERROR = -9,
RKR_STATUS_SELECTION_ERROR = -10,
} RKRStatus;
typedef struct ConFrameIterator ConFrameIterator;
#if defined(READCON_CORE_HAS_CHEMFILES)
typedef struct RKRSelectionResult RKRSelectionResult;
#endif
typedef struct String String;
typedef struct RKRConFrame {
uint8_t _private[0];
} RKRConFrame;
typedef struct CConFrameIterator {
struct ConFrameIterator *iterator;
struct String *file_contents;
} CConFrameIterator;
typedef struct CAtom {
uint64_t atomic_number;
double x;
double y;
double z;
uint64_t atom_id;
double mass;
bool is_fixed;
bool fixed_x;
bool fixed_y;
bool fixed_z;
double vx;
double vy;
double vz;
bool has_velocity;
double fx;
double fy;
double fz;
bool has_forces;
double energy;
bool has_energy;
} CAtom;
typedef struct CFrame {
struct CAtom *atoms;
uintptr_t num_atoms;
double cell[3];
double angles[3];
bool has_velocities;
bool has_forces;
bool has_energies;
} CFrame;
typedef struct RKRConFrameWriter {
uint8_t _private[0];
} RKRConFrameWriter;
typedef struct RKRConFrameBuilder {
uint8_t _private[0];
} RKRConFrameBuilder;
#ifdef __cplusplus
extern "C" {
#endif
uint32_t rkr_con_spec_version(void);
const char *rkr_library_version(void);
uint64_t rkr_frame_atom_index_by_id(const struct RKRConFrame *frame_handle,
uint64_t atom_id);
uint64_t rkr_symbol_to_z(const char *symbol);
const char *rkr_z_to_symbol(uint64_t z);
uint32_t rkr_frame_spec_version(const struct RKRConFrame *frame_handle);
char *rkr_frame_metadata_json(const struct RKRConFrame *frame_handle);
double rkr_frame_energy(const struct RKRConFrame *frame_handle);
char *rkr_frame_potential_type(const struct RKRConFrame *frame_handle);
uint64_t rkr_frame_frame_index(const struct RKRConFrame *frame_handle);
double rkr_frame_time(const struct RKRConFrame *frame_handle);
double rkr_frame_timestep(const struct RKRConFrame *frame_handle);
uint64_t rkr_frame_neb_bead(const struct RKRConFrame *frame_handle);
uint64_t rkr_frame_neb_band(const struct RKRConFrame *frame_handle);
uint64_t rkr_frame_bond_count(const struct RKRConFrame *frame_handle);
enum RKRStatus rkr_frame_bond_at(const struct RKRConFrame *frame_handle,
uint64_t index,
uint32_t *out_i,
uint32_t *out_j,
uint8_t *out_has_order,
int32_t *out_order);
const char *rkr_status_message(enum RKRStatus status);
struct CConFrameIterator *read_con_file_iterator(const char *filename_c);
struct RKRConFrame *con_frame_iterator_next(struct CConFrameIterator *iterator);
void free_rkr_frame(struct RKRConFrame *frame_handle);
void free_con_frame_iterator(struct CConFrameIterator *iterator);
struct CFrame *rkr_frame_to_c_frame(const struct RKRConFrame *frame_handle);
void free_c_frame(struct CFrame *frame);
enum RKRStatus rkr_frame_get_header_line(const struct RKRConFrame *frame_handle,
bool is_prebox,
uintptr_t line_index,
char *buffer,
uintptr_t buffer_len);
char *rkr_frame_get_header_line_cpp(const struct RKRConFrame *frame_handle,
bool is_prebox,
uintptr_t line_index);
void rkr_free_string(char *s);
struct RKRConFrameWriter *create_writer_from_path_c(const char *filename_c);
void free_rkr_writer(struct RKRConFrameWriter *writer_handle);
enum RKRStatus rkr_writer_extend(struct RKRConFrameWriter *writer_handle,
const struct RKRConFrame *const *frame_handles,
uintptr_t num_frames);
struct RKRConFrameWriter *create_writer_from_path_with_precision_c(const char *filename_c,
uint8_t precision);
enum RKRStatus rkr_frame_builder_set_last_velocity(struct RKRConFrameBuilder *builder_handle,
const double *velocity);
enum RKRStatus rkr_frame_builder_set_last_force(struct RKRConFrameBuilder *builder_handle,
const double *force);
enum RKRStatus rkr_frame_builder_set_last_energy(struct RKRConFrameBuilder *builder_handle,
double energy);
uintptr_t rkr_frame_builder_atom_count(const struct RKRConFrameBuilder *builder_handle);
enum RKRStatus rkr_frame_builder_set_atom_position(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double x,
double y,
double z);
enum RKRStatus rkr_frame_builder_set_atom_velocity(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
const double *velocity);
enum RKRStatus rkr_frame_builder_set_atom_force(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
const double *force);
enum RKRStatus rkr_frame_builder_set_atom_energy(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double energy);
enum RKRStatus rkr_frame_builder_set_atom_fixed(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
bool fixed_x,
bool fixed_y,
bool fixed_z);
enum RKRStatus rkr_frame_builder_set_atom_mass(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double mass);
enum RKRStatus rkr_frame_builder_set_atom_id(struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
uint64_t atom_id);
enum RKRStatus rkr_frame_builder_clear_atom_velocity(struct RKRConFrameBuilder *builder_handle,
uintptr_t index);
enum RKRStatus rkr_frame_builder_clear_atom_force(struct RKRConFrameBuilder *builder_handle,
uintptr_t index);
enum RKRStatus rkr_frame_builder_clear_atom_energy(struct RKRConFrameBuilder *builder_handle,
uintptr_t index);
enum RKRStatus rkr_frame_builder_set_positions_from_flat(struct RKRConFrameBuilder *builder_handle,
const double *positions,
uintptr_t len);
enum RKRStatus rkr_frame_builder_set_forces_from_flat(struct RKRConFrameBuilder *builder_handle,
const double *forces,
uintptr_t len);
enum RKRStatus rkr_frame_builder_set_atom_energies_from_flat(struct RKRConFrameBuilder *builder_handle,
const double *energies,
uintptr_t len);
enum RKRStatus rkr_frame_builder_get_atom_position(const struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double *out_xyz);
enum RKRStatus rkr_frame_builder_get_atom_velocity(const struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double *out_xyz,
bool *has_value);
enum RKRStatus rkr_frame_builder_get_atom_force(const struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double *out_xyz,
bool *has_value);
enum RKRStatus rkr_frame_builder_get_atom_energy(const struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double *out_value,
bool *has_value);
enum RKRStatus rkr_frame_builder_get_atom_mass(const struct RKRConFrameBuilder *builder_handle,
uintptr_t index,
double *out_mass);
enum RKRStatus rkr_frame_builder_positions_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
enum RKRStatus rkr_frame_builder_velocities_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
enum RKRStatus rkr_frame_builder_forces_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
enum RKRStatus rkr_frame_builder_atom_energies_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
enum RKRStatus rkr_frame_builder_masses_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
enum RKRStatus rkr_frame_builder_atom_ids_dlpack(const struct RKRConFrameBuilder *builder_handle,
RKRDLManagedTensorVersioned **out_tensor);
double *rkr_frame_builder_positions_data(struct RKRConFrameBuilder *builder_handle);
double *rkr_frame_builder_velocities_data(struct RKRConFrameBuilder *builder_handle);
double *rkr_frame_builder_forces_data(struct RKRConFrameBuilder *builder_handle);
double *rkr_frame_builder_atom_energies_data(struct RKRConFrameBuilder *builder_handle);
double *rkr_frame_builder_masses_data(struct RKRConFrameBuilder *builder_handle);
const uint64_t *rkr_frame_builder_atom_ids_data(const struct RKRConFrameBuilder *builder_handle);
enum RKRStatus rkr_frame_add_atom_full(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool fixed_x,
bool fixed_y,
bool fixed_z,
uint64_t atom_id,
double mass,
const double *velocity,
const double *force);
struct RKRConFrameBuilder *rkr_frame_new(const double *cell,
const double *angles,
const char *prebox0,
const char *prebox1,
const char *postbox0,
const char *postbox1);
enum RKRStatus rkr_frame_builder_set_metadata_json(struct RKRConFrameBuilder *builder_handle,
const char *metadata_json);
enum RKRStatus rkr_frame_builder_set_scalar_metadata(struct RKRConFrameBuilder *builder_handle,
const char *key,
double value);
enum RKRStatus rkr_frame_builder_set_string_metadata(struct RKRConFrameBuilder *builder_handle,
const char *key,
const char *value);
enum RKRStatus rkr_frame_builder_set_energy(struct RKRConFrameBuilder *builder_handle,
double energy);
enum RKRStatus rkr_frame_builder_set_frame_index(struct RKRConFrameBuilder *builder_handle,
uint64_t idx);
enum RKRStatus rkr_frame_builder_set_time(struct RKRConFrameBuilder *builder_handle,
double time);
enum RKRStatus rkr_frame_builder_set_timestep(struct RKRConFrameBuilder *builder_handle,
double dt);
enum RKRStatus rkr_frame_builder_set_neb_bead(struct RKRConFrameBuilder *builder_handle,
uint64_t bead);
enum RKRStatus rkr_frame_builder_set_neb_band(struct RKRConFrameBuilder *builder_handle,
uint64_t band);
enum RKRStatus rkr_frame_add_atom(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool is_fixed,
uint64_t atom_id,
double mass);
enum RKRStatus rkr_frame_add_atom_with_fixed_mask(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool fixed_x,
bool fixed_y,
bool fixed_z,
uint64_t atom_id,
double mass);
enum RKRStatus rkr_frame_add_atom_with_velocity(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool is_fixed,
uint64_t atom_id,
double mass,
double vx,
double vy,
double vz);
enum RKRStatus rkr_frame_add_atom_with_velocity_fixed_mask(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool fixed_x,
bool fixed_y,
bool fixed_z,
uint64_t atom_id,
double mass,
double vx,
double vy,
double vz);
enum RKRStatus rkr_frame_add_atom_with_forces(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool is_fixed,
uint64_t atom_id,
double mass,
double fx,
double fy,
double fz);
enum RKRStatus rkr_frame_add_atom_with_forces_fixed_mask(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool fixed_x,
bool fixed_y,
bool fixed_z,
uint64_t atom_id,
double mass,
double fx,
double fy,
double fz);
enum RKRStatus rkr_frame_add_atom_with_velocity_and_forces(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool is_fixed,
uint64_t atom_id,
double mass,
double vx,
double vy,
double vz,
double fx,
double fy,
double fz);
enum RKRStatus rkr_frame_add_atom_with_velocity_and_forces_fixed_mask(struct RKRConFrameBuilder *builder_handle,
const char *symbol,
double x,
double y,
double z,
bool fixed_x,
bool fixed_y,
bool fixed_z,
uint64_t atom_id,
double mass,
double vx,
double vy,
double vz,
double fx,
double fy,
double fz);
struct RKRConFrame *rkr_frame_builder_build(struct RKRConFrameBuilder *builder_handle);
void free_rkr_frame_builder(struct RKRConFrameBuilder *builder_handle);
struct RKRConFrameBuilder *rkr_frame_builder_clone(const struct RKRConFrameBuilder *builder_handle);
struct RKRConFrameWriter *create_writer_gzip_c(const char *filename_c);
struct RKRConFrameWriter *create_writer_gzip_with_precision_c(const char *filename_c,
uint8_t precision);
#if defined(READCON_CORE_HAS_ZSTD)
struct RKRConFrameWriter *create_writer_zstd_c(const char *filename_c);
#endif
#if defined(READCON_CORE_HAS_ZSTD)
struct RKRConFrameWriter *create_writer_zstd_with_precision_c(const char *filename_c,
uint8_t precision);
#endif
struct RKRConFrame *rkr_read_first_frame(const char *filename_c);
struct RKRConFrame **rkr_read_all_frames(const char *filename_c,
uintptr_t *num_frames);
void free_rkr_frame_array(struct RKRConFrame **frames, uintptr_t num_frames);
#if defined(READCON_CORE_HAS_CHEMFILES)
enum RKRStatus rkr_frame_select(const struct RKRConFrame *frame_handle,
const char *selection,
struct RKRSelectionResult **out_result);
#endif
#if defined(READCON_CORE_HAS_CHEMFILES)
uint64_t rkr_selection_result_match_count(const struct RKRSelectionResult *result_handle);
#endif
#if defined(READCON_CORE_HAS_CHEMFILES)
uint32_t rkr_selection_result_context_size(const struct RKRSelectionResult *result_handle);
#endif
#if defined(READCON_CORE_HAS_CHEMFILES)
enum RKRStatus rkr_selection_result_match_at(const struct RKRSelectionResult *result_handle,
uint64_t match_index,
uint64_t *out_atoms,
uint32_t *out_size);
#endif
#if defined(READCON_CORE_HAS_CHEMFILES)
enum RKRStatus rkr_selection_result_primary_indices(const struct RKRSelectionResult *result_handle,
uint64_t *out_indices,
uint64_t capacity,
uint64_t *out_written);
#endif
#if defined(READCON_CORE_HAS_CHEMFILES)
void rkr_selection_result_free(struct RKRSelectionResult *result_handle);
#endif
uint8_t rkr_has_chemfiles_support(void);
#ifdef __cplusplus
} #endif
#ifdef __cplusplus
} #endif
#endif