##############
Installation
##############
Installing ``koopmans`` takes three steps: the electronic-structure codes, the Python
package, and then one command that sets up the engine that runs your calculations.
********************************
The electronic-structure codes
********************************
``koopmans`` does not do any of the electronic-structure work itself. It writes the
inputs, runs `Quantum ESPRESSO `_ and `Wannier90
`_, and reads the outputs back. Their executables must be on your
``PATH`` before you set up the engine.
Which executables you need depends on what you want to calculate:
- ``pw.x`` is needed by everything.
- ``kcp.x`` computes screening parameters from total-energy differences, and evaluates
the corrected functional. On a periodic system that route also uses ``wann2kcp.x`` and
``merge_evc.x``.
- ``kcw.x`` computes the screening parameters from linear response instead, and
interpolates the final band structure.
- ``wannier90.x`` and ``pw2wannier90.x`` construct the localized orbitals that periodic
systems use as variational orbitals.
- ``projwfc.x`` is optional, and gives you a projected density of states alongside a
Wannierization.
- ``ph.x`` computes dielectric constants.
Choosing the blocks of a Wannierization automatically additionally needs `Wannier.jl
`_ and a Julia interpreter. Everything else
works without them.
********************
The Python package
********************
``koopmans`` requires Python 3.12 or 3.13. Install the most recent code from GitHub with
uv:
.. code-block:: console
$ uv pip install git+https://github.com/elinscott/koopmans.git
or with pip:
.. code-block:: console
$ python3 -m pip install git+https://github.com/elinscott/koopmans.git
************
The engine
************
Calculations are dispatched, run and recorded by a background engine, which keeps track
of what has already been computed so that an interrupted workflow can be resumed and a
repeated calculation is not run twice. Set it up once, with
.. code-block:: console
$ koopmans install
This creates the database that records your calculations, installs and starts the job
scheduler, finds those executables on your ``PATH`` and registers them, and starts the
background engine. It reports which executables it found; if one you need is missing,
put it on your ``PATH`` and run the command again, or point at it explicitly:
.. code-block:: console
$ koopmans install --code pw=/opt/qe/bin/pw.x
By default each calculation is given as many MPI processes as your machine has physical
cores. Use ``--procs-per-calc`` to change that, and ``--max-procs`` to cap how many
processes may run at once across all concurrent calculations.
Not every executable is compiled with MPI, and running a serial build under ``mpirun``
starts several copies of it in one directory, where they overwrite each other's files.
``koopmans install`` therefore looks for a call to ``MPI_Init`` in each executable it
registers, and in the shared libraries that executable links, and reports what it
decided:
.. code-block:: text
MPI:
pw parallel (links libqe_modules.so.7, which calls mpi_init_)
wannier90 serial (no MPI_Init call in the binary or the libraries it links)
Merely linking an MPI runtime does not count: a build produced by ``mpif90`` records
``libmpi`` whether or not any MPI call survives compilation. An executable in which no
MPI call can be found is registered serial, which is slower but always correct. If the
answer is wrong for one of your executables, overrule it:
.. code-block:: console
$ koopmans install --parallel wannier90
$ koopmans install --serial pw
Rerunning ``koopmans install`` also re-inspects codes registered earlier and replaces any
that runs the wrong way. A replacement code node is a new node, so calculations cached
against the old one are no longer reused and will run again; the install reports which
codes it replaced, and ``--no-migrate`` skips the step entirely.
To check on the engine at any point:
.. code-block:: console
$ koopmans backend status
The engine runs in the background between calculations. If you reboot, or if it stops
for any other reason, start it again with
.. code-block:: console
$ koopmans backend daemon start
and stop it with ``koopmans backend daemon stop``.
The scheduler that hands your calculations onto the machine's cores has its own worker
process, managed the same way:
.. code-block:: console
$ koopmans backend hq status
HyperQueue server is running.
worker 3: pool of 24 CPU(s)
each calculation is given 4 MPI rank(s) by default
Start it with ``koopmans backend hq start`` if it is not running. To change the pool
without reinstalling, restart the worker with a new size:
.. code-block:: console
$ koopmans backend hq restart --max-procs 28
Keep the pool at least as large as the ranks one calculation is given — the second
number above. A calculation asking for more ranks than the pool holds can never be
scheduled, so it waits indefinitely rather than failing. To make each calculation
smaller instead, rerun ``koopmans install --procs-per-calc``.
``koopmans backend hq stop`` stops the worker but leaves the scheduler running, so the
queue is not discarded. Check ``hq job summary`` before stopping a worker with work in
flight: a task whose worker disappears may be retried on the next one, in the same
directory as the interrupted run. ``koopmans backend uninstall`` removes the whole
setup, database included.
****************************
Installing for development
****************************
To install in development mode with uv:
.. code-block:: console
$ git clone git+https://github.com/elinscott/koopmans.git
$ cd koopmans
$ uv pip install -e .
or with pip:
.. code-block:: console
$ python3 -m pip install -e .