aboutsummaryrefslogtreecommitdiff
path: root/src/GRHydro_RegisterVars.cc
diff options
context:
space:
mode:
authorbmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45>2010-05-02 20:59:32 +0000
committerbmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45>2010-05-02 20:59:32 +0000
commit74fb1e6ea34d6e03a35ff6c158f455c39904bf5a (patch)
treed8f9b95f30517e9bafd8c67301c7383bc8beb76e /src/GRHydro_RegisterVars.cc
parent291e94d06b30046227fb075cbfa97b9656339d5a (diff)
file/parameter string replacement from whisky to GRHydro
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinEvolve/GRHydro/trunk@112 c83d129a-5a75-4d5a-9c4d-ed3a5855bf45
Diffstat (limited to 'src/GRHydro_RegisterVars.cc')
-rw-r--r--src/GRHydro_RegisterVars.cc105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/GRHydro_RegisterVars.cc b/src/GRHydro_RegisterVars.cc
new file mode 100644
index 0000000..8720f74
--- /dev/null
+++ b/src/GRHydro_RegisterVars.cc
@@ -0,0 +1,105 @@
+// 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_Register(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");
+
+ // 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");
+ }
+}
+