#!/usr/bin/env python # coding: utf-8 # # # # # LaTeX Interface Example: BSSN (Cartesian) # # ## Author: Ken Sible # # ## This notebook demonstrates parsing BSSN (Cartesian) and validating against NRPy+. # [comment]: <> (**Notebook Status:** Not Validated ) # ### Covariant Formulation of BSSN # # \begin{align} # \partial_t \bar{\gamma}_{i j} &= \left[\beta^k \partial_k \bar{\gamma}_{i j} + \partial_i \beta^k \bar{\gamma}_{k j} + \partial_j \beta^k \bar{\gamma}_{i k} \right] + \frac{2}{3} \bar{\gamma}_{i j} \left(\alpha \bar{A}^k{}_k - \bar{D}_k \beta^k\right) - 2 \alpha \bar{A}_{i j} \\ # \partial_t \phi &= \left[\beta^k \partial_k \phi \right] + \frac{1}{6} \left(\bar{D}_k \beta^k - \alpha K \right) \\ # \partial_t K &= \left[\beta^k \partial_k K \right] + \frac{1}{3} \alpha K^2 + \alpha \bar{A}_{i j} \bar{A}^{i j} - e^{-4 \phi} \left(\bar{D}_i \bar{D}^i \alpha + 2 \bar{D}^i \alpha \bar{D}_i \phi \right) \\ # \partial_t \bar{\Lambda}^i &= \left[\beta^k \partial_k \bar{\Lambda}^i - \partial_k \beta^i \bar{\Lambda}^k \right] + \bar{\gamma}^{j k} \hat{D}_j \hat{D}_k \beta^i + \frac{2}{3} \Delta^i \bar{D}_j \beta^j + \frac{1}{3} \bar{D}^i \bar{D}_j \beta^j \\ # &\qquad - 2 \bar{A}^{i j} \left(\partial_j \alpha - 6 \partial_j \phi \right) + 2 \alpha \bar{A}^{j k} \Delta^i_{j k} - \frac{4}{3} \alpha \bar{\gamma}^{i j} \partial_j K \\ # \partial_t \bar{A}_{i j} &= \left[\beta^k \partial_k \bar{A}_{i j} + \partial_i \beta^k \bar{A}_{k j} + \partial_j \beta^k \bar{A}_{i k} \right] - \frac{2}{3} \bar{A}_{i j} \bar{D}_k \beta^k - 2 \alpha \bar{A}_{i k} \bar{A}^k{}_j + \alpha \bar{A}_{i j} K \\ # &\qquad + e^{-4 \phi} \left\{-2 \alpha \bar{D}_i \bar{D}_j \phi + 4 \alpha \bar{D}_i \phi \bar{D}_j \phi + 4 \bar{D}_{(i} \alpha \bar{D}_{j)} \phi - \bar{D}_i \bar{D}_j \alpha + \alpha \bar{R}_{i j} \right\}^{\text{TF}} \\ # \partial_t \alpha &= \left[\beta^k \partial_k \alpha \right] - 2 \alpha K \\ # \partial_t \beta^i &= \left[\beta^k \bar{D}_k \beta^i \right] + B^i \\ # \partial_t B^i &= \left[\beta^k \bar{D}_k B^i \right] + \frac{3}{4} \left(\partial_t \bar{\Lambda}^i - \left[\beta^k \bar{D}_k \bar{\Lambda}^i \right] \right) - \eta B^i \\ # \mathcal{H} &= \frac{2}{3} K^2 - \bar{A}_{ij} \bar{A}^{ij} + e^{-4\phi} \left(\bar{R} - 8 \bar{D}^i \phi \bar{D}_i \phi - 8 \bar{D}^2 \phi \right) \\ # \mathcal{M}^i &= e^{-4\phi} \left(\hat{D}_j \bar{A}^{ij} + 6 \bar{A}^{ij}\partial_j \phi - \frac{2}{3} \bar{\gamma}^{ij} \partial_j K + \bar{A}^{jk} \Delta^i_{jk} + \bar{A}^{ik} \Delta^j_{jk} \right) \\ # \bar{R}_{i j} &= - \frac{1}{2} \bar{\gamma}^{k l} \hat{D}_k \hat{D}_l \bar{\gamma}_{i j} + \bar{\gamma}_{k(i} \hat{D}_{j)} \bar{\Lambda}^k + \Delta^k \Delta_{(i j) k} + \bar{\gamma}^{k l} \left(2 \Delta_{k(i}^m \Delta_{j) m l} + \Delta_{i k}^m \Delta_{m j l} \right) # \end{align} # # # # Table of Contents # $$\label{toc}$$ # # - [Step 1](#step_1): Evolution Equation for $\partial_t \bar{\gamma}_{ij}$ # - [Step 2](#step_2): Evolution Equation for $\partial_t \phi$ # - [Step 3](#step_3): Evolution Equation for $\partial_t K$ # - [Step 4](#step_4): Evolution Equation for $\partial_t \bar{\Lambda}^i$ # - [Step 5](#step_5): Evolution Equation for $\partial_t \bar{A}_{ij}$ # - [Step 6](#step_6): Gauge Evolution Equation(s) # - [Step 7](#step_7): Constraint Equation(s) # - [Step 8](#step_8): Output Notebook to PDF # In[1]: get_ipython().system('pip install nrpylatex==1.0.8 > /dev/null') get_ipython().system('pip freeze | grep nrpylatex') get_ipython().run_line_magic('load_ext', 'nrpylatex.extension') # In[2]: from UnitTesting.assert_equal import assert_equal import NRPy_param_funcs as par, reference_metric as rfm import BSSN.BSSN_quantities as Bq import BSSN.BSSN_RHSs as Brhs import BSSN.BSSN_gauge_RHSs as gaugerhs import BSSN.BSSN_constraints as bssncon par.set_parval_from_str('reference_metric::CoordSystem', 'Cartesian') par.set_parval_from_str('BSSN.BSSN_quantities::LeaveRicciSymbolic', 'True') rfm.reference_metric() Brhs.BSSN_RHSs() gaugerhs.BSSN_gauge_RHSs() bssncon.BSSN_constraints() par.set_parval_from_str('BSSN.BSSN_quantities::LeaveRicciSymbolic', 'False') Bq.RicciBar__gammabarDD_dHatD__DGammaUDD__DGammaU() # We formatted the notebook in the following pedagogical scheme, shown below, to encourage a *learned* approach to parsing tensorial LaTeX. # ``` # (1) attempt to parse equation # (2) if ParseError or TensorError # debug error and goto (1) # (3) change equation and goto (1) # ``` # [YouTube Tutorial](https://www.youtube.com/watch?v=A9IWYpQe6Fo) (Notebook Walkthrough) # # # ## Step 1: Evolution Equation for $\partial_t \bar{\gamma}_{ij}$ [ [^](#top) ] # \begin{equation} # \partial_t \bar{\gamma}_{i j} = \left[\beta^k \partial_k \bar{\gamma}_{i j} + \partial_i \beta^k \bar{\gamma}_{k j} + \partial_j \beta^k \bar{\gamma}_{i k} \right] + \frac{2}{3} \bar{\gamma}_{i j} \left(\alpha \bar{A}^k{}_k - \bar{D}_k \beta^k\right) - 2 \alpha \bar{A}_{i j} # \end{equation} # In[3]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # First, attempt to parse the equation without any modification, and notice the `ParseError` for indexing an `undefined tensor 'gammabarDD'`. # # `gammabarDD :=` $ \bar{\gamma}_{ij} = h_{ij} + \hat{\gamma}_{ij} $ where `hDD` is the deviation from the flat 3D Cartesian metric `gammahatDD :=` $ \hat{\gamma}_{ij} = \delta_{ij} $. # # `vardef`: define a variable, including a derivative option and a (anti)symmetry option.
# `assign`: assign a `vardef` option to an already existing variable in the namespace.
# `parse`:   parse an equation without rendering that equation in a `.tex` document or a Jupyter Notebook. # # `-metric` can assign the symmetry `sym01` and automatically generate the metric inverse and determinant. # # 1. Define the Kronecker delta `deltaDD` using the `vardef` macro. # 1. Parse the equation $\hat{\gamma}_{ij} = \delta_{ij}$ using the `parse` macro. # 1. Assign the `-metric` option to `gammahatDD` using the `assign` macro. # # ``` # % vardef -kron 'deltaDD' # % parse \hat{\gamma}_{ij} = \delta_{ij} # % assign -diff_type=symbolic -metric 'gammahatDD' # ``` # # **Remark:** If a derivative option should also apply to the metric inverse and determinant, then that option should precede `-metric`. Moreover, you need not define a scalar quantity. However, should a scalar quantity require a `vardef` option, you may assign one using either the `vardef` or `assign` macro. # # 1. Define the deviation `hDD` using the `vardef` macro. # 1. Parse the equation $\bar{\gamma}_{ij} = h_{ij} + \hat{\gamma}_{ij}$ using the `parse` macro. # 1. Assign the `-metric` option to `gammabarDD` using the `assign` macro. # # ``` # % vardef -diff_type=dD -symmetry=sym01 'hDD' # % parse \bar{\gamma}_{ij} = h_{ij} + \hat{\gamma}_{ij} # % assign -diff_type=dD -metric 'gammabarDD' # ``` # In[4]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', "\n\\begin{align}\n % vardef -kron 'deltaDD'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric 'gammahatDD'\n % vardef -diff_type=dD -symmetry=sym01 'hDD'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric 'gammabarDD'\n\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n") # Next, replace every instance of `betaU` with `vetU`, a different variable name chosen for the SymPy output, using the `srepl` macro, and then define the variable `vetU` using the `vardef` macro. The `srepl` macro can preserve the original LaTeX representation while changing the variable name internally. # # **Remark:** If you require a variable name longer than one Latin or Greek letter, you should surround that variable name in the `\text` command. # # `srepl`: string replacement given the assumption that string `A` and string `B` are equal whenever they are equivalent syntactically # # Therefore, for example, `S_{a b} T^{b c}` and `S_{ab}T^{bc}` are considered equal according to the `srepl` macro. # # ``` # % srepl "\beta" -> "\text{vet}" # % vardef -diff_type=dD 'vetU' # ``` # # **Remark**: You can check "syntactic equivalence" for the `srepl` macro using the code snippet provided below. # # ``` # lexer = Lexer() # lexer.initialize(A) # syntax_A = [(lexer.lexeme, token) for token in lexer.tokenize()] # lexer.initialize(B) # syntax_B = [(lexer.lexeme, token) for token in lexer.tokenize()] # assert syntax_A == syntax_B # ``` # # `-persist` will apply the replacement rule `"..." -> "..."` to every subsequent input (internal or external) of the `parse` function. # # **Remark:** The `srepl` macro will *not* replace any text inside of a future `srepl` or `ignore` macro. # In[5]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # 1. Replace every instance of `AbarDD` with `aDD` using the `srepl` macro. # 1. Define the variable `aDD` (with symmetry `sym01`) using the `vardef` macro. # 1. Generate the variable `aUD` by assigning the metric `gammabar` to `aDD`. # # \begin{equation} # \bar{A}^i{}_j = \bar{\gamma}^{ik} \bar{A}_{kj} # \end{equation} # # ``` # % srepl "\bar{A}" -> "\text{a}" # % vardef -diff_type=dD -symmetry=sym01 'aDD' # % assign -metric='gammabar' 'aDD' # ``` # # **Remark**: The default metric for a variable is the metric associated with the diacritic (or lack thereof) in the variable name. In the current situation, we need to explicitly associate that metric since we removed the `bar` diacritic from the variable `AbarDD` using the `srepl` macro. # In[6]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # Next, replace the partial derivative $\partial_t \bar{\gamma}$ on the LHS with the variable name `h_rhs` using the `srepl` macro. # # ``` # % srepl "\partial_t \bar{\gamma}" -> "\text{h_rhs}" # ``` # # **Remark**: We received a `TensorError` that resulted from interpreting `t` as an index in the partial derivative $\partial_t \bar{\gamma}$ on the LHS. However, if the `basis` included the symbol `t`, then numeric indexing would have occurred, i.e. `t -> 0` provided that `basis = [t, x, y, z]` for example. # In[7]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # `keydef`: define a keyword, i.e. define a `basis` or coordinate system, or define an `index` range (for looping or summation). # # ``` # % keydef basis [x, y, z] # ``` # In[8]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # In[9]: try: assert_equal(h_rhsDD, Brhs.h_rhsDD) except AssertionError: print('Assertion Failed!') # Finally, we upwind every partial derivative in each instance of the pattern `\beta^{...} \partial_{...}`. To enforce upwinding inside of the bracketed term on the RHS where that pattern occurs, use the `vphantom` command to dynamically change the derivative type to upwinded. # # ``` # \partial_t \bar{\gamma}_{i j} &= \left[\beta^k \vphantom{dupD} \partial_k ... # ``` # # **Remark**: You could, alternatively, replace the bracketed term with the Lie derivative `\mathcal{L}_\beta \bar{\gamma}_{i j}`, allow automatic generation of that Lie derivative, and then use an `srepl` macro with the `-persist` option and (advanced) capture group syntax to upwind the aforementioned pattern. # # ``` # % srepl -persist "\text{vet}^<1> \partial_<1>" -> "\text{vet}^<1> \vphantom{dupD} \partial_<1>" # ``` # # To simplify the calculation of $\bar{D}_k \beta^k$, substitute a useful tensor identity for that contraction and apply the `-persist` option. # $$ \bar{D}_k \beta^k = \partial_k \beta^k + \beta^k \frac{\partial_k \hat{\gamma}}{2 \hat{\gamma}} $$ # ``` # %% replace '\bar{D}_k \beta^k' with contraction identity # % srepl "\bar{D}_k \text{vet}^k" -> "(\partial_k \text{vet}^k + \frac{\partial_k \text{gammahatdet} \text{vet}^k}{2 \text{gammahatdet}})" # ``` # In[10]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\\end{align}\n') # In[11]: assert_equal(h_rhsDD, Brhs.h_rhsDD) # # # ## Step 2: Evolution Equation for $\partial_t \phi$ [ [^](#top) ] # # \begin{equation} # \partial_t \phi = \left[\beta^k \partial_k \phi \right] + \frac{1}{6} \left(\bar{D}_k \beta^k - \alpha K \right) # \end{equation} # In[12]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n \\partial_t \\phi &= \\left[\\beta^k \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\\end{align}\n') # First, replace every instance of `phi` with the conformal factor `cf = W = e^{-2\phi}`, including every derivative (partial or covariant) of `phi`. # # \begin{equation} # \partial_t W = \partial_t e^{-2 \phi} = -2 e^{-2\phi} \partial_t \phi = -2 W \partial_t \phi \Rightarrow \partial_t \phi = - \frac{1}{2W} \partial_t W # \end{equation} # # ``` # %% replace 'phi' with conformal factor cf = W = e^{-2\phi} # % srepl "e^{-4\phi}" -> "\text{cf}^2" # % srepl "\partial_t \phi = <1..> \\" -> "\text{cf_rhs} = -2 \text{cf} (<1..>) \\" # % srepl -persist "\partial_{<1>} \phi" -> "\partial_{<1>} \text{cf} \frac{-1}{2 \text{cf}}" # % srepl "\partial_<1> \phi" -> "\partial_<1> \text{cf} \frac{-1}{2 \text{cf}}" # ``` # # **Remark**: We assigned the `-persist` option to the third `srepl` macro to replace the partial derivative inside of each covariant derivative of `phi`. # In[13]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n \\partial_t \\phi &= \\left[\\beta^k \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\\end{align}\n') # In[14]: try: assert_equal(cf_rhs, Brhs.cf_rhs) except AssertionError: print('Assertion Failed!') # Next, enforce upwinding on the contracted partial derivative inside of the bracketed term using the `vphantom` command. # # ``` # \partial_t \phi &= \left[\beta^k \vphantom{dupD} \partial_k ... # ``` # # Finally, replace every instance of `K` with `trK` using the `srepl` macro. # # ``` # % srepl "K" -> "\text{trK}" # ``` # In[15]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j} \\left(\\alpha\n \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\\end{align}\n') # In[16]: assert_equal(cf_rhs, Brhs.cf_rhs) # # # ## Step 3: Evolution Equation for $\partial_t K$ [ [^](#top) ] # # \begin{equation} # \partial_t K = \left[\beta^k \partial_k K \right] + \frac{1}{3} \alpha K^2 + \alpha \bar{A}_{i j} # \bar{A}^{i j} - e^{-4 \phi} \left(\bar{D}_i \bar{D}^i \alpha + 2 \bar{D}^i \alpha \bar{D}_i \phi \right) # \end{equation} # In[17]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n \\partial_t K &= \\left[\\beta^k \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\\end{align}\n') # First, replace the partial derivative $\partial_t K$ on the LHS with the variable name `trK_rhs` using the `srepl` macro. # # ``` # % srepl "\partial_t \text{trK}" -> "\text{trK_rhs}" # ``` # In[18]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\\end{align}\n') # In[19]: try: assert_equal(trK_rhs, Brhs.trK_rhs) except AssertionError: print('Assertion Failed!') # Next, enforce upwinding on the contracted partial derivative inside of the bracketed term using the `vphantom` command. # # ``` # \partial_t K &= \left[\beta^k \vphantom{dupD} \partial_k K ... # ``` # # Finally, assign the property `-diff_type=dD` to `cf`, `trK`, and `alpha` using the `assign` macro. # In[20]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\\end{align}\n') # In[21]: assert_equal(trK_rhs, Brhs.trK_rhs) # # # ## Step 4: Evolution Equation for $\partial_t \bar{\Lambda}^i$ [ [^](#top) ] # # \begin{align} # \partial_t \bar{\Lambda}^i &= \left[\beta^k \partial_k \bar{\Lambda}^i - \partial_k \beta^i \bar{\Lambda}^k \right] + \bar{\gamma}^{j k} \hat{D}_j \hat{D}_k \beta^i + \frac{2}{3} \Delta^i \bar{D}_j \beta^j + \frac{1}{3} \bar{D}^i \bar{D}_j \beta^j \\ # &\qquad - 2 \bar{A}^{i j} \left(\partial_j \alpha - 6 \partial_j \phi \right) + 2 \alpha \bar{A}^{j k} \Delta_{j k}^i - \frac{4}{3} \alpha \bar{\gamma}^{i j} \partial_j K # \end{align} # In[22]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # First, replace every instance of `LambdabarU` with `lambdaU` using the `srepl` macro, and then define the variable `lambdaU` using the `vardef` macro. # # ``` # % srepl "\bar{\Lambda}" -> "\text{lambda}" # % vardef -diff_type=dD 'lambdaU' # ``` # In[23]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # 1. Parse $ \Delta^k_{ij} = \bar{\Gamma}^k_{ij} - \hat{\Gamma}^k_{ij} $ using the `parse` macro to define `DeltaUDD`. # 1. Parse $ \Delta^k = \bar{\gamma}^{ij} \Delta^k_{ij} $ (contraction of `DeltaUDD`) using the `parse` macro to define `DeltaU`. # # ``` # % parse \Delta^k_{ij} = \bar{\Gamma}^k_{ij} - \hat{\Gamma}^k_{ij} # % parse \Delta^k = \bar{\gamma}^{ij} \Delta^k_{ij} # ``` # In[24]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij} \\\\\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # Next, replace the partial derivative $\partial_t \bar{\Lambda}$ on the LHS with the variable name `Lambdabar_rhs` using the `srepl` macro. # # ``` # % srepl "\partial_t \text{lambda}" -> "\text{Lambdabar_rhs}" # ``` # In[25]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # Next, internally remove the formatting command `\qquad` using the `ignore` macro. # # `ignore`: remove a LaTeX command or substring; equivalent to `srepl "..." -> ""` (empty replacement). # # ``` # % ignore "\qquad" # ``` # In[26]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # Next, append a percent symbol `%` to the end of the line break preceding `\qquad`, and then remove that custom line break `\\%` using the `ignore` macro. # # ``` # % ignore "\\%" # ``` # # **Remark**: You cannot split an equation across a line break, and hence we removed that line break internally using the `ignore` macro. # In[27]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # In[28]: try: assert_equal(Lambdabar_rhsU, Brhs.Lambdabar_rhsU) except AssertionError: print('Assertion Failed!') # Finally, enforce upwinding on the contracted partial derivative inside of the bracketed term using the `vphantom` command. # # ``` # \partial_t \bar{\Lambda}^i &= \left[\beta^k \vphantom{dupD} \partial_k ... # ``` # In[29]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\\end{align}\n') # In[30]: assert_equal(Lambdabar_rhsU, Brhs.Lambdabar_rhsU) # # # ## Step 5: Evolution Equation for $\partial_t \bar{A}_{ij}$ [ [^](#top) ] # # \begin{align} # \partial_t \bar{A}_{i j} &= \left[\beta^k \partial_k \bar{A}_{i j} + \partial_i \beta^k \bar{A}_{k j} + \partial_j \beta^k \bar{A}_{i k} \right] - \frac{2}{3} \bar{A}_{i j} \bar{D}_k \beta^k - 2 \alpha \bar{A}_{i k} \bar{A}^k{}_j + \alpha \bar{A}_{i j} K \\ # &\qquad + e^{-4 \phi} \left\{-2 \alpha \bar{D}_i \bar{D}_j \phi + 4 \alpha \bar{D}_i \phi \bar{D}_j \phi + 4 \bar{D}_{(i} \alpha \bar{D}_{j)} \phi - \bar{D}_i \bar{D}_j \alpha + \alpha \bar{R}_{i j} \right\}^{\text{TF}} # \end{align} # # **Remark**: We must manually expand the trace-free term $ \{\ldots\}^{TF} $ and the symmetric term $ \bar{D}_{(i} \alpha \bar{D}_{j)} $ since neither notation is currenlty supported. # # \begin{gather} # \bar{D}_{(i} \alpha \bar{D}_{j)} = \frac{1}{2} \left(\bar{D}_i \alpha \bar{D}_j + \bar{D}_j \alpha \bar{D}_i \right) \\ # X_{i j} = -2 \alpha \bar{D}_i \bar{D}_j \phi + 4 \alpha \bar{D}_i \phi \bar{D}_j \phi + 2 \bar{D}_i \alpha \bar{D}_j \phi + 2 \bar{D}_j \alpha \bar{D}_i \phi - \bar{D}_i \bar{D}_j \alpha + \alpha \bar{R}_{i j} \\ # \hat{X}_{i j} = X_{i j} - \frac{1}{3} \bar{\gamma}_{i j} \bar{\gamma}^{k l} X_{k l} \\ # \partial_t \bar{A}_{i j} = \left[\beta^k \partial_k \bar{A}_{i j} + \partial_i \beta^k \bar{A}_{k j} + \partial_j \beta^k \bar{A}_{i k} \right] - \frac{2}{3} \bar{A}_{i j} \bar{D}_k \beta^k - 2 \alpha \bar{A}_{i k} \bar{A}^k{}_j + \alpha \bar{A}_{i j} K + e^{-4 \phi} \hat{X}_{i j} # \end{gather} # In[31]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\n X_{i j} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi + 2 \\bar{D}_i \\alpha\n \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{i j} \\\\\n \\hat{X}_{i j} &= X_{i j} - \\frac{1}{3} \\bar{\\gamma}_{i j} \\bar{\\gamma}^{k l} X_{k l} \\\\\n \\partial_t \\bar{A}_{i j} &= \\left[\\beta^k \\partial_k \\bar{A}_{i j} + \\partial_i \\beta^k \\bar{A}_{k j} + \\partial_j \\beta^k\n \\bar{A}_{i k} \\right] - \\frac{2}{3} \\bar{A}_{i j} \\bar{D}_k \\beta^k - 2 \\alpha \\bar{A}_{i k}\n \\bar{A}^k{}_j + \\alpha \\bar{A}_{i j} K + e^{-4 \\phi} \\hat{X}_{i j} \\\\\n\\end{align}\n') # First, define the variable `RbarDD` (with symmetry `sym01`) using the `vardef` macro. # # ``` # % vardef -diff_type=dD -symmetry=sym01 'RbarDD' # ``` # In[32]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\n % vardef -diff_type=dD -symmetry=sym01 \'RbarDD\'\n X_{i j} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi + 2 \\bar{D}_i \\alpha\n \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{i j} \\\\\n \\hat{X}_{i j} &= X_{i j} - \\frac{1}{3} \\bar{\\gamma}_{i j} \\bar{\\gamma}^{k l} X_{k l} \\\\\n \\partial_t \\bar{A}_{i j} &= \\left[\\beta^k \\partial_k \\bar{A}_{i j} + \\partial_i \\beta^k \\bar{A}_{k j} + \\partial_j \\beta^k\n \\bar{A}_{i k} \\right] - \\frac{2}{3} \\bar{A}_{i j} \\bar{D}_k \\beta^k - 2 \\alpha \\bar{A}_{i k}\n \\bar{A}^k{}_j + \\alpha \\bar{A}_{i j} K + e^{-4 \\phi} \\hat{X}_{i j} \\\\\n\\end{align}\n') # Next, replace the partial derivative $\partial_t \bar{A}_{i j}$ on the LHS with the variable name `a_rhs` using the `srepl` macro. # # ``` # % srepl "\partial_t \bar{A}_{i j}" -> "\text{a_rhs}" # ``` # In[33]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\n % vardef -diff_type=dD -symmetry=sym01 \'RbarDD\'\n X_{i j} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi + 2 \\bar{D}_i \\alpha\n \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{i j} \\\\\n \\hat{X}_{i j} &= X_{i j} - \\frac{1}{3} \\bar{\\gamma}_{i j} \\bar{\\gamma}^{k l} X_{k l} \\\\\n % srepl "\\partial_t \\text{a}" -> "\\text{a_rhs}"\n \\partial_t \\bar{A}_{i j} &= \\left[\\beta^k \\partial_k \\bar{A}_{i j} + \\partial_i \\beta^k \\bar{A}_{k j} + \\partial_j \\beta^k\n \\bar{A}_{i k} \\right] - \\frac{2}{3} \\bar{A}_{i j} \\bar{D}_k \\beta^k - 2 \\alpha \\bar{A}_{i k}\n \\bar{A}^k{}_j + \\alpha \\bar{A}_{i j} K + e^{-4 \\phi} \\hat{X}_{i j} \\\\\n\\end{align}\n') # In[34]: try: assert_equal(a_rhsDD, Brhs.a_rhsDD) except AssertionError: print('Assertion Failed!') # Finally, enforce upwinding on the contracted partial derivative inside of the bracketed term using the `vphantom` command. # # ``` # \partial_t \bar{A}_{i j} &= \left[\beta^k \vphantom{dupD} \partial_k ... # ``` # In[35]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\n % vardef -diff_type=dD -symmetry=sym01 \'RbarDD\'\n X_{i j} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi + 2 \\bar{D}_i \\alpha\n \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{i j} \\\\\n \\hat{X}_{i j} &= X_{i j} - \\frac{1}{3} \\bar{\\gamma}_{i j} \\bar{\\gamma}^{k l} X_{k l} \\\\\n % srepl "\\partial_t \\text{a}" -> "\\text{a_rhs}"\n \\partial_t \\bar{A}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{A}_{i j} + \\partial_i \\beta^k \\bar{A}_{k j} + \\partial_j \\beta^k\n \\bar{A}_{i k} \\right] - \\frac{2}{3} \\bar{A}_{i j} \\bar{D}_k \\beta^k - 2 \\alpha \\bar{A}_{i k}\n \\bar{A}^k{}_j + \\alpha \\bar{A}_{i j} K + e^{-4 \\phi} \\hat{X}_{i j} \\\\\n\\end{align}\n') # In[36]: assert_equal(a_rhsDD, Brhs.a_rhsDD) # # # ## Step 6: Gauge Evolution Equation(s) [ [^](#top) ] # # \begin{align} # \partial_t \alpha &= \left[\beta^k \partial_k \alpha \right] - 2 \alpha K \\ # \partial_t \beta^i &= \left[\beta^k \bar{D}_k \beta^i \right] + B^i \\ # \partial_t B^i &= \left[\beta^k \bar{D}_k B^i \right] + \frac{3}{4} \left(\partial_t \bar{\Lambda}^i - \left[\beta^k \bar{D}_k \bar{\Lambda}^i \right] \right) - \eta B^i # \end{align} # In[37]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % srepl "\\beta" -> "\\text{vet}"\n % vardef -diff_type=dD \'vetU\'\n %% replace \'\\bar{D}_k \\beta^k\' with contraction identity\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % srepl "\\bar{A}" -> "\\text{a}"\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % assign -metric=\'gammabar\' \'aDD\'\n\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n \\partial_t \\bar{\\gamma}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\gamma}_{i j} + \\partial_i \\beta^k\n \\bar{\\gamma}_{k j} + \\partial_j \\beta^k \\bar{\\gamma}_{i k} \\right] + \\frac{2}{3} \\bar{\\gamma}_{i j}\n \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right) - 2 \\alpha \\bar{A}_{i j} \\\\\n\n % assign -diff_type=dD \'cf\'\n %% replace \'phi\' with conformal factor cf = W = e^{-2\\phi}\n % srepl "e^{-4 \\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n % srepl "K" -> "\\text{trK}"\n % assign -diff_type=dD \'trK\'\n \\partial_t \\phi &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\phi \\right] + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % assign -diff_type=dD \'alpha\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\left[\\beta^k \\vphantom{dupD} \\partial_k K \\right] + \\frac{1}{3} \\alpha K^2 + \\alpha \\bar{A}_{i j}\n \\bar{A}^{i j} - e^{-4 \\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi \\right) \\\\\n\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % vardef -diff_type=dD \'lambdaU\'\n\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{\\Lambda}^i - \\partial_k \\beta^i \\bar{\\Lambda}^k \\right] +\n \\bar{\\gamma}^{j k} \\hat{D}_j \\hat{D}_k \\beta^i + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad - 2 \\bar{A}^{i j} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi \\right) + 2 \\alpha\n \\bar{A}^{j k} \\Delta^i_{j k} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{i j} \\partial_j K \\\\\n\n % vardef -diff_type=dD -symmetry=sym01 \'RbarDD\'\n X_{i j} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi + 2 \\bar{D}_i \\alpha\n \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{i j} \\\\\n \\hat{X}_{i j} &= X_{i j} - \\frac{1}{3} \\bar{\\gamma}_{i j} \\bar{\\gamma}^{k l} X_{k l} \\\\\n % srepl "\\partial_t \\text{a}" -> "\\text{a_rhs}"\n \\partial_t \\bar{A}_{i j} &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\bar{A}_{i j} + \\partial_i \\beta^k \\bar{A}_{k j} + \\partial_j \\beta^k\n \\bar{A}_{i k} \\right] - \\frac{2}{3} \\bar{A}_{i j} \\bar{D}_k \\beta^k - 2 \\alpha \\bar{A}_{i k}\n \\bar{A}^k{}_j + \\alpha \\bar{A}_{i j} K + e^{-4 \\phi} \\hat{X}_{i j} \\\\\n\n % srepl "\\partial_t \\alpha" -> "\\text{alpha_rhs}"\n \\partial_t \\alpha &= \\left[\\beta^k \\vphantom{dupD} \\partial_k \\alpha \\right] - 2 \\alpha K \\\\\n\n % srepl "B" -> "\\text{bet}"\n % vardef -diff_type=dD \'betU\'\n % srepl "\\partial_t \\text{vet}" -> "\\text{vet_rhs}"\n \\partial_t \\beta^i &= \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j \\beta^i \\right] + B^i \\\\\n\n % vardef -const \'eta\'\n % srepl "\\partial_t \\text{bet}" -> "\\text{bet_rhs}"\n \\partial_t B^i &= \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j B^i \\right] + \\frac{3}{4} \\left(\\partial_t \\bar{\\Lambda}^i - \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j \\bar{\\Lambda}^i \\right] \\right) - \\eta B^i \\\\\n\\end{align}\n') # In[38]: assert_equal(alpha_rhs, gaugerhs.alpha_rhs) # In[39]: assert_equal(vet_rhsU, gaugerhs.vet_rhsU) # In[40]: assert_equal(bet_rhsU, gaugerhs.bet_rhsU) # # # ## Step 7: Constraint Equation(s) [ [^](#top) ] # # \begin{align} # \mathcal{H} &= \frac{2}{3} K^2 - \bar{A}_{ij} \bar{A}^{ij} + e^{-4\phi} \left(\bar{R} - 8 \bar{D}^i \phi \bar{D}_i \phi - 8 \bar{D}^2 \phi \right) \\ # \mathcal{M}^i &= e^{-4\phi} \left(\hat{D}_j \bar{A}^{ij} + 6 \bar{A}^{ij}\partial_j \phi - \frac{2}{3} \bar{\gamma}^{ij} \partial_j K + \bar{A}^{jk} \Delta^i_{jk} + \bar{A}^{ik} \Delta^j_{jk} \right) # \end{align} # In[41]: get_ipython().run_cell_magic('parse_latex', '--reset --ignore-warning', '\n\\begin{align}\n % keydef basis [x, y, z]\n % ignore "\\\\%", "\\qquad"\n\n % vardef -kron \'deltaDD\'\n % parse \\hat{\\gamma}_{ij} = \\delta_{ij}\n % assign -diff_type=symbolic -metric \'gammahatDD\'\n % vardef -diff_type=dD -symmetry=sym01 \'hDD\'\n % parse \\bar{\\gamma}_{ij} = h_{ij} + \\hat{\\gamma}_{ij}\n % assign -diff_type=dD -metric \'gammabarDD\'\n\n % vardef -diff_type=dD \'vetU\'\n % srepl "\\beta" -> "\\text{vet}"\n %% upwind pattern inside Lie derivative expansion\n % srepl -persist "\\text{vet}^<1> \\partial_<1>" -> "\\text{vet}^<1> \\vphantom{dupD} \\partial_<1>"\n %% substitute tensor identity (see appropriate BSSN notebook)\n % srepl "\\bar{D}_k \\text{vet}^k" -> "(\\partial_k \\text{vet}^k + \\frac{\\partial_k \\text{gammahatdet} \\text{vet}^k}{2 \\text{gammahatdet}})"\n\n % vardef -diff_type=dD \'alpha\'\n % vardef -diff_type=dD -symmetry=sym01 \'aDD\'\n % srepl "\\bar{A}" -> "\\text{a}"\n % parse \\bar{A}^i_j = \\bar{\\gamma}^{ik} \\bar{A}_{kj}\n % assign -diff_type=dD \'aUD\'\n % srepl "\\partial_t \\bar{\\gamma}" -> "\\text{h_rhs}"\n\n \\partial_t \\bar{\\gamma}_{ij} &= \\mathcal{L}_\\beta \\bar{\\gamma}_{ij}\n + \\frac{2}{3} \\bar{\\gamma}_{ij} \\left(\\alpha \\bar{A}^k{}_k - \\bar{D}_k \\beta^k\\right)\n - 2 \\alpha \\bar{A}_{ij} \\\\\n\n % vardef -diff_type=dD \'cf\', \'trK\'\n % srepl "K" -> "\\text{trK}"\n %% replace \'phi\' with conformal factor cf = W = e^{{-2\\phi}}\n % srepl "e^{-4\\phi}" -> "\\text{cf}^2"\n % srepl "\\partial_t \\phi = <1..> \\\\" -> "\\text{cf_rhs} = -2 \\text{cf} (<1..>) \\\\"\n % srepl -persist "\\partial_{<1>} \\phi" -> "\\partial_{<1>} \\text{cf} \\frac{-1}{2 \\text{cf}}"\n % srepl "\\partial_<1> \\phi" -> "\\partial_<1> \\text{cf} \\frac{-1}{2 \\text{cf}}"\n\n \\partial_t \\phi &= \\mathcal{L}_\\beta \\phi\n + \\frac{1}{6} \\left(\\bar{D}_k \\beta^k - \\alpha K \\right) \\\\\n\n % parse \\bar{A}^{ij} = \\bar{\\gamma}^{jk} \\bar{A}^i_k\n % assign -diff_type=dD \'aUU\'\n % srepl "\\partial_t \\text{trK}" -> "\\text{trK_rhs}"\n \\partial_t K &= \\mathcal{L}_\\beta K\n + \\frac{1}{3} \\alpha K^2\n + \\alpha \\bar{A}_{ij} \\bar{A}^{ij}\n - e^{-4\\phi} \\left(\\bar{D}_i \\bar{D}^i \\alpha + 2 \\bar{D}^i \\alpha \\bar{D}_i \\phi\\right) \\\\\n\n % vardef -diff_type=dD \'lambdaU\'\n % srepl "\\bar{\\Lambda}" -> "\\text{lambda}"\n % parse \\Delta^k_{ij} = \\bar{\\Gamma}^k_{ij} - \\hat{\\Gamma}^k_{ij}\n % parse \\Delta_{ijk} = \\bar{\\gamma}_{il} \\Delta^l_{jk}\n % parse \\Delta^k = \\bar{\\gamma}^{ij} \\Delta^k_{ij}\n % srepl "\\partial_t \\text{lambda}" -> "\\text{Lambdabar_rhs}"\n \\partial_t \\bar{\\Lambda}^i &= \\mathcal{L}_\\beta \\bar{\\Lambda}^i + \\bar{\\gamma}^{jk} \\hat{D}_j \\hat{D}_k \\beta^i\n + \\frac{2}{3} \\Delta^i \\bar{D}_k \\beta^k + \\frac{1}{3} \\bar{D}^i \\bar{D}_k \\beta^k \\\\%\n &\\qquad- 2 \\bar{A}^{ij} \\left(\\partial_j \\alpha - 6 \\alpha \\partial_j \\phi\\right)\n + 2 \\alpha \\bar{A}^{jk} \\Delta^i_{jk} - \\frac{4}{3} \\alpha \\bar{\\gamma}^{ij} \\partial_j K \\\\\n\n % vardef -diff_type=dD -symmetry=sym01 \'RbarDD\'\n X_{ij} &= -2 \\alpha \\bar{D}_i \\bar{D}_j \\phi + 4 \\alpha \\bar{D}_i \\phi \\bar{D}_j \\phi\n + 2 \\bar{D}_i \\alpha \\bar{D}_j \\phi + 2 \\bar{D}_j \\alpha \\bar{D}_i \\phi\n - \\bar{D}_i \\bar{D}_j \\alpha + \\alpha \\bar{R}_{ij} \\\\\n \\hat{X}_{ij} &= X_{ij} - \\frac{1}{3} \\bar{\\gamma}_{ij} \\bar{\\gamma}^{kl} X_{kl} \\\\\n % srepl "\\partial_t \\text{a}" -> "\\text{a_rhs}"\n \\partial_t \\bar{A}_{ij} &= \\mathcal{L}_\\beta \\bar{A}_{ij}\n - \\frac{2}{3} \\bar{A}_{ij} \\bar{D}_k \\beta^k\n - 2 \\alpha \\bar{A}_{ik} \\bar{A}^k_j\n + \\alpha \\bar{A}_{ij} K\n + e^{-4\\phi} \\hat{X}_{ij} \\\\\n\n % srepl "\\partial_t \\alpha" -> "\\text{alpha_rhs}"\n \\partial_t \\alpha &= \\mathcal{L}_\\beta \\alpha - 2 \\alpha K \\\\\n\n % vardef -diff_type=dD \'betU\'\n % srepl "B" -> "\\text{bet}"\n % srepl "\\partial_t \\text{vet}" -> "\\text{vet_rhs}"\n \\partial_t \\beta^i &= \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j \\beta^i\\right] + B^i \\\\\n\n % vardef -const \'eta\'\n % srepl "\\partial_t \\text{bet}" -> "\\text{bet_rhs}"\n \\partial_t B^i &= \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j B^i\\right]\n + \\frac{3}{4} \\left(\\partial_t \\bar{\\Lambda}^i - \\left[\\beta^j \\vphantom{dupD} \\bar{D}_j \\bar{\\Lambda}^i\\right]\\right)\n - \\eta B^i \\\\\n\n % parse \\bar{R} = \\bar{\\gamma}^{ij} \\bar{R}_{ij}\n % srepl "\\bar{D}^2" -> "\\bar{D}^i \\bar{D}_i", "\\mathcal{<1>}" -> "<1>"\n \\mathcal{H} &= \\frac{2}{3} K^2 - \\bar{A}_{ij} \\bar{A}^{ij} + e^{-4\\phi} \\left(\\bar{R} - 8 \\bar{D}^i \\phi\n \\bar{D}_i \\phi - 8 \\bar{D}^2 \\phi \\right) \\\\\n\n \\mathcal{M}^i &= e^{-4\\phi} \\left(\\hat{D}_j \\bar{A}^{ij} + 6 \\bar{A}^{ij}\\partial_j \\phi - \\frac{2}{3} \\bar{\\gamma}^{ij}\n \\partial_j K + \\bar{A}^{jk} \\Delta^i_{jk} + \\bar{A}^{ik} \\Delta^j_{jk} \\right) \\\\\n\n \\bar{R}_{ij} &= -\\frac{1}{2} \\bar{\\gamma}^{kl} \\hat{D}_k \\hat{D}_l \\bar{\\gamma}_{ij} + \\frac{1}{2} \\left(\\bar{\\gamma}_{ki}\n \\hat{D}_j \\bar{\\Lambda}^k + \\bar{\\gamma}_{kj} \\hat{D}_i \\bar{\\Lambda}^k\\right) + \\frac{1}{2} \\Delta^k \\left(\\Delta_{ijk} + \\Delta_{jik}\\right) \\\\%\n &\\qquad+ \\bar{\\gamma}^{kl} \\left(\\Delta^m_{ki} \\Delta_{jml} + \\Delta^m_{kj} \\Delta_{iml} + \\Delta^m_{ik} \\Delta_{mjl}\\right)\n\\end{align}\n') # In[42]: assert_equal(H, bssncon.H) # In[43]: assert_equal(MU, bssncon.MU) # In[44]: assert_equal(RbarDD, Bq.RbarDD) # # # ## Step 8: Output Notebook to PDF [ [^](#top) ] # # The following code cell converts this Jupyter notebook into a proper, clickable $\LaTeX$-formatted PDF file. After the cell is successfully run, the generated PDF may be found in the root NRPy+ tutorial directory, with filename # [Tutorial-LaTeX_Interface_Example-BSSN_Cartesian.pdf](Tutorial-LaTeX_Interface_Example-BSSN_Cartesian.pdf). (Note that clicking on this link may not work; you may need to open the PDF file through another means.) # In[45]: import cmdline_helper as cmd # NRPy+: Multi-platform Python command-line interface cmd.output_Jupyter_notebook_to_LaTeXed_PDF("Tutorial-LaTeX_Interface_Example-BSSN_Cartesian")