diff options
Diffstat (limited to 'src/gr')
-rw-r--r-- | src/gr/cg.hh | 36 | ||||
-rw-r--r-- | src/gr/expansion.cc (renamed from src/gr/horizon_function.cc) | 121 | ||||
-rw-r--r-- | src/gr/expansion_Jacobian.cc (renamed from src/gr/horizon_Jacobian.cc) | 209 | ||||
-rw-r--r-- | src/gr/gfns.hh | 14 | ||||
-rw-r--r-- | src/gr/gr.hh | 30 | ||||
-rw-r--r-- | src/gr/gr_gfas.minc | 42 | ||||
-rw-r--r-- | src/gr/horizon.maple | 195 | ||||
-rw-r--r-- | src/gr/make.code.defn | 4 | ||||
-rw-r--r-- | src/gr/maple.log | 529 | ||||
-rw-r--r-- | src/gr/setup_gr_gfas.maple | 55 |
10 files changed, 635 insertions, 600 deletions
diff --git a/src/gr/cg.hh b/src/gr/cg.hh index 02bf370..affd54b 100644 --- a/src/gr/cg.hh +++ b/src/gr/cg.hh @@ -89,20 +89,20 @@ #define partial_d_g_dd_323 p.gridfn(gfns::gfn__partial_d_g_dd_323, irho,isigma) #define partial_d_g_dd_333 p.gridfn(gfns::gfn__partial_d_g_dd_333, irho,isigma) -#define H p.gridfn(gfns::gfn__H, irho,isigma) - -#define partial_H_wrt_partial_d_h_1 \ - p.gridfn(gfns::gfn__partial_H_wrt_partial_d_h_1, irho,isigma) -#define partial_H_wrt_partial_d_h_2 \ - p.gridfn(gfns::gfn__partial_H_wrt_partial_d_h_2, irho,isigma) -#define partial_H_wrt_partial_dd_h_11 \ - p.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_11, irho,isigma) -#define partial_H_wrt_partial_dd_h_12 \ - p.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_12, irho,isigma) -#define partial_H_wrt_partial_dd_h_22 \ - p.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_22, irho,isigma) - -#define save_H p.gridfn(gfns::gfn__save_H, irho,isigma) +#define Theta p.gridfn(gfns::gfn__Theta, irho,isigma) + +#define partial_Theta_wrt_partial_d_h_1 \ + p.gridfn(gfns::gfn__partial_Theta_wrt_partial_d_h_1, irho,isigma) +#define partial_Theta_wrt_partial_d_h_2 \ + p.gridfn(gfns::gfn__partial_Theta_wrt_partial_d_h_2, irho,isigma) +#define partial_Theta_wrt_partial_dd_h_11 \ + p.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_11, irho,isigma) +#define partial_Theta_wrt_partial_dd_h_12 \ + p.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_12, irho,isigma) +#define partial_Theta_wrt_partial_dd_h_22 \ + p.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_22, irho,isigma) + +#define save_Theta p.gridfn(gfns::gfn__save_Theta, irho,isigma) #define Delta_h p.gridfn(gfns::gfn__Delta_h, irho,isigma) //****************************************************************************** @@ -148,7 +148,7 @@ fp partial_d_g_uu_322; fp partial_d_g_uu_323; fp partial_d_g_uu_333; -fp HA; -fp HB; -fp HC; -fp HD; +fp Theta_A; +fp Theta_B; +fp Theta_C; +fp Theta_D; diff --git a/src/gr/horizon_function.cc b/src/gr/expansion.cc index 0821eaf..9cafc2b 100644 --- a/src/gr/horizon_function.cc +++ b/src/gr/expansion.cc @@ -1,8 +1,8 @@ -// horizon_function.cc -- evaluate LHS function H(h) +// expansion.cc -- evaluate expansion Theta of trial horizon surface // $Header$ // // <<<prototypes for functions local to this file>>> -// horizon_function - top-level driver +// expansion - top-level driver // decode_geometry_method - decode the geometry_method parameter // /// setup_xyz_posns - setup global xyz posns of grid points @@ -12,7 +12,7 @@ /// h_is_finite - does function h contain any NaNs/infinities? /// geometry_is_finite - do geometry vars contain NaN/infty? /// -/// compute_H - compute H(h) given earlier setup +/// compute_Theta - compute Theta(h) given earlier setup /// #include <stdio.h> @@ -73,10 +73,10 @@ bool h_is_finite(patch_system& ps, bool print_msg_flag); bool geometry_is_finite(patch_system& ps, bool print_msg_flag); -bool compute_H(patch_system& ps, - bool Jacobian_flag, - jtutil::norm<fp>* H_norms_ptr, - bool print_msg_flag); +bool compute_Theta(patch_system& ps, + bool Jacobian_flag, + jtutil::norm<fp>* Theta_norms_ptr, + bool print_msg_flag); } //****************************************************************************** @@ -84,7 +84,7 @@ bool compute_H(patch_system& ps, //****************************************************************************** // -// This function computes the LHS function H(h), and optionally also +// This function computes the LHS function Theta(h), and optionally also // its Jacobian coefficients (from which the Jacobian matrix may be // computed later). // @@ -113,17 +113,18 @@ bool compute_H(patch_system& ps, // g_dd_{11,12,13,22,23,33} # $g_{ij}$ // K_dd_{11,12,13,22,23,33} # $K_{ij}$ // partial_d_g_dd_{1,2,3}{11,12,13,22,23,33} # $\partial_k g_{ij}$ -// H # $H = H(h)$ +// ## computed at the nominal grid points +// Theta # $\Theta = \Theta(h)$ // // Arguments: // Jacobian_flag = true to compute the Jacobian coefficients, // false to skip this. // print_msg_flag = true to print status messages, // false to skip this. -// H_norms_ptr = (out) If this pointer is non-NULL, the norm object it -// points to is updated with all the H values in the -// grid. This norm object can then be used to compute -// various (gridwise) norms of H. +// Theta_norms_ptr = (out) If this pointer is non-NULL, the norm object it +// points to is updated with all the Theta values +// in the grid. This norm object can then be used +// to compute various (gridwise) norms of Theta. // // Results: // This function returns true for a successful computation, or false @@ -132,17 +133,17 @@ bool compute_H(patch_system& ps, // or from an excised region // FIXME: excision isn't implemented yet :( // - NaNs are found in h or in the interpolate geometry variables -// - HD <= 0 (this means the interpolated g_ij aren't positive definite) +// - Theta_D <= 0 (this means the interpolated g_ij aren't positive definite) // -bool horizon_function(patch_system& ps, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - bool Jacobian_flag /* = false */, - bool print_msg_flag /* = false */, - jtutil::norm<fp>* H_norms_ptr /* = NULL */) +bool expansion(patch_system& ps, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + bool Jacobian_flag /* = false */, + bool print_msg_flag /* = false */, + jtutil::norm<fp>* Theta_norms_ptr /* = NULL */) { if (print_msg_flag) - then CCTK_VInfo(CCTK_THORNSTRING, " horizon function"); + then CCTK_VInfo(CCTK_THORNSTRING, " expansion"); // fill in values of all ghosted gridfns in ghost zones ps.synchronize(); @@ -168,7 +169,7 @@ case geometry__Schwarzschild_EF: break; default: error_exit(PANIC_EXIT, -"***** horizon_function(): unknown gi.geometry_method=(int)%d!\n" +"***** expansion(): unknown gi.geometry_method=(int)%d!\n" " (this should never happen!)\n" , int(gi.geometry_method)); /*NOTREACHED*/ @@ -178,9 +179,10 @@ if (gi.check_that_geometry_is_finite && !geometry_is_finite(ps, print_msg_flag)) then return false; // *** ERROR RETURN *** -// compute remaining gridfns --> $H$ and optionally Jacobian coefficients +// compute remaining gridfns --> $\Theta$ +// and optionally also the Jacobian coefficients // by algebraic ops and angular finite differencing -if (!compute_H(ps, Jacobian_flag, H_norms_ptr, print_msg_flag)) +if (!compute_Theta(ps, Jacobian_flag, Theta_norms_ptr, print_msg_flag)) then return false; // *** ERROR RETURN *** return true; // *** NORMAL RETURN *** @@ -586,7 +588,7 @@ if (status == CCTK_ERROR_INTERP_POINT_X_RANGE) if (print_msg_flag) then { - CCTK_VWarn(horizon_function_warning_levels::failure, + CCTK_VWarn(expansion_warning_levels::failure, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" " the trial-horizon-surface point" @@ -743,7 +745,7 @@ if (print_msg_flag) // or more NaNs or infinities. // // Results: -#ifdef HAVE_FINITE +#ifdef Theta_AVE_FINITE // This function returns true if all the h values are finite, false // otherwise (i.e. if it contains any NaNs or infinities). #else @@ -757,7 +759,7 @@ bool h_is_finite(patch_system& ps, bool print_msg_flag) if (print_msg_flag) then CCTK_VInfo(CCTK_THORNSTRING, " checking that h is finite"); -#ifdef HAVE_FINITE +#ifdef Theta_AVE_FINITE for (int pn = 0 ; pn < ps.N_patches() ; ++pn) { patch& p = ps.ith_patch(pn); @@ -775,7 +777,7 @@ if (print_msg_flag) const fp sigma = p.sigma_of_isigma(isigma); const fp drho = jtutil::degrees_of_radians(rho); const fp dsigma = jtutil::degrees_of_radians(sigma); - CCTK_VWarn(horizon_function_warning_levels::nonfinite, + CCTK_VWarn(expansion_warning_levels::nonfinite, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" " h=%g isn't finite!\n" @@ -791,7 +793,7 @@ if (print_msg_flag) } return true; // *** all values finite *** #else -CCTK_VWarn(horizon_function_warning_levels::skip_nonfinite, +CCTK_VWarn(expansion_warning_levels::skip_nonfinite, __LINE__, __FILE__, CCTK_THORNSTRING, " no finite() fn ==> skipping is-h-finite check"); return true; // *** no check possible *** @@ -810,7 +812,7 @@ return true; // *** no check possible *** // or more NaNs or infinities. // // Results: -#ifdef HAVE_FINITE +#ifdef Theta_AVE_FINITE // This function returns true if all the geometry variables are finite, // false otherwise (i.e. if they contain any NaNs or infinities). #else @@ -824,7 +826,7 @@ bool geometry_is_finite(patch_system& ps, bool print_msg_flag) if (print_msg_flag) then CCTK_VInfo(CCTK_THORNSTRING, " checking that geometry is finite"); -#ifdef HAVE_FINITE +#ifdef Theta_AVE_FINITE for (int pn = 0 ; pn < ps.N_patches() ; ++pn) { patch& p = ps.ith_patch(pn); @@ -921,7 +923,7 @@ if (print_msg_flag) const fp global_x = ps.global_x_of_local_x(local_x); const fp global_y = ps.global_y_of_local_y(local_y); const fp global_z = ps.global_z_of_local_z(local_z); - CCTK_VWarn(horizon_function_warning_levels::nonfinite, + CCTK_VWarn(expansion_warning_levels::nonfinite, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" " geometry isn't finite at %s patch\n" @@ -973,7 +975,7 @@ if (print_msg_flag) } return true; // *** no NaNs found *** #else -CCTK_VWarn(horizon_function_warning_levels::skip_nonfinite, +CCTK_VWarn(expansion_warning_levels::skip_nonfinite, __LINE__, __FILE__, CCTK_THORNSTRING, " no finite() ==> skipping is-geometry-finite check"); return true; // *** no check possible *** @@ -986,10 +988,11 @@ return true; // *** no check possible *** //****************************************************************************** // -// This function computes H(h), and optionally its Jacobian coefficients, -// (from which the Jacobian matrix may be computed later). This function -// uses a mixture of algebraic operations and (rho,sigma) finite differencing. -// The computation is done (entirely) on the nominal angular grid. +// This function computes the expansion Theta(h), and optionally also +// its Jacobian coefficients, (from which the Jacobian matrix may be +// computed later). This function uses a mixture of algebraic operations +// and (rho,sigma) finite differencing. The computation is done entirely +// on the nominal angular grid. // // N.b. This function #includes "cg.hh", which defines "dangerous" macros // which will stay in effect for the rest of this compilation unit! @@ -1000,17 +1003,17 @@ return true; // *** no check possible *** // // Results: // This function returns true for a successful computation, or false -// if the computation failed because HD <= 0 (this means the interpolated +// if the computation failed because Theta_D <= 0 (this means the interpolated // g_ij isn't positive definite). // namespace { -bool compute_H(patch_system& ps, - bool Jacobian_flag, - jtutil::norm<fp>* H_norms_ptr, - bool print_msg_flag) +bool compute_Theta(patch_system& ps, + bool Jacobian_flag, + jtutil::norm<fp>* Theta_norms_ptr, + bool print_msg_flag) { if (print_msg_flag) - then CCTK_VInfo(CCTK_THORNSTRING, " computing H(h)"); + then CCTK_VInfo(CCTK_THORNSTRING, " computing Theta(h)"); for (int pn = 0 ; pn < ps.N_patches() ; ++pn) { @@ -1084,37 +1087,41 @@ if (print_msg_flag) } { - // HA, HB, HC, HD - #include "../gr.cg/horizon_function.c" + // Theta_A, Theta_B, Theta_C, Theta_D + #include "../gr.cg/expansion.c" } - if (HD <= 0) + if (Theta_D <= 0) then { - CCTK_VWarn(horizon_function_warning_levels::failure, + CCTK_VWarn(expansion_warning_levels::failure, __LINE__, __FILE__, CCTK_THORNSTRING, - "HD <= 0 at %s patch rho=%g sigma=%g!", + "Theta_D <= 0 at %s patch rho=%g sigma=%g!", p.name(), double(rho), double(sigma)); - CCTK_VWarn(horizon_function_warning_levels::failure, + CCTK_VWarn(expansion_warning_levels::failure, __LINE__, __FILE__, CCTK_THORNSTRING, "(this probably means the interpolated g_ij"); - CCTK_VWarn(horizon_function_warning_levels::failure, + CCTK_VWarn(expansion_warning_levels::failure, __LINE__, __FILE__, CCTK_THORNSTRING, " isn't positive definite)"); return false; // *** ERROR RETURN *** } // compute H via equation (14) of my 1996 horizon finding paper - const fp sqrt_HD = sqrt(HD); - H = HA/(HD*sqrt_HD) + HB/sqrt_HD + HC/HD - K; + const fp sqrt_Theta_D = sqrt(Theta_D); + Theta = + Theta_A/(Theta_D*sqrt_Theta_D) + + Theta_B/sqrt_Theta_D + + Theta_C/Theta_D + - K; - // update running norms of H(h) function - if (H_norms_ptr != NULL) - then H_norms_ptr->data(H); + // update running norms of Theta(h) function + if (Theta_norms_ptr != NULL) + then Theta_norms_ptr->data(Theta); if (Jacobian_flag) then { - // partial_H_wrt_partial_d_h, partial_H_wrt_partial_dd_h - #include "../gr.cg/horizon_Jacobian.c" + // partial_Theta_wrt_partial_d_h, + // partial_Theta_wrt_partial_dd_h + #include "../gr.cg/expansion_Jacobian.c" } } } diff --git a/src/gr/horizon_Jacobian.cc b/src/gr/expansion_Jacobian.cc index 2d4e8e3..c9cb8bc 100644 --- a/src/gr/horizon_Jacobian.cc +++ b/src/gr/expansion_Jacobian.cc @@ -1,14 +1,14 @@ -// horizon_Jacobian.cc -- evaluate Jacobian matrix of LHS function H(h) +// expansion_Jacobian.cc -- evaluate Jacobian matrix of LHS function Theta(h) // $Header$ // // <<<prototypes for functions local to this file>>> // -// horizon_Jacobian - top-level driver to compute the Jacobian +// expansion_Jacobian - top-level driver to compute the Jacobian // decode_geometry_method - decode the geometry_method parameter /// -/// horizon_Jacobian_NP - compute the Jacobian by numerical perturbation +/// expansion_Jacobian_NP - compute the Jacobian by numerical perturbation /// -/// horizon_Jacobian_partial_SD - compute the partial-deriv terms: symbolic diff +/// expansion_Jacobian_partial_SD - compute the partial-deriv terms: symbolic diff /// add_ghost_zone_Jacobian - add ghost zone dependencies to Jacobian /// @@ -51,58 +51,58 @@ using jtutil::error_exit; // namespace { -bool horizon_Jacobian_NP(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& ii, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag); - -void horizon_Jacobian_partial_SD(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag); +bool expansion_Jacobian_NP(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& ii, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag); + +void expansion_Jacobian_partial_SD(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag); void add_ghost_zone_Jacobian(const patch_system& ps, Jacobian& Jac, fp mol, const patch& xp, const ghost_zone& xmgz, int x_II, int xm_irho, int xm_isigma); -bool horizon_Jacobian_dr_FD(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag); +bool expansion_Jacobian_dr_FD(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag); } //****************************************************************************** // // This function is a top-level driver to compute the Jacobian matrix -// J[H(h)] of the LHS function H(h). It just decodes the Jacobian_method -// parameter and calls the appropriate subfunction. +// J[Theta(h)] of the expansion Theta(h). It just decodes the +// Jacobian_method parameter and calls the appropriate subfunction. // -// We assume that H(h) has already been computed. +// We assume that Theta(h) has already been computed. // // Results: // This function returns true for a successful computation, or false -// for failure. See horizon_function() (in "horizon_function.cc") +// for failure. See expansion() (in "expansion.cc") // for details of the various ways the computation may fail. // -bool horizon_Jacobian(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag) +bool expansion_Jacobian(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag) { switch (Jacobian_info.Jacobian_method) { case Jacobian_method__numerical_perturb: - if (! horizon_Jacobian_NP(ps, Jac, + if (! expansion_Jacobian_NP(ps, Jac, cgi, gi, Jacobian_info, print_msg_flag)) then return false; // *** ERROR RETURN *** @@ -110,22 +110,22 @@ case Jacobian_method__numerical_perturb: case Jacobian_method__symbolic_diff: CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, "\n" -" horizon_Jacobian(): Jacobian_method == \"symbolic differentiation\"\n" -" isn't implemented (yet); reverting to\n" -" \"symbolic differentiation with finite diff d/dr\""); +" expansion_Jacobian(): Jacobian_method == \"symbolic differentiation\"\n" +" isn't implemented (yet); reverting to\n" +" \"symbolic differentiation with finite diff d/dr\""); // fall through case Jacobian_method__symbolic_diff_with_FD_dr: - horizon_Jacobian_partial_SD(ps, Jac, - cgi, gi, Jacobian_info, - print_msg_flag); - if (! horizon_Jacobian_dr_FD(ps, Jac, - cgi, gi, Jacobian_info, - print_msg_flag)) + expansion_Jacobian_partial_SD(ps, Jac, + cgi, gi, Jacobian_info, + print_msg_flag); + if (! expansion_Jacobian_dr_FD(ps, Jac, + cgi, gi, Jacobian_info, + print_msg_flag)) then return false; // *** ERROR RETURN *** break; default: error_exit(PANIC_EXIT, -"***** horizon_Jacobian(): unknown Jacobian_info.Jacobian_method=(int)%d!\n" +"***** expansion_Jacobian(): unknown Jacobian_info.Jacobian_method=(int)%d!\n" " (this should never happen!)\n" , int(Jacobian_info.Jacobian_method)); /*NOTREACHED*/ @@ -161,51 +161,52 @@ else CCTK_VWarn(-1, __LINE__, __FILE__, CCTK_THORNSTRING, //****************************************************************************** // -// This function computes the Jacobian matrix of the LHS function H(h) -// by numerical perturbation of the H(h) function. The algorithm is as +// This function computes the Jacobian matrix of the expansion Theta(h) +// by numerical perturbation of the Theta(h) function. The algorithm is as // follows: // -// we assume that H = H(h) has already been evaluated -// save_H = H +// we assume that Theta = Theta(h) has already been evaluated +// save_Theta = Theta // for each point (y,JJ) // { // const fp save_h_y = h at y; // h at y += perturbation_amplitude; -// evaluate H(h) (silently) +// evaluate Theta(h) (silently) // for each point (x,II) // { -// Jac(II,JJ) = (H(II) - save_H(II)) / perturbation_amplitude; +// Jac(II,JJ) = (Theta(II) - save_Theta(II)) +// / perturbation_amplitude; // } // h at y = save_h_y; // } -// H = save_H +// Theta = save_Theta // // Inputs (angular gridfns, on ghosted grid): -// h # shape of trial surface -// H # H(h) assumed to already be computed +// h # shape of trial surface +// Theta # Theta(h) assumed to already be computed // // Outputs: // The Jacobian matrix is stored in the Jacobian object Jac. // // Results: // This function returns true for a successful computation, or false -// for failure. See horizon_function() (in "horizon_function.cc") +// for failure. See expansion() (in "expansion.cc") // for details of the various ways the computation may fail. // namespace { -bool horizon_Jacobian_NP(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& ii, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag) +bool expansion_Jacobian_NP(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& ii, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag) { if (print_msg_flag) then CCTK_VInfo(CCTK_THORNSTRING, " horizon Jacobian (numerical perturbation)"); const fp epsilon = Jacobian_info.perturbation_amplitude; -ps.gridfn_copy(gfns::gfn__H, gfns::gfn__save_H); +ps.gridfn_copy(gfns::gfn__Theta, gfns::gfn__save_Theta); for (int ypn = 0 ; ypn < ps.N_patches() ; ++ypn) { @@ -225,7 +226,7 @@ ps.gridfn_copy(gfns::gfn__H, gfns::gfn__save_H); const fp save_h_y = yp.ghosted_gridfn(gfns::gfn__h, y_irho,y_isigma); yp.ghosted_gridfn(gfns::gfn__h, y_irho,y_isigma) += epsilon; - if (! horizon_function(ps, cgi, ii)) + if (! expansion(ps, cgi, ii)) then return false; // *** ERROR RETURN *** for (int xpn = 0 ; xpn < ps.N_patches() ; ++xpn) { @@ -240,9 +241,11 @@ ps.gridfn_copy(gfns::gfn__H, gfns::gfn__save_H); ++x_isigma) { const int II = ps.gpn_of_patch_irho_isigma(xp, x_irho,x_isigma); - const fp old_H = xp.gridfn(gfns::gfn__save_H, x_irho,x_isigma); - const fp new_H = xp.gridfn(gfns::gfn__H, x_irho,x_isigma); - Jac(II,JJ) = (new_H - old_H) / epsilon; + const fp old_Theta = xp.gridfn(gfns::gfn__save_Theta, + x_irho,x_isigma); + const fp new_Theta = xp.gridfn(gfns::gfn__Theta, + x_irho,x_isigma); + Jac(II,JJ) = (new_Theta - old_Theta) / epsilon; } } } @@ -251,7 +254,7 @@ ps.gridfn_copy(gfns::gfn__H, gfns::gfn__save_H); } } -ps.gridfn_copy(gfns::gfn__save_H, gfns::gfn__H); +ps.gridfn_copy(gfns::gfn__save_Theta, gfns::gfn__Theta); return true; // *** NORMAL RETURN *** } } @@ -262,27 +265,27 @@ return true; // *** NORMAL RETURN *** // // This function computes the partial derivative terms in the Jacobian -// matrix of the LHS function H(h), by symbolic differentiation from the -// Jacobian coefficient (angular) gridfns. The computation is done a +// matrix of the expansion Theta(h), by symbolic differentiation from +// the Jacobian coefficient (angular) gridfns. The computation is done a // Jacobian row at a time, using equation (25) of my 1996 apparent horizon // finding paper. // // Inputs (angular gridfns, on ghosted grid): -// h # shape of trial surface -// H # H(h) assumed to already be computed -// partial_H_wrt_partial_d_h # Jacobian coefficients -// partial_H_wrt_partial_dd_h # (also assumed to already be computed) +// h # shape of trial surface +// Theta # Theta(h) assumed to already be computed +// partial_Theta_wrt_partial_d_h # Jacobian coefficients +// partial_Theta_wrt_partial_dd_h # (also assumed to already be computed) // // Outputs: // The Jacobian matrix is stored in the Jacobian object Jac. // namespace { -void horizon_Jacobian_partial_SD(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag) +void expansion_Jacobian_partial_SD(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag) { if (print_msg_flag) then CCTK_VInfo(CCTK_THORNSTRING, @@ -303,7 +306,7 @@ ps.compute_synchronize_Jacobian(); { // // compute the main Jacobian terms for this grid point, i.e. - // partial H(this point x, Jacobian row II) + // partial Theta(this point x, Jacobian row II) // --------------------------------------------- // partial h(other points y, Jacobian column JJ) // @@ -313,19 +316,19 @@ ps.compute_synchronize_Jacobian(); // Jacobian coefficients for this point const fp Jacobian_coeff_rho - = xp.gridfn(gfns::gfn__partial_H_wrt_partial_d_h_1, + = xp.gridfn(gfns::gfn__partial_Theta_wrt_partial_d_h_1, x_irho, x_isigma); const fp Jacobian_coeff_sigma - = xp.gridfn(gfns::gfn__partial_H_wrt_partial_d_h_2, + = xp.gridfn(gfns::gfn__partial_Theta_wrt_partial_d_h_2, x_irho, x_isigma); const fp Jacobian_coeff_rho_rho - = xp.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_11, + = xp.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_11, x_irho, x_isigma); const fp Jacobian_coeff_rho_sigma - = xp.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_12, + = xp.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_12, x_irho, x_isigma); const fp Jacobian_coeff_sigma_sigma - = xp.gridfn(gfns::gfn__partial_H_wrt_partial_dd_h_22, + = xp.gridfn(gfns::gfn__partial_Theta_wrt_partial_dd_h_22, x_irho, x_isigma); // partial_rho, partial_rho_rho @@ -471,14 +474,14 @@ const patch& yp = ye.my_patch(); // // This function sums the d/dr terms into the Jacobian matrix of the -// LHS function H(h), computing those terms by finite differencing. +// expansion Theta(h), computing those terms by finite differencing. // // The basic algorithm is that -// Jac += diag[ (H(h+epsilon) - H(h)) / epsilon ] +// Jac += diag[ (Theta(h+epsilon) - Theta(h)) / epsilon ] // // Inputs (angular gridfns, on ghosted grid): -// h # shape of trial surface -// H # H(h) assumed to already be computed +// h # shape of trial surface +// Theta # Theta(h) assumed to already be computed // // Outputs: // Jac += d/dr terms @@ -490,12 +493,12 @@ const patch& yp = ye.my_patch(); // FIXME: excision isn't implemented yet :( // namespace { -bool horizon_Jacobian_dr_FD(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag) +bool expansion_Jacobian_dr_FD(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag) { if (print_msg_flag) then CCTK_VInfo(CCTK_THORNSTRING, @@ -503,10 +506,10 @@ if (print_msg_flag) const fp epsilon = Jacobian_info.perturbation_amplitude; -// compute H(h+epsilon) -ps.gridfn_copy(gfns::gfn__H, gfns::gfn__save_H); +// compute Theta(h+epsilon) +ps.gridfn_copy(gfns::gfn__Theta, gfns::gfn__save_Theta); ps.add_to_ghosted_gridfn(epsilon, gfns::gfn__h); -if (! horizon_function(ps, cgi, gi)) +if (! expansion(ps, cgi, gi)) then return false; // *** ERROR RETURN *** for (int pn = 0 ; pn < ps.N_patches() ; ++pn) @@ -519,16 +522,18 @@ if (! horizon_function(ps, cgi, gi)) ++isigma) { const int II = ps.gpn_of_patch_irho_isigma(p, irho,isigma); - const fp old_H = p.gridfn(gfns::gfn__save_H, irho,isigma); - const fp new_H = p.gridfn(gfns::gfn__H, irho,isigma); - Jac(II,II) += (new_H - old_H) / epsilon; + const fp old_Theta = p.gridfn(gfns::gfn__save_Theta, + irho,isigma); + const fp new_Theta = p.gridfn(gfns::gfn__Theta, + irho,isigma); + Jac(II,II) += (new_Theta - old_Theta) / epsilon; } } } -// restore h and H +// restore h and Theta ps.add_to_ghosted_gridfn(-epsilon, gfns::gfn__h); -ps.gridfn_copy(gfns::gfn__save_H, gfns::gfn__H); +ps.gridfn_copy(gfns::gfn__save_Theta, gfns::gfn__Theta); return true; // *** NORMAL RETURN *** } diff --git a/src/gr/gfns.hh b/src/gr/gfns.hh index 5c3f6d3..f64fa56 100644 --- a/src/gr/gfns.hh +++ b/src/gr/gfns.hh @@ -60,14 +60,14 @@ enum { gfn__partial_d_psi_2, // no access macro gfn__partial_d_psi_3, // no access macro - gfn__H, - gfn__partial_H_wrt_partial_d_h_1, - gfn__partial_H_wrt_partial_d_h_2, - gfn__partial_H_wrt_partial_dd_h_11, - gfn__partial_H_wrt_partial_dd_h_12, - gfn__partial_H_wrt_partial_dd_h_22, + gfn__Theta, + gfn__partial_Theta_wrt_partial_d_h_1, + gfn__partial_Theta_wrt_partial_d_h_2, + gfn__partial_Theta_wrt_partial_dd_h_11, + gfn__partial_Theta_wrt_partial_dd_h_12, + gfn__partial_Theta_wrt_partial_dd_h_22, gfn__Delta_h, - gfn__save_H, + gfn__save_Theta, gfn__one, nominal_max_gfn = gfn__one // no comma }; diff --git a/src/gr/gr.hh b/src/gr/gr.hh index 45771ef..8ba54f8 100644 --- a/src/gr/gr.hh +++ b/src/gr/gr.hh @@ -129,12 +129,12 @@ struct Jacobian_info // prototypes for functions visible outside their source files // -// horizon_function.cc +// expansion.cc // ... returns true for successful computation, // ... returns false for failure (eg horizon outside grid); // if (print_msg_flag) then also reports CCTK_VWarn() at the // appropriate warning level -namespace horizon_function_warning_levels +namespace expansion_warning_levels { enum { failure = 2, // point outside grid etc @@ -143,23 +143,23 @@ namespace horizon_function_warning_levels // ==> skipping nonfinite check }; } -bool horizon_function(patch_system& ps, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - bool Jacobian_flag = false, - bool print_msg_flag = false, - jtutil::norm<fp>* H_norms_ptr = NULL); +bool expansion(patch_system& ps, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + bool Jacobian_flag = false, + bool print_msg_flag = false, + jtutil::norm<fp>* H_norms_ptr = NULL); enum geometry_method decode_geometry_method(const char geometry_method_string[]); -// horizon_Jacobian.cc +// expansion_Jacobian.cc // ... returns true for successful computation, false for failure -bool horizon_Jacobian(patch_system& ps, - Jacobian& Jac, - const struct cactus_grid_info& cgi, - const struct geometry_info& gi, - const struct Jacobian_info& Jacobian_info, - bool print_msg_flag); +bool expansion_Jacobian(patch_system& ps, + Jacobian& Jac, + const struct cactus_grid_info& cgi, + const struct geometry_info& gi, + const struct Jacobian_info& Jacobian_info, + bool print_msg_flag); enum Jacobian_method decode_Jacobian_method(const char Jacobian_method_string[]); diff --git a/src/gr/gr_gfas.minc b/src/gr/gr_gfas.minc index 7579e4d..34da085 100644 --- a/src/gr/gr_gfas.minc +++ b/src/gr/gr_gfas.minc @@ -21,24 +21,24 @@ partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, -HA, HA__fnd, -HB, HB__fnd, -HC, HC__fnd, -HD, HD__fnd, -H, H__fnd, - -partial_d_HA, partial_d_HA__fnd, -partial_d_HB, partial_d_HB__fnd, -partial_d_HC, partial_d_HC__fnd, -partial_d_HD, partial_d_HD__fnd, -partial_d_H, partial_d_H__fnd, - -partial_HA_wrt_partial_d_h, partial_HA_wrt_partial_d_h__fnd, -partial_HB_wrt_partial_d_h, partial_HB_wrt_partial_d_h__fnd, -partial_HC_wrt_partial_d_h, partial_HC_wrt_partial_d_h__fnd, -partial_HD_wrt_partial_d_h, partial_HD_wrt_partial_d_h__fnd, -partial_HA_wrt_partial_dd_h, partial_HA_wrt_partial_dd_h__fnd, -partial_HB_wrt_partial_dd_h, partial_HB_wrt_partial_dd_h__fnd, - -partial_H_wrt_partial_d_h, partial_H_wrt_partial_d_h__fnd, -partial_H_wrt_partial_dd_h, partial_H_wrt_partial_dd_h__fnd # no comma +Theta_A, Theta_A__fnd, +Theta_B, Theta_B__fnd, +Theta_C, Theta_C__fnd, +Theta_D, Theta_D__fnd, +Theta, Theta__fnd, + +partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, +partial_d_Theta_C, partial_d_Theta_C__fnd, +partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, + +partial_Theta_A_wrt_partial_d_h, partial_Theta_A_wrt_partial_d_h__fnd, +partial_Theta_B_wrt_partial_d_h, partial_Theta_B_wrt_partial_d_h__fnd, +partial_Theta_C_wrt_partial_d_h, partial_Theta_C_wrt_partial_d_h__fnd, +partial_Theta_D_wrt_partial_d_h, partial_Theta_D_wrt_partial_d_h__fnd, +partial_Theta_A_wrt_partial_dd_h, partial_Theta_A_wrt_partial_dd_h__fnd, +partial_Theta_B_wrt_partial_dd_h, partial_Theta_B_wrt_partial_dd_h__fnd, + +partial_Theta_wrt_partial_d_h, partial_Theta_wrt_partial_d_h__fnd, +partial_Theta_wrt_partial_dd_h, partial_Theta_wrt_partial_dd_h__fnd # no comma diff --git a/src/gr/horizon.maple b/src/gr/horizon.maple index 433c723..7284253 100644 --- a/src/gr/horizon.maple +++ b/src/gr/horizon.maple @@ -4,8 +4,8 @@ # horizon - overall driver ## non_unit_normal - compute s_d ## non_unit_normal_deriv - compute partial_d_s_d -## horizon_function - compute H[ABCD],H = fn(s_d__fnd) = fn(h) -## horizon_Jacobian - compute Jacobian coeffs for H[ABCD], H +## expansion - compute Theta_[ABCD],Theta = fn(s_d__fnd) = fn(h) +## expansion_Jacobian - compute Jacobian coeffs for Theta_[ABCD], Theta # ################################################################################ @@ -20,15 +20,17 @@ # h # # Outputs: -# H = H__fnd(h, ...) +# Theta = Theta__fnd(h, ...) +# partial_Theta_wrt_partial_d_h__fnd = partial_Theta_wrt_partial_d_h(h, ...) +# partial_Theta_wrt_partial_dd_h__fnd = partial_Theta_wrt_partial_dd_h(h, ...) # horizon := proc(cg_flag::boolean) non_unit_normal(); non_unit_normal_deriv(); -horizon_function(cg_flag); -horizon_Jacobian(cg_flag); +expansion(cg_flag); +expansion_Jacobian(cg_flag); NULL; end proc; @@ -124,22 +126,21 @@ end proc; ################################################################################ # -# This function computes the LHS of the apparent horizon equation as a -# function of 1st and 2nd angular partial derivatives of the apparent -# horizon radius $h$, using equations (14) and (15[abcd]) in my 1996 -# apparent horizon finding paper, but using partial_d_g_uu[k,i,j] -# instead of Diff(g_uu[i,j], x_xyz[k]). +# This function computes the expansion $\Theta$ of a trial horizon surface +# as a function of 1st and 2nd angular partial derivatives of the surface +# radius $h$, using equations (14) and (15[abcd]) in my 1996 AH-finding +# paper, but using partial_d_g_uu[k,i,j] instead of Diff(g_uu[i,j], x_xyz[k]). # -# These equations give H[ABCD] and H as functions of s_d, but here we -# use s_d__fnd, which we assume is already given in terms of angular -# derivatives of h. The result is that we compute H[ABCD] and H directly -# in terms of 1st and 2nd angular derivatives of h, without s_d ever -# appearing in our final results. +# These equations give Theta_[ABCD] and Theta as functions of s_d, but +# here we use s_d__fnd, which we assume is already given in terms of angular +# derivatives of h. The result is that we compute Theta_[ABCD] and Theta +# directly in terms of 1st and 2nd angular derivatives of h, without s_d +# ever appearing in our final results. # # This function also optionally generates C code for the computation -# of H[ABCD]. It does *not* compute C code for the computation of H -# itself, since we may want to check that HD > 0 in the C code before -# we compute H itself. +# of Theta_[ABCD]. It does *not* compute C code for the computation of +# Theta itself, since we may want to check that Theta_D > 0 in the C +# code before we compute Theta itself. # # Inputs: # s_d = s_d__fnd( x_xyz, X_ud, Diff(h,y_rs) ) @@ -147,17 +148,17 @@ end proc; # Diff(h,y_rs), Diff(h,y_rs,y_rs) ) # # Outputs: -# HA = HA__fnd( x_xyz, X_ud, X_udd, g_uu, partial_d_g_uu, -# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) -# HB = HB__fnd( x_xyz, X_ud, X_udd, -# g_uu, partial_d_g_uu, partial_d_ln_sqrt_g, -# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) -# HC = HC__fnd( x_xyz, X_ud, K_uu, Diff(h,y_rs) ) -# HD = HD__fnd( x_xyz, X_ud, g_uu, Diff(h,y_rs) ) +# Theta_A = Theta_A__fnd( x_xyz, X_ud, X_udd, g_uu, partial_d_g_uu, +# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) +# Theta_B = Theta_B__fnd( x_xyz, X_ud, X_udd, +# g_uu, partial_d_g_uu, partial_d_ln_sqrt_g, +# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) +# Theta_C = Theta_C__fnd( x_xyz, X_ud, K_uu, Diff(h,y_rs) ) +# Theta_D = Theta_D__fnd( x_xyz, X_ud, g_uu, Diff(h,y_rs) ) # --------------------------------------------------------------- -# H = H__fnd( HA__fnd, HB__fnd, HC__fnd, HD__fnd ) +# Theta = Theta__fnd(Theta_A__fnd, Theta_B__fnd, Theta_C__fnd, Theta_D__fnd) # -horizon_function := +expansion := proc(cg_flag::boolean) global @include "../maple/coords.minc", @@ -180,33 +181,38 @@ assert_fnd_exists(partial_d_s_d, fnd); # # (15a) in my paper -HA__fnd := - msum('g_uu[i,k]*s_d__fnd[k] * g_uu[j,l]*s_d__fnd[l] - * partial_d_s_d__fnd[i,j]', - 'i'=1..N, 'j'=1..N, 'k'=1..N, 'l'=1..N) - - (1/2)*msum('g_uu[i,j]*s_d__fnd[j] - * partial_d_g_uu[i,k,l] * s_d__fnd[k]*s_d__fnd[l]', - 'i'=1..N, 'j'=1..N, 'k'=1..N, 'l'=1..N); +Theta_A__fnd + := - msum('g_uu[i,k]*s_d__fnd[k] * g_uu[j,l]*s_d__fnd[l] + * partial_d_s_d__fnd[i,j]', + 'i'=1..N, 'j'=1..N, 'k'=1..N, 'l'=1..N) + - (1/2)*msum('g_uu[i,j]*s_d__fnd[j] + * partial_d_g_uu[i,k,l] * s_d__fnd[k]*s_d__fnd[l]', + 'i'=1..N, 'j'=1..N, 'k'=1..N, 'l'=1..N); # (15b) in my paper -HB__fnd := + msum('partial_d_g_uu[i,i,j]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N) - + msum('g_uu[i,j]*partial_d_s_d__fnd[i,j]', 'i'=1..N, 'j'=1..N) - + msum('g_uu[i,j]*partial_d_ln_sqrt_g[i]*s_d__fnd[j]', - 'i'=1..N, 'j'=1..N); +Theta_B__fnd + := + msum('partial_d_g_uu[i,i,j]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N) + + msum('g_uu[i,j]*partial_d_s_d__fnd[i,j]', 'i'=1..N, 'j'=1..N) + + msum('g_uu[i,j]*partial_d_ln_sqrt_g[i]*s_d__fnd[j]', + 'i'=1..N, 'j'=1..N); # (15c) in my paper -HC__fnd := msum('K_uu[i,j]*s_d__fnd[i]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N); +Theta_C__fnd := msum('K_uu[i,j]*s_d__fnd[i]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N); # (15d) in my paper -HD__fnd := msum('g_uu[i,j]*s_d__fnd[i]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N); +Theta_D__fnd := msum('g_uu[i,j]*s_d__fnd[i]*s_d__fnd[j]', 'i'=1..N, 'j'=1..N); # n.b. no simplify() here, it would try to put things over a common -# denominator, which would make the equation much more complicated -H__fnd := HA__fnd/HD__fnd^(3/2) + HB__fnd/HD__fnd^(1/2) + HC__fnd/HD__fnd - K; +# denominator, which would make the equation *much* more complicated +Theta__fnd := + Theta_A__fnd/Theta_D__fnd^(3/2) + + Theta_B__fnd/Theta_D__fnd^(1/2) + + Theta_C__fnd/Theta_D__fnd + - K; if (cg_flag) - then codegen2([ HA__fnd, HB__fnd, HC__fnd, HD__fnd], - ['HA', 'HB', 'HC', 'HD' ], - "../gr.cg/horizon_function.c"); + then codegen2([ Theta_A__fnd, Theta_B__fnd, Theta_C__fnd, Theta_D__fnd], + ['Theta_A', 'Theta_B', 'Theta_C', 'Theta_D' ], + "../gr.cg/expansion.c"); fi; NULL; @@ -215,12 +221,12 @@ end proc; ################################################################################ # -# This function computes the Jacobian coefficients for the LHS of the -# apparent horizon equation with respect to 1st and 2nd angular partial -# derivatives of the apparent horizon radius $h$. These coefficients +# This function computes the Jacobian coefficients for the expansion +# $\Theta$ of a trial horizon surface with respect to 1st and 2nd angular +# partial derivatives of the surface radius $h$. These coefficients # are (or at least should be :) the same as those in equation (A1) in # my 1996 apparent horizon finding paper, bue here we compute them in -# a different manner: we have Maple directly differentiate H__fnd with +# a different manner: we have Maple directly differentiate Theta__fnd with # respect to Diff(h,y_rs[u]) and Diff(h,y_rs[u],y_rs[v]). We use the # Maple frontend() function to do this. # @@ -228,24 +234,24 @@ end proc; # coefficients. # # Inputs: -# HA = HA__fnd( x_xyz, X_ud, X_udd, g_uu, partial_d_g_uu, -# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) -# HB = HB__fnd( x_xyz, X_ud, X_udd, -# g_uu, partial_d_g_uu, partial_d_ln_sqrt_g, -# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) -# HC = HC__fnd( x_xyz, X_ud, K_uu, Diff(h,y_rs) ) -# HD = HD__fnd( x_xyz, X_ud, g_uu, Diff(h,y_rs) ) -# H = H__fnd( HA__fnd, HB__fnd, HC__fnd, HD__fnd ) +# Theta_A = Theta_A__fnd( x_xyz, X_ud, X_udd, g_uu, partial_d_g_uu, +# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) +# Theta_B = Theta_B__fnd( x_xyz, X_ud, X_udd, +# g_uu, partial_d_g_uu, partial_d_ln_sqrt_g, +# Diff(h,y_rs), Diff(h,y_rs,y_rs) ) +# Theta_C = Theta_C__fnd( x_xyz, X_ud, K_uu, Diff(h,y_rs) ) +# Theta_D = Theta_D__fnd( x_xyz, X_ud, g_uu, Diff(h,y_rs) ) +# Theta = Theta__fnd(Theta_A__fnd, Theta_B__fnd, Theta_C__fnd, Theta_D__fnd) # # Outputs: -# partial_HA_wrt_partial_d_h partial_HA_wrt_partial_dd_h -# partial_HB_wrt_partial_d_h partial_HB_wrt_partial_dd_h -# partial_HC_wrt_partial_d_h -# partial_HD_wrt_partial_d_h +# partial_Theta_A_wrt_partial_d_h partial_Theta_A_wrt_partial_dd_h +# partial_Theta_B_wrt_partial_d_h partial_Theta_B_wrt_partial_dd_h +# partial_Theta_C_wrt_partial_d_h +# partial_Theta_D_wrt_partial_d_h # --------------------------------------------------------------- -# partial_H_wrt_partial_d_h partial_H_wrt_partial_dd_h +# partial_Theta_wrt_partial_d_h partial_Theta_wrt_partial_dd_h # -horizon_Jacobian := +expansion_Jacobian := proc(cg_flag::boolean) global @include "../maple/coords.minc", @@ -260,54 +266,57 @@ assert_fnd_exists(g_uu); assert_fnd_exists(K_uu); assert_fnd_exists(partial_d_ln_sqrt_g); assert_fnd_exists(partial_d_g_uu); -assert_fnd_exists(HA); -assert_fnd_exists(HB); -assert_fnd_exists(HC); -assert_fnd_exists(HD); +assert_fnd_exists(Theta_A); +assert_fnd_exists(Theta_B); +assert_fnd_exists(Theta_C); +assert_fnd_exists(Theta_D); -# Jacobian coefficients of H[ABCD] and H wrt Diff(h,y_rs[u]) +# Jacobian coefficients of Theta_[ABCD] and Theta wrt Diff(h,y_rs[u]) for u from 1 to N_ang do - partial_HA_wrt_partial_d_h__fnd[u] - := frontend('diff', [HA__fnd, Diff(h,y_rs[u])]); - partial_HB_wrt_partial_d_h__fnd[u] - := frontend('diff', [HB__fnd, Diff(h,y_rs[u])]); - partial_HC_wrt_partial_d_h__fnd[u] - := frontend('diff', [HC__fnd, Diff(h,y_rs[u])]); - partial_HD_wrt_partial_d_h__fnd[u] - := frontend('diff', [HD__fnd, Diff(h,y_rs[u])]); + partial_Theta_A_wrt_partial_d_h__fnd[u] + := frontend('diff', [Theta_A__fnd, Diff(h,y_rs[u])]); + partial_Theta_B_wrt_partial_d_h__fnd[u] + := frontend('diff', [Theta_B__fnd, Diff(h,y_rs[u])]); + partial_Theta_C_wrt_partial_d_h__fnd[u] + := frontend('diff', [Theta_C__fnd, Diff(h,y_rs[u])]); + partial_Theta_D_wrt_partial_d_h__fnd[u] + := frontend('diff', [Theta_D__fnd, Diff(h,y_rs[u])]); # equation (A1a) in my 1996 apparent horizon finding paper - temp := (3/2)*HA/HD^(5/2) + (1/2)*HB/HD^(3/2) + HC/HD^2; - partial_H_wrt_partial_d_h__fnd[u] - := + partial_HA_wrt_partial_d_h__fnd[u] / HD^(3/2) - + partial_HB_wrt_partial_d_h__fnd[u] / HD^(1/2) - + partial_HC_wrt_partial_d_h__fnd[u] / HD - - partial_HD_wrt_partial_d_h__fnd[u] * temp; + temp := + (3/2)*Theta_A/Theta_D^(5/2) + + (1/2)*Theta_B/Theta_D^(3/2) + + Theta_C/Theta_D^2; + partial_Theta_wrt_partial_d_h__fnd[u] + := + partial_Theta_A_wrt_partial_d_h__fnd[u] / Theta_D^(3/2) + + partial_Theta_B_wrt_partial_d_h__fnd[u] / Theta_D^(1/2) + + partial_Theta_C_wrt_partial_d_h__fnd[u] / Theta_D + - partial_Theta_D_wrt_partial_d_h__fnd[u] * temp; end do; -# Jacobian coefficients of H[AB] and H wrt Diff(h,y_rs[u],y_rs[v]) +# Jacobian coefficients of Theta_[AB] and Theta wrt Diff(h,y_rs[u],y_rs[v]) for u from 1 to N_ang do for v from u to N_ang do - partial_HA_wrt_partial_dd_h__fnd[u,v] - := frontend('diff', [HA__fnd, Diff(h,y_rs[u],y_rs[v])]); - partial_HB_wrt_partial_dd_h__fnd[u,v] - := frontend('diff', [HB__fnd, Diff(h,y_rs[u],y_rs[v])]); + partial_Theta_A_wrt_partial_dd_h__fnd[u,v] + := frontend('diff', [Theta_A__fnd, Diff(h,y_rs[u],y_rs[v])]); + partial_Theta_B_wrt_partial_dd_h__fnd[u,v] + := frontend('diff', [Theta_B__fnd, Diff(h,y_rs[u],y_rs[v])]); # equation (A1b) in my 1996 apparent horizon finding paper - partial_H_wrt_partial_dd_h__fnd[u,v] - := + partial_HA_wrt_partial_dd_h__fnd[u,v] / HD^(3/2) - + partial_HB_wrt_partial_dd_h__fnd[u,v] / HD^(1/2) + partial_Theta_wrt_partial_dd_h__fnd[u,v] + := + partial_Theta_A_wrt_partial_dd_h__fnd[u,v] / Theta_D^(3/2) + + partial_Theta_B_wrt_partial_dd_h__fnd[u,v] / Theta_D^(1/2) end do; end do; if (cg_flag) - then codegen2([partial_H_wrt_partial_d_h__fnd, - partial_H_wrt_partial_dd_h__fnd], - ['partial_H_wrt_partial_d_h', 'partial_H_wrt_partial_dd_h'], - "../gr.cg/horizon_Jacobian.c"); + then codegen2([partial_Theta_wrt_partial_d_h__fnd, + partial_Theta_wrt_partial_dd_h__fnd], + ['partial_Theta_wrt_partial_d_h', + 'partial_Theta_wrt_partial_dd_h'], + "../gr.cg/expansion_Jacobian.c"); fi; NULL; diff --git a/src/gr/make.code.defn b/src/gr/make.code.defn index a371c50..e93414f 100644 --- a/src/gr/make.code.defn +++ b/src/gr/make.code.defn @@ -2,8 +2,8 @@ # $Header$ # Source files in this directory -SRCS = horizon_function.cc \ - horizon_Jacobian.cc \ +SRCS = expansion.cc \ + expansion_Jacobian.cc \ Schwarzschild_EF.cc # Subdirectories containing source files diff --git a/src/gr/maple.log b/src/gr/maple.log index 0a28bb5..54c762f 100644 --- a/src/gr/maple.log +++ b/src/gr/maple.log @@ -586,19 +586,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; make_gfa('g_dd', {inert}, [1 .. N, 1 .. N], symmetric); make_gfa('K_dd', {inert}, [1 .. N, 1 .. N], symmetric); make_gfa('g_uu', {inert, fnd}, [1 .. N, 1 .. N], symmetric); @@ -612,31 +613,31 @@ partial_H_wrt_partial_dd_h__fnd; make_gfa('h', {inert, fnd}, [], none); make_gfa('s_d', {inert, fnd}, [1 .. N], none); make_gfa('partial_d_s_d', {inert, fnd}, [1 .. N, 1 .. N], none); - make_gfa('HA', {inert, fnd}, [], none); - make_gfa('HB', {inert, fnd}, [], none); - make_gfa('HC', {inert, fnd}, [], none); - make_gfa('HD', {inert, fnd}, [], none); - make_gfa('H', {inert, fnd}, [], none); - make_gfa('partial_d_HA', {inert, fnd}, [1 .. N], none); - make_gfa('partial_d_HB', {inert, fnd}, [1 .. N], none); - make_gfa('partial_d_HC', {inert, fnd}, [1 .. N], none); - make_gfa('partial_d_HD', {inert, fnd}, [1 .. N], none); - make_gfa('partial_d_H', {inert, fnd}, [1 .. N], none); - make_gfa('partial_HA_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], none) - ; - make_gfa('partial_HB_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], none) - ; - make_gfa('partial_HC_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], none) - ; - make_gfa('partial_HD_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], none) - ; - make_gfa('partial_HA_wrt_partial_dd_h', {inert, fnd}, + make_gfa('Theta_A', {inert, fnd}, [], none); + make_gfa('Theta_B', {inert, fnd}, [], none); + make_gfa('Theta_C', {inert, fnd}, [], none); + make_gfa('Theta_D', {inert, fnd}, [], none); + make_gfa('Theta', {inert, fnd}, [], none); + make_gfa('partial_d_Theta_A', {inert, fnd}, [1 .. N], none); + make_gfa('partial_d_Theta_B', {inert, fnd}, [1 .. N], none); + make_gfa('partial_d_Theta_C', {inert, fnd}, [1 .. N], none); + make_gfa('partial_d_Theta_D', {inert, fnd}, [1 .. N], none); + make_gfa('partial_d_Theta', {inert, fnd}, [1 .. N], none); + make_gfa('partial_Theta_A_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], + none); + make_gfa('partial_Theta_B_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], + none); + make_gfa('partial_Theta_C_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], + none); + make_gfa('partial_Theta_D_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], + none); + make_gfa('partial_Theta_A_wrt_partial_dd_h', {inert, fnd}, [1 .. N_ang, 1 .. N_ang], symmetric); - make_gfa('partial_HB_wrt_partial_dd_h', {inert, fnd}, + make_gfa('partial_Theta_B_wrt_partial_dd_h', {inert, fnd}, [1 .. N_ang, 1 .. N_ang], symmetric); - make_gfa('partial_H_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], none) - ; - make_gfa('partial_H_wrt_partial_dd_h', {inert, fnd}, + make_gfa('partial_Theta_wrt_partial_d_h', {inert, fnd}, [1 .. N_ang], + none); + make_gfa('partial_Theta_wrt_partial_dd_h', {inert, fnd}, [1 .. N_ang, 1 .. N_ang], symmetric); NULL end proc @@ -648,19 +649,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; option remember; var_list := [args[2 .. nargs]]; if type(operand, indexed) and op(0, operand) = 'g_dd' and @@ -683,19 +685,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_dd); assert_fnd_exists(g_uu, fnd); @@ -713,19 +716,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_uu); assert_fnd_exists(K_dd); @@ -756,19 +760,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_dd); assert_fnd_exists(g_uu); @@ -793,19 +798,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_dd); assert_fnd_exists(g_uu); @@ -823,8 +829,8 @@ end proc horizon := proc(cg_flag::boolean) non_unit_normal(); non_unit_normal_deriv(); - horizon_function(cg_flag); - horizon_Jacobian(cg_flag); + expansion(cg_flag); + expansion_Jacobian(cg_flag); NULL end proc @@ -835,19 +841,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(h); assert_fnd_exists(X_ud); @@ -865,19 +872,20 @@ rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(h); assert_fnd_exists(X_ud); @@ -897,26 +905,27 @@ partial_H_wrt_partial_dd_h__fnd; NULL end proc -horizon_function := proc(cg_flag::boolean) +expansion := proc(cg_flag::boolean) local i, j, k, l; global delta, N, N_ang, xx, yy, zz, x_xyz, x_xyz_list, x_xyz_set, r, r__fnd, rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_uu); assert_fnd_exists(K_uu); @@ -924,88 +933,94 @@ partial_H_wrt_partial_dd_h__fnd; assert_fnd_exists(partial_d_g_uu); assert_fnd_exists(s_d, fnd); assert_fnd_exists(partial_d_s_d, fnd); - HA__fnd := -msum('g_uu[i, k]*s_d__fnd[k]*g_uu[j, l]*s_d__fnd[l]* + Theta_A__fnd := -msum('g_uu[i, k]*s_d__fnd[k]*g_uu[j, l]*s_d__fnd[l]* partial_d_s_d__fnd[i, j]', 'i' = 1 .. N, 'j' = 1 .. N, 'k' = 1 .. N, 'l' = 1 .. N) - 1/2*msum('g_uu[i, j]*s_d__fnd[j]* partial_d_g_uu[i, k, l]*s_d__fnd[k]*s_d__fnd[l]', 'i' = 1 .. N, 'j' = 1 .. N, 'k' = 1 .. N, 'l' = 1 .. N); - HB__fnd := msum('partial_d_g_uu[i, i, j]*s_d__fnd[j]', 'i' = 1 .. N, - 'j' = 1 .. N) + msum('g_uu[i, j]*partial_d_s_d__fnd[i, j]', + Theta_B__fnd := msum('partial_d_g_uu[i, i, j]*s_d__fnd[j]', 'i' = 1 .. N, 'j' = 1 .. N) + msum( - 'g_uu[i, j]*partial_d_ln_sqrt_g[i]*s_d__fnd[j]', 'i' = 1 .. N, + 'g_uu[i, j]*partial_d_s_d__fnd[i, j]', 'i' = 1 .. N, 'j' = 1 .. N) + + msum('g_uu[i, j]*partial_d_ln_sqrt_g[i]*s_d__fnd[j]', + 'i' = 1 .. N, 'j' = 1 .. N); + Theta_C__fnd := msum('K_uu[i, j]*s_d__fnd[i]*s_d__fnd[j]', 'i' = 1 .. N, 'j' = 1 .. N); - HC__fnd := msum('K_uu[i, j]*s_d__fnd[i]*s_d__fnd[j]', 'i' = 1 .. N, + Theta_D__fnd := msum('g_uu[i, j]*s_d__fnd[i]*s_d__fnd[j]', 'i' = 1 .. N, 'j' = 1 .. N); - HD__fnd := msum('g_uu[i, j]*s_d__fnd[i]*s_d__fnd[j]', 'i' = 1 .. N, - 'j' = 1 .. N); - H__fnd := - HA__fnd/HD__fnd^(3/2) + HB__fnd/HD__fnd^(1/2) + HC__fnd/HD__fnd - K - ; - if cg_flag then codegen2([HA__fnd, HB__fnd, HC__fnd, HD__fnd], - ['HA', 'HB', 'HC', 'HD'], "../gr.cg/horizon_function.c") + Theta__fnd := Theta_A__fnd/Theta_D__fnd^(3/2) + + Theta_B__fnd/Theta_D__fnd^(1/2) + Theta_C__fnd/Theta_D__fnd - K; + if cg_flag then codegen2( + [Theta_A__fnd, Theta_B__fnd, Theta_C__fnd, Theta_D__fnd], + ['Theta_A', 'Theta_B', 'Theta_C', 'Theta_D'], + "../gr.cg/expansion.c") end if; NULL end proc -horizon_Jacobian := proc(cg_flag::boolean) +expansion_Jacobian := proc(cg_flag::boolean) local u, v, temp; global delta, N, N_ang, xx, yy, zz, x_xyz, x_xyz_list, x_xyz_set, r, r__fnd, rho, sigma, y_rs, y_rs_list, y_rs_set, xy_all_list, xy_all_set, inert, none, fnd, symmetric3_23, X_ud, X_ud__fnd, X_udd, X_udd__fnd, g_dd, K_dd, g_uu, g_uu__fnd, K_uu, K_uu__fnd, K, K__fnd, partial_d_g_dd, partial_d_ln_sqrt_g, partial_d_ln_sqrt_g__fnd, partial_d_g_uu, partial_d_g_uu__fnd, h, h__fnd, -s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, HA, -HA__fnd, HB, HB__fnd, HC, HC__fnd, HD, HD__fnd, H, H__fnd, partial_d_HA, -partial_d_HA__fnd, partial_d_HB, partial_d_HB__fnd, partial_d_HC, -partial_d_HC__fnd, partial_d_HD, partial_d_HD__fnd, partial_d_H, -partial_d_H__fnd, partial_HA_wrt_partial_d_h, -partial_HA_wrt_partial_d_h__fnd, partial_HB_wrt_partial_d_h, -partial_HB_wrt_partial_d_h__fnd, partial_HC_wrt_partial_d_h, -partial_HC_wrt_partial_d_h__fnd, partial_HD_wrt_partial_d_h, -partial_HD_wrt_partial_d_h__fnd, partial_HA_wrt_partial_dd_h, -partial_HA_wrt_partial_dd_h__fnd, partial_HB_wrt_partial_dd_h, -partial_HB_wrt_partial_dd_h__fnd, partial_H_wrt_partial_d_h, -partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h, -partial_H_wrt_partial_dd_h__fnd; +s_d, s_d__fnd, partial_d_s_d, partial_d_s_d__fnd, n_u, n_u__fnd, Theta_A, +Theta_A__fnd, Theta_B, Theta_B__fnd, Theta_C, Theta_C__fnd, Theta_D, +Theta_D__fnd, Theta, Theta__fnd, partial_d_Theta_A, partial_d_Theta_A__fnd, +partial_d_Theta_B, partial_d_Theta_B__fnd, partial_d_Theta_C, +partial_d_Theta_C__fnd, partial_d_Theta_D, partial_d_Theta_D__fnd, +partial_d_Theta_, partial_d_Theta__fnd, partial_Theta_A_wrt_partial_d_h, +partial_Theta_A_wrt_partial_d_h__fnd, partial_Theta_B_wrt_partial_d_h, +partial_Theta_B_wrt_partial_d_h__fnd, partial_Theta_C_wrt_partial_d_h, +partial_Theta_C_wrt_partial_d_h__fnd, partial_Theta_D_wrt_partial_d_h, +partial_Theta_D_wrt_partial_d_h__fnd, partial_Theta_A_wrt_partial_dd_h, +partial_Theta_A_wrt_partial_dd_h__fnd, partial_Theta_B_wrt_partial_dd_h, +partial_Theta_B_wrt_partial_dd_h__fnd, partial_Theta_wrt_partial_d_h, +partial_Theta_wrt_partial_d_h__fnd, partial_Theta_wrt_partial_dd_h, +partial_Theta_wrt_partial_dd_h__fnd; printf("%a...\n", procname); assert_fnd_exists(g_uu); assert_fnd_exists(K_uu); assert_fnd_exists(partial_d_ln_sqrt_g); assert_fnd_exists(partial_d_g_uu); - assert_fnd_exists(HA); - assert_fnd_exists(HB); - assert_fnd_exists(HC); - assert_fnd_exists(HD); + assert_fnd_exists(Theta_A); + assert_fnd_exists(Theta_B); + assert_fnd_exists(Theta_C); + assert_fnd_exists(Theta_D); for u to N_ang do - partial_HA_wrt_partial_d_h__fnd[u] := - frontend('diff', [HA__fnd, Diff(h, y_rs[u])]); - partial_HB_wrt_partial_d_h__fnd[u] := - frontend('diff', [HB__fnd, Diff(h, y_rs[u])]); - partial_HC_wrt_partial_d_h__fnd[u] := - frontend('diff', [HC__fnd, Diff(h, y_rs[u])]); - partial_HD_wrt_partial_d_h__fnd[u] := - frontend('diff', [HD__fnd, Diff(h, y_rs[u])]); - temp := 3/2*HA/HD^(5/2) + 1/2*HB/HD^(3/2) + HC/HD^2; - partial_H_wrt_partial_d_h__fnd[u] := - partial_HA_wrt_partial_d_h__fnd[u]/HD^(3/2) - + partial_HB_wrt_partial_d_h__fnd[u]/HD^(1/2) - + partial_HC_wrt_partial_d_h__fnd[u]/HD - - partial_HD_wrt_partial_d_h__fnd[u]*temp + partial_Theta_A_wrt_partial_d_h__fnd[u] := + frontend('diff', [Theta_A__fnd, Diff(h, y_rs[u])]); + partial_Theta_B_wrt_partial_d_h__fnd[u] := + frontend('diff', [Theta_B__fnd, Diff(h, y_rs[u])]); + partial_Theta_C_wrt_partial_d_h__fnd[u] := + frontend('diff', [Theta_C__fnd, Diff(h, y_rs[u])]); + partial_Theta_D_wrt_partial_d_h__fnd[u] := + frontend('diff', [Theta_D__fnd, Diff(h, y_rs[u])]); + temp := 3/2*Theta_A/Theta_D^(5/2) + 1/2*Theta_B/Theta_D^(3/2) + + Theta_C/Theta_D^2; + partial_Theta_wrt_partial_d_h__fnd[u] := + partial_Theta_A_wrt_partial_d_h__fnd[u]/Theta_D^(3/2) + + partial_Theta_B_wrt_partial_d_h__fnd[u]/Theta_D^(1/2) + + partial_Theta_C_wrt_partial_d_h__fnd[u]/Theta_D + - partial_Theta_D_wrt_partial_d_h__fnd[u]*temp end do; for u to N_ang do for v from u to N_ang do - partial_HA_wrt_partial_dd_h__fnd[u, v] := - frontend('diff', [HA__fnd, Diff(h, y_rs[u], y_rs[v])]); - partial_HB_wrt_partial_dd_h__fnd[u, v] := - frontend('diff', [HB__fnd, Diff(h, y_rs[u], y_rs[v])]); - partial_H_wrt_partial_dd_h__fnd[u, v] := - partial_HA_wrt_partial_dd_h__fnd[u, v]/HD^(3/2) - + partial_HB_wrt_partial_dd_h__fnd[u, v]/HD^(1/2) + partial_Theta_A_wrt_partial_dd_h__fnd[u, v] := + frontend('diff', [Theta_A__fnd, Diff(h, y_rs[u], y_rs[v])]) + ; + partial_Theta_B_wrt_partial_dd_h__fnd[u, v] := + frontend('diff', [Theta_B__fnd, Diff(h, y_rs[u], y_rs[v])]) + ; + partial_Theta_wrt_partial_dd_h__fnd[u, v] := + partial_Theta_A_wrt_partial_dd_h__fnd[u, v]/Theta_D^(3/2) + + + partial_Theta_B_wrt_partial_dd_h__fnd[u, v]/Theta_D^(1/2) end do end do; - if cg_flag then codegen2( - [partial_H_wrt_partial_d_h__fnd, partial_H_wrt_partial_dd_h__fnd], - ['partial_H_wrt_partial_d_h', 'partial_H_wrt_partial_dd_h'], - "../gr.cg/horizon_Jacobian.c") + if cg_flag then codegen2([partial_Theta_wrt_partial_d_h__fnd, + partial_Theta_wrt_partial_dd_h__fnd], + ['partial_Theta_wrt_partial_d_h', 'partial_Theta_wrt_partial_dd_h'] + , "../gr.cg/expansion_Jacobian.c") end if; NULL end proc @@ -1025,7 +1040,7 @@ codegen2(g_uu) --> "../gr.cg/inverse_metric.c" find temporary variables --> `codegen2/temps` convert Diff(expr,rho,sigma) --> PARTIAL_RHO_SIGMA(expr) etc -bytes used=1006876, alloc=917336, time=0.09 +bytes used=1000088, alloc=917336, time=0.12 --> `codegen2/fix_Diff` convert R_dd[2,3] --> R_dd_23 etc --> `codegen2/unindex` @@ -1038,7 +1053,7 @@ codegen2([K, K_uu]) --> "../gr.cg/extrinsic_curvature_trace_raise.c" convert --> equation list --> `codegen2/eqnlist` optimizing computation sequence -bytes used=2007252, alloc=1441528, time=0.17 +bytes used=2000352, alloc=1441528, time=0.17 --> `codegen2/optimize` find temporary variables --> `codegen2/temps` @@ -1046,39 +1061,39 @@ bytes used=2007252, alloc=1441528, time=0.17 --> `codegen2/fix_Diff` convert R_dd[2,3] --> R_dd_23 etc --> `codegen2/unindex` -bytes used=3007472, alloc=1638100, time=0.25 +bytes used=3000584, alloc=1638100, time=0.22 convert p/q --> RATIONAL(p/q) --> `codegen2/fix_rationals` writing C code > curvature(true); inverse_metric_gradient... -bytes used=4007696, alloc=1638100, time=0.33 +bytes used=4000860, alloc=1703624, time=0.28 codegen2(partial_d_g_uu) --> "../gr.cg/inverse_metric_gradient.c" --> `codegen2/input` convert --> equation list --> `codegen2/eqnlist` optimizing computation sequence -bytes used=5007880, alloc=1703624, time=0.43 +bytes used=5001020, alloc=1703624, time=0.38 --> `codegen2/optimize` find temporary variables --> `codegen2/temps` convert Diff(expr,rho,sigma) --> PARTIAL_RHO_SIGMA(expr) etc -bytes used=6008088, alloc=1769148, time=0.49 +bytes used=6001324, alloc=1769148, time=0.44 --> `codegen2/fix_Diff` convert R_dd[2,3] --> R_dd_23 etc --> `codegen2/unindex` -bytes used=7008488, alloc=1769148, time=0.56 +bytes used=7001528, alloc=1769148, time=0.51 convert p/q --> RATIONAL(p/q) --> `codegen2/fix_rationals` writing C code -bytes used=8008672, alloc=1769148, time=0.62 +bytes used=8001896, alloc=1769148, time=0.57 metric_det_gradient... codegen2(partial_d_ln_sqrt_g) --> "../gr.cg/metric_det_gradient.c" --> `codegen2/input` convert --> equation list --> `codegen2/eqnlist` optimizing computation sequence -bytes used=9008904, alloc=1769148, time=0.75 +bytes used=9002080, alloc=1769148, time=0.64 --> `codegen2/optimize` find temporary variables --> `codegen2/temps` @@ -1093,90 +1108,90 @@ codegen/C/expression: Unknown function: RATIONAL will be left as is. > horizon(true); non_unit_normal... non_unit_normal_deriv... -bytes used=10009180, alloc=1769148, time=0.83 -horizon_function... -bytes used=11009748, alloc=1834672, time=0.91 -codegen2([HA, HB, HC, HD]) --> "../gr.cg/horizon_function.c" +bytes used=10002316, alloc=1769148, time=0.69 +expansion... +bytes used=11002748, alloc=1834672, time=0.77 +codegen2([Theta_A, Theta_B, Theta_C, Theta_D]) --> "../gr.cg/expansion.c" --> `codegen2/input` convert --> equation list --> `codegen2/eqnlist` optimizing computation sequence -bytes used=12010468, alloc=1834672, time=0.98 -bytes used=13010628, alloc=2031244, time=1.08 -bytes used=14010940, alloc=2031244, time=1.16 +bytes used=12003104, alloc=1834672, time=0.83 +bytes used=13003356, alloc=2031244, time=0.95 +bytes used=14003520, alloc=2031244, time=1.05 --> `codegen2/optimize` find temporary variables --> `codegen2/temps` convert Diff(expr,rho,sigma) --> PARTIAL_RHO_SIGMA(expr) etc -bytes used=15011240, alloc=2096768, time=1.23 +bytes used=15003896, alloc=2096768, time=1.11 --> `codegen2/fix_Diff` convert R_dd[2,3] --> R_dd_23 etc -bytes used=16011692, alloc=2096768, time=1.31 +bytes used=16004136, alloc=2096768, time=1.18 --> `codegen2/unindex` -bytes used=17012040, alloc=2096768, time=1.37 +bytes used=17004388, alloc=2096768, time=1.25 convert p/q --> RATIONAL(p/q) -bytes used=18012780, alloc=2096768, time=1.44 +bytes used=18004580, alloc=2096768, time=1.31 --> `codegen2/fix_rationals` writing C code codegen/C/expression: Unknown function: PARTIAL_RHO will be left as is. codegen/C/expression: Unknown function: PARTIAL_SIGMA will be left as is. -bytes used=19012960, alloc=2096768, time=1.52 codegen/C/expression: Unknown function: PARTIAL_RHO_RHO will be left as is. codegen/C/expression: Unknown function: PARTIAL_RHO_SIGMA will be left as is. codegen/C/expression: Unknown function: PARTIAL_SIGMA_SIGMA will be left as is. -bytes used=20013320, alloc=2096768, time=1.66 -horizon_Jacobian... -bytes used=21013548, alloc=2096768, time=1.73 -codegen2([partial_H_wrt_partial_d_h, partial_H_wrt_partial_dd_h]) --> "../gr.cg/horizon_Jacobian.c" +bytes used=19004732, alloc=2096768, time=1.37 +bytes used=20004972, alloc=2096768, time=1.47 +expansion_Jacobian... +bytes used=21005184, alloc=2096768, time=1.56 +codegen2([partial_Theta_wrt_partial_d_h, partial_Theta_wrt_partial_dd_h]) --> "../gr.cg/expansion_Jacobian.c" --> `codegen2/input` convert --> equation list -bytes used=22013808, alloc=2096768, time=1.79 +bytes used=22005440, alloc=2096768, time=1.63 --> `codegen2/eqnlist` optimizing computation sequence -bytes used=23014336, alloc=2096768, time=1.87 -bytes used=24014548, alloc=2293340, time=1.92 -bytes used=25014936, alloc=2293340, time=1.98 -bytes used=26015132, alloc=2293340, time=2.08 -bytes used=27015308, alloc=2293340, time=2.20 -bytes used=28015956, alloc=2293340, time=2.36 -bytes used=29016184, alloc=2293340, time=2.48 -bytes used=30016340, alloc=2424388, time=2.62 -bytes used=31016540, alloc=2424388, time=2.72 -bytes used=32016792, alloc=2555436, time=2.82 +bytes used=23005788, alloc=2162292, time=1.71 +bytes used=24006060, alloc=2293340, time=1.78 +bytes used=25006304, alloc=2293340, time=1.84 +bytes used=26006456, alloc=2293340, time=1.94 +bytes used=27007216, alloc=2293340, time=2.10 +bytes used=28007500, alloc=2293340, time=2.26 +bytes used=29007664, alloc=2293340, time=2.39 +bytes used=30007868, alloc=2424388, time=2.50 +bytes used=31008068, alloc=2424388, time=2.60 +bytes used=32009692, alloc=2555436, time=2.71 --> `codegen2/optimize` find temporary variables --> `codegen2/temps` convert Diff(expr,rho,sigma) --> PARTIAL_RHO_SIGMA(expr) etc -bytes used=33016952, alloc=2555436, time=2.89 -bytes used=34017300, alloc=2555436, time=2.96 -bytes used=35017536, alloc=2555436, time=3.03 +bytes used=33010028, alloc=2555436, time=2.77 +bytes used=34010432, alloc=2555436, time=2.84 +bytes used=35010740, alloc=2555436, time=2.91 --> `codegen2/fix_Diff` +bytes used=36021172, alloc=2555436, time=2.99 convert R_dd[2,3] --> R_dd_23 etc -bytes used=36018544, alloc=2555436, time=3.10 -bytes used=37018944, alloc=2555436, time=3.17 -bytes used=38019240, alloc=2555436, time=3.24 -bytes used=39019452, alloc=2555436, time=3.31 +bytes used=37021516, alloc=2555436, time=3.05 +bytes used=38021792, alloc=2555436, time=3.12 +bytes used=39022208, alloc=2555436, time=3.20 --> `codegen2/unindex` -bytes used=40019836, alloc=2555436, time=3.38 -bytes used=41019988, alloc=2555436, time=3.45 -bytes used=42020192, alloc=2555436, time=3.51 -bytes used=43020452, alloc=2555436, time=3.58 +bytes used=40022676, alloc=2555436, time=3.27 +bytes used=41022924, alloc=2555436, time=3.33 +bytes used=42023096, alloc=2555436, time=3.40 +bytes used=43023256, alloc=2555436, time=3.47 +bytes used=44023688, alloc=2555436, time=3.53 convert p/q --> RATIONAL(p/q) -bytes used=44021232, alloc=2555436, time=3.65 -bytes used=45021924, alloc=2555436, time=3.71 -bytes used=46022240, alloc=2555436, time=3.77 -bytes used=47023068, alloc=2555436, time=3.84 -bytes used=48023224, alloc=2555436, time=3.92 +bytes used=45023996, alloc=2555436, time=3.60 +bytes used=46024268, alloc=2555436, time=3.67 +bytes used=47024688, alloc=2555436, time=3.73 +bytes used=48025108, alloc=2555436, time=3.80 --> `codegen2/fix_rationals` writing C code -bytes used=49023460, alloc=2555436, time=3.99 -bytes used=50023664, alloc=2555436, time=4.04 -bytes used=51023844, alloc=2555436, time=4.20 -bytes used=52024240, alloc=2555436, time=4.32 -bytes used=53024400, alloc=2555436, time=4.48 -bytes used=54024568, alloc=2555436, time=4.58 +bytes used=49025260, alloc=2555436, time=3.86 +bytes used=50025744, alloc=2555436, time=3.91 +bytes used=51026008, alloc=2555436, time=4.03 +bytes used=52026168, alloc=2555436, time=4.18 +bytes used=53026328, alloc=2555436, time=4.32 +bytes used=54026584, alloc=2555436, time=4.44 > quit -bytes used=54791456, alloc=2555436, time=4.67 +bytes used=54895808, alloc=2555436, time=4.56 diff --git a/src/gr/setup_gr_gfas.maple b/src/gr/setup_gr_gfas.maple index ff39681..6af4aed 100644 --- a/src/gr/setup_gr_gfas.maple +++ b/src/gr/setup_gr_gfas.maple @@ -44,39 +44,38 @@ make_gfa('h', {inert,fnd}, [], none); make_gfa('s_d', {inert,fnd}, [1..N], none); make_gfa('partial_d_s_d', {inert,fnd}, [1..N, 1..N], none); -# subexpressions for computing LHS of apparent horizon equation -# ... these are defined by (15) in my 1996 apparent horizon finding paper -make_gfa('HA', {inert,fnd}, [], none); -make_gfa('HB', {inert,fnd}, [], none); -make_gfa('HC', {inert,fnd}, [], none); -make_gfa('HD', {inert,fnd}, [], none); - -# LHS of apparent horizon equation -make_gfa('H', {inert,fnd}, [], none); - -# 1st derivatives of H[ABCD] and of H -make_gfa('partial_d_HA', {inert,fnd}, [1..N], none); -make_gfa('partial_d_HB', {inert,fnd}, [1..N], none); -make_gfa('partial_d_HC', {inert,fnd}, [1..N], none); -make_gfa('partial_d_HD', {inert,fnd}, [1..N], none); -make_gfa('partial_d_H', {inert,fnd}, [1..N], none); - -# Jacobian coefficients for H[ABCD] -# these are the partial derivatives of H[ABCD] +# expansion of horizon and subexpressions for computing it +# ... these are defined by (14) and (15) in my 1996 AH-finding paper +# except I now use Theta instead of H for the LHS +make_gfa('Theta_A', {inert,fnd}, [], none); +make_gfa('Theta_B', {inert,fnd}, [], none); +make_gfa('Theta_C', {inert,fnd}, [], none); +make_gfa('Theta_D', {inert,fnd}, [], none); +make_gfa('Theta', {inert,fnd}, [], none); + +# 1st derivatives of Theta[ABCD] and of Theta +make_gfa('partial_d_Theta_A', {inert,fnd}, [1..N], none); +make_gfa('partial_d_Theta_B', {inert,fnd}, [1..N], none); +make_gfa('partial_d_Theta_C', {inert,fnd}, [1..N], none); +make_gfa('partial_d_Theta_D', {inert,fnd}, [1..N], none); +make_gfa('partial_d_Theta', {inert,fnd}, [1..N], none); + +# Jacobian coefficients for Theta[ABCD] +# these are the partial derivatives of Theta[ABCD] # ... wrt Diff(h,x_rs[x]) -make_gfa('partial_HA_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); -make_gfa('partial_HB_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); -make_gfa('partial_HC_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); -make_gfa('partial_HD_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); +make_gfa('partial_Theta_A_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); +make_gfa('partial_Theta_B_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); +make_gfa('partial_Theta_C_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); +make_gfa('partial_Theta_D_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); # ... wrt Diff(h,x_rs[x],x_rs[y]) -make_gfa('partial_HA_wrt_partial_dd_h', {inert,fnd}, +make_gfa('partial_Theta_A_wrt_partial_dd_h', {inert,fnd}, [1..N_ang, 1..N_ang], symmetric); -make_gfa('partial_HB_wrt_partial_dd_h', {inert,fnd}, +make_gfa('partial_Theta_B_wrt_partial_dd_h', {inert,fnd}, [1..N_ang, 1..N_ang], symmetric); -# Jacobian coefficients for H itself -make_gfa('partial_H_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); -make_gfa('partial_H_wrt_partial_dd_h', {inert,fnd}, +# Jacobian coefficients for Theta itself +make_gfa('partial_Theta_wrt_partial_d_h', {inert,fnd}, [1..N_ang], none); +make_gfa('partial_Theta_wrt_partial_dd_h', {inert,fnd}, [1..N_ang, 1..N_ang], symmetric); NULL; |