% *======================================================================*
%  Cactus Thorn template for ThornGuide documentation
%  Author: Ian Kelley
%  Date: Sun Jun 02, 2002
%  $Header: /cactusdevcvs/Cactus/doc/ThornGuide/template.tex,v 1.12 2004/01/07 20:12:39 rideout Exp $
%
%  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
%  relevant 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
%       % START 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 separated with a \\ or a comma.
%   - You can define your own macros, but they must appear after
%     the START 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 graphicx package.
%     More specifically, with the "\includegraphics" command.  Do
%     not specify any graphic file extensions in your .tex file. This
%     will allow us 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{...}
%   - Do not use \appendix, instead include any appendices you need as
%     standard sections.
%   - 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]{/home/runner/work/tests/tests/arrangements/PITTNullCode/SphericalHarmonicDecomp/doc/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: /cactusdevcvs/Cactus/doc/ThornGuide/template.tex,v 1.12 2004/01/07 20:12:39 rideout Exp $

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

% The author of the documentation
\author{Yosef Zlochower \textless yosef@astro.rit.edu\textgreater}

% The title of the document (not necessarily the name of the Thorn)
\title{SphericalHarmonicDecomp}

% the date your document was last changed, if your document is in CVS,
% please use:
%    \date{$ $Date: 2004/01/07 20:12:39 $ $}
\date{November 12 2008}

\maketitle

% Do not delete next line
% START CACTUS THORNGUIDE

% Add all definitions used in this documentation here
%   \def\mydef etc

% Add an abstract for this thorn's documentation
\begin{abstract}
  This thorns provides a mechanism to decompose grid functions in terms
of Spin Weighted spherical harmonics of arbitrary spin. This thorn will
also decompose the ADM metric on spherical shells for use in a subsequent
CCE null evolution.

\end{abstract}

% The following sections are suggestive only.
% Remove them or add your own.

\section{Introduction}
  The idea behind this thorn was to decompose GFs on 2D spheres and
3D spherical shells in terms of spin-weighted spherical harmonics
and Chebyshev or Legendre polynomials in radius. This was used for
waveform extraction, compression of 3D data for visualization and CCE.
The code uses more ``collocation'' points than spectral functions. The idea
here was to try to smooth the data by using a least-squares fit to obtain
the spectral coefficients. This thorn provides aliased functions to perform
the decomposition. This will also dump the Cauchy metric. 

\section{Physical System}

\section{Numerical Implementation}

\section{Using This Thorn}
 \subsection{Dumping Cauchy Data for CCE}
 
  The following is a section of a parfile appended to an ordinary Cauchy evolution run (see the par/ directory for the complete parfile)

\begin{verbatim}
ActiveThorns="SphericalHarmonicDecomp"

SphericalHarmonicDecomp::extract_spacetime_metric_every=32
SphericalHarmonicDecomp::num_radii=3
SphericalHarmonicDecomp::EM_Rin[0]=18
SphericalHarmonicDecomp::EM_Rout[0]=22
SphericalHarmonicDecomp::EM_Rin[1]=47
SphericalHarmonicDecomp::EM_Rout[1]=53
SphericalHarmonicDecomp::EM_Rin[2]=94
SphericalHarmonicDecomp::EM_Rout[2]=106
SphericalHarmonicDecomp::num_l_modes=7
SphericalHarmonicDecomp::num_n_modes=7
SphericalHarmonicDecomp::num_mu_points=41
SphericalHarmonicDecomp::num_phi_points=82
SphericalHarmonicDecomp::num_x_points=28

\end{verbatim}
In this example we will extract the metric on 3 different shells
 (num\_radii), the
first between r=18 and r=22, the second between r=47 and r=53, and
the third between r=94 and 106. The idea here is to make the shell
small enough that we can accurately calculate the radial derivatives
of the metric function, while also large enough that we can smooth out
the grid noise. We decompose the metric functions in terms of
7 $\ell$ modes (num\_l\_modes=7 or all modes from $\ell=0$ to $\ell=6$,
 the m modes are automatically set) 
and 7 radial modes (num\_n\_mode=7). The grid functions are evaluated
at 41 points in mu (mu=cos(theta)),  82 points in phi, and 28 points
in radius. Minimally, we would need the number of angular points to be
equal to the number of angular spectral functions $\ell^2 + 2\ell$,
in this case we have many more angular modes ($41*82$) than angular
spectral functions. Similarly num\_x\_points must be greater than
num\_n\_modes. The number of n modes is set by the need to accurately
model the radial derivative of the mertric functions in the spherical
shell. The larger the difference between EM\_Rin[] and EM\_Rout[] the
more points required. The number of l modes is determined by the accuracy
requiremnts of the final CCE waveoform. in this case, choosin
num\_n\_modes=7 is marginally acceptable.

Note that the parameters
\begin{verbatim}
SphericalHarmonicDecomp::Rin  
SphericalHarmonicDecomp::Rout  
\end{verbatim}
are not used for CCE metric extraction. These parameters affect the
3D decomposition of GFs using the

 SphericalHarmonicDecomp\_3D\_Decompose aliased function mechanism


\subsection{Aliased functions}
  SphericalHarmonicDecomp provides a mechanism for other thorns to decompose
GFs either on 2D surfaces or 3D shells via aliased functions.
These two functions should be called in GLOBAL mode.

\begin{verbatim}
CCTK_INT  SphericalHarmonicDecomp_3D_Decompose (
       CCTK_POINTER_TO_CONST _GHp,
       CCTK_POINTER_TO_CONST _name,
       CCTK_INT re_gindx,
       CCTK_INT im_gindx,
       CCTK_INT spin )

e.g.

  SphericalHarmonicDecomp_3D_Decompose(cctkGH, "Psi4",
       CCTK_VarIndex("WeylScal4::Psi4r"),
       CCTK_VarIndex("WeylScal4::Psi4i"), -2);

CCTK_INT FUNCTION sYlm_DecomposeField(\
               CCTK_POINTER_TO_CONST IN cctkGH,\
               CCTK_POINTER_TO_CONST IN name,\
               CCTK_INT IN re_gindx,\
               CCTK_INT IN im_gindx,\
               CCTK_REAL IN radius,\
               CCTK_INT IN spin)

e.g.

  SphericalHarmonicDecomp_DecomposeField(cctkGH, "Psi4",
       CCTK_VarIndex("WeylScal4::Psi4r"),
       CCTK_VarIndex("WeylScal4::Psi4i"), 50, -2);

\end{verbatim}

\subsection{Parameters}

\begin{verbatim}
SphericalHarmonicDecomp::extract_spacetime_metric_every how often 
               (in iterations) should the metric be decomposed and dumped.

SphericalHarmonicDecomp::out_dir=""  Output directory for all output,
                                usually set to "", which causes the
                                thorn to use IO::out_dir

SphericalHarmonicDecomp::max_spin=2  Largest spin value. For most configuration
                             this should be set to 2.

SphericalHarmonicDecomp::num_l_modes How many l modes. This affects all
                           output. Note this is not lmax-1 in general.
                           For spin-weight 2 GF, lmax will be num_l_modes+2-1

SphericalHarmonicDecomp::num_mu_points number of points in the mu (cos(theta))
                           direction. Affects all output.

SphericalHarmonicDecomp::num_phi_points number of points in phi direction.
                                Affects all output.

SphericalHarmonicDecomp::num_x_points number of points in x (radial) direction.
                       Affects all 3D output including MetricDecomp

SphericalHarmonicDecomp::Rin inner radius of 3D shell. Only affects fields
                      dumped using aliased function mechanism

SphericalHarmonicDecomp::Rout outer radius of 3D shell. Only affects fields
                      dumped using aliased function mechanism

SphericalHarmonicDecomp::EM_Rin an array of Rins used for the CCE Metric
                             extraction

SphericalHarmonicDecomp::EM_Rout an array of Routs used for the CCE Metric
                             extraction

SphericalHarmonicDecomp::output_m_max limit on the maximum abs(m) dumped to
                output. These options are useful if you don't want to
                dump all the m modes from -l to l.

SphericalHarmonicDecomp::output_l_max limit on the maximum l dumped to
                output. This option is useful if you want the maximum
                l dumped to output to be independent of the spin of the
                GF.
\end{verbatim}



\subsection{Obtaining This Thorn}

\subsection{Basic Usage}

\subsection{Special Behaviour}

\subsection{Interaction With Other Thorns}

\subsection{Examples}

\subsection{Support and Feedback}

\section{History}

\subsection{Thorn Source Code}

\subsection{Thorn Documentation}

\subsection{Acknowledgements}


\begin{thebibliography}{9}

\end{thebibliography}

% Do not delete next line
% END CACTUS THORNGUIDE



\section{Parameters} 


\parskip = 0pt

\setlength{\tableWidth}{160mm}

\setlength{\paraWidth}{\tableWidth}
\setlength{\descWidth}{\tableWidth}
\settowidth{\maxVarWidth}{extract\_spacetime\_metric\_every}

\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}}{action\_on\_hdf5\_error} & {\bf Scope:} private & KEYWORD \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em What to do}} \\
\hline{\bf Range} & &  {\bf Default:} alert \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering abort} & \multicolumn{2}{p{\paraWidth}|}{stop the run.} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering alert} & \multicolumn{2}{p{\paraWidth}|}{only alert the user} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{do\_test} & {\bf Scope:} private & BOOLEAN \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em to test or not to test}} \\
\hline & & {\bf Default:} no \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{em\_rin} & {\bf Scope:} private & REAL \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em inner radius for decomp}} \\
\hline{\bf Range} & &  {\bf Default:} 10.0 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{positive} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{em\_rout} & {\bf Scope:} private & REAL \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em outer radius for decomp}} \\
\hline{\bf Range} & &  {\bf Default:} 100.0 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering (0:*} & \multicolumn{2}{p{\paraWidth}|}{positive {\textgreater} Rin} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{extract\_spacetime\_metric\_every} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em }} \\
\hline{\bf Range} & &  {\bf Default:} (none) \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{0 or positive. 0 means never} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{max\_spin} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em maximum absolute spin of fields}} \\
\hline{\bf Range} & &  {\bf Default:} 2 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{positive only} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_l\_modes} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of l modes ... not lmax}} \\
\hline{\bf Range} & &  {\bf Default:} 7 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:*} & \multicolumn{2}{p{\paraWidth}|}{1 or larger} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_mu\_points} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of points in mu direction}} \\
\hline{\bf Range} & &  {\bf Default:} 15 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:*} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_n\_modes} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of n modes}} \\
\hline{\bf Range} & &  {\bf Default:} 15 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:*} & \multicolumn{2}{p{\paraWidth}|}{ 1 or larger} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_phi\_points} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of points in phi directions}} \\
\hline{\bf Range} & &  {\bf Default:} 31 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:*} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_radii} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of radii}} \\
\hline{\bf Range} & &  {\bf Default:} 1 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:99} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{num\_x\_points} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em number of points in phi directions}} \\
\hline{\bf Range} & &  {\bf Default:} 31 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 1:*} & \multicolumn{2}{p{\paraWidth}|}{} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{out\_dir} & {\bf Scope:} private & STRING \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em output directory}} \\
\hline{\bf Range} & &  {\bf Default:} (none) \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering \^\$} & \multicolumn{2}{p{\paraWidth}|}{Empty stting -{\textgreater} use IO::out\_dir} \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering .+} & \multicolumn{2}{p{\paraWidth}|}{directory name} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{output\_l\_max} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em don't dump l modes larger than this}} \\
\hline{\bf Range} & &  {\bf Default:} 100 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{positive, but if l\_max {\textless} |s| then no output generated} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{output\_m\_max} & {\bf Scope:} private & INT \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em don't dump m modes larger than this}} \\
\hline{\bf Range} & &  {\bf Default:} 100 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{positive or zero} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{rin} & {\bf Scope:} private & REAL \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em inner radius for decomp}} \\
\hline{\bf Range} & &  {\bf Default:} 10.0 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering 0:*} & \multicolumn{2}{p{\paraWidth}|}{positive} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{rout} & {\bf Scope:} private & REAL \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em outer radius for decomp}} \\
\hline{\bf Range} & &  {\bf Default:} 100.0 \\\multicolumn{1}{|p{\maxVarWidth}|}{\centering (0:*} & \multicolumn{2}{p{\paraWidth}|}{positive {\textgreater} Rin} \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{sync\_file\_each\_time} & {\bf Scope:} private & BOOLEAN \\\hline
\multicolumn{3}{|p{\descWidth}|}{{\bf Description:}   {\em not yet activated}} \\
\hline & & {\bf Default:} yes \\\hline
\end{tabular*}

\vspace{0.5cm}\noindent \begin{tabular*}{\tableWidth}{|c|l@{\extracolsep{\fill}}r|}
\hline
\multicolumn{1}{|p{\maxVarWidth}}{io\_out\_dir} & {\bf Scope:} shared from IO & STRING \\\hline
\end{tabular*}

\vspace{0.5cm}\parskip = 10pt 

\section{Interfaces} 


\parskip = 0pt

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

\noindent {\bf Implements}: 

sphericalharmonicdecomp
\vspace{2mm}

\vspace{5mm}

\noindent {\bf Provides}: 



sYlm\_DecomposeField to 

sYlm\_DecomposeField\_3D to 
\vspace{2mm}\parskip = 10pt 

\section{Schedule} 


\parskip = 0pt


\noindent This section lists all the variables which are assigned storage by thorn PITTNullCode/SphericalHarmonicDecomp.  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}NONE
\subsection*{Scheduled Functions}
\vspace{5mm}

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

\hspace{5mm} sphericalharmonicdecomp\_test 

\hspace{5mm}{\it test } 


\hspace{5mm}

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


\vspace{5mm}

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

\hspace{5mm} sphericalharmonicdecomp\_dumpmetric 

\hspace{5mm}{\it extract and decompose spacetime metric } 


\hspace{5mm}

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



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