aboutsummaryrefslogtreecommitdiff
path: root/doc/documentation.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/documentation.tex')
-rw-r--r--doc/documentation.tex408
1 files changed, 408 insertions, 0 deletions
diff --git a/doc/documentation.tex b/doc/documentation.tex
new file mode 100644
index 0000000..b69e31e
--- /dev/null
+++ b/doc/documentation.tex
@@ -0,0 +1,408 @@
+% *======================================================================*
+% Cactus Thorn template for ThornGuide documentation
+% Author: Ian Kelley
+% Date: Sun Jun 02, 2002
+% $Header$
+% Thorn documentation in the latex file doc/documentation.tex
+% will be included in ThornGuides built with the Cactus make system.
+% The scripts employed by the make system automatically include
+% pages about variables, parameters and scheduling parsed from the
+% relevent thorn CCL files.
+%
+% This template contains guidelines which help to assure that your
+% documentation will be correctly added to ThornGuides. More
+% information is available in the Cactus UsersGuide.
+%
+% Guidelines:
+% - Do not change anything before the line
+% % BEGIN CACTUS THORNGUIDE",
+% except for filling in the title, author, date etc. fields.
+% - Each of these fields should only be on ONE line.
+% - Author names should be sparated with a \\ or a comma
+% - You can define your own macros are OK, but they must appear after
+% the BEGIN CACTUS THORNGUIDE line, and must not redefine standard
+% latex commands.
+% - To avoid name clashes with other thorns, 'labels', 'citations',
+% 'references', and 'image' names should conform to the following
+% convention:
+% ARRANGEMENT_THORN_LABEL
+% For example, an image wave.eps in the arrangement CactusWave and
+% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps
+% - Graphics should only be included using the graphix package.
+% More specifically, with the "includegraphics" command. Do
+% not specify any graphic file extensions in your .tex file. This
+% will allow us (later) to create a PDF version of the ThornGuide
+% via pdflatex. |
+% - References should be included with the latex "bibitem" command.
+% - use \begin{abstract}...\end{abstract} instead of \abstract{...}
+% - For the benefit of our Perl scripts, and for future extensions,
+% please use simple latex.
+%
+% *======================================================================*
+%
+% Example of including a graphic image:
+% \begin{figure}[ht]
+% \begin{center}
+% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure}
+% \end{center}
+% \caption{Illustration of this and that}
+% \label{MyArrangement_MyThorn_MyLabel}
+% \end{figure}
+%
+% Example of using a label:
+% \label{MyArrangement_MyThorn_MyLabel}
+%
+% Example of a citation:
+% \cite{MyArrangement_MyThorn_Author99}
+%
+% Example of including a reference
+% \bibitem{MyArrangement_MyThorn_Author99}
+% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999),
+% 1--16. {\tt http://www.nowhere.com/}}
+%
+% *======================================================================*
+
+% If you are using CVS use this line to give version information
+% $Header$
+
+\documentclass{article}
+
+% Use the Cactus ThornGuide style file
+% (Automatically used from Cactus distribution, if you have a
+% thorn without the Cactus Flesh download this from the Cactus
+% homepage at www.cactuscode.org)
+\usepackage{../../../../doc/latex/cactus}
+
+\begin{document}
+
+% The author of the documentation
+\author{Cactus Maintainers $<$\code{cactusmaint@cactuscode.org}$>$}
+
+% The title of the document (not necessarily the name of the Thorn)
+\title{Coordinate Base Thorn}
+
+% the date your document was last changed:
+\date{$ $Date$ $}
+
+\maketitle
+
+% Do not delete next line
+% START CACTUS THORNGUIDE
+
+% Add all definitions used in this documentation here:
+\def\WHAGH{CCTK\_WHAGH}
+\def\beforetable{\\[1mm]}
+
+\hyphenation{Coord}
+
+% Add an abstract for this thorn's documentation
+\begin{abstract}
+CoordBase provides a mechanism for registering coordinate systems, and
+maintaining a database of coordinate systems and their coordinates,
+using key-value tables.
+\end{abstract}
+
+
+\section{Introduction}
+
+Many applications which use Cactus will want to make use of coordinate
+systems. The CoordBase thorn provides a method of registering
+coordinate systems and their properties. Thorns which implement
+coordinate systems will register the systems they provide with
+CoordBase. Since coordinate systems are composed of a collection of
+coordinates, the coordinates which comprise the systems are registered
+with CoordBase as well. The data describing coordinate systems are
+held on Cactus key-value tables. A schema for the format of these
+tables is provided in section
+\ref{CactusBase_CoordBase_coordinate_schema}. Developers are free to
+compose and use their own schema, but are encouraged to use the one
+detailed here, as this will be the standard for all of the core Cactus
+thorns.
+
+CoordBase specifies an extensible set of coordinate properties. The
+use of key-value tables to hold the these properties makes CoordBase
+flexible and configurable. The coordinate values themselves can be
+specified in a number of ways, depending on the nature of the
+coordinate system. This way symmetries of the coordinates on the
+computational grid can be exploited to minimize memory consumption.
+Via a function call, one can easily acertain what coordinate system is
+associated with any given grid variable, which is convenient for e.g.\
+I/O. A method of registering default coordinates for all grid
+variables of a certain dimension makes it simple to specify which
+coordinate systems should be associated with which grid variables.
+
+The coordinate infrastructure provided by CoordBase will work
+seamlessly with AMR and multi-model codes.
+
+%extensible database of coordinate systems, coordinates, and their
+%properties
+
+Thorns which provide coordinates will inherit from CoordBase, and
+register both the coordinate systems they provide, and the default
+coordinate systems for the appropriate dimension of grid variables.
+In addition, one can associate a coordinate with any Cactus grid
+variable, within a thorn's interface.ccl.
+Coordinate systems specified in the interface.ccl override defaults
+for the dimension.
+
+The coordinate functions in the Cactus flesh are deprecated with the
+introduction of this thorn. Please use the functions provided here in
+preference to those in the flesh.
+
+
+\section{Coordinate system symmetries}
+
+Since computations performed with Cactus are done on a discrete
+lattice, only a discrete set of coordinate values are used for any
+coordinate system. The symmetries of how the coordinate values vary
+on the grid points make coordinates fall into three types:
+\emph{uniform}, \emph{nonuniform}, and \emph{warped}. (At least these
+are the three cases that the CoordBase schema considers.) A uniform
+coordinate varies from each of its neighbors by a constant. i.e.\ its
+value can be determined from the index of the grid point from simply
+an origin and constant `delta'. A nonuniform coordinate has a
+spatially varying `delta'. For both uniform and nonuniform
+coordinates, the coordinate values do not vary along the other
+directions of the grid. (e.g.\ the $x$ coordinate will be the same
+regardless of the `j' index of the grid point.) Thus one could
+completely determine the coordinate values of a 3D system of
+nonuniform coordinates by providing three 1D arrays. This later
+assumption is relaxed for a warped coordinate; a warped coordinate
+will vary across the entire grid. Recall that `coordinate lines'
+(lines of constant coordinate value) cannot cross (because one n-tuple
+of coordinate values would specify muliple points in space), so this
+places a `bound' of sorts on the possible `warping' of the
+coordinates.
+
+The type of a coordinate system will be the same as that of its
+coordinates. If there are different types of coordinates within the
+same system, then the coordinate system is \emph{mixed}. Note that a
+warped coordinate system is the most general possible, so any
+coordinate system could be regarded as warped if one wishes.
+
+\subsection{Specifying coordinate values}
+
+As mentioned above, for a uniform coordinate system, it is sufficient
+to specify the origin and spacing for a uniform coordinate. One may
+also specify a grid variable to hold the coordinate values, if
+desired. See section \ref{CactusBase_CoordBase_coordinate_schema}. A
+nonuniform coordinate can be specified with a 1D grid variable, if
+desired, or an nD variable. A warped coordinate system will always
+need a nD grid variable. FMR and AMR will need an nD grid
+variable to specify the coordinate values. A mixed coordinate system
+can use some combination of the above, or simply an nD grid variable.
+
+
+\section{Coordinate Thorns}
+
+Generally coordinate thorns will allow the declaration of default
+coordinate systems for a dimension to be controled by parameters.
+
+If a thorn attempts to register a default for a dimension which
+already has a default registered, a level 1 warning will result, and
+the default will be overwritten with the new default. Since the order
+of execution of the registration calls will in general not be
+specified, one must be careful when activating more than one coordinate thorn.
+
+Coordinate systems and defaults can be changed at any time throughout
+a run, as can coordinate properties.
+In general these are set at \WHAGH\ and CCTK\_BASEGRID, respectively.
+
+The coordinate thorns are responsible for filling out the portions of
+the coordinate and coordinate system tables that are not written by
+the registration routines. See sections
+\ref{CactusBase_CoordBase_system_tables} and
+\ref{CactusBase_CoordBase_coord_tables}.
+
+\section{Application thorns}
+
+Application thorns should check at CCTK\_PARAMCHECK to see if the correct
+coordinate system is being used for each relevant grid variable.
+While the old flesh API is still being used you may want to make this
+merely a warning.
+Use Coord\_GroupSystem() to find the coordinate system for groups (see
+section \ref{CactusBase_CoordBase_APIs}).
+
+
+\section{Coordinate APIs}
+\label{CactusBase_CoordBase_APIs}
+
+\begin{verbatim}
+int systemhandle = Coord_SystemRegister(const cGH *GH,
+ int dim,
+ const char *systemname)
+\end{verbatim}
+registers a coordinate system, along with its
+dimension, with the CoordBase thorn. This will create a coordinate
+system table, and return the handle of the table for success, or a
+negative error code upon error. The possible errors are:\beforetable
+\begin{tabular}{ll}
+COORDERROR\_INVALIDDIM & invalid dimension passed in\\
+COORDERROR\_INVALIDNAME & invalid name passed in\\
+COORDERROR\_TABLEERROR & error from key-value or hash tables in flesh\\
+COORDERROR\_SYSTEMEXISTS & coordinate system of this name already exists\\
+\end{tabular}
+\\These error codes are defined in CoordBase.h. CoordBase holds the
+table handles on a GH extension, under the name ``CoordBase''.
+
+\begin{verbatim}
+int systemhandle = Coord_SystemHandle(const cGH *GH,
+ const char *systemname)
+\end{verbatim}
+returns the handle for a given coordinate system, or
+negative on error:\beforetable
+\begin{tabular}{ll}
+ COORDERROR\_TABLEERROR & error from hash table\\
+ COORDERROR\_NOSYSTEM & no coordinate system of this name is registered\\
+\end{tabular}
+
+\begin{verbatim}
+int coordhandle = Coord_CoordRegister(const cGH *GH,
+ int systemhandle,
+ int direction,
+ const char *coordname)
+\end{verbatim}
+registers a coordinate within a coordinate system, in the specified
+`direction'. (Direction in this context means the index in the
+coordinate basis, which ranges from 1 to the dimension of the system.)
+Coord\_CoordRegister() returns the coordinate handle, or negative for an
+error:\beforetable
+\begin{tabular}{ll}
+COORDERROR\_INVALIDDIM & invalid `direction'\\
+COORDERROR\_INVALIDHANDLE & invalid handle passed in / coordinate system
+ does not exist\\
+COORDERROR\_TABLEERROR & error from hash or key-value tables in flesh\\
+COORDERROR\_COORDINATEEXISTS & coordinate already exists for this `direction'\\
+COORDERROR\_DUPLICATENAME & coordinate of this name already exists in this
+ system\\
+\end{tabular}
+
+\begin{verbatim}
+int coordhandle = Coord_CoordHandle(const cGH *GH,
+ const char *coordname,
+ const char *systemname)
+\end{verbatim}
+returns the coordinate handle for a given coordinatate in a coordinate system,
+or negative on error:\beforetable
+\begin{tabular}{ll}
+COORDERROR\_NOSYSTEM & no coordinate system of this name is registered\\
+COORDERROR\_TABLEERROR & error from hash table\\
+COORDERROR\_NOSUCHCOORD & no coordinate of the name is registered for this
+ system\\
+\end{tabular}
+
+\begin{verbatim}
+int systemhandle = Coord_GroupSystem(const cGH *GH,
+ const char *groupname)
+\end{verbatim}
+returns the handle for the coordinate system associated with a group of grid
+variables, or negative on error.
+This can either be the default for coordinate systems of this
+dimension, or the coordinate system that is specified in the
+interface.ccl. Coordinate systems specified in interface.ccl will
+override any defaults. The possible error codes are:\beforetable
+\begin{tabular}{ll}
+COORDERROR\_INVALIDGROUPNAME & no such group exists\\
+COORDERROR\_NOCOORDSYS & no coordinate system is associated with the
+ group
+\end{tabular}
+
+\begin{verbatim}
+int systemhandle = Coord_SetDefaultSystem(const cGH *GH,
+ const char *systemname)
+\end{verbatim}
+sets this coordinate system to be the default for grid variables of
+the same dimension. It returns the handle of the system, or negative
+for errors:\beforetable
+\begin{tabular}{ll}
+COORDERROR\_INVALIDNAME & no coordinate system of this name has been
+ registered\\
+COORDERROR\_NODIMENSION & coordinate system does not have a valid dimension\\
+COORDERROR\_DEFAULTEXISTS & grid variables of this dimension already have a \\
+ & default coordinate system registered\\
+\end{tabular}
+\\There can be a default coordinate system for each grid dimension. The
+default system will apply for each grid variable of that dimension,
+unless it is overridden.
+
+
+\section{Coordinate Schema}
+\label{CactusBase_CoordBase_coordinate_schema}
+
+\subsection{Coordinate System Tables}
+\label{CactusBase_CoordBase_system_tables}
+
+Associated with each coordinate system is a table, which should have the
+following entries:\beforetable
+\begin{tabular}{|l|l|l|}
+\hline
+\textbf{key} & \textbf{data type} & \textbf{value}\\
+\hline
+NAME & CCTK\_STRING & \code{Cart3d|Spher3d|....}\\
+DIMENSION & CCTK\_INT & \code{1,2,3,...}\\
+TYPE & CCTK\_STRING & \code{uniform|nonuniform|warped|mixed}\\
+COORDINATES & CCTK\_INT array & \verb|<coord1>,...<coord_dimension>|\\
+\hline
+\end{tabular}
+\\The values for the coordinates array are the handles for the
+coordinate tables (see section
+\ref{CactusBase_CoordBase_coord_tables}). The NAME and DIMENSION
+fields are filled out when Coord\_SystemRegister() is called. The
+COORDINATES field is filled out by Coord\_CoordRegister(). It is left
+for the coordinate thorn to fill out the TYPE field.
+
+\subsection{Coordinate Tables}
+\label{CactusBase_CoordBase_coord_tables}
+
+Associated with each coordinate of each coordinate system is another
+table, which should have the following entries:\beforetable
+\begin{tabular}{|l|l|l|}
+\hline
+\textbf{key} & \textbf{data type} & \textbf{values}\\
+\hline
+SYSTEM & CCTK\_INT & \verb|<handle>|\\
+NAME & CCTK\_STRING & \code{x}\\
+DIRECTION & CCTK\_INT & \code{2}\\
+PHYSICALMIN & CCTK\_REAL & \code{0.0}\\
+COMPMIN & CCTK\_REAL & \\
+PHYSICALMAX & CCTK\_REAL & \\
+COMPMAX & CCTK\_REAL & \\
+TYPE & CCTK\_STRING & \verb/uniform|non-uniform|warped/\\
+TIMEDEPENDENT & CCTK\_INT & \verb/<yes (1)|no (0)>/\\
+DATATYPE & CCTK\_STRING & \\
+GAINDEX & CCTK\_INT & \\
+\hline
+DELTA\footnotemark %{only for type=uniform}
+ & CCTK\_REAL & \code{147.372e16}\\
+\hline
+\end{tabular}
+\footnotetext{only for type=\code{uniform}}
+\\
+Coord\_CoordRegister() fills out the SYSTEM, NAME, and DIRECTION
+fields, and the COORDINATES field of the system table. The remaining
+fields are the responsivility of the coordinate thorn.
+
+% Each of these fields should be explained...
+% Though most are pretty self-explanatory.
+
+
+\section{Specifying coordinate systems in the interface.ccl}
+
+Coordinate systems associated with grid variable groups can be
+specified in the group's tags table, using the key \code{COORDSYSTEM}.
+Below is a grid array which could represent a vector field on a
+2-sphere.
+\begin{verbatim}
+CCTK_REAL SphericalVectorField TYPE=ARRAY DIM=2 TAGS='COORDSYSTEM="sphere2d" TENSORTYPE="vector"'
+{
+ field_theta, field_phi
+}
+\end{verbatim}
+Even though another thorn has set a default for all 2D grid variables
+to something else, Coord\_GroupSystem() will always return the handle
+for sphere2d when called on this group.
+
+% Do not delete next line
+% END CACTUS THORNGUIDE
+
+\end{document}