aboutsummaryrefslogtreecommitdiff
path: root/doc/documention.tex
blob: 44038b7340d95bd9fa85989fb2ce4335f1487ce2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
\documentclass{article}
\begin{document}

\title{Time}
\author{Gabrielle Allen}
\date{1999}
\maketitle

\abstract{Calculates the timestep used for an evolution}

\section{Purpose}

This thorn provides a routines for calculating
the timestep for an evolution based on the spatial Cartesian grid spacing and
a wave speed. 

\section{Description}

Thorn {\tt Time} uses one of four methods to decide on the timestep
to be used for the simulation. The method is chosen using the
keyword parameter {\tt time::timestep\_method}. (Note: In releases Beta 8 and 
earlier the parameter used was {\tt time::courant\_method}
\begin{itemize}

\item{} {\tt time::timestep\_method = ``given''} The timestep is fixed to the
	value of the parameter {\tt time::timestep}. 

\item{} {\tt time::timestep\_method = ``courant\_static''} This is the default
	method, which calculates the timestep once at the start of the
	simulation, based on a simple courant type condition using 
	the spatial gridsizes and the parameter {\tt time::dtfac}.
$$
\Delta t = \mbox{\tt dtfac} * \mbox{min}(\Delta x^i)
$$
	Note that it is up to the user to custom {\tt dtfac} to take
	into account the dimension of the space being used, and the wave speed.

\item{} {\tt time::timestep\_method = ``courant\_speed''} This choice implements a 
	dynamic courant type condition, the timestep being set before each
	timestep using the spatial dimension of the grid, the spatial grid sizes, the 
	parameter {\tt courant\_fac} and the grid variable {\tt courant\_wave\_speed}. 
	The algorithm used is
$$
\Delta t = \mbox{\tt courant\_fac} * \mbox{min}(\Delta x^i)/\mbox{courant\_wave\_speed}/\sqrt(\mbox{dim})
$$
	For this algorithm to be successful, the variable {\tt courant\_wave\_speed}
	must have been set by a thorn to the maximum wave speed on the grid.

\item{} {\tt time::timestep\_method = ``courant\_time''} This choice is similar to the
	method {\tt courant\_speed} above, in implementing a dynamic timestep.
	However the timestep is chosen using
$$
\Delta t = \mbox{\tt courant\_fac} * \mbox{\tt courant\_min\_time}/\sqrt(\mbox{dim})
$$
        where the grid variable {\tt courant\_min\_time} must be set by a thorn to
	the minimum time for a wave to cross a gridzone.

\end{itemize}

In all cases, Thorn {\tt Time} sets the Cactus variable {\tt cctk\_delta\_time}
which is passed as part of the macro {\tt CCTK\_ARGUMENTS} to thorns called 
by the scheduler.

Note that for hyperbolic problems, the Courant condition gives a minimum 
requirement for stability, namely that the numerical domain of dependency
must encompass the physical domain of dependency, or
$$
\Delta t \le \mbox{min}(\Delta x^i)/\mbox{wave speed}/\sqrt(\mbox{dim})
$$


\end{itemize}






% Automatically created from the ccl files by using gmake thorndoc
\include{interface}
\include{param}
\include{schedule}

\end{document}