aboutsummaryrefslogtreecommitdiff
path: root/src/GRHydro_RegisterVarsM.cc
diff options
context:
space:
mode:
authorbmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45>2010-09-29 21:47:21 +0000
committerbmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45>2010-09-29 21:47:21 +0000
commitd95f7bc4e19ff9d991e17417b63318ea63d18491 (patch)
tree66e5076c45f9755c76392ce7b9e1151cbca39c80 /src/GRHydro_RegisterVarsM.cc
parent2a6108bcba664c662dde90c1893d87a6f5e7211d (diff)
Current RIT GRMHD code contributions:
Add the magnetized counterparts for several GRHydro routines. Adjust interface.ccl, param.ccl and schedule.ccl appropriately. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinEvolve/GRHydro/trunk@158 c83d129a-5a75-4d5a-9c4d-ed3a5855bf45
Diffstat (limited to 'src/GRHydro_RegisterVarsM.cc')
-rw-r--r--src/GRHydro_RegisterVarsM.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/GRHydro_RegisterVarsM.cc b/src/GRHydro_RegisterVarsM.cc
new file mode 100644
index 0000000..f17254e
--- /dev/null
+++ b/src/GRHydro_RegisterVarsM.cc
@@ -0,0 +1,107 @@
+// GRHydro_RegisterVars.cc
+//
+// converted from F90 to improve readability and maintainability
+//
+// Frank Loeffler
+
+#include <cstdio>
+#include <string>
+
+#include "cctk.h"
+#include "cctk_Arguments.h"
+#include "cctk_Parameters.h"
+
+using namespace std;
+
+// Utility functions to register variables with MoL
+// Note: We could check for the return value here, but MoL issues a
+// level 0 warning in that case anyway. If that changes in the
+// future, a check can simply be inserted here.
+static void register_evolved(string v1, string v2)
+{
+ MoLRegisterEvolvedGroup(CCTK_GroupIndex(v1.c_str()), CCTK_GroupIndex(v2.c_str()));
+}
+static void register_constrained(string v1)
+{
+ MoLRegisterConstrainedGroup(CCTK_GroupIndex(v1.c_str()));
+}
+static void register_saveandrestore(string v1)
+{
+ MoLRegisterSaveAndRestoreGroup(CCTK_GroupIndex(v1.c_str()));
+}
+
+// Main function called by Cactus to register variables with MoL
+
+extern "C"void GRHydro_RegisterM(CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ // We need some aliased functions, so we first check if they are available
+ string needed_funs[5] = {"MoLRegisterEvolvedGroup",
+ "MoLRegisterConstrainedGroup",
+ "MoLRegisterSaveAndRestoreGroup",
+ "MoLRegisterEvolved",
+ "MoLRegisterConstrained"};
+ for (int i = 0; i < 5; i++)
+ if (!CCTK_IsFunctionAliased(needed_funs[i].c_str()))
+ CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "The function \"%s\" has not been aliased!",
+ needed_funs[i].c_str());
+
+ // Now we can set which variables have to be registered as which type with MoL
+ register_constrained("HydroBase::rho");
+ register_constrained("HydroBase::press");
+ register_constrained("HydroBase::eps");
+ register_constrained("HydroBase::vel");
+ register_constrained("GRHydro::w_lorentz");
+
+ if (CCTK_EQUALS(evolution_method, "GRHydro"))
+ {
+ // dens and scon
+ register_evolved("GRHydro::dens", "GRHydro::densrhs");
+ register_evolved("GRHydro::scon", "GRHydro::srhs");
+ register_evolved("HydroBase::Bvec", "GRHydro::Bvecrhs");
+
+ // tau
+ if (CCTK_EQUALS(GRHydro_eos_type, "General"))
+ register_evolved("GRHydro::tau" , "GRHydro::taurhs");
+ else if (CCTK_EQUALS(GRHydro_eos_type, "Polytype"))
+ register_constrained("GRHydro::tau");
+ else
+ CCTK_WARN(0, "Don't recognize the type of EOS!");
+
+ // lapse, metric, curv
+ register_saveandrestore("admbase::lapse");
+ register_saveandrestore("admbase::metric");
+ register_saveandrestore("admbase::curv");
+
+ // shift
+ if (!CCTK_EQUALS(initial_shift, "none"))
+ {
+ if (CCTK_EQUALS(shift_evolution_method, "Comoving"))
+ {
+ register_constrained("admbase::shift");
+ register_evolved("GRHydro::GRHydro_coords", "GRHydro::GRHydro_coords_rhs");
+ }
+ else
+ register_saveandrestore("admbase::shift");
+ }
+
+ // tracer
+ if (evolve_tracer != 0)
+ register_evolved("GRHydro::GRHydro_cons_tracers", "GRHydro::GRHydro_tracer_rhs");
+
+ // particles
+ if (number_of_particles > 0)
+ register_evolved("GRHydro::particles", "GRHydro::particle_rhs");
+ }
+ else if (CCTK_EQUALS(evolution_method, "none"))
+ {
+ register_constrained("GRHydro::dens");
+ register_constrained("GRHydro::scon");
+ register_constrained("GRHydro::tau");
+ register_constrained("HydroBase::Bvec");
+ }
+}
+