aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrhaas <rhaas@ac85fae7-cede-4708-beff-ae01c7fa1c26>2012-08-09 06:08:06 +0000
committerrhaas <rhaas@ac85fae7-cede-4708-beff-ae01c7fa1c26>2012-08-09 06:08:06 +0000
commitd2b532c48a0ec8bd2eaa27ab01945df853820c5b (patch)
tree0aea8356549829580ee70bc08487a07a1a85f116
parent2b88146519d4cbb97b68f6e5f0f358c48e9509b9 (diff)
Snapshot of ET GRHydro_InitData rev. 132 with a poloidal magnetic field routine
added. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/GRHydro_InitData/trunk@134 ac85fae7-cede-4708-beff-ae01c7fa1c26
-rw-r--r--par/MagTOVstar.par671
-rw-r--r--par/TOVstar.par675
-rw-r--r--par/advectedloop2D.par428
-rw-r--r--par/advectedloop3D.par167
-rw-r--r--par/balsara1_1d.par353
-rw-r--r--par/balsara1b.par66
-rw-r--r--par/balsara1c.par78
-rw-r--r--par/bondi-ks.par166
-rw-r--r--par/bondi-punc-iso.par606
-rw-r--r--par/bondi-punc.par606
-rw-r--r--par/bondi-punc2.par595
-rw-r--r--par/bondi-sch.par218
-rw-r--r--par/bondi-sch2.par153
-rw-r--r--par/cylexp.par101
-rw-r--r--par/rotor.par82
-rw-r--r--param.ccl155
-rw-r--r--schedule.ccl66
-rw-r--r--src/CheckParam.c20
-rw-r--r--src/GRHydro_AdvectedLoopM.F90262
-rw-r--r--src/GRHydro_AlfvenWaveM.F90178
-rw-r--r--src/GRHydro_Bondi.c1180
-rw-r--r--src/GRHydro_BondiM.c1081
-rw-r--r--src/GRHydro_BondiM_new.F90242
-rw-r--r--src/GRHydro_Bondi_new.F90359
-rw-r--r--src/GRHydro_C2P2CM_eosomni.F90196
-rw-r--r--src/GRHydro_CylindricalExplosionM.F908
-rw-r--r--src/GRHydro_MonopoleM.F9044
-rw-r--r--src/GRHydro_P2C2PM_eosomni.F90183
-rw-r--r--src/GRHydro_PoloidalMagFieldM.F90152
-rw-r--r--src/GRHydro_RotorM.F90166
-rw-r--r--src/GRHydro_ShockTubeM.F906
-rw-r--r--src/make.code.defn10
32 files changed, 9260 insertions, 13 deletions
diff --git a/par/MagTOVstar.par b/par/MagTOVstar.par
new file mode 100644
index 0000000..5621c00
--- /dev/null
+++ b/par/MagTOVstar.par
@@ -0,0 +1,671 @@
+#==============================================================================
+# Poloidally Magnetized TOV star: mclachlan TOVSolver GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Poloidally Magnetized TOV star"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+#Cactus::cctk_itlast = 256
+Cactus::cctk_itlast = 1024
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+ActiveThorns = "SummationByParts"
+ActiveThorns = "TOVSolver"
+ActiveThorns = "GenericFD NewRad"
+ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+ActiveThorns = "Hydro_Analysis"
+ActiveThorns = "Dissipation"
+ActiveThorns = "AHFinderDirect"
+ActiveThorns = "WeylScal4 Multipole"
+ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 256
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+ HydroBase::Bvec
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.25
+MoL::ODE_Method = "rk4"
+MoL::MoL_Intermediate_Steps = 4
+MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = 0.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+#CoordBase::dx = 6.4 # dx or ncells_x
+#CoordBase::dy = 6.4 # dy or ncells_y
+#CoordBase::dz = 6.4 # dz or ncells_z
+#CoordBase::dx = 5.12 # dx or ncells_x
+#CoordBase::dy = 5.12 # dy or ncells_y
+#CoordBase::dz = 5.12 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Driver::ghost_size = 3
+GRHydro::GRHydro_stencil = 3
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "no"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 0
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 5
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+#CarpetMask::excluded_surface [0] = 0
+#CarpetMask::excluded_surface_factor[0] = 1.0
+
+#CarpetTracker::surface[0] = 0
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "tov"
+GRHydro_InitData::initial_Bvec = "poloidalmagfield"
+
+GRHydro_InitData::poloidal_A_b = 200.0
+GRHydro_InitData::poloidal_n_p = 3
+GRHydro_InitData::poloidal_P_cut = 1.0e-8
+GRHydro_InitData::poloidal_rho_max = 1.221209344680609e-03
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "tov"
+ADMBase::initial_lapse = "tov"
+ADMBase::initial_shift = "tov"
+ADMBase::initial_dtlapse = "zero"
+ADMBase::initial_dtshift = "zero"
+# needed for AHFinderDirect:
+ADMBase::metric_timelevels = 3
+
+TOVSolver::TOV_Enforce_Interpolation = "yes"
+TOVSolver::TOV_Num_Radial = 1000000
+TOVSolver::TOV_dr[0] = 1.e-5
+#TOVSolver::TOV_Position_x[0] = 0.0
+TOVSolver::TOV_Rho_Central[0] = 1.221209344680609e-03
+TOVSolver::TOV_Gamma[0] = 2.0
+TOVSolver::TOV_K[0] = 1.019575500488281e+02
+#TOVSolver::TOV_Mass[0] = 1.4
+#TOVSolver::TOV_C[0] = 0.1438356164383561644
+TOVSolver::TOV_Momentum_Psi_Power = 6
+
+EOS_Omni::poly_K = 1.019575500488281e+02
+EOS_Omni::poly_gamma = 2.0
+EOS_Omni::gl_K = 1.019575500488281e+02
+EOS_Omni::gl_gamma = 2.0
+GRHydro::initial_Gamma = 2.0
+
+#----------
+# Numerics:
+#----------
+
+InitBase::initial_data_setup_method = "init_all_levels"
+
+TmunuBase::stress_energy_storage = "yes"
+TmunuBase::stress_energy_at_RHS = "yes"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 3
+
+ADMMacros::spatial_order = 4
+SummationByParts::order = 4
+
+SpaceMask::use_mask = "yes"
+
+#Dissipation::ah_slope = 0.2
+#Dissipation::epsdis = 0.01
+#Dissipation::extra_dissipation_in_horizons = "yes"
+#Dissipation::ah_max_epsdis=0.1
+#Dissipation::update_ah_every = 16
+#Dissipation::surface_number[0] = 0
+#Dissipation::horizon_number[0] = 1
+Dissipation::vars = "
+ ML_BSSN::ML_log_confac
+ ML_BSSN::ML_metric
+ ML_BSSN::ML_curv
+ ML_BSSN::ML_trace_curv
+ ML_BSSN::ML_Gamma
+ ML_BSSN::ML_lapse
+ ML_BSSN::ML_shift
+"
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+SphericalSurface::radius [0] = 0.5
+
+SetMask_SphericalSurface::SetMask_SurfaceIndex[0] = 0
+SetMask_SphericalSurface::SetMask_RadiusFactor[0] = 0.75
+
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+HydroBase::Bvec_evolution_method = "GRHydro"
+
+GRHydro::method_type = "RSA FV"
+#GRHydro::recon_method = "tvd"
+GRHydro::recon_method = "ppm"
+#GRHydro::tvd_limiter = "vanleerMC"
+#GRHydro::tvd_limiter = "minmod"
+GRHydro::recon_vars = "primitive"
+GRHydro::riemann_solver = "HLLE"
+#GRHydro::riemann_solver = "LLF"
+GRHydro::bound = "none"
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumConstrainedVars = 13
+GRHydro::GRHydro_MaxNumEvolvedVars = 10
+
+GRHydro::clean_divergence = "yes"
+GRHydro::kap_dc = 1.0
+GRHydro::track_divB = "yes"
+GRHydro::calculate_bcom = "yes"
+
+GRHydro::rho_abs_min = 1.0e-10
+#Grhydro::initial_rho_abs_min = 1.0e-13
+#Grhydro::grhydro_atmo_tolerance = 0.0001
+
+GRHydro::c2p_reset_pressure = "yes"
+#GRHydro::GRHydro_enable_internal_excision = "false"
+
+grhydro::grhydro_c2p_warnlevel = 0
+grhydro::grhydro_c2p_warn_from_reflevel = 2
+grhydro::con2prim_oct_hack = yes
+
+
+
+ADMBase::evolution_method = "ML_BSSN"
+ADMBase::lapse_evolution_method = "ML_BSSN"
+ADMBase::shift_evolution_method = "ML_BSSN"
+ADMBase::dtlapse_evolution_method= "ML_BSSN"
+ADMBase::dtshift_evolution_method= "ML_BSSN"
+
+ML_BSSN::timelevels = 3
+
+ML_BSSN::harmonicN = 1 # 1+log
+ML_BSSN::harmonicF = 2.0 # 1+log
+ML_BSSN::LapseACoeff = 0.0 # don't evolve A in time (default = 0)
+ML_BSSN::ShiftBCoeff = 1.0 # evolve B^i in time (default = 1)
+ML_BSSN::ShiftGammaCoeff = 0.75
+ML_BSSN::AlphaDriver = 0.0 # (default = 0)
+ML_BSSN::BetaDriver = 0.2 # \equiv eta; must have dt < 1/eta always.
+#ML_BSSN::BetaDriver = 1.0 # Usual for BHB once dt < 1/eta satisfied.
+ML_BSSN::LapseAdvectionCoeff = 1.0
+ML_BSSN::ShiftAdvectionCoeff = 1.0
+
+ML_BSSN::UseSpatialBetaDriver = "no"
+ML_BSSN::SpatialBetaDriverRadius = 100.0e0
+
+ML_BSSN::MinimumLapse = 1.0e-8
+
+ML_BSSN::my_initial_boundary_condition = "extrapolate-gammas"
+ML_BSSN::my_rhs_boundary_condition = "NewRad"
+Boundary::radpower = 2
+
+ML_BSSN::ML_log_confac_bound = "none"
+ML_BSSN::ML_metric_bound = "none"
+ML_BSSN::ML_Gamma_bound = "none"
+ML_BSSN::ML_trace_curv_bound = "none"
+ML_BSSN::ML_curv_bound = "none"
+ML_BSSN::ML_lapse_bound = "none"
+ML_BSSN::ML_dtlapse_bound = "none"
+ML_BSSN::ML_shift_bound = "none"
+ML_BSSN::ML_dtshift_bound = "none"
+
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+ GRHydro::bcom_sq
+ HydroBase::rho
+ HydroBase::press
+ ML_ADMConstraints::ML_Ham
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ SystemStatistics::process_memory_mb
+ SphericalSurface::sf_radius
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+ Hydro_Analysis::Hydro_Analysis_rho_max_loc
+# PunctureTracker::pt_loc
+ QuasiLocalMeasures::qlm_scalars
+ SphericalSurface::sf_active
+ SphericalSurface::sf_coordinate_descriptors
+ SphericalSurface::sf_info
+ SphericalSurface::sf_origin
+ SphericalSurface::sf_radius
+ SphericalSurface::sf_valid
+"
+
+#Set these IOASCII options for initial data only:
+IOASCII::out1D_every = 1
+#IOASCII::out1D_dt = 10
+IOASCII::out1D_d = "yes"
+IOASCII::out1D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GrHydro::divB
+ GRHydro::GRHydro_C2P_failed
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+"
+
+IOASCII::out2D_every = 256000000
+IOASCII::out2D_vars = "
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ SphericalSurface::sf_radius{out_every=256}
+"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+
+#CarpetIOHDF5::output_symmetry_points = "no"
+#CarpetIOHDF5::output_ghost_points = "no"
+#CarpetIOHDF5::output_boundary_points = "no"
+#CarpetIOHDF5::output_buffer_points = "no"
+
+#CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_every = 1
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ CarpetReduce::weight
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GRHydro::divB
+ GRHydro::GRHydro_C2P_failed
+ GRHydro::scon
+ GRHydro::tau
+ Grid::coordinates
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+ WeylScal4::Psi4i
+ WeylScal4::Psi4r
+"
+
+#CarpetIOHDF5::out3D_every = 4096
+CarpetIOHDF5::out3D_every = 1
+CarpetIOHDF5::out3D_vars = "
+ ADMBase::lapse
+ CarpetReduce::weight
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::divB
+ GRHydro::GRHydro_C2P_failed
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+AHFinderDirect::find_every = 512
+
+#AHFinderDirect::run_at_CCTK_ANALYSIS = "yes"
+#AHFinderDirect::run_at_CCTK_POSTSTEP = "no"
+AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES = "no"
+
+AHFinderDirect::move_origins = "yes"
+#AHFinderDirect::reshape_while_moving = "yes"
+#AHFinderDirect::predict_origin_movement = "yes"
+
+# Hermite to order 3 to avoid discontinuities in the metric spatial derivatives:
+#AHFinderDirect::geometry_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::geometry_interpolator_pars = "order=3"
+#AHFinderDirect::surface_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::surface_interpolator_pars = "order=3"
+AHFinderDirect::geometry_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::geometry_interpolator_pars = "order=4"
+AHFinderDirect::surface_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::surface_interpolator_pars = "order=4"
+
+AHFinderDirect::output_h_every = 0
+
+AHFinderDirect::N_horizons = 1
+
+AHFinderDirect::reset_horizon_after_not_finding [1] = "no"
+AHFinderDirect::initial_guess__coord_sphere__radius [1] = 0.2
+AHFinderDirect::origin_x [1] = 0.0
+AHFinderDirect::origin_y [1] = 0.0
+AHFinderDirect::origin_z [1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+#AHFinderDirect::track_origin_from_grid_scalar [1] = "yes"
+#AHFinderDirect::track_origin_source_x [1] = "PunctureTracker::pt_loc_x[0]"
+#AHFinderDirect::track_origin_source_y [1] = "PunctureTracker::pt_loc_y[0]"
+#AHFinderDirect::track_origin_source_z [1] = "PunctureTracker::pt_loc_z[0]"
+AHFinderDirect::which_surface_to_store_info [1] = 0
+
+
+Hydro_Analysis::Hydro_Analysis_comp_rho_max = "true"
+
+#PunctureTracker::track [0] = "yes"
+#PunctureTracker::initial_x [0] = 10.64502257
+#PunctureTracker::initial_y [0] = 0
+#PunctureTracker::initial_z [0] = 0
+#PunctureTracker::which_surface_to_store_info[0] = 0
+
+QuasiLocalMeasures::num_surfaces = 1
+QuasiLocalMeasures::spatial_order = 4
+QuasiLocalMeasures::interpolator = "Lagrange polynomial interpolation"
+QuasiLocalMeasures::interpolator_options = "order=4"
+QuasiLocalMeasures::surface_index [0] = 0
+
+Multipole::nradii = 4
+Multipole::radius[0] = 80
+Multipole::radius[1] = 100
+Multipole::radius[2] = 120
+Multipole::radius[3] = 140
+Multipole::ntheta = 120
+Multipole::nphi = 240
+Multipole::variables = "WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='psi4'}"
+Multipole::out_every = 4
+Multipole::l_max = 4
+Multipole::integration_method = "Simpson"
+
+WeylScal4::fd_order = "4th"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+#IOHDF5::checkpoint = "yes"
+#IO::checkpoint_dir = $parfile
+#IO::checkpoint_ID = "yes"
+#IO::checkpoint_every = 6144
+##IO::checkpoint_every_walltime_hours = 6.0
+#IO::checkpoint_keep=3
+#IO::checkpoint_on_terminate = "yes"
+#
+#IO::recover = "autoprobe"
+#IO::recover_dir = $parfile
+
+
diff --git a/par/TOVstar.par b/par/TOVstar.par
new file mode 100644
index 0000000..113e8a5
--- /dev/null
+++ b/par/TOVstar.par
@@ -0,0 +1,675 @@
+#==============================================================================
+# TOV star: mclachlan TOVSolver GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "TOV star"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+#Cactus::cctk_itlast = 256
+Cactus::cctk_itlast = 1024
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+ActiveThorns = "SummationByParts"
+ActiveThorns = "TOVSolver"
+ActiveThorns = "GenericFD NewRad"
+ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+ActiveThorns = "Hydro_Analysis"
+ActiveThorns = "Dissipation"
+ActiveThorns = "AHFinderDirect"
+ActiveThorns = "WeylScal4 Multipole"
+ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 16
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+# HydroBase::Bvec
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.25
+MoL::ODE_Method = "rk4"
+MoL::MoL_Intermediate_Steps = 4
+MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = 0.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+#CoordBase::xmax = 320.0
+#CoordBase::ymax = 320.0
+#CoordBase::zmax = 320.0
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+#CoordBase::dx = 6.4 # dx or ncells_x
+#CoordBase::dy = 6.4 # dy or ncells_y
+#CoordBase::dz = 6.4 # dz or ncells_z
+#CoordBase::dx = 5.12 # dx or ncells_x
+#CoordBase::dy = 5.12 # dy or ncells_y
+#CoordBase::dz = 5.12 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Driver::ghost_size = 3
+GRHydro::GRHydro_stencil = 3
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "no"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 0
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 5
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+#CarpetMask::excluded_surface [0] = 0
+#CarpetMask::excluded_surface_factor[0] = 1.0
+
+#CarpetTracker::surface[0] = 0
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "tov"
+#GRHydro_InitData::initial_Bvec = "poloidalmagfield"
+
+#GRHydro_InitData::poloidal_A_b = 0.1
+#GRHydro_InitData::poloidal_n_p = 3
+#GRHydro_InitData::poloidal_P_cut = 1.0e-8
+#GRHydro_InitData::poloidal_rho_max = 1.221209344680609e-03
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "tov"
+ADMBase::initial_lapse = "tov"
+ADMBase::initial_shift = "tov"
+ADMBase::initial_dtlapse = "zero"
+ADMBase::initial_dtshift = "zero"
+# needed for AHFinderDirect:
+ADMBase::metric_timelevels = 3
+
+TOVSolver::TOV_Enforce_Interpolation = "yes"
+TOVSolver::TOV_Num_Radial = 1000000
+TOVSolver::TOV_dr[0] = 1.e-5
+#TOVSolver::TOV_Position_x[0] = 0.0
+TOVSolver::TOV_Rho_Central[0] = 1.221209344680609e-03
+TOVSolver::TOV_Gamma[0] = 2.0
+TOVSolver::TOV_K[0] = 1.019575500488281e+02
+#TOVSolver::TOV_Mass[0] = 1.4
+#TOVSolver::TOV_C[0] = 0.1438356164383561644
+TOVSolver::TOV_Momentum_Psi_Power = 6
+
+EOS_Omni::poly_K = 1.019575500488281e+02
+EOS_Omni::poly_gamma = 2.0
+EOS_Omni::gl_K = 1.019575500488281e+02
+EOS_Omni::gl_gamma = 2.0
+GRHydro::initial_Gamma = 2.0
+
+#----------
+# Numerics:
+#----------
+
+InitBase::initial_data_setup_method = "init_all_levels"
+
+TmunuBase::stress_energy_storage = "yes"
+TmunuBase::stress_energy_at_RHS = "yes"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 3
+
+ADMMacros::spatial_order = 4
+SummationByParts::order = 4
+
+SpaceMask::use_mask = "yes"
+
+#Dissipation::ah_slope = 0.2
+#Dissipation::epsdis = 0.01
+#Dissipation::extra_dissipation_in_horizons = "yes"
+#Dissipation::ah_max_epsdis=0.1
+#Dissipation::update_ah_every = 16
+#Dissipation::surface_number[0] = 0
+#Dissipation::horizon_number[0] = 1
+Dissipation::vars = "
+ ML_BSSN::ML_log_confac
+ ML_BSSN::ML_metric
+ ML_BSSN::ML_curv
+ ML_BSSN::ML_trace_curv
+ ML_BSSN::ML_Gamma
+ ML_BSSN::ML_lapse
+ ML_BSSN::ML_shift
+"
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+SphericalSurface::radius [0] = 0.5
+
+SetMask_SphericalSurface::SetMask_SurfaceIndex[0] = 0
+SetMask_SphericalSurface::SetMask_RadiusFactor[0] = 0.75
+
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+#HydroBase::Bvec_evolution_method = "GRHydro"
+
+GRHydro::method_type = "RSA FV"
+GRHydro::recon_method = "ppm"
+#GRHydro::recon_method = "tvd"
+#GRHydro::tvd_limiter = "vanleerMC"
+#GRHydro::tvd_limiter = "minmod"
+GRHydro::recon_vars = "primitive"
+GRHydro::riemann_solver = "HLLE"
+#GRHydro::riemann_solver = "LLF"
+#GRHydro::riemann_solver = "Marquina"
+GRHydro::bound = "none"
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumConstrainedVars = 13
+GRHydro::GRHydro_MaxNumEvolvedVars = 10
+
+#GRHydro::clean_divergence = "yes"
+#GRHydro::kap_dc = 1.0
+#GRHydro::track_divB = "yes"
+#GRHydro::calculate_bcom = "yes"
+
+GRHydro::rho_abs_min = 1.0e-10
+#Grhydro::initial_rho_abs_min = 1.0e-13
+#Grhydro::grhydro_atmo_tolerance = 0.0001
+
+GRHydro::c2p_reset_pressure = "yes"
+#GRHydro::GRHydro_enable_internal_excision = "false"
+
+grhydro::grhydro_c2p_warnlevel = 0
+grhydro::grhydro_c2p_warn_from_reflevel = 2
+grhydro::con2prim_oct_hack = yes
+
+
+
+ADMBase::evolution_method = "ML_BSSN"
+ADMBase::lapse_evolution_method = "ML_BSSN"
+ADMBase::shift_evolution_method = "ML_BSSN"
+ADMBase::dtlapse_evolution_method= "ML_BSSN"
+ADMBase::dtshift_evolution_method= "ML_BSSN"
+
+ML_BSSN::timelevels = 3
+
+ML_BSSN::harmonicN = 1 # 1+log
+ML_BSSN::harmonicF = 2.0 # 1+log
+ML_BSSN::LapseACoeff = 0.0 # don't evolve A in time (default = 0)
+ML_BSSN::ShiftBCoeff = 1.0 # evolve B^i in time (default = 1)
+ML_BSSN::ShiftGammaCoeff = 0.75
+ML_BSSN::AlphaDriver = 0.0 # (default = 0)
+ML_BSSN::BetaDriver = 0.2 # \equiv eta; must have dt < 1/eta always.
+#ML_BSSN::BetaDriver = 1.0 # Usual for BHB once dt < 1/eta satisfied.
+ML_BSSN::LapseAdvectionCoeff = 1.0
+ML_BSSN::ShiftAdvectionCoeff = 1.0
+
+ML_BSSN::UseSpatialBetaDriver = "no"
+ML_BSSN::SpatialBetaDriverRadius = 100.0e0
+
+ML_BSSN::MinimumLapse = 1.0e-8
+
+ML_BSSN::my_initial_boundary_condition = "extrapolate-gammas"
+ML_BSSN::my_rhs_boundary_condition = "NewRad"
+Boundary::radpower = 2
+
+ML_BSSN::ML_log_confac_bound = "none"
+ML_BSSN::ML_metric_bound = "none"
+ML_BSSN::ML_Gamma_bound = "none"
+ML_BSSN::ML_trace_curv_bound = "none"
+ML_BSSN::ML_curv_bound = "none"
+ML_BSSN::ML_lapse_bound = "none"
+ML_BSSN::ML_dtlapse_bound = "none"
+ML_BSSN::ML_shift_bound = "none"
+ML_BSSN::ML_dtshift_bound = "none"
+
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+# GRHydro::bcom_sq
+ HydroBase::rho
+ HydroBase::press
+ ML_ADMConstraints::ML_Ham
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::Bcons
+ GRHydro::dens
+# GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+# HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ SystemStatistics::process_memory_mb
+ SphericalSurface::sf_radius
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+ Hydro_Analysis::Hydro_Analysis_rho_max_loc
+# PunctureTracker::pt_loc
+ QuasiLocalMeasures::qlm_scalars
+ SphericalSurface::sf_active
+ SphericalSurface::sf_coordinate_descriptors
+ SphericalSurface::sf_info
+ SphericalSurface::sf_origin
+ SphericalSurface::sf_radius
+ SphericalSurface::sf_valid
+"
+
+#Set these IOASCII options for initial data only:
+IOASCII::out1D_every = 1
+#IOASCII::out1D_dt = 10
+IOASCII::out1D_d = "yes"
+IOASCII::out1D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::Bcons
+ GRHydro::dens
+# GrHydro::divB
+ GRHydro::GRHydro_C2P_failed
+ GRHydro::scon
+ GRHydro::tau
+# HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+"
+
+IOASCII::out2D_every = 256000000
+IOASCII::out2D_vars = "
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ SphericalSurface::sf_radius{out_every=256}
+"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+
+#CarpetIOHDF5::output_symmetry_points = "no"
+#CarpetIOHDF5::output_ghost_points = "no"
+#CarpetIOHDF5::output_boundary_points = "no"
+#CarpetIOHDF5::output_buffer_points = "no"
+
+#CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_every = 1
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ CarpetReduce::weight
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::Bcons
+ GRHydro::dens
+# GRHydro::divB
+ GRHydro::GRHydro_C2P_failed
+ GRHydro::scon
+ GRHydro::tau
+ Grid::coordinates
+# HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+ WeylScal4::Psi4i
+ WeylScal4::Psi4r
+"
+
+#CarpetIOHDF5::out3D_every = 4096
+CarpetIOHDF5::out3D_every = 1
+CarpetIOHDF5::out3D_vars = "
+ ADMBase::lapse
+ CarpetReduce::weight
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::divB
+ GRHydro::GRHydro_C2P_failed
+# HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+AHFinderDirect::find_every = 512
+
+#AHFinderDirect::run_at_CCTK_ANALYSIS = "yes"
+#AHFinderDirect::run_at_CCTK_POSTSTEP = "no"
+AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES = "no"
+
+AHFinderDirect::move_origins = "yes"
+#AHFinderDirect::reshape_while_moving = "yes"
+#AHFinderDirect::predict_origin_movement = "yes"
+
+# Hermite to order 3 to avoid discontinuities in the metric spatial derivatives:
+#AHFinderDirect::geometry_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::geometry_interpolator_pars = "order=3"
+#AHFinderDirect::surface_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::surface_interpolator_pars = "order=3"
+AHFinderDirect::geometry_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::geometry_interpolator_pars = "order=4"
+AHFinderDirect::surface_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::surface_interpolator_pars = "order=4"
+
+AHFinderDirect::output_h_every = 0
+
+AHFinderDirect::N_horizons = 1
+
+AHFinderDirect::reset_horizon_after_not_finding [1] = "no"
+AHFinderDirect::initial_guess__coord_sphere__radius [1] = 0.2
+AHFinderDirect::origin_x [1] = 0.0
+AHFinderDirect::origin_y [1] = 0.0
+AHFinderDirect::origin_z [1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+#AHFinderDirect::track_origin_from_grid_scalar [1] = "yes"
+#AHFinderDirect::track_origin_source_x [1] = "PunctureTracker::pt_loc_x[0]"
+#AHFinderDirect::track_origin_source_y [1] = "PunctureTracker::pt_loc_y[0]"
+#AHFinderDirect::track_origin_source_z [1] = "PunctureTracker::pt_loc_z[0]"
+AHFinderDirect::which_surface_to_store_info [1] = 0
+
+
+Hydro_Analysis::Hydro_Analysis_comp_rho_max = "true"
+
+#PunctureTracker::track [0] = "yes"
+#PunctureTracker::initial_x [0] = 10.64502257
+#PunctureTracker::initial_y [0] = 0
+#PunctureTracker::initial_z [0] = 0
+#PunctureTracker::which_surface_to_store_info[0] = 0
+
+QuasiLocalMeasures::num_surfaces = 1
+QuasiLocalMeasures::spatial_order = 4
+QuasiLocalMeasures::interpolator = "Lagrange polynomial interpolation"
+QuasiLocalMeasures::interpolator_options = "order=4"
+QuasiLocalMeasures::surface_index [0] = 0
+
+Multipole::nradii = 4
+Multipole::radius[0] = 80
+Multipole::radius[1] = 100
+Multipole::radius[2] = 120
+Multipole::radius[3] = 140
+Multipole::ntheta = 120
+Multipole::nphi = 240
+Multipole::variables = "WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='psi4'}"
+Multipole::out_every = 4
+Multipole::l_max = 4
+Multipole::integration_method = "Simpson"
+
+WeylScal4::fd_order = "4th"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+#IOHDF5::checkpoint = "yes"
+#IO::checkpoint_dir = $parfile
+#IO::checkpoint_ID = "yes"
+#IO::checkpoint_every = 6144
+##IO::checkpoint_every_walltime_hours = 6.0
+#IO::checkpoint_keep=3
+#IO::checkpoint_on_terminate = "yes"
+#
+#IO::recover = "autoprobe"
+#IO::recover_dir = $parfile
+
+
diff --git a/par/advectedloop2D.par b/par/advectedloop2D.par
new file mode 100644
index 0000000..c427bd0
--- /dev/null
+++ b/par/advectedloop2D.par
@@ -0,0 +1,428 @@
+#==============================================================================
+# Advected magnetic field loop (2d version): GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Advected magnetic field loop (2d version)"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+Cactus::cctk_itlast = 256
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+#ActiveThorns = "MoL Periodic ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL Periodic ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL Periodic ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "MoL Periodic Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+#ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+#ActiveThorns = "TwoPunctures"
+#ActiveThorns = "SummationByParts"
+#ActiveThorns = "TOVSolver"
+#ActiveThorns = "GenericFD NewRad"
+#ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+#ActiveThorns = "Hydro_Analysis"
+#ActiveThorns = "Dissipation"
+#ActiveThorns = "AHFinderDirect"
+#ActiveThorns = "WeylScal4 Multipole"
+#ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+#AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+#Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+#TwoPunctures::verbose = "yes"
+
+#QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 16
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ HydroBase::Bvec
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.4
+MoL::ODE_Method = "rk2"
+MoL::MoL_Intermediate_Steps = 2
+#MoL::ODE_Method = "rk4"
+#MoL::MoL_Intermediate_Steps = 4
+#MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = -1.0
+CoordBase::ymin = -0.5
+#CoordBase::zmin = -0.031250
+CoordBase::zmin = -0.015625
+CoordBase::xmax = 1.0
+CoordBase::ymax = 0.5
+#CoordBase::zmax = 0.031250
+CoordBase::zmax = 0.015625
+#CoordBase::dx = 0.0156250 # dx or ncells_x
+#CoordBase::dy = 0.0156250 # dy or ncells_y
+#CoordBase::dz = 0.0156250 # dz or ncells_z
+CoordBase::dx = 0.0078125 # dx or ncells_x
+CoordBase::dy = 0.0078125 # dy or ncells_y
+CoordBase::dz = 0.0078125 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 0
+CoordBase::boundary_shiftout_y_lower = 0
+CoordBase::boundary_shiftout_z_lower = 0
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+CoordBase::boundary_staggered_x_lower = "yes"
+CoordBase::boundary_staggered_y_lower = "yes"
+CoordBase::boundary_staggered_z_lower = "yes"
+CoordBase::boundary_staggered_x_upper = "yes"
+CoordBase::boundary_staggered_y_upper = "yes"
+CoordBase::boundary_staggered_z_upper = "yes"
+
+Driver::ghost_size = 3
+GRHydro::GRHydro_stencil = 3
+
+Periodic::periodic = "yes"
+Periodic::periodic_x = "yes"
+Periodic::periodic_y = "yes"
+Periodic::periodic_z = "yes"
+
+#ReflectionSymmetry::reflection_x = "no"
+#ReflectionSymmetry::reflection_y = "no"
+#ReflectionSymmetry::reflection_z = "yes"
+#ReflectionSymmetry::avoid_origin_x = "no"
+#ReflectionSymmetry::avoid_origin_y = "no"
+#ReflectionSymmetry::avoid_origin_z = "no"
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::schedule_barriers = "no"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "advectedloop"
+
+GRHydro_InitData::advectedloop_type = "2D"
+GRHydro_InitData::advectedloop_case = "V^z/=0"
+#GRHydro_InitData::advectedloop_case = "V^z=0"
+GRHydro_InitData::advectedloop_delA = "Exact"
+#GRHydro_InitData::advectedloop_delA = "Numeric"
+
+EOS_Omni::gl_gamma = 1.666666666666667
+GRHydro::initial_Gamma = 1.666666666666667
+
+#----------
+# Numerics:
+#----------
+
+TmunuBase::stress_energy_storage = "yes"
+TmunuBase::stress_energy_at_RHS = "no"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 2
+#HydroBase::timelevels = 3
+
+SpaceMask::use_mask = "yes"
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+HydroBase::Bvec_evolution_method = "GRHydro"
+
+GRHydro::method_type = "RSA FV"
+GRHydro::recon_method = "tvd"
+GRHydro::tvd_limiter = "vanleerMC"
+GRHydro::recon_vars = "primitive"
+GRHydro::riemann_solver = "HLLE"
+GRHydro::bound = "none"
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumConstrainedVars = 13
+GRHydro::GRHydro_MaxNumEvolvedVars = 10
+
+GRHydro::clean_divergence = "yes"
+GRHydro::kap_dc = 1.0
+GRHydro::track_divB = "yes"
+GRHydro::calculate_bcom = "yes"
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+ HydroBase::rho
+ HydroBase::press
+ GRHydro::bcom_sq
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ SystemStatistics::process_memory_mb
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+"
+
+#Set these IOASCII options for initial data only:
+#IOASCII::out1D_every = 256000000
+IOASCII::out1D_dt = 10
+IOASCII::out1D_d = "yes"
+IOASCII::out1D_vars = "
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#IOASCII::out2D_every = 256000000
+#IOASCII::out2D_vars = "
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::Bcons
+# GRHydro::dens
+# GrHydro::divB
+# GRHydro::scon
+# GRHydro::tau
+# HydroBase::Bvec
+# HydroBase::eps
+# HydroBase::press
+# HydroBase::rho
+# HydroBase::vel
+# HydroBase::w_lorentz
+#"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+
+CarpetIOHDF5::output_symmetry_points = "no"
+CarpetIOHDF5::output_ghost_points = "no"
+CarpetIOHDF5::output_boundary_points = "no"
+CarpetIOHDF5::output_buffer_points = "no"
+
+CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GRHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ Grid::coordinates
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+CarpetIOHDF5::out3D_every = 4096
+CarpetIOHDF5::out3D_vars = "
+ GRHydro::bcom
+ GRHydro::bcom0
+ GRHydro::bcom_sq
+ GRHydro::divB
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+#IOHDF5::checkpoint = "yes"
+#IO::checkpoint_dir = $parfile
+#IO::checkpoint_ID = "yes"
+#IO::checkpoint_every = 6144
+##IO::checkpoint_every_walltime_hours = 6.0
+#IO::checkpoint_keep=3
+#IO::checkpoint_on_terminate = "yes"
+
+#IO::recover = "autoprobe"
+#IO::recover_dir = $parfile
+
+
diff --git a/par/advectedloop3D.par b/par/advectedloop3D.par
new file mode 100644
index 0000000..f7ebd49
--- /dev/null
+++ b/par/advectedloop3D.par
@@ -0,0 +1,167 @@
+##
+ActiveThorns = "time MoL cartgrid3d carpetioascii ioutil Fortran boundary hydrobase grhydro grhydro_initdata nanchecker eos_omni CoordBase LoopControl CarpetLib Carpet CarpetReduce spacemask ADMCoupling ADMMacros ADMBASE STATICCONFORMAL TMUNUBASE SymBase localreduce CarpetIOBasic initbase Periodic Slab"
+ActiveThorns = "CarpetIOHDF5"
+
+
+time::dtfac = 0.25
+
+methodoflines::ODE_Method = "rk2"
+methodoflines::MoL_Intermediate_Steps=2
+
+ADMBase::initial_shift = "zero"
+
+HydroBase::initial_hydro="advectedloop"
+GRHydro_InitData::advectedloop_type = "3D"
+GRHydro_InitData::advectedloop_case = "V^z=0"
+GRHydro_InitData::advectedloop_delA = "Exact"
+
+
+HydroBase::timelevels=2
+HydroBase::evolution_method="grhydro"
+HydroBase::Bvec_evolution_method="grhydro"
+
+SpaceMask::use_mask="yes"
+EOS_Omni::gl_gamma=1.666666667
+grhydro::recon_method="tvd"
+grhydro::method_type="RSA FV"
+grhydro::recon_vars="primitive"
+grhydro::riemann_solver="HLLE"
+grhydro::tvd_limiter="vanleerMC"
+grhydro::bound="none"
+grhydro::grhydro_eos_type = "General"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::Grhydro_MaxNumConstrainedVars=13
+grhydro::GRHydro_MaxNumEvolvedVars=10
+
+grhydro::clean_divergence = "yes"
+grhydro::kap_dc = 1.0
+grhydro::track_divB = "yes"
+
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+#CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+CoordBase::spacing = "numcells" # "gridspacing" or "numcells"
+
+CoordBase::xmin = -0.5
+CoordBase::ymin = -0.5
+CoordBase::zmin = -0.5
+CoordBase::xmax = 0.5
+CoordBase::ymax = 0.5
+CoordBase::zmax = 0.5
+#CoordBase::dx = 0.0078125 # dx or ncells_x
+#CoordBase::dy = 0.0078125 # dy or ncells_y
+#CoordBase::dz = 0.0078125 # dz or ncells_z
+CoordBase::ncells_x = 128 # dx or ncells_x
+CoordBase::ncells_y = 128 # dy or ncells_y
+CoordBase::ncells_z = 128 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 0
+CoordBase::boundary_shiftout_y_lower = 0
+CoordBase::boundary_shiftout_z_lower = 0
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+CoordBase::boundary_staggered_x_lower = "yes"
+CoordBase::boundary_staggered_y_lower = "yes"
+CoordBase::boundary_staggered_z_lower = "yes"
+CoordBase::boundary_staggered_x_upper = "yes"
+CoordBase::boundary_staggered_y_upper = "yes"
+CoordBase::boundary_staggered_z_upper = "yes"
+
+Driver::ghost_size = 3
+GRHydro::GRHydro_stencil = 3
+
+Periodic::periodic = "yes"
+Periodic::periodic_x = "yes"
+Periodic::periodic_y = "yes"
+Periodic::periodic_z = "yes"
+
+#ReflectionSymmetry::reflection_x = "no"
+#ReflectionSymmetry::reflection_y = "no"
+#ReflectionSymmetry::reflection_z = "yes"
+#ReflectionSymmetry::avoid_origin_x = "no"
+#ReflectionSymmetry::avoid_origin_y = "no"
+#ReflectionSymmetry::avoid_origin_z = "no"
+
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 100.0
+#Cactus::cctk_final_time = 1.0
+Cactus::terminate = "iteration"
+cactus::cctk_itlast = 1
+
+Carpet::domain_from_coordbase = "yes"
+
+IO::out_dir = $parfile
+CarpetIOBasic::outInfo_vars="hydrobase::rho Hydrobase::bvec GRHydro::bcons"
+CarpetIOBasic::outInfo_every=1
+CarpetIOASCII::out1D_every = 80
+CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec grhydro::Bcons"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+
+CarpetIOHDF5::out2D_every = 20
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+# CarpetReduce::weight
+# GRHydro::GRHydro_tracers
+# Grid::coordinates
+ GRHydro::Bcons
+ GrHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+CarpetIOHDF5::out3D_every = 100
+CarpetIOHDF5::out3D_vars = "
+# CarpetReduce::weight
+# GRHydro::GRHydro_tracers
+# Grid::coordinates
+ GRHydro::Bcons
+ GrHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+IOHDF5::checkpoint = "yes"
+IO::checkpoint_dir = $parfile
+#IO::checkpoint_ID = "yes"
+#IO::checkpoint_every = 6144
+##IO::checkpoint_every_walltime_hours = 6.0
+#IO::checkpoint_keep=3
+IO::checkpoint_on_terminate = "yes"
+
+#IO::recover = "autoprobe"
+#IO::recover_dir = $parfile
+
+
diff --git a/par/balsara1_1d.par b/par/balsara1_1d.par
new file mode 100644
index 0000000..9c6498c
--- /dev/null
+++ b/par/balsara1_1d.par
@@ -0,0 +1,353 @@
+#==============================================================================
+# Balsara magnetized shock tube test #1: GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Balsara magnetized shock tube test #1"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+Cactus::terminate = "time"
+Cactus::cctk_final_time = 0.4
+#Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+#Cactus::cctk_itlast = 256
+#Cactus::cctk_itlast = 1024
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL Slab SpaceMask"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetSlab LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+ActiveThorns = "Constants TmunuBase HydroBase "
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "HDF5"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetReduce::verbose = "no"
+#CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+#NaNChecker::verbose = "all"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 256
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+ HydroBase::Bvec
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.8
+MoL::ODE_Method = "rk2"
+MoL::MoL_Intermediate_Steps = 2
+#MoL::ODE_Method = "rk4"
+#MoL::MoL_Intermediate_Steps = 4
+#MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = -0.5
+CoordBase::ymin = -0.005625
+CoordBase::zmin = -0.005625
+CoordBase::xmax = 0.5
+CoordBase::ymax = 0.005625
+CoordBase::zmax = 0.005625
+CoordBase::dx = 0.000625 # dx or ncells_x
+CoordBase::dy = 0.000625 # dy or ncells_y
+CoordBase::dz = 0.000625 # dz or ncells_z
+
+Driver::ghost_size = 3
+GRHydro::GRHydro_stencil = 3
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "shocktube"
+GRHydro_InitData::shocktube_type = "xshock"
+GRHydro_InitData::shock_case = "Balsara1"
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "Cartesian Minkowski"
+ADMBase::initial_lapse = "one"
+ADMBase::initial_shift = "zero"
+ADMBase::initial_dtlapse = "none"
+ADMBase::initial_dtshift = "none"
+
+EOS_Omni::poly_K = 100.0
+EOS_Omni::poly_gamma = 2.0
+EOS_Omni::gl_K = 100.0
+EOS_Omni::gl_gamma = 2.0
+GRHydro::initial_Gamma = 2.0
+
+#----------
+# Numerics:
+#----------
+#Boundary::radpower = 2
+#HydroBase::timelevels = 3
+HydroBase::timelevels = 2
+#ADMMacros::spatial_order = 4
+SpaceMask::use_mask = "yes"
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+HydroBase::Bvec_evolution_method = "GRHydro"
+
+GRHydro::method_type = "RSA FV"
+GRHydro::recon_method = "tvd"
+#GRHydro::recon_method = "ppm"
+GRHydro::tvd_limiter = "vanleerMC"
+#GRHydro::tvd_limiter = "vanleerMC2"
+#GRHydro::tvd_limiter = "minmod"
+GRHydro::recon_vars = "primitive"
+GRHydro::riemann_solver = "HLLE"
+#GRHydro::riemann_solver = "LLF"
+GRHydro::bound = "flat"
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumConstrainedVars = 13
+GRHydro::GRHydro_MaxNumEvolvedVars = 10
+
+GRHydro::clean_divergence = "yes"
+GRHydro::kap_dc = 1.0
+GRHydro::track_divB = "yes"
+#GRHydro::calculate_bcom = "yes" # because no Tmunu storage allocated
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+# GRHydro::bcom_sq
+ HydroBase::rho
+ HydroBase::press
+ SystemStatistics::maxrss_mb
+"
+
+#IOScalar::outScalar_every = 1024
+#IOScalar::one_file_per_group = "yes"
+#IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+#IOScalar::outScalar_vars = "
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+# GRHydro::Bcons
+# GRHydro::dens
+# GrHydro::divB
+# GRHydro::scon
+# GRHydro::tau
+# HydroBase::Bvec
+# HydroBase::eps
+# HydroBase::press
+# HydroBase::rho
+# HydroBase::vel
+# HydroBase::w_lorentz
+# SystemStatistics::process_memory_mb
+#"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 200
+IOASCII::out0D_vars = "
+ Carpet::timing
+"
+
+#Set these IOASCII options for initial data only:
+#IOASCII::out1D_every = 1
+IOASCII::out1D_every = 800
+#IOASCII::out1D_dt = 0.01
+IOASCII::out1D_d = "yes"
+IOASCII::out1D_vars = "
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#IOASCII::out2D_every = 256000000
+#IOASCII::out2D_vars = "
+# HydroBase::rho
+# HydroBase::vel
+#"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+
+#CarpetIOHDF5::output_symmetry_points = "no"
+#CarpetIOHDF5::output_ghost_points = "no"
+#CarpetIOHDF5::output_boundary_points = "no"
+#CarpetIOHDF5::output_buffer_points = "no"
+
+#CarpetIOHDF5::out2D_every = 1
+CarpetIOHDF5::out2D_every = 10
+#CarpetIOHDF5::out2D_dt = 0.01
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+ GRHydro::Bcons
+ GRHydro::dens
+ GRHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#CarpetIOHDF5::out3D_every = 1
+CarpetIOHDF5::out3D_every = 10
+#CarpetIOHDF5::out3D_dt = 0.01
+CarpetIOHDF5::out3D_vars = "
+# GRHydro::bcom
+# GRHydro::bcom0
+# GRHydro::bcom_sq
+ GRHydro::divB
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+#IOHDF5::checkpoint = "yes"
+#IO::checkpoint_dir = $parfile
+#IO::checkpoint_ID = "yes"
+#IO::checkpoint_every = 6144
+##IO::checkpoint_every_walltime_hours = 6.0
+#IO::checkpoint_keep=3
+#IO::checkpoint_on_terminate = "yes"
+#
+#IO::recover = "autoprobe"
+#IO::recover_dir = $parfile
+
+
diff --git a/par/balsara1b.par b/par/balsara1b.par
new file mode 100644
index 0000000..1a9d3ce
--- /dev/null
+++ b/par/balsara1b.par
@@ -0,0 +1,66 @@
+ActiveThorns = "time MoL cartgrid3d carpetioascii ioutil Fortran boundary hydrobase grhydro grhydro_initdata nanchecker eos_omni CoordBase LoopControl CarpetLib Carpet CarpetIOHDF5 CarpetReduce spacemask ADMCoupling ADMMacros ADMBASE STATICCONFORMAL TMUNUBASE SymBase localreduce CarpetIOBasic initbase GRHydro_InitData"
+
+#This is a hack. ghost_size should be the same as grhydro::grhydro_stencil.
+
+driver::ghost_size=3
+grhydro::grhydro_stencil=3
+
+#time::dtfac = 0.25
+time::dtfac = 0.8
+
+methodoflines::ODE_Method = "rk2"
+methodoflines::MoL_Intermediate_Steps=2
+
+#admbase::initial_data="prim2con2prim_test"
+#GRHydro_InitData::Bx_init=0.1
+#GRHydro_InitData::By_init=0.12
+#GRHydro_InitData::Bz_init=0.14
+HydroBase::initial_hydro="shocktube"
+GRHydro_InitData::shocktube_type="xshock"
+GRHydro_InitData::shock_case="Balsara1"
+
+HydroBase::timelevels=2
+HydroBase::evolution_method="grhydro"
+HydroBase::Bvec_evolution_method="grhydro"
+
+SpaceMask::use_mask="yes"
+EOS_Omni::gl_gamma=2.0
+grhydro::method_type="RSA FV"
+grhydro::recon_method="ppm"
+grhydro::recon_vars="primitive"
+grhydro::riemann_solver="HLLE"
+grhydro::bound="flat"
+grhydro::grhydro_eos_type = "General"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::Grhydro_MaxNumConstrainedVars=13
+grhydro::GRHydro_MaxNumEvolvedVars=10
+
+grid::type = "BySpacing"
+grid::domain = "full"
+#grid::dxyz = 0.01
+grid::dxyz = 0.000625
+
+driver::global_nx = 1600
+driver::global_ny = 10
+driver::global_nz = 10
+
+Cactus::terminate="time"
+Cactus::cctk_final_time = 0.4
+#cactus::cctk_itlast = 40
+#cactus::cctk_itlast = 200
+#cactus::cctk_itlast = 2
+
+IO::out_dir = $parfile
+#IOBasic::outInfo_every = 1
+#IOBasic::outInfo_vars = "HydroBase::rho"
+CarpetIOBasic::outInfo_vars="hydrobase::rho"
+CarpetIOBasic::outInfo_every=1
+CarpetIOASCII::out1D_criterion = "time"
+CarpetIOASCII::out1D_dt = 0.01
+CarpetIOASCII::out1D_d=no
+CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+
+CarpetIOHDF5::out_every = 1
+CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+
+
diff --git a/par/balsara1c.par b/par/balsara1c.par
new file mode 100644
index 0000000..351506c
--- /dev/null
+++ b/par/balsara1c.par
@@ -0,0 +1,78 @@
+ActiveThorns = "time MoL cartgrid3d carpetioascii ioutil Fortran boundary hydrobase grhydro grhydro_initdata nanchecker eos_omni CoordBase LoopControl CarpetLib Carpet CarpetIOHDF5 CarpetReduce spacemask ADMCoupling ADMMacros ADMBASE STATICCONFORMAL TMUNUBASE SymBase localreduce CarpetIOBasic initbase GRHydro_InitData"
+
+#This is a hack. ghost_size should be the same as grhydro::grhydro_stencil.
+
+driver::ghost_size=3
+grhydro::grhydro_stencil=3
+
+#time::dtfac = 0.25
+#time::dtfac = 0.8
+time::dtfac = 0.2
+
+methodoflines::ODE_Method = "rk2"
+methodoflines::MoL_Intermediate_Steps=2
+
+#admbase::initial_data="prim2con2prim_test"
+#GRHydro_InitData::Bx_init=0.1
+#GRHydro_InitData::By_init=0.12
+#GRHydro_InitData::Bz_init=0.14
+HydroBase::initial_hydro="shocktube"
+GRHydro_InitData::shocktube_type="diagshock"
+GRHydro_InitData::shock_case="Balsara1"
+
+HydroBase::timelevels=2
+HydroBase::evolution_method="grhydro"
+HydroBase::Bvec_evolution_method="grhydro"
+
+SpaceMask::use_mask="yes"
+EOS_Omni::gl_gamma=2.0
+grhydro::track_divB="yes"
+grhydro::clean_divergence="yes"
+grhydro::ch_dc=1.0
+grhydro::cp_dc=1.0
+grhydro::method_type="RSA FV"
+grhydro::recon_method="tvd"
+grhydro::tvd_limiter="vanleerMC"
+grhydro::recon_vars="primitive"
+grhydro::riemann_solver="HLLE"
+#grhydro::bound="flat"
+grhydro::bound="none"
+grhydro::grhydro_eos_type = "General"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::Grhydro_MaxNumConstrainedVars=13
+grhydro::GRHydro_MaxNumEvolvedVars=10
+
+grid::type = "BySpacing"
+grid::domain = "full"
+#grid::dxyz = 0.01
+#grid::dxyz = 0.000625
+grid::dxyz = 0.0000625
+
+driver::global_nx = 50
+driver::global_ny = 50
+driver::global_nz = 50
+
+Cactus::terminate="time"
+Cactus::cctk_final_time = 0.4
+#cactus::cctk_itlast = 40
+#cactus::cctk_itlast = 200
+#cactus::cctk_itlast = 2
+
+IO::out_dir = $parfile
+#IOBasic::outInfo_every = 1
+#IOBasic::outInfo_vars = "HydroBase::rho"
+CarpetIOBasic::outInfo_vars="hydrobase::rho"
+CarpetIOBasic::outInfo_every=1
+CarpetIOASCII::out1D_criterion = "time"
+CarpetIOASCII::out1D_dt = 0.01
+CarpetIOASCII::out1D_d=no
+#CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::psidc grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+#CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon "
+
+CarpetIOHDF5::out_every = 1
+#CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::psidc grhydro::dens grhydro::divB grhydro::tau grhydro::scon HydroBase::Bvec"
+#CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::tau grhydro::scon "
+
+
diff --git a/par/bondi-ks.par b/par/bondi-ks.par
new file mode 100644
index 0000000..fbb9794
--- /dev/null
+++ b/par/bondi-ks.par
@@ -0,0 +1,166 @@
+#==============================================================================
+# This is a par file for two balls of dust that collapse and merge.
+#==============================================================================
+
+
+ActiveThorns = "admanalysis admbase admcoupling admmacros spacemask StaticConformal boundary time cartgrid3d ioutil iobasic nanchecker CoordBase LocalReduce MoL Carpet CarpetInterp CarpetIOASCII CarpetLib CarpetReduce CarpetIOHDF5 CarpetIOScalar InitBase SymBase LoopControl HydroBase tmunubase"
+
+#------------------------------------------------------------------------------
+
+# Run parameters
+#------------------------------------------------------------------------------
+
+# Grid
+
+mol::ode_method = "RK4"
+mol::mol_intermediate_steps = 4
+mol::mol_num_scratch_levels = 1
+
+driver::ghost_size = 3
+
+Carpet::max_refinement_levels = 1
+Carpet::domain_from_coordbase = yes
+Carpet::num_integrator_substeps = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = yes
+
+
+ActiveThorns = "CarpetRegrid2"
+CarpetRegrid2::regrid_every = 524288
+CarpetRegrid2::num_centres = 1
+CarpetRegrid2::num_levels_1 = 1
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+#CarpetRegrid2::radius_1[ 1] = 10.0
+#CarpetRegrid2::radius_1[ 2] = 5.0
+
+
+CoordBase::domainsize = "minmax"
+CoordBase::xmin = 0.
+CoordBase::ymin = 0.
+CoordBase::zmin = 0.
+CoordBase::xmax = 20.33
+CoordBase::ymax = 20.33
+CoordBase::zmax = 20.33
+CoordBase::spacing = "numcells"
+CoordBase::ncells_x = 60
+CoordBase::ncells_y = 60
+CoordBase::ncells_z = 60
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_size_x_lower=3
+CoordBase::boundary_size_y_lower=3
+CoordBase::boundary_size_z_lower=3
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_originx = "yes"
+CartGrid3D::avoid_originy = "yes"
+CartGrid3D::avoid_originz = "yes"
+
+ActiveThorns = ReflectionSymmetry
+ReflectionSymmetry::reflection_x="yes"
+ReflectionSymmetry::reflection_y="yes"
+ReflectionSymmetry::reflection_z="yes"
+#ReflectionSymmetry::avoid_origin_x="yes"
+#ReflectionSymmetry::avoid_origin_y="yes"
+#ReflectionSymmetry::avoid_origin_z="yes"
+ReflectionSymmetry::avoid_origin_x="no"
+ReflectionSymmetry::avoid_origin_y="no"
+ReflectionSymmetry::avoid_origin_z="no"
+ReflectionSymmetry::avoid_origin_upper_x="no"
+ReflectionSymmetry::avoid_origin_upper_y="no"
+ReflectionSymmetry::avoid_origin_upper_z="no"
+
+#---------------------------------------------------------------------------
+cactus::terminate="time"
+Cactus::cctk_final_time = 20.
+
+time::dtfac = .01
+
+ActiveThorns = "GRHydro grhydro_initdata EOS_Omni"
+
+#ActiveThorns = IDAnalyticBH
+#ADMBase::initial_data="schwarzschild"
+#ADMBase::initial_lapse="schwarzschild"
+#ADMBase::initial_shift="kerr"
+#IDAnalyticBH::mass = 1.
+#IDAnalyticBH::a_Kerr = 0.
+
+ActiveThorns = "Exact CoordGauge"
+ADMBase::initial_data="exact"
+ADMBase::initial_lapse="exact"
+ADMBase::initial_shift="exact"
+ADMBase::evolution_method="exact"
+ADMBase::lapse_evolution_method="exact"
+ADMBase::shift_evolution_method="exact"
+#Exact::overwrite_boundary="exact"
+Exact::exact_model="Kerr/Kerr-Schild"
+Exact::Kerr_KerrSchild__mass=1.
+Exact::Kerr_KerrSchild__spin=0.
+
+
+SpaceMask::use_mask = "yes"
+
+HydroBase::initial_hydro="hydro_bondi_solution"
+grhydro_initdata::mdot_sonicpt_bondi = 1.e-6
+grhydro_initdata::r_sonicpt_bondi = 8.1
+grhydro_initdata::bondi_coordinates = "Kerr-Schild"
+grhydro_initdata::bondi_rmax[0] = 30.
+grhydro_initdata::bondi_rmin[0] = 1e-10
+
+grhydro::riemann_solver = "Marquina"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::grhydro_eos_type = "General"
+grhydro::recon_method = "ppm"
+grhydro::grhydro_stencil = 3
+grhydro::bound = "none"
+Grhydro::rho_abs_min=1.0e-13
+Grhydro::initial_rho_abs_min=1.0e-13
+Grhydro::grhydro_atmo_tolerance=0.0001
+grhydro::Grhydro_MaxNumSandRVars = 16
+Grhydro::initial_Gamma=1.666666666666667
+EOS_Omni::gl_gamma=1.666666666666667
+
+HydroBase::timelevels = 3
+HydroBase::evolution_method = "grhydro"
+
+admbase::metric_type = "Physical"
+
+#--- numerics
+
+boundary::radpower = 2
+
+#------------------------------------------------------------------------------
+# Output
+#------------------------------------------------------------------------------
+IO::out_dir = "data_bondi6"
+IO::out_fileinfo = "none"
+
+
+CarpetIOASCII::out1D_every = 64
+CarpetIOASCII::out1D_vars = "admbase::alp admbase::metric admbase::shift hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel hydrobase::w_lorentz"
+CarpetIOASCII::out1D_d=yes
+CarpetIOScalar::outScalar_vars = "admbase::alp hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel grhydro::dens grhydro::tau grhydro::scon hydrobase::w_lorentz"
+CarpetIOScalar::outScalar_every = 10
+CarpetIOScalar::outScalar_reductions = "minimum maximum"
+
+#==============================================================================
+#NaNChecker::check_every = 16
+#NaNChecker::check_vars = "admbase::metric admbase::curv"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::check_after=10
+
+CarpetIOHDF5::checkpoint = "yes"
+CarpetIOHDF5::out_every = 1
+CarpetIOHDF5::out_vars = "hydrobase::rho hydrobase::press hydrobase::eps hydrobase::vel hydrobase::w_lorentz grhydro::dens grhydro::scon grhydro::tau admbase::metric admbase::alp admbase::shift"
+
+IO::checkpoint_ID = "no"
+IO::checkpoint_every = 1024
+IO::checkpoint_keep=2
+IO::checkpoint_on_terminate = "yes"
+
+#IO::recover = "auto"
diff --git a/par/bondi-punc-iso.par b/par/bondi-punc-iso.par
new file mode 100644
index 0000000..eaadfcc
--- /dev/null
+++ b/par/bondi-punc-iso.par
@@ -0,0 +1,606 @@
+#==============================================================================
+# Bondi accretion into a BH represented by a puncture: mclachlan GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Bondi on puncture data"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+Cactus::cctk_itlast = 256
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+ActiveThorns = "TwoPunctures"
+ActiveThorns = "SummationByParts"
+#ActiveThorns = "TOVSolver"
+ActiveThorns = "GenericFD NewRad"
+ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+ActiveThorns = "Hydro_Analysis"
+ActiveThorns = "Dissipation"
+ActiveThorns = "AHFinderDirect"
+ActiveThorns = "WeylScal4 Multipole"
+ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+TwoPunctures::verbose = "yes"
+
+QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 16
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.25
+MoL::ODE_Method = "rk4"
+MoL::MoL_Intermediate_Steps = 4
+MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = 0.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Driver::ghost_size = 3
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "no"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 512000
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 9
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+CarpetMask::excluded_surface [0] = 0
+CarpetMask::excluded_surface_factor[0] = 1.0
+
+CarpetTracker::surface[0] = 0
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "hydro_bondi_solution_iso"
+
+GRHydro_InitData::mdot_sonicpt_bondi = 1.e-6
+GRHydro_InitData::r_sonicpt_bondi = 8.1
+GRHydro_InitData::bondi_coordinates = "Isotropic"
+GRHydro_InitData::bondi_rmax[0] = 30.
+GRHydro_InitData::bondi_rmin[0] = 1e-10
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "twopunctures"
+ADMBase::initial_lapse = "twopunctures-averaged"
+ADMBase::initial_shift = "zero"
+ADMBase::initial_dtlapse = "zero"
+ADMBase::initial_dtshift = "zero"
+# needed for AHFinderDirect:
+ADMBase::metric_timelevels = 3
+
+#TwoPunctures::schedule_in_ADMBase_InitialData = "no"
+#TwoPunctures::keep_u_around = "yes"
+
+TwoPunctures::npoints_A = 15
+TwoPunctures::npoints_B = 15
+TwoPunctures::npoints_phi = 14
+TwoPunctures::Newton_tol = 1.e-10
+##TwoPunctures::grid_setup_method = "evaluation"
+TwoPunctures::grid_setup_method = "Taylor expansion"
+
+TwoPunctures::par_b = 1.0
+
+TwoPunctures::par_m_plus = 1.0
+TwoPunctures::par_m_minus = 0.0
+
+TwoPunctures::Newton_maxit = 10
+#TwoPunctures::do_residuum_debug_output = "no"
+#TwoPunctures::do_initial_debug_output = "no"
+TwoPunctures::TP_Tiny = 1.e-10
+TwoPunctures::center_offset[0] = -1.0
+TwoPunctures::center_offset[1] = 0
+TwoPunctures::center_offset[2] = 0
+
+#----------
+# Numerics:
+#----------
+
+InitBase::initial_data_setup_method = "init_all_levels"
+
+TmunuBase::stress_energy_storage = "yes"
+TmunuBase::stress_energy_at_RHS = "yes"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 3
+
+ADMMacros::spatial_order = 4
+SummationByParts::order = 4
+
+SpaceMask::use_mask = "yes"
+
+Dissipation::ah_slope = 0.2
+Dissipation::epsdis = 0.01
+Dissipation::extra_dissipation_in_horizons = "yes"
+Dissipation::ah_max_epsdis=0.1
+Dissipation::update_ah_every = 16
+Dissipation::surface_number[0] = 0
+Dissipation::horizon_number[0] = 1
+Dissipation::vars = "
+ ML_BSSN::ML_log_confac
+ ML_BSSN::ML_metric
+ ML_BSSN::ML_curv
+ ML_BSSN::ML_trace_curv
+ ML_BSSN::ML_Gamma
+ ML_BSSN::ML_lapse
+ ML_BSSN::ML_shift
+"
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+SphericalSurface::radius [0] = 0.5
+
+SetMask_SphericalSurface::SetMask_SurfaceIndex[0] = 0
+SetMask_SphericalSurface::SetMask_RadiusFactor[0] = 0.75
+
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+
+GRHydro::riemann_solver = "Marquina"
+GRHydro::recon_method = "ppm"
+GRHydro::GRHydro_stencil = 3
+GRHydro::bound = "none"
+GRHydro::rho_abs_min = 1.0e-13
+Grhydro::initial_rho_abs_min = 1.0e-13
+Grhydro::grhydro_atmo_tolerance = 0.0001
+Grhydro::initial_Gamma = 1.666666666666667
+EOS_Omni::gl_gamma = 1.666666666666667
+
+
+GRHydro::c2p_reset_pressure = "yes"
+#GRHydro::GRHydro_enable_internal_excision = "false"
+
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumSandRVars = 16
+#GRHydro::GRHydro_MaxNumConstrainedVars = 12
+#GRHydro::GRHydro_MaxNumEvolvedVars = 0
+#GRHydro::GRHydro_MaxNumSandRVars = 0
+#GRHydro::GRHydro_MaxNumEvolvedVars = 6 # When 1 tracer is evolved!
+
+ADMBase::evolution_method = "ML_BSSN"
+ADMBase::lapse_evolution_method = "ML_BSSN"
+ADMBase::shift_evolution_method = "ML_BSSN"
+ADMBase::dtlapse_evolution_method= "ML_BSSN"
+ADMBase::dtshift_evolution_method= "ML_BSSN"
+
+ML_BSSN::timelevels = 3
+
+ML_BSSN::harmonicN = 1 # 1+log
+ML_BSSN::harmonicF = 2.0 # 1+log
+ML_BSSN::ShiftGammaCoeff = 0.75
+ML_BSSN::AlphaDriver = 1.0
+#ML_BSSN::BetaDriver = 0.1
+ML_BSSN::BetaDriver = 1.0
+ML_BSSN::LapseAdvectionCoeff = 1.0
+ML_BSSN::ShiftAdvectionCoeff = 1.0
+
+ML_BSSN::MinimumLapse = 1.0e-8
+
+ML_BSSN::my_initial_boundary_condition = "extrapolate-gammas"
+ML_BSSN::my_rhs_boundary_condition = "NewRad"
+Boundary::radpower = 2
+
+ML_BSSN::ML_log_confac_bound = "none"
+ML_BSSN::ML_metric_bound = "none"
+ML_BSSN::ML_Gamma_bound = "none"
+ML_BSSN::ML_trace_curv_bound = "none"
+ML_BSSN::ML_curv_bound = "none"
+ML_BSSN::ML_lapse_bound = "none"
+ML_BSSN::ML_dtlapse_bound = "none"
+ML_BSSN::ML_shift_bound = "none"
+ML_BSSN::ML_dtshift_bound = "none"
+
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+ HydroBase::rho
+ ML_ADMConstraints::ML_Ham
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::dens
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ SystemStatistics::process_memory_mb
+ SphericalSurface::sf_radius
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+ Hydro_Analysis::Hydro_Analysis_rho_max_loc
+# PunctureTracker::pt_loc
+ QuasiLocalMeasures::qlm_scalars
+ SphericalSurface::sf_active
+ SphericalSurface::sf_coordinate_descriptors
+ SphericalSurface::sf_info
+ SphericalSurface::sf_origin
+ SphericalSurface::sf_radius
+ SphericalSurface::sf_valid
+"
+
+#Set these IOASCII options for initial data only:
+IOASCII::out1D_every = 256000000
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::dens
+ GRHydro::scon
+ HydroBase::rho
+ HydroBase::vel
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+"
+
+IOASCII::out2D_every = 256000000
+IOASCII::out2D_vars = "
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ SphericalSurface::sf_radius{out_every=256}
+"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ CarpetReduce::weight
+# GRHydro::GRHydro_tracers
+ Grid::coordinates
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+ WeylScal4::Psi4i
+ WeylScal4::Psi4r
+ "
+
+#IOHDF5::out3D_ghosts = "no"
+#IOHDF5::out3D_outer_ghosts = "no"
+
+IOHDF5::out_every = 256000000
+IOHDF5::out_vars = "
+ CarpetReduce::weight
+ HydroBase::rho
+ HydroBase::vel
+ ADMBase::lapse
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+AHFinderDirect::find_every = 512
+
+#AHFinderDirect::run_at_CCTK_ANALYSIS = "yes"
+#AHFinderDirect::run_at_CCTK_POSTSTEP = "no"
+AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES = "no"
+
+AHFinderDirect::move_origins = "yes"
+#AHFinderDirect::reshape_while_moving = "yes"
+#AHFinderDirect::predict_origin_movement = "yes"
+
+# Hermite to order 3 to avoid discontinuities in the metric spatial derivatives:
+#AHFinderDirect::geometry_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::geometry_interpolator_pars = "order=3"
+#AHFinderDirect::surface_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::surface_interpolator_pars = "order=3"
+AHFinderDirect::geometry_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::geometry_interpolator_pars = "order=4"
+AHFinderDirect::surface_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::surface_interpolator_pars = "order=4"
+
+AHFinderDirect::output_h_every = 0
+
+AHFinderDirect::N_horizons = 1
+
+AHFinderDirect::reset_horizon_after_not_finding [1] = "no"
+AHFinderDirect::initial_guess__coord_sphere__radius [1] = 0.2
+AHFinderDirect::origin_x [1] = 0.0
+AHFinderDirect::origin_y [1] = 0.0
+AHFinderDirect::origin_z [1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+#AHFinderDirect::track_origin_from_grid_scalar [1] = "yes"
+#AHFinderDirect::track_origin_source_x [1] = "PunctureTracker::pt_loc_x[0]"
+#AHFinderDirect::track_origin_source_y [1] = "PunctureTracker::pt_loc_y[0]"
+#AHFinderDirect::track_origin_source_z [1] = "PunctureTracker::pt_loc_z[0]"
+AHFinderDirect::which_surface_to_store_info [1] = 0
+
+
+Hydro_Analysis::Hydro_Analysis_comp_rho_max = "true"
+
+#PunctureTracker::track [0] = "yes"
+#PunctureTracker::initial_x [0] = 10.64502257
+#PunctureTracker::initial_y [0] = 0
+#PunctureTracker::initial_z [0] = 0
+#PunctureTracker::which_surface_to_store_info[0] = 0
+
+QuasiLocalMeasures::num_surfaces = 1
+QuasiLocalMeasures::spatial_order = 4
+QuasiLocalMeasures::interpolator = "Lagrange polynomial interpolation"
+QuasiLocalMeasures::interpolator_options = "order=4"
+QuasiLocalMeasures::surface_index [0] = 0
+
+Multipole::nradii = 4
+Multipole::radius[0] = 80
+Multipole::radius[1] = 100
+Multipole::radius[2] = 120
+Multipole::radius[3] = 140
+Multipole::ntheta = 120
+Multipole::nphi = 240
+Multipole::variables = "WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='psi4'}"
+Multipole::out_every = 4
+Multipole::l_max = 4
+Multipole::integration_method = "Simpson"
+
+WeylScal4::fd_order = "4th"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+#IOHDF5::checkpoint = "yes"
+IO::checkpoint_dir = $parfile
+IO::checkpoint_ID = "yes"
+IO::checkpoint_every = 6144
+#IO::checkpoint_every_walltime_hours = 6.0
+IO::checkpoint_keep=3
+IO::checkpoint_on_terminate = "yes"
+
+IO::recover = "autoprobe"
+IO::recover_dir = $parfile
+
+
diff --git a/par/bondi-punc.par b/par/bondi-punc.par
new file mode 100644
index 0000000..4799f3d
--- /dev/null
+++ b/par/bondi-punc.par
@@ -0,0 +1,606 @@
+#==============================================================================
+# Bondi accretion into a BH represented by a puncture: mclachlan GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Bondi on puncture data"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+Cactus::cctk_itlast = 256
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+ActiveThorns = "TwoPunctures"
+ActiveThorns = "SummationByParts"
+#ActiveThorns = "TOVSolver"
+ActiveThorns = "GenericFD NewRad"
+ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+ActiveThorns = "Hydro_Analysis"
+ActiveThorns = "Dissipation"
+ActiveThorns = "AHFinderDirect"
+ActiveThorns = "WeylScal4 Multipole"
+ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+Carpet::output_timer_tree_every = 256
+Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+TwoPunctures::verbose = "yes"
+
+QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 16
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.25
+MoL::ODE_Method = "rk4"
+MoL::MoL_Intermediate_Steps = 4
+MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = 0.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Driver::ghost_size = 3
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "no"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 512000
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 9
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+CarpetMask::excluded_surface [0] = 0
+CarpetMask::excluded_surface_factor[0] = 1.0
+
+CarpetTracker::surface[0] = 0
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "hydro_bondi_solution"
+
+GRHydro_InitData::mdot_sonicpt_bondi = 1.e-6
+GRHydro_InitData::r_sonicpt_bondi = 8.1
+GRHydro_InitData::bondi_coordinates = "Isotropic"
+GRHydro_InitData::bondi_rmax[0] = 30.
+GRHydro_InitData::bondi_rmin[0] = 1e-10
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "twopunctures"
+ADMBase::initial_lapse = "twopunctures-averaged"
+ADMBase::initial_shift = "zero"
+ADMBase::initial_dtlapse = "zero"
+ADMBase::initial_dtshift = "zero"
+# needed for AHFinderDirect:
+ADMBase::metric_timelevels = 3
+
+#TwoPunctures::schedule_in_ADMBase_InitialData = "no"
+#TwoPunctures::keep_u_around = "yes"
+
+TwoPunctures::npoints_A = 15
+TwoPunctures::npoints_B = 15
+TwoPunctures::npoints_phi = 14
+TwoPunctures::Newton_tol = 1.e-10
+##TwoPunctures::grid_setup_method = "evaluation"
+TwoPunctures::grid_setup_method = "Taylor expansion"
+
+TwoPunctures::par_b = 1.0
+
+TwoPunctures::par_m_plus = 1.0
+TwoPunctures::par_m_minus = 0.0
+
+TwoPunctures::Newton_maxit = 10
+#TwoPunctures::do_residuum_debug_output = "no"
+#TwoPunctures::do_initial_debug_output = "no"
+TwoPunctures::TP_Tiny = 1.e-10
+TwoPunctures::center_offset[0] = -1.0
+TwoPunctures::center_offset[1] = 0
+TwoPunctures::center_offset[2] = 0
+
+#----------
+# Numerics:
+#----------
+
+InitBase::initial_data_setup_method = "init_all_levels"
+
+TmunuBase::stress_energy_storage = "yes"
+TmunuBase::stress_energy_at_RHS = "yes"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 3
+
+ADMMacros::spatial_order = 4
+SummationByParts::order = 4
+
+SpaceMask::use_mask = "yes"
+
+Dissipation::ah_slope = 0.2
+Dissipation::epsdis = 0.01
+Dissipation::extra_dissipation_in_horizons = "yes"
+Dissipation::ah_max_epsdis=0.1
+Dissipation::update_ah_every = 16
+Dissipation::surface_number[0] = 0
+Dissipation::horizon_number[0] = 1
+Dissipation::vars = "
+ ML_BSSN::ML_log_confac
+ ML_BSSN::ML_metric
+ ML_BSSN::ML_curv
+ ML_BSSN::ML_trace_curv
+ ML_BSSN::ML_Gamma
+ ML_BSSN::ML_lapse
+ ML_BSSN::ML_shift
+"
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+SphericalSurface::radius [0] = 0.5
+
+SetMask_SphericalSurface::SetMask_SurfaceIndex[0] = 0
+SetMask_SphericalSurface::SetMask_RadiusFactor[0] = 0.75
+
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+
+GRHydro::riemann_solver = "Marquina"
+GRHydro::recon_method = "ppm"
+GRHydro::GRHydro_stencil = 3
+GRHydro::bound = "none"
+GRHydro::rho_abs_min = 1.0e-13
+Grhydro::initial_rho_abs_min = 1.0e-13
+Grhydro::grhydro_atmo_tolerance = 0.0001
+Grhydro::initial_Gamma = 1.666666666666667
+EOS_Omni::gl_gamma = 1.666666666666667
+
+
+GRHydro::c2p_reset_pressure = "yes"
+#GRHydro::GRHydro_enable_internal_excision = "false"
+
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumSandRVars = 16
+#GRHydro::GRHydro_MaxNumConstrainedVars = 12
+#GRHydro::GRHydro_MaxNumEvolvedVars = 0
+#GRHydro::GRHydro_MaxNumSandRVars = 0
+#GRHydro::GRHydro_MaxNumEvolvedVars = 6 # When 1 tracer is evolved!
+
+ADMBase::evolution_method = "ML_BSSN"
+ADMBase::lapse_evolution_method = "ML_BSSN"
+ADMBase::shift_evolution_method = "ML_BSSN"
+ADMBase::dtlapse_evolution_method= "ML_BSSN"
+ADMBase::dtshift_evolution_method= "ML_BSSN"
+
+ML_BSSN::timelevels = 3
+
+ML_BSSN::harmonicN = 1 # 1+log
+ML_BSSN::harmonicF = 2.0 # 1+log
+ML_BSSN::ShiftGammaCoeff = 0.75
+ML_BSSN::AlphaDriver = 1.0
+#ML_BSSN::BetaDriver = 0.1
+ML_BSSN::BetaDriver = 1.0
+ML_BSSN::LapseAdvectionCoeff = 1.0
+ML_BSSN::ShiftAdvectionCoeff = 1.0
+
+ML_BSSN::MinimumLapse = 1.0e-8
+
+ML_BSSN::my_initial_boundary_condition = "extrapolate-gammas"
+ML_BSSN::my_rhs_boundary_condition = "NewRad"
+Boundary::radpower = 2
+
+ML_BSSN::ML_log_confac_bound = "none"
+ML_BSSN::ML_metric_bound = "none"
+ML_BSSN::ML_Gamma_bound = "none"
+ML_BSSN::ML_trace_curv_bound = "none"
+ML_BSSN::ML_curv_bound = "none"
+ML_BSSN::ML_lapse_bound = "none"
+ML_BSSN::ML_dtlapse_bound = "none"
+ML_BSSN::ML_shift_bound = "none"
+ML_BSSN::ML_dtshift_bound = "none"
+
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+ HydroBase::rho
+ ML_ADMConstraints::ML_Ham
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::dens
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ SystemStatistics::process_memory_mb
+ SphericalSurface::sf_radius
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+IOASCII::output_ghost_points = "no" #hg version only!
+IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+ Hydro_Analysis::Hydro_Analysis_rho_max_loc
+# PunctureTracker::pt_loc
+ QuasiLocalMeasures::qlm_scalars
+ SphericalSurface::sf_active
+ SphericalSurface::sf_coordinate_descriptors
+ SphericalSurface::sf_info
+ SphericalSurface::sf_origin
+ SphericalSurface::sf_radius
+ SphericalSurface::sf_valid
+"
+
+#Set these IOASCII options for initial data only:
+IOASCII::out1D_every = 256000000
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::dens
+ GRHydro::scon
+ HydroBase::rho
+ HydroBase::vel
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+"
+
+IOASCII::out2D_every = 256000000
+IOASCII::out2D_vars = "
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ SphericalSurface::sf_radius{out_every=256}
+"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ CarpetReduce::weight
+# GRHydro::GRHydro_tracers
+ Grid::coordinates
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+ WeylScal4::Psi4i
+ WeylScal4::Psi4r
+ "
+
+#IOHDF5::out3D_ghosts = "no"
+#IOHDF5::out3D_outer_ghosts = "no"
+
+IOHDF5::out_every = 256000000
+IOHDF5::out_vars = "
+ CarpetReduce::weight
+ HydroBase::rho
+ HydroBase::vel
+ ADMBase::lapse
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+AHFinderDirect::find_every = 512
+
+#AHFinderDirect::run_at_CCTK_ANALYSIS = "yes"
+#AHFinderDirect::run_at_CCTK_POSTSTEP = "no"
+AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES = "no"
+
+AHFinderDirect::move_origins = "yes"
+#AHFinderDirect::reshape_while_moving = "yes"
+#AHFinderDirect::predict_origin_movement = "yes"
+
+# Hermite to order 3 to avoid discontinuities in the metric spatial derivatives:
+#AHFinderDirect::geometry_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::geometry_interpolator_pars = "order=3"
+#AHFinderDirect::surface_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::surface_interpolator_pars = "order=3"
+AHFinderDirect::geometry_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::geometry_interpolator_pars = "order=4"
+AHFinderDirect::surface_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::surface_interpolator_pars = "order=4"
+
+AHFinderDirect::output_h_every = 0
+
+AHFinderDirect::N_horizons = 1
+
+AHFinderDirect::reset_horizon_after_not_finding [1] = "no"
+AHFinderDirect::initial_guess__coord_sphere__radius [1] = 0.2
+AHFinderDirect::origin_x [1] = 0.0
+AHFinderDirect::origin_y [1] = 0.0
+AHFinderDirect::origin_z [1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+#AHFinderDirect::track_origin_from_grid_scalar [1] = "yes"
+#AHFinderDirect::track_origin_source_x [1] = "PunctureTracker::pt_loc_x[0]"
+#AHFinderDirect::track_origin_source_y [1] = "PunctureTracker::pt_loc_y[0]"
+#AHFinderDirect::track_origin_source_z [1] = "PunctureTracker::pt_loc_z[0]"
+AHFinderDirect::which_surface_to_store_info [1] = 0
+
+
+Hydro_Analysis::Hydro_Analysis_comp_rho_max = "true"
+
+#PunctureTracker::track [0] = "yes"
+#PunctureTracker::initial_x [0] = 10.64502257
+#PunctureTracker::initial_y [0] = 0
+#PunctureTracker::initial_z [0] = 0
+#PunctureTracker::which_surface_to_store_info[0] = 0
+
+QuasiLocalMeasures::num_surfaces = 1
+QuasiLocalMeasures::spatial_order = 4
+QuasiLocalMeasures::interpolator = "Lagrange polynomial interpolation"
+QuasiLocalMeasures::interpolator_options = "order=4"
+QuasiLocalMeasures::surface_index [0] = 0
+
+Multipole::nradii = 4
+Multipole::radius[0] = 80
+Multipole::radius[1] = 100
+Multipole::radius[2] = 120
+Multipole::radius[3] = 140
+Multipole::ntheta = 120
+Multipole::nphi = 240
+Multipole::variables = "WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='psi4'}"
+Multipole::out_every = 4
+Multipole::l_max = 4
+Multipole::integration_method = "Simpson"
+
+WeylScal4::fd_order = "4th"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+IOHDF5::checkpoint = "yes"
+IO::checkpoint_dir = $parfile
+IO::checkpoint_ID = "yes"
+IO::checkpoint_every = 6144
+#IO::checkpoint_every_walltime_hours = 6.0
+IO::checkpoint_keep=3
+IO::checkpoint_on_terminate = "yes"
+
+IO::recover = "autoprobe"
+IO::recover_dir = $parfile
+
+
diff --git a/par/bondi-punc2.par b/par/bondi-punc2.par
new file mode 100644
index 0000000..5c92107
--- /dev/null
+++ b/par/bondi-punc2.par
@@ -0,0 +1,595 @@
+#==============================================================================
+# Bondi accretion into a BH represented by a puncture: mclachlan GRHydro_InitData
+#==============================================================================
+
+#------------------------------------------------------------------------------
+# Cactus parameters:
+#------------------------------------------------------------------------------
+Cactus::cctk_run_title = "Bondi on puncture data"
+Cactus::cctk_full_warnings = "yes"
+
+#Cactus::terminate = "never"
+#Cactus::terminate = "time"
+#Cactus::cctk_final_time = 1500.0
+Cactus::terminate = "iteration"
+#Cactus::cctk_itlast = 0
+Cactus::cctk_itlast = 256
+#Cactus::terminate="runtime"
+#Cactus::max_runtime=28800 # 46 days
+#Cactus::max_runtime=1410 # 23.5 hours
+#Cactus::max_runtime=1380 # 23 hours
+#Cactus::max_runtime=690 # 11.5 hours
+#Cactus::max_runtime=450 # 7.5 hours
+#Cactus::max_runtime=210 # 3.5 hours
+
+#------------------------------------------------------------------------------
+# Activate all necessary thorns:
+#------------------------------------------------------------------------------
+
+ActiveThorns = "Boundary CartGrid3D CoordBase Fortran InitBase IOUtil LocalReduce SymBase Time"
+ActiveThorns = "AEILocalInterp LocalInterp"
+ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry90 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry RotatingSymmetry180 Slab SpaceMask SphericalSurface"
+#ActiveThorns = "MoL ReflectionSymmetry Slab SpaceMask SphericalSurface"
+ActiveThorns = "Carpet CarpetInterp CarpetIOASCII CarpetIOHDF5 CarpetIOScalar CarpetLib CarpetIOBasic CarpetReduce CarpetRegrid2 CarpetSlab CarpetTracker CarpetMask LoopControl"
+#ActiveThorns = "Formaline NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "NaNChecker TerminationTrigger TimerReport"
+ActiveThorns = "ADMbase ADMcoupling ADMmacros CoordGauge StaticConformal"
+#ActiveThorns = "PunctureTracker"
+#ActiveThorns = "ADManalysis Constants TmunuBase HydroBase "
+ActiveThorns = "Constants TmunuBase HydroBase "
+ActiveThorns = "QuasiLocalMeasures"
+#ActiveThorns = "ADMConstraints"
+#ActiveThorns = "EOS_Base EOS_IdealFluid EOS_Polytrope"
+ActiveThorns = "EOS_Omni"
+ActiveThorns = "GRHydro GRHydro_InitData"
+ActiveThorns = "BLAS LAPACK GSL HDF5"
+ActiveThorns = "TwoPunctures"
+ActiveThorns = "SummationByParts"
+#ActiveThorns = "TOVSolver"
+ActiveThorns = "GenericFD NewRad"
+ActiveThorns = "ML_BSSN ML_BSSN_Helper ML_ADMConstraints"
+ActiveThorns = "Hydro_Analysis"
+ActiveThorns = "Dissipation"
+ActiveThorns = "AHFinderDirect"
+ActiveThorns = "WeylScal4 Multipole"
+ActiveThorns = "SetMask_SphericalSurface"
+ActiveThorns = "SystemStatistics"
+
+#------------------------------------------------------------------------------
+# Diagnostic parameters:
+#------------------------------------------------------------------------------
+AHFinderDirect::verbose_level = "physics details"
+
+Carpet::output_timers_every = 1024
+#Carpet::output_timer_tree_every = 256
+#Carpet::output_initialise_timer_tree = "yes"
+Carpet::storage_verbose = "no"
+#Carpet::timers_verbose = "no"
+#Carpet::verbose = "yes" # only for Initial Data
+Carpet::verbose = "no"
+Carpet::veryverbose = "no"
+Carpet::grid_structure_filename = "carpet-grid-structure.asc"
+Carpet::grid_coordinates_filename = "carpet-grid-coordinates.asc"
+
+CarpetLib::output_bboxes = "no"
+CarpetLib::print_memstats_every = 1024
+CarpetLib::memstat_file = "carpetlib-memory-statistics.asc"
+#CarpetLib::print_timestats_every = 1024
+#CarpetLib::timestat_file = "carpetlib-timing-statistics.asc"
+
+CarpetMask::verbose = "yes"
+CarpetReduce::verbose = "no"
+CarpetRegrid2::verbose = "yes"
+#CarpetRegrid2::veryverbose = "yes"
+
+CarpetTracker::verbose = "yes"
+
+Dissipation::verbose = "no"
+
+#NaNChecker::verbose = "all"
+
+#PunctureTracker::verbose = "yes"
+
+TimerReport::out_every = 1024
+TimerReport::out_filename = "TimerReport"
+#TimerReport::output_all_timers = "yes"
+#TimerReport::output_all_timers_together = "yes"
+#TimerReport::output_all_timers_readable = "yes"
+#TimerReport::before_checkpoint = "yes"
+TimerReport::n_top_timers = 40
+
+TwoPunctures::verbose = "yes"
+
+QuasiLocalMeasures::verbose = "yes"
+SphericalSurface::verbose = "yes"
+
+#------------------------------------------------------------------------------
+# Utility parameters:
+#------------------------------------------------------------------------------
+
+#NaNChecker::check_every = 16
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "
+ ADMBase::curv
+ ADMBase::metric
+ ADMBase::lapse
+ ADMBase::shift
+ HydroBase::rho
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::vel
+"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#TerminationTrigger::max_walltime = 0.0 # hours
+TerminationTrigger::max_walltime = 24.0 # hours
+TerminationTrigger::on_remaining_walltime = 10.0 # minutes
+TerminationTrigger::termination_from_file = "yes"
+TerminationTrigger::create_termination_file = "yes"
+TerminationTrigger::termination_file = "../TERMINATE"
+
+
+#------------------------------------------------------------------------------
+# Run parameters:
+#------------------------------------------------------------------------------
+
+#------
+# Grid:
+#------
+
+Time::dtfac = 0.25
+MoL::ODE_Method = "rk4"
+MoL::MoL_Intermediate_Steps = 4
+MoL::MoL_Num_Scratch_Levels = 1
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+
+CoordBase::domainsize = "minmax"
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+
+CoordBase::xmin = 0.0
+CoordBase::ymin = 0.0
+CoordBase::zmin = 0.0
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower = 3
+CoordBase::boundary_size_y_lower = 3
+CoordBase::boundary_size_z_lower = 3
+CoordBase::boundary_size_x_upper = 3
+CoordBase::boundary_size_y_upper = 3
+CoordBase::boundary_size_z_upper = 3
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+Driver::ghost_size = 3
+
+ReflectionSymmetry::reflection_x = "no"
+ReflectionSymmetry::reflection_y = "no"
+ReflectionSymmetry::reflection_z = "yes"
+ReflectionSymmetry::avoid_origin_x = "no"
+ReflectionSymmetry::avoid_origin_y = "no"
+ReflectionSymmetry::avoid_origin_z = "no"
+
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+#CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 512000
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 9
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+CarpetMask::excluded_surface [0] = 0
+CarpetMask::excluded_surface_factor[0] = 1.0
+
+CarpetTracker::surface[0] = 0
+
+#------
+# MODEL:
+#------
+
+HydroBase::initial_hydro = "hydro_bondi_solution"
+
+GRHydro_InitData::mdot_sonicpt_bondi = 1.e-6
+GRHydro_InitData::r_sonicpt_bondi = 8.1
+GRHydro_InitData::bondi_coordinates = "Isotropic"
+GRHydro_InitData::bondi_rmax[0] = 30.
+GRHydro_InitData::bondi_rmin[0] = 1e-10
+
+ADMBase::metric_type = "physical"
+ADMBase::initial_data = "twopunctures"
+ADMBase::initial_lapse = "twopunctures-averaged"
+ADMBase::initial_shift = "zero"
+ADMBase::initial_dtlapse = "zero"
+ADMBase::initial_dtshift = "zero"
+# needed for AHFinderDirect:
+ADMBase::metric_timelevels = 3
+
+#TwoPunctures::schedule_in_ADMBase_InitialData = "no"
+#TwoPunctures::keep_u_around = "yes"
+
+TwoPunctures::npoints_A = 15
+TwoPunctures::npoints_B = 15
+TwoPunctures::npoints_phi = 14
+TwoPunctures::Newton_tol = 1.e-10
+##TwoPunctures::grid_setup_method = "evaluation"
+TwoPunctures::grid_setup_method = "Taylor expansion"
+
+TwoPunctures::par_b = 1.0
+
+TwoPunctures::par_m_plus = 1.0
+TwoPunctures::par_m_minus = 0.0
+
+TwoPunctures::Newton_maxit = 10
+#TwoPunctures::do_residuum_debug_output = "no"
+#TwoPunctures::do_initial_debug_output = "no"
+TwoPunctures::TP_Tiny = 1.e-10
+TwoPunctures::center_offset[0] = -1.0
+TwoPunctures::center_offset[1] = 0
+TwoPunctures::center_offset[2] = 0
+
+#----------
+# Numerics:
+#----------
+
+InitBase::initial_data_setup_method = "init_all_levels"
+
+TmunuBase::stress_energy_storage = "no"
+TmunuBase::stress_energy_at_RHS = "no"
+TmunuBase::timelevels = 1
+TmunuBase::prolongation_type = "none"
+TmunuBase::support_old_CalcTmunu_mechanism = "no"
+
+HydroBase::timelevels = 3
+
+ADMMacros::spatial_order = 4
+SummationByParts::order = 4
+
+SpaceMask::use_mask = "yes"
+
+Dissipation::ah_slope = 0.2
+Dissipation::epsdis = 0.01
+Dissipation::extra_dissipation_in_horizons = "yes"
+Dissipation::ah_max_epsdis=0.1
+Dissipation::update_ah_every = 16
+Dissipation::surface_number[0] = 0
+Dissipation::horizon_number[0] = 1
+Dissipation::vars = "
+ ML_BSSN::ML_log_confac
+ ML_BSSN::ML_metric
+ ML_BSSN::ML_curv
+ ML_BSSN::ML_trace_curv
+ ML_BSSN::ML_Gamma
+ ML_BSSN::ML_lapse
+ ML_BSSN::ML_shift
+"
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+
+SetMask_SphericalSurface::SetMask_SurfaceIndex[0] = 0
+SetMask_SphericalSurface::SetMask_RadiusFactor[0] = 0.5
+
+
+#-----------
+# Evolution:
+#-----------
+
+HydroBase::evolution_method = "GRHydro"
+
+GRHydro::riemann_solver = "Marquina"
+GRHydro::recon_method = "ppm"
+GRHydro::GRHydro_stencil = 3
+GRHydro::bound = "none"
+GRHydro::rho_abs_min = 1.0e-13
+Grhydro::initial_rho_abs_min = 1.0e-13
+Grhydro::grhydro_atmo_tolerance = 0.0001
+Grhydro::initial_Gamma = 1.666666666666667
+EOS_Omni::gl_gamma = 1.666666666666667
+
+
+GRHydro::c2p_reset_pressure = "yes"
+#GRHydro::GRHydro_enable_internal_excision = "false"
+
+GRHydro::GRHydro_eos_type = "General"
+GRHydro::GRHydro_eos_table = "Ideal_Fluid"
+
+GRHydro::Grhydro_MaxNumSandRVars = 16
+#GRHydro::GRHydro_MaxNumConstrainedVars = 12
+#GRHydro::GRHydro_MaxNumEvolvedVars = 0
+#GRHydro::GRHydro_MaxNumSandRVars = 0
+#GRHydro::GRHydro_MaxNumEvolvedVars = 6 # When 1 tracer is evolved!
+
+ADMBase::evolution_method = "ML_BSSN"
+ADMBase::lapse_evolution_method = "ML_BSSN"
+ADMBase::shift_evolution_method = "ML_BSSN"
+ADMBase::dtlapse_evolution_method= "ML_BSSN"
+ADMBase::dtshift_evolution_method= "ML_BSSN"
+
+ML_BSSN::timelevels = 3
+
+ML_BSSN::harmonicN = 1 # 1+log
+ML_BSSN::harmonicF = 2.0 # 1+log
+ML_BSSN::ShiftGammaCoeff = 0.75
+ML_BSSN::AlphaDriver = 1.0
+#ML_BSSN::BetaDriver = 0.1
+ML_BSSN::BetaDriver = 1.0
+ML_BSSN::LapseAdvectionCoeff = 1.0
+ML_BSSN::ShiftAdvectionCoeff = 1.0
+
+ML_BSSN::MinimumLapse = 1.0e-8
+
+ML_BSSN::my_initial_boundary_condition = "extrapolate-gammas"
+ML_BSSN::my_rhs_boundary_condition = "NewRad"
+Boundary::radpower = 2
+
+ML_BSSN::ML_log_confac_bound = "none"
+ML_BSSN::ML_metric_bound = "none"
+ML_BSSN::ML_Gamma_bound = "none"
+ML_BSSN::ML_trace_curv_bound = "none"
+ML_BSSN::ML_curv_bound = "none"
+ML_BSSN::ML_lapse_bound = "none"
+ML_BSSN::ML_dtlapse_bound = "none"
+ML_BSSN::ML_shift_bound = "none"
+ML_BSSN::ML_dtshift_bound = "none"
+
+
+#------------------------------------------------------------------------------
+# Output:
+#------------------------------------------------------------------------------
+
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+IOBasic::outInfo_every = 1
+IOBasic::outInfo_reductions = "maximum"
+IOBasic::outInfo_vars = "
+ Carpet::physical_time_per_hour
+ HydroBase::rho
+ ML_ADMConstraints::ML_Ham
+ SystemStatistics::maxrss_mb
+"
+
+IOScalar::outScalar_every = 1024
+IOScalar::one_file_per_group = "yes"
+IOScalar::outScalar_reductions = "minimum maximum average norm1 norm2"
+IOScalar::outScalar_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ GRHydro::dens
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ SystemStatistics::process_memory_mb
+ SphericalSurface::sf_radius
+"
+
+IOASCII::one_file_per_group = "yes"
+IOASCII::output_symmetry_points = "no"
+#IOASCII::output_ghost_points = "no" #hg version only!
+#IOASCII::output_boundary_points = "no" #hg version only!
+#IOASCII::out3D_ghosts = "no" #hg (DEPRECATED)
+#IOASCII::out3D_outer_ghosts = "no" #hg (DEPRECATED)
+
+IOASCII::out0D_every = 256
+IOASCII::out0D_vars = "
+ Carpet::timing
+ Hydro_Analysis::Hydro_Analysis_rho_max_loc
+ QuasiLocalMeasures::qlm_scalars
+ SphericalSurface::sf_active
+ SphericalSurface::sf_coordinate_descriptors
+ SphericalSurface::sf_info
+ SphericalSurface::sf_origin
+ SphericalSurface::sf_radius
+ SphericalSurface::sf_valid
+"
+
+#Set these IOASCII options for initial data only:
+IOASCII::out1D_every = 256000000
+IOASCII::out1D_d = "no"
+IOASCII::out1D_vars = "
+ ADMBase::curv
+ ADMBase::lapse
+ ADMBase::metric
+ ADMBase::shift
+ HydroBase::rho
+ HydroBase::vel
+ ML_BSSN::ML_Ham
+ ML_BSSN::ML_mom
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+"
+
+IOASCII::out2D_every = 256000000
+IOASCII::out2D_vars = "
+ HydroBase::rho
+ HydroBase::vel
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_mom
+ SphericalSurface::sf_radius{out_every=256}
+"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+CarpetIOHDF5::out2D_every = 256
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+ CarpetReduce::weight
+ Grid::coordinates
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+ ADMBase::metric
+ ADMBase::shift
+ "
+
+#IOHDF5::out3D_ghosts = "no"
+#IOHDF5::out3D_outer_ghosts = "no"
+
+IOHDF5::out_every = 256000000
+IOHDF5::out_vars = "
+ CarpetReduce::weight
+ HydroBase::rho
+ HydroBase::vel
+ ADMBase::lapse
+ ML_ADMConstraints::ML_Ham
+ ML_ADMConstraints::ML_Mom
+"
+
+#------------------------------------------------------------------------------
+# Analysis:
+#------------------------------------------------------------------------------
+AHFinderDirect::find_every = 512
+
+#AHFinderDirect::run_at_CCTK_ANALYSIS = "yes"
+#AHFinderDirect::run_at_CCTK_POSTSTEP = "no"
+AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES = "no"
+
+AHFinderDirect::move_origins = "yes"
+#AHFinderDirect::reshape_while_moving = "yes"
+#AHFinderDirect::predict_origin_movement = "yes"
+
+# Hermite to order 3 to avoid discontinuities in the metric spatial derivatives:
+#AHFinderDirect::geometry_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::geometry_interpolator_pars = "order=3"
+#AHFinderDirect::surface_interpolator_name = "Hermite polynomial interpolation"
+#AHFinderDirect::surface_interpolator_pars = "order=3"
+AHFinderDirect::geometry_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::geometry_interpolator_pars = "order=4"
+AHFinderDirect::surface_interpolator_name = "Lagrange polynomial interpolation"
+AHFinderDirect::surface_interpolator_pars = "order=4"
+
+AHFinderDirect::output_h_every = 0
+
+AHFinderDirect::N_horizons = 1
+
+AHFinderDirect::reset_horizon_after_not_finding [1] = "no"
+AHFinderDirect::initial_guess__coord_sphere__radius [1] = 0.2
+AHFinderDirect::origin_x [1] = 0.0
+AHFinderDirect::origin_y [1] = 0.0
+AHFinderDirect::origin_z [1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__x_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__y_center[1] = 0.0
+AHFinderDirect::initial_guess__coord_sphere__z_center[1] = 0.0
+#AHFinderDirect::track_origin_from_grid_scalar [1] = "yes"
+#AHFinderDirect::track_origin_source_x [1] = "PunctureTracker::pt_loc_x[0]"
+#AHFinderDirect::track_origin_source_y [1] = "PunctureTracker::pt_loc_y[0]"
+#AHFinderDirect::track_origin_source_z [1] = "PunctureTracker::pt_loc_z[0]"
+AHFinderDirect::which_surface_to_store_info [1] = 0
+
+
+Hydro_Analysis::Hydro_Analysis_comp_rho_max = "true"
+
+#PunctureTracker::track [0] = "yes"
+#PunctureTracker::initial_x [0] = 10.64502257
+#PunctureTracker::initial_y [0] = 0
+#PunctureTracker::initial_z [0] = 0
+#PunctureTracker::which_surface_to_store_info[0] = 0
+
+QuasiLocalMeasures::num_surfaces = 1
+QuasiLocalMeasures::spatial_order = 4
+QuasiLocalMeasures::interpolator = "Lagrange polynomial interpolation"
+QuasiLocalMeasures::interpolator_options = "order=4"
+QuasiLocalMeasures::surface_index [0] = 0
+
+Multipole::nradii = 4
+Multipole::radius[0] = 80
+Multipole::radius[1] = 100
+Multipole::radius[2] = 120
+Multipole::radius[3] = 140
+Multipole::ntheta = 120
+Multipole::nphi = 240
+Multipole::variables = "WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='psi4'}"
+Multipole::out_every = 4
+Multipole::l_max = 4
+Multipole::integration_method = "Simpson"
+
+WeylScal4::fd_order = "4th"
+
+#------------------------------------------------------------------------------
+# Checkpoint/Recovery:
+#------------------------------------------------------------------------------
+IOHDF5::checkpoint = "yes"
+IO::checkpoint_dir = $parfile
+IO::checkpoint_ID = "yes"
+IO::checkpoint_every = 6144
+#IO::checkpoint_every_walltime_hours = 6.0
+IO::checkpoint_keep=3
+IO::checkpoint_on_terminate = "yes"
+
+IO::recover = "autoprobe"
+IO::recover_dir = $parfile
+
+
diff --git a/par/bondi-sch.par b/par/bondi-sch.par
new file mode 100644
index 0000000..59976d4
--- /dev/null
+++ b/par/bondi-sch.par
@@ -0,0 +1,218 @@
+#==============================================================================
+# This is a par file for two balls of dust that collapse and merge.
+#==============================================================================
+
+
+ActiveThorns = "admanalysis admbase admcoupling admmacros spacemask StaticConformal boundary time cartgrid3d ioutil iobasic nanchecker CoordBase LocalReduce MoL Carpet CarpetInterp CarpetIOASCII CarpetLib CarpetReduce CarpetRegrid2 CarpetTracker CarpetMask CarpetIOHDF5 CarpetIOScalar InitBase SymBase LoopControl HydroBase tmunubase SphericalSurface"
+
+#------------------------------------------------------------------------------
+
+# Run parameters
+#------------------------------------------------------------------------------
+
+# Grid
+
+mol::ode_method = "RK4"
+mol::mol_intermediate_steps = 4
+mol::mol_num_scratch_levels = 1
+
+CoordBase::domainsize = "minmax"
+CoordBase::xmin = 0.
+CoordBase::ymin = 0.
+CoordBase::zmin = 0.
+CoordBase::xmax = 256.0
+CoordBase::ymax = 256.0
+CoordBase::zmax = 256.0
+CoordBase::spacing = "gridspacing" # "gridspacing" or "numcells"
+#CoordBase::ncells_x = 60
+#CoordBase::ncells_y = 60
+#CoordBase::ncells_z = 60
+CoordBase::dx = 8.0 # dx or ncells_x
+CoordBase::dy = 8.0 # dy or ncells_y
+CoordBase::dz = 8.0 # dz or ncells_z
+#CoordBase::dx = 2.0 # dx or ncells_x
+#CoordBase::dy = 2.0 # dy or ncells_y
+#CoordBase::dz = 2.0 # dz or ncells_z
+
+CoordBase::boundary_size_x_lower=3
+CoordBase::boundary_size_y_lower=3
+CoordBase::boundary_size_z_lower=3
+#CoordBase::boundary_size_x_upper = 3
+#CoordBase::boundary_size_y_upper = 3
+#CoordBase::boundary_size_z_upper = 3
+
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_shiftout_x_upper = 0
+CoordBase::boundary_shiftout_y_upper = 0
+CoordBase::boundary_shiftout_z_upper = 0
+
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_origin = "no"
+#CartGrid3D::avoid_origin = "yes"
+#CartGrid3D::avoid_originx = "yes"
+#CartGrid3D::avoid_originy = "yes"
+#CartGrid3D::avoid_originz = "yes"
+
+ActiveThorns = "Slab ReflectionSymmetry RotatingSymmetry90"
+
+ReflectionSymmetry::reflection_x="no"
+ReflectionSymmetry::reflection_y="no"
+ReflectionSymmetry::reflection_z="yes"
+ReflectionSymmetry::avoid_origin_x="no"
+ReflectionSymmetry::avoid_origin_y="no"
+ReflectionSymmetry::avoid_origin_z="no"
+#ReflectionSymmetry::avoid_origin_upper_x="no"
+#ReflectionSymmetry::avoid_origin_upper_y="no"
+#ReflectionSymmetry::avoid_origin_upper_z="no"
+
+Driver::ghost_size = 3
+
+# General Carpet parameters:
+Carpet::domain_from_coordbase = "yes"
+Carpet::enable_all_storage = "no"
+Carpet::use_buffer_zones = "yes"
+Carpet::schedule_barriers = "no"
+
+Carpet::poison_new_timelevels = "yes"
+Carpet::check_for_poison = "no"
+#Carpet::poison_value = 113 # git version only!
+
+Carpet::init_3_timelevels = "no"
+Carpet::init_fill_timelevels = "yes"
+
+CarpetLib::poison_new_memory = "yes"
+CarpetLib::poison_value = 114
+CarpetLib::check_bboxes = "no"
+CarpetLib::interleave_communications = "yes"
+#CarpetLib::vary_tags = "yes" # git version only!
+CarpetLib::combine_sends = "yes"
+#CarpetLib::reduce_mpi_waitall = "yes" # git version only!
+
+CarpetInterp::tree_search = "yes"
+CarpetInterp::check_tree_search = "no"
+
+CarpetRegrid2::freeze_unaligned_levels = "yes"
+CarpetRegrid2::snap_to_coarse = "yes"
+CarpetRegrid2::symmetry_rotating90 = "yes"
+
+# System specific Carpet parameters:
+Carpet::max_refinement_levels = 9
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+
+CarpetRegrid2::regrid_every = 512000
+CarpetRegrid2::num_centres = 1
+
+CarpetRegrid2::num_levels_1 = 9
+#CarpetRegrid2::num_levels_1 = 1
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+CarpetRegrid2::radius_1[1] =128.0 # 4
+CarpetRegrid2::radius_1[2] = 64.0 # 2
+CarpetRegrid2::radius_1[3] = 32.0 # 1
+CarpetRegrid2::radius_1[4] = 16.0 # 0.5
+CarpetRegrid2::radius_1[5] = 8.0 # 0.25
+CarpetRegrid2::radius_1[6] = 4.0 # 0.125
+CarpetRegrid2::radius_1[7] = 2.0 # 0.0625
+CarpetRegrid2::radius_1[8] = 1.0 # 0.03125
+
+CarpetMask::excluded_surface [0] = 0
+CarpetMask::excluded_surface_factor[0] = 1.0
+
+CarpetTracker::surface[0] = 0
+
+SphericalSurface::nsurfaces = 1
+SphericalSurface::maxntheta = 39
+SphericalSurface::maxnphi = 76
+
+SphericalSurface::ntheta [0] = 39
+SphericalSurface::nphi [0] = 76
+SphericalSurface::nghoststheta[0] = 2
+SphericalSurface::nghostsphi [0] = 2
+
+
+#---------------------------------------------------------------------------
+cactus::terminate="time"
+#Cactus::cctk_final_time = 20.
+Cactus::cctk_final_time = 1.
+
+time::dtfac = .01
+
+ActiveThorns = "GRHydro grhydro_initdata EOS_Omni"
+
+ActiveThorns = "IDAnalyticBH"
+
+ADMBase::initial_data="schwarzschild"
+ADMBase::initial_lapse="schwarzschild"
+ADMBase::initial_shift="kerr"
+IDAnalyticBH::mass = 1.
+IDAnalyticBH::a_Kerr = 0.
+IDAnalyticBH::epsilon = 1.0e-10
+
+SpaceMask::use_mask = "yes"
+
+HydroBase::initial_hydro="hydro_bondi_solution"
+grhydro_initdata::mdot_sonicpt_bondi = 1.e-6
+grhydro_initdata::r_sonicpt_bondi = 8.1
+grhydro_initdata::bondi_coordinates = "Kerr-Schild"
+grhydro_initdata::bondi_rmax[0] = 30.
+grhydro_initdata::bondi_rmin[0] = 1e-10
+
+grhydro::riemann_solver = "Marquina"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::grhydro_eos_type = "General"
+grhydro::recon_method = "ppm"
+grhydro::grhydro_stencil = 3
+grhydro::bound = "none"
+Grhydro::rho_abs_min=1.0e-13
+Grhydro::initial_rho_abs_min=1.0e-13
+Grhydro::grhydro_atmo_tolerance=0.0001
+grhydro::Grhydro_MaxNumSandRVars = 16
+Grhydro::initial_Gamma=1.666666666666667
+EOS_Omni::gl_gamma=1.666666666666667
+
+HydroBase::timelevels = 3
+HydroBase::evolution_method = "grhydro"
+
+admbase::metric_type = "Physical"
+
+#--- numerics
+
+boundary::radpower = 2
+
+#------------------------------------------------------------------------------
+# Output
+#------------------------------------------------------------------------------
+#IO::out_dir = "data_bondi6"
+IO::out_dir = $parfile
+IO::out_fileinfo = "none"
+
+
+CarpetIOASCII::out1D_every = 64
+CarpetIOASCII::out1D_vars = "admbase::alp admbase::metric admbase::shift hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel hydrobase::w_lorentz"
+CarpetIOASCII::out1D_d=yes
+CarpetIOScalar::outScalar_vars = "admbase::alp hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel grhydro::dens grhydro::tau grhydro::scon hydrobase::w_lorentz"
+CarpetIOScalar::outScalar_every = 10
+CarpetIOScalar::outScalar_reductions = "minimum maximum"
+
+#==============================================================================
+NaNChecker::check_every = 16
+NaNChecker::check_vars = "admbase::metric admbase::curv"
+NaNChecker::action_if_found = "abort"
+NaNChecker::check_after=10
+
+#CarpetIOHDF5::checkpoint = "yes"
+CarpetIOHDF5::out_every = 32
+CarpetIOHDF5::out_vars = "hydrobase::rho hydrobase::press hydrobase::eps hydrobase::vel hydrobase::w_lorentz admbase::metric admbase::alp admbase::shift"
+
+#IO::checkpoint_ID = "no"
+#IO::checkpoint_every = 1024
+#IO::checkpoint_keep=2
+#IO::checkpoint_on_terminate = "yes"
+
+#IO::recover = "auto"
diff --git a/par/bondi-sch2.par b/par/bondi-sch2.par
new file mode 100644
index 0000000..450e95b
--- /dev/null
+++ b/par/bondi-sch2.par
@@ -0,0 +1,153 @@
+#==============================================================================
+# This is a par file for two balls of dust that collapse and merge.
+#==============================================================================
+
+
+ActiveThorns = "admanalysis admbase admcoupling admmacros spacemask StaticConformal boundary time cartgrid3d ioutil iobasic nanchecker CoordBase LocalReduce MoL Carpet CarpetInterp CarpetIOASCII CarpetLib CarpetReduce CarpetIOHDF5 CarpetIOScalar InitBase SymBase LoopControl HydroBase tmunubase"
+
+#------------------------------------------------------------------------------
+
+# Run parameters
+#------------------------------------------------------------------------------
+
+# Grid
+
+mol::ode_method = "RK4"
+mol::mol_intermediate_steps = 4
+mol::mol_num_scratch_levels = 1
+
+driver::ghost_size = 3
+
+Carpet::max_refinement_levels = 1
+Carpet::domain_from_coordbase = yes
+Carpet::num_integrator_substeps = 3
+Carpet::prolongation_order_space = 3
+Carpet::prolongation_order_time = 2
+Carpet::init_each_timelevel = yes
+
+
+ActiveThorns = "CarpetRegrid2"
+CarpetRegrid2::regrid_every = 524288
+CarpetRegrid2::num_centres = 1
+CarpetRegrid2::num_levels_1 = 1
+CarpetRegrid2::position_x_1 = 0.0
+CarpetRegrid2::position_y_1 = 0.0
+CarpetRegrid2::position_z_1 = 0.0
+#CarpetRegrid2::radius_1[ 1] = 10.0
+#CarpetRegrid2::radius_1[ 2] = 5.0
+
+
+CoordBase::domainsize = "minmax"
+CoordBase::xmin = 0.
+CoordBase::ymin = 0.
+CoordBase::zmin = 0.
+CoordBase::xmax = 20.33
+CoordBase::ymax = 20.33
+CoordBase::zmax = 20.33
+CoordBase::spacing = "numcells"
+CoordBase::ncells_x = 60
+CoordBase::ncells_y = 60
+CoordBase::ncells_z = 60
+CoordBase::boundary_shiftout_x_lower = 1
+CoordBase::boundary_shiftout_y_lower = 1
+CoordBase::boundary_shiftout_z_lower = 1
+CoordBase::boundary_size_x_lower=3
+CoordBase::boundary_size_y_lower=3
+CoordBase::boundary_size_z_lower=3
+
+CartGrid3D::type = "coordbase"
+CartGrid3D::domain = "full"
+CartGrid3D::avoid_originx = "no"
+CartGrid3D::avoid_originy = "no"
+CartGrid3D::avoid_originz = "no"
+
+ActiveThorns = ReflectionSymmetry
+ReflectionSymmetry::reflection_x="yes"
+ReflectionSymmetry::reflection_y="yes"
+ReflectionSymmetry::reflection_z="yes"
+#ReflectionSymmetry::avoid_origin_x="yes"
+#ReflectionSymmetry::avoid_origin_y="yes"
+#ReflectionSymmetry::avoid_origin_z="yes"
+ReflectionSymmetry::avoid_origin_x="no"
+ReflectionSymmetry::avoid_origin_y="no"
+ReflectionSymmetry::avoid_origin_z="no"
+ReflectionSymmetry::avoid_origin_upper_x="no"
+ReflectionSymmetry::avoid_origin_upper_y="no"
+ReflectionSymmetry::avoid_origin_upper_z="no"
+
+#---------------------------------------------------------------------------
+cactus::terminate="time"
+Cactus::cctk_final_time = 20.
+
+time::dtfac = .01
+
+ActiveThorns = "GRHydro grhydro_initdata EOS_Omni"
+
+ActiveThorns = IDAnalyticBH
+ADMBase::initial_data="schwarzschild"
+ADMBase::initial_lapse="schwarzschild"
+ADMBase::initial_shift="kerr"
+IDAnalyticBH::mass = 1.
+IDAnalyticBH::a_Kerr = 0.
+
+SpaceMask::use_mask = "yes"
+
+HydroBase::initial_hydro="hydro_bondi_solution"
+grhydro_initdata::mdot_sonicpt_bondi = 1.e-6
+grhydro_initdata::r_sonicpt_bondi = 8.1
+grhydro_initdata::bondi_coordinates = "Kerr-Schild"
+grhydro_initdata::bondi_rmax[0] = 30.
+grhydro_initdata::bondi_rmin[0] = 1e-10
+
+grhydro::riemann_solver = "Marquina"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::grhydro_eos_type = "General"
+grhydro::recon_method = "ppm"
+grhydro::grhydro_stencil = 3
+grhydro::bound = "none"
+Grhydro::rho_abs_min=1.0e-13
+Grhydro::initial_rho_abs_min=1.0e-13
+Grhydro::grhydro_atmo_tolerance=0.0001
+grhydro::Grhydro_MaxNumSandRVars = 16
+Grhydro::initial_Gamma=1.666666666666667
+EOS_Omni::gl_gamma=1.666666666666667
+
+HydroBase::timelevels = 3
+HydroBase::evolution_method = "grhydro"
+
+admbase::metric_type = "Physical"
+
+#--- numerics
+
+boundary::radpower = 2
+
+#------------------------------------------------------------------------------
+# Output
+#------------------------------------------------------------------------------
+IO::out_dir = "data_bondi6"
+IO::out_fileinfo = "none"
+
+
+CarpetIOASCII::out1D_every = 64
+CarpetIOASCII::out1D_vars = "admbase::alp admbase::metric admbase::shift hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel hydrobase::w_lorentz"
+CarpetIOASCII::out1D_d=yes
+CarpetIOScalar::outScalar_vars = "admbase::alp hydrobase::rho hydrobase::eps hydrobase::press hydrobase::vel grhydro::dens grhydro::tau grhydro::scon hydrobase::w_lorentz"
+CarpetIOScalar::outScalar_every = 10
+CarpetIOScalar::outScalar_reductions = "minimum maximum"
+
+#==============================================================================
+NaNChecker::check_every = 16
+NaNChecker::check_vars = "admbase::metric admbase::curv"
+NaNChecker::action_if_found = "abort"
+NaNChecker::check_after=10
+
+CarpetIOHDF5::checkpoint = "yes"
+CarpetIOHDF5::out_every = 32
+CarpetIOHDF5::out_vars = "hydrobase::rho hydrobase::press hydrobase::eps hydrobase::vel hydrobase::w_lorentz admbase::metric admbase::alp admbase::shift"
+
+IO::checkpoint_ID = "no"
+IO::checkpoint_every = 1024
+IO::checkpoint_keep=2
+IO::checkpoint_on_terminate = "yes"
+
+#IO::recover = "auto"
diff --git a/par/cylexp.par b/par/cylexp.par
new file mode 100644
index 0000000..fd98ade
--- /dev/null
+++ b/par/cylexp.par
@@ -0,0 +1,101 @@
+###
+ActiveThorns = "time MoL cartgrid3d carpetioascii ioutil Fortran boundary hydrobase grhydro grhydro_initdata nanchecker eos_omni CoordBase LoopControl CarpetLib Carpet CarpetIOHDF5 CarpetReduce spacemask ADMCoupling ADMMacros ADMBASE STATICCONFORMAL TMUNUBASE SymBase localreduce CarpetIOBasic initbase GRHydro_InitData NaNChecker"
+
+NaNChecker::check_every = 1
+NaNChecker::check_vars = "ADMBase::curv ADMBase::metric ADMBase::lapse ADMBase::shift HydroBase::rho HydroBase::eps HydroBase::press HydroBase::vel HydroBase::w_lorentz HydroBase::Bvec"
+NaNChecker::action_if_found = "terminate"
+#NaNChecker::action_if_found = "abort"
+#NaNChecker::action_if_found = "just warn" #"terminate", "just warn", "abort"
+#NaNChecker::check_after=0
+
+#This is a hack. ghost_size should be the same as grhydro::grhydro_stencil.
+
+driver::ghost_size=3
+grhydro::grhydro_stencil=3
+
+time::dtfac = 0.01
+#time::dtfac = 0.1
+#time::dtfac = 0.25
+#time::dtfac = 0.8
+
+methodoflines::ODE_Method = "rk2"
+methodoflines::MoL_Intermediate_Steps=2
+
+ADMBase::initial_shift = "zero"
+#admbase::initial_data="prim2con2prim_test"
+#GRHydro_InitData::Bx_init=1.0 # Strong field
+GRHydro_InitData::Bx_init=0.1 # Intermediate strength
+#GRHydro_InitData::Bx_init=0.01 # Weak strength
+#GRHydro_InitData::By_init=0.12
+#GRHydro_InitData::Bz_init=0.14
+HydroBase::initial_hydro="cylexp"
+GRHydro_InitData::shocktube_type="xshock"
+#GRHydro_InitData::shock_case="Balsara1"
+
+HydroBase::timelevels=2
+HydroBase::evolution_method="grhydro"
+HydroBase::Bvec_evolution_method="grhydro"
+
+SpaceMask::use_mask="yes"
+EOS_Omni::gl_gamma=1.333333333333333333333
+grhydro::track_divB="yes"
+grhydro::clean_divergence="yes"
+#grhydro::clean_divergence="no"
+grhydro::psidcspeed="light speed"
+grhydro::kap_dc=1.0
+#grhydro::ch_dc=1.0
+#grhydro::cp_dc=12.0
+grhydro::recon_method="tvd"
+#grhydro::recon_method="ppm"
+grhydro::method_type="RSA FV"
+grhydro::recon_vars="primitive"
+grhydro::riemann_solver="HLLE"
+grhydro::tvd_limiter="vanleerMC"
+grhydro::bound="flat"
+grhydro::grhydro_eos_type = "General"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::Grhydro_MaxNumConstrainedVars=13
+grhydro::GRHydro_MaxNumEvolvedVars=10
+
+grid::type = "BySpacing"
+grid::domain = "full"
+grid::dxyz = 0.06
+#grid::dxyz = 0.03
+
+#driver::global_nx = 400
+#driver::global_ny = 400
+driver::global_nx = 200
+driver::global_ny = 200
+driver::global_nz = 10
+
+Cactus::terminate="time"
+Cactus::cctk_final_time = 4.
+#cactus::cctk_itlast = 40
+#cactus::cctk_itlast = 200
+#cactus::cctk_itlast = 2
+
+IO::out_dir = $parfile
+CarpetIOBasic::outInfo_vars="hydrobase::rho"
+CarpetIOBasic::outInfo_every=1
+
+#CarpetIOASCII::out1D_criterion = "time"
+#CarpetIOASCII::out1D_dt = 0.01
+#CarpetIOASCII::out1D_d=no
+#CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec"
+
+#CarpetIOHDF5::out_every = 1
+#CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::divB grhydro::tau grhydro::scon HydroBase::Bvec"
+##CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::psidc grhydro::dens grhydro::divB grhydro::tau grhydro::scon HydroBase::Bvec"
+##CarpetIOHDF5::out_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::tau grhydro::scon "
+
+#CarpetIOHDF5::out2D_every = 1
+CarpetIOHDF5::out2D_every = 10
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+#CarpetIOHDF5::out2D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::divB grhydro::tau grhydro::scon HydroBase::Bvec"
+CarpetIOHDF5::out2D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::psidc grhydro::dens grhydro::divB grhydro::tau grhydro::scon HydroBase::Bvec"
+#CarpetIOHDF5::out2D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel HydroBase::w_lorentz grhydro::dens grhydro::tau grhydro::scon "
+
+
diff --git a/par/rotor.par b/par/rotor.par
new file mode 100644
index 0000000..476bc08
--- /dev/null
+++ b/par/rotor.par
@@ -0,0 +1,82 @@
+##
+ActiveThorns = "time MoL cartgrid3d carpetioascii ioutil Fortran boundary hydrobase grhydro grhydro_initdata nanchecker eos_omni CoordBase LoopControl CarpetLib Carpet CarpetReduce spacemask ADMCoupling ADMMacros ADMBASE STATICCONFORMAL TMUNUBASE SymBase localreduce CarpetIOBasic initbase "
+ActiveThorns = "CarpetIOHDF5"
+#This is a hack. ghost_size should be the same as grhydro::grhydro_stencil.
+
+driver::ghost_size=3
+grhydro::grhydro_stencil=3
+
+time::dtfac = 0.25
+
+methodoflines::ODE_Method = "rk2"
+methodoflines::MoL_Intermediate_Steps=2
+
+ADMBase::initial_shift = "zero"
+
+HydroBase::initial_hydro="rotor"
+
+HydroBase::timelevels=2
+HydroBase::evolution_method="grhydro"
+HydroBase::Bvec_evolution_method="grhydro"
+
+SpaceMask::use_mask="yes"
+EOS_Omni::gl_gamma=2.0
+grhydro::recon_method="tvd"
+grhydro::method_type="RSA FV"
+grhydro::recon_vars="primitive"
+grhydro::riemann_solver="HLLE"
+grhydro::tvd_limiter="vanleerMC"
+grhydro::bound="flat"
+grhydro::grhydro_eos_type = "General"
+grhydro::grhydro_eos_table="Ideal_Fluid"
+grhydro::Grhydro_MaxNumConstrainedVars=13
+grhydro::GRHydro_MaxNumEvolvedVars=10
+
+grhydro::clean_divergence = "yes"
+grhydro::kap_dc = 1.0
+grhydro::track_divB = "yes"
+
+grid::type = "BySpacing"
+grid::domain = "full"
+grid::dxyz = 0.004
+
+driver::global_nx = 250
+driver::global_ny = 250
+driver::global_nz = 10
+
+Cactus::terminate = "time"
+Cactus::cctk_final_time = 0.4
+#Cactus::terminate = "iteration"
+#cactus::cctk_itlast = 2
+
+IO::out_dir = $parfile
+CarpetIOBasic::outInfo_vars="hydrobase::rho Hydrobase::bvec GRHydro::bcons"
+CarpetIOBasic::outInfo_every=1
+CarpetIOASCII::out1D_every = 20
+CarpetIOASCII::out1D_vars = "HydroBase::rho HydroBase::press HydroBase::eps HydroBase::vel grhydro::dens grhydro::tau grhydro::scon HydroBase::Bvec grhydro::Bcons"
+
+CarpetIOHDF5::one_file_per_group = "yes"
+CarpetIOHDF5::open_one_input_file_at_a_time = "yes"
+CarpetIOHDF5::out2D_every = 1
+CarpetIOHDF5::out2D_xy = "yes"
+CarpetIOHDF5::out2D_xz = "no"
+CarpetIOHDF5::out2D_yz = "no"
+CarpetIOHDF5::out2D_xyplane_z = 0.0
+CarpetIOHDF5::out2D_vars = "
+# CarpetReduce::weight
+# GRHydro::GRHydro_tracers
+# Grid::coordinates
+ GRHydro::Bcons
+ GrHydro::dens
+ GrHydro::divB
+ GRHydro::scon
+ GRHydro::tau
+ HydroBase::Bvec
+ HydroBase::eps
+ HydroBase::press
+ HydroBase::rho
+ HydroBase::vel
+ HydroBase::w_lorentz
+"
+
+
diff --git a/param.ccl b/param.ccl
index 8d4da47..09c6d3a 100644
--- a/param.ccl
+++ b/param.ccl
@@ -12,8 +12,15 @@ EXTENDS KEYWORD initial_hydro ""
"only_atmo" :: "Set only a low atmosphere"
"read_conformal":: "After reading in initial alp, rho and gxx from h5 files, sets the other quantities"
"simple_wave" :: "Set initial data from Anile Miller Motta, Phys.Fluids. 26, 1450 (1983)"
- "Monopole" :: "Monopole at the center"
+ "monopole" :: "Monopole at the center"
"cylexp" :: "Cylindrical Explosion"
+ "rotor" :: "Magnetic Rotor test"
+ "advectedloop":: "Magnetic advected loop test"
+ "alfvenwave" :: "Circularly polarized Alfven wave"
+ "hydro_bondi_solution" :: "Spherical single black hole Bondi solution"
+ "hydro_bondi_solution_iso" :: "Spherical single black hole Bondi solution - TEST ISO CASE!!!!!!"
+ "magnetized_bondi_solution" :: "Magnetized Spherical single black hole Bondi solution"
+ "magnetized_bondi_solution_iso" :: "Magnetized Spherical single black hole Bondi solution - TEST ISO CASE!!!!!!"
}
shares:ADMBase
@@ -30,6 +37,12 @@ EXTENDS KEYWORD initial_data ""
private:
+KEYWORD initial_Bvec "Initial magnetic field."
+{
+ "none" :: "No initial magnetic field is set."
+ "poloidalmagfield" :: "Poloidal Magnetic Field"
+} "none"
+
KEYWORD shocktube_type "Diagonal or parallel shock?"
{
"diagshock" :: "Diagonal across all axes"
@@ -124,6 +137,143 @@ REAL Bz_init "Initial B-field in the z-dir"
*:* :: "Anything"
} 0.0
+KEYWORD monopole_type "Which kind of monopole?"
+{
+ "Point" :: "Single point with Bx /= 0"
+ "Gauss" :: "Gaussian w/radius R_Gauss"
+ "1dalt" :: "1-d alternating"
+ "2dalt" :: "2-d alternating"
+} "Point"
+
+CCTK_REAL R_Gauss "Radius for a Gaussian monopole"
+{
+ 0:* :: "Any positive number"
+} 1.0
+
+# For cylindrical explosion test:
+CCTK_REAL cyl_r_inner "Inner Radius"
+{
+ (0:* :: "Any positive number"
+} 0.8
+
+CCTK_REAL cyl_r_outer "Inner Radius"
+{
+ (0:* :: "Any positive number"
+} 1.0
+
+# For magnetic advected loop test:
+
+KEYWORD advectedloop_type "2-dimensional or 3-dimensional?"
+{
+ "2D" :: "2-dimensional (B^z=0)"
+ "3D" :: "3-dimensional (B^3=0, where B^3 || oblique cylinder axis."
+} "2D"
+
+KEYWORD advectedloop_case "V^z=0 or not?"
+{
+ "V^z=0" :: "Useful to evaluate divB deviations"
+ "V^z/=0" :: "Useful to evaluate con2prim robustness in keeping V^z const."
+} "V^z=0"
+
+KEYWORD advectedloop_delA "How to calculate B^i field from the potential A^b"
+{
+ "Exact" :: "Analytic, exact closed formula applied"
+ "Numeric" :: "Finite difference approximation of the derivatives applied"
+} "Exact"
+
+##################################################################################
+# BONDI PARAMETERS: (black hole mass specified by parameters from the "Exact" thorn)
+##################################################################################
+# Default value is that used in the HARM test
+CCTK_REAL mdot_sonicpt_bondi "Accretion rate at sonic point in hydro units"
+{
+ (0:* :: "positive"
+} 12.566370614359172954
+
+CCTK_REAL r_sonicpt_bondi "Radial distance of the sonic point from the black hole in units of mass_bh_bondi"
+{
+ (0:* :: "positive"
+} 8.0
+
+keyword bondi_coordinates "Which coordinate system to use"
+{
+ "Boyer-Lindquist" :: "Schwarzschild or Boyer-Lindquist (Cartesian) Coordinates"
+ "Kerr-Schild" :: "Kerr-Schild (Cartesian) Coordinates"
+ "Isotropic" :: "Isotropic (Cartesian) Coordinates"
+} "Isotropic"
+
+
+CCTK_INT num_bondi_sols "Number of central masses about which to calculate Bondi solutions"
+{
+ 1:100 :: "positive"
+} 1
+
+CCTK_REAL bh_bondi_pos_x [100] "X-coordinate of black hole in Bondi solution"
+{
+ *:* :: "anything"
+} 0.0
+
+CCTK_REAL bh_bondi_pos_y [100] "Y-coordinate of black hole in Bondi solution"
+{
+ *:* :: "anything"
+} 0.0
+
+CCTK_REAL bh_bondi_pos_z [100] "Z-coordinate of black hole in Bondi solution"
+{
+ *:* :: "anything"
+} 0.0
+
+CCTK_REAL bondi_central_mass [100] "Mass of central object to find Bondi solution about "
+{
+ (0:* :: "positive"
+} 1.0
+
+CCTK_REAL bondi_central_spin [100] "Dimensionless spin of central object within Bondi solution "
+{
+ (-1.:1.) :: "dimensionless spin so any real number between -1 and 1"
+} 0.0
+
+CCTK_REAL bondi_rmin [100] "Smallest radius in units of central mass at which the solution is found"
+{
+ (0:* :: "dimensionless inner radius for Bondi solution"
+} 1.e-15
+
+CCTK_REAL bondi_rmax [100] "Largest radius in units of central mass at which the solution is found"
+{
+ (0:* :: "dimensionless outer radius for Bondi solution"
+} 400.
+
+CCTK_REAL n_bondi_pts [100] "Number of points to use in determining global Bondi solution"
+{
+ (1:* :: "number of points in global Bondi solution"
+} 2000
+
+CCTK_REAL bondi_bmag "B_0 parameter for magnetized Bondi"
+{
+ 0:* :: "Anything positive"
+} 0.01
+
+# For Poloidal Magnetic field test:
+
+CCTK_REAL poloidal_A_b "Vector potential strength"
+{
+ *:* :: "Anything."
+} 0.1
+
+CCTK_INT poloidal_n_p "Vector potential strength"
+{
+ (0:* :: "Any positive integer."
+} 3
+
+CCTK_REAL poloidal_P_cut "Pressure used to confine the B field inside a star"
+{
+ (0:* :: "Anything positive."
+} 1.0e-8
+
+CCTK_REAL poloidal_rho_max "Maximum initial density"
+{
+ (0:* :: "Anything positive."
+} 1.0e-3
shares:GRHydro
@@ -141,3 +291,6 @@ USES REAL initial_rho_rel_min
USES REAL initial_atmosphere_factor
USES int GRHydro_stencil
USES BOOLEAN clean_divergence
+
+shares:EOS_Omni
+USES REAL gl_gamma
diff --git a/schedule.ccl b/schedule.ccl
index 7040982..2e32506 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -5,11 +5,32 @@ schedule GRHydro_InitData_CheckParameters AT CCTK_PARAMCHECK
LANG: C
} "Check parameters"
-if (CCTK_Equals(initial_hydro,"Monopole")) {
+if (CCTK_Equals(initial_hydro,"monopole")) {
schedule GRHydro_MonopoleM in HydroBase_Initial
{
LANG: Fortran
- } "Monopole initial data - MHD version"
+ } "Monopole initial data"
+}
+
+if (CCTK_Equals(initial_hydro,"rotor")) {
+ schedule GRHydro_RotorM in HydroBase_Initial
+ {
+ LANG: Fortran
+ } "MHD rotor initial data"
+}
+
+if (CCTK_Equals(initial_hydro,"advectedloop")) {
+ schedule GRHydro_AdvectedLoopM in HydroBase_Initial
+ {
+ LANG: Fortran
+ } "MHD advected loop initial data"
+}
+
+if (CCTK_Equals(initial_hydro,"alfvenwave")) {
+ schedule GRHydro_AlfvenWaveM in HydroBase_Initial
+ {
+ LANG: Fortran
+ } "Circularly polarized Alfven wave initial data"
}
if (CCTK_Equals(initial_hydro,"shocktube")) {
@@ -163,3 +184,44 @@ if (CCTK_Equals(initial_hydro,"simple_wave")) {
}
+
+if (CCTK_EQUALS(initial_hydro, "hydro_bondi_solution_iso"))
+{
+ SCHEDULE GRHydro_Bondi_Iso IN HydroBase_Initial AFTER HydroBase_ExcisionMaskSetup
+ {
+ LANGUAGE: Fortran
+ } "setup GRHydro vars for the hydrodynamic Bondi solution"
+}
+
+if (CCTK_EQUALS(initial_hydro, "magnetized_bondi_solution_iso"))
+{
+ SCHEDULE GRHydro_BondiM_Iso IN HydroBase_Initial AFTER HydroBase_ExcisionMaskSetup
+ {
+ LANGUAGE: Fortran
+ } "setup GRHydro vars for the magnetized Bondi solution"
+}
+
+if (CCTK_EQUALS(initial_hydro, "hydro_bondi_solution"))
+{
+ SCHEDULE GRHydro_Bondi IN HydroBase_Initial AFTER HydroBase_ExcisionMaskSetup
+ {
+ LANGUAGE: C
+ } "setup GRHydro vars for the hydrodynamic Bondi solution"
+}
+
+if (CCTK_EQUALS(initial_hydro, "magnetized_bondi_solution"))
+{
+ SCHEDULE GRHydro_BondiM IN HydroBase_Initial AFTER HydroBase_ExcisionMaskSetup
+ {
+ LANGUAGE: C
+ } "setup GRHydro vars for the magnetized Bondi solution"
+}
+
+if (CCTK_EQUALS(initial_Bvec, "poloidalmagfield"))
+{
+ SCHEDULE GRHydro_PoloidalMagFieldM IN HydroBase_Initial AFTER TOV_Initial_Data
+ {
+ LANGUAGE: Fortran
+ } "Set up a poloidal magnetic field. It expects the other fluid variables already to be set, as for example in the TOV solution"
+}
+
diff --git a/src/CheckParam.c b/src/CheckParam.c
index 7182dab..5e35538 100644
--- a/src/CheckParam.c
+++ b/src/CheckParam.c
@@ -45,4 +45,24 @@ void GRHydro_InitData_CheckParameters(CCTK_ARGUMENTS)
{
CCTK_PARAMWARN("That test requires MHD! Set Bvec_evolution_method=GRHYDRO!");
}
+
+ /* Checks for Bondi solution initial data : */
+ if(CCTK_Equals(Bvec_evolution_method,"GRHydro") &&
+ CCTK_Equals(initial_hydro,"hydro_bondi_solution") )
+ {
+ CCTK_PARAMWARN("Please use set initial_hydro=magnetized_bondi_solution instead to initialize the magnetic field correctly!");
+ }
+
+ if(!CCTK_Equals(Bvec_evolution_method,"GRHydro") &&
+ CCTK_Equals(initial_hydro,"magnetized_bondi_solution") )
+ {
+ CCTK_PARAMWARN("Please use set initial_hydro=hydro_bondi_solution instead to NOT initialize the magnetic field!");
+ }
+
+ if( CCTK_Equals(initial_hydro,"magnetized_bondi_solution") || CCTK_Equals(initial_hydro,"hydro_bondi_solution") ) {
+ if( num_bondi_sols > 1 ) {
+ CCTK_PARAMWARN("Currently only one Bondi solution is supported, please change [num_bondi_sols] ");
+ }
+ }
+
}
diff --git a/src/GRHydro_AdvectedLoopM.F90 b/src/GRHydro_AdvectedLoopM.F90
new file mode 100644
index 0000000..81a3ede
--- /dev/null
+++ b/src/GRHydro_AdvectedLoopM.F90
@@ -0,0 +1,262 @@
+ /*@@
+ @file GRHydro_AdvectedLoopM.F90
+ @date Aug 15, 2011
+ @author Scott Noble, Joshua Faber, Bruno Mundim
+ @desc
+ Advected loop test as implemented by Beckwith and Stone Astrophys.J.Suppl.
+ 193 (2011) 6, arXiv:1101.3573.
+
+
+ Other relevant references: Devore JCP 92, 142 (1991),
+ Toth and Odstrcil JCP 128,82 (1996),
+ Gardiner and Stone JCP 227, 4123 (2008);
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+
+ /*@@
+ @routine GRHydro_AdvectedLoopM
+ @date Aug 11, 2011
+ @author Scott Noble, Joshua Faber, Bruno Mundim
+ @desc
+ Initial data for advected loop test
+ @enddesc
+ @calls
+ @calledby
+ @history
+ Using GRHydro_ShockTubeM.F90 as a template.
+ @endhistory
+
+@@*/
+
+subroutine GRHydro_AdvectedLoopM(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz
+ CCTK_REAL :: det,radius,vxval,vyval,vzval,gam
+ CCTK_REAL :: radius_iph, radius_imh
+ CCTK_REAL :: radius_jph, radius_jmh
+ CCTK_REAL :: radius_kph, radius_kmh
+ CCTK_REAL :: rhoval,pressval
+ CCTK_REAL :: r_loop,A_loop,pi
+ CCTK_REAL :: dx,dy,dz
+ CCTK_REAL :: range_x,range_y,range_z,range_d
+ CCTK_REAL :: cos_theta, sin_theta, tan_theta
+ CCTK_REAL :: Bvecx_d, Bvecy_d, Bvecz_d
+ CCTK_REAL :: x_d, y_d, z_d
+ CCTK_REAL :: dx_d, dy_d, dz_d, dx_x, dz_x
+
+!!$Adiabatic index for test:
+ gam = (5.0d0/3.0d0)
+
+!!$radius of the loop:
+ r_loop = 0.3d0
+
+!!$ stregth of the A-field
+ A_loop=1.0d-3
+
+!!$pressure and density:
+ rhoval = 1.0d0
+ pressval = 3.0d0
+
+!!$ Vx, Vy and Vz values:
+ if (CCTK_EQUALS(advectedloop_case,"V^z/=0")) then
+ vxval=0.2d0/sqrt(6.0d0)
+ vyval=0.5d0*vxval
+ vzval=vyval
+ else if (CCTK_EQUALS(advectedloop_case,"V^z=0")) then
+ vxval=0.2d0/sqrt(6.0d0)
+ vyval=0.5d0*vxval
+ vzval=0.0d0
+ else
+ call CCTK_WARN(0,"V^z component case not recognized!")
+ end if
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ dx = CCTK_DELTA_SPACE(1)
+ dy = CCTK_DELTA_SPACE(2)
+ dz = CCTK_DELTA_SPACE(3)
+
+!!$ Note that the 3D test wasn't deviced to be used with AMR!
+ range_x = (cctk_gsh(1)-1)*dx
+ range_y = (cctk_gsh(2)-1)*dy
+ range_z = (cctk_gsh(3)-1)*dz
+
+ range_d = sqrt(range_z**2+range_x**2)
+
+ cos_theta = range_z/range_d
+ sin_theta = range_x/range_d
+ tan_theta = sin_theta/cos_theta
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ rho(i,j,k)=rhoval
+ press(i,j,k)=pressval
+ eps(i,j,k)=press(i,j,k)/(gam-1.0d0)/rho(i,j,k)
+
+ if (CCTK_EQUALS(advectedloop_type,"2D")) then
+ velx(i,j,k)=vxval
+ vely(i,j,k)=vyval
+ velz(i,j,k)=vzval
+ Bvecz(i,j,k)=0.0d0
+
+ radius = sqrt(x(i,j,k)**2+y(i,j,k)**2)
+
+ if (CCTK_EQUALS(advectedloop_delA,"Exact")) then
+
+ if(radius.le.r_loop) then
+ Bvecx(i,j,k)=-1.0d0*A_loop*y(i,j,k)/radius
+ Bvecy(i,j,k)=A_loop*x(i,j,k)/radius
+ else
+ Bvecx(i,j,k)=0.0d0
+ Bvecy(i,j,k)=0.0d0
+ endif
+
+ else if (CCTK_EQUALS(advectedloop_delA,"Numeric")) then
+
+ radius_iph = max(sqrt((x(i,j,k)+0.5d0*dx)**2+y(i,j,k)**2)-r_loop,0.d0)
+ radius_imh = max(sqrt((x(i,j,k)-0.5d0*dx)**2+y(i,j,k)**2)-r_loop,0.d0)
+ radius_jph = max(sqrt(x(i,j,k)**2+(y(i,j,k)+0.5d0*dy)**2)-r_loop,0.d0)
+ radius_jmh = max(sqrt(x(i,j,k)**2+(y(i,j,k)-0.5d0*dy)**2)-r_loop,0.d0)
+
+!! if(radius.le.r_loop) then
+ Bvecx(i,j,k)=-1.0d0*A_loop*(radius_jph-radius_jmh)/dy
+ Bvecy(i,j,k)=A_loop*(radius_iph-radius_imh)/dx
+!! else
+!! Bvecx(i,j,k)=0.0d0
+!! Bvecy(i,j,k)=0.0d0
+!! endif
+
+ else
+ call CCTK_WARN(0,"A^b differentiation not recognized!")
+ end if
+
+ else if (CCTK_EQUALS(advectedloop_type,"3D")) then
+
+ velx(i,j,k)=cos_theta*vxval-sin_theta*vzval
+ vely(i,j,k)=vyval
+ velz(i,j,k)=cos_theta*vzval+sin_theta*vxval
+
+ Bvecz_d=0.0d0
+
+ x_d = cos_theta*x(i,j,k)+sin_theta*z(i,j,k)
+ y_d = y(i,j,k)
+ z_d = cos_theta*z(i,j,k)-sin_theta*x(i,j,k)
+
+ radius = sqrt(x_d**2+y_d**2)
+
+ if (CCTK_EQUALS(advectedloop_delA,"Exact")) then
+
+ if(radius.le.r_loop) then
+ Bvecx_d=-1.0d0*A_loop*y_d/radius
+ Bvecy_d=A_loop*x_d/radius
+ else
+ Bvecx_d=0.0d0
+ Bvecy_d=0.0d0
+ endif
+
+ Bvecx(i,j,k)=cos_theta*Bvecx_d-sin_theta*Bvecz_d
+ Bvecy(i,j,k)=Bvecy_d
+ Bvecz(i,j,k)=cos_theta*Bvecz_d+sin_theta*Bvecx_d
+
+ else if (CCTK_EQUALS(advectedloop_delA,"Numeric")) then
+
+!! dx_d = cos_theta*dx+sin_theta*dz
+!! dy_d = dy
+!! dz_d = cos_theta*dz-sin_theta*dx
+
+!! dx_d is the change in the rotated coords induced by a step in a direction over the Cartesian grid
+ dx_x = cos_theta*dx
+ dz_x = sin_theta*dz
+
+!! These are used for exact differencing
+ radius_iph = max(sqrt((x_d+0.5d0*dx_x)**2+y_d**2)-r_loop,0.d0)
+ radius_imh = max(sqrt((x_d-0.5d0*dx_x)**2+y_d**2)-r_loop,0.d0)
+ radius_jph = max(sqrt(x_d**2+(y_d+0.5d0*dy)**2)-r_loop,0.d0)
+ radius_jmh = max(sqrt(x_d**2+(y_d-0.5d0*dy)**2)-r_loop,0.d0)
+ radius_kph = max(sqrt((x_d+0.5d0*dz_x)**2+y_d**2)-r_loop,0.d0)
+ radius_kmh = max(sqrt((x_d-0.5d0*dz_x)**2+y_d**2)-r_loop,0.d0)
+
+!! see notes
+!! if(radius.le.r_loop) then
+ Bvecx(i,j,k)=-1.0d0*A_loop*cos_theta*(radius_jph-radius_jmh)/dy
+ Bvecy(i,j,k)=A_loop*(sin_theta*(radius_kph-radius_kmh)/dz + &
+ cos_theta*(radius_iph-radius_imh)/dx)
+ Bvecz(i,j,k)=-1.0d0*A_loop*sin_theta*(radius_jph-radius_jmh)/dy
+!! else
+!! Bvecx(i,j,k)=0.0d0
+!! Bvecy(i,j,k)=0.0d0
+!! Bvecz(i,j,k)=0.0d0
+!! endif
+
+ else
+ call CCTK_WARN(0,"A^b differentiation not recognized!")
+ end if
+
+ else
+ call CCTK_WARN(0,"Advected loop type not recognized!")
+ end if
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ if (CCTK_EQUALS(GRHydro_eos_type,"Polytype")) then
+ call Prim2ConPolyM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ else
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ end if
+
+ enddo
+ enddo
+ enddo
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+ return
+
+end subroutine GRHydro_AdvectedLoopM
+
+
diff --git a/src/GRHydro_AlfvenWaveM.F90 b/src/GRHydro_AlfvenWaveM.F90
new file mode 100644
index 0000000..8ed68c2
--- /dev/null
+++ b/src/GRHydro_AlfvenWaveM.F90
@@ -0,0 +1,178 @@
+ /*@@
+ @file GRHydro_AlfvenWaveM.F90
+ @date Oct 10, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Circularly Polarized Alfven Wave test as implemented by
+ Beckwith and Stone Astrophys.J.Suppl. 193 (2011) 6, arXiv:1101.3573,
+ and Del Zanna et. al. A&A 473, 11 (2007), arXiv:0704.3206;
+
+ Other relevant references:
+ Stone et. al. Astrophys.J.Suppl. 178 (2008) 137, arXiv:0804.0402;
+ Gardiner and Stone JCP 227, 4123 (2008), arXiv:0712.2634;
+ Toth JCP 161, 605 (2000);
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+
+ /*@@
+ @routine GRHydro_AlfvenWaveM
+ @date Oct 10, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Initial data for Circularly Polarized Alfven Wave test
+ @enddesc
+ @calls
+ @calledby
+ @history
+ Using GRHydro_AdvectedLoopM.F90 as a template.
+ @endhistory
+
+@@*/
+
+subroutine GRHydro_AlfvenWaveM(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz
+ CCTK_REAL :: pi,gam,AA,wnbr
+ CCTK_REAL :: vxval,vyval,vzval, valf
+ CCTK_REAL :: rhoval,pressval,epsval,hval
+ CCTK_REAL :: Bxval, Byval, Bzval
+ CCTK_REAL :: dx,dy,dz
+ CCTK_REAL :: range_x,range_y,range_z,range_d
+ CCTK_REAL :: cos_theta, sin_theta
+ CCTK_REAL :: Bvecx_d, Bvecz_d
+ CCTK_REAL :: velx_d, velz_d
+ CCTK_REAL :: det
+ CCTK_REAL :: t1,t2,t3
+
+ pi=4.0d0*atan(1.0d0)
+
+!!$Adiabatic index for this test:
+ gam = (5.0d0/3.0d0)
+
+!!$pressure, density, B^x, specific internal energy and enthalpy:
+ rhoval = 1.0d0
+ pressval = 1.0d0
+ Bxval = 1.0d0
+ epsval = pressval/(gam-1.0d0)/rhoval
+ hval = 1.0d0 + epsval + pressval/rhoval
+
+!!$ Alfven Wave Amplitude:
+ AA=1.0d0
+
+!!$ Alfven wave speed:
+ t1 = rhoval*hval+Bxval**2*(1.0d0+AA**2)
+ t2 = 2.0d0*AA*Bxval**2/t1
+ t3 = 0.5d0*(1.0d0+sqrt(1.0d0-t2**2))
+ valf = sqrt(Bxval**2/t1/t3)
+
+!!$ Vx value:
+ vxval=0.0d0
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ dx = CCTK_DELTA_SPACE(1)
+ dy = CCTK_DELTA_SPACE(2)
+ dz = CCTK_DELTA_SPACE(3)
+
+!!$ Note that the 3D test wasn't deviced to be used with AMR!
+ range_x = (cctk_gsh(1)-1)*dx
+ range_y = (cctk_gsh(2)-1)*dy
+ range_z = (cctk_gsh(3)-1)*dz
+
+ range_d = sqrt(range_z**2+range_x**2)
+
+ cos_theta = range_z/range_d
+ sin_theta = range_x/range_d
+
+!!$ Alfven wave number
+ wnbr = 2.0d0*pi/range_x
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ rho(i,j,k)=rhoval
+ press(i,j,k)=pressval
+ eps(i,j,k)=epsval
+ velx(i,j,k)=vxval
+ vely(i,j,k)=-valf*AA*cos(wnbr*x(i,j,k))
+ velz(i,j,k)=-valf*AA*sin(wnbr*x(i,j,k))
+ Bvecx(i,j,k)=Bxval
+ Bvecy(i,j,k)=AA*Bxval*cos(wnbr*x(i,j,k))
+ Bvecz(i,j,k)=AA*Bxval*sin(wnbr*x(i,j,k))
+
+
+!!$ if (CCTK_EQUALS(advectedloop_type,"3D")) then
+!!$ Bvecx_d = cos_theta*Bvecx(i,j,k)+sin_theta*Bvecz(i,j,k)
+!!$ Bvecz_d = cos_theta*Bvecz(i,j,k)-sin_theta*Bvecx(i,j,k)
+!!$ velx_d = cos_theta*velx(i,j,k)+sin_theta*velz(i,j,k)
+!!$ velz_d = cos_theta*velz(i,j,k)-sin_theta*velx(i,j,k)
+!!$
+!!$ Bvecx(i,j,k) = Bvecx_d
+!!$ Bvecz(i,j,k) = Bvecz_d
+!!$ velx(i,j,k) = velx_d
+!!$ velz(i,j,k) = velz_d
+!!$ end if
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ if (CCTK_EQUALS(GRHydro_eos_type,"Polytype")) then
+ call Prim2ConPolyM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ else
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ end if
+
+ enddo
+ enddo
+ enddo
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+ return
+
+end subroutine GRHydro_AlfvenWaveM
+
+
diff --git a/src/GRHydro_Bondi.c b/src/GRHydro_Bondi.c
new file mode 100644
index 0000000..eb98ee4
--- /dev/null
+++ b/src/GRHydro_Bondi.c
@@ -0,0 +1,1180 @@
+ /*@@
+ @file GRHydro_Bondi.c
+ @date Wed Jan 13 13:00:49 EST 2010
+ @author Scott C. Noble
+ @desc
+ Hydro initial data for the relativistic Bondi solution about
+ a single Schwarzschild black hole.
+ @enddesc
+ @@*/
+
+/***********************************************************************************/
+/***********************************************************************************/
+/***********************************************************************************
+ Calculates the Bondi solution, or the spherically symmetric hydrostationary
+ solution to a fluid on a static fixed background spacetime. We assume that one can
+ calculate a radius "r" from the grid and that with respect to this radial coordinate,
+ the solution satisfies
+
+ d (\rho u^r) / dr = 0
+
+ Assumes that the equation of state is P = K \rho^\Gamma and K is set by
+ the location of the sonic point.
+
+
+ -- Implicitly assumes that there is no spin in the geometry as there is no Bondi
+ solution for spinning black holes. If a spin is specified, a spherically symmetric
+ is still assumed but the 4-velocity is set consistently with the spinning spacetime.
+
+***********************************************************************************/
+/***********************************************************************************/
+/***********************************************************************************/
+
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+# define M_PI 3.14159265358979323846 /* pi */
+
+// set to 1 to tracing output
+#define LTRACE 1
+
+
+/* Mnemonics: */
+
+#define NDIM (4) /* Number of spacetime dimensions */
+
+/* mnemonics for dimensional indices */
+#define TT (0)
+#define RR (1)
+#define TH (2)
+#define PH (3)
+
+/* mnemonics for dimensional indices */
+#define XX (1)
+#define YY (2)
+#define ZZ (3)
+
+/* mnemonics for coordinate system choice */
+#define COORD_BOYERLINDQUIST (0)
+#define COORD_KERRSCHILD (1)
+#define COORD_ISOTROPIC (2)
+
+/* Macros: */
+#define DLOOP1 for(i=0 ;i<NDIM ;i++)
+#define DLOOP2 for(i=0 ;i<NDIM ;i++) for(j=0 ;j<NDIM ;j++)
+
+
+#if !defined(__INTEL_COMPILER)
+# define LOCAL_SINCOS
+# define sincos( theta_ , sth_ , cth_ ) { *(sth_) = sin((theta_)) ; *(cth_) = cos((theta_)) ; }
+#endif
+
+
+//Newton-Raphson parameters:
+#define NEWT_DIM_B (1 )
+#define MAX_NEWT_ITER_B (30 ) /* Max. # of Newton-Raphson iterations for find_root_2D(); */
+#define NEWT_TOL_B (1.0e-15) /* Min. of tolerance allowed for Newton-Raphson iterations */
+#define MIN_NEWT_TOL_B (1.0e-10) /* Max. of tolerance allowed for Newton-Raphson iterations */
+#define EXTRA_NEWT_ITER_B (2 )
+#define SMALL_BONDI (1.e-20)
+
+
+static CCTK_REAL Mdot, rs, vs_sq, vs, cs_sq, cs, rhos, hs, K, Qdot, gamma_eos, r_sol;
+static CCTK_REAL M, a, asq, Msq;
+static CCTK_REAL x_cen, y_cen, z_cen;
+static unsigned short int coord_type;
+
+
+/******************************************************************************
+ bl_to_ks_con():
+ ----------
+ -- transforms a contravariant vector in BL coordinates to KS coordinates;
+ ******************************************************************************/
+static void bl_to_ks_con(CCTK_REAL *x, CCTK_REAL blcon[], CCTK_REAL kscon[] )
+{
+ CCTK_REAL delta_m1, dtKS_drBL, dphiKS_drBL;
+
+ delta_m1 = 1./( x[RR] * ( x[RR] - 2*M ) + asq );
+ dtKS_drBL = 2*M*x[RR] * delta_m1;
+ dphiKS_drBL = a * delta_m1;
+
+ kscon[TT] = blcon[TT] + blcon[RR] * dtKS_drBL;
+ kscon[RR] = blcon[RR];
+ kscon[TH] = blcon[TH];
+ kscon[PH] = blcon[PH] + blcon[RR] * dphiKS_drBL;
+
+ return;
+}
+
+/******************************************************************************
+ dxc_dxs_ks_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for Kerr-Schild coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_ks_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL r, th, ph;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ r = x_spher[RR];
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth ; // dx/dr
+ dxc_dxs[XX][TH] = (r*cph - a*sph) * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth ; // dy/dr
+ dxc_dxs[YY][TH] = (r*sph + a*cph) * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ dxc_dxs_bl_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for Boyer-Lindquist coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_bl_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL r, th, ph, rterm, dr;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ r = x_spher[RR];
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ rterm = sqrt( r*r + asq );
+ dr = r / rterm;
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth * dr ; // dx/dr
+ dxc_dxs[XX][TH] = rterm * cph * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth * dr ; // dy/dr
+ dxc_dxs[YY][TH] = rterm * sph * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ dxc_dxs_iso_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for "Isotropic" coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_iso_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL th, ph,r_iso;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ /* BL spherical coordinates : */
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ r_iso = x_spher[TT];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth ; // dx/dr
+ dxc_dxs[XX][TH] = r_iso * cph * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth ; // dy/dr
+ dxc_dxs[YY][TH] = r_iso * sph * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r_iso*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ ks_cart_to_ks_spher_pos():
+ ----------
+ -- transforms the position in Cartesian KS coordinates to Spherical KS coordinates;
+ ******************************************************************************/
+static void ks_cart_to_ks_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ t3 = 0.5*(xx*xx + yy*yy + zz*zz - asq);
+ r = sqrt( t3 + sqrt( t3*t3 + asq*zz*zz ) );
+
+ x_spher[TT] = x_cart[TT];
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / r);
+ t3 = atan2( (yy*r - xx*a) , (xx*r + yy*a) );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/******************************************************************************
+ bl_cart_to_bl_spher_pos():
+ ----------
+ -- transforms the position in Cartesian BL coordinates to Spherical BL coordinates;
+ ******************************************************************************/
+static void bl_cart_to_bl_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ t3 = 0.5*(xx*xx + yy*yy + zz*zz - asq);
+ r = sqrt( t3 + sqrt( t3*t3 + asq*zz*zz ) );
+
+ x_spher[TT] = x_cart[TT];
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / r);
+ t3 = atan2( yy , xx );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/******************************************************************************
+ iso_cart_to_bl_spher_pos():
+ ----------
+ -- transforms the position in Cartesian "Isotropic" coordinates to Spherical BL coordinates;
+ -- r^2 = x^2 + y^2 + z^2 in these coordinates, so they are slightly distorted from flatspace
+ ******************************************************************************/
+static void iso_cart_to_bl_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,riso,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ riso = sqrt(xx*xx + yy*yy + zz*zz);
+ r = 0.25 * ( 2.*riso + M + a ) * ( 2.*riso + M - a ) / riso ;
+
+ x_spher[TT] = riso;
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / riso);
+ t3 = atan2( yy , xx );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/****************************************************************************
+ setutcon():
+ ------------
+ -- find the contravariant time-component of a time-like vector
+ pointing forward in time;
+****************************************************************************/
+static void setutcon(CCTK_REAL *vcon, CCTK_REAL gcov[][NDIM])
+{
+ int i,j;
+ CCTK_REAL d,b,c;
+
+ d=gcov[TT][TT];
+
+ b = gcov[TT][1]*vcon[1] + gcov[TT][2]*vcon[2] + gcov[TT][3]*vcon[3] ;
+
+ c = gcov[1][1] * vcon[1] * vcon[1]
+ + gcov[2][2] * vcon[2] * vcon[2]
+ + gcov[3][3] * vcon[3] * vcon[3]
+ + 2.*( gcov[1][2] * vcon[1] * vcon[2]
+ + gcov[1][3] * vcon[1] * vcon[3]
+ + gcov[2][3] * vcon[2] * vcon[3] );
+
+ c += 1. ; /* vector is timelike */
+
+ vcon[0]=(-b-sqrt(b*b-d*c))/(d); /* sign for pointing forward in time */
+
+ return;
+}
+
+/****************************************************************************
+ bl_gcov_func():
+ ---------------
+ -- Covariant Kerr metric in Boyer-Lindquist coordinates.
+****************************************************************************/
+static void bl_gcov_func( CCTK_REAL *x, CCTK_REAL gcov[][NDIM])
+{
+ int i,j,k ;
+ CCTK_REAL sth,cth,s2,r2,DD,mu ;
+ CCTK_REAL r,th;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { gcov[0][i] = 0. ; }
+
+ r = x[RR];
+ th = x[TH];
+ sincos( th, &sth , &cth );
+
+ s2 = sth*sth ;
+ r2 = r*r ;
+ DD = 1. - 2.*M/r + asq/r2 ;
+ mu = 1. + asq*cth*cth/r2 ;
+
+ gcov[TT][TT] = -(1. - 2.*M/(r*mu)) ;
+ gcov[TT][3] = -2.*M*a*s2/(r*mu) ;
+ gcov[3][TT] = gcov[TT][3] ;
+ gcov[1][1] = mu/DD ;
+ gcov[2][2] = r2*mu ;
+ gcov[3][3] = r2*s2*(1. + asq/r2 + 2.*M*asq*s2/(r2*r*mu)) ;
+
+ return;
+}
+
+
+/***************************************************************************
+
+ set_bondi_parameters():
+ ---------------------
+ -- finds the values of the hydro. quantities at the sonic point, which
+ serves as a reference point for the conservation equations given
+ in Shapiro and Teukolsky equations (G.21,G.22).
+
+ -- The sonic point values are then used in find_bondi_solution() to determine
+ the hydro. quantities at an arbitrary radius;
+
+ -- the "boundary conditions" that uniquely determine the Bondi solution
+ are the radius of the sonic point, "rs", and the mass accretion rate,
+ Mdot;
+
+ -- the Bondi solution here in is the isentropic, spherically symmetric,
+ perfect fluid solution to Einstein's equations. That is, we only
+ assume an r-dependence, there's a in-going radial velocity only,
+ and the EOS are : P = (G-1)*rho and P = K rho^G
+ where K = const. and G is the adiabatic constant "gam".
+
+***************************************************************************/
+static void set_bondi_parameters( CCTK_REAL M_in, CCTK_REAL Mdot_in, CCTK_REAL rs_in, CCTK_REAL gam )
+{
+
+ CCTK_REAL my_pi, checkp;
+ CCTK_REAL gtemp;
+
+ /* Set the solution-determining parameters: */
+ M = M_in;
+ Mdot = Mdot_in;
+ Msq = M*M;
+ rs = rs_in;
+ gamma_eos = gam;
+
+
+ /* Calculate the hydro. quantities: */
+ cs_sq = M / ( 2.*rs - 3.*M ) ;
+
+ if( cs_sq > (gam - 1.) ) {
+ cs_sq = gam - 1.;
+ rs = 0.5 * M * ( 3. + 1./cs_sq ) ;
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): bad value of rs, need to increase it !! \n");
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): Need to change rs !! \n");
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): rs[old] = %28.15e rs[new] = %28.16e \n\n",rs_in,rs);
+ }
+
+ cs = sqrt(cs_sq);
+ vs_sq = M / ( 2. * rs ) ;
+ vs = sqrt(vs_sq);
+ rhos = Mdot / ( 4. * M_PI * vs * rs * rs ) ;
+ gtemp = gam - 1.;
+ hs = 1. / ( 1. - cs_sq / (gam - 1.) );
+ K = hs * cs_sq * pow( rhos, (-gtemp) ) / gam ;
+ Qdot = hs * hs * ( 1. - 3. * vs_sq ) ;
+ gamma_eos = gam;
+
+#if( LTRACE )
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n#######################################################\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"Bondi Solution Parameters1: \n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"------------------------- \n\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"M = %28.20e Mdot = %28.20e rs = %28.20e \n",M,Mdot,rs);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"vs = %28.20e cs = %28.20e rhos = %28.20e \n",vs,cs,rhos);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"hs = %28.20e K = %28.20e Qdot = %28.20e \n",hs,K,Qdot);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"gam= %28.20e r_sol= %28.20e \n",gamma_eos, r_sol);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"rs = : %28.20e \n", rs) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"urs = : %28.20e \n", vs) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"rhos = : %28.20e \n", rhos) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"K = : %28.20e \n", K) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"#######################################################\n\n");
+#endif
+
+ return;
+
+}
+
+/**********************************************************************/
+/************************************************************
+
+ gnr_bondi():
+ -----------
+ -- should be just like the routine general_newton_raphson() in utoprim*.c
+ except the "physicality" condition is different;
+
+ -- performs Newton-Rapshon method on an arbitrary system
+ though tailored to calculate rho second Bondi Conservation eq.
+ by ensuring that rho > 0 (look near "METHOD specific:")
+
+ -- inspired in part by Num. Rec.'s routine newt();
+
+ Arguements:
+
+ -- x[] = set of independent variables to solve for;
+ -- n = number of independent variables and residuals;
+ -- funcd = name of function that calculates residuals, etc.;
+
+*****************************************************************/
+static int gnr_bondi( CCTK_REAL x[], int n,
+ void (*funcd) (CCTK_REAL [], CCTK_REAL [], CCTK_REAL [],
+ CCTK_REAL [][NEWT_DIM_B], CCTK_REAL *,
+ CCTK_REAL *, int) )
+{
+ CCTK_REAL f, df, dx[NEWT_DIM_B], x_old[NEWT_DIM_B], resid[NEWT_DIM_B],
+ jac[NEWT_DIM_B][NEWT_DIM_B];
+ CCTK_REAL errx, x_orig[NEWT_DIM_B];
+ int n_iter, id, jd, i_extra, doing_extra;
+
+ int keep_iterating, i_increase;
+
+
+ // Initialize various parameters and variables:
+ errx = 1. ;
+ df = f = 1.;
+ i_extra = doing_extra = 0;
+ for( id = 0; id < n ; id++) x_old[id] = x_orig[id] = x[id] ;
+
+ n_iter = 0;
+
+
+ /* Start the Newton-Raphson iterations : */
+ keep_iterating = 1;
+ while( keep_iterating ) {
+
+ (*funcd) (x, dx, resid, jac, &f, &df, n); /* returns with new dx, f, df */
+
+ /* Save old values before calculating the new: */
+ errx = 0.;
+ for( id = 0; id < n ; id++) {
+ x_old[id] = x[id] ;
+ }
+
+ /* don't use line search : */
+ for( id = 0; id < n ; id++) {
+ x[id] += dx[id] ;
+ }
+
+ /****************************************/
+ /* Calculate the convergence criterion */
+ /****************************************/
+
+ /* For the new criterion, always look at relative error in indep. variable: */
+ // METHOD specific:
+ errx = (x[0]==0.) ? fabs(dx[0]) : fabs(dx[0]/x[0]);
+
+
+ /****************************************/
+ /* Make sure that the new x[] is physical : */
+ /****************************************/
+ x[0] = (x[0] == 0.) ? (SMALL_BONDI) : fabs(x[0]);
+
+
+ /*****************************************************************************/
+ /* If we've reached the tolerance level, then just do a few extra iterations */
+ /* before stopping */
+ /*****************************************************************************/
+
+ if( (fabs(errx) <= NEWT_TOL_B) && (doing_extra == 0) && (EXTRA_NEWT_ITER_B > 0) ) {
+ doing_extra = 1;
+ }
+
+ if( doing_extra == 1 ) i_extra++ ;
+
+ if( ((fabs(errx) <= NEWT_TOL_B)&&(doing_extra == 0)) ||
+ (i_extra > EXTRA_NEWT_ITER_B) || (n_iter >= (MAX_NEWT_ITER_B-1)) ) {
+ keep_iterating = 0;
+ }
+
+ n_iter++;
+
+ } // END of while(keep_iterating)
+
+
+ /* Check for bad untrapped divergences : */
+ if( (finite(f)==0) || (finite(df)==0) ) {
+ return(2);
+ }
+
+
+ if( fabs(errx) > MIN_NEWT_TOL_B){
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"newt: errx = %28.20e \n", errx);
+ return(1);
+ }
+ if( (fabs(errx) <= MIN_NEWT_TOL_B) && (fabs(errx) > NEWT_TOL_B) ){
+ return(0);
+ }
+ if( fabs(errx) <= NEWT_TOL_B ){
+ return(0);
+ }
+
+ return(0);
+
+}
+
+/******************************************************************************/
+/******************************************************************************
+
+ bondi_resid():
+ --------------
+ -- routine to calculate the residual and jacobian used by
+ the Newton-Raphson routine general_newton_raphson(), which is
+ used to find X2 from theta;
+
+***********************************************************************************/
+static void bondi_resid(CCTK_REAL x[], CCTK_REAL dx[], CCTK_REAL resid[], CCTK_REAL jac[][NEWT_DIM_B],
+ CCTK_REAL *f, CCTK_REAL *df, int n )
+{
+ CCTK_REAL v, vp, h, hp, term;
+
+ hp = K * gamma_eos * pow( x[0], (gamma_eos - 2.) ); // dh/drho
+ h = 1. + hp * x[0] / ( gamma_eos - 1. );
+ v = Mdot / ( 4. * M_PI * r_sol * r_sol * x[0] );
+ vp = -v / x[0]; // dv/drho
+ term = 1. - 2.*M/r_sol + v*v;
+ resid[0] = -Qdot + h * h * term;
+ jac[0][0] = 2. * h *( hp*term + h*v*vp );
+ dx[0] = -resid[0] / jac[0][0];
+ *f = 0.5*resid[0]*resid[0];
+ *df = -2. * (*f);
+
+ return;
+
+}
+
+
+/***************************************************************************/
+/***************************************************************************
+
+ find_bondi_solution():
+ ---------------------
+
+ -- essentially just calls gnr_bondi() to find the solution for
+ the density at a given radius, given the parameters calculated from
+ set_bondi_parameters();
+
+ -- after the density is found, the density (rho), internal energy densit (u), magnitude
+ of the radial component of the 4-velocity (v) are returned to the calling
+ routine;
+
+ -- requires r = radius at which we want solution
+
+ -- note that v is a magnitude, so the user will have to set u^r = -v ;
+
+ -- if there is an error in finding the solution, it returns the error
+ status from the root-finding routine. See documentation of the
+ gnr_bondi() for further details;
+
+***************************************************************************/
+static int find_bondi_solution( CCTK_REAL r, CCTK_REAL *rho, CCTK_REAL *u, CCTK_REAL *v )
+{
+
+ int retval=0;
+ const int ntries = 10000;
+ int itry;
+
+ CCTK_REAL rhotmp, rho_guess;
+ CCTK_REAL dr,ur;
+
+
+ /************************************************************************/
+ /* Find the initial guess for the newton iterations: */
+ /* Take the sonic point values if we have no better guess (when rho<0) */
+ /************************************************************************/
+
+ if( *rho < 0. ) {
+ if( r > 0.9*rs && r < 1.1*rs ) {
+ *rho = rhos;
+ }
+ else {
+ // rhotmp = (sqrt(Qdot) - 1.) * (gamma_eos - 1.) / ( gamma_eos * K );
+ // rho_guess = pow( rhotmp , (1./(gamma_eos - 1.)) );
+ if(r < rs) { ur = pow(r,-0.5) ; }
+ else { ur = 0.5*pow(r,-1.5) ; }
+ rho_guess = Mdot / (4.*M_PI * r * r * ur);
+ *rho = rho_guess;
+ }
+ }
+
+ // set global variables needed by residual function:
+ r_sol = r ;
+
+
+ // Use Newton's method to find rho:
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+
+
+ // first try guess if failure
+ if( retval ) {
+ *rho = rho_guess;
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+ }
+
+ // If we were unsure about the guess and solver fails, then creep from known solution to desired point:
+ if( retval ) {
+
+ dr = (r - rs)/(1.*(ntries-1));
+
+ *rho = rhos; // start with sonic point value and near sonic point
+
+ // go gradually away from sonic point toward location where we want the solution:
+ r_sol = rs ;
+ for( itry = 1; itry < ntries; itry++ ) {
+ r_sol += dr;
+
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"find_bondi_solution: Incr. guess failed, decrease dfactor, retval = %d, r = %g, itry = %d \n", retval, r, itry);
+ return(10);
+ }
+ }
+
+ // No try where we want the solution:
+ r_sol = r ;
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid );
+
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"find_bondi_solution: Final Incr. guess failed, decrease dfactor??, retval = %d \n", retval);
+ return(11);
+ }
+
+ }
+
+ rhotmp = *rho;
+
+ // Calculate other quantities:
+ *u = K * pow( rhotmp, gamma_eos ) / (gamma_eos - 1.);
+
+ *v = Mdot / ( 4. * M_PI * r * r * rhotmp );
+
+ if( *u <= 0. ) { retval = -1; }
+
+ return( retval ) ;
+
+}
+
+/***********************************************************************************/
+/***********************************************************************************
+ calc_vel_bondi():
+ ---------
+ -- calculates the 4-velocity from the amplitude of the
+ radial component of the 4-velocity in Boyer-Lindquist coordinates.
+
+***********************************************************************************/
+static void calc_vel_bondi( CCTK_REAL vtmp, CCTK_REAL x[NDIM], CCTK_REAL x_spher[NDIM], CCTK_REAL ucon[NDIM] )
+{
+ int i,j;
+ CCTK_REAL ucon_bl[NDIM] = {0.};
+ CCTK_REAL ucon_ks[NDIM];
+ CCTK_REAL gcov[NDIM][NDIM];
+ CCTK_REAL r_iso;
+ CCTK_REAL dxc_dxs[NDIM][NDIM];
+
+ ucon_bl[RR] = -vtmp;
+
+ /* Find time component of 4-velocity: */
+ bl_gcov_func( x_spher, gcov );
+ setutcon( ucon_bl, gcov );
+
+
+ switch( coord_type ) {
+
+ case COORD_BOYERLINDQUIST :
+ dxc_dxs_bl_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_bl[j] ; }
+ break;
+
+
+ case COORD_KERRSCHILD :
+ bl_to_ks_con(x_spher,ucon_bl,ucon_ks);
+ dxc_dxs_ks_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_ks[j] ; }
+ break;
+
+
+ case COORD_ISOTROPIC :
+ r_iso = x_spher[TT];
+ ucon_bl[RR] /= 1. + 0.25 * (asq-Msq) / (r_iso*r_iso) ; /* BL to Isotropic coordinate transformation */
+ /* I believe we can use BL's cartesian transformation, while using BL's radius : */
+ dxc_dxs_iso_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_bl[j] ; }
+ break;
+
+ }
+
+ return;
+}
+
+/***********************************************************************************/
+/***********************************************************************************
+ GRHydro_Bondi():
+ ---------
+ -- driver routine for the Bondi solution;
+
+***********************************************************************************/
+void GRHydro_Bondi(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+ CCTK_REAL det;
+ CCTK_REAL rhotmp, utmp, vtmp, rspher, xpos[NDIM], x_spher[NDIM], ucon[NDIM];
+ int retval;
+ CCTK_REAL *r_bondi, *logr_bondi, *rho_bondi, *u_bondi, *v_bondi;
+ CCTK_INT *bad_bondi;
+ CCTK_REAL dlogr,logrmin;
+ CCTK_REAL rmin_bondi,rmax_bondi;
+ CCTK_INT GRHydro_reflevel=0;
+
+ CCTK_INT nbondi;
+ CCTK_INT ileft, iright, nans_exist;
+ CCTK_REAL sigma;
+
+
+ const int size = cctk_lsh[0] * cctk_lsh[1] * cctk_lsh[2];
+ int i, imin, j;
+
+# define velx(i_) vel[i_ + 0*size]
+# define vely(i_) vel[i_ + 1*size]
+# define velz(i_) vel[i_ + 2*size]
+# define sx(i_) scon[i_ + 0*size]
+# define sy(i_) scon[i_ + 1*size]
+# define sz(i_) scon[i_ + 2*size]
+
+ if( CCTK_EQUALS(bondi_coordinates,"Boyer-Lindquist") ) {
+ coord_type = COORD_BOYERLINDQUIST ;
+ }
+ if( CCTK_EQUALS(bondi_coordinates,"Kerr-Schild") ) {
+ coord_type = COORD_KERRSCHILD ;
+ }
+ if( CCTK_EQUALS(bondi_coordinates,"Isotropic") ) {
+ coord_type = COORD_ISOTROPIC ;
+ }
+
+ /* xyz location of the black hole : */
+ i = 0;
+ x_cen = bh_bondi_pos_x[i] ;
+ y_cen = bh_bondi_pos_y[i] ;
+ z_cen = bh_bondi_pos_z[i] ;
+
+ M = bondi_central_mass[i];
+ a = M*bondi_central_spin[i];
+ asq = a * a;
+ rmin_bondi = M * bondi_rmin[i];
+ rmax_bondi = M * bondi_rmax[i];
+
+ nbondi = n_bondi_pts[i];
+
+ set_bondi_parameters( M, mdot_sonicpt_bondi, r_sonicpt_bondi, gl_gamma);
+
+
+#if(LTRACE)
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n##################################################\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING," Geometry PARAMETERS \n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t M = %28.18e \n",M );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t a = %28.18e \n",a );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t x_cen = %28.18e \n",x_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t y_cen = %28.18e \n",y_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t z_cen = %28.18e \n",z_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t rmin_bondi = %28.18e \n",rmin_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t rmax_bondi = %28.18e \n",rmax_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t nbondi = %d \n",nbondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING," SOLUTION PARAMETERS \n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t bondi_coordinates = %s \n",bondi_coordinates );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t mdot_sonicpt_bondi = %28.18e \n",mdot_sonicpt_bondi);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t r_sonicpt_bondi = %28.18e \n",r_sonicpt_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t gl_gamma = %28.18e \n",gl_gamma );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n------------------------------------\n");
+#endif
+
+ if( r_sonicpt_bondi < rmin_bondi ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"sonic point lies below solution domain!!");
+ }
+
+ if( r_sonicpt_bondi > rmax_bondi ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"sonic point lies beyond solution domain!!");
+ }
+
+
+ /*********************************************************************************
+ ARRAY ALLOCATIONS :
+ *********************************************************************************/
+ /* global solution : */
+ if( (r_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc r_bondi \n");
+ return;
+ }
+ if( (logr_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc logr_bondi \n");
+ return;
+ }
+ if( (rho_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc rho_bondi \n");
+ return;
+ }
+ if( (u_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi); free(rho_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc u_bondi \n");
+ return;
+ }
+ if( (v_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi); free(rho_bondi); free(u_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc v_bondi \n");
+ return;
+ }
+ if( (bad_bondi = (CCTK_INT *) calloc(nbondi, sizeof(CCTK_INT))) == NULL ) {
+ free(r_bondi); free(logr_bondi); free(rho_bondi); free(u_bondi); free(v_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc bad_bondi \n");
+ return;
+ }
+
+
+ /*********************************************************************************
+ SOLUTION DOMAIN :
+ *********************************************************************************/
+ logrmin = log10(rmin_bondi);
+ dlogr = (log10(rmax_bondi) - logrmin)/(1.*(nbondi-1));
+
+ for(i=0; i < nbondi; i++) {
+ logr_bondi[i] = logrmin + dlogr*i;
+ }
+
+ for(i=0; i < nbondi; i++) {
+ r_bondi[i] = pow(10.,logr_bondi[i]);
+ }
+
+ rhotmp = 1.e200;
+ imin = 0;
+
+ /* find the position in the array where the sonic point lies */
+ for(i=0; i < nbondi; i++) {
+ utmp = fabs(r_bondi[i] - r_sonicpt_bondi);
+ if( utmp < rhotmp ) {
+ rhotmp = utmp;
+ imin = i ;
+ }
+ }
+
+ /*********************************************************************************
+ DETERMINE BONDI SOLUTION :
+ *********************************************************************************/
+
+ /* start at the sonic point (where we know the solution) and spread out from there using the
+ adjacent point as the guess for the next furthest point : */
+ rhotmp = -1.; // start with guess
+
+ for(i=imin; i < nbondi; i++) {
+ rspher = r_bondi[i];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem1 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+ rho_bondi[i] = rhotmp; u_bondi[i] = utmp; v_bondi[i] = vtmp;
+ }
+
+ rhotmp = -1.; // start with guess
+
+ for(i=imin-1; i >= 0; i--) {
+ rspher = r_bondi[i];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem2 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+ rho_bondi[i] = rhotmp; u_bondi[i] = utmp; v_bondi[i] = vtmp;
+ }
+
+
+ /* Verify Bondi solution, extrapolate/interpolate over Nans */
+ nans_exist = 0 ;
+
+ for(i=0; i < nbondi; i++) { bad_bondi[i] = 0 ; }
+ for(i=0; i < nbondi; i++) {
+ if( (!finite(rho_bondi[i])) || (!finite(u_bondi[i])) || (!finite(v_bondi[i])) || (rho_bondi[i]==0.) || (v_bondi[i]==0.) || (u_bondi[i]==0.) ) {
+ bad_bondi[i] = 1 ;
+ nans_exist++;
+ }
+ }
+
+ if( nans_exist > (nbondi-3) ) {
+ CCTK_VWarn(CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING,"Too many bad points %12d out of %12d \n",nans_exist,nbondi);
+ }
+
+ /* We find the 2-point stencil by favoring interpolation over extrapolation, no matter the distance between the points */
+ if( nans_exist ) {
+ for(i=0; i < nbondi; i++) {
+ if( bad_bondi[i] ) {
+ j = i-1;
+ while( (j > 0) && (bad_bondi[j]) ) { j--; }
+
+ if( (j==0) && bad_bondi[j] ) {
+ /* No good points to the left, need two points on the right: */
+
+ while( (j < (nbondi-1)) && (bad_bondi[j]) ) { j++; }
+ if( (j==(nbondi-1)) && bad_bondi[j] ) {
+ CCTK_WARN(CCTK_WARN_ABORT,"No available points with which to interpolate!\n");
+ }
+ else {
+ ileft = j ;
+
+ /* Continue searching to the right: */
+ j++;
+ while( (j < (nbondi-1)) && (bad_bondi[j]) ) { j++; }
+ if( (j==(nbondi-1)) && bad_bondi[j] ) {
+ CCTK_WARN(CCTK_WARN_ABORT,"Need another point to the right but cannot find one! \n");
+ }
+ else {
+ iright = j ;
+ }
+ }
+ }
+ else {
+ /* Found a left point, need a right: */
+ ileft = j ;
+
+ j = i+1;
+ while( (j < (nbondi-1)) && (bad_bondi[j]) ) { j++; }
+ if( (j==(nbondi-1)) && bad_bondi[j] ) {
+ /* No good points to the right, need to find another point on the left: */
+ iright = ileft;
+
+ j = ileft-1;
+ while( (j > 0) && (bad_bondi[j]) ) { j--; }
+ if( (j==0) && bad_bondi[j] ) {
+ CCTK_WARN(CCTK_WARN_ABORT,"Need another point to the left but cannot find one! \n");
+ }
+ else {
+ ileft = j;
+ }
+ }
+ else {
+ iright = j;
+ }
+ }
+ /* Now interpolate over the bad point with the good points found: */
+
+ sigma = (r_bondi[i]-r_bondi[ileft])/(r_bondi[iright]-r_bondi[ileft]);
+ rho_bondi[i] = rho_bondi[iright] * sigma + rho_bondi[ileft] * (1.-sigma) ;
+ u_bondi[i] = u_bondi[iright] * sigma + u_bondi[ileft] * (1.-sigma) ;
+ v_bondi[i] = v_bondi[iright] * sigma + v_bondi[ileft] * (1.-sigma) ;
+ }
+ }
+ }
+
+
+
+#if(LTRACE)
+ for(i=0; i < nbondi; i++) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"radial-bondisoln %12d %26.16e %26.16e %26.16e %26.16e %12d \n",i,r_bondi[i],rho_bondi[i],u_bondi[i],v_bondi[i], bad_bondi[i]);
+ }
+#endif
+
+ /*********************************************************************************
+ LOAD GRID FUNCTIONS WITH THE SOLUTION
+ *********************************************************************************/
+ xpos[TT] = 0.;
+
+ for(i=0; i < size; i++) {
+
+ xpos[XX] = x[i] ;
+ xpos[YY] = y[i] ;
+ xpos[ZZ] = z[i] ;
+
+
+ switch( coord_type ) {
+
+ case COORD_BOYERLINDQUIST :
+ bl_cart_to_bl_spher_pos( xpos, x_spher);
+ break;
+
+ case COORD_KERRSCHILD :
+ ks_cart_to_ks_spher_pos( xpos, x_spher);
+ break;
+
+ case COORD_ISOTROPIC :
+ iso_cart_to_bl_spher_pos(xpos, x_spher);
+ break;
+
+ }
+
+ rspher = x_spher[RR];
+
+ if( rspher < rmin_bondi ) rspher = rmin_bondi;
+
+
+ /* Find nearest point in the Bondi solution : */
+ j = (int) ( 0.5 + (log10(rspher) - logrmin) / dlogr ) ;
+
+ if( j < 0 ) {
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"Grid point resides outside solution domain: %26.16e %26.16e %26.16e %26.16e %26.16e\n", rspher, rmin_bondi, xpos[XX],xpos[YY],xpos[ZZ]);
+ j = 0;
+ }
+ else if( j > (nbondi - 1) ) {
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"GRHydro_Bondi:: Grid point resides outside solution domain: %26.16e %26.16e %26.16e %26.16e %26.16e\n", rspher, rmin_bondi, xpos[XX],xpos[YY],xpos[ZZ]);
+ j = nbondi - 1;
+ }
+
+ rhotmp = rho_bondi[j];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem3 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+
+ rho[i] = rhotmp;
+ eps[i] = utmp/rhotmp;
+ calc_vel_bondi(vtmp, xpos, x_spher, ucon);
+
+ det = 1./alp[i]; /* temp var */
+
+ velx(i) = (ucon[XX]/ucon[TT] + betax[i]) * det;
+ vely(i) = (ucon[YY]/ucon[TT] + betay[i]) * det;
+ velz(i) = (ucon[ZZ]/ucon[TT] + betaz[i]) * det;
+
+
+ SpatialDet(gxx[i],gxy[i],gxz[i],gyy[i],gyz[i],gzz[i],&det);
+
+ Prim2ConGen(*GRHydro_eos_handle,gxx[i],gxy[i],
+ gxz[i],gyy[i],gyz[i],gzz[i],
+ det, &dens[i],&sx(i),&sy(i),&sz(i),
+ &tau[i],rho[i],
+ velx(i),vely(i),velz(i),
+ eps[i],&press[i],&w_lorentz[i]);
+
+ if( (!finite(dens[i])) || (!finite(sx(i))) || (!finite(sy(i))) || (sz(i)==0.) || (tau[i]==0.) || (press[i]==0.) || (w_lorentz[i]==0.) ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"bad point at %12d : %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e %26.16e \n",i,rspher, rho[i], eps[i], press[i], velx(i), vely(i), velz(i), dens[i], sx(i), sy(i), sz(i) );
+ dens[i] = rho_bondi[0];
+ tau[i] = u_bondi[0];
+ press[i] = (gamma_eos-1.)*u_bondi[0];
+ w_lorentz[i] = 1.;
+ sx(i) = 0.; sy(i) = 0.; sz(i) = 0.;
+ }
+
+ }
+
+ free(r_bondi); free(logr_bondi); free(rho_bondi); free(u_bondi); free(v_bondi);
+
+
+# undef velx
+# undef vely
+# undef velz
+# undef sx
+# undef sy
+# undef sz
+
+
+ return;
+}
+
+
+
+
+#undef LTRACE
+#undef NEWT_DIM_B
+#undef MAX_NEWT_ITER_B
+#undef NEWT_TOL_B
+#undef MIN_NEWT_TOL_B
+#undef EXTRA_NEWT_ITER_B
+#undef SMALL_BONDI
+#undef NDIM
+#undef TT
+#undef RR
+#undef TH
+#undef PH
+#undef XX
+#undef YY
+#undef ZZ
+#undef COORD_BOYERLINDQUIST
+#undef COORD_KERRSCHILD
+#undef COORD_ISOTROPIC
+#undef DLOOP1
+#undef DLOOP2
+
+#ifdef LOCAL_SINCOS
+# undef sincos
+# undef LOCAL_SINCOS
+#endif
diff --git a/src/GRHydro_BondiM.c b/src/GRHydro_BondiM.c
new file mode 100644
index 0000000..e5e491c
--- /dev/null
+++ b/src/GRHydro_BondiM.c
@@ -0,0 +1,1081 @@
+ /*@@
+ @file GRHydro_Bondi.c
+ @date Wed Jan 13 13:00:49 EST 2010
+ @author Scott C. Noble
+ @desc
+ Hydro initial data for the relativistic Bondi solution about
+ a single Schwarzschild black hole.
+ @enddesc
+ @@*/
+
+/***********************************************************************************/
+/***********************************************************************************/
+/***********************************************************************************
+ Calculates the Bondi solution, or the spherically symmetric hydrostationary
+ solution to a fluid on a static fixed background spacetime. We assume that one can
+ calculate a radius "r" from the grid and that with respect to this radial coordinate,
+ the solution satisfies
+
+ d (\rho u^r) / dr = 0
+
+ Assumes that the equation of state is P = K \rho^\Gamma and K is set by
+ the location of the sonic point.
+
+
+ -- Implicitly assumes that there is no spin in the geometry as there is no Bondi
+ solution for spinning black holes. If a spin is specified, a spherically symmetric
+ is still assumed but the 4-velocity is set consistently with the spinning spacetime.
+
+***********************************************************************************/
+/***********************************************************************************/
+/***********************************************************************************/
+
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+# define M_PI 3.14159265358979323846 /* pi */
+
+// set to 1 to tracing output
+#define LTRACE 1
+
+
+/* Mnemonics: */
+
+#define NDIM (4) /* Number of spacetime dimensions */
+
+/* mnemonics for dimensional indices */
+#define TT (0)
+#define RR (1)
+#define TH (2)
+#define PH (3)
+
+/* mnemonics for dimensional indices */
+#define XX (1)
+#define YY (2)
+#define ZZ (3)
+
+/* mnemonics for coordinate system choice */
+#define COORD_BOYERLINDQUIST (0)
+#define COORD_KERRSCHILD (1)
+#define COORD_ISOTROPIC (2)
+
+/* Macros: */
+#define DLOOP1 for(i=0 ;i<NDIM ;i++)
+#define DLOOP2 for(i=0 ;i<NDIM ;i++) for(j=0 ;j<NDIM ;j++)
+
+
+#if !defined(__INTEL_COMPILER)
+# define LOCAL_SINCOS
+# define sincos( theta_ , sth_ , cth_ ) { *(sth_) = sin((theta_)) ; *(cth_) = cos((theta_)) ; }
+#endif
+
+
+//Newton-Raphson parameters:
+#define NEWT_DIM_B (1 )
+#define MAX_NEWT_ITER_B (30 ) /* Max. # of Newton-Raphson iterations for find_root_2D(); */
+#define NEWT_TOL_B (1.0e-15) /* Min. of tolerance allowed for Newton-Raphson iterations */
+#define MIN_NEWT_TOL_B (1.0e-10) /* Max. of tolerance allowed for Newton-Raphson iterations */
+#define EXTRA_NEWT_ITER_B (2 )
+#define SMALL_BONDI (1.e-20)
+
+
+static CCTK_REAL Mdot, rs, vs_sq, vs, cs_sq, cs, rhos, hs, K, Qdot, gamma_eos, r_sol;
+static CCTK_REAL M, a, asq, Msq;
+static CCTK_REAL x_cen, y_cen, z_cen;
+static unsigned short int coord_type;
+
+
+/******************************************************************************
+ bl_to_ks_con():
+ ----------
+ -- transforms a contravariant vector in BL coordinates to KS coordinates;
+ ******************************************************************************/
+static void bl_to_ks_con(CCTK_REAL *x, CCTK_REAL blcon[], CCTK_REAL kscon[] )
+{
+ CCTK_REAL delta_m1, dtKS_drBL, dphiKS_drBL;
+
+ delta_m1 = 1./( x[RR] * ( x[RR] - 2*M ) + asq );
+ dtKS_drBL = 2*M*x[RR] * delta_m1;
+ dphiKS_drBL = a * delta_m1;
+
+ kscon[TT] = blcon[TT] + blcon[RR] * dtKS_drBL;
+ kscon[RR] = blcon[RR];
+ kscon[TH] = blcon[TH];
+ kscon[PH] = blcon[PH] + blcon[RR] * dphiKS_drBL;
+
+ return;
+}
+
+/******************************************************************************
+ dxc_dxs_ks_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for Kerr-Schild coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_ks_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL r, th, ph;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ r = x_spher[RR];
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth ; // dx/dr
+ dxc_dxs[XX][TH] = (r*cph - a*sph) * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth ; // dy/dr
+ dxc_dxs[YY][TH] = (r*sph + a*cph) * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ dxc_dxs_bl_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for Boyer-Lindquist coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_bl_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL r, th, ph, rterm, dr;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ r = x_spher[RR];
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ rterm = sqrt( r*r + asq );
+ dr = r / rterm;
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth * dr ; // dx/dr
+ dxc_dxs[XX][TH] = rterm * cph * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth * dr ; // dy/dr
+ dxc_dxs[YY][TH] = rterm * sph * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ dxc_dxs_iso_calc():
+ ----------------------
+ -- calculates the transformation matrix Lambda^\hat{a}_a defined:
+
+ x^\hat{a}[Cartesian] = \Lambda^\hat{a}_a x^a[Spherical]
+
+ where dxc_dxs[i][j] = \Lambda^i_j
+
+ for "Isotropic" coordinates.
+
+ ******************************************************************************/
+static void dxc_dxs_iso_calc(CCTK_REAL *x_cart, CCTK_REAL *x_spher, CCTK_REAL dxc_dxs[][NDIM] )
+{
+ int i;
+ CCTK_REAL th, ph,r_iso;
+ CCTK_REAL sth,cth,sph,cph;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { dxc_dxs[0][i] = 0. ; }
+
+ /* BL spherical coordinates : */
+ th = x_spher[TH];
+ ph = x_spher[PH];
+
+ r_iso = x_spher[TT];
+
+ sincos( th, &sth , &cth );
+ sincos( ph, &sph , &cph );
+
+ dxc_dxs[TT][TT] = 1. ; // dt/dt
+ dxc_dxs[XX][RR] = cph * sth ; // dx/dr
+ dxc_dxs[XX][TH] = r_iso * cph * cth ; // dx/dtheta
+ dxc_dxs[XX][PH] = -(x_cart[YY] - y_cen) ; // dx/dphi
+ dxc_dxs[YY][RR] = sph * sth ; // dy/dr
+ dxc_dxs[YY][TH] = r_iso * sph * cth ; // dy/dtheta
+ dxc_dxs[YY][PH] = x_cart[XX] - x_cen ; // dy/dphi
+ dxc_dxs[ZZ][RR] = cth ; // dz/dr
+ dxc_dxs[ZZ][TH] = -r_iso*sth ; // dz/dtheta
+ // dxc_dxs[ZZ][PH] = 0. ; // dz/dphi
+
+ return;
+
+}
+
+/******************************************************************************
+ ks_cart_to_ks_spher_pos():
+ ----------
+ -- transforms the position in Cartesian KS coordinates to Spherical KS coordinates;
+ ******************************************************************************/
+static void ks_cart_to_ks_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ t3 = 0.5*(xx*xx + yy*yy + zz*zz - asq);
+ r = sqrt( t3 + sqrt( t3*t3 + asq*zz*zz ) );
+
+ x_spher[TT] = x_cart[TT];
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / r);
+ t3 = atan2( (yy*r - xx*a) , (xx*r + yy*a) );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/******************************************************************************
+ bl_cart_to_bl_spher_pos():
+ ----------
+ -- transforms the position in Cartesian BL coordinates to Spherical BL coordinates;
+ ******************************************************************************/
+static void bl_cart_to_bl_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ t3 = 0.5*(xx*xx + yy*yy + zz*zz - asq);
+ r = sqrt( t3 + sqrt( t3*t3 + asq*zz*zz ) );
+
+ x_spher[TT] = x_cart[TT];
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / r);
+ t3 = atan2( yy , xx );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/******************************************************************************
+ iso_cart_to_bl_spher_pos():
+ ----------
+ -- transforms the position in Cartesian "Isotropic" coordinates to Spherical BL coordinates;
+ -- r^2 = x^2 + y^2 + z^2 in these coordinates, so they are slightly distorted from flatspace
+ ******************************************************************************/
+static void iso_cart_to_bl_spher_pos(CCTK_REAL *x_cart, CCTK_REAL *x_spher)
+{
+ CCTK_REAL xx,yy,zz,riso,r,t3;
+
+ xx = x_cart[XX] - x_cen;
+ yy = x_cart[YY] - y_cen;
+ zz = x_cart[ZZ] - z_cen;
+
+ riso = sqrt(xx*xx + yy*yy + zz*zz);
+ r = 0.25 * ( 2.*riso + M + a ) * ( 2.*riso + M - a ) / riso ;
+
+ x_spher[TT] = riso;
+ x_spher[RR] = r;
+ x_spher[TH] = acos(zz / riso);
+ t3 = atan2( yy , xx );
+ if( t3 < 0. ) { t3 += 2.*M_PI; }
+ x_spher[PH] = t3;
+
+ return;
+}
+
+/****************************************************************************
+ setutcon():
+ ------------
+ -- find the contravariant time-component of a time-like vector
+ pointing forward in time;
+****************************************************************************/
+static void setutcon(CCTK_REAL *vcon, CCTK_REAL gcov[][NDIM])
+{
+ int i,j;
+ CCTK_REAL d,b,c;
+
+ d=gcov[TT][TT];
+
+ b = gcov[TT][1]*vcon[1] + gcov[TT][2]*vcon[2] + gcov[TT][3]*vcon[3] ;
+
+ c = gcov[1][1] * vcon[1] * vcon[1]
+ + gcov[2][2] * vcon[2] * vcon[2]
+ + gcov[3][3] * vcon[3] * vcon[3]
+ + 2.*( gcov[1][2] * vcon[1] * vcon[2]
+ + gcov[1][3] * vcon[1] * vcon[3]
+ + gcov[2][3] * vcon[2] * vcon[3] );
+
+ c += 1. ; /* vector is timelike */
+
+ vcon[0]=(-b-sqrt(b*b-d*c))/(d); /* sign for pointing forward in time */
+
+ return;
+}
+
+/****************************************************************************
+ bl_gcov_func():
+ ---------------
+ -- Covariant Kerr metric in Boyer-Lindquist coordinates.
+****************************************************************************/
+static void bl_gcov_func( CCTK_REAL *x, CCTK_REAL gcov[][NDIM])
+{
+ int i,j,k ;
+ CCTK_REAL sth,cth,s2,r2,DD,mu ;
+ CCTK_REAL r,th;
+
+ for( i = 0 ; i < NDIM*NDIM ; i++ ) { gcov[0][i] = 0. ; }
+
+ r = x[RR];
+ th = x[TH];
+ sincos( th, &sth , &cth );
+
+ s2 = sth*sth ;
+ r2 = r*r ;
+ DD = 1. - 2.*M/r + asq/r2 ;
+ mu = 1. + asq*cth*cth/r2 ;
+
+ gcov[TT][TT] = -(1. - 2.*M/(r*mu)) ;
+ gcov[TT][3] = -2.*M*a*s2/(r*mu) ;
+ gcov[3][TT] = gcov[TT][3] ;
+ gcov[1][1] = mu/DD ;
+ gcov[2][2] = r2*mu ;
+ gcov[3][3] = r2*s2*(1. + asq/r2 + 2.*M*asq*s2/(r2*r*mu)) ;
+
+ return;
+}
+
+
+/***************************************************************************
+
+ set_bondi_parameters():
+ ---------------------
+ -- finds the values of the hydro. quantities at the sonic point, which
+ serves as a reference point for the conservation equations given
+ in Shapiro and Teukolsky equations (G.21,G.22).
+
+ -- The sonic point values are then used in find_bondi_solution() to determine
+ the hydro. quantities at an arbitrary radius;
+
+ -- the "boundary conditions" that uniquely determine the Bondi solution
+ are the radius of the sonic point, "rs", and the mass accretion rate,
+ Mdot;
+
+ -- the Bondi solution here in is the isentropic, spherically symmetric,
+ perfect fluid solution to Einstein's equations. That is, we only
+ assume an r-dependence, there's a in-going radial velocity only,
+ and the EOS are : P = (G-1)*rho and P = K rho^G
+ where K = const. and G is the adiabatic constant "gam".
+
+***************************************************************************/
+static void set_bondi_parameters( CCTK_REAL M_in, CCTK_REAL Mdot_in, CCTK_REAL rs_in, CCTK_REAL gam )
+{
+
+ CCTK_REAL my_pi, checkp;
+ CCTK_REAL gtemp;
+
+ /* Set the solution-determining parameters: */
+ M = M_in;
+ Mdot = Mdot_in;
+ Msq = M*M;
+ rs = rs_in;
+ gamma_eos = gam;
+
+
+ /* Calculate the hydro. quantities: */
+ cs_sq = M / ( 2.*rs - 3.*M ) ;
+
+ if( cs_sq > (gam - 1.) ) {
+ cs_sq = gam - 1.;
+ rs = 0.5 * M * ( 3. + 1./cs_sq ) ;
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): bad value of rs, need to increase it !! \n");
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): Need to change rs !! \n");
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"set_bondi_parameters(): rs[old] = %28.15e rs[new] = %28.16e \n\n",rs_in,rs);
+ }
+
+ cs = sqrt(cs_sq);
+ vs_sq = M / ( 2. * rs ) ;
+ vs = sqrt(vs_sq);
+ rhos = Mdot / ( 4. * M_PI * vs * rs * rs ) ;
+ gtemp = gam - 1.;
+ hs = 1. / ( 1. - cs_sq / (gam - 1.) );
+ K = hs * cs_sq * pow( rhos, (-gtemp) ) / gam ;
+ Qdot = hs * hs * ( 1. - 3. * vs_sq ) ;
+ gamma_eos = gam;
+
+#if( LTRACE )
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n#######################################################\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"Bondi Solution Parameters1: \n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"------------------------- \n\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"M = %28.20e Mdot = %28.20e rs = %28.20e \n",M,Mdot,rs);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"vs = %28.20e cs = %28.20e rhos = %28.20e \n",vs,cs,rhos);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"hs = %28.20e K = %28.20e Qdot = %28.20e \n",hs,K,Qdot);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"gam= %28.20e r_sol= %28.20e \n",gamma_eos, r_sol);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"rs = : %28.20e \n", rs) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"urs = : %28.20e \n", vs) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"rhos = : %28.20e \n", rhos) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"K = : %28.20e \n", K) ;
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"#######################################################\n\n");
+#endif
+
+ return;
+
+}
+
+/**********************************************************************/
+/************************************************************
+
+ gnr_bondi():
+ -----------
+ -- should be just like the routine general_newton_raphson() in utoprim*.c
+ except the "physicality" condition is different;
+
+ -- performs Newton-Rapshon method on an arbitrary system
+ though tailored to calculate rho second Bondi Conservation eq.
+ by ensuring that rho > 0 (look near "METHOD specific:")
+
+ -- inspired in part by Num. Rec.'s routine newt();
+
+ Arguements:
+
+ -- x[] = set of independent variables to solve for;
+ -- n = number of independent variables and residuals;
+ -- funcd = name of function that calculates residuals, etc.;
+
+*****************************************************************/
+static int gnr_bondi( CCTK_REAL x[], int n,
+ void (*funcd) (CCTK_REAL [], CCTK_REAL [], CCTK_REAL [],
+ CCTK_REAL [][NEWT_DIM_B], CCTK_REAL *,
+ CCTK_REAL *, int) )
+{
+ CCTK_REAL f, df, dx[NEWT_DIM_B], x_old[NEWT_DIM_B], resid[NEWT_DIM_B],
+ jac[NEWT_DIM_B][NEWT_DIM_B];
+ CCTK_REAL errx, x_orig[NEWT_DIM_B];
+ int n_iter, id, jd, i_extra, doing_extra;
+
+ int keep_iterating, i_increase;
+
+
+ // Initialize various parameters and variables:
+ errx = 1. ;
+ df = f = 1.;
+ i_extra = doing_extra = 0;
+ for( id = 0; id < n ; id++) x_old[id] = x_orig[id] = x[id] ;
+
+ n_iter = 0;
+
+
+ /* Start the Newton-Raphson iterations : */
+ keep_iterating = 1;
+ while( keep_iterating ) {
+
+ (*funcd) (x, dx, resid, jac, &f, &df, n); /* returns with new dx, f, df */
+
+ /* Save old values before calculating the new: */
+ errx = 0.;
+ for( id = 0; id < n ; id++) {
+ x_old[id] = x[id] ;
+ }
+
+ /* don't use line search : */
+ for( id = 0; id < n ; id++) {
+ x[id] += dx[id] ;
+ }
+
+ /****************************************/
+ /* Calculate the convergence criterion */
+ /****************************************/
+
+ /* For the new criterion, always look at relative error in indep. variable: */
+ // METHOD specific:
+ errx = (x[0]==0.) ? fabs(dx[0]) : fabs(dx[0]/x[0]);
+
+
+ /****************************************/
+ /* Make sure that the new x[] is physical : */
+ /****************************************/
+ x[0] = (x[0] == 0.) ? (SMALL_BONDI) : fabs(x[0]);
+
+
+ /*****************************************************************************/
+ /* If we've reached the tolerance level, then just do a few extra iterations */
+ /* before stopping */
+ /*****************************************************************************/
+
+ if( (fabs(errx) <= NEWT_TOL_B) && (doing_extra == 0) && (EXTRA_NEWT_ITER_B > 0) ) {
+ doing_extra = 1;
+ }
+
+ if( doing_extra == 1 ) i_extra++ ;
+
+ if( ((fabs(errx) <= NEWT_TOL_B)&&(doing_extra == 0)) ||
+ (i_extra > EXTRA_NEWT_ITER_B) || (n_iter >= (MAX_NEWT_ITER_B-1)) ) {
+ keep_iterating = 0;
+ }
+
+ n_iter++;
+
+ } // END of while(keep_iterating)
+
+
+ /* Check for bad untrapped divergences : */
+ if( (finite(f)==0) || (finite(df)==0) ) {
+ return(2);
+ }
+
+
+ if( fabs(errx) > MIN_NEWT_TOL_B){
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"newt: errx = %28.20e \n", errx);
+ return(1);
+ }
+ if( (fabs(errx) <= MIN_NEWT_TOL_B) && (fabs(errx) > NEWT_TOL_B) ){
+ return(0);
+ }
+ if( fabs(errx) <= NEWT_TOL_B ){
+ return(0);
+ }
+
+ return(0);
+
+}
+
+/******************************************************************************/
+/******************************************************************************
+
+ bondi_resid():
+ --------------
+ -- routine to calculate the residual and jacobian used by
+ the Newton-Raphson routine general_newton_raphson(), which is
+ used to find X2 from theta;
+
+***********************************************************************************/
+static void bondi_resid(CCTK_REAL x[], CCTK_REAL dx[], CCTK_REAL resid[], CCTK_REAL jac[][NEWT_DIM_B],
+ CCTK_REAL *f, CCTK_REAL *df, int n )
+{
+ CCTK_REAL v, vp, h, hp, term;
+
+ hp = K * gamma_eos * pow( x[0], (gamma_eos - 2.) ); // dh/drho
+ h = 1. + hp * x[0] / ( gamma_eos - 1. );
+ v = Mdot / ( 4. * M_PI * r_sol * r_sol * x[0] );
+ vp = -v / x[0]; // dv/drho
+ term = 1. - 2.*M/r_sol + v*v;
+ resid[0] = -Qdot + h * h * term;
+ jac[0][0] = 2. * h *( hp*term + h*v*vp );
+ dx[0] = -resid[0] / jac[0][0];
+ *f = 0.5*resid[0]*resid[0];
+ *df = -2. * (*f);
+
+ return;
+
+}
+
+
+/***************************************************************************/
+/***************************************************************************
+
+ find_bondi_solution():
+ ---------------------
+
+ -- essentially just calls gnr_bondi() to find the solution for
+ the density at a given radius, given the parameters calculated from
+ set_bondi_parameters();
+
+ -- after the density is found, the density (rho), internal energy densit (u), magnitude
+ of the radial component of the 4-velocity (v) are returned to the calling
+ routine;
+
+ -- requires r = radius at which we want solution
+
+ -- note that v is a magnitude, so the user will have to set u^r = -v ;
+
+ -- if there is an error in finding the solution, it returns the error
+ status from the root-finding routine. See documentation of the
+ gnr_bondi() for further details;
+
+***************************************************************************/
+static int find_bondi_solution( CCTK_REAL r, CCTK_REAL *rho, CCTK_REAL *u, CCTK_REAL *v )
+{
+
+ int retval=0;
+ const int ntries = 10000;
+ int itry;
+
+ CCTK_REAL rhotmp, rho_guess;
+ CCTK_REAL dr,ur;
+
+
+ /************************************************************************/
+ /* Find the initial guess for the newton iterations: */
+ /* Take the sonic point values if we have no better guess (when rho<0) */
+ /************************************************************************/
+
+ if( *rho < 0. ) {
+ if( r > 0.9*rs && r < 1.1*rs ) {
+ *rho = rhos;
+ }
+ else {
+ // rhotmp = (sqrt(Qdot) - 1.) * (gamma_eos - 1.) / ( gamma_eos * K );
+ // rho_guess = pow( rhotmp , (1./(gamma_eos - 1.)) );
+ if(r < rs) { ur = pow(r,-0.5) ; }
+ else { ur = 0.5*pow(r,-1.5) ; }
+ rho_guess = Mdot / (4.*M_PI * r * r * ur);
+ *rho = rho_guess;
+ }
+ }
+
+ // set global variables needed by residual function:
+ r_sol = r ;
+
+
+ // Use Newton's method to find rho:
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+
+
+ // first try guess if failure
+ if( retval ) {
+ *rho = rho_guess;
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+ }
+
+ // If we were unsure about the guess and solver fails, then creep from known solution to desired point:
+ if( retval ) {
+
+ dr = (r - rs)/(1.*(ntries-1));
+
+ *rho = rhos; // start with sonic point value and near sonic point
+
+ // go gradually away from sonic point toward location where we want the solution:
+ r_sol = rs ;
+ for( itry = 1; itry < ntries; itry++ ) {
+ r_sol += dr;
+
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid);
+
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"find_bondi_solution: Incr. guess failed, decrease dfactor, retval = %d, r = %g, itry = %d \n", retval, r, itry);
+ return(10);
+ }
+ }
+
+ // No try where we want the solution:
+ r_sol = r ;
+ retval = gnr_bondi( rho, NEWT_DIM_B, bondi_resid );
+
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"find_bondi_solution: Final Incr. guess failed, decrease dfactor??, retval = %d \n", retval);
+ return(11);
+ }
+
+ }
+
+ rhotmp = *rho;
+
+ // Calculate other quantities:
+ *u = K * pow( rhotmp, gamma_eos ) / (gamma_eos - 1.);
+
+ *v = Mdot / ( 4. * M_PI * r * r * rhotmp );
+
+ if( *u <= 0. ) { retval = -1; }
+
+ return( retval ) ;
+
+}
+
+/***********************************************************************************/
+/***********************************************************************************
+ calc_vel_bondi():
+ ---------
+ -- calculates the 4-velocity from the amplitude of the
+ radial component of the 4-velocity in Boyer-Lindquist coordinates.
+
+***********************************************************************************/
+static void calc_vel_bondi( CCTK_REAL vtmp, CCTK_REAL x[NDIM], CCTK_REAL x_spher[NDIM], CCTK_REAL ucon[NDIM] )
+{
+ int i,j;
+ CCTK_REAL ucon_bl[NDIM] = {0.};
+ CCTK_REAL ucon_ks[NDIM];
+ CCTK_REAL gcov[NDIM][NDIM];
+ CCTK_REAL r_iso;
+ CCTK_REAL dxc_dxs[NDIM][NDIM];
+
+ ucon_bl[RR] = -vtmp;
+
+ /* Find time component of 4-velocity: */
+ bl_gcov_func( x_spher, gcov );
+ setutcon( ucon_bl, gcov );
+
+
+ switch( coord_type ) {
+
+ case COORD_BOYERLINDQUIST :
+ dxc_dxs_bl_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_bl[j] ; }
+ break;
+
+
+ case COORD_KERRSCHILD :
+ bl_to_ks_con(x_spher,ucon_bl,ucon_ks);
+ dxc_dxs_ks_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_ks[j] ; }
+ break;
+
+
+ case COORD_ISOTROPIC :
+ r_iso = x_spher[TT];
+ ucon_bl[RR] /= 1. + 0.25 * (asq-Msq) / (r_iso*r_iso) ; /* BL to Isotropic coordinate transformation */
+ /* I believe we can use BL's cartesian transformation, while using BL's radius : */
+ dxc_dxs_iso_calc(x, x_spher, dxc_dxs );
+ DLOOP1 { ucon[i] = 0.; }
+ DLOOP2 { ucon[i] += dxc_dxs[i][j] * ucon_bl[j] ; }
+ break;
+
+ }
+
+ return;
+}
+
+/***********************************************************************************/
+/***********************************************************************************
+ GRHydro_BondiM():
+ ---------
+ -- driver routine for the Bondi solution;
+
+***********************************************************************************/
+void GRHydro_BondiM(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+ CCTK_REAL det;
+ CCTK_REAL rhotmp, utmp, vtmp, rspher, xpos[NDIM], x_spher[NDIM], ucon[NDIM];
+ int retval;
+ CCTK_REAL *r_bondi, *logr_bondi, *rho_bondi, *u_bondi, *v_bondi;
+ CCTK_REAL dlogr,logrmin;
+ CCTK_REAL rmin_bondi,rmax_bondi;
+ CCTK_INT GRHydro_reflevel=0;
+
+ int nbondi;
+
+ const int size = cctk_lsh[0] * cctk_lsh[1] * cctk_lsh[2];
+ int i, imin, j;
+
+# define velx(i_) vel[i_ + 0*size]
+# define vely(i_) vel[i_ + 1*size]
+# define velz(i_) vel[i_ + 2*size]
+# define sx(i_) scon[i_ + 0*size]
+# define sy(i_) scon[i_ + 1*size]
+# define sz(i_) scon[i_ + 2*size]
+
+ if( CCTK_EQUALS(bondi_coordinates,"Boyer-Lindquist") ) {
+ coord_type = COORD_BOYERLINDQUIST ;
+ }
+ if( CCTK_EQUALS(bondi_coordinates,"Kerr-Schild") ) {
+ coord_type = COORD_KERRSCHILD ;
+ }
+ if( CCTK_EQUALS(bondi_coordinates,"Isotropic") ) {
+ coord_type = COORD_ISOTROPIC ;
+ }
+
+ /* xyz location of the black hole : */
+ i = 0;
+ x_cen = bh_bondi_pos_x[i] ;
+ y_cen = bh_bondi_pos_y[i] ;
+ z_cen = bh_bondi_pos_z[i] ;
+
+ M = bondi_central_mass[i];
+ a = M*bondi_central_spin[i];
+ asq = a * a;
+ rmin_bondi = M * bondi_rmin[i];
+ rmax_bondi = M * bondi_rmax[i];
+
+ nbondi = n_bondi_pts[i];
+
+ set_bondi_parameters( M, mdot_sonicpt_bondi, r_sonicpt_bondi, gl_gamma);
+
+
+#if(LTRACE)
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n##################################################\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING," Geometry PARAMETERS \n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t M = %28.18e \n",M );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t a = %28.18e \n",a );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t x_cen = %28.18e \n",x_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t y_cen = %28.18e \n",y_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t z_cen = %28.18e \n",z_cen );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t rmin_bondi = %28.18e \n",rmin_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t rmax_bondi = %28.18e \n",rmax_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t nbondi = %d \n",nbondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING," SOLUTION PARAMETERS \n------------------------------------\n");
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t bondi_coordinates = %s \n",bondi_coordinates );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t mdot_sonicpt_bondi = %28.18e \n",mdot_sonicpt_bondi);
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t r_sonicpt_bondi = %28.18e \n",r_sonicpt_bondi );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\t gl_gamma = %28.18e \n",gl_gamma );
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"\n------------------------------------\n");
+#endif
+
+ if( r_sonicpt_bondi < rmin_bondi ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"sonic point lies below solution domain!!");
+ }
+
+ if( r_sonicpt_bondi > rmax_bondi ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"sonic point lies beyond solution domain!!");
+ }
+
+
+ /*********************************************************************************
+ ARRAY ALLOCATIONS :
+ *********************************************************************************/
+ /* global solution : */
+ if( (r_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc r_bondi \n");
+ return;
+ }
+ if( (logr_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc logr_bondi \n");
+ return;
+ }
+ if( (rho_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc rho_bondi \n");
+ return;
+ }
+ if( (u_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi); free(rho_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc u_bondi \n");
+ return;
+ }
+ if( (v_bondi = (CCTK_REAL *) calloc(nbondi, sizeof(CCTK_REAL))) == NULL ) {
+ free(r_bondi); free(logr_bondi); free(rho_bondi); free(u_bondi);
+ CCTK_WARN(CCTK_WARN_ABORT,"Cannot alloc v_bondi \n");
+ return;
+ }
+
+
+ /*********************************************************************************
+ SOLUTION DOMAIN :
+ *********************************************************************************/
+ logrmin = log10(rmin_bondi);
+ dlogr = (log10(rmax_bondi) - logrmin)/(1.*(nbondi-1));
+
+ for(i=0; i < nbondi; i++) {
+ logr_bondi[i] = logrmin + dlogr*i;
+ }
+
+ for(i=0; i < nbondi; i++) {
+ r_bondi[i] = pow(10.,logr_bondi[i]);
+ }
+
+ rhotmp = 1.e200;
+ imin = 0;
+
+ /* find the position in the array where the sonic point lies */
+ for(i=0; i < nbondi; i++) {
+ utmp = fabs(r_bondi[i] - r_sonicpt_bondi);
+ if( utmp < rhotmp ) {
+ rhotmp = utmp;
+ imin = i ;
+ }
+ }
+
+ /*********************************************************************************
+ DETERMINE BONDI SOLUTION :
+ *********************************************************************************/
+
+ /* start at the sonic point (where we know the solution) and spread out from there using the
+ adjacent point as the guess for the next furthest point : */
+ rhotmp = -1.; // start with guess
+
+ for(i=imin; i < nbondi; i++) {
+ rspher = r_bondi[i];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem1 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+ rho_bondi[i] = rhotmp; u_bondi[i] = utmp; v_bondi[i] = vtmp;
+ }
+
+ rhotmp = -1.; // start with guess
+
+ for(i=imin-1; i >= 0; i--) {
+ rspher = r_bondi[i];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem2 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+ rho_bondi[i] = rhotmp; u_bondi[i] = utmp; v_bondi[i] = vtmp;
+ }
+
+#if(LTRACE)
+ for(i=0; i < nbondi; i++) {
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"radial-bondisoln %12d %26.16e %26.16e %26.16e %26.16e \n",i,r_bondi[i],rho_bondi[i],u_bondi[i],v_bondi[i]);
+ }
+#endif
+
+ /*********************************************************************************
+ LOAD GRID FUNCTIONS WITH THE SOLUTION
+ *********************************************************************************/
+ xpos[TT] = 0.;
+
+ for(i=0; i < size; i++) {
+
+ xpos[XX] = x[i] ;
+ xpos[YY] = y[i] ;
+ xpos[ZZ] = z[i] ;
+
+
+ switch( coord_type ) {
+
+ case COORD_BOYERLINDQUIST :
+ bl_cart_to_bl_spher_pos( xpos, x_spher);
+ break;
+
+ case COORD_KERRSCHILD :
+ ks_cart_to_ks_spher_pos( xpos, x_spher);
+ break;
+
+
+ case COORD_ISOTROPIC :
+ iso_cart_to_bl_spher_pos(xpos, x_spher);
+ break;
+
+ }
+
+ rspher = x_spher[RR];
+
+ /* Find nearest point in the Bondi solution : */
+ j = (int) ( 0.5 + (log10(rspher) - logrmin) / dlogr ) ;
+
+ if( j < 0 ) {
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"Grid point resides outside solution domain: %26.16e %26.16e %26.16e %26.16e %26.16e\n", rspher, rmin_bondi, xpos[XX],xpos[YY],xpos[ZZ]);
+ j = 0;
+ }
+ else if( j > (nbondi - 1) ) {
+ CCTK_VWarn(CCTK_WARN_DEBUG, __LINE__, __FILE__, CCTK_THORNSTRING,"GRHydro_Bondi:: Grid point resides outside solution domain: %26.16e %26.16e %26.16e %26.16e %26.16e\n", rspher, rmin_bondi, xpos[XX],xpos[YY],xpos[ZZ]);
+ j = nbondi - 1;
+ }
+
+ rhotmp = rho_bondi[j];
+ retval = find_bondi_solution( rspher, &rhotmp, &utmp, &vtmp );
+ if( retval ) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,"Problem3 with find_bondi_solution() at i = %d, r = %28.16e \n",i,rspher);
+ rhotmp = -1. ; vtmp = 0.; /* trigger the floor and set to staticity */
+ }
+
+ if(rhotmp < initial_rho_abs_min) {
+ rhotmp = initial_rho_abs_min;
+ utmp = K * pow( rhotmp, gl_gamma ) / (gl_gamma - 1.);
+ }
+
+ rho[i] = rhotmp;
+ eps[i] = utmp/rhotmp;
+ calc_vel_bondi(vtmp, xpos, x_spher, ucon);
+
+ det = 1./alp[i]; /* temp var */
+
+ velx(i) = (ucon[XX]/ucon[TT] + betax[i]) * det;
+ vely(i) = (ucon[YY]/ucon[TT] + betay[i]) * det;
+ velz(i) = (ucon[ZZ]/ucon[TT] + betaz[i]) * det;
+
+
+ SpatialDet(gxx[i],gxy[i],gxz[i],gyy[i],gyz[i],gzz[i],&det);
+
+ Prim2ConGen(*GRHydro_eos_handle,gxx[i],gxy[i],
+ gxz[i],gyy[i],gyz[i],gzz[i],
+ det, &dens[i],&sx(i),&sy(i),&sz(i),
+ &tau[i],rho[i],
+ velx(i),vely(i),velz(i),
+ eps[i],&press[i],&w_lorentz[i]);
+
+ }
+
+ free(r_bondi); free(logr_bondi); free(rho_bondi); free(u_bondi); free(v_bondi);
+
+
+# undef velx
+# undef vely
+# undef velz
+# undef sx
+# undef sy
+# undef sz
+
+
+ return;
+}
+
+
+
+
+#undef LTRACE
+#undef NEWT_DIM_B
+#undef MAX_NEWT_ITER_B
+#undef NEWT_TOL_B
+#undef MIN_NEWT_TOL_B
+#undef EXTRA_NEWT_ITER_B
+#undef SMALL_BONDI
+#undef NDIM
+#undef TT
+#undef RR
+#undef TH
+#undef PH
+#undef XX
+#undef YY
+#undef ZZ
+#undef COORD_BOYERLINDQUIST
+#undef COORD_KERRSCHILD
+#undef COORD_ISOTROPIC
+#undef DLOOP1
+#undef DLOOP2
+
+#ifdef LOCAL_SINCOS
+# undef sincos
+# undef LOCAL_SINCOS
+#endif
diff --git a/src/GRHydro_BondiM_new.F90 b/src/GRHydro_BondiM_new.F90
new file mode 100644
index 0000000..c582666
--- /dev/null
+++ b/src/GRHydro_BondiM_new.F90
@@ -0,0 +1,242 @@
+ /*@@
+ @file GRHydro_Bondi.F90
+ @date Wed Jan 13 13:00:49 EST 2010
+ @author Scott C. Noble
+ @desc
+ Hydro initial data for the relativistic Bondi solution about
+ a single Schwarzschild black hole.
+ @enddesc
+ @@*/
+
+/*
+ Calculates the Bondi solution, or the spherically symmetric hydrostationary
+ solution to a fluid on a static fixed background spacetime. We assume that one can
+ calculate a radius "r" from the grid and that with respect to this radial coordinate,
+ the solution satisfies
+
+ d (\rho u^r) / dr = 0
+
+ Assumes that the equation of state is P = K \rho^\Gamma and K is set by
+ the location of the sonic point.
+
+
+ -- Implicitly assumes that there is no spin in the geometry as there is no Bondi
+ solution for spinning black holes. If a spin is specified, a spherically symmetric
+ is still assumed but the 4-velocity is set consistently with the spinning spacetime.
+*/
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+# define M_PI 3.14159265358979323846 /* pi */
+
+!!$Newton-Raphson parameters:
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+subroutine GRHydro_BondiM_Iso(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz, imin, jb,N_points
+ PARAMETER (N_points=2000)
+ CCTK_REAL :: M, Msq, Mdot, rs, gam, rmin_bondi, rmax_bondi, cs_sq,cs,vs_sq,vs,rhos,gtemp,hs, Kval, Qdot
+ CCTK_REAL :: logrmin,dlogr,rhotmp,utmp,vtmp,rspher
+ CCTK_REAL :: r_bondi(N_points), logr_bondi(N_points), rho_bondi(N_points), u_bondi(N_points), v_bondi(N_points)
+ CCTK_REAL :: drhodr, det, rhocheck, rhocheck2, riso, rnew, rsch, ucheck
+ CCTK_REAL :: uiso, uisocheck, vcheck, ucheck2, vcheck2, xhat,yhat, zhat, xp, yp, zp
+
+ !!$set_bondi_parameters
+ M = bondi_central_mass(1)
+ Msq = M*M
+ Mdot = mdot_sonicpt_bondi
+ rs = r_sonicpt_bondi
+ gam = gl_gamma
+
+ write(*,*) 'Bondi_pars:',M,mdot_sonicpt_bondi,r_sonicpt_bondi,gl_gamma
+
+ rmin_bondi = M * bondi_rmin(1)
+ rmax_bondi = M * bondi_rmax(1)
+
+ cs_sq = M / ( 2.*rs - 3.*M )
+
+ if( cs_sq > (gam - 1.)) then
+ cs_sq = gam - 1.
+ rs = 0.5 * M * ( 3. + 1./cs_sq )
+ endif
+
+ cs = sqrt(cs_sq)
+ vs_sq = M / ( 2. * rs )
+ vs = sqrt(vs_sq)
+ rhos = Mdot / ( 4. * M_PI * vs * rs * rs )
+ gtemp = gam - 1.
+ hs = 1. / ( 1. - cs_sq / (gam - 1.) )
+ Kval = hs * cs_sq * rhos**(-gtemp) / gam
+ Qdot = hs * hs * ( 1. - 3. * vs_sq )
+
+ logrmin = log10(rmin_bondi)
+ dlogr = (log10(rmax_bondi) - logrmin)/(1.*(N_points-1))
+
+ write(*,*)'More pars:',cs,vs,rhos,hs,Kval,Qdot,logrmin,dlogr
+
+ rhotmp=1.0d30
+ imin=1
+
+ do i=1,N_points
+ logr_bondi(i) = logrmin + dlogr*(i-1)
+ r_bondi(i) = 10.**(logr_bondi(i))
+ utmp = abs(r_bondi(i) - r_sonicpt_bondi)
+ if (utmp < rhotmp) then
+ rhotmp = utmp
+ imin = i
+ endif
+ enddo
+
+ rhotmp = -1. !!$ start with guess
+
+ do i=imin,N_points
+ rspher = r_bondi(i)
+ call find_bondi_solution( rspher, rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ if(rhotmp < initial_rho_abs_min) then
+ rhotmp = initial_rho_abs_min
+ utmp = Kval * rhotmp**gl_gamma / (gl_gamma - 1.)
+ endif
+ rho_bondi(i) = rhotmp
+ u_bondi(i) = utmp
+ v_bondi(i) = vtmp
+ end do
+
+ rhotmp = -1.
+
+ do i=imin-1,1,-1
+ rspher = r_bondi(i)
+ call find_bondi_solution( rspher, rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ if(rhotmp < initial_rho_abs_min) then
+ rhotmp = initial_rho_abs_min
+ utmp = K * rhotmp**gl_gamma / (gl_gamma - 1.)
+ endif
+ rho_bondi(i) = rhotmp
+ u_bondi(i) = utmp
+ v_bondi(i) = vtmp
+ enddo
+
+ write(*,*)"i=1:",r_bondi(1),rho_bondi(1),u_bondi(1),v_bondi(1)
+ write(*,*)"i=100:",r_bondi(100),rho_bondi(100),u_bondi(100),v_bondi(100)
+ write(*,*)"i=1000:",r_bondi(1000),rho_bondi(1000),u_bondi(1000),v_bondi(1000)
+ write(*,*)"i=1500:",r_bondi(1500),rho_bondi(1500),u_bondi(1500),v_bondi(1500)
+
+!!$ // find the derivative near r=M
+ rnew = 2.25 * M
+ j = floor ( 0.5 + (log10(rnew) - logrmin) / dlogr )
+ rhocheck = rho_bondi(j)
+ call find_bondi_solution(rnew,rhocheck, ucheck, vcheck, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ uisocheck = 4.0*vcheck/3.0
+
+ rnew = 0.25 * 3.02**2 * M/1.01
+ j = floor( 0.5 + (log10(rnew) - logrmin) / dlogr )
+ rhocheck2 = rho_bondi(j)
+ call find_bondi_solution( rnew, rhocheck2, ucheck2, vcheck2, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ drhodr = 100.0*(rhocheck2-rhocheck)/M
+
+ write(6,*)'Rhocheck:',rhocheck,rhocheck2,drhodr
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ xp=x(i,j,k)
+ yp=y(i,j,k)
+ zp=z(i,j,k)
+
+ riso = sqrt(xp*xp + yp*yp + zp*zp +1.0e-16)
+ xhat = xp/riso
+ yhat = yp/riso
+ zhat = zp/riso
+
+ if(riso < 1.0e-7) then
+ gxx(i,j,k) = 1.0e4
+ gyy(i,j,k) = 1.0e4
+ gzz(i,j,k) = 1.0e4
+ gxy(i,j,k) = 0.0
+ gxz(i,j,k) = 0.0
+ gyz(i,j,k) = 0.0
+ endif
+
+ alp(i,j,k) = 1.0/gxx(i,j,k)**2
+
+ if(riso > M) then
+ rsch = 0.25 * ( 2.*riso + M)**2 / riso
+ jb = floor( 0.5 + (log10(rsch) - logrmin) / dlogr )
+
+ if(jb > N_points)jb = N_points
+
+ rhotmp = rho_bondi(jb)
+ call find_bondi_solution( rsch,rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot)
+ rho(i,j,k) = rhotmp
+ uiso = vtmp / (1.0 - M/2.0/riso) / (1.0+ M/2.0/riso)
+ else
+ if(riso > 0.5*M) then
+ rho(i,j,k) = rhocheck+drhodr*riso*(riso-M)/M
+ else
+ rho(i,j,k) = (rhocheck-drhodr*M/4.0)*(1.-cos(2.*M_PI*riso/M))/2.0
+ endif
+ utmp = Kval * rho(i,j,k)**( gam ) / (gam - 1.)
+ uiso = uisocheck * riso / M
+ endif
+ eps(i,j,k) = utmp/rhotmp
+
+ w_lorentz(i,j,k) = sqrt(1.0+gxx(i,j,k) * uiso**2)
+ velx(i,j,k) = -1.0*uiso * xhat / w_lorentz(i,j,k)
+ vely(i,j,k) = -1.0*uiso * yhat / w_lorentz(i,j,k)
+ velz(i,j,k) = -1.0*uiso * zhat / w_lorentz(i,j,k)
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ Bvecx(i,j,k) = bondi_bmag*M**2*xhat/sqrt(det)/riso**2
+ Bvecy(i,j,k) = bondi_bmag*M**2*yhat/sqrt(det)/riso**2
+ Bvecz(i,j,k) = bondi_bmag*M**2*zhat/sqrt(det)/riso**2
+
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k), &
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k), &
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k), &
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k), &
+ rho(i,j,k),velx(i,j,k),vely(i,j,k),velz(i,j,k), &
+ eps(i,j,k),press(i,j,k), &
+ Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),w_lorentz(i,j,k))
+
+ end do
+ end do
+ end do
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+ return
+
+end subroutine GRHydro_BondiM_Iso
+
+
diff --git a/src/GRHydro_Bondi_new.F90 b/src/GRHydro_Bondi_new.F90
new file mode 100644
index 0000000..31e7c43
--- /dev/null
+++ b/src/GRHydro_Bondi_new.F90
@@ -0,0 +1,359 @@
+ /*@@
+ @file GRHydro_Bondi.F90
+ @date Wed Jan 13 13:00:49 EST 2010
+ @author Scott C. Noble
+ @desc
+ Hydro initial data for the relativistic Bondi solution about
+ a single Schwarzschild black hole.
+ @enddesc
+ @@*/
+
+/*
+ Calculates the Bondi solution, or the spherically symmetric hydrostationary
+ solution to a fluid on a static fixed background spacetime. We assume that one can
+ calculate a radius "r" from the grid and that with respect to this radial coordinate,
+ the solution satisfies
+
+ d (\rho u^r) / dr = 0
+
+ Assumes that the equation of state is P = K \rho^\Gamma and K is set by
+ the location of the sonic point.
+
+
+ -- Implicitly assumes that there is no spin in the geometry as there is no Bondi
+ solution for spinning black holes. If a spin is specified, a spherically symmetric
+ is still assumed but the 4-velocity is set consistently with the spinning spacetime.
+*/
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+# define M_PI 3.14159265358979323846 /* pi */
+
+!!$Newton-Raphson parameters:
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+
+subroutine GRHydro_Bondi_Iso(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz, imin, jb,N_points
+ PARAMETER (N_points=2000)
+ CCTK_REAL :: M, Msq, Mdot, rs, gam, rmin_bondi, rmax_bondi, cs_sq,cs,vs_sq,vs,rhos,gtemp,hs, Kval, Qdot
+ CCTK_REAL :: logrmin,dlogr,rhotmp,utmp,vtmp,rspher
+ CCTK_REAL :: r_bondi(N_points), logr_bondi(N_points), rho_bondi(N_points), u_bondi(N_points), v_bondi(N_points)
+ CCTK_REAL :: drhodr, det, rhocheck, rhocheck2, riso, rnew, rsch, ucheck
+ CCTK_REAL :: uiso, uisocheck, vcheck, ucheck2, vcheck2, xhat,yhat, zhat, xp, yp, zp
+
+ !!$set_bondi_parameters
+ M = bondi_central_mass(1)
+ Msq = M*M
+ Mdot = mdot_sonicpt_bondi
+ rs = r_sonicpt_bondi
+ gam = gl_gamma
+
+ write(*,*) 'Bondi_pars:',M,mdot_sonicpt_bondi,r_sonicpt_bondi,gl_gamma
+
+ rmin_bondi = M * bondi_rmin(1)
+ rmax_bondi = M * bondi_rmax(1)
+
+ cs_sq = M / ( 2.*rs - 3.*M )
+
+ if( cs_sq > (gam - 1.)) then
+ cs_sq = gam - 1.
+ rs = 0.5 * M * ( 3. + 1./cs_sq )
+ endif
+
+ cs = sqrt(cs_sq)
+ vs_sq = M / ( 2. * rs )
+ vs = sqrt(vs_sq)
+ rhos = Mdot / ( 4. * M_PI * vs * rs * rs )
+ gtemp = gam - 1.
+ hs = 1. / ( 1. - cs_sq / (gam - 1.) )
+ Kval = hs * cs_sq * rhos**(-gtemp) / gam
+ Qdot = hs * hs * ( 1. - 3. * vs_sq )
+
+ logrmin = log10(rmin_bondi)
+ dlogr = (log10(rmax_bondi) - logrmin)/(1.*(N_points-1))
+
+ write(*,*)'More pars:',cs,vs,rhos,hs,Kval,Qdot,logrmin,dlogr
+
+ rhotmp=1.0d30
+ imin=1
+
+ do i=1,N_points
+ logr_bondi(i) = logrmin + dlogr*(i-1)
+ r_bondi(i) = 10.**(logr_bondi(i))
+ utmp = abs(r_bondi(i) - r_sonicpt_bondi)
+ if (utmp < rhotmp) then
+ rhotmp = utmp
+ imin = i
+ endif
+ enddo
+
+ rhotmp = -1. !!$ start with guess
+
+ do i=imin,N_points
+ rspher = r_bondi(i)
+ call find_bondi_solution( rspher, rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ if(rhotmp < initial_rho_abs_min) then
+ rhotmp = initial_rho_abs_min
+ utmp = Kval * rhotmp**gl_gamma / (gl_gamma - 1.)
+ endif
+ rho_bondi(i) = rhotmp
+ u_bondi(i) = utmp
+ v_bondi(i) = vtmp
+ end do
+
+ rhotmp = -1.
+
+ do i=imin-1,1,-1
+ rspher = r_bondi(i)
+ call find_bondi_solution( rspher, rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ if(rhotmp < initial_rho_abs_min) then
+ rhotmp = initial_rho_abs_min
+ utmp = K * rhotmp**gl_gamma / (gl_gamma - 1.)
+ endif
+ rho_bondi(i) = rhotmp
+ u_bondi(i) = utmp
+ v_bondi(i) = vtmp
+ enddo
+
+ write(*,*)"i=1:",r_bondi(1),rho_bondi(1),u_bondi(1),v_bondi(1)
+ write(*,*)"i=100:",r_bondi(100),rho_bondi(100),u_bondi(100),v_bondi(100)
+ write(*,*)"i=1000:",r_bondi(1000),rho_bondi(1000),u_bondi(1000),v_bondi(1000)
+ write(*,*)"i=1500:",r_bondi(1500),rho_bondi(1500),u_bondi(1500),v_bondi(1500)
+
+!!$ // find the derivative near r=M
+ rnew = 2.25 * M
+ j = floor ( 0.5 + (log10(rnew) - logrmin) / dlogr )
+ rhocheck = rho_bondi(j)
+ call find_bondi_solution(rnew,rhocheck, ucheck, vcheck, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ uisocheck = 4.0*vcheck/3.0
+
+ rnew = 0.25 * 3.02**2 * M/1.01
+ j = floor( 0.5 + (log10(rnew) - logrmin) / dlogr )
+ rhocheck2 = rho_bondi(j)
+ call find_bondi_solution( rnew, rhocheck2, ucheck2, vcheck2, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ drhodr = 100.0*(rhocheck2-rhocheck)/M
+
+ write(6,*)'Rhocheck:',rhocheck,rhocheck2,drhodr
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ xp=x(i,j,k)
+ yp=y(i,j,k)
+ zp=z(i,j,k)
+
+ riso = sqrt(xp*xp + yp*yp + zp*zp +1.0e-16)
+ xhat = xp/riso
+ yhat = yp/riso
+ zhat = zp/riso
+
+ if(riso < 1.0e-7) then
+ gxx(i,j,k) = 1.0e4
+ gyy(i,j,k) = 1.0e4
+ gzz(i,j,k) = 1.0e4
+ gxy(i,j,k) = 0.0
+ gxz(i,j,k) = 0.0
+ gyz(i,j,k) = 0.0
+ endif
+
+ alp(i,j,k) = 1.0/gxx(i,j,k)**2
+
+ if(riso > M) then
+ rsch = 0.25 * ( 2.*riso + M)**2 / riso
+ jb = floor( 0.5 + (log10(rsch) - logrmin) / dlogr )
+
+ if(jb > N_points)jb = N_points
+
+ rhotmp = rho_bondi(jb)
+ call find_bondi_solution( rsch,rhotmp, utmp, vtmp, rs, rhos, M, Mdot, Kval, gam, Qdot)
+ rho(i,j,k) = rhotmp
+ uiso = vtmp / (1.0 - M/2.0/riso) / (1.0+ M/2.0/riso)
+ else
+ if(riso > 0.5*M) then
+ rho(i,j,k) = rhocheck+drhodr*riso*(riso-M)/M
+ else
+ rho(i,j,k) = (rhocheck-drhodr*M/4.0)*(1.-cos(2.*M_PI*riso/M))/2.0
+ endif
+ utmp = Kval * rho(i,j,k)**( gam ) / (gam - 1.)
+ uiso = uisocheck * riso / M
+ endif
+ eps(i,j,k) = utmp/rhotmp
+
+ w_lorentz(i,j,k) = sqrt(1.0+gxx(i,j,k) * uiso**2)
+ velx(i,j,k) = -1.0*uiso * xhat / w_lorentz(i,j,k)
+ vely(i,j,k) = -1.0*uiso * yhat / w_lorentz(i,j,k)
+ velz(i,j,k) = -1.0*uiso * zhat / w_lorentz(i,j,k)
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ call Prim2ConGen(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k), &
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k), &
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k), &
+ tau(i,j,k),rho(i,j,k), &
+ velx(i,j,k),vely(i,j,k),velz(i,j,k), &
+ eps(i,j,k),press(i,j,k),w_lorentz(i,j,k))
+
+ end do
+ end do
+ end do
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+
+ return
+
+end subroutine GRHydro_Bondi_Iso
+
+subroutine find_bondi_solution(r, rho, u, v, rs, rhos, M, Mdot, Kval, gam, Qdot )
+ implicit none
+
+ CCTK_REAL :: r, rho, u, v, rs, rhos, M, Mdot, Kval, gam, Qdot
+ CCTK_REAL :: ur,r_sol, rho_old
+ CCTK_REAL :: f, df, dx, x_old, resid, jac
+ CCTK_REAL :: errx, x_orig, x
+ CCTK_INT :: n_iter, i_extra, doing_extra, keep_iterating, i_increase
+ CCTK_REAL :: vp, h, hp, term
+
+ CCTK_REAL :: newt_tol_b,small_bondi
+ CCTK_INT :: max_newt_iter_b, extra_newt_iter_b
+
+ max_newt_iter_b = 30
+ newt_tol_b = 1.0e-15
+ extra_newt_iter_b = 2
+ small_bondi = 1.0e-20
+
+!!$ if(r>8.1043 .and. r<8.1044)write(*,*)'init guess:',r,rho
+!!$ write(*,*)'init guess:',r,rho
+
+ if (rho < 0.) then
+ if( r > 0.9*rs .and. r < 1.1*rs ) then
+ rho = rhos
+ else
+ if(r < rs) then
+ ur = r**(-0.5)
+ else
+ ur = 0.5*r**(-1.5)
+ endif
+ rho = Mdot / (4.*M_PI * r * r * ur)
+ endif
+ endif
+
+!!$ if(r>8.1043 .and. r<8.1044)
+!!$ write(*,*)'init guess:',r,ur,rho,rs,rhos,Mdot
+!!$ if(r<1.0001e-10)write(*,*)'init guess:',r,ur,rho,rs,rhos,Mdot
+!!$ write(*,*)'init guess:',r,ur,rho,rs,rhos,Mdot
+
+ !!$ set global variables needed by residual function:
+ r_sol = r
+
+
+!!$ Use Newton's method to find rho:
+!!$ gnr_bondi( rho, NEWT_DIM_B, bondi_resid)
+ errx = 1.0
+ df=1.0
+ f=1.0
+ doing_extra = 0
+
+ rho_old=rho
+ x=rho
+
+ n_iter = 0
+
+!!$ Start the Newton-Raphson iterations :
+ keep_iterating = 1
+ do while( keep_iterating == 1 )
+
+ hp = Kval * gam * x**(gam - 2.) !!$ // dh/drho
+ h = 1. + hp * x / ( gam - 1. )
+ v = Mdot / ( 4. * M_PI * r_sol * r_sol * x )
+ vp = -v / x !!$ // dv/drho
+ term = 1. - 2.*M/r_sol + v*v
+ resid = -Qdot + h * h * term
+ jac = 2. * h *( hp*term + h*v*vp )
+ dx = -resid / jac
+ f = 0.5*resid**2
+ df = -2. * f
+
+ /* Save old values before calculating the new: */
+ errx = 0.
+ x_old = x
+
+ x=x+dx
+
+!!$ if(r>8.1043 .and. r<8.1044)write(*,*)'iter:',x,dx,resid,jac
+
+!!$ /****************************************/
+!!$ /* Calculate the convergence criterion */
+!!$ /****************************************/
+
+!!$ /* For the new criterion, always look at relative error in indep. variable: */
+!!$ // METHOD specific:
+ if(x==0) then
+ errx = abs(dx)
+ x = small_bondi
+ else
+ errx = abs(dx/x)
+ endif
+
+!!$ /*****************************************************************************/
+!!$ /* If we've reached the tolerance level, then just do a few extra iterations */
+!!$ /* before stopping */
+!!$ /*****************************************************************************/
+
+!!$ if(r>8.1043 .and. r<8.1044)write(*,*)'iter3:',errx,newt_tol_b,keep_iterating, &
+!!$ doing_extra,i_extra
+
+ if((abs(errx)<=newt_tol_b) .and. (doing_extra == 0) .and. (extra_newt_iter_b > 0)) &
+ doing_extra=1
+
+ if( doing_extra == 1 ) i_extra=i_extra+1
+
+ if( ((abs(errx) <= newt_tol_b).and.(doing_extra == 0)) .or. &
+ (i_extra > extra_newt_iter_b) .or. (n_iter >= (max_newt_iter_b-1)) ) &
+ keep_iterating = 0
+
+!!$ if(r>8.1043 .and. r<8.1044)write(*,*)'iter4:',errx,newt_tol_b,keep_iterating, &
+!!$ doing_extra,i_extra
+
+
+ n_iter=n_iter+1
+
+ end do
+
+ rho=x
+
+!!$ Calculate other quantities:
+ u = Kval * rho**( gam ) / (gam - 1.)
+ v = Mdot / ( 4. * M_PI * r * r * rho )
+
+!!$ if(r>8.1043 .and. r<8.1044)
+!!$ write(*,*)'final:',r,rho,u,v
+
+
+ return
+
+end subroutine find_bondi_solution
+
diff --git a/src/GRHydro_C2P2CM_eosomni.F90 b/src/GRHydro_C2P2CM_eosomni.F90
new file mode 100644
index 0000000..fefc1c9
--- /dev/null
+++ b/src/GRHydro_C2P2CM_eosomni.F90
@@ -0,0 +1,196 @@
+ /*@@
+ @file GRHydro_C2P2CM.F90
+ @date Sep 23, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ A test of the conservative <--> primitive variable exchange
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+
+ /*@@
+ @routine c2p2cM
+ @date Sep 23, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ Testing the conservative <--> primitive variable transformations.
+ The values before and after should match.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
+subroutine c2p2cM(CCTK_ARGUMENTS)
+
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_REAL :: det
+ CCTK_REAL :: uxx,uxy,uxz,uyy,uyz,uzz
+ CCTK_REAL :: gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send
+ CCTK_REAL :: dens_send,sx_send,sy_send,sz_send,tau_send
+ CCTK_REAL :: bconsx_send, bconsy_send, bconsz_send
+ CCTK_REAL :: rho_send,velx_send,vely_send,velz_send,eps_send
+ CCTK_REAL :: press_send,w_lorentz_send,x_send,y_send,z_send,r_send
+ CCTK_REAL :: bvcx_send, bvcy_send, bvcz_send, b2_send
+ CCTK_REAL :: C2P_failed
+ CCTK_INT :: epsnegative
+
+! begin EOS Omni vars
+ CCTK_REAL :: pmin(1), epsmin(1), local_gam(1), epsval(1)
+ CCTK_INT :: n,keytemp,anyerr,keyerr(1)
+ CCTK_REAL :: xpress(1),xtemp(1),xye(1),xeps(1),xrho(1)
+ n=1;keytemp=0;anyerr=0;keyerr(1)=0
+ xpress(1)=0.0d0;xtemp(1)=0.0d0;xye(1)=0.0d0;xeps(1)=0.0d0
+! end EOS Omni vars
+
+ call CCTK_WARN(1,"This test works only with Ideal_Fluid EoS")
+
+ x_send = 0.0d0
+ y_send = 0.0d0
+ z_send = 0.0d0
+ r_send = 0.0d0
+
+ gxx_send = 1.0d0
+ gyy_send = 1.0d0
+ gzz_send = 1.0d0
+ gxy_send = 0.0d0
+ gxz_send = 0.0d0
+ gyz_send = 0.0d0
+
+ det = 1.0d0
+
+ uxx = 1.0d0
+ uyy = 1.0d0
+ uzz = 1.0d0
+ uxy = 0.0d0
+ uxz = 0.0d0
+ uyz = 0.0d0
+
+! Initialize the velocity as GRHydro_Con2PrimM_pt may use these
+! values as initial guess for its Newton-Raphson procedure.
+ velx_send = 0.1d0
+ vely_send = 0.1d0
+ velz_send = 0.1d0
+
+ dens_send = 1.29047362d0
+ sx_send = 0.166666658d0
+ sy_send = 0.166666658d0
+ sz_send = 0.166666658d0
+ tau_send = 0.484123939d0
+
+ bvcx_send = Bx_init
+ bvcy_send = By_init
+ bvcz_send = Bz_init
+ bconsx_send = Bx_init
+ bconsy_send = By_init
+ bconsz_send = Bz_init
+
+ eps_send = 1.0d-6
+ press_send = 6.666666666666667d-7
+ w_lorentz_send = 1.0d0
+
+ epsnegative = 0
+
+ xrho = 1.0d-10
+ epsval = 1.0d0
+
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,epsval,xtemp,xye,pmin,keyerr,anyerr)
+
+ !! call EOS_Omni_EpsFromPress(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ !! xrho,xeps,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+ call EOS_Omni_EpsFromPress(1,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,xeps,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+
+ local_gam = 0.0d0
+ xrho = 1.0d0
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,epsval,xtemp,xye,local_gam,keyerr,anyerr)
+ local_gam = local_gam + 1.0
+
+ C2P_failed = 0.0d0
+
+ write(*,*) 'C2P2CM test: initial values.'
+ write(*,*) ' conservative variables: '
+ write(*,*) ' dens: ',dens_send
+ write(*,*) ' sx : ',sx_send
+ write(*,*) ' sy : ',sy_send
+ write(*,*) ' sz : ',sz_send
+ write(*,*) ' tau : ',tau_send
+ write(*,*) ' Bconsx : ',bconsx_send
+ write(*,*) ' Bconsy : ',bconsy_send
+ write(*,*) ' Bconsz : ',bconsz_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+
+ write(*,*) 'C2P2CM test: getting the associated primitive variables.'
+ call Con2PrimGenM(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,local_gam(1),dens_send,sx_send,sy_send,sz_send, &
+ tau_send,bconsx_send,bconsy_send,bconsz_send,0.d0,0.d0,rho_send,velx_send,vely_send,velz_send, &
+ eps_send,press_send,bvcx_send,bvcy_send,bvcz_send,b2_send,w_lorentz_send, &
+ gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send,&
+ uxx,uxy,uxz,uyy,uyz,uzz,det,&
+ epsnegative,C2P_failed)
+
+ !! call Con2PrimGenM(GRHydro_eos_handle,local_gam(1),dens_send,sx_send,sy_send,sz_send, &
+ !! tau_send,bconsx_send,bconsy_send,bconsz_send,rho_send,velx_send,vely_send,velz_send, &
+ !! eps_send,press_send,bvcx_send,bvcy_send,bvcz_send,b2_send,w_lorentz_send, &
+ !! gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send,&
+ !! uxx,uxy,uxz,uyy,uyz,uzz,det,&
+ !! epsnegative,C2P_failed)
+
+ write(*,*) 'C2P2CM test: the primitive variables are'
+ write(*,*) ' primitive variables: '
+ write(*,*) ' rho : ',rho_send
+ write(*,*) ' velx : ',velx_send
+ write(*,*) ' vely : ',vely_send
+ write(*,*) ' velz : ',velz_send
+ write(*,*) ' press : ',press_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+ write(*,*) ' C2P_failed : ',C2P_failed
+
+ write(*,*) 'C2P2CM test: converting back to conserved variables.'
+ call Prim2ConGenM(GRHydro_eos_handle,gxx_send, gxy_send, gxz_send, gyy_send, gyz_send, gzz_send, det, &
+ dens_send, sx_send, sy_send, sz_send, tau_send, bconsx_send, bconsy_send, bconsz_send, rho_send, &
+ velx_send, vely_send, velz_send, eps_send, press_send, bvcx_send, bvcy_send, bvcz_send, w_lorentz_send)
+
+ write(*,*) 'C2P2CM test: the conserved variables are'
+ write(*,*) ' conservative variables: '
+ write(*,*) ' dens: ',dens_send
+ write(*,*) ' sx : ',sx_send
+ write(*,*) ' sy : ',sy_send
+ write(*,*) ' sz : ',sz_send
+ write(*,*) ' tau : ',tau_send
+ write(*,*) ' Bconsx : ',bconsx_send
+ write(*,*) ' Bconsy : ',bconsy_send
+ write(*,*) ' Bconsz : ',bconsz_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+
+ STOP
+
+ return
+
+end subroutine c2p2cM
diff --git a/src/GRHydro_CylindricalExplosionM.F90 b/src/GRHydro_CylindricalExplosionM.F90
index bc8ab61..61a8ab0 100644
--- a/src/GRHydro_CylindricalExplosionM.F90
+++ b/src/GRHydro_CylindricalExplosionM.F90
@@ -70,9 +70,11 @@ subroutine GRHydro_cylindricalexplosionM(CCTK_ARGUMENTS)
!!$Adiabatic index for test
gam = (4.d0/3.d0)
-!!$Inner radius and outer radius
- r_inner = 8.d-1
- r_outer = 1.d0
+!!$Inner radius and outer radius (Komissarov's defaults)
+! r_inner = 8.d-1
+! r_outer = 1.d0
+ r_inner = cyl_r_inner
+ r_outer = cyl_r_outer
!!$Inner values
rhol = 1.d-4
diff --git a/src/GRHydro_MonopoleM.F90 b/src/GRHydro_MonopoleM.F90
index 6a6ea32..b8bee8c 100644
--- a/src/GRHydro_MonopoleM.F90
+++ b/src/GRHydro_MonopoleM.F90
@@ -56,7 +56,7 @@ subroutine GRHydro_MonopoleM(CCTK_ARGUMENTS)
velzl, velzr, epsl, epsr
CCTK_REAL :: bvcxl,bvcyl,bvczl,bvcxr,bvcyr,bvczr
CCTK_REAL :: ux,uy,uz,ut,tmp,tmp2,tmp3
-
+ CCTK_REAL :: rr2,rg2
nx = cctk_lsh(1)
ny = cctk_lsh(2)
@@ -71,11 +71,47 @@ subroutine GRHydro_MonopoleM(CCTK_ARGUMENTS)
vely(i,j,k) = 0.0
velz(i,j,k) = 0.0
eps(i,j,k) = 0.1
- if(i.eq.nx/2+1.and.j.eq.ny/2+1.and.k.eq.nz/2+1) then
- Bvecx(i,j,k)=0.1
+ if(CCTK_EQUALS(monopole_type,"Point")) then
+ if(i.eq.nx/2+1.and.j.eq.ny/2+1.and.k.eq.nz/2+1) then
+ Bvecx(i,j,k)=0.1
+ else
+ Bvecx(i,j,k)=0.0
+ endif
+ else if(CCTK_EQUALS(monopole_type,"Gauss")) then
+ rr2=x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2
+ rg2=R_Gauss*R_Gauss
+ if(rr2.lt.rg2) then
+ Bvecx(i,j,k) = exp(-1.0*rr2/rg2)-1.0/exp(1.0)
+ else
+ Bvecx(i,j,k) = 0.0
+ endif
+ else if(CCTK_EQUALS(monopole_type,"1dalt")) then
+ rr2=x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2
+ rg2=R_Gauss*R_Gauss
+ if(rr2.lt.rg2) then
+ Bvecx(i,j,k) = exp(-1.0*rr2/rg2)-1.0/exp(1.0)
+ else
+ Bvecx(i,j,k) = 0.0
+ endif
+ if(mod(i+j,2).eq.0)Bvecx(i,j,k)=-1.0*Bvecx(i,j,k)
+ else if(CCTK_EQUALS(monopole_type,"2dalt")) then
+ rr2=x(i,j,k)**2+y(i,j,k)**2+z(i,j,k)**2
+ rg2=R_Gauss*R_Gauss
+ if(rr2.lt.rg2) then
+ Bvecx(i,j,k) = exp(-1.0*rr2/rg2)-1.0/exp(1.0)
+ Bvecy(i,j,k) = exp(-1.0*rr2/rg2)-1.0/exp(1.0)
+ else
+ Bvecx(i,j,k) = 0.0
+ Bvecy(i,j,k) = 0.0
+ endif
+ if(mod(i+j,2).eq.0)then
+ Bvecx(i,j,k)=-1.0*Bvecx(i,j,k)
+ Bvecy(i,j,k)=-1.0*Bvecy(i,j,k)
+ endif
else
- Bvecx(i,j,k)=0.0
+ call CCTK_WARN(0,"Unrecognized monopole type!!!")
endif
+
Bvecy(i,j,k)=0.0
Bvecz(i,j,k)=0.0
diff --git a/src/GRHydro_P2C2PM_eosomni.F90 b/src/GRHydro_P2C2PM_eosomni.F90
new file mode 100644
index 0000000..276fc28
--- /dev/null
+++ b/src/GRHydro_P2C2PM_eosomni.F90
@@ -0,0 +1,183 @@
+ /*@@
+ @file GRHydro_P2C2PM.F90
+ @date Sep 25, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ A test of the conservative <--> primitive variable exchange
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+
+ /*@@
+ @routine p2c2pm
+ @date Sep 25, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ Testing the conservative <--> primitive variable transformations.
+ The values before and after should match.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
+subroutine p2c2pm(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_REAL :: det
+ CCTK_REAL :: uxx,uxy,uxz,uyy,uyz,uzz
+ CCTK_REAL :: gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send
+ CCTK_REAL :: dens_send,sx_send,sy_send,sz_send,tau_send
+ CCTK_REAL :: bconsx_send,bconsy_send,bconsz_send
+ CCTK_REAL :: rho_send(1),velx_send,vely_send,velz_send,eps_send(1)
+ CCTK_REAL :: press_send(1),w_lorentz_send,x_send,y_send,z_send,r_send
+ CCTK_REAL :: bvcx_send,bvcy_send,bvcz_send,b2_send
+ CCTK_REAL :: C2P_failed
+ CCTK_INT :: epsnegative
+
+! begin EOS Omni vars
+ CCTK_REAL :: pmin(1), epsmin(1), local_gam(1), epsval(1)
+ CCTK_INT :: n,keytemp,anyerr,keyerr(1)
+ CCTK_REAL :: xpress(1),xtemp(1),xye(1),xeps(1),xrho(1)
+ n=1;keytemp=0;anyerr=0;keyerr(1)=0
+ xpress(1)=0.0d0;xtemp(1)=0.0d0;xye(1)=0.0d0;xeps(1)=0.0d0
+! end EOS Omni vars
+
+ call CCTK_WARN(1,"This test works only with Ideal_Fluid EoS")
+
+ x_send = 0.0d0
+ y_send = 0.0d0
+ z_send = 0.0d0
+ r_send = 0.0d0
+
+ gxx_send = 1.0d0
+ gyy_send = 1.0d0
+ gzz_send = 1.0d0
+ gxy_send = 0.0d0
+ gxz_send = 0.0d0
+ gyz_send = 0.0d0
+
+ det = 1.0d0
+
+ uxx = 1.0d0
+ uyy = 1.0d0
+ uzz = 1.0d0
+ uxy = 0.0d0
+ uxz = 0.0d0
+ uyz = 0.0d0
+
+ rho_send = 1.29047362d0
+ velx_send = 0.166666658d0
+ vely_send = 0.166666658d0
+ velz_send = 0.166666658d0
+ eps_send = 0.484123939d0
+
+ bvcx_send = Bx_init
+ bvcy_send = By_init
+ bvcz_send = Bz_init
+ bconsx_send = Bx_init
+ bconsy_send = By_init
+ bconsz_send = Bz_init
+
+ w_lorentz_send = 1.d0/sqrt(1.0d0-velx_send*velx_send-vely_send*vely_send-velz_send*velz_send)
+
+ epsnegative = 0
+
+ xrho = 1.0d-10
+ epsval = 1.0d0
+
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ rho_send,eps_send,xtemp,xye,press_send,keyerr,anyerr)
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,epsval,xtemp,xye,pmin,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,xeps,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+
+ local_gam = 0.0d0
+ xrho = 1.0d0
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,GRHydro_eos_rf_prec,n,&
+ xrho,epsval,xtemp,xye,local_gam,keyerr,anyerr)
+ local_gam = local_gam + 1.0
+
+ C2P_failed = 0.0d0
+
+ write(*,*) 'P2C2PM test: the primitive variables are'
+ write(*,*) ' primitive variables: '
+ write(*,*) ' rho : ',rho_send
+ write(*,*) ' velx : ',velx_send
+ write(*,*) ' vely : ',vely_send
+ write(*,*) ' velz : ',velz_send
+ write(*,*) ' press : ',press_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+
+ write(*,*) 'P2C2PM test: converting back to conserved variables.'
+ call Prim2ConGenM(GRHydro_eos_handle,&
+ gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send,det, &
+ dens_send,sx_send,sy_send,sz_send,tau_send, &
+ bconsx_send,bconsy_send,bconsz_send, &
+ rho_send(1),velx_send,vely_send,velz_send,eps_send(1),press_send(1), &
+ bvcx_send,bvcy_send,bvcz_send,w_lorentz_send)
+
+ write(*,*) 'P2C2PM test: initial values.'
+ write(*,*) ' conservative variables: '
+ write(*,*) ' dens: ',dens_send
+ write(*,*) ' sx : ',sx_send
+ write(*,*) ' sy : ',sy_send
+ write(*,*) ' sz : ',sz_send
+ write(*,*) ' tau : ',tau_send
+ write(*,*) ' Bconsx : ',bconsx_send
+ write(*,*) ' Bconsy : ',bconsy_send
+ write(*,*) ' Bconsz : ',bconsz_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+
+ write(*,*) 'P2C2PM test: getting the associated primitive variables.'
+
+!! call Con2PrimGenM(GRHydro_eos_handle,local_gam(1),dens_send,sx_send,sy_send,sz_send, &
+ !! tau_send,bconsx_send,bconsy_send,bconsz_send,&
+ !! rho_send(1),velx_send,vely_send,velz_send, &
+ !! eps_send(1),press_send(1), &
+ !! bvcx_send,bvcy_send,bvcz_send,b2_send,&
+ !! w_lorentz_send, &
+ !! gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send,&
+ !! uxx,uxy,uxz,uyy,uyz,uzz,det,&
+ !! epsnegative,C2P_failed)
+
+ write(*,*) 'P2C2PM test: the primitive variables are'
+ write(*,*) ' primitive variables: '
+ write(*,*) ' rho : ',rho_send
+ write(*,*) ' velx : ',velx_send
+ write(*,*) ' vely : ',vely_send
+ write(*,*) ' velz : ',velz_send
+ write(*,*) ' press : ',press_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+ write(*,*) ' Bvecx : ',bvcx_send
+ write(*,*) ' Bvecy : ',bvcy_send
+ write(*,*) ' Bvecz : ',bvcz_send
+
+ STOP
+
+ return
+
+end subroutine p2c2pm
diff --git a/src/GRHydro_PoloidalMagFieldM.F90 b/src/GRHydro_PoloidalMagFieldM.F90
new file mode 100644
index 0000000..38763ed
--- /dev/null
+++ b/src/GRHydro_PoloidalMagFieldM.F90
@@ -0,0 +1,152 @@
+ /*@@
+ @file GRHydro_PoloidalMagFieldM.F90
+ @date Oct 31, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Poloidal Magnetic field implemented as in "General relativistic
+simulations of magnetized binary neutron star mergers" -
+by Yuk Tung Liu, Stuart L. Shapiro, Zachariah B. Etienne, and
+Keisuke Taniguchi - Phys. Rev. D 78, 024012 (2008)
+
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+ /*@@
+ @routine GRHydro_PoloidalMagFieldM
+ @date Oct 31, 2011
+ @author Bruno Mundim, Joshua Faber, Scott Noble
+ @desc
+ Poloidal Magnetic field implemented as in "General relativistic
+simulations of magnetized binary neutron star mergers" -
+by Yuk Tung Liu, Stuart L. Shapiro, Zachariah B. Etienne, and
+Keisuke Taniguchi - Phys. Rev. D 78, 024012 (2008)
+ @enddesc
+ @calls
+ @calledby
+ @history
+ Using GRHydro_ShockTubeM.F90 as a template.
+ @endhistory
+
+@@*/
+
+subroutine GRHydro_PoloidalMagFieldM(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz
+ CCTK_REAL :: det
+ CCTK_REAL :: dx,dy,dz
+ CCTK_REAL :: rhofac, delPcut, maxP_Pcut
+ CCTK_REAL :: Aphi, Ax, Ay, Az
+ CCTK_REAL :: rho_dx, rho_dy, rho_dz
+ CCTK_REAL :: press_dx, press_dy, press_dz
+ CCTK_REAL :: Aphi_dx, Aphi_dy, Aphi_dz
+ CCTK_REAL :: Ax_dy, Ax_dz, Ay_dx, Ay_dz
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ dx = CCTK_DELTA_SPACE(1)
+ dy = CCTK_DELTA_SPACE(2)
+ dz = CCTK_DELTA_SPACE(3)
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ rhofac = 1.0d0-rho(i,j,k)/poloidal_rho_max
+ delPcut = press(i,j,k)-poloidal_P_cut
+ maxP_Pcut = max(delPcut,0.0d0)
+ Aphi = poloidal_A_b*rhofac**poloidal_n_p*maxP_Pcut
+ Ax = -y(i,j,k)*Aphi
+ Ay = x(i,j,k)*Aphi
+ Az = 0.0
+
+!! write(*,*)'Before accessing rho(i,k,k)'
+!! write(*,*)'rho(',i,',',j,',',k,') = ', rho(i,j,k)
+!! write(*,*)'Ax, Ay, Az, Aphi = ', Ax, Ay, Az,Aphi
+!! write(*,*)'rhofac = ', rhofac
+!! write(*,*)'delPcut = ', delPcut
+!! write(*,*)'maxP_Pcut = ', maxP_Pcut
+
+ rho_dx = 0.5d0*(rho(i+1,j,k)-rho(i-1,j,k))/dx
+ rho_dy = 0.5d0*(rho(i,j+1,k)-rho(i,j-1,k))/dy
+ rho_dz = 0.5d0*(rho(i,j,k+1)-rho(i,j,k-1))/dz
+ press_dx = 0.5d0*(press(i+1,j,k)-press(i-1,j,k))/dx
+ press_dy = 0.5d0*(press(i,j+1,k)-press(i,j-1,k))/dy
+ press_dz = 0.5d0*(press(i,j,k+1)-press(i,j,k-1))/dz
+
+ Aphi_dx = poloidal_A_b*rhofac**(poloidal_n_p-1)*maxP_Pcut* &
+ ( rhofac*press_dx/delPcut - poloidal_n_p*rho_dx/poloidal_rho_max )
+ Aphi_dy = poloidal_A_b*rhofac**(poloidal_n_p-1)*maxP_Pcut* &
+ ( rhofac*press_dy/delPcut - poloidal_n_p*rho_dy/poloidal_rho_max )
+ Aphi_dz = poloidal_A_b*rhofac**(poloidal_n_p-1)*maxP_Pcut* &
+ ( rhofac*press_dz/delPcut - poloidal_n_p*rho_dz/poloidal_rho_max )
+
+ Ax_dy = -Aphi - y(i,j,k)*Aphi_dy
+ Ax_dz = y(i,j,k)*Aphi_dz
+ Ay_dx = Aphi + x(i,j,k)*Aphi_dx
+ Ay_dz = x(i,j,k)*Aphi_dz
+
+ Bvecx(i,j,k) = alp(i,j,k)*Ay_dz
+ Bvecy(i,j,k) = -alp(i,j,k)*Ax_dz
+ Bvecz(i,j,k) = alp(i,j,k)*(Ax_dy-Ay_dx)
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ if (CCTK_EQUALS(GRHydro_eos_type,"Polytype")) then
+ call Prim2ConPolyM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ else
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ end if
+
+ enddo
+ enddo
+ enddo
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+ return
+
+end subroutine GRHydro_PoloidalMagFieldM
+
+
diff --git a/src/GRHydro_RotorM.F90 b/src/GRHydro_RotorM.F90
new file mode 100644
index 0000000..6191b8a
--- /dev/null
+++ b/src/GRHydro_RotorM.F90
@@ -0,0 +1,166 @@
+ /*@@
+ @file GRHydro_RotorM.F90
+ @date Aug 15, 2011
+ @author Scott Noble, Joshua Faber, Bruno Mundim
+ @desc
+ Cylindrical magnetized rotor test (see Etienne et al.).
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+#include "cctk_Functions.h"
+#include "GRHydro_Macros.h"
+
+#define velx(i,j,k) vel(i,j,k,1)
+#define vely(i,j,k) vel(i,j,k,2)
+#define velz(i,j,k) vel(i,j,k,3)
+#define sx(i,j,k) scon(i,j,k,1)
+#define sy(i,j,k) scon(i,j,k,2)
+#define sz(i,j,k) scon(i,j,k,3)
+#define Bvecx(i,j,k) Bvec(i,j,k,1)
+#define Bvecy(i,j,k) Bvec(i,j,k,2)
+#define Bvecz(i,j,k) Bvec(i,j,k,3)
+#define Bconsx(i,j,k) Bcons(i,j,k,1)
+#define Bconsy(i,j,k) Bcons(i,j,k,2)
+#define Bconsz(i,j,k) Bcons(i,j,k,3)
+
+
+ /*@@
+ @routine GRHydro_Rotor
+ @date Aug 11, 2011
+ @author Scott Noble, Joshua Faber, Bruno Mundim
+ @desc
+ Initial data for magnetic rotor - parameters from Etienne et al. 2010
+ @enddesc
+ @calls
+ @calledby
+ @history
+ Using GRHydro_ShockTubeM.F90 as a template.
+ @endhistory
+
+@@*/
+
+subroutine GRHydro_RotorM(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ CCTK_INT :: i, j, k, nx, ny, nz
+ CCTK_REAL :: radius, det, v_max
+ CCTK_REAL :: rhoin, rhoout, pressin, pressout
+ CCTK_REAL :: bvcxl,bvcyl,bvczl
+ CCTK_REAL :: tmp,tmp2,gam,r_rot
+
+ CCTK_INT :: use_smoothing
+ CCTK_REAL :: rsmooth_rel,rfact
+
+!!$Hardwired bfield and gamma values
+ bvcxl = 1.0
+ bvcyl = 0.0
+ bvczl = 0.0
+
+!!$Adiabatic index for test
+ gam = (5.d0/3.d0)
+
+!!$radius of rotor is 0.1
+ r_rot = 0.1
+
+!!$Maximum velocity is 0.995
+ v_max = 0.995
+
+!!$Inner values
+ rhoin = 10.d0
+ pressin = 1.d0
+
+!!$Outer values
+ rhoout = 1.d0
+ pressout = 1.d0
+
+
+!!$ Smooth the edge? Define the radius in relative terms if so
+ use_smoothing = 0
+ rsmooth_rel = 0.05
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ if(v_max>1.0) then
+ write(*,*)"No superluminal speeds!!!! v_max=",v_max," reset to 0.995"
+ v_max=0.995
+ endif
+
+ do i=1,nx
+ do j=1,ny
+ do k=1,nz
+
+ radius = sqrt(x(i,j,k)**2+y(i,j,k)**2)
+
+ if(radius.le.r_rot) then
+ rho(i,j,k) = rhoin
+ press(i,j,k) = pressin
+ velx(i,j,k) = v_max/r_rot*y(i,j,k)
+ vely(i,j,k) = -1.d0*v_max/r_rot*x(i,j,k)
+ velz(i,j,k) = 0.d0
+ else if((use_smoothing.eq.1) .and. &
+ ((radius.gt.r_rot) .and. &
+ (radius.le.((1.0+rsmooth_rel)*r_rot)))) then
+ rfact = (radius/r_rot - 1.d0) / rsmooth_rel
+ rho(i,j,k) = rfact*rhoout + (1.d0-rfact)*rhoin
+ press(i,j,k) = rfact*pressout + (1.d0-rfact)*pressin
+ velx(i,j,k) = (1.d0-rfact)*v_max * y(i,j,k) / radius
+ velx(i,j,k) = -1.d0*(1.d0-rfact)*v_max * x(i,j,k) / radius
+ velz(i,j,k) = 0.d0
+ else
+ rho(i,j,k) = rhoout
+ press(i,j,k) = pressout
+ velx(i,j,k) = 0.d0
+ vely(i,j,k) = 0.d0
+ velz(i,j,k) = 0.d0
+ endif
+ eps(i,j,k)=press(i,j,k)/(gam-1.d0)/rho(i,j,k)
+
+ Bvecx(i,j,k)=bvcxl
+ Bvecy(i,j,k)=bvcyl
+ Bvecz(i,j,k)=bvczl
+
+ det=SPATIAL_DETERMINANT(gxx(i,j,k),gxy(i,j,k),gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k))
+
+ if (CCTK_EQUALS(GRHydro_eos_type,"Polytype")) then
+ call Prim2ConPolyM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ else
+ call Prim2ConGenM(GRHydro_eos_handle,gxx(i,j,k),gxy(i,j,k),&
+ gxz(i,j,k),gyy(i,j,k),gyz(i,j,k),gzz(i,j,k),&
+ det, dens(i,j,k),sx(i,j,k),sy(i,j,k),sz(i,j,k),&
+ tau(i,j,k),Bconsx(i,j,k),Bconsy(i,j,k),Bconsz(i,j,k),rho(i,j,k),&
+ velx(i,j,k),vely(i,j,k),velz(i,j,k),&
+ eps(i,j,k),press(i,j,k),Bvecx(i,j,k),Bvecy(i,j,k),Bvecz(i,j,k),&
+ w_lorentz(i,j,k))
+ end if
+
+ enddo
+ enddo
+ enddo
+
+ densrhs = 0.d0
+ srhs = 0.d0
+ taurhs = 0.d0
+ Bconsrhs = 0.d0
+
+
+ return
+
+end subroutine GRHydro_RotorM
+
+
diff --git a/src/GRHydro_ShockTubeM.F90 b/src/GRHydro_ShockTubeM.F90
index a864054..6418baf 100644
--- a/src/GRHydro_ShockTubeM.F90
+++ b/src/GRHydro_ShockTubeM.F90
@@ -137,7 +137,8 @@ subroutine GRHydro_shocktubeM(CCTK_ARGUMENTS)
epsl = 1500.d0
epsr = 1.5d-2
-!!$ The following shocktubes are from Balsara 2001 .
+!!$ The following shocktubes are from Balsara, ApJSS 132 p83 (2001),
+!!$ http://adsabs.harvard.edu/abs/2001ApJS..132...83B.
!!$ All use n=1600 cells, over domain x=[-0.5,0.5]
!!$ All assume ideal-gas or gamma-law EOS, the first test uses GAMMA=2. while the rest GAMMA=5./3.
@@ -274,7 +275,8 @@ subroutine GRHydro_shocktubeM(CCTK_ARGUMENTS)
epsl = 1.5d0*5.d0/rhol
epsr = 1.5d0*5.3d0/rhor
-!!$ The following 9 tests are from Komissarov 1999 .
+!!$ The following 9 tests are from Komissarov MNRAS 303 p343 (1999),
+!!$ http://adsabs.harvard.edu/abs/1999MNRAS.303..343K.
!!$ Note that the data is specified in terms of the 4-velocity, so some conversion is necessary.
!!$ All assume ideal-gas or gamma-law EOS with GAMMA=4./3.
diff --git a/src/make.code.defn b/src/make.code.defn
index 7bbf06c..138dc4e 100644
--- a/src/make.code.defn
+++ b/src/make.code.defn
@@ -16,7 +16,15 @@ SRCS = GRHydro_C2P2C.F90 \
GRHydro_P2C2PM.F90 \
GRHydro_P2C2PM_polytype.F90 \
GRHydro_MonopoleM.F90 \
- GRHydro_CylindricalExplosionM.F90
+ GRHydro_CylindricalExplosionM.F90 \
+ GRHydro_RotorM.F90 \
+ GRHydro_AdvectedLoopM.F90 \
+ GRHydro_AlfvenWaveM.F90 \
+ GRHydro_Bondi.c \
+ GRHydro_BondiM.c \
+ GRHydro_PoloidalMagFieldM.F90 \
+ GRHydro_Bondi_new.F90 \
+ GRHydro_BondiM_new.F90
# Subdirectories containing source files
SUBDIRS =