\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}

\newlength{\tableWidth} \newlength{\maxVarWidth} \newlength{\paraWidth} \newlength{\descWidth} \begin{document}

\title{ADMBase}
\author{Tom Goodale}
\date{$ $Date$ $}

\maketitle

% Do not delete next line
% START CACTUS THORNGUIDE

\begin{abstract}
Provides the basic ADM variables used in the $3+1$ formalism
\end{abstract}

\section{Purpose}

Thorn {\tt ADMBase} provides core infrastructure for thorns
implementing general relativity on a 3D grid in the $3+1$
formalism. It provides the basic variables (3-metric, extrinsic
curvature, lapse and shift vector) for the $3+1$ formalism, in
addition to a set of parameters to regulate the methods used for their
evolution. These variables are used to communicate between thorns
providing initial data, evolution methods and analysis routines for
the $3+1$ formalism. In addition, the variables can be used as a
mechanism to interact with alternative formalisms, as long as routines
can be written to transform alternative variables into these $3+1$
variables.


\section{Using ADMBase}

\subsection{3+1 Variables}

The variables provided by {\tt ADMBase} are:

\begin{itemize}
\item
The 3-metric tensor, $g_{ij}$

 {\tt gxx}, {\tt gxy}, {\tt gxz},{\tt gyy}, {\tt gyz},{\tt gzz}

\item The extrinsic curvature tensor, $K_{ij}$ 

{\tt kxx}, {\tt kxy}, {\tt kxz},{\tt kyy},{\tt kyz},{\tt kzz}

\item The lapse function, $\alpha$

 {\tt alp}

\item The (optional) shift vector $\beta^i$ 

{\tt betax}, {\tt betay},{\tt betaz}

\end{itemize}

By default the metric and extrinsic curvature tensors are assumed to
be {\it physical}, however these semantics can be changed by use of
the {\tt metric\_type} parameter. {\tt  ADMBase} provides the default value
of {\tt physical}, however another thorn can extend this parameter, 
for example to specify that the variables {\tt gxx} etc actually refer
to the {\it conformal} 3-metric.


\subsection{Initial Data}

Initial data for the $3+1$ variables is specified by the {\tt
initial\_data} (3-metric and extrinsic curvature), {\tt
initial\_lapse} (lapse), and {\tt initial\_shift} (shift) parameters.
By default, {\tt ADMBase} initialises the 3-metric and extrinsic
curvature to Minkowski and the lapse to one. Initial data thorns
override these defaults by extending the parameters. To see which
initial data sets are available in your executable run for example

{\tt
\begin{verbatim}
./cactus_<config> -o admbase::initial_data | grep Range
\end{verbatim}
}

The CactusEinstein arrangement includes thorns providing initial data
for various black hole combinations, perturbed black holes and linear
gravitational waves.

\subsection{Evolution Methods}

Analogous to specifying initial data, evolution methods are chosen by
the {\tt evolution\_method} (3-metric and extrinsic curvature), {\tt
lapse\_evolution\_method} (lapse), and {\tt shift\_evolution\_method}
(shift) parameters.  By default, {\tt ADMBase} does not evolve the
3-metric or extrinsic curvature, and holds the lapse and shift static.



\section{Programming With ADMBase}

\subsection{3+1 Variables}

It is highly recommended that all thorns which inherit from ADMBase
check the value of the {\tt metric\_type} parameter in a routine
scheduled at {\tt CCTK\_PARAMCHECK} and signal an error if the metric
type is not recognised. (See the source file {\tt ParamCheck.c} in any
of the thorns in the {\tt CactusEinstein} arrangement for examples of
this, and note that the {\tt PARAMCHECK} time bin is a good place to 
check for illegal/bad combinations of parameters, and also to inform
the user of any relevent details of the parameters she has chosen).

ADMBase allocates one timelevel of memory for all variables, except
the shift, which is only allocated if the {\tt initial\_shift}
parameter is set to a value other than `none'.  (`none' is the
default.)  The state of the shift storage is indicated by the {\tt
shift\_state} grid scalar.  This is 1 if there is storage for the
shift, and 0 otherwise.

The thorn provides, on request, initial data to set the metric and
extrinsic curvature to flat space in cartesian coordinates, to set the
initial lapse to one and the initial shift to zero.


\subsection{Initial Data} 

To include your initial data sets for the 3-metric, extrinsic
curvature, lapse and shift in the {\tt ADMBase} infrastructure, extend
the keyword parameters {\tt initial\_data}, {\tt initial\_lapse} and
{\tt initial\_shift}. For example, in the {\tt param.ccl} file of {\tt CactusEinstein/IDAnalyticBH},

{\tt
\begin{verbatim}
shares: ADMBase

EXTENDS KEYWORD initial_data 
{
  "schwarzschild"      :: "One Schwarzshild black hole"
  "bl_bh"              :: "Brill Lindquist black holes"
  "misner_bh"          :: "Misner black holes"
  "multiple_misner_bh" :: "Multiple Misner black holes"
  "kerr"	       :: "One Kerr black hole"	
} 
\end{verbatim}
}

{\tt ADMBase} also schedules two groups {\tt ADMBase\_InitialData} and
{\tt ADMBase\_InitialGauge} in this order at {\tt CCTK\_INITIAL}.
Initial data and initial gauge thorns should schedule their routines
to run in this group, for example

{\tt
\begin{verbatim}
if (CCTK_Equals(initial_data,"schwarzschild")) 
{ 	
   schedule Schwarzschild in ADMBase_InitialData
   {
     LANG: C
   } "Construct initial data for a single Schwarzschild black hole"
}
\end{verbatim}
}

{\tt ADMBase} also schedules a group {\tt ADMBase\_PostInitial} at
{\tt CCTK\_INITIAL} after both {\tt ADMBase\_InitialData} and {\tt
  ADMBase\_InitialGauge}.  This group is meant for thorns that modify
the initial data, such as e.g.\ adding noise to an exact solution.



\section{Shift Vector}

It is only relatively recently that numerical relativists have started
to use a shift vector in 3D calculations, and previously, to save
space, storage for the shift vector was not allocated. If the parameter
{\tt initial\_shift} is set to {\tt none}, {\tt ADMBase} does not allocate
storage for {\tt betax}, {\tt betay}, {\tt betaz} and sets the grid scalar
{\tt shift\_state} to 0. In all other cases the {\tt shift\_state} parameter
is set to 1. 

Thorns using the shift should always check that storage for the shift is
allocated before using it.

% Do not delete next line
% END CACTUS THORNGUIDE



\section{Parameters} 


\parskip = 0pt

\setlength{\tableWidth}{160mm}

\setlength{\paraWidth}{\tableWidth}
\setlength{\descWidth}{\tableWidth}
\settowidth{\maxVarWidth}{admbase\_boundary\_condition}

\addtolength{\paraWidth}{-\maxVarWidth}
\addtolength{\paraWidth}{-\columnsep}
\addtolength{\paraWidth}{-\columnsep}
\addtolength{\paraWidth}{-\columnsep}

\addtolength{\descWidth}{-\columnsep}
\addtolength{\descWidth}{-\columnsep}
\addtolength{\descWidth}{-\columnsep}
\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{admbase\_boundary\_condition} & {\bf Scope:} restricted & STRING \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Boundary condition for ADMBase variables}} \\
\hline{\bf Range} & &  {\bf Default:} flat \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering } & \multicolumn{2}{p{\paraWidth}|}{must be a registered boundary condition} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{dtlapse\_evolution\_method} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The dtlapse evolution method}} \\
\hline{\bf Range} & &  {\bf Default:} static \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering static} & \multicolumn{2}{p{\paraWidth}|}{dtlapse is not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-regrid} & \multicolumn{2}{p{\paraWidth}|}{dtlapse is not evolved and initial data is used to fill in new grid points after regridding} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-always} & \multicolumn{2}{p{\paraWidth}|}{dtlapse is not evolved and initial data is used to fill in new grid points before each step and after grid changes} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{dtshift\_evolution\_method} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The dtshift evolution method}} \\
\hline{\bf Range} & &  {\bf Default:} static \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering static} & \multicolumn{2}{p{\paraWidth}|}{dtshift is not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-regrid} & \multicolumn{2}{p{\paraWidth}|}{dtshift is not evolved and initial data is used to fill in new grid points after regridding} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-always} & \multicolumn{2}{p{\paraWidth}|}{dtshift is not evolved and initial data is used to fill in new grid points before each step and after grid changes} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{evolution\_method} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The metric an extrinsic curvature evolution method}} \\
\hline{\bf Range} & &  {\bf Default:} static \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{The metric and extrinsic curvature are not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering static} & \multicolumn{2}{p{\paraWidth}|}{The metric and extrinsic curvature are not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-regrid} & \multicolumn{2}{p{\paraWidth}|}{The metric and extrinsic curvature are not evolved and initial data is used to fill in new grid points after regridding} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-always} & \multicolumn{2}{p{\paraWidth}|}{The metric and extrinsic curvature are not evolved and initial data is used to fill in new grid points before each step and after grid changes} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{initial\_data} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Initial metric and extrinsic curvature datasets}} \\
\hline{\bf Range} & &  {\bf Default:} Cartesian Minkowski \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering Cartesian Minkowski} & \multicolumn{2}{p{\paraWidth}|}{Minkowski values in cartesian coordinates} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{initial\_dtlapse} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Initial dtlapse value}} \\
\hline{\bf Range} & &  {\bf Default:} none \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{Dtlapse is inactive} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering zero} & \multicolumn{2}{p{\paraWidth}|}{Dtlapse is zero} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{initial\_dtshift} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Initial dtshift value}} \\
\hline{\bf Range} & &  {\bf Default:} none \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{Dtshift is inactive} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering zero} & \multicolumn{2}{p{\paraWidth}|}{Dtshift is zero} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{initial\_lapse} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Initial lapse value}} \\
\hline{\bf Range} & &  {\bf Default:} one \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering one} & \multicolumn{2}{p{\paraWidth}|}{Uniform lapse} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{initial\_shift} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Initial shift value}} \\
\hline{\bf Range} & &  {\bf Default:} zero \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{Shift is inactive} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering zero} & \multicolumn{2}{p{\paraWidth}|}{Shift is zero} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{lapse\_evolution\_method} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The lapse evolution method}} \\
\hline{\bf Range} & &  {\bf Default:} static \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering static} & \multicolumn{2}{p{\paraWidth}|}{lapse is not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-regrid} & \multicolumn{2}{p{\paraWidth}|}{lapse is not evolved and initial data is used to fill in new grid points after regridding} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-always} & \multicolumn{2}{p{\paraWidth}|}{lapse is not evolved and initial data is used to fill in new grid points before each step and after grid changes} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{lapse\_prolongation\_type} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The kind of boundary prolongation for the lapse}} \\
\hline{\bf Range} & &  {\bf Default:} Lagrange \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering Lagrange} & \multicolumn{2}{p{\paraWidth}|}{standard prolongation (requires several time levels)} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{no prolongation (use this if you do not have enough time levels active)} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{lapse\_timelevels} & {\bf Scope:} restricted & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Number of time levels for the lapse}} \\
\hline{\bf Range} & &  {\bf Default:} 1 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:3} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{metric\_prolongation\_type} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The kind of boundary prolongation for the metric and extrinsic curvature}} \\
\hline{\bf Range} & &  {\bf Default:} Lagrange \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering Lagrange} & \multicolumn{2}{p{\paraWidth}|}{standard prolongation (requires several time levels)} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{no prolongation (use this if you do not have enough time levels active)} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{metric\_timelevels} & {\bf Scope:} restricted & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Number of time levels for the metric and extrinsic curvature}} \\
\hline{\bf Range} & &  {\bf Default:} 1 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:3} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{metric\_type} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The semantics of the metric variables (physical, static conformal, etc)}} \\
\hline{\bf Range} & &  {\bf Default:} physical \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering physical} & \multicolumn{2}{p{\paraWidth}|}{metric and extrinsic curvature are the physical ones} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{shift\_evolution\_method} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The shift evolution method}} \\
\hline{\bf Range} & &  {\bf Default:} static \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering static} & \multicolumn{2}{p{\paraWidth}|}{shift is not evolved} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-regrid} & \multicolumn{2}{p{\paraWidth}|}{shift is not evolved and initial data is used to fill in new grid points after regridding} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering ID-apply-always} & \multicolumn{2}{p{\paraWidth}|}{shift is not evolved and initial data is used to fill in new grid points before each step and after grid changes} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{shift\_prolongation\_type} & {\bf Scope:} restricted & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em The kind of boundary prolongation for the shift}} \\
\hline{\bf Range} & &  {\bf Default:} Lagrange \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering Lagrange} & \multicolumn{2}{p{\paraWidth}|}{standard prolongation (requires several time levels)} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering none} & \multicolumn{2}{p{\paraWidth}|}{no prolongation (use this if you do not have enough time levels active)} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{shift\_timelevels} & {\bf Scope:} restricted & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em Number of time levels for the shift}} \\
\hline{\bf Range} & &  {\bf Default:} 1 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:3} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\parskip = 10pt 

\section{Interfaces} 


\parskip = 0pt

\vspace{3mm} \subsection*{General}

\noindent {\bf Implements}: 

admbase
\vspace{2mm}

\noindent {\bf Inherits}: 

grid
\vspace{2mm}
\subsection*{Grid Variables}
\vspace{5mm}\subsubsection{PUBLIC GROUPS}

\vspace{5mm}

\begin{tabular*}{150mm}{|c|c@{\extracolsep{\fill}}|rl|} \hline 
~ {\bf Group Names} ~ & ~ {\bf Variable Names} ~  &{\bf Details} ~ & ~\\ 
\hline 
shift\_state & shift\_state & compact & 0 \\ 
 &  & description & state of storage for shift \\ 
 &  & dimensions & 0 \\ 
 &  & distribution & CONSTANT \\ 
 &  & group type & SCALAR \\ 
 &  & timelevels & 1 \\ 
 &  & variable type & INT \\ 
\hline 
dtlapse\_state & dtlapse\_state & compact & 0 \\ 
 &  & description & state of storage for dtlapse \\ 
 &  & dimensions & 0 \\ 
 &  & distribution & CONSTANT \\ 
 &  & group type & SCALAR \\ 
 &  & timelevels & 1 \\ 
 &  & variable type & INT \\ 
\hline 
dtshift\_state & dtshift\_state & compact & 0 \\ 
 &  & description & state of storage for dtshift \\ 
 &  & dimensions & 0 \\ 
 &  & distribution & CONSTANT \\ 
 &  & group type & SCALAR \\ 
 &  & timelevels & 1 \\ 
 &  & variable type & INT \\ 
\hline 
metric &  & compact & 0 \\ 
 & gxx & description & ADM 3-metric g\_ij \\ 
 & gxy & dimensions & 3 \\ 
 & gxz & distribution & DEFAULT \\ 
 & gyy & group type & GF \\ 
 & gyz & tags & tensortypealias="DD\_sym" ProlongationParameter="ADMBase::metric\_prolongation\_type" \\ 
 & gzz & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
curv &  & compact & 0 \\ 
 & kxx & description & ADM extrinsic curvature K\_ij \\ 
 & kxy & dimensions & 3 \\ 
 & kxz & distribution & DEFAULT \\ 
 & kyy & group type & GF \\ 
 & kyz & tags & tensortypealias="DD\_sym" ProlongationParameter="ADMBase::metric\_prolongation\_type" \\ 
 & kzz & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
lapse &  & compact & 0 \\ 
 & alp & description & ADM lapse function alpha \\ 
 &  & dimensions & 3 \\ 
 &  & distribution & DEFAULT \\ 
 &  & group type & GF \\ 
 &  & tags & tensortypealias="Scalar" ProlongationParameter="ADMBase::lapse\_prolongation\_type" \\ 
 &  & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
\end{tabular*} 



\vspace{5mm}
\vspace{5mm}

\begin{tabular*}{150mm}{|c|c@{\extracolsep{\fill}}|rl|} \hline 
~ {\bf Group Names} ~ & ~ {\bf Variable Names} ~  &{\bf Details} ~ & ~ \\ 
\hline 
shift &  & compact & 0 \\ 
 & betax & description & ADM shift function beta\^i \\ 
 & betay & dimensions & 3 \\ 
 & betaz & distribution & DEFAULT \\ 
 &  & group type & GF \\ 
 &  & tags & tensortypealias="U" ProlongationParameter="ADMBase::shift\_prolongation\_type" \\ 
 &  & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
dtlapse &  & compact & 0 \\ 
 & dtalp & description & Time derivative of ADM lapse function alpha \\ 
 &  & dimensions & 3 \\ 
 &  & distribution & DEFAULT \\ 
 &  & group type & GF \\ 
 &  & tags & tensortypealias="Scalar" ProlongationParameter="ADMBase::lapse\_prolongation\_type" \\ 
 &  & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
dtshift &  & compact & 0 \\ 
 & dtbetax & description & Time derivative of ADM shift function beta\^i \\ 
 & dtbetay & dimensions & 3 \\ 
 & dtbetaz & distribution & DEFAULT \\ 
 &  & group type & GF \\ 
 &  & tags & tensortypealias="U" ProlongationParameter="ADMBase::shift\_prolongation\_type" \\ 
 &  & timelevels & 3 \\ 
 &  & variable type & REAL \\ 
\hline 
\end{tabular*} 



\vspace{5mm}

\noindent {\bf Uses header}: 

Symmetry.h
\vspace{2mm}\parskip = 10pt 

\section{Schedule} 


\parskip = 0pt


\noindent This section lists all the variables which are assigned storage by thorn EinsteinBase/ADMBase.  Storage can either last for the duration of the run ({\bf Always} means that if this thorn is activated storage will be assigned, {\bf Conditional} means that if this thorn is activated storage will be assigned for the duration of the run if some condition is met), or can be turned on for the duration of a schedule function.


\subsection*{Storage}

\hspace{5mm}

 \begin{tabular*}{160mm}{ll} 

{\bf Always:}& {\bf Conditional:} \\ 
 shift\_state dtlapse\_state dtshift\_state &  shift[shift\_timelevels]\\ 
 lapse[lapse\_timelevels] &  dtlapse[lapse\_timelevels]\\ 
 metric[metric\_timelevels] curv[metric\_timelevels] &  dtshift[shift\_timelevels]\\ 
~ & ~\\ 
\end{tabular*} 


\subsection*{Scheduled Functions}
\vspace{5mm}

\noindent {\bf CCTK\_PARAMCHECK}   (conditional) 

\hspace{5mm} admbase\_paramcheck 

\hspace{5mm}{\it check consistency of parameters } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Options:  & global \\ 
~ & Type:  & function \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_INITIAL}   (conditional) 

\hspace{5mm} admbase\_initialdata 

\hspace{5mm}{\it schedule group for calculating adm initial data } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setdtshiftstateon 

\hspace{5mm}{\it set the dtshift\_state variable to 1 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtshift\_state(everywhere) \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setdtshiftstateoff 

\hspace{5mm}{\it set the dtshift\_state variable to 0 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtshift\_state(everywhere) \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf ADMBase\_InitialGauge}   (conditional) 

\hspace{5mm} admbase\_shiftzero 

\hspace{5mm}{\it set the shift to 0 at all points } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::shift(everywhere) \\ 
~& ~ &admbase::shift\_p(everywhere)\\ 
~& ~ &admbase::shift\_p\_p(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf ADMBase\_InitialGauge}   (conditional) 

\hspace{5mm} admbase\_dtlapsezero 

\hspace{5mm}{\it set the dtlapse to 0 at all points } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtalp(everywhere) \\ 
~& ~ &dtalp\_p(everywhere)\\ 
~& ~ &dtalp\_p\_p(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf ADMBase\_InitialGauge}   (conditional) 

\hspace{5mm} admbase\_dtshiftzero 

\hspace{5mm}{\it set the dtshift to 0 at all points } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtshift(everywhere) \\ 
~& ~ &admbase::dtshift\_p(everywhere)\\ 
~& ~ &admbase::dtshift\_p\_p(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_PRESTEP}   (conditional) 

\hspace{5mm} admbase\_lapsestatic 

\hspace{5mm}{\it copy the lapse to the current time level } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Reads:  & admbase::alp\_p(everywhere) \\ 
~& ~ &admbase::dtalp\_p(everywhere)\\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::alp(everywhere) \\ 
~& ~ &admbase::dtalp(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_PRESTEP}   (conditional) 

\hspace{5mm} admbase\_shiftstatic 

\hspace{5mm}{\it copy the shift to the current time level } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Reads:  & admbase::shift\_p(everywhere) \\ 
~& ~ &admbase::dtshift\_p(everywhere)\\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::shift(everywhere) \\ 
~& ~ &admbase::dtshift(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_PRESTEP}   (conditional) 

\hspace{5mm} admbase\_static 

\hspace{5mm}{\it copy the metric and extrinsic curvature to the current time level } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Reads:  & admbase::curv\_p(everywhere) \\ 
~& ~ &admbase::metric\_p(everywhere)\\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::curv(everywhere) \\ 
~& ~ &admbase::metric(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_WRAGH}   (conditional) 

\hspace{5mm} einstein\_initsymbound 

\hspace{5mm}{\it set up gf symmetries } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Options:  & global \\ 
~ & Type:  & function \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf MoL\_PostStep}   (conditional) 

\hspace{5mm} admbase\_boundaries 

\hspace{5mm}{\it select admbase boundary conditions - may be required for mesh refinement } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Before:  & admbase\_setadmvars \\ 
~ & Language:  & c \\ 
~ & Options:  & level \\ 
~ & Sync:  & lapse \\ 
~& ~ &dtlapse\\ 
~& ~ &shift\\ 
~& ~ &dtshift\\ 
~& ~ &metric\\ 
~& ~ &curv\\ 
~ & Type:  & function \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_INITIAL}   (conditional) 

\hspace{5mm} admbase\_initialgauge 

\hspace{5mm}{\it schedule group for the adm initial gauge condition } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & After:  & admbase\_initialdata \\ 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf MoL\_PostStep}   (conditional) 

\hspace{5mm} applybcs 

\hspace{5mm}{\it apply the boundary conditions of admbase } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & After:  & admbase\_boundaries \\ 
~ & Before:  & admbase\_setadmvars \\ 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_POSTREGRID}   (conditional) 

\hspace{5mm} admbase\_initialdata 

\hspace{5mm}{\it schedule group for calculating adm initial data } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_POSTREGRIDINITIAL}   (conditional) 

\hspace{5mm} admbase\_initialdata 

\hspace{5mm}{\it schedule group for calculating adm initial data } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_POSTREGRID}   (conditional) 

\hspace{5mm} admbase\_initialgauge 

\hspace{5mm}{\it schedule group for the adm initial gauge condition } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & After:  & admbase\_initialdata \\ 
~ & Before:  & mol\_poststep \\ 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_POSTREGRIDINITIAL}   (conditional) 

\hspace{5mm} admbase\_initialgauge 

\hspace{5mm}{\it schedule group for the adm initial gauge condition } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & After:  & admbase\_initialdata \\ 
~ & Before:  & mol\_poststep \\ 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf MoL\_PostStep} 

\hspace{5mm} admbase\_setadmvars 

\hspace{5mm}{\it set the adm variables before this group, and use them afterwards } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf MoL\_PseudoEvolution} 

\hspace{5mm} admbase\_setadmvars 

\hspace{5mm}{\it set the adm variables before this group, and use them afterwards } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_INITIAL}   (conditional) 

\hspace{5mm} admbase\_postinitial 

\hspace{5mm}{\it schedule group for modifying the adm initial data, such as e.g. adding noise } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & After:  & admbase\_initialdata \\ 
~& ~ &admbase\_initialgauge\\ 
~ & Type:  & group \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf ADMBase\_InitialData}   (conditional) 

\hspace{5mm} admbase\_cartesianminkowski 

\hspace{5mm}{\it set the metric and extrinsic curvature to cartesian minkowski values } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::curv(everywhere) \\ 
~& ~ &admbase::metric(everywhere)\\ 
~& ~ &admbase::metric\_p(everywhere)\\ 
~& ~ &admbase::metric\_p\_p(everywhere)\\ 
~& ~ &admbase::curv\_p(everywhere)\\ 
~& ~ &admbase::curv\_p\_p(everywhere)\\ 
~& ~ &admbase::alp(everywhere)\\ 
~& ~ &admbase::shift(everywhere)\\ 
~& ~ &admbase::dtalp(everywhere)\\ 
~& ~ &admbase::dtshift(everywhere)\\ 
~& ~ &admbase::shift\_state(everywhere)\\ 
~& ~ &admbase::dtlapse\_state(everywhere)\\ 
~& ~ &admbase::dtshift\_state(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf ADMBase\_InitialGauge}   (conditional) 

\hspace{5mm} admbase\_lapseone 

\hspace{5mm}{\it set the lapse to 1 at all points } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::alp(everywhere) \\ 
~& ~ &admbase::alp\_p(everywhere)\\ 
~& ~ &admbase::alp\_p\_p(everywhere)\\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setshiftstateon 

\hspace{5mm}{\it set the shift\_state variable to 1 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::shift\_state(everywhere) \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setshiftstateoff 

\hspace{5mm}{\it set the shift\_state variable to 0 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::shift\_state(everywhere) \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setdtlapsestateon 

\hspace{5mm}{\it set the dtlapse\_state variable to 1 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtlapse\_state(everywhere) \\ 
\end{tabular*} 


\vspace{5mm}

\noindent {\bf CCTK\_BASEGRID}   (conditional) 

\hspace{5mm} admbase\_setdtlapsestateoff 

\hspace{5mm}{\it set the dtlapse\_state variable to 0 } 


\hspace{5mm}

 \begin{tabular*}{160mm}{cll} 
~ & Language:  & c \\ 
~ & Type:  & function \\ 
~ & Writes:  & admbase::dtlapse\_state(everywhere) \\ 
\end{tabular*} 


\subsection*{Aliased Functions}

\hspace{5mm}

 \begin{tabular*}{160mm}{ll} 

{\bf Alias Name:} ~~~~~~~ & {\bf Function Name:} \\ 
ApplyBCs & ADMBase\_ApplyBCs \\ 
\end{tabular*} 



\vspace{5mm}\parskip = 10pt 
\end{document}
