diff options
Diffstat (limited to 'doc/UsersGuide/Notes.tex')
-rw-r--r-- | doc/UsersGuide/Notes.tex | 1500 |
1 files changed, 1500 insertions, 0 deletions
diff --git a/doc/UsersGuide/Notes.tex b/doc/UsersGuide/Notes.tex new file mode 100644 index 00000000..30c01719 --- /dev/null +++ b/doc/UsersGuide/Notes.tex @@ -0,0 +1,1500 @@ +% /*@@ +% @file RunningCactus.tex +% @date 27 Jan 1999 +% @author Tom Goodale, Gabrielle Allen, Gerd Lanferman, Thomas Radke +% @desc +% How to run Cactus part of the Cactus User's Guide +% @enddesc +% @version $Header$ +% @@*/ + +\begin{cactuspart}{Additional notes}{$RCSfile$}{$Revision$}\label{part:Notes} +\renewcommand{\thepage}{\Alph{part}\arabic{page}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +\chapter{Installation} +\label{cha:in} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Required Software} +\label{sec:required_software} + +In general, Cactus \emph{requires} the following set of software to function +in single processor mode. Please refer to the architecture section +\ref{sec:suar} for architecture specific items. +\begin{Lentry} +\item[Perl5.0] Perl is used extensively during the Cactus + thorn configuration phase. Perl is available for nearly all + operating systems known to man, and can be obtained at + \url{http://www.perl.org}. +\item[GNU make] The make + process works with the GNU make utility (referred to as \texttt{gmake} + henceforth). While other make utilities may also work, this is not + guaranteed. Gmake can be obtained from your favorite GNU site, or + from \url{http://www.gnu.org}. +\item[C] C compiler. For example, the GNU compiler. This + is available for most supported platforms. Platform specific compilers + should also work. +\item[CPP] C Preprocessor. For example, the GNU \texttt{cpp}. These are + normally provided on most platforms, and many C compilers have an option + to just run as a preprocessor. +\item[CVS] The \textit{Concurrent Versions System} is not needed + to run/compile Cactus, but you are strongly encouraged to install + this software to take advantage of the update procedures. It can be + downloaded from your favorite GNU site. Tar files of each release are + also available. +\end{Lentry} + +\noindent +To use Cactus, with the default driver\footnote{For help with unfamiliar terms, please consult the glossary, Appendix \ref{sec:glossary}.} (\texttt{CactusPUGH/PUGH}) on multiple +processors you also need: +\begin{Lentry} +\item[MPI] The \textit{Message Passing Interface}, +which provides inter-processor communication. +Supercomputing sites often supply a native MPI implementation +that is very likely to be compatible with Cactus. Otherwise, there are +various freely available ones available, e.g. the MPICH +version of MPI is available for various architectures and operating +systems at \url{http://www-unix.mcs.anl.gov/mpi/}. +\end{Lentry} + +\noindent +If you are using any thorns containing routines +written in C++ you also need +\begin{Lentry} +\item[C++] C++ compiler. For example, the GNU compiler. This + is available for most supported platforms. Platform specific compilers + should also work. Note that if a C++ compiler is available, then the + \text{main()} routine in the flesh is compiled with C++ to allow static + class initialisations. +\end{Lentry} + +\noindent +If you are using any thorns containing routines +written in Fortran you also need +\begin{Lentry} +\item[F90/F77] For routines written in Fortran 77, either a Fortran 90 or + a Fortran 77 compiler can be used. For routines written in Fortran 90, + a Fortran 90 compiler is obviously required. There is a very limited set of + free Fortran 90 compilers available for the different architectures. +\end{Lentry} + +\noindent +While not required for compiling or running Cactus, for thorn development +it is useful to install +\begin{Lentry} +\item[\texttt{ctags/etags}] These programs enable you browse through the + calling structure of a program by help of a function call database. + Navigating the flesh and arrangements becomes very easy. Emacs and + \texttt{vi} both support this method. See \ref{sec:Appendix.tags} for a short + guide to tags. +\end{Lentry} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Supported Architectures} +\label{sec:suar} + +Cactus runs on many machines, under a large number of operating +systems. Here, we list the machines we have compiled and verified +Cactus on, including some architecture specific notes. A complete +list of architectures supported by Cactus, along with more notes, can +be found at +\begin{center} +\url{http://www.cactuscode.org/Documentation/Architectures.html}. +\end{center} + +\begin{Lentry} +\item[\textbf{SGI}] 32 or 64 bit running Irix. +\item[\textbf{Cray T3E}] +\item[\textbf{Compaq Alpha}] Compaq operating system and Linux. + Single processor + mode and MPI supported. The Alphas need to have the GNU C/C++ + compilers installed. +\item[\textbf{IA32}] running Linux, OpenBSD, FreeBSD, or Windows 2000/NT. + Single processor mode and MPI (MPICH and LAM) supported.\\ + On Windows, Cactus compiles with Cygwin. MPI (WMPI, HPVM, and MPIPro) + supported. Please read \texttt{doc/README.NT} for details. +\item[\textbf{IA64}] running Linux. +\item[\textbf{Macintosh PowerPC}] (MacOS X and Linux PPC) +\item[\textbf{IBM SP2,SP3,SP4}] 32 or 64 bit running AIX. +\item[\textbf{Hitachi SR8000-F1}] +\item[\textbf{Sun} Solaris] +\item[\textbf{Fujitsu}] +\item[\textbf{NEC SX-5, SX-6}] +\end{Lentry} + +The following machines are only partially supported, +\begin{Lentry} +\item[\textbf{HP Exemplar}] +\end{Lentry} + +\subsection{Note} +Disk space may be a problem on supercomputers where home directories are small. +A workaround is to first create a +configs directory on scratch space, say \texttt{scratch/cactus\_configs/} (where +\texttt{scratch/} is your scratch directory), and then either +\begin{itemize} +\item{} set the environment variable \texttt{CACTUS\_CONFIGS\_DIR} to point to +this directory +\end{itemize} +or +\begin{itemize} +\item{} soft link this directory (\texttt{ln -s +scratch/cactus\_configs Cactus/configs/}) to the Cactus directory, if your +filesystem supports soft links. +\end{itemize} + + +\chapter{Compilation} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Configuration Options} +\label{sec:confopts} + +There are four ways to pass options to the configuration process. +% from the gmake command line. +\begin{enumerate} + \item[1]{} + Pass options individually in shell environment variables: + + {\tt export <option name>=<chosen value> \# for bash}\\ + {\tt setenv <option name> <chosen value> \# for (t)csh}\\ + {\tt gmake <configuration name>-config} + + \item[2a]{} + Either: create a default configuration file \texttt{\$\{HOME\}/.cactus/config}. + + All available configuration options may be set in a default options file + \texttt{\$\{HOME\}/.cactus/config}, any option which are not set will take a + default value. The file should contain lines of the form: + + \texttt{<\var{option}> [=] ...} + + The equals sign is optional. Spaces are allowed everywhere. + Text starting wit a \texttt{'\#'} character will be ignored as a comment. + + \item[2b]{} + Or: list your Cactus configuration files in an environment variable + \texttt{CACTUS\_CONFIG\_FILES}: + + \texttt{gmake <\var{config name}>-config + CACTUS\_CONFIG\_FILES=$<$\var{list of config files}$>$} + + Multiple configuration files, with their file names separated by a + \texttt{':'} character, will be processed in order. + Each file should be given by its full path. + The options file has the same format as \texttt{\$\{HOME\}/.cactus/config}. + + \item[3]{} + Add the options to a configuration file and use, + + \texttt{gmake <\var{config name}>-config options=<\var{filename}>} + + The options file has the same format as \texttt{\$\{HOME\}/.cactus/config}. + (Note that these options are \emph{added} to those from the + \texttt{\$\{HOME\}/.cactus/config} file.) + + \item[4]{} + Pass the options individually on the command line, + + \texttt{gmake <\var{config name}>-config + <\var{option name}>=<\var{chosen value}>, ...} + + Not all configuration options can be set on the command line. + Those that can be set are indicated in the table below. +\end{enumerate} + +The options are listed here in order of increasing precedence, e.g. options +set on the command line will take priority over (potentially +conflicting) options set in \texttt{\$\{HOME\}/.cactus/config} or other +Cactus configuration files. Default options from +\texttt{\$\{HOME\}/.cactus/config} will only be read if the +environment variable \texttt{CACTUS\_CONFIG\_FILES} is not set. + +It is important to note that these methods cannot be used to, for example, add +options to the default values for \texttt{CFLAGS}. Setting any variable in the +configuration file or the command line will overwrite completely the +default values. + +\subsection{Available Options} +\label{subsec:Compilation-Available_Options} + +There is a plethora of available options. + +\begin{itemize} + +\item {Cross compiling} + +If you are compiling on an architecture other than the one you are +producing an executable for, you will need to pass the + +\begin{Lentry} +\item [\texttt{HOST\_MACHINE=\var{x-x-x}}] +\end{Lentry} +option, where \texttt{\var{x-x-x}} is the canonical name of the architecture +you are compiling for, such as \texttt{sx6-nec-superux}; the format is +\texttt{\var{processor}-\var{vendor}-\var{OS}}. + +\item {Compiled thorns} + +These specify the chosen set of thorns for compilation. If the thorn choice is not provided +during configuration, a list containing all thorns in the +\texttt{arrangements} directory +is automatically created, and the user is prompted for any changes. + +\begin{Lentry} + +\item [\texttt{THORNLIST}] Name of file containing a list of thorns with +the syntax \texttt{<\var{arrangement name}>/<\var{thorn name}>}. Lines +beginning with \verb|#| or \texttt{!} are ignored. + +\item [\texttt{THORNLIST\_DIR}] Location of directory containing +\texttt{THORNLIST}. +This defaults to the current working directory. + + +\end{Lentry} + +\item {Compiler and tool specification} + +These are used to specify which compilers and other tools to use. Entries followed +by * may be specified on the command line. + +\begin{Lentry} +\item [\texttt{CC}] * The C compiler. +\item [\texttt{CXX}] The C++ compiler. +\item [\texttt{F90}] * The Fortran 90 compiler. +\item [\texttt{F77}] * The Fortran 77 compiler. +\item [\texttt{CPP}] The preprocessor used to generate dependencies +for and to preprocess C and C++ code. +\item [\texttt{FPP}] The preprocessor used to generate dependencies +for and to preprocess Fortran code. +\item [\texttt{LD}] * The linker. +\item [\texttt{AR}] The archiver used for generating libraries. +\item [\texttt{RANLIB}] The archive indexer to use. +\item [\texttt{MKDIR}] The program to use to create a directory. +\item [\texttt{PERL}] The name of the Perl executable. +\end{Lentry} + +\item {Compilation and tool flags} + +Flags which are passed to the compilers and the tools. + +\begin{Lentry} +\item [\texttt{CFLAGS}] +Flags for the C compiler. + +\item [\texttt{CXXFLAGS}] +Flags for the C++ compiler. + +\item [\texttt{F90FLAGS}] +* Flags for the Fortran 90 compiler. + +\item [\texttt{F77FLAGS}] +* Flags for the Fortran 77 compiler. + +\item [\texttt{CPPFLAGS}] +Flags for the preprocessor (used to generate compilation dependencies +for and preprocess C and C++ code). + +\item [\texttt{FPPFLAGS}] +Flags for the preprocessor (used to generate compilation dependencies +for and preprocess Fortran code). + +\item [\texttt{MKDIRFLAGS}] +Flags for \texttt{MKDIR}, so that no error is given if the directory exists. + +\item [\texttt{LDFLAGS}] +* Flags for the linker. \emph{Warning:} This variable is ignored +while the compilers and linkers are autodetected. This can lead to +strange errors while configuring. You can pass the linker flags in +the variable \texttt{LD} instead. + +\item [\texttt{ARFLAGS}] +Flags for the archiver. + +\item [\texttt{C\_LINE\_DIRECTIVES}] +Whether error messages and debug information in the compiled C and C++ +files should point to the original source file or to an internal file +created by Cactus. The only options available are \texttt{yes} and +\texttt{no}, the default is \texttt{yes}. Set this to \texttt{no} if your +compiler reports error messages about unrecognised \verb|#| directives. + +\item [\texttt{F\_LINE\_DIRECTIVES}] +Whether error messages and debug information in the compiled Fortran +files should point to the original source file or to an internal file +created by Cactus. The only options available are \texttt{yes} and +\texttt{no}, the default is \texttt{yes}. Set this to \texttt{no} if your +compiler reports error messages about unrecognised \verb|#| directives. + +\item [\texttt{CROSS\_COMPILE}] Enables cross compilation. + Available options are \texttt{yes} and \texttt{no}, the default is + \texttt{no}. To create a cross-compiled configuration one must explicitly set this option to \texttt{yes}. + +\item [\texttt{DISABLE\_REAL16}] Disable support for the data type +\texttt{CCTK\_REAL16}. The only options available are \texttt{yes} and +\texttt{no}, the default is \texttt{no}. Cactus autodetects this data type + only for C. If the C compiler supports it, but the Fortran compiler + does not, it may be necessary to disable \texttt{CCTK\_REAL16} + altogether, since Cactus assumes that data types are fully supported + if they exist. + +\item [\texttt{DEBUG}] +* Specifies what type of debug mode should be used, +the default is no debugging. +Current options are \texttt{yes}, \texttt{no}, or \texttt{memory}. The option +\texttt{yes} switches on all debugging features, whereas \texttt{memory} just +employs memory tracing (Section \ref{sec:metr}). + +\item [\texttt{C\_DEBUG\_FLAGS}] +Debug flags for the C compiler, their use depends on the type of +debugging being used. + +\item [\texttt{CXX\_DEBUG\_FLAGS}] +Debug flags for the C++ compiler, their use depends on the type of +debugging being used. + +\item [\texttt{F90\_DEBUG\_FLAGS}] +Debug flags for the Fortran 90 compiler, their use depends on the +type of debugging being used. + +\item [\texttt{F77\_DEBUG\_FLAGS}] +Debug flags for the Fortran 77 compiler, their use depends on the +type of debugging being used. + +\item [\texttt{OPTIMISE, OPTIMIZE}] +* Specifies what type of optimisation should be used. The only options currently +available are \texttt{yes} and \texttt{no}. The default is to use optimisation.\\ +Note that the British spelling \texttt{OPTIMISE} will be checked first and, if set, +will override any setting of the American-spelled \texttt{OPTIMIZE}. + +\item [\texttt{C\_OPTIMISE\_FLAGS}] +Optimisation flags for the C compiler, their use depends on the type of +optimisation being used. + +\item [\texttt{CXX\_OPTIMISE\_FLAGS}] +Optimisation flags for the C++ compiler, their use depends on the type of +optimisation being used. + +\item [\texttt{F90\_OPTIMISE\_FLAGS}] +Optimisation flags for the Fortran 90 compiler, their use depends on the +type of optimisation being used. + +\item [\texttt{F77\_OPTIMISE\_FLAGS}] +Optimisation flags for the Fortran 77 compiler, their use depends on the +type of optimisation being used. + +\item [\texttt{PROFILE}] + * Specifies what type of profiling should be used. The only options + currently available are \texttt{yes} and \texttt{no}. The default + is to use no profiling. + +\item [\texttt{C\_PROFILE\_FLAGS}] + Profile flags for the C compiler, their use depends on the type of + profiling being used. + +\item [\texttt{CXX\_PROFILE\_FLAGS}] + Profile flags for the C++ compiler, their use depends on the type of + profiling being used. + +\item [\texttt{F90\_PROFILE\_FLAGS}] + Profile flags for the Fortran 90 compiler, their use depends on the + type of profiling being used. + +\item [\texttt{F77\_PROFILE\_FLAGS}] + Profile flags for the Fortran 77 compiler, their use depends on the + type of profiling being used. + +\item [\texttt{WARN}] + * Specifies what type of build warnings should be used. The only + options currently available are \texttt{yes} and \texttt{no}. The + default is to produce no warnings. + +\item [\texttt{C\_WARN\_FLAGS}] +Warning flags for the C compiler, their use depends on the type of +warnings used during compilation (Section \ref{sec:gmopfobuco}). + +\item [\texttt{CXX\_WARN\_FLAGS}] +Warning flags for the C++ compiler, their use depends on the type of +warnings used during compilation (Section \ref{sec:gmopfobuco}). + +\item [\texttt{F90\_WARN\_FLAGS}] +Warning flags for the Fortran 90 compiler, their use depends on the type of +warnings used during compilation (Section \ref{sec:gmopfobuco}). + +\item [\texttt{F77\_WARN\_FLAGS}] +Warning flags for the Fortran 77 compiler, their use depends on the type of +warnings used during compilation (Section \ref{sec:gmopfobuco}). + +\end{Lentry} + +\item {Architecture-specific flags} + +\begin{Lentry} +\item [\texttt{IRIX\_BITS=32|64}] For Irix SGI systems: whether to build a 32- or 64-bit configuration. +\end{Lentry} + +\begin{Lentry} +\item [\texttt{AIX\_BITS=32|64}] For IBM SP systems: whether to build a 32- or 64-bit configuration. +\end{Lentry} + +\item {Library flags} + +Used to specify auxiliary libraries and directories to find them in. + +\begin{Lentry} +\item [\texttt{LIBS}] +Additional libraries. +This variable can also contain linker options, e.g.\ to switch between +static and dynamic linking. (Cactus adds a \verb+-l+ prefix to +library names, but does not modify linker options.) +\emph{Warning:} This variable is ignored while +the compilers and linkers are autodetected. This can lead to strange +errors while configuring. You can pass the additional libraries in +the variable \texttt{LD} instead. + +\item [\texttt{LIBDIRS}] Any other library directories. +This variable can also contain linker options. (Cactus adds an +\verb+-L+ prefix to library directories, but does not modify linker +options.) +\end{Lentry} + +\item {Extra include directories} + +\begin{Lentry} +\item [\texttt{SYS\_INC\_DIRS}] +Used to specify any additional directories for system include files. +\end{Lentry} + + +\item {Precision options} + +Used to specify the precision of the default real and integer data types, +by the number of bytes the data takes up. Note that not all +values will be valid on all architectures. + +\begin{Lentry} + +\item [\texttt{REAL\_PRECISION}] +* Allowed values are \texttt{16, 8, 4}. + +\item [\texttt{INTEGER\_PRECISION}] +* Allowed values are \texttt{8, 4, 2}. + +\end{Lentry} + +\item {Executable name} + +\begin{Lentry} +\item [\texttt{EXEDIR}] The directory in which to place the executable. +\item [\texttt{EXE}] The name of the executable. +\end{Lentry} + +\item{Extra packages} + +Compiling with extra packages is described fully in +Section \ref{subsec:cowiexpa}, +which should be consulted for the full range of configuration options. + +\begin{Lentry} +\item [\texttt{MPI}] * The MPI package to use, if required. Supported values are + \texttt{CUSTOM}, \texttt{NATIVE}, \texttt{MPICH}, or \texttt{LAM}. + +\item [\texttt{HDF5}] +Supported values are \texttt{yes}, and \texttt{no}. A blank value is taken as \texttt{no}. + +\item [\texttt{LAPACK}] +Supported values are \texttt{yes}, and \texttt{no}. A blank value is taken as \texttt{no}. + +\item [\texttt{PETSC}] +Supported values are \texttt{yes}, and \texttt{no}. A blank value is taken as \texttt{no}. + +\item [\texttt{PTHREADS}] +Supported values are \texttt{yes}, and \texttt{no}. A blank value is taken as \texttt{no}. + +\end{Lentry} + +\item{Miscellaneous} + +\begin{Lentry} +\item [\texttt{PROMPT}] Setting this to \texttt{no} turns off all prompts from the +make system. +\item [\texttt{SILENT}] Setting this to \texttt{no} instructs \texttt{gmake} to print the +commands that it is executing. +\end{Lentry} + +\end{itemize} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Compiling with Extra Packages} +\label{subsec:cowiexpa} + + +\subsection{MPI: Message Passing Interface} +\label{subsubsec:Compiling-MPI} + +The \textit{Message Passing Interface} (MPI) provides inter-processor +communication. It can either be implemented natively on a machine +(this is usual on most supercomputers), or through a standard package +such as MPICH, LAM, WMPI, or PACX. + +To compile with MPI, the configure option is + +\texttt{MPI = <\var{MPI\_TYPE}>}, + +where \texttt{<\var{MPI\_TYPE}>} can take the values (entries followed by * +may be specified on the configuration command line): + +\begin{Lentry} + +\item[\texttt{CUSTOM}] For a custom MPI configuration set the variables + \begin{Lentry} + \item [\texttt{MPI\_LIBS}] * libraries. + \item [\texttt{MPI\_LIB\_DIRS}] * library directories. + \item [\texttt{MPI\_INC\_DIRS}] * include file directories. + \end{Lentry} + +\item[\texttt{NATIVE}] Use the native MPI for this machine, as indicated in + the \texttt{known-architectures} directory + (\texttt{lib/make/known-architectures}). + +\item[\texttt{MPICH}] +Use MPICH (\url{http://www-unix.mcs.anl.gov/mpi/mpich}). This is controlled +by the options + \begin{Lentry} + \item [\texttt{MPICH\_ARCH}] * machine architecture. + \item [\texttt{MPICH\_DIR} ] * directory in which MPICH is installed. + If this option is not defined, it will be searched for. + \item [\texttt{MPICH\_DEVICE}] * the device used by MPICH. If not + defined, the configuration process will search for this in a + few defined places. + Supported devices are currently \texttt{ch\_p4}, \texttt{ch\_shmem}, + \texttt{globus} and \texttt{myrinet}. + For versions of MPICH prior to 1.2.0, the devices are searched for + in this order, for 1.2.0 you may need to specify \texttt{MPICH\_DEVICE}, + depending on the installation. + \end{Lentry} + +If \texttt{MPICH\_DEVICE} is chosen to be \texttt{globus} +(\url{http://www.globus.org}), an additional variable must be set + \begin{Lentry} + \item[\texttt{GLOBUS\_LOCATION}] * directory in which Globus is installed. + \end{Lentry} +The Globus flavor may be chosen optionally + \begin{Lentry} + \item[\texttt{GLOBUS\_FLAVOR}] * Globus flavor to build Cactus with. + \end{Lentry} +If it is not set, the first Globus flavor found will be used. + +If \texttt{MPICH\_DEVICE} is chosen to be \texttt{ch\_gm}, +(\url{http://www.myri.com}), an additional variable must be set + \begin{Lentry} + \item[\texttt{MYRINET\_DIR}] * directory in which Myrinet libraries are installed. + \end{Lentry} + +\item[\texttt{LAM}] +Use \texttt{LAM} (\textit{Local Area Multicomputer}, \url{http://www.lam-mpi.org/}). +This is controlled by the variables + \begin{Lentry} + \item[\texttt{LAM\_DIR} ] * directory in which LAM is installed. This + will be searched for in a few provided places if not given. + \end{Lentry} +If the \texttt{LAM} installation splits libraries and include files into different +directories, instead of setting \texttt{LAM\_DIR} set the two variables + \begin{Lentry} + \item[\texttt{LAM\_LIB\_DIR}] * directory in which LAM libraries are installed. + \item[\texttt{LAM\_INC\_DIR}] * directory in which LAM include files are installed. + \end{Lentry} + + +\item[\texttt{WMPI}] +Use WMPI (\textit{Win32 Message Passing Interface}, \url{http://dsg.dei.uc.pt/w32mpi/intro.html}). This is controlled by the variable + \begin{Lentry} + \item[\texttt{WMPI\_DIR}] * directory in which WMPI is installed. + \end{Lentry} + +\item[\texttt{HPVM}] +Use HPVM (\textit{High Performance Virtual Machine}, +(\url{http://www-csag.ucsd.edu/projects/hpvm.html}). +This is controlled by the variable + \begin{Lentry} + \item[\texttt{HPVM\_DIR}] * directory in which HPVM is installed. + \end{Lentry} + +\item[\texttt{MPIPro}] +Use MPIPro (\url{http://www.mpi-softtech.com/}). + +\item[\texttt{PACX}] +Use the PACX Metacomputing package (\textit{PArallel Computer eXtension},\\ +\url{http://www.hlrs.de/structure/organisation/par/projects/pacx-mpi/}). This is controlled by the variables + \begin{Lentry} + \item[\texttt{PACX\_DIR}] * directory in which PACX is installed. + If this option is not defined, it will be searched for. + \item[\texttt{PACX\_MPI}] * the MPI package PACX uses node-local + communication. This can be any of the above MPI packages. + \end{Lentry} + +\end{Lentry} + +Note that the searches for libraries, etc. mentioned above use the +locations given in the files in \texttt{lib/make/extras/MPI}. + +\subsection{HDF5: Hierarchical Data Format version 5} +\label{subsec:hdf5} + +To compile with HDF5 (\url{http://hdf.ncsa.uiuc.edu/whatishdf5.html}), +the configure options are + +\texttt{HDF5 = yes/no [HDF5\_DIR = <\var{dir}>] [LIBZ\_DIR = <\var{dir}>] [LIBSZ\_DIR = <\var{dir}>]} + +If \texttt{HDF5\_DIR} is not given, the configuration process will search for an +installed HDF5 package in some standard places (defined in +\texttt{lib/make/extras/HDF5}). +If the found HDF5 library was built with the external deflate I/O filter, +the configuration process also searches for the \texttt{libz} library and adds +it to the linker flags. You may also point directly to the location of +\texttt{libz.a} by setting \texttt{LIBZ\_DIR}. +If the found HDF5 library was built with the external \texttt{szlib} I/O filter, +the configuration process also searches for the \texttt{szlib} library and adds +it to the linker flags. You may also point directly to the location of +\texttt{libsz.a} by setting \texttt{LIBSZ\_DIR}. + + +\subsection{LAPACK: Linear Algebra PACKage} + +To compile with LAPACK (\url{http://www.netlib.org/lapack/}), +the configure options are + +\begin{alltt} +LAPACK = yes | no | <blank> +[ LAPACK\_DIR = <\var{dir}> | none ] +[ LAPACK\_EXTRA\_LIBS\_DIRS = <\var{dir}> ] +[ LAPACK\_LIBS = <\var{libs}> ] +[ LAPACK\_EXTRA\_LIBS = <\var{libs}> ] +\end{alltt} + +If \texttt{LAPACK\_DIR} is not given, the configuration process will search for a +LAPACK library \texttt{liblapack.[\{a,so\}]} in some standard places (defined in +\texttt{lib/make/extras/LAPACK}). If \texttt{LAPACK\_DIR} is set to \texttt{no} +the LAPACK library path is assumed to be installed in a standard system location +(e.g. \texttt{/usr/lib/}), and thus the library path will not be added to the +linker's command line. + +Because LAPACK doesn't come as a standardized system installation, there are +additional configuration variables to set the name of the LAPACK library +(\texttt{LAPACK\_LIBS}) as well as the name (\texttt{LAPACK\_EXTRA\_LIBS}) and +location (\texttt{LAPACK\_EXTRA\_LIBS\_DIRS}) of extra libraries that are +required by LAPACK itself. + + +\subsection{PETSc: Portable, Extensible Toolkit for Scientific Computation} + +To compile with PETSc +(\url{http://www-unix.mcs.anl.gov/petsc/petsc-2/index.html}), +the configure options are + +\begin{alltt} +PETSC = yes | no | <blank> +[ PETSC\_DIR = <\var{dir}> ] +[ PETSC\_ARCH = <\var{architecture}> ] +[ PETSC\_ARCH\_LIBS = <\var{architecture-specific libraries}> ] +\end{alltt} + +If \texttt{PETSC\_DIR} is not given, the configuration process will search for an +installed PETSc package in some standard places (defined in +\texttt{lib/make/extras/PETSC}). +If \texttt{PETSC\_ARCH} is not given, the configuration process will choose the +first PETSc configuration found in \texttt{\$PETSC\_DIR/lib/libO/}. +If \texttt{PETSC\_ARCH\_LIBS} is not given, the configuration process will choose +architecture-specific libraries, as required by a PETSc configuration (usually +PETSc needs the LAPACK library). + + +\subsection{Pthreads: POSIX threads} + +To enable multithreading support within Cactus using POSIX threads, +the configure option is + +\texttt{PTHREADS = yes} + +The configuration process will check if a reentrant C library is available, +and adds it to the linker flags. It will also search for the system's Pthreads +library (either \texttt{libpthread} or \texttt{libpthreads}), and set +preprocessor defines necessary for compiling multithreaded code. + + +\section{File Layout} + +The configuration process sets up various subdirectories and files in the +\texttt{configs} directory to contain the configuration specific files; these +are placed in a directory with the name of the configuration. + +\begin{Lentry} + +\item [\texttt{config-data}] contains the files created by the configure +script: + +The most important ones are + +\begin{Lentry} + +\item [\texttt{make.config.defn}] +contains compilers and compilation flags for a configuration. + +\item [\texttt{make.extra.defn}] +contains details about extra packages used in the configuration. + +\item [\texttt{cctk\_Config.h}] +The main configuration header file, containing architecture specific +definitions. + +\item [\texttt{cctk\_Archdefs.h}] +An architecture specific header file containing things which cannot be +automatically detected, and have thus been hand-coded for this architecture. +\end{Lentry} + +These are the first files which should be checked or modified to suit any +peculiarities of this configuration. + +In addition, the following files may be informative: + +\begin{Lentry} +\item [\texttt{fortran\_name.pl}] +A Perl script used to determine how the Fortran compiler names subroutines. +This is used to make some C routines callable from Fortran, and Fortran +routines callable from C. + +\item [\texttt{make.config.deps}] +Initially empty. It can be edited to add extra architecture specific dependencies +needed to generate the executable. + +\item [\texttt{make.config.rule}] +The \texttt{make} rules for generating object files from source files. + +\end{Lentry} + +Finally, \texttt{autoconf} generates the following files. + +\begin{Lentry} + +\item [\texttt{config.log}] +A log of the \texttt{autoconf} process. + +\item [\texttt{config.status}] +A script which may be used to regenerate the configuration. + +\item [\texttt{config.cache}] +An internal file used by \texttt{autoconf}. + +\end{Lentry} + +\item [\texttt{lib}] +An empty directory which will contain the libraries created for each thorn. + +\item [\texttt{build}] +An empty directory which will contain the object files generated for this +configuration, and preprocessed source files. + +\item [\texttt{config-info}] +A file containing information about the configuration (including the options used to configure the configuration). + +\item [\texttt{bindings}] A directory which contains all the files +generated by the CST from the \texttt{.ccl} files. + +\item [\texttt{scratch}] +A scratch directory which is used to accommodate Fortran 90 modules. + +\end{Lentry} + + +\section{Building and Administering a Configuration} +\label{sec:buanadaco} + +Once you have created a new configuration, the command +\\ \\ +\texttt{gmake <\var{configuration name}>} +\\ \\ +will build an executable, prompting you along the way for the +thorns which should be included. There is a range of \texttt{gmake} +targets and options which are detailed in the following sections. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{gmake Targets for Building and Administering Configurations} +\label{sec:gmtafobuanadco} + +A target for \texttt{gmake} can be naively thought of as an argument +that tells it which of several things listed in the \texttt{Makefile} it +is to do. The command \texttt{gmake help} lists all \texttt{gmake} targets: +% colon clarifies that all (config) targets are listed here + +\begin{Lentry} + +\item [\texttt{gmake <\var{config}>}] + builds a configuration. If the configuration doesn't exist, + it will create it. + +\item [\texttt{gmake <\var{config}>-clean}] removes all object and dependency +files from a configuration. + +\item [\texttt{gmake <\var{config}>-cleandeps}] removes all dependency files +from a configuration. + +\item [\texttt{gmake <\var{config}>-cleanobjs}] removes all object files from + a configuration. + +\item [\texttt{gmake <\var{config}>-config}] creates a new configuration or +reconfigures an existing one overwriting any previous configuration options.\\ +The configuration options are stored in a file +\texttt{configs/<\var{config}>/config-info}. + +\item [\texttt{gmake <\var{config}>-configinfo}] displays the options +of the configuration (\texttt{cat configs/<\var{config}>/config-info}). + +\item[\texttt{gmake <\var{config}>-cvsupdate}] updates the flesh and this +configuration's thorns from the CVS repositories. + +\item [\texttt{gmake <\var{config}>-delete}] deletes a configuration +(\texttt{rm -r configs/<\var{config}>}). + +\item [\texttt{gmake <config>-editthorns}] edits the \texttt{ThornList}. + +\item [\texttt{gmake <\var{config}>-examples}] copies all the example parameter files relevant for this configuration to the directory \texttt{examples} in the Cactus home directory. If a file of the same name is already there, it will not overwrite it. + +\item [\texttt{gmake <\var{config}>-realclean}] removes from a configuration +all object and dependency files, as well as files generated from the +CST (stands for \textit{Cactus Specification Tool}, which is the set of Perl scripts +which parse the thorn configuration files). Only the files generated +by configure and the \texttt{ThornList} file remain. + +\item [\texttt{gmake <\var{config}>-rebuild}] rebuilds a configuration (reruns the CST). + +\item [\texttt{gmake <\var{config}>-reconfig}] reconfigures an existing +configuration using its previous configuration options from the file +\texttt{configs/<\var{config}>/config-info}. + +\item [\texttt{gmake <\var{config}>--testsuite}] runs the test programs +associated with each thorn in the configuration. See section +\ref{sec:testing} for information about the test suite mechanism. + +\item[\texttt{gmake <\var{config}>-ThornGuide}] builds documentation for the +thorns in this configuration + (see section \ref{sec:OtherGmakeTargetsDoc}, page + \pageref{sec:OtherGmakeTargetsDoc}, for other targets to build documentation + for thorns). + +\item [\texttt{gmake <\var{config}>-thornlist}] regenerates the +\texttt{ThornList} for a configuration. + +\item [\texttt{gmake <\var{config}>-utils [UTILS$=$<\var{list}>]}] builds all +utility programs provided by the thorns of a configuration. Individual +utilities can be selected by giving their names in the \texttt{UTILS} variable. + +\end{Lentry} + + + +\subsection{Compiling in Thorns} +\label{sec:cointh} + +Cactus will try to compile all thorns listed in +\texttt{configs/<\var{config}>/ThornList}. +The \texttt{ThornList} file is simply a list of the form +\texttt{<\var{arrangement}>/<\var{thorn}>}. All text after a pound sign +`\texttt{\#}' or exclamation mark `\texttt{!}' +on a line is treated as a comment and ignored. +If you did +not specify a ThornList already, the first time that you compile a configuration +you will be shown a list of all the thorns in your arrangement +directory, and asked if you with to edit them. You can regenerate +this list at anytime by typing + +\begin{alltt} +gmake <\var{config}>-thornlist +\end{alltt}, + +or you can edit it using + +\begin{alltt} +gmake <\var{config}>-editthorns +\end{alltt}. + +Instead of using the editor to specify the thorns you want to + have compiled, you can \emph{edit} the \texttt{ThornList} outside + the make process. It is located in \texttt{configs/<\var{config}>/ThornList}, + where \texttt{<\var{config}>} refers to the name of your configuration. + The directory \texttt{./configs} exists \emph{ after} the very first + make phase for the first configuration. + +\subsection{Notes and Caveats} +\begin{itemize} +\item{} If during the build you see the error ``\texttt{missing + separator}'', you are probably not using GNU make. +\item{} \textit{The EDITOR environment variable}. You may not be aware of + this, but this thing very often exists and, may be set by default to + something scary like \texttt{vi}. If you don't know how to use \texttt{vi}, + or wish to + use your favorite editor instead, reset this environment variable. + (To exit \texttt{vi} type \texttt{<ESC> :q!}) +\end{itemize} + +\subsection{\texttt{gmake} Options for building configurations} +\label{sec:gmopfobuco} + +An \textit{option} for \texttt{gmake} can be thought of as an argument which tells +it how it should make a \textit{target}. Note that the final result is always +the same. + +\begin{Lentry} +\item [\texttt{gmake <\var{target}> PROMPT=no}] turns off all prompts from the +make system. +\item [\texttt{gmake <\var{target}> SILENT=no}] prints the commands that gmake +is executing. +\item [\texttt{gmake <\var{target}> WARN=yes}] shows compiler warnings during +compilation. +\item [\texttt{gmake <\var{target}> FJOBS=<\var{number}>}] compiles in parallel, +across files within each thorn. +\item [\texttt{gmake <\var{target}> TJOBS=<\var{number}>}] compiles in parallel, +across thorns. + +\end{Lentry} + +Note that with more modern versions of gmake, it is sufficient to pass the +normal \texttt{-j <\var{number}>} flag to gmake to get parallel compilation. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Other gmake Targets} + +\begin{Lentry} + +\item [\texttt{gmake help}] lists all make options. + +\item [\texttt{gmake checkout}] allows you to easily checkout Cactus +arrangements and thorns. For example, it can checkout all the thorns +in any thornlist file found in the \texttt{thornlists} subdirectory of +the Cactus root directory. % (usually \texttt{Cactus}). + +\item [\texttt{gmake cvsdiff}] shows differences between the checked out version of Cactus and that in the CVS repositories. + +\item [\texttt{gmake cvsstatus}] shows status of the checked out version of Cactus, reporting which files have been modified or need updating. + +\item [\texttt{gmake cvsupdate}] updates flesh and all thorns from CVS repositories. + +\item [\texttt{gmake configinfo}] prints configuration options for every +configuration found in user's \texttt{configs} subdirectory. + +\item [\texttt{gmake default}] creates a new configuration with a default name. + +\item [\texttt{gmake distclean}] deletes your \texttt{configs} directory, and hence all your configurations. + +\item [\texttt{gmake downsize}] removes non-essential files as documents + and test suites to allow for minimal installation size. + +\item [\texttt{gmake newthorn}] creates a new thorn, prompting for the necessary + information and creating template files. + +\item [\texttt{gmake TAGS}] creates an Emacs style TAGS file. See section + \ref{sec:Appendix.tags} for using tags within Cactus. + +\item [\texttt{gmake tags}] creates a \texttt{vi} style tags file. See section + \ref{sec:Appendix.tags} for using tags within Cactus. + +\end{Lentry} + +{\bf Targets to generate Cactus documentation:} +\label{sec:OtherGmakeTargetsDoc} + +\begin{Lentry} + +\item[\texttt{gmake <\var{arrangement}>-ArrangementDoc}] builds the +documentation for the arrangement. + +\item[\texttt{gmake ArrangementDoc}] builds the documentation for all +arrangements. + +\item [\texttt{gmake MaintGuide}] runs LaTeX to produce a copy of the +Maintainers' Guide. + +\item [\texttt{gmake ReferenceManual}] runs LaTeX to produce a copy of the +Reference Manual. + +\item[\texttt{gmake <\var{thorn}>-ThornDoc}] builds the documentation for the +thorn. + +\item[\texttt{gmake ThornDoc}] builds the documentation for all thorns. + +\item [\texttt{gmake ThornGuide}] runs LaTeX to produce a copy of the Thorn +Guide, for all the thorns in the arrangements directory. + +\item [\texttt{gmake UsersGuide}] runs LaTeX to produce a copy of the Users' +Guide. + +\item [\texttt{gmake AllDoc}] creates all of the above documentations. + +\end{Lentry} + + +\section{Testing} +\label{sec:testing} + +Some thorns come with a test suite, consisting of example parameter files +and the output files generated by running these. To run the test suite +for the thorns you have compiled use + +\texttt{gmake <\var{configuration}>--testsuite} + +These test suite serve the dual purpose of + +\begin{Lentry} +\item [Regression testing] +i.e. making sure that changes to the thorn or the flesh don't affect the +output from a known parameter file. +\item [Portability testing] +i.e. checking that the results are independent of the architecture---this +is also of use when trying to get Cactus to work on a new architecture. +\end{Lentry} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\chapter{Runtime options} + +This chapter covers all aspects for running your +Cactus executable. These include: command-line options, parameter +file syntax, understanding screen output, environment variables, and +creating thorn documentation. + +\section{Command-Line Options} +\label{sec:command_line_options} + +Cactus uses the standard GNU style of long-named command-line options; +many of these options also have traditional Unix single-letter short forms. +The options follow the usual GNU rules: +\begin{itemize} +\item A long-named option \verb|--foo| which takes an argument \verb|bar| + may be written as either \verb|--foo bar| or as \verb|--foo=bar|. +\item A long-named option may be abbreviated, so long as the abbreviation + is unambiguous. +\item The preferred way of spelling a long-named option is \verb|--foo|, + but \verb|-foo| also accepted, though this is deprecated. +\item A short option, \verb|-X|, which takes an argument \verb|bar| + may be written as either \verb|-Xbar| or as \verb|-X=bar|. +\item An option which can be interpreted as either a short option, + or as an abbreviated \verb|-foo|-style long option, is interpreted + as the former. In particular, \verb|-re| is interpreted as + an abbreviation for \verb|-redirect|, rather than as \verb|-r=e|. +\end{itemize} + +The Cactus command-line options are specified in +Table~\ref{tab:command-line-options}, and are as follows: + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{table} +\texttt{ +\begin{tabular}{|l|l|} +\hline +Short Version & Long Version \\ +\hline + -O[v] & --describe-all-parameters \\ +\hline + -o<\var{param}> & --describe-parameter=<\var{param}> \\ +\hline + -S & --print-schedule\\ +\hline + -T & --list-thorns\\ +\hline + -t<\var{arrangement/thorn}>& --test-thorn-compiled=<\var{arrangement/thorn}>\\ +\hline + -h,-? & --help\\ +\hline + -v & --version \\ +\hline +% -x [<nprocs>] & --test-parameters [<nprocs>] \\ +%\hline + -L<\var{level}> & --logging-level=<\var{level}> \\ +\hline + -W<\var{level}> & --warning-level=<\var{level}> \\ +\hline + -E<\var{level}> & --error-level=<\var{level}> \\ +\hline + -r[o|e|oe|eo] & --redirect=[o|e|oe|eo]\\ +\hline + & --logdir=<\var{directory}> \\ +\hline + -b[no|line|full] & --buffering=[no|line|full]\\ +\hline + & --parameter-level=<strict|normal|relaxed> \\ +\hline + -i & --ignore-next \\ +\hline +\end{tabular} +} +\caption[Command-Line Options] + {This table shows all the Cactus command-line options.} +\label{tab:command-line-options} +\end{table} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\begin{Lentry} + +\item [\texttt{-O} or \texttt{--describe-all-parameters}] +Prints a full list of all parameters from all thorns which were compiled, +along with descriptions and allowed values. This can take an optional extra +parameter \texttt{v} (i.e. \texttt{-Ov} to give verbose information about +all parameters). + +\item [\texttt{-o<\var{param}>} or \texttt{--describe-parameter=<\var{param}>}] +Prints the description and allowed values for a given parameter---takes one +argument. + +\item [\texttt{-S} or \texttt{--print-schedule}] +Print only the schedule tree. + +\item [\texttt{-T} or \texttt{--list-thorns}] +Prints a list of all the thorns which were compiled in. + +\item [\texttt{-t<\var{arrangement or thorn}>} or \texttt{--test-thorn-compiled=<\var{arrangement or thorn>}} ] +Checks if a given thorn was compiled in---takes one argument. + +\item [\texttt{-h}, \texttt{-?} or \texttt{--help}] +Prints a help message. + +\item [\texttt{-v} or \texttt{--version}] +Prints version information of the code. + +%\item [\texttt{-x <nprocs>} or \texttt{--test-parameters <nprocs>}] +%Runs the code far enough to check the consistency of the parameters. If +%given a numeric argument it will attempt to simulate being on that number +%of processors. [To be implemented.] + +\item [\texttt{-L<\var{level}>} or \texttt{--logging-level=<\var{level}>}] +Sets the logging level of the code. All warning messages are given a +level---the lower the level the greater the severity. This +parameter \texttt{-L} controls the level of messages to be seen, with all +warnings of level $\le$ \texttt{<\var{level}>} printed to standard output. The +default is a logging level of~0, meaning that only level~0 messages +should be printed to standard output. + +\item [\texttt{-W<\var{level}>} or \texttt{--warning-level=<\var{level}>}] +Similar to \texttt{-W}, but for standard error instead of +standard output. All warnings of level $\le$ \texttt{<\var{level}>} are +printed to standard error. The default is a warning level of~1, +meaning that level~0 and level~1 messages should be printed to +standard error. + +\item [\texttt{-E<\var{level}>} or \texttt{--error-level=<\var{level}>}] +Similar to \texttt{-W}, but for fatal errors: Cactus treats all +warnings with level $\le$ \texttt{<\var{level}>} as fatal errors, and aborts +the Cactus run immediately (after printing the warning message%%% +\footnote{%%% + Cactus imposes the constraint, + $\hbox{\texttt{-W} level} \ge \hbox{\texttt{-E} level} \ge 0$, + so any fatal-error message will always be printed (first). + }%%% +). The default value is zero, \ie{} only level~0 warnings +will abort the Cactus run. + +\item [\texttt{-r[o|e|oe|eo]} or \texttt{--redirect=[o|e|oe|eo]}] +Redirects the standard output (`\texttt{o}') and/or standard error +(`\texttt{e}') of each processor to a file. By default, +the standard outputs from processors other than processor 0 are discarded. + +\item [\texttt{--logdir=<\var{directory}>}] +Sets the output directory for logfiles created by the \texttt{-r} option. +If the directory doesn't exist yet, it will be created by Cactus. + +\item [\texttt{-b[no|line|full]} or \texttt{--buffering=[no|line|full]}] + Set the \texttt{stdout} buffering mode. Buffered I/O is a + standard feature of C programmes. This delays writing the actual + output; instead, the output is collected into an internal buffer, + and is then written in large chunks. This improves performance + considerably. Line buffering means that output is written whenever + a newline character is encountered; full buffering means that output + is written, say, once 1000 characters have accmulated. The default + setting is line buffering for I/O that goes to a terminal, and full + buffering for I/O that goes to a file. For debugging purposes, it + is sometimes useful to reduce the amount of buffering. Error + messages, i.e.\ the \texttt{stderr} stream, is always unbuffered + (and hence usually slower than \texttt{stdout}). + +\item [\texttt{--parameter-level=<strict|normal|relaxed>}] +Sets the level of parameter checking to be used, one of \texttt{strict} +(the default), \texttt{normal}, or \texttt{relaxed}. +See Section~\ref{sec:Parameter_File} for details. + +\item [\texttt{-i} or \texttt{--ignore-next}] +Causes the next argument on the command line to be ignored. +\end{Lentry} + +A dash (``\texttt{-}'') appended at the end of the command line like this: + +\texttt{./cactus\_<\var{config}> [\var{command-line options}] -} + +lets the user specify parameter values from standard input rather than +from a parameter file. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Parameter File Syntax} +\label{sec:Parameter_File} + +A \textit{parameter file} (or \textit{par file}) is used to control the +behaviour of a Cactus executable. It specifies initial values for parameters +as defined in the various thorns' \texttt{param.ccl} files +(see Chapter~\ref{chap:Cactus_parameters}). +The name of a parameter file is often given the suffix \texttt{.par}, but +this is not mandatory. + +A parameter file is a text file whose lines are either comments +or parameter statements. +Comments are blank lines or lines that begin with either +`\texttt{\#}' or `\texttt{!}'. +A parameter statement +consists of one or more parameter names, followed by +an `\texttt{=}', followed by the value(s) for this (these) parameter(s). +Note that all string parameters are case insensitive. + +The first parameter statement in any parameter file should set \texttt{ActiveThorns}, +which is a special parameter that tells the +program which \textit{thorns} are to be activated. Only parameters from active +thorns can be set (and only those routines \textit{scheduled} by active thorns +are run). By default, all thorns are inactive. For example, the first +entry in a parameter file which is using just the two thorns +\texttt{CactusPUGH/PUGH} and \texttt{CactusBase/CartGrid3D} should be + +\texttt{ActiveThorns = "PUGH CartGrid3D"} + +All parameters following the \texttt{ActiveThorns} parameter all have names +whose syntax depends on the scope +(see Section~\ref{sec:Cactus_parameters.scope}) +of the parameter: +\begin{Lentry} +\item [\texttt{Global parameters}] +Just the name of the parameter itself. Global parameters are to be avoided; +there are none in the flesh and Cactus Toolkits. +\item [\texttt{Restricted parameters}] +The name of the \textit{implementation} which defined the parameter, followed +by two colons, +then the name of the parameter---e.g. \texttt{driver::global\_nx}. +\item [\texttt{Private parameters}] +The name of the \textit{thorn} which defined the parameter, two colons, +and the name of the parameter---e.g. \texttt{wavetoyF77::amplitude}. +\end{Lentry} + +This notation is not currently strictly enforced in the code. It is +sufficient to specify the first part of the parameter name using either +the implementation name, or the thorn name. However, we recommend +that the above convention be followed. + +The Cactus flesh performs checks for consistency and range of parameters. +The severity of these checks is controlled by the command-line argument +\texttt{--parameter-level}, which can take the following values +\begin{Lentry} +\item[\texttt{relaxed}] Cactus will issue a level 0 warning (that is, the +default behaviour will be to terminate) if +\begin{itemize} +\item{} The specified parameter value is outside of the allowed range. +\end{itemize} + +\item [\texttt{normal}] +This is the default, and provides the same warnings as the +\texttt{relaxed} level, with the addition of a level 0 warning issued for +\begin{itemize} +\item{} An implementation and/or thorn \texttt{foo} is active, but the + parameter \texttt{foo::bar} was not defined. +\item{} The parameter \texttt{foo::bar} was successfully set for both an + active implementation \texttt{foo} not implemented by a thorn \texttt{foo}, + and to a thorn \texttt{foo}. +\end{itemize} + +\item [\texttt{strict}] +This provides the same warnings as the \texttt{normal} level, with the +addition of a level 0 warning issued for +\begin{itemize} +\item{} The parameter \texttt{foo::bar} is specified in the parameter file, + but no implementation or thorn with the name \texttt{bar} is active. +\end{itemize} +\end{Lentry} + +Notes: + +\begin{itemize} + +\item{} You can obtain lists of the parameters associated with +each thorn using the command-line options \texttt{-o} and \texttt{-O} +(Section~\ref{sec:command_line_options}). + +\item{} The parameter file is read \emph{sequentially} from top to bottom, + this means that if you set the value of a parameter twice in + the parameter file, the second value will be used. (This is + why the \texttt{ActiveThorns} parameter is always first in the file). + +\item{} String parameter values can be specified either as unquoted tokens (not + containing any whitespace), or as quoted values. If a quoted string + parameter value spans multiple lines, all whitespaces, including newline + characters, are preserved. + +\item{} Some parameters are \textit{steerable}, and can be changed during + the execution of a Cactus program using parameter steering interfaces, + for example, thorn \texttt{CactusConnect/HTTPD}, or using a + parameter file when recovering from a checkpoint file. + +\item{} For examples of parameter files, look in the \texttt{par} directory + contained in most thorns. + +\end{itemize} + +\section{Thorn Documentation} +\label{sec:thdo} + +The Cactus make system provides a mechanism for generating a +\textit{Thorn Guide} containing separate chapters for each thorn and +arrangement in your configuration. The documentation provided for an +individual thorn, obviously depends on what the thorn authors added, +but the Thorn Guide is a good place to first look for special +instructions on how to run and interpret the output from a thorn. +Details about parameters, grid variables and scheduling are +automatically read from a thorn's CCL files and included in the Thorn +Guide. To construct a Thorn Guide for the configuration +\texttt{$<$\var{config}$>$} use + +\texttt{gmake $<$\var{config}$>$-ThornGuide} + +or to make a Thorn Guide for all the thorns in the \texttt{arrangements} directory + +\texttt{gmake $<$\var{config}$>$}. + +See Section~\ref{sec:Adding_documentation} for a guide to adding +documentation to your own thorns. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\chapter{Getting and Looking at Output} + + +\section{Screen Output} + +As your Cactus executable runs, standard output and standard error +are usually written to the screen. Standard output provides you +with information about the run, and standard error reports warnings +and errors from the flesh and thorns. + +As the program runs, the normal output provides the following information: + +\begin{Lentry} + +\item [Active thorns] + A report is made as each of the thorns in the \texttt{ActiveThorns} +parameters from the parameter file (see Section~\ref{sec:Parameter_File}) +is attempted to be activated. This report +shows whether the thorn activation was successful, and if successful, gives the +thorn's implementation. For example + +\begin{verbatim} +Activating thorn idscalarwave...Success -> active implementation idscalarwave +\end{verbatim} + +\item [Failed parameters] + If any of the parameters in the parameter file does not belong to any +of the active thorns, or if the parameter value is not in the allowed range +(see Section~\ref{sec:Parameters.Types_and_Ranges}), +an error is registered. For example, if the parameter is not recognised, + +\begin{verbatim} +Unknown parameter time::ddtfac +\end{verbatim} +or if the parameter value is not in the allowed range, + +\begin{verbatim} +Unable to set keyword CartGrid3D::type - ByMouth not in any active range +\end{verbatim} + +\item [Scheduling information] + The scheduled routines (see Section~\ref{chap:scheduling}) +are listed, in the order that they will be executed. For example, + +\begin{verbatim} +---------------------------------------------------------------------- + Startup routines + Cactus: Register banner for Cactus + CartGrid3D: Register GH Extension for GridSymmetry + CartGrid3D: Register coordinates for the Cartesian grid + IOASCII: Startup routine + IOBasic: Startup routine + IOUtil: IOUtil startup routine + PUGH: Startup routine + WaveToyC: Register banner + + Parameter checking routines + CartGrid3D: Check coordinates for CartGrid3D + IDScalarWave: Check parameters + + Initialisation + CartGrid3D: Set up spatial 3D Cartesian coordinates on the GH + PUGH: Report on PUGH set up + Time: Set timestep based on speed one Courant condition + WaveToyC: Schedule symmetries + IDScalarWave: Initial data for 3D wave equation + + do loop over timesteps + WaveToyC: Evolution of 3D wave equation + t = t+dt + if (analysis) + endif + enddo +---------------------------------------------------------------------- +\end{verbatim} + +\item [Thorn banners] + Usually a thorn registers a short piece of text as a \emph{banner}. + The banner of each thorn is displayed in the standard output when + the thorn is initialised. + +\end{Lentry} + + +\section{Output} +Output methods in Cactus are all provided by thorns. +Any number of output methods can be used for each run. +The behaviour of the output thorns in the +standard arrangements are described in those thorns' documentation. + +In general, output thorns decide what to output by parsing a string parameter +containing the names of those grid variables, or groups of variables, for which +output is required. The names should be fully qualified with the +implementation and group or variable names. + +There is usually a parameter for each method to denote how often, in evolution +iterations, this output should be performed. There is also usually a parameter +to define the directory in which the output should be placed, defaulting to the +directory from which the executable is run. + +See Chapter~\ref{chap:io_methods} for details on creating your own I/O method. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\end{cactuspart} |