1 %include "cpointer.i"
2 %include "carrays.i"
3 %include "cdata.i"
4 %include "cstring.i"
5 
6 %pointer_functions(int,    int_p);
7 %pointer_functions(int,    int64_p);
8 %pointer_functions(double, double_p);
9 
10 %array_functions(char, char_1d);
11 %array_functions(int, int_1d);
12 %array_functions(double, double_1d);
13 
14 %pointer_cast(void *, int *,     void_p_to_int_p);
15 %pointer_cast(void *, int **,    void_p_to_int2d_p);
16 %pointer_cast(void *, int *,     void_p_to_int64_p);
17 %pointer_cast(void *, int **,    void_p_to_int64_2d_p);
18 %pointer_cast(void *, double *,  void_p_to_double_p);
19 %pointer_cast(void *, double **, void_p_to_double_2d_p);
20 
21 %cstring_output_maxsize(char *buffer, int buf_size);
22 
23 %{
24 
25 enum _LMP_DATATYPE_CONST {
26   LAMMPS_INT    = 0,       /*!< 32-bit integer (array) */
27   LAMMPS_INT_2D  = 1,      /*!< two-dimensional 32-bit integer array */
28   LAMMPS_DOUBLE = 2,       /*!< 64-bit double (array) */
29   LAMMPS_DOUBLE_2D = 3,    /*!< two-dimensional 64-bit double array */
30   LAMMPS_INT64 = 4,        /*!< 64-bit integer (array) */
31   LAMMPS_INT64_2D = 5,     /*!< two-dimensional 64-bit integer array */
32   LAMMPS_STRING = 6        /*!< C-String */
33 };
34 
35 /** Style constants for extracting data from computes and fixes.
36  *
37  * Must be kept in sync with the equivalent constants in lammps/constants.py */
38 
39 enum _LMP_STYLE_CONST {
40   LMP_STYLE_GLOBAL=0,           /*!< return global data */
41   LMP_STYLE_ATOM  =1,           /*!< return per-atom data */
42   LMP_STYLE_LOCAL =2            /*!< return local data */
43 };
44 
45 /** Type and size constants for extracting data from computes and fixes.
46  *
47  * Must be kept in sync with the equivalent constants in lammps/constants.py */
48 
49 enum _LMP_TYPE_CONST {
50   LMP_TYPE_SCALAR=0,            /*!< return scalar */
51   LMP_TYPE_VECTOR=1,            /*!< return vector */
52   LMP_TYPE_ARRAY =2,            /*!< return array */
53   LMP_SIZE_VECTOR=3,            /*!< return length of vector */
54   LMP_SIZE_ROWS  =4,            /*!< return number of rows */
55   LMP_SIZE_COLS  =5             /*!< return number of columns */
56 };
57 
58 /*
59  extern void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr);
60 */
61 extern void  *lammps_open_no_mpi(int argc, char **argv, void **ptr);
62 extern void  *lammps_open_fortran(int argc, char **argv, int f_comm);
63 extern void   lammps_close(void *handle);
64 extern void   lammps_mpi_init();
65 extern void   lammps_mpi_finalize();
66 extern void   lammps_kokkos_finalize();
67 extern void   lammps_python_finalize();
68 extern void   lammps_file(void *handle, const char *file);
69 extern char  *lammps_command(void *handle, const char *cmd);
70 extern void   lammps_commands_list(void *handle, int ncmd, const char **cmds);
71 extern void   lammps_commands_string(void *handle, const char *str);
72 extern double lammps_get_natoms(void *handle);
73 extern double lammps_get_thermo(void *handle, const char *keyword);
74 extern void   lammps_extract_box(void *handle, double *boxlo, double *boxhi,
75                           double *xy, double *yz, double *xz,
76                           int *pflags, int *boxflag);
77 extern void   lammps_reset_box(void *handle, double *boxlo, double *boxhi,
78                         double xy, double yz, double xz);
79 extern void   lammps_memory_usage(void *handle, double *meminfo);
80 extern int    lammps_get_mpi_comm(void *handle);
81 extern int    lammps_extract_setting(void *handle, const char *keyword);
82 extern int    lammps_extract_global_datatype(void *handle, const char *name);
83 extern void  *lammps_extract_global(void *handle, const char *name);
84 extern int    lammps_extract_atom_datatype(void *handle, const char *name);
85 extern void  *lammps_extract_atom(void *handle, const char *name);
86 extern void  *lammps_extract_compute(void *handle, char *id, int, int);
87 extern void  *lammps_extract_fix(void *handle, char *, int, int, int, int);
88 extern void  *lammps_extract_variable(void *handle, char *, char *);
89 extern int    lammps_set_variable(void *, char *, char *);
90 extern void   lammps_gather_atoms(void *, char *, int, int, void *);
91 extern void   lammps_gather_atoms_concat(void *, char *, int, int, void *);
92 extern void   lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *);
93 extern void   lammps_scatter_atoms(void *, char *, int, int, void *);
94 extern void   lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *);
95 extern void   lammps_gather_bonds(void *handle, void *data);
96 extern void   lammps_gather(void *, char *, int, int, void *);
97 extern void   lammps_gather_concat(void *, char *, int, int, void *);
98 extern void   lammps_gather_subset(void *, char *, int, int, int, int *, void *);
99 extern void   lammps_scatter(void *, char *, int, int, void *);
100 extern void   lammps_scatter_subset(void *, char *, int, int, int, int *, void *);
101 extern int    lammps_create_atoms(void *handle, int n, int *id, int *type,
102                            double *x, double *v, int *image, int bexpand);
103 /*
104  extern int    lammps_create_atoms(void *handle, int n, int64_t *id, int *type, */
105 extern int    lammps_find_pair_neighlist(void*, char *, int, int, int);
106 extern int    lammps_find_fix_neighlist(void*, char *, int);
107 extern int    lammps_find_compute_neighlist(void*, char *, int);
108 extern int    lammps_neighlist_num_elements(void*, int);
109 extern void   lammps_neighlist_element_neighbors(void *, int, int, int *, int *, int ** );
110 extern int    lammps_version(void *handle);
111 extern void   lammps_get_os_info(char *buffer, int buf_size);
112 extern int    lammps_config_has_mpi_support();
113 extern int    lammps_config_has_gzip_support();
114 extern int    lammps_config_has_png_support();
115 extern int    lammps_config_has_jpeg_support();
116 extern int    lammps_config_has_ffmpeg_support();
117 extern int    lammps_config_has_exceptions();
118 extern int    lammps_config_has_package(const char *);
119 extern int    lammps_config_package_count();
120 extern int    lammps_config_package_name(int, char *, int);
121 extern int    lammps_config_accelerator(const char *, const char *, const char *);
122 extern int    lammps_has_gpu_device();
123 extern void   lammps_get_gpu_device_info(char *buffer, int buf_size);
124 extern int    lammps_has_style(void *, const char *, const char *);
125 extern int    lammps_style_count(void *, const char *);
126 extern int    lammps_style_name(void *, const char *, int, char *buffer, int buf_size);
127 extern int    lammps_has_id(void *, const char *, const char *);
128 extern int    lammps_id_count(void *, const char *);
129 extern int    lammps_id_name(void *, const char *, int, char *buffer, int buf_size);
130 extern int    lammps_plugin_count();
131 extern int    lammps_plugin_name(int, char *, char *, int);
132 /*
133  * Have not found a good way to map these functions in a general way.
134  * So some individual customization for the specific use case and compilation is needed.
135  *
136   extern int lammps_encode_image_flags(int ix, int iy, int iz);
137   extern void lammps_decode_image_flags(int image, int *flags);
138   extern int64_t lammps_encode_image_flags(int ix, int iy, int iz);
139   extern void lammps_decode_image_flags(int64_t image, int *flags);
140 
141  * Supporting the fix external callback mechanism will require extra code specific to the application.
142   typedef void (*FixExternalFnPtr)(void *, int64_t, int, int64_t *, double **, double **);
143   extern  void lammps_set_fix_external_callback(void *handle, const char *id, FixExternalFnPtr funcptr, void *ptr);
144  * these two functions can only be used from the callback, so we don't support them either
145   extern  void lammps_fix_external_set_energy_peratom(void *handle, const char *id, double *eng);
146   extern void lammps_fix_external_set_virial_peratom(void *handle, const char *id, double **virial);
147 */
148 extern double **lammps_fix_external_get_force(void *handle, const char *id);
149 extern void   lammps_fix_external_set_energy_global(void *handle, const char *id, double eng);
150 extern void   lammps_fix_external_set_virial_global(void *handle, const char *id, double *virial);
151 extern void   lammps_fix_external_set_vector_length(void *handle, const char *id, int len);
152 extern void   lammps_fix_external_set_vector(void *handle, const char *id, int idx, double val);
153 
154 extern void   lammps_free(void *ptr);
155 extern int    lammps_is_running(void *handle);
156 extern void   lammps_force_timeout(void *handle);
157 extern int    lammps_has_error(void *handle);
158 extern int    lammps_get_last_error_message(void *handle, char *buffer, int buf_size);
159 %}
160 
161 enum _LMP_DATATYPE_CONST {
162   LAMMPS_INT    = 0,       /*!< 32-bit integer (array) */
163   LAMMPS_INT_2D  = 1,      /*!< two-dimensional 32-bit integer array */
164   LAMMPS_DOUBLE = 2,       /*!< 64-bit double (array) */
165   LAMMPS_DOUBLE_2D = 3,    /*!< two-dimensional 64-bit double array */
166   LAMMPS_INT64 = 4,        /*!< 64-bit integer (array) */
167   LAMMPS_INT64_2D = 5,     /*!< two-dimensional 64-bit integer array */
168   LAMMPS_STRING = 6        /*!< C-String */
169 };
170 
171 /** Style constants for extracting data from computes and fixes.
172  *
173  * Must be kept in sync with the equivalent constants in lammps/constants.py */
174 
175 enum _LMP_STYLE_CONST {
176   LMP_STYLE_GLOBAL=0,           /*!< return global data */
177   LMP_STYLE_ATOM  =1,           /*!< return per-atom data */
178   LMP_STYLE_LOCAL =2            /*!< return local data */
179 };
180 
181 /** Type and size constants for extracting data from computes and fixes.
182  *
183  * Must be kept in sync with the equivalent constants in lammps/constants.py */
184 
185 enum _LMP_TYPE_CONST {
186   LMP_TYPE_SCALAR=0,            /*!< return scalar */
187   LMP_TYPE_VECTOR=1,            /*!< return vector */
188   LMP_TYPE_ARRAY =2,            /*!< return array */
189   LMP_SIZE_VECTOR=3,            /*!< return length of vector */
190   LMP_SIZE_ROWS  =4,            /*!< return number of rows */
191   LMP_SIZE_COLS  =5             /*!< return number of columns */
192 };
193 
194 /*
195  extern void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr);
196 */
197 extern void  *lammps_open_no_mpi(int argc, char **argv, void **ptr);
198 extern void  *lammps_open_fortran(int argc, char **argv, int f_comm);
199 extern void   lammps_close(void *handle);
200 extern void   lammps_mpi_init();
201 extern void   lammps_mpi_finalize();
202 extern void   lammps_kokkos_finalize();
203 extern void   lammps_python_finalize();
204 extern void   lammps_file(void *handle, const char *file);
205 extern char  *lammps_command(void *handle, const char *cmd);
206 extern void   lammps_commands_list(void *handle, int ncmd, const char **cmds);
207 extern void   lammps_commands_string(void *handle, const char *str);
208 extern double lammps_get_natoms(void *handle);
209 extern double lammps_get_thermo(void *handle, const char *keyword);
210 extern void   lammps_extract_box(void *handle, double *boxlo, double *boxhi,
211                           double *xy, double *yz, double *xz,
212                           int *pflags, int *boxflag);
213 extern void   lammps_reset_box(void *handle, double *boxlo, double *boxhi,
214                         double xy, double yz, double xz);
215 extern void   lammps_memory_usage(void *handle, double *meminfo);
216 extern int    lammps_get_mpi_comm(void *handle);
217 extern int    lammps_extract_setting(void *handle, const char *keyword);
218 extern int    lammps_extract_global_datatype(void *handle, const char *name);
219 extern void  *lammps_extract_global(void *handle, const char *name);
220 extern int    lammps_extract_atom_datatype(void *handle, const char *name);
221 extern void  *lammps_extract_atom(void *handle, const char *name);
222 extern void  *lammps_extract_compute(void *handle, char *id, int, int);
223 extern void  *lammps_extract_fix(void *handle, char *, int, int, int, int);
224 extern void  *lammps_extract_variable(void *handle, char *, char *);
225 extern int    lammps_set_variable(void *, char *, char *);
226 extern void   lammps_gather_atoms(void *, char *, int, int, void *);
227 extern void   lammps_gather_atoms_concat(void *, char *, int, int, void *);
228 extern void   lammps_gather_atoms_subset(void *, char *, int, int, int, int *, void *);
229 extern void   lammps_scatter_atoms(void *, char *, int, int, void *);
230 extern void   lammps_scatter_atoms_subset(void *, char *, int, int, int, int *, void *);
231 extern void   lammps_gather_bonds(void *handle, void *data);
232 extern void   lammps_gather(void *, char *, int, int, void *);
233 extern void   lammps_gather_concat(void *, char *, int, int, void *);
234 extern void   lammps_gather_subset(void *, char *, int, int, int, int *, void *);
235 extern void   lammps_scatter(void *, char *, int, int, void *);
236 extern void   lammps_scatter_subset(void *, char *, int, int, int, int *, void *);
237 extern int    lammps_create_atoms(void *handle, int n, int *id, int *type,
238                            double *x, double *v, int *image, int bexpand);
239 /*
240  extern int    lammps_create_atoms(void *handle, int n, int64_t *id, int *type, */
241 extern int    lammps_find_pair_neighlist(void*, char *, int, int, int);
242 extern int    lammps_find_fix_neighlist(void*, char *, int);
243 extern int    lammps_find_compute_neighlist(void*, char *, int);
244 extern int    lammps_neighlist_num_elements(void*, int);
245 extern void   lammps_neighlist_element_neighbors(void *, int, int, int *, int *, int ** );
246 extern int    lammps_version(void *handle);
247 extern void   lammps_get_os_info(char *buffer, int buf_size);
248 extern int    lammps_config_has_mpi_support();
249 extern int    lammps_config_has_gzip_support();
250 extern int    lammps_config_has_png_support();
251 extern int    lammps_config_has_jpeg_support();
252 extern int    lammps_config_has_ffmpeg_support();
253 extern int    lammps_config_has_exceptions();
254 extern int    lammps_config_has_package(const char *);
255 extern int    lammps_config_package_count();
256 extern int    lammps_config_package_name(int, char *, int);
257 extern int    lammps_config_accelerator(const char *, const char *, const char *);
258 extern int    lammps_has_gpu_device();
259 extern void   lammps_get_gpu_device_info(char *buffer, int buf_size);
260 extern int    lammps_has_style(void *, const char *, const char *);
261 extern int    lammps_style_count(void *, const char *);
262 extern int    lammps_style_name(void *, const char *, int, char *buffer, int buf_size);
263 extern int    lammps_has_id(void *, const char *, const char *);
264 extern int    lammps_id_count(void *, const char *);
265 extern int    lammps_id_name(void *, const char *, int, char *buffer, int buf_size);
266 extern int    lammps_plugin_count();
267 extern int    lammps_plugin_name(int, char *, char *, int);
268 /*
269 extern int lammps_encode_image_flags(int ix, int iy, int iz);
270 extern void lammps_decode_image_flags(int image, int *flags);
271 extern int64_t lammps_encode_image_flags(int ix, int iy, int iz);
272 extern void lammps_decode_image_flags(int64_t image, int *flags);
273 typedef void (*FixExternalFnPtr)(void *, int64_t, int, int64_t *, double **, double **);
274 extern  void lammps_set_fix_external_callback(void *handle, const char *id, FixExternalFnPtr funcptr, void *ptr);
275 extern  void lammps_fix_external_set_energy_peratom(void *handle, const char *id, double *eng);
276 extern void lammps_fix_external_set_virial_peratom(void *handle, const char *id, double **virial);
277 */
278 extern double **lammps_fix_external_get_force(void *handle, const char *id);
279 extern void   lammps_fix_external_set_energy_global(void *handle, const char *id, double eng);
280 extern void   lammps_fix_external_set_virial_global(void *handle, const char *id, double *virial);
281 extern void   lammps_fix_external_set_vector_length(void *handle, const char *id, int len);
282 extern void   lammps_fix_external_set_vector(void *handle, const char *id, int idx, double val);
283 
284 extern void   lammps_free(void *ptr);
285 extern int    lammps_is_running(void *handle);
286 extern void   lammps_force_timeout(void *handle);
287 extern int    lammps_has_error(void *handle);
288 extern int    lammps_get_last_error_message(void *handle, char *buffer, int buf_size);
289 
290 /* last revised on 21 July 2021 */
291