1919#include " BSSNAtildeTensor.hpp"
2020#include " BSSNTildeChristoffel.hpp"
2121#include " BSSNContractedChristoffel.hpp"
22+ #include " BSSNPrintDebug.hpp"
23+ #include " BSSNConstraintsSolver.hpp"
2224
2325namespace tensorium_RG {
2426 /* *
@@ -84,26 +86,18 @@ namespace tensorium_RG {
8486 void init_BSSN (const tensorium::Vector<T>& X,
8587 const tensorium_RG::Metric<T>& metric,
8688 T dx, T dy, T dz) {
87-
8889 T alpha;
89-
90- // Extract metric quantities
91-
9290 tensorium::Vector<T> beta (3 );
93- tensorium::Tensor<T, 2 > gammaj ({3 , 3 });
94- metric.BSSN (X, alpha, beta, gammaj);
95- tensorium::Tensor<T, 3 > christoffel ({3 , 3 , 3 });
96- tensorium::Tensor<T, 2 > gammaj_inv = inv_mat_tensor (gammaj);
97- tensorium::Tensor<T, 2 > dgt ({3 , 3 });
98- tensorium::Tensor<T, 2 > partial_beta ({3 , 3 });
99- tensorium::Tensor<T, 2 > d_beta ({3 , 3 });
100- T chi = metric.compute_conformal_factor (gammaj);
101- tensorium::Tensor<T, 2 > gamma_tilde = compute_conformal_metric (metric, gammaj, chi);
91+ tensorium::Tensor<T, 2 > gamma_ij ({3 , 3 });
92+ metric.BSSN (X, alpha, beta, gamma_ij);
93+
94+ tensorium::Tensor<T, 2 > dgt ({3 , 3 });
95+ tensorium::Tensor<T, 2 > gamma_ij_inv = inv_mat_tensor (gamma_ij);
96+ T chi = metric.compute_conformal_factor (gamma_ij);
97+ tensorium::Tensor<T, 2 > gamma_tilde = compute_conformal_metric (metric, gamma_ij, chi);
10298 tensorium::Tensor<T, 2 > gamma_tilde_inv = inv_mat_tensor (gamma_tilde);
103- tensorium::Tensor<T, 3 > dgamma_tilde ({3 , 3 , 3 });
104- tensorium_RG::ExtrinsicCurvature<T> extr;
105- tensorium_RG::BSSNAtildeTensor<T> Aij;
10699
100+ tensorium::Tensor<T, 3 > dgamma_tilde ({3 , 3 , 3 });
107101 tensorium_RG::compute_partial_derivatives_tensor2D<T>(
108102 X, dx, dy, dz,
109103 [&](const tensorium::Vector<T>& Xs, tensorium::Tensor<T, 2 >& out) {
@@ -116,13 +110,18 @@ namespace tensorium_RG {
116110 },
117111 dgamma_tilde
118112 );
119-
120- compute_christoffel_3D (gamma_tilde, dgamma_tilde, gamma_tilde_inv, christoffel );
121- auto contracted_Gamma = tensorium_RG::BSSNContractedGamma<T>:: compute (X, metric, dx, dy, dz, chi );
113+
114+ tensorium::Tensor<T, 3 > christoffel_tilde ({ 3 , 3 , 3 } );
115+ compute_christoffel_3D (gamma_tilde, dgamma_tilde, gamma_tilde_inv, christoffel_tilde );
122116
123117 tensorium::Vector<T> tilde_Gamma (3 );
124- TildeGamma<T>::compute (gamma_tilde_inv, christoffel , tilde_Gamma);
118+ TildeGamma<T>::compute (gamma_tilde_inv, christoffel_tilde , tilde_Gamma);
125119
120+ auto contracted_Gamma = tensorium_RG::BSSNContractedGamma<T>::compute (
121+ X, metric, dx, dy, dz, chi
122+ );
123+
124+ tensorium::Tensor<T, 2 > d_beta ({3 , 3 });
126125 tensorium_RG::compute_partial_derivatives_vector<T>(
127126 X, dx, dy, dz,
128127 [&](const tensorium::Vector<T>& Xs, tensorium::Vector<T>& out) {
@@ -135,31 +134,73 @@ namespace tensorium_RG {
135134 d_beta
136135 );
137136
138- for (size_t i = 0 ; i < 3 ; ++i)
139- for (size_t j = 0 ; j < 3 ; ++j) {
140- T val = 0 ;
141- for (size_t l = 0 ; l < 3 ; ++l)
142- val += gammaj (j, l) * d_beta (i, l);
143- partial_beta (i, j) = val;
144- }
145-
146- auto Kij = extr.compute_Kij (dgt, gammaj, beta, partial_beta, christoffel, alpha);
147- auto AtildeTensor = Aij.compute_Atilde_tensor (Kij, gammaj_inv, gammaj, chi);
148-
149-
150- grid.tilde_Gamma = {tilde_Gamma};
151- grid.contracted_Gamma = {contracted_Gamma};
152- grid.ExtrinsicTensor = {Kij};
153- grid.A_tildeTensor = {AtildeTensor};
154- grid.alpha = {alpha};
155- grid.beta = {beta};
156- grid.gamma_ij = {gammaj};
157- grid.gamma_ij_inv = {gammaj_inv};
158- grid.chi = {chi};
159- grid.gamma_tilde = {gamma_tilde};
160- grid.gamma_tilde_inv = {gamma_tilde_inv};
161- grid.dgamma_tilde = {dgamma_tilde};
162- grid.christoffel_tilde = {christoffel};
137+ tensorium::Tensor<T, 3 > dgamma_phys ({3 , 3 , 3 });
138+ tensorium_RG::compute_partial_derivatives_tensor2D<T>(
139+ X, dx, dy, dz,
140+ [&](const tensorium::Vector<T>& Xs, tensorium::Tensor<T, 2 >& out) {
141+ T a_tmp;
142+ tensorium::Vector<T> b_tmp (3 );
143+ tensorium::Tensor<T, 2 > g_tmp ({3 , 3 });
144+ metric.BSSN (Xs, a_tmp, b_tmp, g_tmp);
145+ out = g_tmp;
146+ },
147+ dgamma_phys
148+ );
149+
150+ tensorium::Tensor<T, 3 > christoffel_phys ({3 , 3 , 3 });
151+ compute_christoffel_3D (gamma_ij, dgamma_phys, gamma_ij_inv, christoffel_phys);
152+
153+ tensorium_RG::ExtrinsicCurvature<T> extr;
154+ auto Kij = extr.compute_Kij (dgt, gamma_ij, beta, d_beta, christoffel_phys, alpha);
155+
156+ tensorium_RG::BSSNAtildeTensor<T> Aij;
157+ auto AtildeTensor = Aij.compute_Atilde_tensor (Kij, gamma_ij_inv, gamma_ij, chi);
158+
159+ grid.alpha = {alpha};
160+ grid.beta = {beta};
161+ grid.gamma_ij = {gamma_ij};
162+ grid.gamma_ij_inv = {gamma_ij_inv};
163+ grid.chi = {chi};
164+ grid.gamma_tilde = {gamma_tilde};
165+ grid.gamma_tilde_inv = {gamma_tilde_inv};
166+ grid.dgamma_tilde = {dgamma_tilde};
167+ grid.christoffel_tilde = {christoffel_tilde};
168+ grid.tilde_Gamma = {tilde_Gamma};
169+ grid.contracted_Gamma = {contracted_Gamma};
170+ grid.ExtrinsicTensor = {Kij};
171+ grid.A_tildeTensor = {AtildeTensor};
172+
173+ std::cout << std::setprecision (6 ) << std::fixed;
174+ std::cout << " \n ========= BSSN Quantities at X =========\n " ;
175+
176+ std::cout << " --- alpha ---\n " << grid.alpha [0 ] << " \n " ;
177+ print_vector (" beta" , grid.beta [0 ]);
178+
179+ std::cout << " dbeta\n " ;
180+ d_beta.print ();
181+
182+ print_tensor2 (" gamma_ij" , grid.gamma_ij [0 ]);
183+ print_tensor2 (" gamma_ij_inv" , grid.gamma_ij_inv [0 ]);
184+
185+ std::cout << " --- chi ---\n " << grid.chi [0 ] << " \n " ;
186+ print_tensor2 (" gamma_tilde" , grid.gamma_tilde [0 ]);
187+ print_tensor2 (" gamma_tilde_inv" , grid.gamma_tilde_inv [0 ]);
188+
189+ print_tensor3 (" dgamma_tilde" , grid.dgamma_tilde [0 ]);
190+ print_tensor3 (" christoffel_tilde" , grid.christoffel_tilde [0 ]);
191+ print_vector (" tilde_Gamma" , grid.tilde_Gamma [0 ]);
192+
193+ print_tensor2 (" ∂_t gamma_ij (dgt)" , dgt);
194+ print_vector (" contracted_Gamma" , grid.contracted_Gamma [0 ]);
195+
196+ print_tensor3 (" dgamma_phys" , dgamma_phys);
197+ print_tensor3 (" christoffel_phys" , christoffel_phys);
198+ print_tensor2 (" Extrinsic curvature K_ij" , grid.ExtrinsicTensor [0 ]);
199+ Kij.print ();
200+
201+ print_tensor2 (" A_tilde_ij" , grid.A_tildeTensor [0 ]);
202+
203+ std::cout << " ========================================\n\n " ;
163204 }
164205 };
165206
0 commit comments