MetalWalls Documentation
========================

MetalWalls (MW) is a molecular dynamics code dedicated to the modelling of electrochemical systems. Its main originality is the inclusion of a series of methods allowing to apply a constant potential within the electrode materials.

Details of the implemented force fields, thermodynamic ensembles and models are given below. In the second section, we present a description of the installation process and of input and output files. Lastly, guidelines for developers are provided in the last section.


#  Theory
This section contains some theoretical background on the molecular dynamics and the models implemented in MW.

* ## [Units](units)
Throughout the source code and the input files, atomic units are used (except for some specific parameters). This section gives conversion factors to common units.

* ## [Force field](force-field)
This section details the force fields implemented in MW. It discusses intermolecular potentials, intramolecular potentials and electrostatic interactions.

* ## [Time integration](time-integration)
This section discusses the algorithms used to propagate the equations of motion (Velocity-Verlet), for NVE, NVT and NPT or NPzT simulations, and the algorithms used to enforce constraints on the system (RATTLE and linear RATTLE).

* ## [Ewald summation](ewald)
This section gives the equations for Ewald summation implemented in the source code.

* ## [Constant potential simulations](constant-potential)
This section describes how the constant potential condition is enforced. Several methods are available: a conjugate gradient minimization procedure, a mass-zero constrained method or an analytical matrix inversion.

* ## [Polarization effects](polarization-effects)

This section describes how polarizable force fields are handled. Several methods are available: a conjugate gradient minimization procedure, a mass-zero constrained method or an analytical matrix inversion.

* ## [Ion deformation effects](ion-deformation-effects)

This section describes how the aspherical ion model is handled through the use of a conjugate gradient minimization procedure. 

# User Documentation

* ## [Compiling and running MW](install)

This section describes how to compile the MW source code and how to run and restart a MW simulation.

[Supercomputing systems](supercomputing_systems)


* ## MW input files

This section describes the input files for MW, for which examples are provided in the *./example/* directory.
MW requires two input files called *data.inpt* and *runtime.inpt*.

### [System Configuration - runtime.inpt](system-configuration)

### [Data input file format - data.inpt](data-input-file-format)


* ## [MW output files](output-files)

This section describes the output files for MW.


* ## [Analysis scripts](analysis-scripts)

This section describes some analysis scripts given in the *./tools/* folder.

* ## [Examples](examples)

This section describes the examples of input files given in the *./example/* folder.


# Developper Documentation

This section provides some guidelines for doing developpement into the code.

* ## [Getting started](getting-started)
This section gives general information on the structure of the repository and some coding rules to follow.

* ## [Continuous integration](continuous-integration)
This section introduces the continuous integration procedure implemented using the gitlab to test new versions of the code.

* ## [Parallelization and localwork](parallelization)
This section provides information on how the parallelization is done in MW.

* ## [Python interface](python-interface)
This section explains what is the python interface of MW and how to use it.

* ## [Workshops](workshops)
This section contains slides of previous workshops.
