aboutsummaryrefslogtreecommitdiff
path: root/src/metric.F
diff options
context:
space:
mode:
authorjthorn <jthorn@e296648e-0e4f-0410-bd07-d597d9acff87>2002-06-16 18:42:41 +0000
committerjthorn <jthorn@e296648e-0e4f-0410-bd07-d597d9acff87>2002-06-16 18:42:41 +0000
commitf7216a27e1388f70b04fe68c2bd43449d668f457 (patch)
tree0c7673b21efc4745fd16afb6b320c63489eb3150 /src/metric.F
parentcf2fb9a92562b9471403b8205ce75d975de144d4 (diff)
[[This is a redo of my "cvs import" of 2002/06/11, this time using proper
cvs operations (commit/delete/add) to preserve the full CVS history of this thorn.]] This is a major cleanup/revision of AEIThorns/Exact. Major user-visible changes: * major expansion of doc/documentation.tex * major expansion of documentation in param.ccl file * rename all parameters, systematize spacetime/coordinate/parameter names (there is a perl script in par/convert-pars.pl to convert old parameter files to the new names) * [from Mitica Vulcanov] many additions and fixes to cosmological solutions and Schwarzschild-Lemaitre * fix stress-energy tensor computations so they work -- before they were all disabled in CVS (INCLUDES lines were commented out in interface.ccl) due to requiring excessive friendship with evolution thorns and/or public parameters; new code copies parameters to restricted grid scalars, which Cactus automagically "pushes" to friends * added some more tests to testsuite, though these don't yet work fully Additional internal changes: * rename many Fortran subroutines (and a few C ones too) so their names start with the thorn name to reduce the chances of name collisions with other thorns * move all metrics to subdirectory so the main source directory isn't so cluttered * move two files containing subroutines which were never called (they didn't belong in this thorn, but somehow got into cvs by accident) into new archive/ directory * some (small) improvements in efficiency -- the exact_model parameter is now decoded from a keyword (string) to an integer once at INITIAL, and that integer tested by the stress-energy tensor code, rather than requiring a separate series of string tests at each grid point (!) like the old stress-energy tensor code did Modified Files: ParamCheck.c added a check to make sure we don't try to set the shift if it doesn't have storage Startup.c make.code.defn slice_data.F slice_evolve.F slice_initialize.F Added Files: Bona_Masso_data.F moved from old exactdata.F blended_boundary.F moved from old exactblendbound.F boundary.F moved from old exactboundary.F decode_pars.F new file to decode exact_model into integer, copy parameters to grid scalars for Calc_Tmunu code gauge.F moved from old exactgauge.F initialize.F moved from old exactinitialize.F linear_extrap_one_bndry.F moved from old linextraponebound.F metric.F moved from old exactmetric.F xyz_blended_boundary.F moved from old exactcartblendbound.F git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/Exact/trunk@101 e296648e-0e4f-0410-bd07-d597d9acff87
Diffstat (limited to 'src/metric.F')
-rw-r--r--src/metric.F288
1 files changed, 288 insertions, 0 deletions
diff --git a/src/metric.F b/src/metric.F
new file mode 100644
index 0000000..912f399
--- /dev/null
+++ b/src/metric.F
@@ -0,0 +1,288 @@
+c This subroutine calculates the 4-metric and its inverse at an event,
+c by decoding decoded_exact_model and calling the appropriate subroutine
+C $Header$
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+
+#include "param_defs.inc"
+
+ subroutine Exact__metric(
+ $ decoded_exact_model,
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz,rama)
+
+ implicit none
+ DECLARE_CCTK_FUNCTIONS
+
+c arguments
+ CCTK_INT decoded_exact_model
+ CCTK_REAL x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz, rama
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c
+c Minkowski spacetime
+c
+
+ if (decoded_exact_model .eq. EXACT__Minkowski) then
+ call Exact__Minkowski(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Minkowski_shift) then
+ call Exact__Minkowski_shift(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Minkowski_funny) then
+ call Exact__Minkowski_funny(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Minkowski_gauge_wave) then
+ call Exact__Minkowski_gauge_wave(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c
+c black hole spacetimes
+c
+
+ elseif (decoded_exact_model .eq. EXACT__Schwarzschild_EF) then
+ call Exact__Schwarzschild_EF(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Schwarzschild_PG) then
+ call Exact__Schwarzschild_PG(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Schwarzschild_Novikov) then
+ call Exact__Schwarzschild_Novikov(x,y,z,t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Kerr_BoyerLindquist) then
+ call Exact__Kerr_BoyerLindquist(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Kerr_KerrSchild) then
+ call Exact__Kerr_KerrSchild(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Schwarzschild_Lemaitre) then
+ call Exact__Schwarzschild_Lemaitre(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__multi_BH) then
+ call Exact__multi_BH(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+c
+c not fully implemented yet -- see Nina Jansen for details
+c
+c elseif (decoded_exact_model .eq. EXACT__Alvi) then
+c call Exact__Alvi(
+c $ x, y, z, t,
+c $ gdtt, gdtx, gdty, gdtz,
+c $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+c $ gutt, gutx, guty, gutz,
+c $ guxx, guyy, guzz, guxy, guyz, guxz)
+c
+
+ elseif (decoded_exact_model .eq. EXACT__Thorne_fakebinary) then
+ call Exact__Thorne_fakebinary(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c
+c cosmological spacetimes
+c
+
+ elseif (decoded_exact_model .eq. EXACT__Lemaitre) then
+ call Exact__Lemaitre(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Robertson_Walker) then
+ call Exact__Robertson_Walker(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz,rama)
+
+ elseif (decoded_exact_model .eq. EXACT__de_Sitter) then
+ call Exact__de_Sitter(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__de_Sitter_Lambda) then
+ call Exact__de_Sitter_Lambda(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__anti_de_Sitter_Lambda) then
+ call Exact__anti_de_Sitter_Lambda(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Bianchi_I) then
+ call Exact__Bianchi_I(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Goedel) then
+ call Exact__Goedel(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Bertotti) then
+ call Exact__Bertotti(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Kasner_like) then
+ call Exact__Kasner_like(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Kasner_axisymmetric) then
+ call Exact__Kasner_axisymmetric(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Kasner_generalized) then
+ call Exact__Kasner_generalized(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__Milne) then
+ call Exact__Milne(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c
+c miscellaneous spacetimes
+c
+
+ elseif (decoded_exact_model .eq. EXACT__boost_rotation_symmetric) then
+ call Exact__boost_rotation_symmetric(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__bowl) then
+ call Exact__bowl(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+ elseif (decoded_exact_model .eq. EXACT__constant_density_star) then
+ call Exact__constant_density_star(
+ $ x, y, z, t,
+ $ gdtt, gdtx, gdty, gdtz,
+ $ gdxx, gdyy, gdzz, gdxy, gdyz, gdxz,
+ $ gutt, gutx, guty, gutz,
+ $ guxx, guyy, guzz, guxy, guyz, guxz)
+
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+ else
+ call CCTK_WARN(0,"Unknown value of decoded_exact_model")
+ endif
+
+ return
+ end