SFPX6AKCTONO4CGFC5HPDIZHSCVJMV23PIIULC3TKRFLEZI2FVGQC
V3BBVQPFFGO3NI3PW5DPO2PST5Z5R4VESJ7YONFOJPGI2L4DPZDAC
CCVN7PV3OLKVLSZQRO2MQHP3VUC5R4G22QQPEZ3VBZMMCS7OB3EQC
7SXZR3UGQSGN6XDMZ5652JCIVBX4US2IARTYVB2N3TPTDU47JI5QC
OWSRJP34CYIR22B2PZED7QBRAGVKTQALBZVEX2DSKKI62H643IIQC
AUT2KIMMPJRUEQWULGCRWIVXCAIZMFAFVGKQSMKNNFJSAJXTDNCAC
DNSXJFJKNEMA4ZFID4NDMIYFZ2M5NOKNYUO4V642BHI4DJKOSH7AC
VTDUSVEON4HPCZBSLNN4XUWV5WCDV7WFLXTQ336ADWT6S6MOZE3QC
XFLAXC6NZLEO2YH34GCKBU5E5RSQPK3JI36SV42DOERSFVJ3CPLAC
H6GIS2UO4G25J7MFBEEC5TV4LVM66TRPJFHXXVXAMJTZIDVAWA7QC
EP2FWFLAU7PP4DP25E2Q74IYXLV2D5FL4HKHJJ3SNEWCP6Z4ZYNAC
"## This module generates `BaikalETK`, an [Einstein Toolkit](https://einsteintoolkit.org) thorn for solving Einstein's equations in the BSSN formalism, in Cartesian coordinates. It features SIMD intrinsics and OpenMP support.\n",
"## This module generates `BaikalX`, an [Einstein Toolkit](https://einsteintoolkit.org) thorn for solving Einstein's equations in the BSSN formalism, in Cartesian coordinates. It features SIMD intrinsics and OpenMP support.\n",
"* [BSSN/ADM_Numerical_Spherical_or_Cartesian_to_BSSNCurvilinear.py](../edit/BSSN/ADM_Numerical_Spherical_or_Cartesian_to_BSSNCurvilinear.py); [\\[**tutorial**\\]](Tutorial-ADM_Initial_Data-Converting_Exact_ADM_Spherical_or_Cartesian_to_BSSNCurvilinear.ipynb): Spherical/Cartesian ADM$\\to$Curvilinear BSSN converter function, for which ADM quantities are assumed given at each gridpoint (i.e., exact, closed-form expressions are not given). This is used to generate BaikalETK's ADM$\\to$BSSN function, as in the ETK spacetime evolution modules are to assume that initial data are given as ADM quantities in the Cartesian basis at each gridpoint.\n",
"* [BSSN/ADM_in_terms_of_BSSN.py](../edit/BSSN/ADM_in_terms_of_BSSN.py); [\\[**tutorial**\\]](Tutorial-ADM_in_terms_of_BSSN.ipynb): Constructs ADM quantities in terms of BSSN quantities (in arbitrary curvilinear coordinates, though we use Cartesian here). This is used to generate BaikalETK's BSSN$\\to$ADM function, which make ADM variables available to diagnostic thorns within the ETK.\n",
"* [BSSN/ADM_Numerical_Spherical_or_Cartesian_to_BSSNCurvilinear.py](../edit/BSSN/ADM_Numerical_Spherical_or_Cartesian_to_BSSNCurvilinear.py); [\\[**tutorial**\\]](Tutorial-ADM_Initial_Data-Converting_Exact_ADM_Spherical_or_Cartesian_to_BSSNCurvilinear.ipynb): Spherical/Cartesian ADM$\\to$Curvilinear BSSN converter function, for which ADM quantities are assumed given at each gridpoint (i.e., exact, closed-form expressions are not given). This is used to generate BaikalX's ADM$\\to$BSSN function, as in the ETK spacetime evolution modules are to assume that initial data are given as ADM quantities in the Cartesian basis at each gridpoint.\n",
"* [BSSN/ADM_in_terms_of_BSSN.py](../edit/BSSN/ADM_in_terms_of_BSSN.py); [\\[**tutorial**\\]](Tutorial-ADM_in_terms_of_BSSN.ipynb): Constructs ADM quantities in terms of BSSN quantities (in arbitrary curvilinear coordinates, though we use Cartesian here). This is used to generate BaikalX's BSSN$\\to$ADM function, which make ADM variables available to diagnostic thorns within the ETK.\n",
" 1. [Step 3.c](#scheduleccl): `schedule.ccl`:schedule all functions used within `BaikalETK`, specify data dependencies within said functions, and allocate memory for gridfunctions\n",
" 1. [Step 3.c](#scheduleccl): `schedule.ccl`:schedule all functions used within `BaikalX`, specify data dependencies within said functions, and allocate memory for gridfunctions\n",
" 1. [Step 4.g](#makecodedefn): `make.code.defn`: List of all C driver functions needed to compile `BaikalETK`\n",
" 1. [Step 4.g](#makecodedefn): `make.code.defn`: List of all C driver functions needed to compile `BaikalX`\n",
" 1. [Step 5.a](#self_validation): Validation against [BaikalETK.BaikalETK_Pymodule](../edit/BaikalETK/BaikalETK_Pymodule.py) module\n",
" 1. [Step 5.a](#self_validation): Validation against [BaikalX.BaikalX_Pymodule](../edit/BaikalX/BaikalX_Pymodule.py) module\n",
"`BaikalETK` implements a fully covariant version of the BSSN 3+1 decomposition of Einstein's equations of general relativity, which is fully documented within NRPy+ ([start here](Tutorial-BSSN_formulation.ipynb)). However, especially if you are a newcomer to the field of numerical relativity, you may also find the following lectures and papers useful for understanding the adopted formalism:\n",
"`BaikalX` implements a fully covariant version of the BSSN 3+1 decomposition of Einstein's equations of general relativity, which is fully documented within NRPy+ ([start here](Tutorial-BSSN_formulation.ipynb)). However, especially if you are a newcomer to the field of numerical relativity, you may also find the following lectures and papers useful for understanding the adopted formalism:\n",
"`interface.ccl` declares all gridfunctions and determines how `BaikalETK` interacts with other Einstein Toolkit thorns.\n",
"`interface.ccl` declares all gridfunctions and determines how `BaikalX` interacts with other Einstein Toolkit thorns.\n",
"## Step 3.c: `schedule.ccl`: schedule all functions used within `BaikalETK`, specify data dependencies within said functions, and allocate memory for gridfunctions \\[Back to [top](#toc)\\]\n",
"## Step 3.c: `schedule.ccl`: schedule all functions used within `BaikalX`, specify data dependencies within said functions, and allocate memory for gridfunctions \\[Back to [top](#toc)\\]\n",
" READS: BaikalETK::auxevol_variables(interior)\n",
" READS: BaikalETK::evol_variables(everywhere)\n",
" WRITES: BaikalETK::evol_variables_rhs(interior)\n",
" READS: BaikalX::auxevol_variables(interior)\n",
" READS: BaikalX::evol_variables(everywhere)\n",
" WRITES: BaikalX::evol_variables_rhs(interior)\n",
"Now that we have constructed the basic C code kernels and the needed Einstein Toolkit `ccl` files, we next write the driver functions for registering `BaikalETK` within the Toolkit and the C code kernels. Each of these driver functions is called directly from [`schedule.ccl`](#scheduleccl).\n",
"Now that we have constructed the basic C code kernels and the needed Einstein Toolkit `ccl` files, we next write the driver functions for registering `BaikalX` within the Toolkit and the C code kernels. Each of these driver functions is called directly from [`schedule.ccl`](#scheduleccl).\n",
"All modules (thorns) in the Einstein Toolkit that deal with spacetime quantities do so via the core `ADMBase` module, which assumes variables are written in ADM form. Therefore, in order for `BaikalETK` to interface properly with the rest of the Toolkit, its native BSSN variables must be converted to ADM quantities."
"All modules (thorns) in the Einstein Toolkit that deal with spacetime quantities do so via the core `ADMBase` module, which assumes variables are written in ADM form. Therefore, in order for `BaikalX` to interface properly with the rest of the Toolkit, its native BSSN variables must be converted to ADM quantities."
"To slightly optimize the performance of `BaikalETK`'s BSSN solver, we split the computation of the [complicated expressions for the Ricci tensor $\\\\bar{R}_{ij}$](Tutorial-BSSN_quantities.ipynb#rbar) into its own function, and then use the result when evaluating the BSSN right-hand-side (RHS) expressions."
"To slightly optimize the performance of `BaikalX`'s BSSN solver, we split the computation of the [complicated expressions for the Ricci tensor $\\\\bar{R}_{ij}$](Tutorial-BSSN_quantities.ipynb#rbar) into its own function, and then use the result when evaluating the BSSN right-hand-side (RHS) expressions."
"## Step 4.g: `make.code.defn`: List of all C driver functions needed to compile `BaikalETK` \\[Back to [top](#toc)\\]\n",
"## Step 4.g: `make.code.defn`: List of all C driver functions needed to compile `BaikalX` \\[Back to [top](#toc)\\]\n",