aboutsummaryrefslogtreecommitdiff
path: root/doc/documentation.tex
blob: b59a7a3b7c062d71cacccb896e982fe0777eb8d3 (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
%version   $Header$
\documentclass{article}
\begin{document}

\title{PUGHInterp}
\author{Paul Walker, Thomas Radke, Erik Schnetter}
\date{1997-2001}
\maketitle

\abstract{Thorn PUGHInterp provides interpolation of arrays
          at arbitrary points.}

\section{Purpose}
Thorn PUGHInterp implements interpolation operators working on regular,
uniform cartesian grids. They can be applied to interpolate both CCTK grid
variables (grid functions and arrays distributed over all processors), and
processor-local arrays at arbitrary points.\\
The operators for distributed/local arrays are invoked via the flesh
interpolation API routines {\tt CCTK\_InterpGV()} and {\tt CCTK\_InterpLocal()}
resp. They are registered with the flesh under the name {\it ''uniform
cartesian''} prepended by the interpolation order (eg. {\it ''second-order
uniform cartesian''}). Currently there is first, second, and third-order
interpolation implemented.\\

\section{Implementation Notes}
The interpolation operators registered for different orders are mapped
via wrappers (in {\tt Startup.c}) onto a single routine (in {\tt Operator.c})
just passing the order as an additional argument.\\
The routine for distributed arrays will then map all points to interpolate
at to the processors which own those points, and communicate the points'
coordinates and corresponding input arrays ({\tt MPI\_Alltoall()} is used
for this).\\
Then the interpolation takes place in parallel on every processor, calling
a core interpolation routine (located in {\tt Interpolate.c}). This one
takes a list of input arrays and points and interpolates these to a
list of output arrays (one output value per interpolation point).\\
Again, for distributed arrays, the interpolation results for remote points
are sent back to the requesting processors.\\[2ex]
%
Current limitations of the core interpolation routine's implementation are:
%
\begin{itemize}
  \item arrays up to three ({\bf MAXDIM}) dimensions only can be handled
  \item interpolation orders up to three ({\bf MAXORDER}) only are supported
  \item coordinates must be given as {\bf CCTK\_REAL} types
  \item input and output array types must be the same
        (no type casting of interpolation results supported)
\end{itemize}
%
Despite of these limitations, the code it was programmed almost generic
in that it can easily be extended to support higher-dimensional arrays
or more interpolation orders.\\
Please see the NOTES in this source file for details.

\section{Comments}
%
For more information on how to invoke interpolation operators please refer
to the flesh documentation.
%
% Automatically created from the ccl files 
% Do not worry for now.
\include{interface}
\include{param}
\include{schedule}

\end{document}