From 5a10b056bae14fb944fdbdf5a025594d1c089fad Mon Sep 17 00:00:00 2001 From: schnetter Date: Wed, 5 Nov 2003 19:58:30 +0000 Subject: Schedule boundary conditions at postrestrict. git-svn-id: http://svn.cactuscode.org/arrangements/CactusWave/WaveToyC/trunk@93 90eea020-d82d-4da5-bf6e-4ee79ff7632f --- interface.ccl | 2 +- param.ccl | 20 +++++- schedule.ccl | 12 ++++ src/WaveToy.c | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 213 insertions(+), 29 deletions(-) diff --git a/interface.ccl b/interface.ccl index d963b48..1463592 100644 --- a/interface.ccl +++ b/interface.ccl @@ -14,7 +14,7 @@ cctk_real scalarevolve type = GF Timelevels=3 tags='tensortypealias="Scalar"' } "The evolved scalar field" -CCTK_INT FUNCTION Boundary_SelectVarForBC(CCTK_POINTER IN GH, \ +CCTK_INT FUNCTION Boundary_SelectVarForBC(CCTK_POINTER_TO_CONST IN GH, \ CCTK_INT IN faces, CCTK_INT IN boundary_width, CCTK_INT IN table_handle, \ CCTK_STRING IN var_name, CCTK_STRING IN bc_name) USES FUNCTION Boundary_SelectVarForBC diff --git a/param.ccl b/param.ccl index a382ecb..87ea382 100644 --- a/param.ccl +++ b/param.ccl @@ -14,4 +14,22 @@ KEYWORD bound "Type of boundary condition to use" } "none" - \ No newline at end of file + +private: + +INT repetitions "Number of timing repetions" +{ + 0 : * :: "1 is the normal case" +} 1 + +INT level1_stride [3] "Stride for level 1 loops" +{ + -1 :: "off" + 1 : * :: "on" +} -1 + +INT level2_stride [3] "Stride for level 2 loops" +{ + -1 :: "off" + 1 : * :: "on: should be an integer multiple of level1_stride" +} -1 diff --git a/schedule.ccl b/schedule.ccl index bb18e8f..ae86396 100644 --- a/schedule.ccl +++ b/schedule.ccl @@ -11,6 +11,7 @@ schedule WaveToyC_Startup at STARTUP schedule WaveToyC_InitSymBound at BASEGRID { LANG: C + OPTIONS: global } "Schedule symmetries" schedule WaveToyC_Evolution as WaveToy_Evolution at EVOL @@ -22,8 +23,19 @@ schedule WaveToyC_Evolution as WaveToy_Evolution at EVOL schedule WaveToyC_Boundaries as WaveToy_Boundaries at EVOL AFTER WaveToy_Evolution { LANG: C + # TODO: split this into local and level mode routines } "Boundaries of 3D wave equation" schedule GROUP ApplyBCs as WaveToyC_ApplyBCs at EVOL after WaveToy_Boundaries { } "Apply boundary conditions" + +schedule WaveToyC_Boundaries as WaveToy_Boundaries at POSTRESTRICT +{ + LANG: C + # TODO: split this into local and level mode routines +} "Boundaries of 3D wave equation" + +schedule GROUP ApplyBCs as WaveToyC_ApplyBCs at POSTRESTRICT after WaveToy_Boundaries +{ +} "Apply boundary conditions" diff --git a/src/WaveToy.c b/src/WaveToy.c index 7c98b1e..5ecbdd8 100644 --- a/src/WaveToy.c +++ b/src/WaveToy.c @@ -8,8 +8,15 @@ @version $Header$ @@*/ - -#include "cctk.h" +#include + +#if 0 +#include +#include +#include +#endif + +#include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" @@ -20,7 +27,44 @@ static const char *rcsid = "$Header$"; CCTK_FILEVERSION(CactusWave_WaveToyC_WaveToy_c); void WaveToyC_Boundaries(CCTK_ARGUMENTS); -void WaveToyC_Evolution(CCTK_ARGUMENTS); +void WaveToyC_Evolution(CCTK_ARGUMENTS); + +#define DEBUG 0 + + + +static inline int min (int const a, int const b) +{ + return ab ? a : b; +} + +#if 0 +static inline long long timeval2longlong (const struct timeval * const tv) +{ + return tv->tv_sec * 1000000LL + tv->tv_usec; +} + +static long long currenttime (void) +{ + struct rusage ru; + getrusage (RUSAGE_SELF, &ru); + return timeval2longlong (ru.ru_utime) + timeval2longlong (ru.ru_stime); +} +#endif + +static long long currenttime (void) +{ + unsigned long eax, edx; + asm volatile ("rdtsc" : "=a" (eax), "=d" (edx)); + return (unsigned long long)edx << 32 | (unsigned long long)eax; +} + + /*@@ @routine WaveToyC_Evolution @@ -37,14 +81,14 @@ void WaveToyC_Evolution(CCTK_ARGUMENTS); void WaveToyC_Evolution(CCTK_ARGUMENTS) { - DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; int i,j,k; int index; int istart, jstart, kstart, iend, jend, kend; CCTK_REAL dx,dy,dz,dt,dx2,dy2,dz2,dt2; - CCTK_REAL dx2i,dy2i,dz2i; + CCTK_REAL dt2dx2i,dt2dy2i,dt2dz2i; CCTK_REAL factor; @@ -59,9 +103,9 @@ void WaveToyC_Evolution(CCTK_ARGUMENTS) dz2 = dz*dz; dt2 = dt*dt; - dx2i = 1.0/dx2; - dy2i = 1.0/dy2; - dz2i = 1.0/dz2; + dt2dx2i = dt2/dx2; + dt2dy2i = dt2/dy2; + dt2dz2i = dt2/dz2; istart = 1; jstart = 1; @@ -72,29 +116,139 @@ void WaveToyC_Evolution(CCTK_ARGUMENTS) kend = cctk_lsh[2]-1; /* Do the evolution */ - factor = 2*(1 - (dt2)*(dx2i + dy2i + dz2i)); + factor = 2 * (1 - (dt2dx2i + dt2dy2i + dt2dz2i)); - for (k=kstart; k