#ifndef MINIMAGE_H
#define MINIMAGE_H
#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct mi_cell {
double ax;
double ay;
double az;
double bx;
double by;
double bz;
double cx;
double cy;
double cz;
double ox;
double oy;
double oz;
} mi_cell;
#ifdef __cplusplus
extern "C" {
#endif
int mi_cell_from_ase(const double *rows,
const double *origin,
struct mi_cell *out);
int mi_cell_from_con(const double *rows, struct mi_cell *out);
int mi_cell_from_con_box(const double *boxl,
const double *angles_deg,
struct mi_cell *out);
int mi_cell_from_lammps(double xlo,
double xhi,
double ylo,
double yhi,
double zlo,
double zhi,
double xy,
double xz,
double yz,
struct mi_cell *out);
int mi_cell_from_lammps_bounds(double xspan,
double yspan,
double zspan,
double xy,
double xz,
double yz,
double xlo_b,
double ylo_b,
double zlo_b,
struct mi_cell *out);
int mi_cell_from_vectors(const double *a,
const double *b,
const double *c,
const double *origin,
struct mi_cell *out);
int mi_cell_from_vesin(const double *box_rows, struct mi_cell *out);
int mi_displacement(const struct mi_cell *simbox,
const double *p,
const double *q,
double *dr);
int mi_displacement_euclidean(const struct mi_cell *simbox,
const double *p,
const double *q,
double *dr);
int mi_dist2(const struct mi_cell *simbox,
const double *p,
const double *q,
double *out);
int mi_dist2_many(const struct mi_cell *simbox,
const double *p,
const double *qs,
size_t n,
double *out);
int mi_dist2_ortho_diffs(const double *dx,
const double *dy,
const double *dz,
double bx,
double by,
double bz,
double *out,
size_t n);
int mi_dist2_pairs(const struct mi_cell *simbox,
const double *ps,
const double *qs,
size_t n,
double *out);
int mi_dist2_shifted_many(const double *p,
const double *qs,
const double *shift,
size_t n,
double *out);
const char *mi_last_error(void);
int mi_reduce_pairs(const int *pairs, size_t n, int *out, size_t *out_n);
const char *mi_version(void);
int mi_wrap_many(const struct mi_cell *simbox,
const double *diffs,
size_t n,
double *out);
#ifdef __cplusplus
} #endif
#endif
#ifndef MINIMAGE_MI_CELL_ORTHO_H
#define MINIMAGE_MI_CELL_ORTHO_H
#ifdef __cplusplus
extern "C" {
#endif
static inline mi_cell mi_cell_ortho(double lx, double ly, double lz) {
mi_cell c;
c.ax = lx;
c.ay = 0.0;
c.az = 0.0;
c.bx = 0.0;
c.by = ly;
c.bz = 0.0;
c.cx = 0.0;
c.cy = 0.0;
c.cz = lz;
c.ox = 0.0;
c.oy = 0.0;
c.oz = 0.0;
return c;
}
#ifdef __cplusplus
}
#endif
#endif