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