The KIM development team is pleased to announce the release of version
2.0.0-alpha.0 of the KIM API package. The package has been completely rewritten, offering a simpler interface with many improvements and new features.
This new API is not backwards compatible. In fact, many features available in version 1 of the API are no longer supported. This was done deliberately, after careful consideration, to simplify the interface and maximize the likelihood of simulators and models working together. The most significant changes include:
Version 1 of the API has multiple "neighbor list boundary conditions" (NBCs) methods that can be difficult to understand, difficult to support both in models and simulators, and can lead to models and simulators not working together despite both supporting the API. In the new version there is a single mode of operation that is clearly defined in documentation, easy to support, and universal.
In version 1, matching between simulators and models uses the notion of "KIM descriptor files" that are compared to determine compatibility. This comparison process is insufficiently robust to deal with complex edge cases. Version 2 no longer has KIM descriptor files. Instead a model specifies its arguments programatically, and indicates whether they are required or optional. A simulator uses this information to determine whether it is compatible or not, and what information it needs to provide.
Version 1 of the API includes the ability to allocate storage on behalf of a simulator. This behavior is generally undesirable for efficiency reasons and can lead to unintentional memory leaks. In version 2, simulators and models are responsible for allocating and freeing their own memory.
A complete list of KIM API V2 features is given below.
alpha release is being made available to solicit feedback, before the official kim-api-v2.0.0 release, from the KIM API user-base and the broader KIM community. The package released today is fully functional, although not complete. Many internal error checks and error messages must still be implemented and the new Doxygen-based documentation and manual contain only minimal information at this time.
We want to hear from you. Your questions, suggestions for improvement, and future feature requests are very welcome. Just post to the openkim mailing list. As we work toward completing the implementation and documentation, we will incorporate your suggestions and feedback into the final official release of the kim-api-v2.0.0 package.
The kim-api-v2.0.0 package has the following main features:
Supported Programming Languages: C++, C, Fortran
Best Practice API Design: The guiding design principle for the KIM API V2 package has been simplicity. In addition to this, general API design best practices have been used.
Language Idiom Support: Wherever it makes sense and is possible the KIM API supports common idioms of the native language.
Extensible, Strongly-Typed Enumerations: The KIM API implements a set of typed constants for each category of entity that it defines.
Numbering Origin Support: Support for automatic translation between zero-based numbering of particles (C-style numbering beginning with zero) and one-based numbering (Fortran-style numbering beginning with one).
Data Communication: Communication of an arbitrary number of arguments between a Model (interatomic potential) and a Simulator (simulation code that uses a Model).
Data types: integer and double.
Physical Units: The KIM API standard defines the physical units for each argument exchanged between a Model and Simulator.
Neighbor lists: Neighbor list routines are expected to be provided by the calling Simulator.
Particle Species: The KIM API provides the ability to designate the physical species of each particle in a simulation.
Model Parameters: The KIM API allows a Model to (optionally) "publish" its parameters so that a Simulator may modify them during the course of a simulation.
Model Drivers: The KIM API package provides the ability to create Model Driver routines.
Logging capabilities: The KIM API package provides a full-featured logging capability that facilitates the identification and debugging of errors.
Documentation: The KIM API package now provides a Doxygen-generated manual and API documentation.
Semantic Versioning: The KIM API package conforms to the Semantic Versioning 2.0.0 standard.
For more information on these features see the new documentation. To see a summary of the differences between KIM API V1 and KIM API V2, see this page. Also see the
INSTALL files in the KIM API package root directory after downloading and extracting the package.