aboutsummaryrefslogtreecommitdiff
path: root/Auxiliary
diff options
context:
space:
mode:
authorshusa <shusa>2004-05-09 19:34:21 +0000
committershusa <shusa>2004-05-09 19:34:21 +0000
commit7c05ab152724573b390868b99d4d3eef00e147da (patch)
tree418b79742833ccd22b4e90bf0b98ba7c9ac83f4d /Auxiliary
parentd62d08ade47fd11fa8999c2d66b8f506462503f8 (diff)
Initial revision
SKIPPED: Examples/ADM/ADMEqs.m Examples/ADM/ADMTT.m Examples/ADM/BuildADMTT Examples/ADM/KrancADMRicciMetric100.par Examples/ADM/KrancADMRicciStandard100.par Examples/ADM/KrancADMTT.m Examples/ADM/Makefile Examples/ADM/README Examples/ADM/ThornGenADM_front.nb Examples/ADM/ThornGen_ADM.m Examples/ADM/ThornGen_ADM2.m Examples/ADM/arrangement_KrancADM.tar.gz Examples/ADM/data_adm.tar.gz Examples/BSSN/BSSNTT.m Examples/BSSN/BuildBSSNTT Examples/BSSN/Makefile Examples/BSSN/freeBSSN/freeBSSN.th Examples/BSSN/freeBSSN/BSSNMoL/interface.ccl Examples/BSSN/freeBSSN/BSSNMoL/param.ccl Examples/BSSN/freeBSSN/BSSNMoL/schedule.ccl Examples/BSSN/freeBSSN/BSSNMoL/src/BSSNMoL_ApplyExcision.F90 Examples/BSSN/freeBSSN/BSSNMoL/src/BSSNMoL_Boundaries.c Examples/BSSN/freeBSSN/BSSNMoL/src/BSSNMoL_CalcRHS.c Examples/BSSN/freeBSSN/BSSNMoL/src/BSSNMoL_RegisterVars.c Examples/BSSN/freeBSSN/BSSNMoL/src/Startup.c Examples/BSSN/freeBSSN/BSSNMoL/src/make.code.defn Examples/BSSN/freeBSSN/BSSNMoL/src/precomputations.h Examples/BSSN/freeBSSN/BSSNTranslator/interface.ccl Examples/BSSN/freeBSSN/BSSNTranslator/param.ccl Examples/BSSN/freeBSSN/BSSNTranslator/schedule.ccl Examples/BSSN/freeBSSN/BSSNTranslator/src/BSSNTranslator_Setter.c Examples/BSSN/freeBSSN/BSSNTranslator/src/Startup.c Examples/BSSN/freeBSSN/BSSNTranslator/src/make.code.defn Examples/BSSN/freeBSSN/BSSNTranslator/src/precomputations.h Examples/BSSN/freeBSSN/OLDpar/BSSN2GaugeWaveR0.par Examples/BSSN/freeBSSN/OLDpar/BSSN2GaugeWaveR1.par Examples/BSSN/freeBSSN/OLDpar/BSSN2GaugeWaveR2.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyCollapseR0.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyCollapseR1.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyCollapseR2.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyExpandR0.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyExpandR1.par Examples/BSSN/freeBSSN/OLDpar/BSSN2PolarizedGowdyExpandR2.par Examples/BSSN/freeBSSN/OLDpar/BSSN2RobustR0.par Examples/BSSN/freeBSSN/OLDpar/BSSN2RobustR1.par Examples/BSSN/freeBSSN/OLDpar/BSSN2RobustR2.par Examples/BSSN/freeBSSN/evalBSSNConstraints/interface.ccl Examples/BSSN/freeBSSN/evalBSSNConstraints/param.ccl Examples/BSSN/freeBSSN/evalBSSNConstraints/schedule.ccl Examples/BSSN/freeBSSN/evalBSSNConstraints/src/Startup.c Examples/BSSN/freeBSSN/evalBSSNConstraints/src/evalBSSNConstraints_Eval.c Examples/BSSN/freeBSSN/evalBSSNConstraints/src/make.code.defn Examples/BSSN/freeBSSN/evalBSSNConstraints/src/precomputations.h Examples/BSSN/freeBSSN/freeBSSNBase/interface.ccl Examples/BSSN/freeBSSN/freeBSSNBase/param.ccl Examples/BSSN/freeBSSN/freeBSSNBase/schedule.ccl Examples/BSSN/freeBSSN/freeBSSNBase/src/RegisterSymmetries.c Examples/BSSN/freeBSSN/freeBSSNBase/src/Startup.c Examples/BSSN/freeBSSN/freeBSSNBase/src/make.code.defn Examples/BSSN/freeBSSN/harmonicLapseMoL/interface.ccl Examples/BSSN/freeBSSN/harmonicLapseMoL/param.ccl Examples/BSSN/freeBSSN/harmonicLapseMoL/schedule.ccl Examples/BSSN/freeBSSN/harmonicLapseMoL/src/Startup.c Examples/BSSN/freeBSSN/harmonicLapseMoL/src/harmonicLapseMoL_ApplyExcision.F90 Examples/BSSN/freeBSSN/harmonicLapseMoL/src/harmonicLapseMoL_Boundaries.c Examples/BSSN/freeBSSN/harmonicLapseMoL/src/harmonicLapseMoL_CalcRHS.c Examples/BSSN/freeBSSN/harmonicLapseMoL/src/harmonicLapseMoL_RegisterVars.c Examples/BSSN/freeBSSN/harmonicLapseMoL/src/make.code.defn Examples/BSSN/freeBSSN/harmonicLapseMoL/src/precomputations.h Examples/BSSN/freeBSSN/par/BSSN2GaugeWaveR0.par Examples/BSSN/freeBSSN/par/BSSN2GaugeWaveR1.par Examples/BSSN/freeBSSN/par/BSSN2GaugeWaveR2.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyCollapseR0.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyCollapseR1.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyCollapseR2.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyExpandR0.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyExpandR1.par Examples/BSSN/freeBSSN/par/BSSN2PolarizedGowdyExpandR2.par Examples/BSSN/freeBSSN/par/BSSN2RobustR0.par Examples/BSSN/freeBSSN/par/BSSN2RobustR1.par Examples/BSSN/freeBSSN/par/BSSN2RobustR2.par Examples/BSSN/freeBSSN/projectAlgebraicConstraints/interface.ccl Examples/BSSN/freeBSSN/projectAlgebraicConstraints/param.ccl Examples/BSSN/freeBSSN/projectAlgebraicConstraints/schedule.ccl Examples/BSSN/freeBSSN/projectAlgebraicConstraints/src/Startup.c Examples/BSSN/freeBSSN/projectAlgebraicConstraints/src/make.code.defn Examples/BSSN/freeBSSN/projectAlgebraicConstraints/src/precomputations.h Examples/BSSN/freeBSSN/projectAlgebraicConstraints/src/projectAlgebraicConstraints_Set.c Examples/BSSN/freeBSSN/setHarmonicLapse/interface.ccl Examples/BSSN/freeBSSN/setHarmonicLapse/param.ccl Examples/BSSN/freeBSSN/setHarmonicLapse/schedule.ccl Examples/BSSN/freeBSSN/setHarmonicLapse/src/Startup.c Examples/BSSN/freeBSSN/setHarmonicLapse/src/make.code.defn Examples/BSSN/freeBSSN/setHarmonicLapse/src/precomputations.h Examples/BSSN/freeBSSN/setHarmonicLapse/src/setHarmonicLapse_Set.c Examples/BSSN/freeBSSN/setUnitLapse/interface.ccl Examples/BSSN/freeBSSN/setUnitLapse/param.ccl Examples/BSSN/freeBSSN/setUnitLapse/schedule.ccl Examples/BSSN/freeBSSN/setUnitLapse/src/Startup.c Examples/BSSN/freeBSSN/setUnitLapse/src/make.code.defn Examples/BSSN/freeBSSN/setUnitLapse/src/precomputations.h Examples/BSSN/freeBSSN/setUnitLapse/src/setUnitLapse_Set.c Examples/BSSN/freeBSSN/setZeroShift/interface.ccl Examples/BSSN/freeBSSN/setZeroShift/param.ccl Examples/BSSN/freeBSSN/setZeroShift/schedule.ccl Examples/BSSN/freeBSSN/setZeroShift/src/Startup.c Examples/BSSN/freeBSSN/setZeroShift/src/make.code.defn Examples/BSSN/freeBSSN/setZeroShift/src/precomputations.h Examples/BSSN/freeBSSN/setZeroShift/src/setZeroShift_Set.c Examples/KleinGordon/Components.nb Examples/KleinGordon/KGTT.m Examples/KleinGordon/ListOfEqsLhsRhsComp.m Examples/KleinGordon/MKG100.par Examples/KleinGordon/MKGTT.m Examples/KleinGordon/README Examples/KleinGordon/ThornGen_front.nb Examples/KleinGordon/arrangement_MKG.tar.gz Examples/KleinGordon/data_mkg.tar.gz Examples/Maxwell/3+1_Decomp_Maxwell.nb Examples/Maxwell/EM100.par Examples/Maxwell/EMTT.m Examples/Maxwell/Initializations_Maxwell.nb Examples/Maxwell/ListOfConstrComp.m Examples/Maxwell/ListOfEqsLhsRhsComp.m Examples/Maxwell/Maxwell_Demo.nb Examples/Maxwell/README Examples/Maxwell/README_internal Examples/Maxwell/ThornGen_front.nb Examples/Maxwell/Using_Tools_Constr.nb Examples/Maxwell/arrangement_EM.tar.gz Examples/Maxwell/data_em.tar.gz Tools/TensorFactory/ComponentsTools.nb Tools/TensorFactory/DecomposeTools.nb Tools/TensorFactory/FrameDecomposeTools.nb Tools/TensorFactory/GaussCodazzi.nb Tools/TensorFactory/Ricci.tex Tools/TensorFactory/StartMathTensor.m Tools/TensorFactory/TeXTools.nb Tools/TensorFactory/Doc/Characteristics.nb Tools/TensorFactory/Doc/DocGaussCodazzi.nb Tools/TensorFactory/Doc/Om1EvolEqs.m Tools/TensorFactory/Doc/exampleTeX.nb Tools/TensorFactory/Doc/Papers/ERE2003.pdf Tools/TensorFactory/Doc/Talks/compalg.pdf
Diffstat (limited to 'Auxiliary')
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/interface.ccl10
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/param.ccl15
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/schedule.ccl12
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.c41
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h427
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/MathematicaCompat.h25
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/Startup.c60
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/make.code.defn8
-rw-r--r--Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/testmacros.c23
9 files changed, 621 insertions, 0 deletions
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/interface.ccl b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/interface.ccl
new file mode 100644
index 0000000..b1637b4
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/interface.ccl
@@ -0,0 +1,10 @@
+# GenericFD/interface.ccl
+# Interface definition for thorn GenericFD
+# author: S. Husa
+
+# $Header$
+
+implements: GenericFD
+
+INCLUDE HEADER: GenericFD.h in GenericFD.h
+
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/param.ccl b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/param.ccl
new file mode 100644
index 0000000..62adf93
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/param.ccl
@@ -0,0 +1,15 @@
+# GenericFD/param.ccl
+# Parameter definition for thorn GenericFD
+# author: S. Husa
+
+# $Header$
+
+private:
+
+KEYWORD FDscheme "Type of finite differencing to use"
+{
+ "2nd order centered macro" :: "centered 2nd order implemented with macros"
+ "4th order centered macro" :: "centered 4th order implemented with macros"
+} "2nd order centered macro"
+
+
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/schedule.ccl b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/schedule.ccl
new file mode 100644
index 0000000..a56f002
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/schedule.ccl
@@ -0,0 +1,12 @@
+# GenericFD/schedule.ccl
+# Schedule definition for thorn GenericFD
+# author: S. Husa
+
+# $Header$
+
+
+
+schedule GenericFD_Startup at STARTUP
+{
+ LANG: C
+} "Register Banner"
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.c b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.c
new file mode 100644
index 0000000..c3aa020
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.c
@@ -0,0 +1,41 @@
+/*@@
+ @file GenericFD/src/GenericFD.c
+ @date June 16 2002
+ @author S. Husa
+ @desc
+
+ $Id$
+
+ @enddesc
+ @@*/
+
+/* Copyright 2004 Sascha Husa, Ian Hinder, Christiane Lechner
+
+ This file is part of Kranc.
+
+ Kranc is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Kranc is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Foobar; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+#include "Symmetry.h"
+
+#include "GenericFD.h"
+
+
+/* TODO: provide functions for differencing, use FD macros to
+ evaluate == use macros to evaluate corresponding functions */
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
new file mode 100644
index 0000000..9bc1002
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/GenericFD.h
@@ -0,0 +1,427 @@
+/*@@
+ @file GenericFD/src/GenericFD.h
+ @date June 16 2002
+ @author S. Husa
+ @desc
+
+ $Id$
+
+ @enddesc
+ @@*/
+
+/* Copyright 2004 Sascha Husa, Ian Hinder, Christiane Lechner
+
+ This file is part of Kranc.
+
+ Kranc is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Kranc is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Foobar; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#ifndef NOPRECOMPUTE
+#define PRECOMPUTE
+#endif
+
+#if defined(FD_C0) || defined(FD_C2) || defined(FD_C4) || defined(FD_C2C4)
+#define FD_SET_BY_USER
+#endif
+#ifndef FD_SET_BY_USER
+#define FD_C2
+#endif
+
+
+#if defined(FD_C0)
+#define FD_METHOD_DESC "FD method: replace derivatives by zero"
+#endif
+
+#if defined(FD_C2)
+#define FD_METHOD_DESC "FD method: second order centered finite differences"
+#endif
+
+#if defined(FD_C4)
+#define FD_METHOD_DESC "FD method: fourth order centered finite differences"
+#endif
+
+#if defined(FD_C2C4)
+#define FD_METHOD_DESC "FD method: weighted 2nd/4th order centered finite differences"
+#endif
+
+
+
+/* utility functions */
+#if defined(KRANC_C)
+#define string(d,f) d ## f
+#else
+#define string(d,f) d/**/f
+#endif
+
+#include "MathematicaCompat.h"
+
+/* finite differencing macros */
+
+/* */
+/* add method argument to shorthands */
+/* */
+
+/* second derivatives */
+#define D11x(gf) string(D11,gf)
+#define D22x(gf) string(D22,gf)
+#define D33x(gf) string(D33,gf)
+#define D21x(gf) string(D21,gf)
+#define D32x(gf) string(D32,gf)
+#define D31x(gf) string(D31,gf)
+
+/* first derivatives */
+#define D1x(gf) string(D1,gf)
+#define D2x(gf) string(D2,gf)
+#define D3x(gf) string(D3,gf)
+
+#ifdef PRECOMPUTE
+
+/* second derivatives */
+#define D11(gf,i,j,k) string(D11,gf)
+#define D22(gf,i,j,k) string(D22,gf)
+#define D33(gf,i,j,k) string(D33,gf)
+#define D21(gf,i,j,k) string(D21,gf)
+#define D32(gf,i,j,k) string(D32,gf)
+#define D31(gf,i,j,k) string(D31,gf)
+
+/* first derivatives */
+#define D1(gf,i,j,k) string(D1,gf)
+#define D2(gf,i,j,k) string(D2,gf)
+#define D3(gf,i,j,k) string(D3,gf)
+
+#else
+
+/* second derivatives */
+#define D11(gf,i,j,k) D11gf(gf,i,j,k)
+#define D22(gf,i,j,k) D22gf(gf,i,j,k)
+#define D33(gf,i,j,k) D33gf(gf,i,j,k)
+#define D21(gf,i,j,k) D21gf(gf,i,j,k)
+#define D32(gf,i,j,k) D32gf(gf,i,j,k)
+#define D31(gf,i,j,k) D31gf(gf,i,j,k)
+
+/* first derivatives */
+#define D1(gf,i,j,k) D1gf(gf, i,j,k)
+#define D2(gf,i,j,k) D2gf(gf, i,j,k)
+#define D3(gf,i,j,k) D3gf(gf, i,j,k)
+
+#endif
+
+
+#ifdef FD_C0
+/* second derivatives */
+#define D11gf(gf,i,j,k) D11_c0(gf,i,j,k)
+#define D22gf(gf,i,j,k) D22_c0(gf,i,j,k)
+#define D33gf(gf,i,j,k) D33_c0(gf,i,j,k)
+#define D21gf(gf,i,j,k) D21_c0(gf,i,j,k)
+#define D32gf(gf,i,j,k) D32_c0(gf,i,j,k)
+#define D31gf(gf,i,j,k) D31_c0(gf,i,j,k)
+
+/* first derivatives */
+#define D1gf(gf,i,j,k) D1_c0(gf, i,j,k)
+#define D2gf(gf,i,j,k) D2_c0(gf, i,j,k)
+#define D3gf(gf,i,j,k) D3_c0(gf, i,j,k)
+#endif
+
+
+
+#ifdef FD_C2
+/* second derivatives */
+#define D11gf(gf,i,j,k) D11_c2(gf,i,j,k)
+#define D22gf(gf,i,j,k) D22_c2(gf,i,j,k)
+#define D33gf(gf,i,j,k) D33_c2(gf,i,j,k)
+#define D21gf(gf,i,j,k) D21_c2(gf,i,j,k)
+#define D32gf(gf,i,j,k) D32_c2(gf,i,j,k)
+#define D31gf(gf,i,j,k) D31_c2(gf,i,j,k)
+
+/* first derivatives */
+#define D1gf(gf,i,j,k) D1_c2(gf, i,j,k)
+#define D2gf(gf,i,j,k) D2_c2(gf, i,j,k)
+#define D3gf(gf,i,j,k) D3_c2(gf, i,j,k)
+#endif
+
+
+
+#ifdef FD_C4
+/* second derivatives */
+#define D11gf(gf,i,j,k) D11_c4(gf,i,j,k)
+#define D22gf(gf,i,j,k) D22_c4(gf,i,j,k)
+#define D33gf(gf,i,j,k) D33_c4(gf,i,j,k)
+#define D21gf(gf,i,j,k) D21_c4(gf,i,j,k)
+#define D32gf(gf,i,j,k) D32_c4(gf,i,j,k)
+#define D31gf(gf,i,j,k) D31_c4(gf,i,j,k)
+
+/* first derivatives */
+#define D1gf(gf,i,j,k) D1_c4(gf, i,j,k)
+#define D2gf(gf,i,j,k) D2_c4(gf, i,j,k)
+#define D3gf(gf,i,j,k) D3_c4(gf, i,j,k)
+#endif
+
+
+#ifdef FD_C2C4
+/* second derivatives */
+#define D11gf(gf,i,j,k) D11_c2c4(gf,i,j,k)
+#define D22gf(gf,i,j,k) D22_c2c4(gf,i,j,k)
+#define D33gf(gf,i,j,k) D33_c2c4(gf,i,j,k)
+#define D21gf(gf,i,j,k) D21_c2c4(gf,i,j,k)
+#define D32gf(gf,i,j,k) D32_c2c4(gf,i,j,k)
+#define D31gf(gf,i,j,k) D31_c2c4(gf,i,j,k)
+
+/* first derivatives */
+#define D1gf(gf,i,j,k) D1_c2c4(gf, i,j,k)
+#define D2gf(gf,i,j,k) D2_c2c4(gf, i,j,k)
+#define D3gf(gf,i,j,k) D3_c2c4(gf, i,j,k)
+#endif
+
+
+
+
+/*****************************************************/
+/* */
+/* METHODS */
+/* */
+/*****************************************************/
+
+/* c0 */
+
+/* set all derivatives = 0 */
+/* for debugging and benchmarking */
+
+/* second derivatives */
+
+#define D11_c0(gf,i,j,k) 0.
+#define D22_c0(gf,i,j,k) 0.
+#define D33_c0(gf,i,j,k) 0.
+#define D21_c0(gf,i,j,k) 0.
+#define D32_c0(gf,i,j,k) 0.
+#define D31_c0(gf,i,j,k) 0.
+
+/* first derivatives */
+
+#define D1_c0(gf,i,j,k) 0.
+#define D2_c0(gf,i,j,k) 0.
+#define D3_c0(gf,i,j,k) 0.
+
+
+/* c2 */
+/* */
+/* 2nd order centered */
+/* */
+/* second derivatives, centered, 2nd order */
+
+#ifndef KRANC_C
+#define D11_c2(gf,i,j,k) \
+ (( gf(i+1,j,k) \
+ - 2.*gf(i, j,k) \
+ + gf(i-1,j,k)) * dxi * dxi )
+
+#define D22_c2(gf,i,j,k) \
+ (( gf(i,j+1,k) \
+ - 2.*gf(i,j, k) \
+ + gf(i,j-1,k)) * dyi * dyi )
+
+#define D33_c2(gf,i,j,k) \
+ (( gf(i,j,k+1) \
+ - 2.*gf(i,j,k ) \
+ + gf(i,j,k-1)) * dzi * dzi )
+
+#define D21_c2(gf,i,j,k) \
+ ((gf(i+1,j+1,k) \
+ + gf(i-1,j-1,k) \
+ - gf(i+1,j-1,k) \
+ - gf(i-1,j+1,k)) * hdxi * hdyi )
+
+#define D32_c2(gf,i,j,k) \
+ ((gf(i,j+1,k+1) \
+ + gf(i,j-1,k-1) \
+ - gf(i,j+1,k-1) \
+ - gf(i,j-1,k+1)) * hdyi * hdzi )
+
+#define D31_c2(gf,i,j,k) \
+ ((gf(i+1,j,k+1) \
+ + gf(i-1,j,k-1) \
+ - gf(i+1,j,k-1) \
+ - gf(i-1,j,k+1)) * hdxi * hdzi )
+
+/* first derivatives, centered, 2nd order */
+
+#define D1_c2(gf,i,j,k) \
+ ((gf(i+1,j,k) \
+ - gf(i-1,j,k)) * hdxi)
+
+#define D2_c2(gf,i,j,k) \
+ ((gf(i,j+1,k) \
+ - gf(i,j-1,k)) * hdyi)
+
+#define D3_c2(gf,i,j,k) \
+ ((gf(i,j,k+1) \
+ - gf(i,j,k-1)) * hdzi)
+
+#else
+
+
+#define D11_c2(gf,i,j,k) \
+ (( gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k)] \
+ - 2.*gf[CCTK_GFINDEX3D(cctkGH,i, j,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k)]) * dxi * dxi )
+
+#define D22_c2(gf,i,j,k) \
+ (( gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k)] \
+ - 2.*gf[CCTK_GFINDEX3D(cctkGH,i,j, k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k)]) * dyi * dyi )
+
+#define D33_c2(gf,i,j,k) \
+ (( gf[CCTK_GFINDEX3D(cctkGH,i,j,k+1)] \
+ - 2.*gf[CCTK_GFINDEX3D(cctkGH,i,j,k )] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j,k-1)]) * dzi * dzi )
+
+#define D21_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i+1,j+1,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-1,j-1,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i+1,j-1,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-1,j+1,k)]) * hdxi * hdyi )
+
+#define D32_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k+1)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k-1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k-1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k+1)]) * hdyi * hdzi )
+
+#define D31_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k+1)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k-1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k-1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k+1)]) * hdxi * hdzi )
+
+/* first derivatives, centered, 2nd order */
+
+#define D1_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k)]) * hdxi)
+
+#define D2_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k)]) * hdyi)
+
+#define D3_c2(gf,i,j,k) \
+ ((gf[CCTK_GFINDEX3D(cctkGH,i,j,k+1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j,k-1)]) * hdzi)
+
+#endif
+
+
+/* c4 */
+/* */
+/* 4th order centered */
+/* */
+
+/* second derivatives, centered, 4th order */
+
+#define D11_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i+2,j,k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k)] \
+ - 30. * gf[CCTK_GFINDEX3D(cctkGH,i, j,k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-2,j,k)]) * dxi * dxi / 12.)
+
+
+#define D22_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i,j+2,k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k)] \
+ - 30. * gf[CCTK_GFINDEX3D(cctkGH,i,j, k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j-2,k)]) * dyi * dyi / 12.)
+
+
+#define D33_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i,j,k+2)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j,k+1)] \
+ - 30. * gf[CCTK_GFINDEX3D(cctkGH,i,j,k )] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j,k-1)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j,k-2)]) * dzi * dzi / 12.)
+
+#define D21_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i+2,j+2,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i+2,j-2,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-2,j+2,k)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-2,j-2,k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j+1,k)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j-1,k)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j+1,k)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j-1,k)]) * dxi * dyi / 48.)
+
+#define D31_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i+2,j,k+2)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i+2,j,k-2)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-2,j,k+2)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i-2,j,k-2)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k+1)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k-1)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k+1)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k-1)]) * dxi * dzi / 48.)
+
+
+#define D32_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i,j+2,k+2)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j+2,k-2)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j-2,k+2)] \
+ - gf[CCTK_GFINDEX3D(cctkGH,i,j-2,k-2)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k+1)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k-1)] \
+ - 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k+1)] \
+ + 16. * gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k-1)]) * dzi * dyi / 48.)
+
+
+/* first derivatives, centered, 4th order */
+
+#define D1_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i+2,j,k)] \
+ + 8. * gf[CCTK_GFINDEX3D(cctkGH,i+1,j,k)] \
+ - 8. * gf[CCTK_GFINDEX3D(cctkGH,i-1,j,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i-2,j,k)]) * (dxi / 12.))
+
+#define D2_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i,j+2,k)] \
+ + 8. * gf[CCTK_GFINDEX3D(cctkGH,i,j+1,k)] \
+ - 8. * gf[CCTK_GFINDEX3D(cctkGH,i,j-1,k)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j-2,k)]) * (dyi / 12.))
+
+#define D3_c4(gf,i,j,k) \
+ ((- gf[CCTK_GFINDEX3D(cctkGH,i,j,k+2)] \
+ + 8. * gf[CCTK_GFINDEX3D(cctkGH,i,j,k+1)] \
+ - 8. * gf[CCTK_GFINDEX3D(cctkGH,i,j,k-1)] \
+ + gf[CCTK_GFINDEX3D(cctkGH,i,j,k-2)]) * (dxi / 12.))
+
+
+/*****************************************************/
+/* */
+/* DERIVED METHODS */
+/* */
+/******************************************************/
+
+
+/* blend c2 and c4 */
+/* second derivatives */
+#define D11_c2c4(gf,i,j,k) (fdweight_c2*D11_c2(gf,i,j,k) + fdweight_c4*D11_c4(gf,i,j,k))
+#define D22_c2c4(gf,i,j,k) (fdweight_c2*D22_c2(gf,i,j,k) + fdweight_c4*D22_c4(gf,i,j,k))
+#define D33_c2c4(gf,i,j,k) (fdweight_c2*D33_c2(gf,i,j,k) + fdweight_c4*D33_c4(gf,i,j,k))
+#define D21_c2c4(gf,i,j,k) (fdweight_c2*D21_c2(gf,i,j,k) + fdweight_c4*D21_c4(gf,i,j,k))
+#define D32_c2c4(gf,i,j,k) (fdweight_c2*D32_c2(gf,i,j,k) + fdweight_c4*D32_c4(gf,i,j,k))
+#define D31_c2c4(gf,i,j,k) (fdweight_c2*D31_c2(gf,i,j,k) + fdweight_c4*D31_c4(gf,i,j,k))
+
+/* first derivatives */
+#define D1_c2c4(gf,i,j,k) (fdweight_c2*D1_c2(gf, i,j,k) + fdweight_c4*D1_c4(gf,i,j,k))
+#define D2_c2c4(gf,i,j,k) (fdweight_c2*D2_c2(gf, i,j,k) + fdweight_c4*D2_c4(gf,i,j,k))
+#define D3_c2c4(gf,i,j,k) (fdweight_c2*D3_c2(gf, i,j,k) + fdweight_c4*D3_c4(gf,i,j,k))
+
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/MathematicaCompat.h b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/MathematicaCompat.h
new file mode 100644
index 0000000..74136cc
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/MathematicaCompat.h
@@ -0,0 +1,25 @@
+
+#define Power(x, y) (pow((x), (y)))
+#define Sqrt(x) (sqrt((x)))
+
+#define Abs(x) (fabs((x)))
+
+#define Exp(x) (exp((x)))
+#define Log(x) (log((x)))
+
+#define Sin(x) (sin((x)))
+#define Cos(x) (cos((x)))
+#define Tan(x) (tan((x)))
+
+#define ArcSin(x) (asin((x)))
+#define ArcCos(x) (acos((x)))
+#define ArcTan(x) (atan((x)))
+
+#define Sinh(x) (sinh((x)))
+#define Cosh(x) (cosh((x)))
+#define Tanh(x) (tanh((x)))
+
+
+#define E 2.71828182845904523536029
+#define Pi 3.14159265358979323846264
+
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/Startup.c b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/Startup.c
new file mode 100644
index 0000000..e54bcee
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/Startup.c
@@ -0,0 +1,60 @@
+/*@@
+ @file GenericFD/src/Startup.c
+ @date June 16 2002
+ @author S. Husa
+ @desc
+ Register Banner - straight copy of WaveToy
+
+ $Header$
+
+ @enddesc
+ @@*/
+
+/* Copyright 2004 Sascha Husa, Ian Hinder, Christiane Lechner
+
+ This file is part of Kranc.
+
+ Kranc is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Kranc is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Foobar; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include "cctk.h"
+#include "GenericFD.h"
+
+int GenericFD_Startup(void);
+
+/*@@
+ @routine GenericFD_Startup
+ @date June 16 2002
+ @author S. Husa
+ @desc
+
+ @enddesc
+ @calls
+ @calledby
+ @history
+ @endhistory
+ @@*/
+
+
+
+int GenericFD_Startup(void)
+{
+ const char *banner = "GenericFD: generic finite differencing";
+ CCTK_RegisterBanner(banner);
+
+
+ CCTK_INFO(FD_METHOD_DESC);
+ return 0;
+ }
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/make.code.defn b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/make.code.defn
new file mode 100644
index 0000000..ccff2fb
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/make.code.defn
@@ -0,0 +1,8 @@
+# Main make.code.defn file for thorn GenericFD
+# $Header$
+
+# Source files in this directory
+SRCS = Startup.c GenericFD.c
+
+# Subdirectories containing source files
+SUBDIRS =
diff --git a/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/testmacros.c b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/testmacros.c
new file mode 100644
index 0000000..3208ea0
--- /dev/null
+++ b/Auxiliary/Cactus/KrancNumericalTools/GenericFD/src/testmacros.c
@@ -0,0 +1,23 @@
+/* process me with something like
+ * cpp -DFD_C2 testmacros.c
+ */
+
+
+#include "GenericFD.h"
+
+
+dummy = D11loc(testfunc,i,j,k);
+
+dummy = D11gf(testfunc,i,j,k);
+
+dummy = D11_c2c4(testfunc,i,j,k);
+
+dummy = D11(testfunc,i,j,k);
+
+dummy = D31(testfunc,i,j,k);
+
+dummy = D1(testfunc,i,j,k);
+
+
+DECLAREVARS
+