.. _MPI: http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads .. _HDF5 downloads: http://www.hdfgroup.org/ftp/HDF5/current/src/ .. _fortrandep: ========================= Fortran code dependencies ========================= Summary of dependencies ======================= The packages required for the Fortran code are: * A recent Fortran compiler. The following compilers are known to work: * gfortran 4.3 and later * ifort 11 and later * pgfortran 11 and above * `HDF5 `_ 1.8.5 or later with the Fortran bindings * An MPI installation (e.g. `MPICH2 `_ or `OpenMPI `_) with the Fortran bindings Note that often, default installations of HDF5 and MPI packages do not include support for Fortran - this has to be explicitly enabled as described below. Fortran compiler ================ The first dependency is a Fortran compiler. In addition to commercial compilers (e.g. ``ifort``, ``pgfortran``, ...), there are a couple of free ones, the most common of which is ``gfortran``. If you don't already have a compiler installed, you can install ``gfortran`` via package managers on Linux machines, or from MacPorts or binary installers on Mac (e.g. `http://gcc.gnu.org/wiki/GFortranBinaries `_). If you are unsure about how to do this, speak to your system administrator. Non-root installs ================= If you do not have root access to the machine you are using, then replace ``/usr/local`` in the following instructions by e.g. ``$HOME/usr``. In addition, you should never include ``sudo`` in any of the commands. Automated Installation ====================== The easiest way to install these dependencies correctly is to use the installation script provided with Hyperion. First, make sure you have downloaded the latest tar file from `here `_, then expand it with:: tar xvzf hyperion-x.x.x.tar.gz cd hyperion-x.x.x Then, go to the ``deps/fortran`` directory and run the automated install script provided:: cd deps/fortran python install.py where ```` is the folder in which you want to install the MPI and HDF5 libraries. To avoid conflicting with existing installed versions (that may not have Fortran support), it is best to install these in a dedicated directory such as ``/usr/local/hyperion``:: python install.py /usr/local/hyperion and the libraries will be installed in the ``lib``, ``include``, etc. directories inside ``/usr/local/hyperion``. Once the installation is complete, the installer will instruct you to add certain commands to your startup files. .. note:: if you are installing to a location outside your user directory, you will need to run the command with ``sudo``, i.e.:: sudo python install.py Next, open a new terminal and ensure that the following commands:: which mpif90 which h5fc return a path that is inside the installation path you specified, for example:: $ which mpif90 /usr/local/hyperion/bin/mpif90 $ which h5fc /usr/local/hyperion/bin/h5fc If you get ``command not found`` then you have probably not set up your ``$PATH`` correctly. The installation script has a number of options (e.g. to set the compilers) that can be seen with:: python install.py --help If the installation fails, a log will be posted to the `Pastebin `_ service. Copy the URL and report it either by email or on the Github `Issues `_. If the installation succeeds, you can ignore the rest of this document, and move on to the :doc:`python_dependencies`. Manual Installation: MPI ======================== In order to use the parallel version of the radiation transfer code, you will need an installation of MPI that supports Fortran. By default, MacOS X ships with OpenMPI, but the Fortran bindings are not included. In this section, I have included instructions to install the MPICH2 library with support for Fortran (though you can in principle use any MPI distribution). Installation ------------ .. note:: If you encounter any errors at any stage, see the :ref:`mpitrouble` section. First, download the source for the latest *stable release* of MPICH2 from the `MPI`_ downloads page. Once downloaded, unpack the file and then go into the source directory:: cd mpich2-x.x.x and configure the installation:: ./configure --enable-fc --prefix=/usr/local/mpich2 In practice, you will probably want to use a specific fortran compiler, which you can specify using the ``F77`` and ``FC`` variables as follows:: ./configure F77=ifort FC=ifort --enable-fc --prefix=/usr/local/mpich2 Once the configure script has successfully run, you can then proceed to build the MPI library:: make If the build is successful, then you can install the library into place using:: sudo make install Finally, you will need to add the MPICH2 ``/usr/local/mpich2/bin`` directory to your ``$PATH``. To check that the installation was successful, type:: which mpif90 and you should get:: /usr/local/mpich2/bin/mpif90 If this is not the case, then the installation was unsuccessful. .. _mpitrouble: Troubleshooting --------------- MacOS 10.5 and ifort ^^^^^^^^^^^^^^^^^^^^ If you get the following error when running ./configure:: configure: error: **** Incompatible Fortran and C Object File Types! **** F77 Object File Type produced by "ifort -O2" is : : Mach-O 64-bit object x86_64. C Object File Type produced by "gcc -O2" is : : Mach-O object i386. then you are probably using the 64-bit Intel Fortran Compiler on MacOS 10.5.x, but the 32-bit version of gcc. To fix this, you will need to switch to using the 32-bit Intel Fortran Compiler. First, clean up the installation so far with:: make clean Then, rerun configure and build using:: ./configure F77="ifort -m32" FC="ifort -m32" --enable-fc --prefix=/usr/local/mpich2 make sudo make install Manual Installation: HDF5 ========================= Installation ------------ .. note:: If you encounter any errors at any stage, see the :ref:`hdftrouble` section. To compile the Fortran part of the radiation transfer code, you will need the HDF5 library v1.8.5 or later, with support for Fortran enabled. While package managers such as Fink and MacPorts include HDF5, they often do not include the Fortran bindings. Therefore, it is best to install the HDF5 library manually from source. To start with, download the source code from the `HDF5 downloads`_ page, then go into the source code directory:: cd hdf5-x.x.x and configure the installation:: ./configure --enable-fortran --enable-hl --prefix=/usr/local/hdf5_fortran In practice, you will probably want to use a specific fortran compiler, which you can specify using the ``FC`` variable as follows:: ./configure --enable-fortran --enable-hl --prefix=/usr/local/hdf5_fortran FC=ifort Once the configure script has successfully run, you can then proceed to build the HDF5 library:: make If the build is successful, then you can install the library into place using:: sudo make install Finally, you will need to add the HDF5 ``/usr/local/hdf5_fortan/bin`` directory to your ``$PATH``. To check that the installation was successful, type:: which h5fc and you should get:: /usr/local/hdf5_fortran/bin/h5fc If this is not the case, then the installation was unsuccessful. .. note:: The reason we install HDF5 in ``hdf5_fortran`` as opposed to simply ``hdf5`` is so as not to conflict with a possible installation of the library without the Fortran bindings. .. _hdftrouble: Troubleshooting --------------- MacOS 10.5 and ifort ^^^^^^^^^^^^^^^^^^^^ If you get the following error when running make:: ... H5f90proto.h:1211: warning: previous declaration of 'H5_FC_FUNC_' was here H5f90proto.h:1216: error: 'H5_FC_FUNC_' declared as function returning a function H5f90proto.h:1216: warning: redundant redeclaration of 'H5_FC_FUNC_' H5f90proto.h:1213: warning: previous declaration of 'H5_FC_FUNC_' was here H5f90proto.h:1218: error: 'H5_FC_FUNC_' declared as function returning a function H5f90proto.h:1218: warning: parameter names (without types) in function declaration H5f90proto.h:1218: warning: redundant redeclaration of 'H5_FC_FUNC_' H5f90proto.h:1216: warning: previous declaration of 'H5_FC_FUNC_' was here make[3]: *** [H5f90kit.lo] Error 1 make[2]: *** [all] Error 2 make[1]: *** [all-recursive] Error 1 make: *** [all-recursive] Error 1 then you are probably using the 64-bit Intel Fortran Compiler on MacOS 10.5.x, but the 32-bit version of gcc. To fix this, you will need to switch to using the 32-bit Intel Fortran Compiler. First, clean up the installation so far with:: make clean Then, rerun configure and build using:: ./configure --enable-fortran --enable-hl --prefix=/usr/local/hdf5_fortran FC="ifort -m32" make sudo make install If this does not work, try cleaning again, and setup the 32-bit ifort using the scripts provided with ifort. For example, if you are using ifort 11.x, you can do:: make clean source /opt/intel/Compiler/11.0/056/bin/ia32/ifortvars_ia32.sh ./configure --enable-fortran --enable-hl --prefix=/usr/local/hdf5_fortran FC=ifort make sudo make install NAG f95 ^^^^^^^ If you get the following error when running make:: Error: H5fortran_types.f90, line 39: KIND value (8) does not specify a valid representation method Errors in declarations, no further processing for H5FORTRAN_TYPES [f95 error termination] make[3]: *** [H5fortran_types.lo] Error 1 make[2]: *** [all] Error 2 make[1]: *** [all-recursive] Error 1 make: *** [all-recursive] Error 1 you are using the NAG f95 compiler, which by default does not like statements like ``real(8) :: a``. To fix this, you will need to specify the ``-kind=byte`` option for the f95 compiler. First, clean up the installation so far with:: make clean Then, rerun configure and build using:: ./configure --enable-fortran --enable-hl --prefix=/usr/local/hdf5_fortan FC="ifort -kind=byte" make sudo make install