Files
lammps/tools/lammps-gui/lammpswrapper.cpp
Axel Kohlmeyer 2c636c83f5 check for compatible LAMMPS version when creating LAMMPS instance
This check must be done at runtime, since the LAMMPS shared library
may have been loaded dynamically and thus required library functions
may not be present or missing features with too only a LAMMPS version.
2023-09-25 08:35:23 -04:00

353 lines
9.0 KiB
C++

/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "lammpswrapper.h"
#if defined(LAMMPS_GUI_USE_PLUGIN)
#include "liblammpsplugin.h"
#else
#include "library.h"
#endif
LammpsWrapper::LammpsWrapper() : lammps_handle(nullptr) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
plugin_handle = nullptr;
#endif
}
void LammpsWrapper::open(int narg, char **args)
{
// since there may only be one LAMMPS instance in LAMMPS GUI we don't open a second
if (lammps_handle) return;
#if defined(LAMMPS_GUI_USE_PLUGIN)
lammps_handle = ((liblammpsplugin_t *)plugin_handle)->open_no_mpi(narg, args, nullptr);
#else
lammps_handle = lammps_open_no_mpi(narg, args, nullptr);
#endif
}
int LammpsWrapper::version()
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->version(lammps_handle);
#else
val = lammps_version(lammps_handle);
#endif
}
return val;
}
int LammpsWrapper::extract_setting(const char *keyword)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->extract_setting(lammps_handle, keyword);
#else
val = lammps_extract_setting(lammps_handle, keyword);
#endif
}
return val;
}
void *LammpsWrapper::extract_global(const char *keyword)
{
void *val = nullptr;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->extract_global(lammps_handle, keyword);
#else
val = lammps_extract_global(lammps_handle, keyword);
#endif
}
return val;
}
void *LammpsWrapper::extract_atom(const char *keyword)
{
void *val = nullptr;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->extract_atom(lammps_handle, keyword);
#else
val = lammps_extract_atom(lammps_handle, keyword);
#endif
}
return val;
}
int LammpsWrapper::id_count(const char *keyword)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->id_count(lammps_handle, keyword);
#else
val = lammps_id_count(lammps_handle, keyword);
#endif
}
return val;
}
int LammpsWrapper::id_name(const char *keyword, int idx, char *buf, int len)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->id_name(lammps_handle, keyword, idx, buf, len);
#else
val = lammps_id_name(lammps_handle, keyword, idx, buf, len);
#endif
}
return val;
}
int LammpsWrapper::style_count(const char *keyword)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->style_count(lammps_handle, keyword);
#else
val = lammps_style_count(lammps_handle, keyword);
#endif
}
return val;
}
int LammpsWrapper::style_name(const char *keyword, int idx, char *buf, int len)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val =
((liblammpsplugin_t *)plugin_handle)->style_name(lammps_handle, keyword, idx, buf, len);
#else
val = lammps_style_name(lammps_handle, keyword, idx, buf, len);
#endif
}
return val;
}
int LammpsWrapper::variable_info(int idx, char *buf, int len)
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->variable_info(lammps_handle, idx, buf, len);
#else
val = lammps_variable_info(lammps_handle, idx, buf, len);
#endif
}
return val;
}
double LammpsWrapper::get_thermo(const char *keyword)
{
double val = 0.0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->get_thermo(lammps_handle, keyword);
#else
val = lammps_get_thermo(lammps_handle, keyword);
#endif
}
return val;
}
void *LammpsWrapper::last_thermo(const char *keyword, int index)
{
void *ptr = nullptr;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
ptr = ((liblammpsplugin_t *)plugin_handle)->last_thermo(lammps_handle, keyword, index);
#else
ptr = lammps_last_thermo(lammps_handle, keyword, index);
#endif
}
return ptr;
}
bool LammpsWrapper::is_running()
{
int val = 0;
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
val = ((liblammpsplugin_t *)plugin_handle)->is_running(lammps_handle);
#else
val = lammps_is_running(lammps_handle);
#endif
}
return val != 0;
}
void LammpsWrapper::command(const char *input)
{
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
((liblammpsplugin_t *)plugin_handle)->command(lammps_handle, input);
#else
lammps_command(lammps_handle, input);
#endif
}
}
void LammpsWrapper::file(const char *filename)
{
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
((liblammpsplugin_t *)plugin_handle)->file(lammps_handle, filename);
#else
lammps_file(lammps_handle, filename);
#endif
}
}
void LammpsWrapper::commands_string(const char *input)
{
if (lammps_handle) {
#if defined(LAMMPS_GUI_USE_PLUGIN)
((liblammpsplugin_t *)plugin_handle)->commands_string(lammps_handle, input);
#else
lammps_commands_string(lammps_handle, input);
#endif
}
}
// may be called with null handle. returns global error then.
bool LammpsWrapper::has_error() const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->has_error(lammps_handle) != 0;
#else
return lammps_has_error(lammps_handle) != 0;
#endif
}
// may be called with null handle. returns global error then.
int LammpsWrapper::get_last_error_message(char *buf, int buflen)
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->get_last_error_message(lammps_handle, buf, buflen);
#else
return lammps_get_last_error_message(lammps_handle, buf, buflen);
#endif
}
void LammpsWrapper::force_timeout()
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
if (lammps_handle) ((liblammpsplugin_t *)plugin_handle)->force_timeout(lammps_handle);
#else
if (lammps_handle) lammps_force_timeout(lammps_handle);
#endif
}
void LammpsWrapper::close()
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
if (lammps_handle) ((liblammpsplugin_t *)plugin_handle)->close(lammps_handle);
#else
if (lammps_handle) lammps_close(lammps_handle);
#endif
lammps_handle = nullptr;
}
void LammpsWrapper::finalize()
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
if (lammps_handle) {
liblammpsplugin_t *lammps = (liblammpsplugin_t *)plugin_handle;
lammps->close(lammps_handle);
lammps->mpi_finalize();
lammps->kokkos_finalize();
lammps->python_finalize();
}
#else
if (lammps_handle) {
lammps_close(lammps_handle);
lammps_mpi_finalize();
lammps_kokkos_finalize();
lammps_python_finalize();
}
#endif
}
bool LammpsWrapper::config_has_package(const char *package) const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->config_has_package(package) != 0;
#else
return lammps_config_has_package(package) != 0;
#endif
}
bool LammpsWrapper::config_accelerator(const char *package, const char *category,
const char *setting) const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->config_accelerator(package, category, setting) !=
0;
#else
return lammps_config_accelerator(package, category, setting) != 0;
#endif
}
bool LammpsWrapper::has_gpu_device() const
{
#if defined(LAMMPS_GUI_USE_PLUGIN)
return ((liblammpsplugin_t *)plugin_handle)->has_gpu_device() != 0;
#else
return lammps_has_gpu_device() != 0;
#endif
}
#if defined(LAMMPS_GUI_USE_PLUGIN)
bool LammpsWrapper::has_plugin() const
{
return true;
}
bool LammpsWrapper::load_lib(const char *libfile)
{
if (plugin_handle) {
close();
liblammpsplugin_release((liblammpsplugin_t *)plugin_handle);
}
plugin_handle = liblammpsplugin_load(libfile);
if (!plugin_handle) return false;
if (((liblammpsplugin_t *)plugin_handle)->abiversion != LAMMPSPLUGIN_ABI_VERSION) {
liblammpsplugin_release((liblammpsplugin_t *)plugin_handle);
plugin_handle = nullptr;
return false;
}
return true;
}
#else
bool LammpsWrapper::has_plugin() const
{
return false;
}
bool LammpsWrapper::load_lib(const char *)
{
return true;
}
#endif
// Local Variables:
// c-basic-offset: 4
// End: