%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 for CCTK grid variables (grid functions and arrays distributed over all processors).%%% \footnote{%%% See the LocalInterp thorn for interpolation of processor-local arrays. }%%% The interpolation operators are invoked via the flesh interpolation API {\tt CCTK\_InterpGV()}. They are registered with the flesh under the name {\tt "uniform cartesian"} prepended by the interpolation order, i.e.\ {\tt "second-order uniform cartesian"}). Currently there are 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. \section{Implementation Restrictions} 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}