summaryrefslogtreecommitdiff
path: root/src/include/cctk_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/cctk_core.h')
-rw-r--r--src/include/cctk_core.h382
1 files changed, 382 insertions, 0 deletions
diff --git a/src/include/cctk_core.h b/src/include/cctk_core.h
new file mode 100644
index 00000000..7620e823
--- /dev/null
+++ b/src/include/cctk_core.h
@@ -0,0 +1,382 @@
+/*@@
+ @header cctk.h
+ @date Tue Jan 26 17:29:34 1999
+ @author Tom Goodale
+ @desc
+ Main include file for the CCTK.
+ All thorns should include this.
+ @enddesc
+ @version $Header$
+ @@*/
+
+#ifndef _CCTK_CORE_H_
+#define _CCTK_CORE_H_ 1
+
+/* Grab the main configuration info. */
+#include "cctk_Config.h"
+
+/* Define which thorn the file is in */
+#include "definethisthorn.h"
+
+/* Include the constants */
+#include "cctk_Constants.h"
+
+/* Define some stuff */
+
+#ifdef FCODE
+
+#include "cctk_Faces.h"
+#include "cctk_Interp.h"
+#include "cctk_Loop.h"
+#include "cctk_WarnLevel.h"
+
+#define CCTK_PRINTSEPARATOR\
+ print '("--------------------------------------------------------------------------------")'
+
+#define _CCTK_FARGUMENTS \
+cctk_dim,cctk_gsh,cctk_lsh,cctk_lbnd,cctk_ubnd,cctk_lssh,cctk_from,cctk_to,\
+cctk_bbox,cctk_delta_time,cctk_time,cctk_delta_space,cctk_origin_space,\
+cctk_levfac,cctk_levoff,cctk_levoffdenom,cctk_timefac,cctk_convlevel,\
+cctk_convfac,cctk_nghostzones,cctk_iteration,cctkGH,\
+cctk_lsh1,cctk_lsh2,cctk_lsh3
+
+#define _DECLARE_CCTK_ARGUMENTS _DECLARE_CCTK_FARGUMENTS
+#define _DECLARE_CCTK_FARGUMENTS &&\
+ CCTK_DECLARE(INTEGER,cctk_dim,)&&\
+ CCTK_DECLARE(INTEGER,cctk_gsh,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_lsh,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_lbnd,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_ubnd,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_lssh,(CCTK_NSTAGGER*cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_from,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_to,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_bbox,(2*cctk_dim))&&\
+ CCTK_DECLARE(CCTK_REAL,cctk_delta_time,)&&\
+ CCTK_DECLARE(CCTK_REAL,cctk_time,)&&\
+ CCTK_DECLARE(CCTK_REAL,cctk_delta_space,(cctk_dim))&&\
+ CCTK_DECLARE(CCTK_REAL,cctk_origin_space,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_levfac,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_levoff,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_levoffdenom,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_timefac,)&&\
+ CCTK_DECLARE(INTEGER,cctk_convlevel,)&&\
+ CCTK_DECLARE(INTEGER,cctk_convfac,)&&\
+ CCTK_DECLARE(INTEGER,cctk_nghostzones,(cctk_dim))&&\
+ CCTK_DECLARE(INTEGER,cctk_iteration,)&&\
+ CCTK_DECLARE(CCTK_POINTER,cctkGH,)&&\
+ CCTK_DECLARE(INTEGER,cctk_lsh1,)&&\
+ CCTK_DECLARE(INTEGER,cctk_lsh2,)&&\
+ CCTK_DECLARE(INTEGER,cctk_lsh3,)&&
+
+#define CCTK_WARN(a,b) CCTK_Warn(a,__LINE__,__FORTRANFILE__,CCTK_THORNSTRING,b)
+
+#define CCTK_CoordRegisterSystem(a,b,c) CCTKi_CoordRegisterSystem(a,b,CCTK_THORNSTRING,c)
+
+/* John Shalf says that the operator .ne. needs to be enclosed by
+ spaces, because ANSI C preprocessors otherwise interpret the
+ character sequence ".0" as preprocessor token */
+#define CCTK_EQUALS(a,b) (CCTK_Equals(a,b) .ne. 0)
+
+#define CCTK_PASS_FTOF CCTK_FARGUMENTS
+
+#define CCTK_ORIGIN_SPACE(x) (cctk_origin_space(x)+cctk_delta_space(x)/cctk_levfac(x)*cctk_levoff(x)/cctk_levoffdenom(x))
+#define CCTK_DELTA_SPACE(x) (cctk_delta_space(x)/cctk_levfac(x))
+#define CCTK_DELTA_TIME (cctk_delta_time/cctk_timefac)
+/* The "stagger index" stag is zero-based (0,1,...), the direction dim
+ is one-based in Fortran (1,2,3,...) */
+#define CCTK_LSSH(stag,dim) cctk_lssh(CCTK_LSSH_IDX(stag,dim))
+#define CCTK_LSSH_IDX(stag,dim) (1+(stag)+CCTK_NSTAGGER*((dim)-1))
+
+#ifdef F90CODE
+
+#define _DECLARE_CCTK_FUNCTIONS \
+ external CCTK_PointerTo &&\
+ CCTK_POINTER CCTK_PointerTo &&\
+ interface &&\
+ integer function CCTK_Equals (arg1, arg2) &&\
+ implicit none &&\
+ CCTK_POINTER_TO_CONST arg1 &&\
+ character(*) arg2 &&\
+ end function CCTK_Equals &&\
+ integer function CCTK_MyProc (cctkGH) &&\
+ implicit none &&\
+ CCTK_POINTER_TO_CONST cctkGH &&\
+ end function CCTK_MyProc &&\
+ integer function CCTK_nProcs (cctkGH) &&\
+ implicit none &&\
+ CCTK_POINTER_TO_CONST cctkGH &&\
+ end function CCTK_nProcs &&\
+ integer function CCTK_IsThornActive (name) &&\
+ implicit none &&\
+ character(*) name &&\
+ end function CCTK_IsThornActive &&\
+ CCTK_POINTER function CCTK_NullPointer () &&\
+ implicit none &&\
+ end function CCTK_NullPointer &&\
+ end interface &&
+
+#else /* ! F90CODE */
+
+#define _DECLARE_CCTK_FUNCTIONS \
+ integer CCTK_Equals, CCTK_MyProc, CCTK_nProcs, CCTK_IsThornActive &&\
+ external CCTK_Equals, CCTK_MyProc, CCTK_nProcs, CCTK_IsThornActive &&\
+ CCTK_POINTER CCTK_PointerTo, CCTK_NullPointer &&\
+ external CCTK_PointerTo, CCTK_NullPointer &&
+
+#endif /* ! F90CODE */
+
+#endif /*FCODE*/
+
+#ifdef CCODE
+
+/* get the definition of ptrdiff_t */
+#include <stddef.h>
+
+#include "cGH.h"
+
+#include "cctk_ActiveThorns.h"
+#include "cctk_Banner.h"
+#include "cctk_Cache.h"
+#include "cctk_Coord.h"
+#include "cctk_Comm.h"
+#include "cctk_CommandLine.h"
+#include "cctk_Complex.h"
+#include "cctk_DebugDefines.h"
+#include "cctk_Faces.h"
+#include "cctk_File.h"
+#include "cctk_Flesh.h"
+#include "cctk_FortranString.h"
+#include "cctk_Functions.h"
+#include "cctk_GHExtensions.h"
+#include "cctk_Groups.h"
+#include "cctk_GroupsOnGH.h"
+#include "cctk_Interp.h"
+#include "cctk_IO.h"
+#include "cctk_IOMethods.h"
+#include "cctk_Loop.h"
+#include "cctk_Main.h"
+#include "cctk_Malloc.h"
+#include "cctk_Misc.h"
+#include "cctk_Parameter.h"
+#include "cctk_Reduction.h"
+#include "cctk_Stagger.h"
+#include "cctk_Sync.h"
+#include "cctk_Timers.h"
+#include "cctk_Termination.h"
+#include "cctk_WarnLevel.h"
+
+/* Include prototypes for scheduled functions */
+#include "cctk_ScheduleFunctions.h"
+
+/* Include prototypes for scheduled functions */
+#include "cctk_ScheduleFunctions.h"
+
+/* Include definitions provided by capabilities */
+#include "cctk_Capabilities.h"
+
+
+
+/*
+ * Routines to compute the linear index of a grid funtion element from
+ * its i,j,k indices
+ */
+
+#ifdef CCTK_DEBUG
+
+/*
+ * For CCTK_DEBUG, call the external C routines defined in
+ * DebugDefines.c
+ */
+
+# define CCTK_GFINDEX0D(cctkGH) CCTK_GFIndex0D(cctkGH)
+# define CCTK_GFINDEX1D(cctkGH,i) CCTK_GFIndex1D(cctkGH,i)
+# define CCTK_GFINDEX2D(cctkGH,i,j) CCTK_GFIndex2D(cctkGH,i,j)
+# define CCTK_GFINDEX3D(cctkGH,i,j,k) CCTK_GFIndex3D(cctkGH,i,j,k)
+# define CCTK_GFINDEX4D(cctkGH,i,j,k,l) CCTK_GFIndex4D(cctkGH,i,j,k,l)
+
+# define CCTK_VECTGFINDEX0D(cctkGH,n) CCTK_VectGFIndex0D(cctkGH,n)
+# define CCTK_VECTGFINDEX1D(cctkGH,i,n) CCTK_VectGFIndex1D(cctkGH,i,n)
+# define CCTK_VECTGFINDEX2D(cctkGH,i,j,n) CCTK_VectGFIndex2D(cctkGH,i,j,n)
+# define CCTK_VECTGFINDEX3D(cctkGH,i,j,k,n) CCTK_VectGFIndex3D(cctkGH,i,j,k,n)
+# define CCTK_VECTGFINDEX4D(cctkGH,i,j,k,l,n) CCTK_VectGFIndex4D(cctkGH,i,j,k,l,n)
+
+#else
+
+/*
+ * Without CCTK_DEBUG, define the calculations directly
+ */
+
+static inline int CCTK_GFINDEX0D (const cGH *restrict cctkGH)
+{
+ return 0;
+}
+
+static inline int CCTK_GFINDEX1D (const cGH *restrict cctkGH,
+ int i)
+{
+ return i;
+}
+
+static inline int CCTK_GFINDEX2D (const cGH *restrict cctkGH,
+ int i, int j)
+{
+ return i + cctkGH->cctk_lsh[0] * j;
+}
+
+static inline int CCTK_GFINDEX3D (const cGH *restrict cctkGH,
+ int i, int j, int k)
+{
+ return (i + cctkGH->cctk_lsh[0] *
+ (j + cctkGH->cctk_lsh[1] * k));
+}
+
+static inline int CCTK_GFINDEX4D (const cGH *restrict cctkGH,
+ int i, int j, int k, int l)
+{
+ return (i + cctkGH->cctk_lsh[0] *
+ (j + cctkGH->cctk_lsh[1] *
+ (k + cctkGH->cctk_lsh[2] * l)));
+}
+
+static inline int CCTK_VECTGFINDEX0D (const cGH *restrict cctkGH,
+ int n)
+{
+ return n;
+}
+
+static inline int CCTK_VECTGFINDEX1D (const cGH *restrict cctkGH,
+ int i, int n)
+{
+ return i + cctkGH->cctk_lsh[0] * n;
+}
+
+static inline int CCTK_VECTGFINDEX2D (const cGH *restrict cctkGH,
+ int i, int j, int n)
+{
+ return (i + cctkGH->cctk_lsh[0] *
+ (j + cctkGH->cctk_lsh[1] * n));
+}
+
+static inline int CCTK_VECTGFINDEX3D (const cGH *restrict cctkGH,
+ int i, int j, int k, int n)
+{
+ return (i + cctkGH->cctk_lsh[0] *
+ (j + cctkGH->cctk_lsh[1] *
+ (k + cctkGH->cctk_lsh[2] * n)));
+}
+
+static inline int CCTK_VECTGFINDEX4D (const cGH *restrict cctkGH,
+ int i, int j, int k, int l, int n)
+{
+ return (i + cctkGH->cctk_lsh[0] *
+ (j + cctkGH->cctk_lsh[1] *
+ (k + cctkGH->cctk_lsh[2] *
+ (l + cctkGH->cctk_lsh[3] * n))));
+}
+
+#endif
+
+
+
+
+#define CCTK_PRINTSEPARATOR \
+ printf("--------------------------------------------------------------------------------\n");
+
+#define _DECLARE_CCTK_ARGUMENTS _DECLARE_CCTK_CARGUMENTS
+#define _DECLARE_CCTK_CARGUMENTS \
+ CCTK_DECLARE_INIT(ptrdiff_t,cctki_dummy_int,0);\
+ CCTK_DECLARE_INIT(int const,cctk_dim,cctkGH->cctk_dim);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_gsh,cctkGH->cctk_gsh);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_lsh,cctkGH->cctk_lsh);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_lbnd,cctkGH->cctk_lbnd);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_ubnd,cctkGH->cctk_ubnd);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_lssh,cctkGH->cctk_lssh);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_from,cctkGH->cctk_from);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_to,cctkGH->cctk_to);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_bbox,cctkGH->cctk_bbox);\
+ CCTK_DECLARE_INIT(CCTK_REAL const,cctk_delta_time,cctkGH->cctk_delta_time);\
+ CCTK_DECLARE_INIT(CCTK_REAL const,cctk_time,cctkGH->cctk_time);\
+ CCTK_DECLARE_INIT(CCTK_REAL const *restrict const,cctk_delta_space,cctkGH->cctk_delta_space);\
+ CCTK_DECLARE_INIT(CCTK_REAL const *restrict const,cctk_origin_space,cctkGH->cctk_origin_space);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_levfac,cctkGH->cctk_levfac);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_levoff,cctkGH->cctk_levoff);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_levoffdenom,cctkGH->cctk_levoffdenom);\
+ CCTK_DECLARE_INIT(int const,cctk_timefac,cctkGH->cctk_timefac);\
+ CCTK_DECLARE_INIT(int const,cctk_convlevel,cctkGH->cctk_convlevel);\
+ CCTK_DECLARE_INIT(int const,cctk_convfac,cctkGH->cctk_convfac);\
+ CCTK_DECLARE_INIT(int const *restrict const,cctk_nghostzones,cctkGH->cctk_nghostzones);\
+ CCTK_DECLARE_INIT(int const,cctk_iteration,cctkGH->cctk_iteration);\
+
+#define _INITIALISE_CCTK_C2F
+#define _DECLARE_CCTK_C2F
+#define _PASS_CCTK_C2F(xGH) &((xGH)->cctk_dim),\
+ (xGH)->cctk_gsh,(xGH)->cctk_lsh,\
+ (xGH)->cctk_lbnd,(xGH)->cctk_ubnd,\
+ (xGH)->cctk_lssh,\
+ (xGH)->cctk_from,(xGH)->cctk_to,\
+ (xGH)->cctk_bbox,\
+ &((xGH)->cctk_delta_time), &((xGH)->cctk_time),\
+ (xGH)->cctk_delta_space, (xGH)->cctk_origin_space,\
+ (xGH)->cctk_levfac,\
+ (xGH)->cctk_levoff,\
+ (xGH)->cctk_levoffdenom,\
+ &((xGH)->cctk_timefac),\
+ &((xGH)->cctk_convlevel),\
+ &((xGH)->cctk_convfac),\
+ (xGH)->cctk_nghostzones,\
+ &((xGH)->cctk_iteration),\
+ &(xGH),\
+ &(xGH)->cctk_lsh[0],\
+ &(xGH)->cctk_lsh[1],\
+ &(xGH)->cctk_lsh[2]
+#define _CCTK_C2F_PROTO int const *,\
+ int const *, int const *,\
+ int const *, int const *,\
+ int const *,\
+ int const *, int const *,\
+ int const *,\
+ CCTK_REAL const *, CCTK_REAL const *,\
+ CCTK_REAL const *, CCTK_REAL const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ int const *,\
+ cGH const *const *,\
+ int const *,\
+ int const *,\
+ int const *
+
+#define CCTK_EQUALS(a,b) (CCTK_Equals((a),(b)))
+
+#define CCTK_PASS_CTOC cctkGH
+
+#define CCTK_ORIGIN_SPACE(x) (cctk_origin_space[x]+cctk_delta_space[x]/cctk_levfac[x]*cctk_levoff[x]/cctk_levoffdenom[x])
+#define CCTK_DELTA_SPACE(x) (cctk_delta_space[x]/cctk_levfac[x])
+#define CCTK_DELTA_TIME (cctk_delta_time/cctk_timefac)
+/* The "stagger index" stag is zero-based (0,1,...), the direction dim
+ is zero-based in C (0,1,2,...) */
+#define CCTK_LSSH(stag,dim) cctk_lssh[CCTK_LSSH_IDX(stag,dim)]
+#define CCTK_LSSH_IDX(stag,dim) ((stag)+CCTK_NSTAGGER*(dim))
+
+#define CCTK_WARN(a,b) CCTK_Warn(a,__LINE__,__FILE__,CCTK_THORNSTRING,b)
+
+#define CCTK_MALLOC(s) CCTKi_Malloc(s,__LINE__,__FILE__)
+#define CCTK_FREE(p) CCTKi_Free(p)
+
+#endif /*CCODE*/
+
+#define CCTK_INFO(a) CCTK_Info(CCTK_THORNSTRING,(a))
+#define CCTK_PARAMWARN(a) CCTK_ParamWarn(CCTK_THORNSTRING,(a))
+
+/*
+#define CCTK_MAKESTRING(x) CCTK_REALSTRING(x)
+#define CCTK_REALSTRING(x) #x
+#define CCTK_WARN(a,b) CCTK_Warn(a,CCTK_MAKESTRING(CCTK_THORN),b,__LINE__,__FILE__)
+*/
+
+
+#endif