From 018109d61e6bae122abc3d242cec19c85ee6ad69 Mon Sep 17 00:00:00 2001
From: jthorn <jthorn@17b73243-c579-4c4c-a9d2-2d5706c11dac>
Date: Thu, 19 Jan 2006 10:01:52 +0000
Subject: section B7.2.3 "Cactus Variables": clarify and expand example of how
 to calculate global xyz coordinates of a grid point

git-svn-id: http://svn.cactuscode.org/flesh/trunk@4234 17b73243-c579-4c4c-a9d2-2d5706c11dac
---
 doc/UsersGuide/ThornWriters.tex | 39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)

(limited to 'doc/UsersGuide/ThornWriters.tex')

diff --git a/doc/UsersGuide/ThornWriters.tex b/doc/UsersGuide/ThornWriters.tex
index 267afa72..e820fe7a 100644
--- a/doc/UsersGuide/ThornWriters.tex
+++ b/doc/UsersGuide/ThornWriters.tex
@@ -1863,12 +1863,7 @@ CCTK\_REAL}s with the grid spacing in each direction.
 %\item [\texttt{cctk\_to}] ... end loops.
 \item [\texttt{cctk\_origin\_space}] An array of \texttt{cctk\_dim} {\tt
       CCTK\_REAL}s with the spatial coordinates of the global origin
-      of the grid.  The coordinates of the $i$th local grid point in
-      the $x$ direction can in C be calculated by \texttt{x =
-      CCTK\_ORIGIN\_SPACE(0) + (cctk\_lbnd[0] + i) *
-      CCTK\_DELTA\_SPACE(0)}, and in Fortran by \texttt{x =
-      CCTK\_ORIGIN\_SPACE(1) + (cctk\_lbnd(1) + i - 1) *
-      CCTK\_DELTA\_SPACE(1)}.
+      of the grid.
 \item [\texttt{cctk\_lssh}]  This is an internal array used to hold
 array extents for staggering.  One should use the macro CCTK\_LSSH(,)
 to access its elements.
@@ -1946,6 +1941,38 @@ incorporate the effects of \texttt{cctk\_levfac}, \texttt{cctk\_levoff},
 \texttt{cctk\_levoffdenom}, and \texttt{cctk\_timefac}, so that you do not
 explicitly have to take them into account.
 
+Putting the above information together, the global Cactus $xyz$
+coordinates of the current grid point can be calculated as follows:
+\begin{verbatim}
+#include "cctk.h"
+
+void MyThorn_MyFunction(CCTK_ARGUMENTS)
+{
+int i,j,k;
+
+    for (k = 0 ; k < cctk_lsh[2] ; ++k)
+    {
+    for (j = 0 ; j < cctk_lsh[1] ; ++j)
+    {
+    for (i = 0 ; i < cctk_lsh[0] ; ++i)
+    {
+    const int posn = CCTK_GFINDEX3D(cctkGH, i,j,k);
+
+    /* calculate the global xyz coordinates of the (i,j,k) grid point */
+    const CCTK_REAL xcoord = CCTK_ORIGIN_SPACE(0) + (cctk_lbnd[0] + i)*CCTK_DELTA_SPACE(0);
+    const CCTK_REAL ycoord = CCTK_ORIGIN_SPACE(1) + (cctk_lbnd[1] + j)*CCTK_DELTA_SPACE(1);
+    const CCTK_REAL zcoord = CCTK_ORIGIN_SPACE(2) + (cctk_lbnd[2] + k)*CCTK_DELTA_SPACE(2);
+
+    /* an alternate calculation if this thorn inherits from  Grid */
+    const CCTK_REAL xcoord2 = /* Grid:: */ x[posn];
+    const CCTK_REAL ycoord2 = /* Grid:: */ y[posn];
+    const CCTK_REAL zcoord2 = /* Grid:: */ z[posn];
+    }
+    }
+    }
+}
+\end{verbatim}
+
 \subsection{Cactus Data Types}
 
 The Cactus grid variables and parameters are defined and
-- 
cgit v1.2.3

