Fortran interface to chemfiles

This is the documentation for the Fortran 2003 interface to the chemfiles library. This Fortran interface to chemfiles is built in an object-oriented fashion, using the C interface of chemfiles and the iso_c_binding intrisic module.

All the functionalities are in the chemfiles module, which should be used in all the programs using chemfiles. The iso_fortran_env instrisic module can also be usefull to set the kind of real and doubles where needed.

Installation

The fortran interface have the same dependencies as the main C++ library, which are documented here. It also need a modern fortran compiler. gfortran (4.9) and ifort (14) are known to work. If you manage to build it with another compiler, please tell me so that I can add it here.

# Get the sources:
git clone --recursive https://github.com/chemfiles/chemfiles.f03
cd chemfiles.f03
mkdir build && cd build
# Configure for installation in <PREFIX>
cmake -DCMAKE_INSTALL_PREFIX=<PREFIX> -DCHFL_FORTRAN_BUILD_TESTS=ON ..
# Build
make
# run tests (optional, but recommended)
ctest
# install to <PREFIX>
make install

Other options are available and documented with the main C++ library.

Usage

Once you have installed chemfiles to a given <PREFIX>, you can use it in your code with the use chemfiles directive:

program test
    use chemfiles
    implicit none

    ! some code
end program

Then you can compile this file with your favorite Fortran compiler, here assuming gfortran or intel ifort:

# replace <FC> with your compiler: gfortran, ifort
<FC> -c main.f90 -o main.o -I<PREFIX>/include

The -I<PREFIX>/include might not be needed, depending on where you installed chemfiles. This must be the path to the chemfiles.mod file.

Linking your program into a final executable is a bit trickier, as Chemfiles is a C++ library, and both C++ and Fortran have a non-zero runtime (libstc++/libc++ for C++ and libgfortran/libifort for Fortran). This means that you need to link both runtimes in the final executable.

The easiest way to do this is to build chemfiles as a shared library, by configuring the code with cmake -DBUILD_SHARED_LIBS=ON ... Then, you can link you final executable with:

<FC> main.o -o main -lchemfilesf03 -lchemfiles

The order of the libraries on the command line is important (-lchemfilesf03 -lchemfiles is not the same as -lchemfiles -lchemfilesf03).

If you want to use static libraries, then you will need to explicitly link the C++ and Fortran runtime manually. On OS X, the C++ runtime is linked with -lc++ and on Linux you need -lstdc++. You can also link gfortran fortran runtime with -lgfortran. For intel ifort you should use ifort as a linker and whatever C++ library is needed.

User documentation

This section contains example of how to use chemfiles, and the complete interface reference for all the types and subroutines in chemfiles.