aboutsummaryrefslogtreecommitdiff
path: root/m
diff options
context:
space:
mode:
Diffstat (limited to 'm')
-rw-r--r--m/McLachlan_BSSN.m156
1 files changed, 120 insertions, 36 deletions
diff --git a/m/McLachlan_BSSN.m b/m/McLachlan_BSSN.m
index 107ecd4..30cda03 100644
--- a/m/McLachlan_BSSN.m
+++ b/m/McLachlan_BSSN.m
@@ -110,7 +110,7 @@ Map [DefineTensor,
Rt, Rphi, gK,
T00, T0, T, rho, S,
x, y, z, r,
- epsdiss}];
+ epsdiss, Tet, Zet, dampk1k2}];
(* NOTE: It seems as if Lie[.,.] did not take these tensor weights
into account. Presumably, CD[.,.] and CDt[.,.] don't do this either. *)
@@ -191,7 +191,8 @@ evolvedGroups =
SetGroupName [CreateGroupFromTensor [alpha ], prefix <> "lapse" ],
SetGroupName [CreateGroupFromTensor [A ], prefix <> "dtlapse" ],
SetGroupName [CreateGroupFromTensor [beta[ua] ], prefix <> "shift" ],
- SetGroupName [CreateGroupFromTensor [B[ua] ], prefix <> "dtshift" ]};
+ SetGroupName [CreateGroupFromTensor [B[ua] ], prefix <> "dtshift" ],
+ SetGroupName [CreateGroupFromTensor [Tet ], prefix <> "Zenergy" ]};
evaluatedGroups =
{SetGroupName [CreateGroupFromTensor [H ], prefix <> "Ham"],
SetGroupName [CreateGroupFromTensor [M[la] ], prefix <> "mom"],
@@ -240,7 +241,8 @@ initialCalc =
alpha -> 1,
A -> 0,
beta[ua] -> 0,
- B[ua] -> 0
+ B[ua] -> 0,
+ Tet -> 0
}
};
@@ -367,7 +369,8 @@ initGammaCalc =
{
Xt[ua] -> 0,
A -> 0,
- B[ua] -> 0
+ B[ua] -> 0,
+ Tet -> 0
}
};
@@ -414,12 +417,13 @@ convertToADMBaseDtLapseShiftCalc =
(* see RHS *)
(*
admdtalpha -> - harmonicF alpha^harmonicN
- ((1 - LapseAdvectionCoeff) A + LapseAdvectionCoeff trK)
+ ((1 - LapseAdvectionCoeff) A
+ + LapseAdvectionCoeff (trK - 2 Tet))
+ LapseAdvectionCoeff beta[ua] PDu[alpha,la],
*)
admdtalpha -> - harmonicF alpha^harmonicN
(+ LapseACoeff A
- + (1 - LapseACoeff) trK)
+ + (1 - LapseACoeff) (trK - 2 Tet))
+ LapseAdvectionCoeff Upwind[beta[ua], alpha, la],
admdtbeta[ua] -> IfThen[harmonicShift,
- 1/2 gtu[ua,uj] phi alpha
@@ -455,11 +459,12 @@ convertToADMBaseDtLapseShiftBoundaryCalc =
(* see RHS, but omit derivatives near the boundary *)
(*
admdtalpha -> - harmonicF alpha^harmonicN
- ((1 - LapseAdvectionCoeff) A + LapseAdvectionCoeff trK),
+ ((1 - LapseAdvectionCoeff) A
+ + LapseAdvectionCoeff (trK - 2 Tet)),
*)
admdtalpha -> - harmonicF alpha^harmonicN
(+ LapseACoeff A
- + (1 - LapseACoeff) trK),
+ + (1 - LapseACoeff) (trK - 2 Tet)),
admdtbeta[ua] -> IfThen[harmonicShift,
0,
(* else *)
@@ -491,11 +496,12 @@ convertToADMBaseFakeDtLapseShiftCalc =
conditions) *)
(*
admdtalpha -> - harmonicF alpha^harmonicN
- ((1 - LapseAdvectionCoeff) A + LapseAdvectionCoeff trK),
+ ((1 - LapseAdvectionCoeff) A
+ + LapseAdvectionCoeff (trK - 2 Tet)),
*)
admdtalpha -> - harmonicF alpha^harmonicN
(+ LapseACoeff A
- + (1 - LapseACoeff) trK),
+ + (1 - LapseACoeff) (trK - 2 Tet)),
admdtbeta[ua] -> IfThen[harmonicShift,
0,
(* else *)
@@ -528,7 +534,8 @@ evolCalc =
Atm[ua,lb], Atu[ua,ub],
e4phi, em4phi, cdphi[la], cdphi2[la,lb], g[la,lb], detg,
gu[ua,ub], Ats[la,lb], trAts, eta, theta,
- rho, S[la], trS, fac1, fac2, dottrK, dotXt[ua], epsdiss[ua]},
+ rho, S[la], trS, fac1, fac2, dottrK, dotXt[ua],
+ epsdiss[ua], dotTet, Zet[ua], dampk1k2},
Equations ->
{
dir[ua] -> Sign[beta[ua]],
@@ -546,7 +553,21 @@ evolCalc =
used instead of Xt where no derivatives of Xt are taken *)
Xtn[ui] -> gtu[uj,uk] Gt[ui,lj,lk],
+ e4phi -> IfThen [conformalMethod, 1/phi^2, Exp[4 phi]],
+ em4phi -> 1 / e4phi,
+ g[la,lb] -> e4phi gt[la,lb],
+ detg -> detgExpr,
+ gu[ua,ub] -> em4phi gtu[ua,ub],
+
+ (* The Z quantities *)
+ (* gr-qc:1106.2254 (2011), eqn. (23) *)
+ Zet[ud] -> (1/2) gu[ua,ud] (-PD[gt[la,lb],lc] gtu[ub,uc] + gt[la,lc] Xt[uc]),
+
+ (* shorthand for the product of damping terms k1 and k2 in gr-qc:1106.2254 (2011) *)
+ dampk1k2 -> dampk1 dampk2,
+
(* PRD 62, 044034 (2000), eqn. (18) *)
+ (* Added Zet term by changing Xtn to Xt *)
Rt[li,lj] -> - (1/2) gtu[ul,um] PD[gt[li,lj],ll,lm]
+ (1/2) gt[lk,li] PD[Xt[uk],lj]
+ (1/2) gt[lk,lj] PD[Xt[uk],li]
@@ -570,15 +591,13 @@ evolCalc =
Atm[ua,lb] -> gtu[ua,uc] At[lc,lb],
Atu[ua,ub] -> Atm[ua,lc] gtu[ub,uc],
- e4phi -> IfThen [conformalMethod, 1/phi^2, Exp[4 phi]],
- em4phi -> 1 / e4phi,
- g[la,lb] -> e4phi gt[la,lb],
- detg -> detgExpr,
- (* gu[ua,ub] -> 1/detg detgExpr MatrixInverse [g[ua,ub]], *)
- gu[ua,ub] -> em4phi gtu[ua,ub],
-
- R[la,lb] -> Rt[la,lb] + Rphi[la,lb],
-
+ (* Added Zet terms *)
+ R[la,lb] -> Rt[la,lb] + Rphi[la,lb] +
+ (2/phi) (g[la,lc] Zet[uc] PD[phi,lb] +
+ g[lb,lc] Zet[uc] PD[phi,la] -
+ g[la,lb] Zet[uc] PD[phi,lc]) +
+ e4phi Zet[uc] PD[gt[la,lb],lc],
+
(* Matter terms *)
(* rho = n^a n^b T_ab *)
@@ -599,11 +618,16 @@ evolCalc =
+ IfThen [conformalMethod, -1/3 phi, 1/6] PD[beta[ua],la],
(* PRD 62, 044034 (2000), eqn. (9) *)
- dot[gt[la,lb]] -> - 2 alpha At[la,lb]
+ (* gr-qc:1106.2254 (2011), eqn. (14) *)
+ (* removing trA from Aij insures that detg = 1 *)
+ dot[gt[la,lb]] -> - 2 alpha (At[la,lb]
+ - (1/3) At[lc,ld] gtu[uc,ud] gt[la,lb])
+ gt[la,lc] PD[beta[uc],lb] + gt[lb,lc] PD[beta[uc],la]
- (2/3) gt[la,lb] PD[beta[uc],lc],
(* PRD 62, 044034 (2000), eqn. (20) *)
(* PRD 67 084023 (2003), eqn (26) *)
+ (* gr-qc:1106.2254 (2011), eqn. (19) *)
+ (* Added Zet terms by changing Xtn to Xt, and extra Zet and Tet terms *)
dotXt[ui] -> - 2 Atu[ui,uj] PD[alpha,lj]
+ 2 alpha (+ Gt[ui,lj,lk] Atu[uk,uj]
- (2/3) gtu[ui,uj] PD[trK,lj]
@@ -612,29 +636,52 @@ evolCalc =
+ (1/3) gtu[ui,uj] PD[beta[ul],lj,ll]
- Xtn[uj] PD[beta[ui],lj]
+ (2/3) Xtn[ui] PD[beta[uj],lj]
+ + gamashift (2 e4phi) (- Zet[uj] PD[beta[ui],lj]
+ + (2/3) Zet[ui] PD[beta[uj],lj])
+ - (4/3) alpha e4phi Zet[ui] trK
+ + 2 gtu[ui,uj] (alpha PD[Tet,lj] - Tet PD[alpha,lj])
+ - 2 alpha e4phi dampk1 Zet[ui]
(* Equation (4.28) in Baumgarte & Shapiro (Phys. Rept. 376 (2003) 41-131) *)
+ addMatter (- 16 pi alpha gtu[ui,uj] S[lj]),
dot[Xt[ui]] -> dotXt[ui],
+ (* Equation for Theta *)
+ (* gr-qc:1106.2254 (2011), eqn. (18) *)
+ dotTet -> - PD[alpha,la] Zet[ua]
+ + (1/2) alpha (gu[ua,ub] R[la,lb]
+ - Atm[ua,lb] Atm[ub,la] + (2/3) trK^2 - 2 trK Tet)
+ - dampk1 2 alpha Tet - dampk1k2 alpha Tet,
+
+ dot[Tet] -> dotTet,
+
(* PRD 62, 044034 (2000), eqn. (11) *)
+ (* gr-qc:1106.2254 (2011), eqn. (17) *)
+ (* Added the rhs of Tet to K, because K_Z4 = K_BSSN + 2 Tet. *)
+ (* And the Z term, as it has to cancel with the one in Tet *)
dottrK -> - em4phi ( gtu[ua,ub] ( PD[alpha,la,lb]
+ 2 cdphi[la] PD[alpha,lb] )
- Xtn[ua] PD[alpha,la] )
+ alpha (Atm[ua,lb] Atm[ub,la] + (1/3) trK^2)
+ + 2 dotTet + 2 PD[alpha,la] Zet[ua]
+ + dampk1 alpha Tet - dampk1k2 alpha Tet
(* Equation (4.21) in Baumgarte & Shapiro (Phys. Rept. 376 (2003) 41-131) *)
+ addMatter (4 pi alpha (rho + trS)),
dot[trK] -> dottrK,
(* PRD 62, 044034 (2000), eqn. (12) *)
(* TODO: Should we use the Hamiltonian constraint to make Rij tracefree? *)
+ (* gr-qc:1106.2254 (2011), eqn. (15) *)
+ (* Added Zet terms in the Ricci and Tet terms *)
Ats[la,lb] -> - CDt[alpha,la,lb] +
+ 2 (PD[alpha,la] cdphi[lb] + PD[alpha,lb] cdphi[la] )
+ alpha R[la,lb],
trAts -> gu[ua,ub] Ats[la,lb],
dot[At[la,lb]] -> + em4phi (+ Ats[la,lb] - (1/3) g[la,lb] trAts )
- + alpha (trK At[la,lb] - 2 At[la,lc] Atm[uc,lb])
+ + alpha ((trK - 2 Tet) At[la,lb] - 2 At[la,lc] Atm[uc,lb])
+ At[la,lc] PD[beta[uc],lb] + At[lb,lc] PD[beta[uc],la]
- (2/3) At[la,lb] PD[beta[uc],lc]
+ (* damping term in trA, alternative to trA cleaning *)
+ (* - (dampA/3) alpha At[lc,ld] gtu[uc,ud] gt[la,lb] *)
(* Equation (4.23) in Baumgarte & Shapiro (Phys. Rept. 376 (2003) 41-131) *)
+ addMatter (- em4phi alpha 8 pi
(T[la,lb] - (1/3) g[la,lb] trS)),
@@ -643,18 +690,19 @@ evolCalc =
(* dot[alpha] -> - harmonicF alpha^harmonicN A + Lie[alpha, beta], *)
(*
dot[alpha] -> - harmonicF alpha^harmonicN (
- (1 - LapseAdvectionCoeff) A + LapseAdvectionCoeff trK)
+ (1 - LapseAdvectionCoeff) A
+ + LapseAdvectionCoeff (trK - 2 Tet))
+ LapseAdvectionCoeff beta[ua] PDu[alpha,la],
- dot[A] -> (1 - LapseAdvectionCoeff) (dottrK - AlphaDriver A),
+ dot[A] -> (1 - LapseAdvectionCoeff) (dottrK - 2 dotTet - AlphaDriver A),
*)
dot[alpha] -> - harmonicF alpha^harmonicN
(+ LapseACoeff A
- + (1 - LapseACoeff) trK),
+ + (1 - LapseACoeff) (trK - 2 Tet)),
- dot[A] -> + LapseACoeff (dottrK - AlphaDriver A),
+ dot[A] -> + LapseACoeff (dottrK - 2 dotTet - AlphaDriver A),
eta -> etaExpr,
@@ -702,6 +750,8 @@ advectCalc =
dot[Xt[ui]] -> dot[Xt[ui]] + Upwind[beta[uj], Xt[ui], lj],
+ dot[Tet] -> dot[Tet] + Upwind[beta[ua], Tet, la],
+
dot[trK] -> dot[trK] + Upwind[beta[ua], trK, la],
dot[At[la,lb]] -> dot[At[la,lb]] + Upwind[beta[uc], At[la,lb], lc],
@@ -724,6 +774,7 @@ evolCalc1 = PartialCalculation[evolCalc, "1",
ConditionalOnKeyword -> {"RHS_calculation", "split"}
},
{
+ dot[Tet],
dot[trK],
dot[phi],
dot[gt[la,lb]],
@@ -755,7 +806,7 @@ dissCalc =
epsdiss[ua] -> EpsDiss,
Sequence@@Table[
dot[var] -> dot[var] + epsdiss[ux] PDdiss[var,lx],
- {var, {phi, gt[la,lb], Xt[ui], trK, At[la,lb], alpha, A, beta[ua], B[ua]}}]
+ {var, {phi, gt[la,lb], Xt[ui], trK, Tet, At[la,lb], alpha, A, beta[ua], B[ua]}}]
}
};
@@ -787,6 +838,7 @@ RHSStaticBoundaryCalc =
{
dot[phi] -> 0,
dot[gt[la,lb]] -> 0,
+ dot[Tet] -> 0,
dot[trK] -> 0,
dot[At[la,lb]] -> 0,
dot[Xt[ua]] -> 0,
@@ -809,6 +861,7 @@ initRHSCalc =
{
dot[phi] -> 0,
dot[gt[la,lb]] -> 0,
+ dot[Tet] -> 0,
dot[trK] -> 0,
dot[At[la,lb]] -> 0,
dot[Xt[ua]] -> 0,
@@ -848,6 +901,7 @@ RHSRadiativeBoundaryCalc =
dot[phi] -> - vg su[uc] PDo[phi ,lc],
dot[gt[la,lb]] -> - su[uc] PDo[gt[la,lb],lc],
+ dot[Tet] -> - vg su[uc] PDo[Tet ,lc],
dot[trK] -> - vg su[uc] PDo[trK ,lc],
dot[At[la,lb]] -> - su[uc] PDo[At[la,lb],lc],
dot[Xt[ua]] -> - su[uc] PDo[Xt[ua] ,lc],
@@ -899,6 +953,7 @@ boundaryCalc =
{
phi -> IfThen [conformalMethod, 1, 0],
gt[la,lb] -> KD[la,lb],
+ Tet -> 0,
trK -> 0,
At[la,lb] -> 0,
Xt[ua] -> 0,
@@ -925,7 +980,7 @@ constraintsCalc =
g[la,lb], detg, gu[ua,ub], ddetg[la], G[ua,lb,lc],
Rt[la,lb], Rphi[la,lb], R[la,lb], trR, Atm[ua,lb],
gK[la,lb,lc], cdphi[la], cdphi2[la,lb],
- rho, S[la], fac1, fac2},
+ rho, S[la], fac1, fac2, Zet[ua]},
Equations ->
{
detgt -> 1 (* detgtExpr *),
@@ -942,7 +997,17 @@ constraintsCalc =
used instead of Xt where no derivatives of Xt are taken *)
Xtn[ui] -> gtu[uj,uk] Gt[ui,lj,lk],
+ e4phi -> IfThen [conformalMethod, 1/phi^2, Exp[4 phi]],
+ em4phi -> 1 / e4phi,
+ g[la,lb] -> e4phi gt[la,lb],
+ detg -> e4phi^3,
+ gu[ua,ub] -> em4phi gtu[ua,ub],
+
+ (* The Z quantities *)
+ Zet[ud] -> (1/2) gu[ua,ud] (-PD[gt[la,lb],lc] gtu[ub,uc] + gt[la,lc] Xt[uc]),
+
(* PRD 62, 044034 (2000), eqn. (18) *)
+ (* Added Zet term by changing Xtn to Xt *)
Rt[li,lj] -> - (1/2) gtu[ul,um] PD[gt[li,lj],ll,lm]
+ (1/2) gt[lk,li] PD[Xt[uk],lj]
+ (1/2) gt[lk,lj] PD[Xt[uk],li]
@@ -985,13 +1050,6 @@ constraintsCalc =
+ 4 cdphi[li] cdphi[lj]
- 4 gt[li,lj] gtu[ul,un] cdphi[ln] cdphi[ll],
- e4phi -> IfThen [conformalMethod, 1/phi^2, Exp[4 phi]],
- em4phi -> 1 / e4phi,
- g[la,lb] -> e4phi gt[la,lb],
- (* detg -> detgExpr, *)
- (* gu[ua,ub] -> 1/detg detgExpr MatrixInverse [g[ua,ub]], *)
- detg -> e4phi^3,
- gu[ua,ub] -> em4phi gtu[ua,ub],
(* ddetg[la] -> PD[e4phi detg,la], *)
ddetg[la] -> e4phi ddetgt[la] + 4 detgt e4phi PD[phi,la],
(* TODO: check this equation, maybe simplify it by omitting ddetg *)
@@ -999,7 +1057,13 @@ constraintsCalc =
+ 1/(2 detg) (+ KD[ua,lb] ddetg[lc] + KD[ua,lc] ddetg[lb]
- (1/3) g[lb,lc] gu[ua,ud] ddetg[ld]),
- R[la,lb] -> Rt[la,lb] + Rphi[la,lb],
+ (* Added Zet terms *)
+ R[la,lb] -> Rt[la,lb] + Rphi[la,lb] +
+ (2/phi) (g[la,lc] Zet[uc] PD[phi,lb] +
+ g[lb,lc] Zet[uc] PD[phi,la] -
+ g[la,lb] Zet[uc] PD[phi,lc]) +
+ e4phi Zet[uc] PD[gt[la,lb],lc],
+
trR -> gu[ua,ub] R[la,lb],
(* K[la,lb] -> e4phi At[la,lb] + (1/3) g[la,lb] trK, *)
@@ -1252,6 +1316,26 @@ realParameters =
Description -> "Dissipation strength",
AllowedValues -> {{Value -> "(0:*", Description -> "Positive"}},
Default -> 0
+ },
+ {
+ Name -> dampk1,
+ Description -> "Damping term 1 in Tet and Zet",
+ Default -> 0
+ },
+ {
+ Name -> dampk2,
+ Description -> "Damping term 2 in Tet and Zet",
+ Default -> 0
+ },
+ {
+ Name -> gamashift,
+ Description -> "Covariant shift term in Gamma",
+ Default -> 0
+ },
+ {
+ Name -> dampA,
+ Description -> "Damping term trA",
+ Default -> 0
}
};