summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlanfer <lanfer@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-02-03 17:10:08 +0000
committerlanfer <lanfer@17b73243-c579-4c4c-a9d2-2d5706c11dac>1999-02-03 17:10:08 +0000
commit9351429b8acba392f80c97462349093483397df7 (patch)
treebb8aa200e1af63a75b6438d0fc1ecd5497aa39e5
parente575369ef3371da2c2289eceda6e2a41d708a9fc (diff)
splitting the UsersGuide into three parts and include them in the main tex file
git-svn-id: http://svn.cactuscode.org/flesh/trunk@200 17b73243-c579-4c4c-a9d2-2d5706c11dac
-rw-r--r--doc/UsersGuide/UsersGuide_Part1.tex590
-rw-r--r--doc/UsersGuide/UsersGuide_Part2.tex5
-rw-r--r--doc/UsersGuide/UsersGuide_Part3.tex206
3 files changed, 801 insertions, 0 deletions
diff --git a/doc/UsersGuide/UsersGuide_Part1.tex b/doc/UsersGuide/UsersGuide_Part1.tex
new file mode 100644
index 00000000..7e5ebe28
--- /dev/null
+++ b/doc/UsersGuide/UsersGuide_Part1.tex
@@ -0,0 +1,590 @@
+\part{Introduction}
+
+\chapter{Overview of documentation}
+
+This documentation splits naturally into these parts:
+
+\begin{itemize}
+
+\item {\bf The history of Cactus and the Concepts behind the
+ CCTK. Getting you up and running.}
+ We give an overview on the required hardware and
+ software and we willll talk you through the installation of a working
+ CCTK. You will be able to verify the correct installation by the
+ CCTK testsuite. We show how to perform some basic simulation and
+ introduce the concepts behind data output. We provide brief
+ information on how to vizualize the 1D, 2D and 3D data.
+
+\item {\bf Part2: How to write a physics thorn.} We introduce a
+ sample thorn that illustrates the implementation of simple initial
+ data and the subsequent evolution. You will learn how to use the
+ programming interface to take advantage of parallelism and modularity.
+
+\item {\bf Part3: How to writes an infrastructure thorn.} In this more
+ advanced part, we talk about user supplied infrastructure routines
+ as {\em additional output routines, boundary conditions, etc.}
+
+\item {\bf The standard toolkit.}
+
+\end{itemize}
+
+Other topics will be discussed in separate documents:
+
+\begin{itemize}
+
+\item The numerical relativity toolkit.
+
+\item A description of the flesh, for the maintainers.
+
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{A Cactus history}
+
+To begin with a one-phrase summary: Cactus is a numerical
+infrastructure for solving partial differential equations (typically
+in 3-dimensional space and time), a modular code for solving the
+Einstein equations, and an international collaboration in numerical
+general relativity pooling ideas in this code.
+
+Cactus 1.0 was written in 1996 by Joan Mass\'o and Paul Walker out of
+frustration with the numerical relativity codes they had been working
+on. It has come a long way. The name is meant to suggest a modular
+structure consisting of a ``flesh'' (or backbone, or core) and
+``thorns'' (or modules, or collections of subroutines). Some essential
+features of the code have been present from the beginning:
+
+\begin{itemize}
+
+\item Parallelism (the work is split between multiple processors, or
+multiple computers) that is largely automatic and hidden from the
+user.
+
+\item A modular structure with a fixed interface between the flesh and the
+thorns, which allows users to add new parts.
+
+\item Giving the user a choice of C and Fortran for writing thorns, while
+automating the interface between the two languages.
+
+\item A spirit of open-source collaboration similar to the gnu
+project.
+
+\end{itemize}
+
+Other aspects have changed completely since Cactus 1.0. The flesh
+started out as a complete numerical relativity code, using one
+particular formulation of the Einstein equations, with the thorns
+providing only initial data, analysis, and other peripheral
+functions. In 4.0 not only the Einstein equations and general
+relativity basics, but even input/output and parallelism are provided
+by thorns. The only function of the flesh is now to define the
+interface between thorns, to hold varying collections of thorns, and
+to provide an interface between C and Fortran routines.
+
+The aim of this radicalism is to allow for future growth. We now
+distinguish informally between physics thorns and infrastructure
+thorns. The main infrastructure project for now is adding different
+flavors of adaptive mesh refinement -- while the user writing a
+physics thorn can still large she is working a single-processor,
+unigrid code. Similarly, an infrastructure thorn could be replaced by
+one that does the same job, but simply better. Even the flesh could be
+rewritten in the future, but the interface between the flesh and
+thorns is to remain unchanged.
+
+Cactus thorns can be written in F90, F77 and C (or a mixture). The
+decision to support Fortran was made for the pragmatic reason that
+many people like it, or don't write C. This decision does make the
+flesh more complex. The flesh is written in C, and in perl that
+generates C.
+
+The change from Cactus 3.0 to Cactus 4.0 is the largest one yet. The
+new interface forces modifications on all existing thorns, but it is
+intended not to change again. {\q Can we realistically say any more?}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Cactus concepts}
+
+Cactus is designed to solve time evolution problems in three space
+dimensions by finite differencing on a Cartesian grid. This typically
+includes solving elliptic equations to obtain initial data, evolving
+them by hyperbolic or parabolic equations, and perhaps solving more
+elliptic equations at each time step. One basic concept is therefore
+a series of initialization steps followed by a do-loop that implements
+the time evolution, along with periodic analysis and output. Problems
+that do not naturally fit into this concept are methods which are
+global in space or time (such as pseudo-spectral methods) or methods
+which do not have a grid (such as finite elements). Thorns interact
+with the flesh by, among other things, announcing when they want to be
+called in this basic schedule.
+
+Another basic concept is parallelism by distributing spatial domains
+among processors. Finite differencing is an almost local procedure,
+which means that each processor can work on its domain of space,
+needing to communicate only with neighboring processors in order to
+work on points of the boundary of its domain. The domain decomposition
+is automatic and largely hidden. A physics thorn can pretend to work
+on a single grid, which in reality is only a chunk of the complete
+numerical domain. This chunk consists of an inner region of points the
+processor ``owns'', and needs to update, surrounded by a ``ghost
+zone'' of points which it can use but doesn't need to update -- they
+are updated by neighboring processors. Clearly this concept is geared
+towards explicit finite differencing schemes for the time-evolution
+part. {\q Say something about elliptic equations here, and implicit
+schemes}
+
+The notion that we are dealing with a collection of fields that live
+on the same (typically three-dimensional) space, and that evolve
+together in time defines the third basic concept, that of ``grid
+functions'' grouped together in a ``grid hierarchy''. Multiple
+grid hierarchies arise, for example, when one wants to cover the
+surface of a sphere with two Cartesian coordinate patches, or in
+adaptive mesh refinement. Grid functions are defined on Cartesian
+grids that are equally spaced in each of the three coordinates $x$,
+$y$ and $z$. (These could be spherical type coordinates, although that
+was not the original intention.) Grid functions can be two or
+one-dimensional as well as three dimensional.
+
+Routines are grouped in thorns, and thorns informally in toolkits,
+such as the standard toolkit, and the general relativity
+toolkit. The routines inside a thorn can interact in any way, but
+thorns interact with the flesh and with each other only through a
+well-defined interface. Confirming to this interface guarantees that
+thorns will be compatible with, and useful for, all future extensions
+of the code. The interface also helps users and developers to
+understand what a given thorn does.
+
+The flesh and many thorns are public and can be used by anyone,
+assuming ethical behavior. Public thorns and the flesh are distributed
+by CVS (see {\q where?} below). Public thorns are checked out in
+toolkits. The flesh may change in the future but this should never
+affect users, as Cactus 4.0 is making every effort to codify and
+freeze the interface. Public thorns should of course not lose
+important functionality they once had. (Nevertheless, CVS gives the
+user access to all earlier versions.)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Installation}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Required software}
+
+In general, Cactus {\em requires} the following set of software to function
+in a single processor mode. Please refer to the architecture section
+\ref{sec:architecture} for architecture specific items.
+\begin{itemize}
+\item{\tt Perl5.0} Perl is used extensively during the CCTK
+ configuration phase. {\tt Perl} is available for nearly all
+ operating systems known to man and can be obtained at {\tt
+ http://www.perl.org}.
+\item{\tt gmake} The GNU make utility needss to be installed. Errors
+ {\q wanna name them here ?} during the make process are often caused
+ by not using {\tt gmake}. {\tt gmake} can be obtained from any
+ friendly GNU site.
+\item{\tt C/C++} A C/C++ compiler. These can be the GNU compilers as well.
+\item{\tt Fortran 90}
+\item{\tt CVS} The {\em ``Concurrent Versioning System''} is not needed
+ to run/compile the CCTK, but you are strongly encourage to install
+ this software to take advantage of the update procedures.
+\end{itemize}
+
+\noindent
+The following software is {\em optional} and not needed to get the
+basic CCTK installation on track. Its listed in the order of importance.
+\begin{itemize}
+\item{\tt Fortran 90} CCTK requires a F90 compiler to run modules
+ written in F77 or F90. There is no
+ GNU F90 and just a very limited set of free F90 compilers for
+ various architectures.
+\item{\tt MPI} Currently the communication layer of the CCTK uses the
+ {\em Message Passing Interface (MPI)} provide inter process
+ communication. Supercomputers very often supply a native MPI
+ implementation at their site. CCTK is very likely to work with
+ them. For local area networks we suggest installing the {\tt MPICH}
+ version, which can be obtained for various architectures and
+ operating systems at {\tt http://www-unix.mcs.anl.gov/mpi/}.
+\item{\tt TAGS}: Tags enables you browse through the calling structure
+ of a program by help of function call database. Navigating the CCTK and
+ Toolkits becomes very easy. Emacs and vi both support this database. See
+ \ref{sec:tags} how to install {\tt TAGS}.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Supported architectures}
+Cactus runs on many machines, under a large number of Unix operating
+systems. Here we list all the machines we have compiled and verfied
+Cactus on, including some architecture specific notes.
+\begin{itemize}
+\item{\bf SGI Origin 2000}
+\item{\bf SGI}
+\item{\bf Cray T3E}
+\item{\bf Dec Alpha}: Dec operating system and Linux. Single processor
+ mode and MPICH.
+ supported. The Decs need to have the GNU {\tt C/C++} compilers installed.
+\item{\bf Intel Linux}: There is a
+ free Linux F90 compiler available from {\tt http://www.sierra.com}
+ -- the only free we know of. Single processor mode and MPICH
+ supported.
+\item{\bf Windows32 using Cygwin32 extensions} {\q still true?}
+\item{\bf Windows NT}: succesful compile with the following software:
+ \begin{itemize}
+ \item{\tt DIGITAL Visual Fortran Optimizing Compiler Version: V5.0C}
+ \item{{\tt Microsoft (R) 32-bit C/C++ Optimizing Compiler Version
+ 11.00.7022 for 80x86}
+ \item{Cygnus Unix suite version 1.19}
+ \end{itemize}
+\item{\bf Solaris } {\q What is the status on this ??}
+\end{itemize}
+If you did not find you architecture/operating system of
+choice, see section sec\ref{sec:how_to_port} on how to port to an
+unsupported architecture.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Checkout procedure}
+
+Cactus is distributed, added to, and updated through the free CVS
+software. CVS ({\em ``Concurrent Versioning System''}) allows many
+people to work on a large software project together without getting
+into a tangle by keeping track of changes made by the different
+users. For the beginner, we summarize the basics in appendix
+\ref{sec:CVS}, please refer to this section for small description of
+the CVS syntax.
+
+The installation requires about {\q HOW MANY MEGS ? }. See section
+\ref{sec:downsize_CCTK} on how to downsize CCTK installtion if space is tight.
+{\q gmake small ??}
+
+\begin{itemize}
+\item{\bf Login}: Prior to any CVS operation, you need to loginto the central
+ repository. For an anoymous checkout, type:\\
+ {\tt
+ cvs -d :pserver:cvs\_anon@hod.aei-potsdam.mpg.de:/usr/users/cactus login
+ }
+ You will be prompted for a password which is {\tt anon}.
+\item{\bf Checkout}: To obtain a fresh CCTK checkout, type
+ {\t
+ cvs -d :pserver:cvs\_anon@hod.aei-potsdam.mpg.de:/usr/users/cactus checkout cactus
+ }
+ The CVS checkout procedure will create a directory called {\tt
+ ./CCTK} and install the CCTK inside this directory. From now on we
+ will reference all directory names relative to {\tt ./CCTK}.
+
+\item{\bf Update}: To update an existing CCTK checkout (to patch in
+ possible changes, etc.), do the following {\em within} the {\tt ./CCTK} directory.
+ {\t
+ cvs -d :pserver:cvs\_anon@hod.aei-potsdam.mpg.de:/usr/users/cactus update
+ }
+ The update process will operate downwards relative to you current position
+ within the CCTK tree. To update only certain directories, change
+ into these directories and issue the update command.
+\item{\bf CVS status}: to obtain a status report on the ``age'' of your
+ CCTK or Toolkit routines (from your current directory position
+ downward), type
+ {\t
+ cvs -d :pserver:cvs\_anon@hod.aei-potsdam.mpg.de:/usr/users/cactus status
+ }
+\item{\bf non-anonymous CVS}: if you have an account at the central
+ repository and you would like to perform any of the operation above
+ {\em non-anonymously}, replace {\tt cvs\_anon} by your login name
+ and provide the appropriate password during the CVS login
+ process. Depending on your permissions, you may then make commits to the CCTK
+ or its Toolkits.
+\item{\bf Commits}: you need to perform a personalized login and have
+ proper permissions to commit code to the repository.
+\end{itemize}
+
+For more CVS commands please refer to appendix \ref{sec:CVS}.
+
+{\q Change CCTK to cactus in the distribution}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Directory structure}
+
+A fresh CCTK checkout creates a directory {\tt ./CCTK} with the
+following files substructure:
+\begin{itemize}
+
+\item{\tt ./CVS/} the CVS book-keeping directory, present in every subdirectory.
+
+\item{\tt ./doc/} CCTK documentation
+
+\item{\tt ./lib/} contains libraries.
+
+\item{\tt ./src/} contains the source code for the CCTK
+
+\item {\tt ./toolkits/} contains the Cactus toolkits. The toolkits
+ (the actual ``physics'') is not supplied by the CCTK. If the toolkits
+ you want to use are part of the central repository, they can be
+ checked out in similar way the CCTK. Each directory inside {\tt
+ toolkits/} contains thorns. {\q ??}
+\end{itemize}
+
+When Cactus is first compiled it creates a new directory {\tt
+./CCTK/build/}. Disk space may be a problem on supercomputers where
+home directories are small. A workaround is to first create a
+build directory on scratch space, say {\tt scratch/cactus\_build/} (where
+{\tt scratch/} is your scratch directory), and soft link ({\tt ln -s
+scratch/cactus\_build cactus/build/}) it to the Cactus directory.
+
+When the code has been compiled for some configuration CONF, the
+directory {\tt build/CONF/} contains the following:
+
+\begin{itemize}
+
+\item {\tt ActiveThorns}
+
+\item {\tt datestamp.o}
+
+\item {\tt bindings/} contains all the files created by the perl
+scripts, sorted into subdirectories {\tt Parameters},
+{\tt Variables}, {\tt Schedule}, {\tt thorn\_***} (one for each thorn).
+
+\item {\tt build/} contains the post-processed source code, the
+dependencies and the object files, sorted into the subdirectories {\tt
+Cactus}, {\tt CactusBindings} and {\tt thorn\_***}.
+
+\item {\tt config-data} : contains the files created by the configure
+script:
+
+\begin{itemize}
+
+\item {\tt config.cache}
+
+\item {\tt config.h}
+
+\item {\tt config.log}
+
+\item {\tt config.status}
+
+\item {\tt fortran\_name.pl} (used to determine how fortran routines
+are called from C)
+
+\item {\tt make.config.defn} (contains compilers etc. for a configuration)
+
+\item {\tt make.config.deps}
+
+\item {\tt make.config.rule} (rules to generate object files from source files)
+\end{itemize}
+
+\item {\tt lib} : contains the libraries built from the object files,
+
+\begin{itemize}
+
+\item {\tt libCactus.a} for the flesh
+
+\item{\tt llibCactusBinding.a} for the Bindings
+
+\item {\tt llib***.a} for each thorn
+
+\end{itemize}
+
+{\q It might be useful to give a couple of commands like nm for seeing
+what is in libraries.}
+
+\item {\tt scratch}: empty at the end.
+
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Getting help}
+
+Cactus Maint and GNATS
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Testing}
+
+simple make and test suite
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Compilation}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Compilation of the flesh, and configurations}
+
+Cactus can be built in different configurations from the same copy of
+the source files, and these different configurations coexist in the
+{\tt cactus/} directory. Different configurations can be for different
+machines. This is useful when your {\tt cactus/} directory is mounted
+on different machines in a cluster, and you want to run cactus on all
+these machines while only keeping and updating a single copy of the
+source files. It is also useful if you want to compile cactus with
+different compilers or optimization settings on the same machine, and
+compare one against the other. As a third example, you may want to
+compile with different sets of thorns. As a final example, you might
+want to build cactus using different multi-processor communication
+protocols, such as MPI (currently the cactus standard) or GLOBUS.
+
+Building the code should be easy. Just type
+
+{\t gmake <configuration options> <CONF>}
+
+where {\tt <...>} denotes optional arguments. {\tt gmake} is the gnu
+make program. Note that {\tt make} will not work (if you try, you'll
+get funny error messages.) Without any arguments, the make process
+picks a default configuration (looking for standard compilers and so
+on) and gives this configuration a default name (typically the name of
+your operating system). It then runs configuration scripts (in {\tt
+lib/make/}) which figure out details of your computer.
+
+You'll see that the make process has created a {\tt build/} directory,
+and in it a directory {\tt build/CONF}, where {\tt CONF} is the name
+of the configuration, in this case the default name chosen for you.
+Inside {\tt CONF}, {\tt CONF/config-data/} now contains the results of
+the configuration process. To actually compile with this
+configuration, type
+
+{\t gmake CONF}
+
+where {\tt CONF} is the name of the configuration. The argument {\tt
+CONF} is now obligatory.
+
+gmake will ask if you want to edit the file {\tt
+CONF/ActiveThorns}. As the name says, it contains the names of all the
+thorns you want compiled in. By default it contains all the thorns you
+have checked out. If you say {\tt yes}, gmake opens the editor
+specified in your {\tt EDITOR} shell variable. gmake continues when
+you close the editor. Alternatively, you could have created {\tt
+CONF/ActiveThorns} beforehand. {\tt ActiveThorns} can contain the
+names of individual thorns or entire toolkits {\q Implement this}.
+
+{\q move setup file elsewhere.}
+
+{\q move executable elsewhere, and make one for each configuration.}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Compiling in thorns}
+
+Cactus compiles in all thorns listed in {\tt
+build/CONF/ActiveThorns}. {\q If the thorn has not been checked
+out...} Cactus looks for source code in a thorn's {\tt src}
+directory. It first looks for a file {\tt make.code.defn} which
+should contain
+
+\begin{itemize}
+
+\item {\t SRCS = <list of all source files in this directory>}
+
+\item {\t SUBDIRS = <list of all subdirectories containing source files>}
+
+\end{itemize}
+
+and each subdirectory mentioned should also contain a {\tt
+make.code.defn} file with a {\tt SRCS} line ({\tt SUBDIRS} in a
+subdirectory {\tt make.code.defn} file will be ignored).
+
+The {\tt make.code.defn} file in a directory is included at the top of
+the makefile {\q where does it sit?} used to build the sources. If a
+file {\tt make.code.deps} exists in the directory {\q where?} it is
+included at the bottom.
+
+The standard make system may be overridden by placing a makefile
+called {\tt Makefile} in the {\tt src/} directory. This can do
+whatever it likes, but must create a library called
+
+{\tt \$(NAME)}
+
+(which is actually {\tt \$(CCTK\_LIBDIR)/lib<thorn>.a }). {\q We need more detail here. What does ``is
+actually'' mean?}
+
+{\q Watch for CCTK here and elsewhere. Don't remove this query before
+CCTK is gone.}
+
+A makefile is passed the following variables
+
+{\q How many makefiles are involved? Which are created at runtime etc.}
+
+\begin{itemize}
+
+\item {\tt \$(CCTK\_HOME)} - the main CCTK directory
+
+\item {\tt \$(TOP)} - the CONF directory
+
+\item {\tt \$(SRCDIR)} - the directory in which the source files can be found
+
+\item {\tt \$(CONFIG)} - the directory containing the configuration files
+
+\item {\tt \$(THORN)} - the thorn name
+
+\item {\tt \$(SCRATCH\_BUILD)} - the scratch directory where f90 module
+files should end up if they need to be seen by other thorns.
+
+\item {\tt \$(NAME)}.
+
+\end{itemize}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section {gmake targets}
+
+(A target for {\tt gmake} can be naively thought of as an argument
+that tells it which of several things listed in the {\tt Makefile} it
+is to do.)
+
+\begin{itemize}
+
+\item {\tt gmake config} will create the default (uname) configuration
+
+\item {\tt gmake <config>-clean} cleans a configuration (rm -r *.o)
+
+\item {\tt gmake <config>-delete} deletes a configuration (rm -r build/<config>)
+
+\item {\tt gmake help} lists all make options
+
+\item {\tt gmake tags} creates a {\tt vi} style tags file
+
+\item {\tt gmake TAGS} creates an Emacs style TAGS file
+
+\item {\tt gmake distclean} nukes your build directory.
+
+\end{itemize}
+
+
+{\q Tom, this is for you}
+
+ b) Make methodology (dependencies,libraries, thorn make files
+ etc)
+
+ d) Configuration options
+
+ f) (New platforms??)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Running Cactus}
+
+ a) Command line options
+ b) Simple parameter file syntax (will be explained fully in thorn
+ writers part)
+ c) Description of standard parameters (although maybe should be an
+ appendix)
+ d) Checkpointing and outputting
+ e) Reference to web pages with machine dependant stuff
+ f) Understanding the screen output (RFR tree, errors and warnings etc)
+ g) Convergence mode
+ h) Environment variables
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Looking at output}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/doc/UsersGuide/UsersGuide_Part2.tex b/doc/UsersGuide/UsersGuide_Part2.tex
new file mode 100644
index 00000000..0ab76a3d
--- /dev/null
+++ b/doc/UsersGuide/UsersGuide_Part2.tex
@@ -0,0 +1,5 @@
+\part{Using Cactus}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/doc/UsersGuide/UsersGuide_Part3.tex b/doc/UsersGuide/UsersGuide_Part3.tex
new file mode 100644
index 00000000..c4354abb
--- /dev/null
+++ b/doc/UsersGuide/UsersGuide_Part3.tex
@@ -0,0 +1,206 @@
+\part{Application thorn writing}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Thorn concepts}
+
+ (This section has to contain enough explanation to make the rest of
+ the writers guide readable the first time through)
+(The hardest bugs to find are
+those arising from plausible but incorrect assumptions about the
+behavior of someone else's thorn.)
+ a) Again probably emphasize collaboration, what are thorns,
+ toolkits, how to share them.
+ b) Things to think about before you start programming:
+ Language, read all the documentation, emphasize use of
+ standard supported Cactus infrastructure
+ c) Available data types
+ i) Scalars
+ ii) Arrays and GFs
+ iii) Groups
+ d) Ghost zones and parallelism
+ e) Understanding the RFR concept
+ f) Understanding the GH concept
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Anatomy of a thorn}
+
+Each thorn must be in a toolkit. Toolkits are fairly informal. If you
+want, you can just make your own toolkit directory, and stick your new
+thorn into it.
+
+ a) Creating a thorn (gmake new thorn)
+ b) Thorn directory structure
+ c) Thorn make files
+ d) Thorn configuration
+ (i) Parameters (param.ccl)
+ (ii) Variables (interface.ccl)
+ (iii) Scheduler (schedule.ccl)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Putting code into your thorn}
+
+ a) What the flesh basically provides (header files, macros, ...)
+ b) Argument lists and parameters
+ c) A simple example (Baloney)
+ d) Differences between F and C with the interface
+ e) A more complex example (Wavetoy)
+ f) Error handling and code stopping
+ g) Calling C from F, F from C, (C++ from F? ....)
+ h) Good Cactus Style Programming Guidelines
+ i) Adding a test suite
+ j) Sharing your thorn with the world.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\appendix{Appendix}
+
+\chapter{Using GNATS}
+\chapter{Using CVS}
+\chapter{Using TAGS}
+ \section{TAGS with emacs}
+ \section{TAGS with vi}
+
+
+\chapter{Configuration file syntax}
+
+\section{General Concepts}
+
+Each thorn is configured by three compulsory files in the top level thorn
+directory:
+\begin{itemize}
+\item{} interface.ccl
+\item{} param.ccl
+\item{} schedule.ccl
+\end{itemize}
+
+\section{interface.ccl}
+
+The interface configuration file consists of a header block giving details
+of the thorns relationship with other thorns, and then a series of blocks
+listing the thorn's global variables.
+The header block has the form:
+{\t
+\begin{verbatim}
+implements: <implementation>
+[inherits: <implementation>, <implementation>]
+[friend: <implentation>, <implementation>]
+\end{verbatim}
+}
+where
+\begin{itemize}
+\item{} The implentation name must be unique among all thorns, unless ????.
+\item{} Inheriting from another implentation makes all that implentations public
+ variables and parameters available to your thorn. At least one thorn
+ providing any inherited implentation must be present at compile time.
+ A thorn cannot inherit from itself. Inheritance is associative, but not
+ commutative.
+\item{} Being a friend of another implementation makes all that implementations
+ protected and public (????)
+ variables and parameters available to your thorn. A friend is not required
+ for compilation. A thorn cannot be its own friend. Friendship is
+ associative and commutative.
+\end{itemize}
+
+The thorn's variables are defined by:
+{\t
+\begin{verbatim}
+[<access>:]
+
+VTYPE <group name> [TYPE=<gtype>] [DIM=<dim>]
+[{
+ <variable name>[,]<variable name>
+ <variable name>
+}]
+\end{verbatim}}
+
+\begin{itemize}
+\item{} {\t access} defines which thorns have can use the following
+ groups, and can be either {\t public}, {\t protected} or {\t private}.
+\item{} {\t VTYPE} defines the data type of the variables in the group.
+Supported data types are {\t LOGICAL}, {\t INTEGER}, {\t CHAR} and {\t REAL}.
+\item{} {\t group name} must be a alpha-numeric name which is unique
+within the scope of the thorn. A group name is compulsory.
+\item{} {\t TYPE} designates the kind of variables held by the group.
+The choices are {\t GF}, {\t ARRAY} or {\t SCALAR}. This field is
+optional, with the default variable type being {\t SCALAR}.
+\item{} {\t DIM} defines the spatial dimension if the group is of type
+{\t ARRAY} or {\t GF}, and can take the value {\t 1}, {\t 2}, or {\t 3}.
+The default value is {\t DIM=3}.
+\item{} The block following the group declaration line contains a list of
+ variables contained in the group. All variables in a group have
+ the same data type, variable type and dimension. The list can be
+ separated by spaces, commas, or new lines. The variable names
+ must be unique within the scope of the thorn.
+ A variable can only be a member of
+ one group. The block must be delimited by brackets on new lines.
+ If no block is given after a group declaration line, a
+ variable with the same name as the group is created.
+\end{itemize}
+
+\section{param.ccl}
+
+\section{schedule.ccl}
+
+The schedule configuration files consists of
+\begin{itemize}
+\item{} assignments to switch on storage and communications
+ for array variables at the start of program execution.
+\item{} {\it schedule blocks} which schedule a subroutine from the
+ thorn to be called at a specified time during program
+ executation. Statements within the schedule block can
+ be used to switch on storage and communication for groups
+ of variables during the duration that the subroutine is called.
+\item{} Conditional statements
+\end{itemize}
+
+{\it assignments statements} have the form:
+{\t
+\begin{verbatim}
+[STORAGE: <group>, <group>]
+[COMMUNICATION: <group>, <group>]
+\end{verbatim}
+}
+
+Each {\it schedule block} in the file {\t schedule.ccl} must have
+the syntax:
+{\t
+\begin{verbatim}
+schedule [<function name>] at <time>
+{
+ [LANG: <language>]
+ [STORAGE: <group>,<group>]
+ [COMMUNICATION: <group>,<group>]
+ [TRIGGER: <grid function>,<grid function>]
+}
+\end{verbatim}
+}
+
+Any schedule block or assignment statements can be optionally
+surrounded by conditional {\t if-elseif-else}
+constructs using the parameter data base. These can be nested,
+and have the general form:
+{\t
+\begin{verbatim}
+if (CCTK_Equals(<parameter>,<string>))
+{
+ [<assignments>]
+ [<schedule blocks>]
+}
+\end{verbatim}
+Conditional constructs cannot be used inside of a schedule block.
+
+
+\chapter{CCTK Parameters}
+\chapter{Thorn-Flesh Interface}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{document}