QCaml (Quantum Camel)
=====================

<img src="data/chamo_bg.png"  width="300" >

QCaml is a quantum chemistry software written in OCaml.

Requirements
------------

* BLAS/LAPACK : Linear algebra
* LaCaml : LAPACK OCaml interface
* gmp : GNU Multiple Precision arithmetic library
* Zarith : Arbitrary-precision integers
* GetOpt : Parsing of command-line
* Alcotest : Lightweight testing framework
* odoc-ltxhtml : https://github.com/akabe/odoc-ltxhtml

```bash
opam install dune lacaml getopt alcotest zarith camlp-streams
```

To use the Intel MKL library:

```bash
export  LACAML_LIBS="-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_rt -lpthread -lm -ldl"
opam install --assume-depexts lacaml
```

How to build the project
------------------------

Run `make` to compile the libraries and executables that are
meant to be installed.
```
$ make -j
```

How to run tests
----------------

```
$ make test
```

How to use local libraries interactively
----------------------------------------

Use `dune utop DIR` where DIR if the folder contains the `dune`
file for a library. For instance, our `sub2` sample library can be
used as follows:

```
$ dune utop sub2/lib
...
utop # Proj_sub2.A.do_something ();;
1525373137.245 seconds have elapsed since 1970-01-01T00:00:00.
- : unit = ()
```

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

The project can be installed with or without opam.
Without opam, you can run the following which relies directly on
dune:
```
$ make install
```
Similarly:
```
$ make uninstall
```

With opam, you can install the current development version of your
project as a single opam package. It will override the currently
installed package of the same name, if any:
```
$ opam pin add QCaml .
```
For more information on `opam pin`, please consult the opam documentation.

The advantage of the opam-based method is that other opam packages can
depend on this one, and opam will recompile them automatically as
necessary.
