diff options
author | bmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2010-09-29 21:47:21 +0000 |
---|---|---|
committer | bmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2010-09-29 21:47:21 +0000 |
commit | d95f7bc4e19ff9d991e17417b63318ea63d18491 (patch) | |
tree | 66e5076c45f9755c76392ce7b9e1151cbca39c80 /src/GRHydro_RegisterVarsM.cc | |
parent | 2a6108bcba664c662dde90c1893d87a6f5e7211d (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.cc | 107 |
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"); + } +} + |