aboutsummaryrefslogtreecommitdiff
path: root/ML_BSSN
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2010-01-25 18:15:20 -0600
committerErik Schnetter <schnetter@cct.lsu.edu>2010-01-25 18:15:20 -0600
commit0636964c3ec727109081c1ebc1806135c56ffd8a (patch)
treedbe580249cd209f0408836ffca585b158d991860 /ML_BSSN
parent74c4da71a37320f29a158ab7edce7ed3d8ba8564 (diff)
parent77f234967fbcc6344888c8ef5f84d42adf7d1078 (diff)
Merge branch 'master' of /Users/eschnett/Cbeta/arrangements/McLachlan
Diffstat (limited to 'ML_BSSN')
-rw-r--r--ML_BSSN/interface.ccl6
-rw-r--r--ML_BSSN/param.ccl25
-rw-r--r--ML_BSSN/schedule.ccl11
-rw-r--r--ML_BSSN/src/ML_BSSN_Minkowski.c4
-rw-r--r--ML_BSSN/src/ML_BSSN_RHS.c8
-rw-r--r--ML_BSSN/src/ML_BSSN_convertFromADMBase.c4
-rw-r--r--ML_BSSN/src/ML_BSSN_setBetaDriver.c142
-rw-r--r--ML_BSSN/src/RegisterSymmetries.c5
-rw-r--r--ML_BSSN/src/make.code.defn2
9 files changed, 203 insertions, 4 deletions
diff --git a/ML_BSSN/interface.ccl b/ML_BSSN/interface.ccl
index 52de196..d31bcd8 100644
--- a/ML_BSSN/interface.ccl
+++ b/ML_BSSN/interface.ccl
@@ -25,6 +25,12 @@ CCTK_INT FUNCTION Boundary_SelectVarForBC(CCTK_POINTER_TO_CONST IN GH, CCTK_INT
USES FUNCTION Boundary_SelectVarForBC
public:
+CCTK_REAL ML_BetaDriver type=GF timelevels=1 tags='tensortypealias="Scalar" tensorweight=1.0000000000000000000'
+{
+ eta
+} "ML_BetaDriver"
+
+public:
CCTK_REAL ML_cons_detg type=GF timelevels=1 tags='tensortypealias="Scalar" tensorweight=2.0000000000000000000'
{
cS
diff --git a/ML_BSSN/param.ccl b/ML_BSSN/param.ccl
index 20c4887..8e791df 100644
--- a/ML_BSSN/param.ccl
+++ b/ML_BSSN/param.ccl
@@ -97,6 +97,12 @@ CCTK_REAL MinimumLapse "Minimum value of the lapse function"
} -1
restricted:
+CCTK_REAL SpatialBetaDriverRadius "Radius at which the BetaDriver starts to be reduced"
+{
+ "*:*" :: ""
+} 1000000000000
+
+restricted:
CCTK_INT harmonicN "d/dt alpha = - f alpha^n K (harmonic=2, 1+log=1)"
{
*:* :: ""
@@ -156,6 +162,13 @@ KEYWORD calculate_ADMBase_variables_at "calculate_ADMBase_variables_at"
"CCTK_ANALYSIS" :: "CCTK_ANALYSIS"
} "MoL_PostStep"
+restricted:
+KEYWORD UseSpatialBetaDriver "UseSpatialBetaDriver"
+{
+ "no" :: "no"
+ "yes" :: "yes"
+} "no"
+
private:
KEYWORD dt_lapse_shift_method "Treatment of ADMBase dtlapse and dtshift"
{
@@ -200,6 +213,12 @@ CCTK_INT ML_BSSN_convertFromADMBaseGamma_calc_every "ML_BSSN_convertFromADMBaseG
} 1
restricted:
+CCTK_INT ML_BSSN_setBetaDriver_calc_every "ML_BSSN_setBetaDriver_calc_every"
+{
+ *:* :: ""
+} 1
+
+restricted:
CCTK_INT ML_BSSN_RHS_calc_every "ML_BSSN_RHS_calc_every"
{
*:* :: ""
@@ -284,6 +303,12 @@ CCTK_INT ML_BSSN_convertFromADMBaseGamma_calc_offset "ML_BSSN_convertFromADMBase
} 0
restricted:
+CCTK_INT ML_BSSN_setBetaDriver_calc_offset "ML_BSSN_setBetaDriver_calc_offset"
+{
+ *:* :: ""
+} 0
+
+restricted:
CCTK_INT ML_BSSN_RHS_calc_offset "ML_BSSN_RHS_calc_offset"
{
*:* :: ""
diff --git a/ML_BSSN/schedule.ccl b/ML_BSSN/schedule.ccl
index 353cf71..f8a7f3b 100644
--- a/ML_BSSN/schedule.ccl
+++ b/ML_BSSN/schedule.ccl
@@ -1,6 +1,8 @@
# File produced by Kranc
+STORAGE: ML_BetaDriver[1]
+
STORAGE: ML_cons_detg[1]
STORAGE: ML_cons_Gamma[1]
@@ -365,6 +367,15 @@ if (CCTK_EQUALS(my_initial_data, "ADMBase"))
} "ML_BSSN_convertFromADMBaseGamma"
}
+
+if (CCTK_EQUALS(UseSpatialBetaDriver, "yes"))
+{
+ schedule ML_BSSN_setBetaDriver AT initial AFTER ADMBase_PostInitial AFTER ML_BSSN_convertFromADMBase
+ {
+ LANG: C
+ } "ML_BSSN_setBetaDriver"
+}
+
schedule ML_BSSN_RHS IN ML_BSSN_evolCalcGroup
{
LANG: C
diff --git a/ML_BSSN/src/ML_BSSN_Minkowski.c b/ML_BSSN/src/ML_BSSN_Minkowski.c
index 28229b7..759310a 100644
--- a/ML_BSSN/src/ML_BSSN_Minkowski.c
+++ b/ML_BSSN/src/ML_BSSN_Minkowski.c
@@ -108,6 +108,7 @@ void ML_BSSN_Minkowski_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_I
CCTK_REAL At11L = INITVALUE, At12L = INITVALUE, At13L = INITVALUE, At22L = INITVALUE, At23L = INITVALUE, At33L = INITVALUE;
CCTK_REAL B1L = INITVALUE, B2L = INITVALUE, B3L = INITVALUE;
CCTK_REAL beta1L = INITVALUE, beta2L = INITVALUE, beta3L = INITVALUE;
+ CCTK_REAL etaL = INITVALUE;
CCTK_REAL gt11L = INITVALUE, gt12L = INITVALUE, gt13L = INITVALUE, gt22L = INITVALUE, gt23L = INITVALUE, gt33L = INITVALUE;
CCTK_REAL phiL = INITVALUE;
CCTK_REAL trKL = INITVALUE;
@@ -177,6 +178,8 @@ void ML_BSSN_Minkowski_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_I
B3L = 0;
+ etaL = BetaDriver;
+
/* Copy local copies back to grid functions */
A[index] = AL;
@@ -193,6 +196,7 @@ void ML_BSSN_Minkowski_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_I
beta1[index] = beta1L;
beta2[index] = beta2L;
beta3[index] = beta3L;
+ eta[index] = etaL;
gt11[index] = gt11L;
gt12[index] = gt12L;
gt13[index] = gt13L;
diff --git a/ML_BSSN/src/ML_BSSN_RHS.c b/ML_BSSN/src/ML_BSSN_RHS.c
index 5dcf923..905b469 100644
--- a/ML_BSSN/src/ML_BSSN_RHS.c
+++ b/ML_BSSN/src/ML_BSSN_RHS.c
@@ -143,6 +143,7 @@ void ML_BSSN_RHS_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_INT con
CCTK_REAL At22L = INITVALUE, At22rhsL = INITVALUE, At23L = INITVALUE, At23rhsL = INITVALUE, At33L = INITVALUE, At33rhsL = INITVALUE;
CCTK_REAL B1L = INITVALUE, B1rhsL = INITVALUE, B2L = INITVALUE, B2rhsL = INITVALUE, B3L = INITVALUE, B3rhsL = INITVALUE;
CCTK_REAL beta1L = INITVALUE, beta1rhsL = INITVALUE, beta2L = INITVALUE, beta2rhsL = INITVALUE, beta3L = INITVALUE, beta3rhsL = INITVALUE;
+ CCTK_REAL etaL = INITVALUE;
CCTK_REAL gt11L = INITVALUE, gt11rhsL = INITVALUE, gt12L = INITVALUE, gt12rhsL = INITVALUE, gt13L = INITVALUE, gt13rhsL = INITVALUE;
CCTK_REAL gt22L = INITVALUE, gt22rhsL = INITVALUE, gt23L = INITVALUE, gt23rhsL = INITVALUE, gt33L = INITVALUE, gt33rhsL = INITVALUE;
CCTK_REAL phiL = INITVALUE, phirhsL = INITVALUE;
@@ -278,6 +279,7 @@ void ML_BSSN_RHS_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_INT con
beta1L = beta1[index];
beta2L = beta2[index];
beta3L = beta3[index];
+ etaL = eta[index];
gt11L = gt11[index];
gt12L = gt12[index];
gt13L = gt13[index];
@@ -1049,15 +1051,15 @@ void ML_BSSN_RHS_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_INT con
beta3rhsL = (PDupwindNth1(beta3, i, j, k)*beta1L + PDupwindNth2(beta3, i, j, k)*beta2L +
PDupwindNth3(beta3, i, j, k)*beta3L)*ShiftAdvectionCoeff + B3L*ShiftGammaCoeff;
- B1rhsL = -(B1L*BetaDriver) + ((PDupwindNth1(B1, i, j, k) - PDupwindNth1(Xt1, i, j, k))*beta1L +
+ B1rhsL = -(B1L*etaL) + ((PDupwindNth1(B1, i, j, k) - PDupwindNth1(Xt1, i, j, k))*beta1L +
(PDupwindNth2(B1, i, j, k) - PDupwindNth2(Xt1, i, j, k))*beta2L +
(PDupwindNth3(B1, i, j, k) - PDupwindNth3(Xt1, i, j, k))*beta3L)*ShiftAdvectionCoeff + Xt1rhsL;
- B2rhsL = -(B2L*BetaDriver) + ((PDupwindNth1(B2, i, j, k) - PDupwindNth1(Xt2, i, j, k))*beta1L +
+ B2rhsL = -(B2L*etaL) + ((PDupwindNth1(B2, i, j, k) - PDupwindNth1(Xt2, i, j, k))*beta1L +
(PDupwindNth2(B2, i, j, k) - PDupwindNth2(Xt2, i, j, k))*beta2L +
(PDupwindNth3(B2, i, j, k) - PDupwindNth3(Xt2, i, j, k))*beta3L)*ShiftAdvectionCoeff + Xt2rhsL;
- B3rhsL = -(B3L*BetaDriver) + ((PDupwindNth1(B3, i, j, k) - PDupwindNth1(Xt3, i, j, k))*beta1L +
+ B3rhsL = -(B3L*etaL) + ((PDupwindNth1(B3, i, j, k) - PDupwindNth1(Xt3, i, j, k))*beta1L +
(PDupwindNth2(B3, i, j, k) - PDupwindNth2(Xt3, i, j, k))*beta2L +
(PDupwindNth3(B3, i, j, k) - PDupwindNth3(Xt3, i, j, k))*beta3L)*ShiftAdvectionCoeff + Xt3rhsL;
diff --git a/ML_BSSN/src/ML_BSSN_convertFromADMBase.c b/ML_BSSN/src/ML_BSSN_convertFromADMBase.c
index 90cd41c..3d5e687 100644
--- a/ML_BSSN/src/ML_BSSN_convertFromADMBase.c
+++ b/ML_BSSN/src/ML_BSSN_convertFromADMBase.c
@@ -115,6 +115,7 @@ void ML_BSSN_convertFromADMBase_Body(cGH const * const cctkGH, CCTK_INT const di
CCTK_REAL betaxL = INITVALUE;
CCTK_REAL betayL = INITVALUE;
CCTK_REAL betazL = INITVALUE;
+ CCTK_REAL etaL = INITVALUE;
CCTK_REAL gt11L = INITVALUE, gt12L = INITVALUE, gt13L = INITVALUE, gt22L = INITVALUE, gt23L = INITVALUE, gt33L = INITVALUE;
CCTK_REAL gxxL = INITVALUE;
CCTK_REAL gxyL = INITVALUE;
@@ -239,6 +240,8 @@ void ML_BSSN_convertFromADMBase_Body(cGH const * const cctkGH, CCTK_INT const di
beta3L = betazL;
+ etaL = BetaDriver;
+
/* Copy local copies back to grid functions */
alpha[index] = alphaL;
@@ -251,6 +254,7 @@ void ML_BSSN_convertFromADMBase_Body(cGH const * const cctkGH, CCTK_INT const di
beta1[index] = beta1L;
beta2[index] = beta2L;
beta3[index] = beta3L;
+ eta[index] = etaL;
gt11[index] = gt11L;
gt12[index] = gt12L;
gt13[index] = gt13L;
diff --git a/ML_BSSN/src/ML_BSSN_setBetaDriver.c b/ML_BSSN/src/ML_BSSN_setBetaDriver.c
new file mode 100644
index 0000000..04a369a
--- /dev/null
+++ b/ML_BSSN/src/ML_BSSN_setBetaDriver.c
@@ -0,0 +1,142 @@
+/* File produced by Kranc */
+
+#define KRANC_C
+
+#include <assert.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+#include "GenericFD.h"
+#include "Differencing.h"
+#include "loopcontrol.h"
+
+/* Define macros used in calculations */
+#define INITVALUE (42)
+#define INV(x) ((1.0) / (x))
+#define SQR(x) ((x) * (x))
+#define CUB(x) ((x) * (x) * (x))
+#define QAD(x) ((x) * (x) * (x) * (x))
+
+void ML_BSSN_setBetaDriver_Body(cGH const * const cctkGH, CCTK_INT const dir, CCTK_INT const face, CCTK_REAL const normal[3], CCTK_REAL const tangentA[3], CCTK_REAL const tangentB[3], CCTK_INT const min[3], CCTK_INT const max[3], CCTK_INT const n_subblock_gfs, CCTK_REAL * const subblock_gfs[])
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+
+ /* Declare finite differencing variables */
+ CCTK_REAL dx = INITVALUE, dy = INITVALUE, dz = INITVALUE;
+ CCTK_REAL dxi = INITVALUE, dyi = INITVALUE, dzi = INITVALUE;
+ CCTK_REAL khalf = INITVALUE, kthird = INITVALUE, ktwothird = INITVALUE, kfourthird = INITVALUE, keightthird = INITVALUE;
+ CCTK_REAL hdxi = INITVALUE, hdyi = INITVALUE, hdzi = INITVALUE;
+
+
+ /* Declare predefined quantities */
+ CCTK_REAL p1o12dx = INITVALUE;
+ CCTK_REAL p1o12dy = INITVALUE;
+ CCTK_REAL p1o12dz = INITVALUE;
+ CCTK_REAL p1o144dxdy = INITVALUE;
+ CCTK_REAL p1o144dxdz = INITVALUE;
+ CCTK_REAL p1o144dydz = INITVALUE;
+ CCTK_REAL p1odx = INITVALUE;
+ CCTK_REAL p1ody = INITVALUE;
+ CCTK_REAL p1odz = INITVALUE;
+ CCTK_REAL pm1o12dx2 = INITVALUE;
+ CCTK_REAL pm1o12dy2 = INITVALUE;
+ CCTK_REAL pm1o12dz2 = INITVALUE;
+
+ if (verbose > 1)
+ {
+ CCTK_VInfo(CCTK_THORNSTRING,"Entering ML_BSSN_setBetaDriver_Body");
+ }
+
+ if (cctk_iteration % ML_BSSN_setBetaDriver_calc_every != ML_BSSN_setBetaDriver_calc_offset)
+ {
+ return;
+ }
+
+ /* Include user-supplied include files */
+
+ /* Initialise finite differencing variables */
+ dx = CCTK_DELTA_SPACE(0);
+ dy = CCTK_DELTA_SPACE(1);
+ dz = CCTK_DELTA_SPACE(2);
+ dxi = 1.0 / dx;
+ dyi = 1.0 / dy;
+ dzi = 1.0 / dz;
+ khalf = 0.5;
+ kthird = 1/3.0;
+ ktwothird = 2.0/3.0;
+ kfourthird = 4.0/3.0;
+ keightthird = 8.0/3.0;
+ hdxi = 0.5 * dxi;
+ hdyi = 0.5 * dyi;
+ hdzi = 0.5 * dzi;
+
+ /* Initialize predefined quantities */
+ p1o12dx = INV(dx)/12.;
+ p1o12dy = INV(dy)/12.;
+ p1o12dz = INV(dz)/12.;
+ p1o144dxdy = (INV(dx)*INV(dy))/144.;
+ p1o144dxdz = (INV(dx)*INV(dz))/144.;
+ p1o144dydz = (INV(dy)*INV(dz))/144.;
+ p1odx = INV(dx);
+ p1ody = INV(dy);
+ p1odz = INV(dz);
+ pm1o12dx2 = -pow(dx,-2)/12.;
+ pm1o12dy2 = -pow(dy,-2)/12.;
+ pm1o12dz2 = -pow(dz,-2)/12.;
+
+ /* Loop over the grid points */
+ #pragma omp parallel
+ LC_LOOP3 (ML_BSSN_setBetaDriver,
+ i,j,k, min[0],min[1],min[2], max[0],max[1],max[2],
+ cctk_lsh[0],cctk_lsh[1],cctk_lsh[2])
+ {
+ int index = INITVALUE;
+ int subblock_index = INITVALUE;
+ index = CCTK_GFINDEX3D(cctkGH,i,j,k);
+ subblock_index = i - min[0] + (max[0] - min[0]) * (j - min[1] + (max[1]-min[1]) * (k - min[2]));
+
+ /* Declare shorthands */
+
+ /* Declare local copies of grid functions */
+ CCTK_REAL etaL = INITVALUE;
+ CCTK_REAL rL = INITVALUE;
+ /* Declare precomputed derivatives*/
+
+ /* Declare derivatives */
+
+ /* Assign local copies of grid functions */
+ etaL = eta[index];
+ rL = r[index];
+
+ /* Assign local copies of subblock grid functions */
+
+ /* Include user supplied include files */
+
+ /* Precompute derivatives (new style) */
+
+ /* Precompute derivatives (old style) */
+
+ /* Calculate temporaries and grid functions */
+ etaL = etaL*IfThen(rL > SpatialBetaDriverRadius,SpatialBetaDriverRadius*INV(rL),1);
+
+
+ /* Copy local copies back to grid functions */
+ eta[index] = etaL;
+
+ /* Copy local copies back to subblock grid functions */
+ }
+ LC_ENDLOOP3 (ML_BSSN_setBetaDriver);
+}
+
+void ML_BSSN_setBetaDriver(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ GenericFD_LoopOverEverything(cctkGH, &ML_BSSN_setBetaDriver_Body);
+}
diff --git a/ML_BSSN/src/RegisterSymmetries.c b/ML_BSSN/src/RegisterSymmetries.c
index 20db895..16bd0d9 100644
--- a/ML_BSSN/src/RegisterSymmetries.c
+++ b/ML_BSSN/src/RegisterSymmetries.c
@@ -144,6 +144,11 @@ void ML_BSSN_RegisterSymmetries(CCTK_ARGUMENTS)
sym[0] = 1;
sym[1] = 1;
sym[2] = 1;
+ SetCartSymVN(cctkGH, sym, "ML_BSSN::eta");
+
+ sym[0] = 1;
+ sym[1] = 1;
+ sym[2] = 1;
SetCartSymVN(cctkGH, sym, "ML_BSSN::cS");
sym[0] = -1;
diff --git a/ML_BSSN/src/make.code.defn b/ML_BSSN/src/make.code.defn
index d4d4f44..461adc2 100644
--- a/ML_BSSN/src/make.code.defn
+++ b/ML_BSSN/src/make.code.defn
@@ -1,3 +1,3 @@
# File produced by Kranc
-SRCS = Startup.c RegisterMoL.c RegisterSymmetries.c ML_BSSN_Minkowski.c ML_BSSN_convertFromADMBase.c ML_BSSN_convertFromADMBaseGamma.c ML_BSSN_RHS.c ML_BSSN_RHSStaticBoundary.c ML_BSSN_RHSRadiativeBoundary.c ML_BSSN_enforce.c ML_BSSN_boundary.c ML_BSSN_convertToADMBase.c ML_BSSN_convertToADMBaseDtLapseShift.c ML_BSSN_convertToADMBaseDtLapseShiftBoundary.c ML_BSSN_convertToADMBaseFakeDtLapseShift.c ML_BSSN_constraints.c ML_BSSN_constraints_boundary.c Boundaries.c
+SRCS = Startup.c RegisterMoL.c RegisterSymmetries.c ML_BSSN_Minkowski.c ML_BSSN_convertFromADMBase.c ML_BSSN_convertFromADMBaseGamma.c ML_BSSN_setBetaDriver.c ML_BSSN_RHS.c ML_BSSN_RHSStaticBoundary.c ML_BSSN_RHSRadiativeBoundary.c ML_BSSN_enforce.c ML_BSSN_boundary.c ML_BSSN_convertToADMBase.c ML_BSSN_convertToADMBaseDtLapseShift.c ML_BSSN_convertToADMBaseDtLapseShiftBoundary.c ML_BSSN_convertToADMBaseFakeDtLapseShift.c ML_BSSN_constraints.c ML_BSSN_constraints_boundary.c Boundaries.c