diff options
author | bmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2010-05-02 20:59:32 +0000 |
---|---|---|
committer | bmundim <bmundim@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2010-05-02 20:59:32 +0000 |
commit | 74fb1e6ea34d6e03a35ff6c158f455c39904bf5a (patch) | |
tree | d8f9b95f30517e9bafd8c67301c7383bc8beb76e /src/GRHydro_RegisterVars.cc | |
parent | 291e94d06b30046227fb075cbfa97b9656339d5a (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.cc | 105 |
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"); + } +} + |