Chapter 11. The Octopus Software Project.

[Note]Development note

Development of this chapter has been postponed.

Like the ABINIT software project, Octopus is an open-source collaborative effort of international scope. The project focuses on the optical properties of molecules using the time-dependent density-functional theory (TDDFT)... The RPM build description of Octopus is:


Octopus is a computer package aimed at the simulation of the electron-ion dynamics of finite systems, both in one and three dimensions, under the influence of time-dependent electromagnetic fields. The electronic degrees of freedom are treated quantum mechanically within the time-dependent Kohn-Sham formalism, while the ions are handled classically. All quantities are expanded in a regular mesh in real space, and the simulations are performed in real time. Although not optimized for that purpose, the program is also able to obtain static properties like ground-state geometries, or static polarizabilities. The method employed proved quite reliable and general, and has been successfully used to calculate linear and non-linear absorption spectra, harmonic spectra, laser induced fragmentation, etc. of a variety of systems, from small clusters to medium sized quantum dots.

Octopus is a program aimed at the ab initio virtual experimentation on a hopefully ever increasing range of systems types. Its main characteristics are:

  • Electrons are describe quantum-mechanically within the Density-Functional Theory (DFT), in its time-dependent form (TDDFT) when doing simulations in time. Nuclei are described classically as point particles.

  • Electron-nucleus interaction is described within the Pseudopotential approximation.

The software can be obtained from The precompiled binaries installed without a problem in seconds and after viewing the tutorial we were able run our first examples. For developers or those interested in running the most recent version the Concurrent Versions System (CVS) source repository can be viewed at The sources can also be obtained from the CVS server by issuing the following commands from your CVS work directory:

prompt>cvs -d login

prompt>cvs -d co marques/octopus

To pass the compiler options via the Makefile, which is generated using GNU autotools, one would issue the command:

prompt>export F90FLAGS="-FR -O3 -tpp6 -axi"

as described in the installation instructions.

LAPACK and BLAS are not distributed with octopus, but these can be downloaded separately at and, respectively. If you have the LAPACK and BLAS libraries compiled with g77 preinstalled you may have to recompile them with your Fortran 90/95 compiler. There may be other options that allow the use of g77 compiled libraries, but in the present case we simply chose to rebuild the libraries. On our Pentium II system using the Intel compiler the following commands were issued in the directory containing the LAPACK sources :

prompt>ifc -O3 -tpp6 -axi -c *.f

prompt>ar r liblapack.a *.o

prompt>ranlib liblapack.a

prompt>rm -f *.o

After doing the same to create a BLAS library libblas.a the installation can be completed by following the installation instructions. As an example, the options we used with the configure script to create the Makefile were,

prompt>./configure --prefix=/home/keay/Cprograms/Computational_Physics/OCTOPUS/Octopus_test --with-blas=/home/keay/Cprograms/Computational_Physics/blas --with-lapack=/home/keay/Cprograms/Computational_Physics/lapack

where ~/lapack and ~/blas are the directories containing the libraries liblapack.a and libblas.a, respectively.

[Back to Table of Contents] [Top of Chapter 11] []

11.2. Octopus source code variable definitions.

As this chapter is developed some of the variable definitions found in the octopus source code will be listed here. Most of octopus is written in Fortran 90/95 and in what follows if the variables are defined within a derived data type then we will describe variables relative to the definition of the type using the component selector operator %.

As can be seen from the Makefile many of the function and subroutine names are synthesized using the C preprocessor cpp on the Fortran source files. The cpp preprocessor macro operator ## is used in the files complex.F90, and real.F90, and global.h, to generate the appropriate function and subroutine names before the program is compiled by your Fortran compiler. In particular, different function and subroutine names will be generated depending on whether you have chosen to work with real (COMPLEX_WFNS=0) or complex wavefunctions (COMPLEX_WFNS=1). The macro operator ## "concatenates two tokens in a macro, preserving white space between macro tokens and operators." Thus, the line

     #define X(x)        d ## x

means the variable foo in the expression X(foo) will be assigned the name dfoo before the program is compiled by the Fortran compiler.

[Back to Table of Contents] [Top of Chapter 11] []

11.3. Octopus pseudopotential implementation.

Octopus offers the possibility of using either Troullier-Martins (TM) pseudopotentials [141],[142] or the Hartwigsen-Goedecker-Hutter (HGH) separable dual-space Gaussian pseudopotentials [Goedecker,1996;Hartwigsen,1998]. A limited number files for various chemical elements in the TM pseudopotential scheme [141],[142] are available in the directory /usr/share/octopus/PP/TM2/ and all the HGH LDA pseudopotentials appear to be in the directory /usr/share/octopus/PP/HGH/ created during installation process. A wide variety of pseudopotential parameters can also be obtained online

[Back to Table of Contents] [Top of Chapter 11] []

11.4. Octopus' implementation of Hartwigsen-Goedecker-Hutter pseudopotentials.

In octopus the HGH are generated by functions in hgh.F90

function projectorr_scalar(r, p, i, l)

  projectorr_scalar = sqrt(2.0_r8) * rr * exp(-r**2/(2.0_r8*p%rc(l)**2)) / &
              (  p%rc(l)**(l + real(4*i-1,r8)/2) * x )

[Back to Table of Contents] [Top of Chapter 11] []

11.5. Octopus' implementation of Troullier-Martins pseudopotentials.

In octopus the data for the Troullier-Martins pseudopotentials are stored in files labeled element.ascii and are processed by routines in tm.F90 In the pseudopotential files, element.ascii, the data are stored in block format with the radial grid first, followed by the pseudopotentials times the radial coordinate r for different values of angular momentum quantum number l, i.e.   r · V l ps ( r ) .

[Back to Table of Contents] [Top of Chapter 11] []

[Back to Table of Contents] [Top of Chapter 11] []