Metadata-Version: 2.1
Name: atomman
Version: 1.3.7
Summary: Atomistic Manipulation Toolkit
Home-page: https://github.com/usnistgov/atomman/
Author: Lucas Hale
Author-email: lucas.hale@nist.gov
License: UNKNOWN
Keywords: atom,atomic,atomistic,molecular dynamics
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Science/Research
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Dist: xmltodict
Requires-Dist: DataModelDict
Requires-Dist: numericalunits
Requires-Dist: numpy (>=1.15)
Requires-Dist: matplotlib
Requires-Dist: scipy
Requires-Dist: pandas
Requires-Dist: cython
Requires-Dist: requests
Requires-Dist: toolz
Requires-Dist: potentials (==0.2.8)

AtomMan
=======

Atomistic Manipulation Toolkit

AtomMan: the Atomistic Manipulation Toolkit is a Python library for
creating, representing, manipulating, and analyzing large-scale atomic
systems of atoms. The focus of the package is to facilitate the rapid design
and development of simulations that are fully documented and easily adaptable
to new potentials, configurations, etc.  The code has no requirements that
limit which systems it can be used on, i.e. it should work on Linux, Mac and
Windows computers.

Features:

1. Allows for efficient and fast calculations on millions of atoms, each with
   many freely defined per-atom properties.

2. Built-in tools for generating and analyzing crystalline defects, such as
   point defects, stacking faults, and dislocations.

4. Call LAMMPS directly from Python and instantly retrieve the resulting data
   or LAMMPS error statement.

5. Easily convert systems to/from the other Python atomic representations, such
   as ase.Atoms and pymatgen.Structure.

6. Can read and dump crystal structure information from a number of formats,
   such as LAMMPS data and dump files, and POSCAR.

7. Built-in unit conversions.

Installation
------------

The atomman package is compatible with Python 3.6+.

The latest release can be installed using pip::

    pip install atomman

or using conda from the conda-forge channel::

    conda config --add channels conda-forge
    conda config --set channel_priority strict
    conda install <package-name>

For Windows users, it is recommended to use an Anaconda distribution and use
conda to install numpy, scipy, matplotlib, pandas and cython prior to
installing atomman.

Alternatively, all code and documentation can be downloaded from GitHub.

- The stable releases are available at
  `https://github.com/usnistgov/atomman <https://github.com/usnistgov/atomman>`__.

- The working development versions are at
  `https://github.com/lmhale99/atomman <https://github.com/lmhale99/atomman>`__.

Library setup
-------------
Starting with version 1.3.3 atomman uses the potentials Python package to
interact with the potentials.nist.gov database.  This allows for users to
easily search, discover and use the NIST-hosted interatomic potentials as well
as some computed properties associated with the potentials.  There are a few
setup options that can help you get the most out of this feature.

Note: the Python packages potentials, atomman and iprPy all share the same
settings file.  Updating the library settings in one package will carry over
to the other packages.

Changing the library directory
``````````````````````````````
Potential files and database records associated with the potentials can be
saved locally to a library directory.  The default location of the library
directory is <HOME>/.NISTPotentials/library. You can easily change the path
to a more accessible location if you wish::

    import atomman as am
    settings = am.Settings()
    settings.set_library_directory("NEWPATH")

Default behavior
````````````````
The atomman.Library class serves as the central means of interacting with the
records database.  By default, the class will search for matching records
first from the local library directory, then from the remote
potentials.nist.gov.  If records with the same name are found in both
locations, the local copy will be taken over the remote.  This makes it
possible for users to modify existing records and add their own user-defined
records. 

All of the Library methods that retrieve/load records and the load function
options that use the Library class have the following parameters

- **remote** (*bool*) indicates if the remote potentials.nist.gov will be
  searched.
- **local** (*bool*) indicates if the local library directory will be searched.
- **localpath** (*str*) allows for an alternate local library directory path
   to be searched.

Heavy-usage/offline behavior
````````````````````````````
For users who plan on extensive interactions with the database or who are
running on systems with limited internet availability, the following steps are
recommended:

1. Download/clone the github repository at
   https://github.com/lmhale99/potentials-library to the library directory.
   This github repository is a snapshot copy of all potential records at
   potentials.nist.gov and is kept (mostly) up to date.
2. In Python, load atomman.Settings() and set the default remote behavior to
   False::

    settings.set_remote(False)

   With this setting, the default value of remote parameter (above) for the
   Library class methods will be False. This eliminates the need for an
   internet connection (after step 1) and is typically much faster at
   retrieving records.

Documentation
-------------

Web-based documentation for the atomman package is available at
`https://www.ctcms.nist.gov/potentials/atomman <https://www.ctcms.nist.gov/potentials/atomman>`__.

Source code for the documentation can be found in the
`github doc directory <https://github.com/usnistgov/atomman/tree/master/doc/>`__.
The doc directory contains the information both as the source RestructuredText
files and as unformatted HTML. If you download a copy, you can view the HTML
version offline by

    cd {atomman_path}/doc/html
    python -m http.server

Then, opening localhost:8000 in a web browser.

The documentation consists of two main components:

1. **Tutorial Jupyter Notebooks:**
   `Online html version <https://www.ctcms.nist.gov/potentials/atomman/tutorial/index.html>`__,
   `Downloadable Notebook version <https://github.com/usnistgov/atomman/tree/master/doc/tutorial>`__.
   The tutorials starting with ##. provide a general overview/example of the
   various capabilities.  The tutorials starting with ##.#. give more detailed
   descriptions and list options available to the tools mentioned in the
   overview tutorials.

2. **Code Documentation:**
   `Online html version <https://www.ctcms.nist.gov/potentials/atomman/atomman.html>`__.
   This provides a rendering of the Python docstrings for the included
   functions and classes.


Optional packages
-----------------

This is a list of additional Python packages that are needed for some of the
optional features of the package.

- `diffpy.Structure <http://www.diffpy.org/diffpy.Structure/>`__:
  CIF reader. Required for loading systems from CIF files.

- `ase <https://wiki.fysik.dtu.dk/ase/>`__:
  The Atomic Simulation Environment for interacting with small systems
  and DFT calculations. Required for converting to/from ase.Atoms objects.

- `pymatgen <http://pymatgen.org/>`__:
  The Python Materials Genomics package used by the Materials
  Project for DFT calculations. Required for converting to/from
  pymatgen.Structure objects.

- `spglib <https://atztogo.github.io/spglib/python-spglib.html>`__:
  A Python interface to the spglib spacegroup analysis code.  spglib
  can be used to analyze and determine the spacegroup for an atomic system.
  Required for converting to/from spglib.cell objects.


