\documentclass[11pt, tightenlines]{revtex4} \usepackage{amsmath} \usepackage{amssymb} \usepackage{color} \usepackage{float} \usepackage{graphicx} \usepackage[latin9]{inputenc} \usepackage{url} % Put this package last \usepackage[bookmarks, bookmarksopen, bookmarksnumbered]{hyperref} % Put this package after hyperref \usepackage[all]{hypcap} % Don't use tt font for urls \urlstyle{rm} % Make a comment stand out visually \newcommand{\todo}[1]{{\color{blue}$\blacksquare$~\textsf{[TODO: #1]}}} % Name of a code \newcommand{\code}[1]{\texttt{#1}} \hyphenation{Cac-tus-Ein-stein Schwarz-schild South-amp-ton} \sloppypar \begin{document} \title{McLachlan} \date{August 18, 2009} \author{Erik Schnetter} \address{Center for Computation \& Technology, Louisiana State University, USA} \homepage{http://www.cct.lsu.edu/~eschnett/McLachlan/} \email{schnetter@cct.lsu.edu} \begin{abstract} McLachlan is a free Einstein solver that uses the Cactus framework and the Einstein toolkit. This document describes the basic features of the code, and also how to obtain, build, and use the code. \end{abstract} \maketitle \section{McLachlan} McLachlan is a free Einstein solver that uses the Cactus framework and the Einstein toolkit. McLachlan was developed by Erik Schnetter and Peter Diener with the help of Jian Tao and Ian Hinder. It was first described in \cite{ES-Brown2007b}, where (to our knowledge) the first fully fourth order accurate black hole evolution with adaptive mesh refinement is presented. The McLachlan web pages are located at \cite{ES-mclachlanweb}. % \section{Formulation} % % \todo{To be written. BSSN equations, time evolution, constraints.} % \section{Automated Code Generation} % % \todo{To be written. Kranc. Modifying the equations.} \section{Obtaining McLachlan} McLachlan uses the Cactus Software Framework and the Einstein Toolkit. Cactus organises applications into \emph{thorns} (modules) that can be maintained independently of each other. In order to use McLachlan, it is necessary to obtain Cactus as well as a set of supporting thorns. The subsections below describe how to obtain Cactus and other necessary thorns. McLachlan contains also a shell script \code{checkout.sh} that attempts to automate this. However, this script is very basic and does not handle errors well. \subsection{Tools} Cactus thorns are ususall stored in \emph{repositories} that are managed by version control systems such as CVS \cite{cvsweb}, SVN (subversion) \cite{svnweb}, or git \cite{gitweb}. Before getting the code, you will need to install the following software on your local system: \begin{enumerate} \item wget (or curl) \item CVS \item SVN \item git \item Perl \end{enumerate} These are standard packages, and they should be easily available for all Linux systems. \subsection{Cactus} \label{sec:cactus} Cactus \cite{Goodale02a, ES-cactusweb} is a software framework that makes it possible to maintain parts of applications independent of each other, and combine them into an efficient code when building the application. Cactus is described at \url{http://www.cactuscode.org/}, and a new version of the of Cactus web site is currently being prepared at \url{http://preview.cactuscode.org/download/}. To obtain Cactus itself as well as a set of basic thorns, follow the instructions at \url{http://preview.cactuscode.org/download/}. (Additional thorns specific to numerical relativity are also located elsewhere.) Don't use a particular thorn list for this; instead, download all the basic thorn that Cactus offers. For reference, here is a brief overview over the commands to do this: \begin{enumerate} \item\verb+wget http://preview.cactuscode.org/download/GetCactus+ \item\verb-chmod a+x GetCactus- \item\verb+./GetCactus+ This checks out Cactus itself (the \emph{flesh}) into a new subdirectory \code{Cactus}. When asked, choose the \emph{development version} of Cactus; use the default answer for all other questions. \item\verb+cd Cactus+ \item\verb+make checkout+ This checks out some arrangements with basic thorns for Cactus, including the important CactusEinstein arrangement. Again, use the default answer for all questions, except when you are asked for the second time whetyer you want to quit. In this case, quit. \end{enumerate} \subsection{Carpet} Carpet \cite{ES-Schnetter2003b, ES-Schnetter2006a, ES-carpetweb} is a \emph{driver} for Cactus. A driver manages memory, handles parallelism, and performs I/O on behalf of the application. Carpet supports adaptive mesh refinement (AMR) and multi-block methods. Carpet is described at \url{http://www.carpetcode.org/}. To obtain Carpet, follow the instructions at \url{http://www.carpetcode.org/get-carpet.html}. Please check out the \emph{Development Version}, which is currently quite stable. (We are planning to release a new stable version soon.) In particular, the commands to obtain the development version are: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+git clone -o carpet git://carpetcode.dyndns.org/carpet.git+ \item\verb+cd arrangements+ \item\verb+ln -s ../carpet/Carpet* .+ \end{enumerate} (Don't miss the dot after the \verb+Carpet*+ in the last line.) Note that Carpet should be checked out into the main Cactus directory, and the \code{arrangements} subdirectory needs to contain symbolic links pointing into the \code{carpet} directory. \subsection{McLachlan} McLachlan \cite{ES-Brown2007b, ES-mclachlanweb} in an Einstein solver. It uses one of the BSSN formulations of the Einstein equations. McLachlan is described at \url{http://www.cct.lsu.edu/~eschnett/McLachlan/}, which is where you may have obtained this documentation. To obtain McLachlan, issue the following commands: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+cd arrangements+ \item\verb+git clone git://carpetcode.dyndns.org/McLachlan.git+ \end{enumerate} Note that McLachlan needs to be checked out directly into the \code{arrangements} subdirectory. McLachlan uses the Kranc code generation package \cite{kranc04, Husa:2004ip, krancweb, ES-krancweb}. Kranc also contains some thorns that McLachlan needs. (However, it is not necessary to run Kranc in order to use McLachlan. It is only necessary to run Kranc if McLachlan is modified.) To obtain Kranc, issue the following commands: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+git clone http://www.aei.mpg.de/~ianhin/kranc.git+ \item\verb+cd arrangements+ \item\verb+ln -s ../kranc/Auxiliary/Cactus/KrancNumericalTools .+ \end{enumerate} (Don't miss the dot at the end of the last line.) Note that Kranc needs to be check out into the main Cactus directory, and the \code{arrangements} subdirectory needs to contain symbolic links pointing into the \code{kranc} directory. \subsection{Other Thorns} All other thorns, including the public Whisky thorns, can be obtained via the GetCactus script that was downloaded above (see section \ref{sec:cactus}): \begin{enumerate} \item\verb+cd Cactus+ \item\verb+cd ..+ \item\verb+./GetCactus Cactus/arrangements/McLachlan/doc/mclachlan-public.th+ Use the default answer for all questions. \end{enumerate} \subsection{Consistency Check} The \emph{thorn list} \code{mclachlan-public.th} lists the thorns that are necessary for a simple spacetime evolution. The thorns are grouped into arrangements. All thorns listed in this file must now be present in the \code{arrangements} subdirectory of the main Cactus directory. \section{Building McLachlan} Building McLachlan and the other thorns requires C, C++, and Fortran 90 compilers, MPI, as well as the BLAS, GSL, HDF5, and LAPACK libraries. \subsection{Documentation} It is best to begin building Cactus with building documentation: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+make UsersGuide+ \end{enumerate} This creates the users' guide as \code{doc/UsersGuide.pdf}. All Cactus commands are listed with \begin{enumerate} \item\verb+make help+ \end{enumerate} \subsection{Option List} To build a Cactus application one needs to create an \emph{options list}. This is a text file containing the configuration options that tell Cactus what compilers and compiler options to use, and where MPI and the auxiliary libraries are installed. This process is very specific to each machine and may require some trial and error. We distribute options lists for a range of machines that we are using on the Cactus web site at \url{http://preview.cactuscode.org/download/configfiles/}. Option lists are also available together with the Simulation Factory \cite{ES-simfactoryweb} at \url{https://svn.cct.lsu.edu/repos/numrel/simfactory/optionlists/}. \subsection{Building} To build a Cactus application one starts with an option list and a thorn list. The text below assumes that you have an option list called \code{einstein-redshift-gcc.cfg}. To configure an application \begin{enumerate} \item\verb+cd Cactus+ \item\verb+make sim-config options=redshift-gcc.cfg \+\\ \verb+THORNLIST=arrangements/McLachlan/doc/mclachlan-public.th+ \item\verb+make sim+ \end{enumerate} This is necessary only once, or when the configuration options change. This will create an application called \code{sim}; of course, the name could also be different. Different applications, e.g.\ with different options or different thorn lists, can exist side by side. To build the application: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+make sim -j4+ \end{enumerate} The make option \code{-j4} builds 4 files at the same time. Use this option if you have several processors available; this will speed up building the application. The executable is called \code{cactus\_sim} and is placed in the \code{exe} subdirectory. \subsection{Cleaning} You can also clean the application, removing all object files but keeping the configuration options and thorn list: \begin{enumerate} \item\verb+cd Cactus+ \item\verb+make sim-realclean+ \end{enumerate} \section{Running McLachlan} To run the McLachlan code, one needs a \emph{parameter file}. Parameter files select which thorns are activated at run time, and what values the thorns' run-time parameters have. They typically have a \code{.par} suffix. Below, we use the parameter file \code{ks-mclachlan-public.par}. Cactus applications are started like a regular MPI application. The exact mechanism depends on the particular MPI implementation. On Redshift, the command is \begin{enumerate} \item\verb+cd Cactus+ \item\verb+mkdir simulations+ \item\verb+cd simulations+ \item\verb+env OMP_NUM_THREADS=1 mpirun -np 1 ../exe/cactus_sim \+ \verb+ ../arrangements/McLachlan/doc/ks-mclachlan-public.par+ \end{enumerate} This parameter file simulates a single, stationary, spinning black hole in Kerr-Schild coordinates. It requires about 4~GByte of RAM to run. \emph{Note:} If the options list enables OpenMP, then the Cactus application will be multi-threaded. Multi-threading can improve performance and reduce memory consumption, especially when many ($>100$) cores are used. However, it is usually a bad idea to over-subscribe cores by having too many threads per node. It is usually best to choose both the number of MPI processes per node and the number of OpenMP threads per process such that their product equals the number of cores on a node. The way in which these numbers are chosen depend on the MPI implementation. \bibliographystyle{apsrev-titles-manyauthors} \bibliography{references,publications-schnetter} \end{document}