To numerically solve Einstein's equations, a system of coupled, non-linear equations, the spatial coordinates may be decoupled from the time coordinate. In doing so, numerical solutions may be marched forward in time, using the Method of Lines (NRPy+ tutorial here). This is done using the 3 + 1 decomposition, originally done using the ADM formalism. However, it was found that using this formulation of Einstein's equations resulted in unstable simulations, due to its weakly hyperbolic system of equations. Hyperbolicity is the notion of the wave-like behavior of the numerical solution for a given system of PDE's. The ADM formulation of Einstein's equations involved mixed second derivatives, which give rise to a weakly hyperbolic system.
In contrast, the BSSN formalism removes these mixed second derivatives, resulting in a strongly hyperbolic system of equations. In this module, we follow the work of Knapp, Walker & Baumgarte (2002), showcasing the difference between using strongly versus weakly hyperbolic systems, when solving a physical problem with Maxwell's equations in vacuum.
As is standard in NRPy+,
We begin with Maxwell's equations in vacuum, i.e. no source terms, in flat space and in Gaussian and c=1 units, given by
→∇⋅→E=0,→∇⋅→B=0,∂→B∂t=−→∇×→E,∂→E∂t=→∇×→B,and we have the associated potentials,
∂→A∂t=−→E−→∇φ,→B=→∇×→A.Now, replacing →B with →∇×→A in Ampere's law, and using the standard identity
→∇×(→∇×→A)=→∇(→∇⋅→A)−∇2→A,we may write
→∇×→B=→∇×(→∇×→A)=→∇(→∇⋅→A)−∇2→A.Thus, our time evolution equations become
∂→A∂t=−→E−→∇φ,∂→E∂t=→∇(→∇⋅→A)−∇2→A.Using index notation, in Cartesian coordinates we have
∂tAi=−Ei−∂iφ,∂tEi=∂i∂jAj−∂j∂jAi.Note the presence of the mixed second derivative above, and that in our system of equations we have 6 equations (since →A and →E each have 3 components), but 7 unknowns (components of →A and →E, and the scalar potential φ). Thus, we’ll add a time evolution equation to φ as well, which amounts to choosing a gauge. In particular we’ll choose the Lorenz gauge:
∂tφ=−→∇⋅→A,and using index notation, in Cartesian coordinates,
∂tφ=−∂iAi.Furthermore, note that because we are working in vacuum, in Cartesian coordinates we have the constraints
∂iEi=0,∂iBi=0,But since →B=→∇×→A, the divergence of →B is automatically satisfied (excercise for the reader).
The right hand sides (RHSs) of our evolution equations are thus
∂tAi=−Ei−∂iφ,∂tEi=∂i∂jAj−∂j∂jAi,∂tφ=−∂iAi,subject to the constraint
C≡∂iEi=0.Tracking the departure of our numerical results from this constraint helps us keep track of the numerical error. We refer to this system of equations as System I.
In this tutorial the RHSs and constraint equations are implemented in NRPy+. The system is then evolved in time within a start-to-finish notebook, using initial data defined in this tutorial, showcasing the instability of the system as a result of the presence of the mixed second derivative for Ei.
As dicussed in the introduction and following the previous section, to maintain numerical stability and accuracy we remove the mixed 2nd derivative ∂i∂jAj in the equation for Ei by introducing
Γ≡∂iAi,∂tΓ=∂i∂tAi=−∂iEi−∂i∂iφ=−∂i∂iφ.Thus, our evolution equations are
∂tAi=−Ei−∂iφ,∂tEi=∂iΓ−∂j∂jAi,∂tΓ=−∂i∂iφ,∂tφ=−Γ,subject to the constraints
G≡Γ−∂iAi=0,C≡∂iEi=0.We refer to this system of equations as System II.
In this tutorial the RHSs and constraints are implemented in NRPy+. The system is then evolved in time within a start-to-finish notebook, using initial data defined in this tutorial, showcasing the stability of the system as a result of the absence of the mixed second derivative for Ei.
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-VacuumMaxwell_formulation_Cartesian.pdf (Note that clicking on this link may not work; you may need to open the PDF file through another means.)
import cmdline_helper as cmd # NRPy+: Multi-platform Python command-line interface
cmd.output_Jupyter_notebook_to_LaTeXed_PDF("Tutorial-VacuumMaxwell_formulation_Cartesian")
Created Tutorial-VacuumMaxwell_formulation_Cartesian.tex, and compiled LaTeX file to PDF file Tutorial-VacuumMaxwell_formulation_Cartesian.pdf