Commit af8e258e authored by Ryan S. Elliott's avatar Ryan S. Elliott
Browse files

Revert to previous code without plug-in interface

parent 3f3bab4e
Loading
Loading
Loading
Loading

lib/kim/KIM_LAMMPS_PlugIn.h

deleted100644 → 0
+0 −210
Original line number Diff line number Diff line
// Copyright 2018 Regents of the University of Minnesota
// All rights reserved.
//
// Contributing authors: Ryan S. Elliott

#define KIM_STATUS_OK 1
#define KIM_STATUS_NEIGH_ITER_PAST_END 2
#define KIM_STATUS_NEIGH_ITER_INIT_OK 3
#define KIM_STATUS_NEIGH_INVALID_REQUEST -11
#define KIM_STATUS_NEIGH_INVALID_MODE -6
#define KIM_COMPUTE_FALSE 0
#define KIM_COMPUTE_TRUE 1
#define KIM_STATUS_FAIL 0

#include "dlfcn.h"
#include "error.h"

namespace LAMMPS_NS {

class KIM_LAMMPS_PlugIn {
 public:
  ~KIM_LAMMPS_PlugIn() {};
  KIM_LAMMPS_PlugIn() : library(NULL) {};

  bool setup_kim_api_library(Error * const error);
  bool is_strictly_between_1_5_and_2_0;

  // KIM symbols
  void* library;
  int (*report_error)(int line, const char *, const char *, int);
  void (*setm_compute_by_index)(void *, int *, ...);
  int (*model_compute)(void *);
  int (*model_init)(void *);
  int (*model_reinit)(void *);
  void * (*get_sim_buffer)(void *, int *);
  void * (*get_data_by_index)(void *, int, int *);
  int (*model_destroy)(void *);
  void (*free)(void *, int *);
  int (*string_init)(void *, const char *, const char *);
  int (*is_half_neighbors)(void *, int *);
  int (*get_NBC_method)(void *, const char **);
  int (*get_index)(void *, const char *, int *);
  int (*getm_index)(void *, int *, int, ...);
  int (*get_species_code)(void *, const char *, int *);
  void (*setm_data_by_index)(void *, int *, int, ...);
  int (*set_method_by_index)(void *, int, intptr_t, void (*)());
  void (*set_sim_buffer)(void *, void *, int *);
  int (*set_data_by_index)(void *, int, intptr_t, void *);
  void (*set_compute_by_index)(void *, int, int, int*);
  int (*get_num_params)(void *, int *, int *);
  int (*get_free_parameter)(void *, const int, const char **);
  void * (*get_data)(void *, const char *, int *);
  intptr_t (*get_rank)(void *, const char *, int *);
  intptr_t (*get_shape)(void *, const char *, int *, int *);
  int (*model_info)(void *, const char *);
};


bool KIM_LAMMPS_PlugIn::setup_kim_api_library(Error * error)
{
  if (library == NULL)
  {
#ifdef KIM_INSTALL_DIR
    library = dlopen(KIM_INSTALL_DIR "/lib/libkim-api-v1.so", RTLD_NOW);
#endif

    if (library == NULL)
      library = dlopen("kim-api-v1.so", RTLD_NOW);

    if (library == NULL)
    {
      error->all(FLERR,"KIM API library cannot be found");
      return false;
    }
    else
    {
      // check for version and set is_strictly_between_1_5_and_2_0
      void * ver = dlsym(library, "KIM_API_get_version");
      if (ver == NULL)
        is_strictly_between_1_5_and_2_0 = false;
      else
        is_strictly_between_1_5_and_2_0 = true;

      std::string error_prefix("KIM API library error: ");
      // get symbols
      if (NULL == (report_error =
                   (int (*)(int, const char *, const char *, int))
                   dlsym(library, "KIM_API_report_error")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (setm_compute_by_index =
                   (void (*)(void *, int *, ...))
                   dlsym(library, "KIM_API_setm_compute_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (model_compute = (int (*)(void *))
                   dlsym(library, "KIM_API_model_compute")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (model_init = (int (*)(void *))
                   dlsym(library, "KIM_API_model_init")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (model_reinit = (int (*)(void *))
                   dlsym(library, "KIM_API_model_reinit")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_sim_buffer = (void * (*)(void *, int *))
                   dlsym(library, "KIM_API_get_sim_buffer")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_data_by_index = (void * (*)(void *, int, int *))
                   dlsym(library, "KIM_API_get_data_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (model_destroy = (int (*)(void *))
                   dlsym(library, "KIM_API_model_destroy")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (free = (void (*)(void *, int *))
                   dlsym(library, "KIM_API_free")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (string_init =
                   (int (*)(void *, const char *, const char *))
                   dlsym(library, "KIM_API_string_init")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (is_half_neighbors = (int (*)(void *, int *))
                   dlsym(library, "KIM_API_is_half_neighbors")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_NBC_method = (int (*)(void *, const char **))
                   dlsym(library, "KIM_API_get_NBC_method")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_index = (int (*)(void *, const char *, int *))
                   dlsym(library, "KIM_API_get_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (getm_index = (int (*)(void *, int *, int, ...))
                   dlsym(library, "KIM_API_getm_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_species_code =
                   (int (*)(void *, const char *, int *))
                   dlsym(library, "KIM_API_get_species_code")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (setm_data_by_index =
                   (void (*)(void *, int *, int, ...))
                   dlsym(library, "KIM_API_setm_data_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (set_method_by_index =
                   (int (*)(void *, int, intptr_t, void (*)()))
                   dlsym(library, "KIM_API_set_method_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (set_sim_buffer = (void (*)(void *, void *, int *))
                   dlsym(library, "KIM_API_set_sim_buffer")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (set_data_by_index =
                   (int (*)(void *, int, intptr_t, void *))
                   dlsym(library, "KIM_API_set_data_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (set_compute_by_index =
                   (void (*)(void *, int, int, int*))
                   dlsym(library, "KIM_API_set_compute_by_index")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_num_params = (int (*)(void *, int *, int *))
                   dlsym(library, "KIM_API_get_num_params")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_free_parameter =
                   (int (*)(void *, const int, const char **))
                   dlsym(library, "KIM_API_get_free_parameter")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_data = (void * (*)(void *, const char *, int *))
                   dlsym(library, "KIM_API_get_data")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_rank =
                   (intptr_t (*)(void *, const char *, int *))
                   dlsym(library, "KIM_API_get_rank")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (get_shape =
                   (intptr_t (*)(void *, const char *, int *, int *))
                   dlsym(library, "KIM_API_get_shape")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

      if (NULL == (model_info = (int (*)(void *, const char *))
                   dlsym(library, "KIM_API_model_info")))
        error->all(FLERR,(error_prefix + std::string(dlerror())).c_str());

    return true;
    }
  }
  else
  {
    return true;
  }
}

}  // namespace LAMMPS_NS
+12 −3
Original line number Diff line number Diff line
@@ -18,6 +18,15 @@

include ../../lib/kim/Makefile.KIM_DIR

kim_SYSINC  = -I../../lib/kim -DKIM_INSTALL_DIR=\"$(KIM_INSTALL_DIR)\"
kim_SYSLIB  = -ldl
kim_SYSPATH =
ifeq ($(wildcard $(KIM_INSTALL_DIR)/bin/kim-api-v1-build-config),)
  KIM_CONFIG_HELPER = kim-api-v1-build-config
else
  KIM_CONFIG_HELPER = $(KIM_INSTALL_DIR)/bin/kim-api-v1-build-config
endif
ifeq ($(shell $(KIM_CONFIG_HELPER) --version 2> /dev/null),)
  $(error $(KIM_CONFIG_HELPER) utility is not available.  Something is wrong with your KIM API package setup)
endif

kim_SYSINC  = $(shell $(KIM_CONFIG_HELPER) --includes)
kim_SYSLIB  = $(shell $(KIM_CONFIG_HELPER) --ldlibs)
kim_SYSPATH = $(shell $(KIM_CONFIG_HELPER) --ldflags)
+111 −122

File changed.

Preview size limit exceeded, changes collapsed.

+4 −9
Original line number Diff line number Diff line
@@ -31,11 +31,12 @@ PairStyle(kim,PairKIM)
#ifndef LMP_PAIR_KIM_H
#define LMP_PAIR_KIM_H

// includes from KIM & LAMMPS
class KIM_API_model;
#include "pair.h"


namespace LAMMPS_NS {
   // Forward declare KIM_LAMMPS_PlugIn
   class KIM_LAMMPS_PlugIn;

   class PairKIM : public Pair {
   public:
@@ -86,8 +87,7 @@ namespace LAMMPS_NS {
      unit_sys lmps_units;

      // values set in set_kim_model_has_flags(), called by kim_init()
      KIM_LAMMPS_PlugIn * kim;
      void * pkim;
      KIM_API_model* pkim;
      bool kim_model_has_energy;
      bool kim_model_has_forces;
      bool kim_model_has_particleEnergy;
@@ -145,7 +145,6 @@ namespace LAMMPS_NS {
      void set_kim_model_has_flags();
      void write_descriptor(char** test_descriptor_string);
      // static methods used as callbacks from KIM
      static void * (*kim_get_sim_buffer)(void *, int *);
      static int get_neigh(void** kimmdl, int* mode, int* request,
                           int* atom, int* numnei, int** nei1atom,
                           double** pRij);
@@ -163,10 +162,6 @@ Self-explanatory. Check the input script syntax and compare to the
documentation for the command.  You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.

E: KIM API library cannot be found

Self-explanatory.

E: Unrecognized virial argument in pair_style command

Only two options are supported: LAMMPSvirial and KIMvirial