From 679c69d87682f22d1c453839eb652fa473692115 Mon Sep 17 00:00:00 2001 From: schnetter Date: Fri, 6 Feb 2004 10:31:19 +0000 Subject: Add a "file read thorn" that allows the file reader to be used to read in ADM variables. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/IDFileADM/trunk@2 0b95e693-0e4f-0410-b80e-c7e9d0d71539 --- src/IDFileADM_ParamCheck.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++ src/make.code.defn | 8 +++++ 2 files changed, 94 insertions(+) create mode 100644 src/IDFileADM_ParamCheck.c create mode 100644 src/make.code.defn (limited to 'src') diff --git a/src/IDFileADM_ParamCheck.c b/src/IDFileADM_ParamCheck.c new file mode 100644 index 0000000..c5a1df7 --- /dev/null +++ b/src/IDFileADM_ParamCheck.c @@ -0,0 +1,86 @@ +/* $Header$ */ + +#include +#include + +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +static void callback (int idx, const char * optstring, void * callback_arg); + +/** Ensure that all ADMBase initial data that are supposed to be read + from a file are actually scheduled for the file reader. */ +void IDFileADM_ParamCheck (CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + char * variable_is_read; + int i; + int nvars; + + variable_is_read = malloc (CCTK_NumVars()); + assert (variable_is_read); + for (i=0; i= 0); + + if (CCTK_EQUALS(initial_lapse, "read from file")) { + int const ialp = CCTK_VarIndex ("ADMBase::alp"); + assert (ialp >= 0); + if (! variable_is_read[ialp]) { + CCTK_PARAMWARN ("The lapse is initialised using the file reader, but the group ADMBase::lapse has not been scheduled to be read. Please set the parameter \"IO::filereader_ID_files\" accordingly."); + } + } + + if (CCTK_EQUALS(initial_shift, "read from file")) { + int const ibetax = CCTK_VarIndex ("ADMBase::betax"); + int const ibetay = CCTK_VarIndex ("ADMBase::betay"); + int const ibetaz = CCTK_VarIndex ("ADMBase::betaz"); + assert (ibetax >= 0); + assert (ibetay >= 0); + assert (ibetaz >= 0); + if (! variable_is_read[ibetax] + || ! variable_is_read[ibetay] + || ! variable_is_read[ibetaz]) { + CCTK_PARAMWARN ("The shift is initialised using the file reader, but the group ADMBase::shift has not been scheduled to be read. Please set the parameter \"IO::filereader_ID_files\" accordingly."); + } + } + + if (CCTK_EQUALS(initial_shift, "read from file")) { + int const igxx = CCTK_VarIndex ("ADMBase::gxx"); + int const igxy = CCTK_VarIndex ("ADMBase::gxy"); + int const igxz = CCTK_VarIndex ("ADMBase::gxz"); + int const igyy = CCTK_VarIndex ("ADMBase::gyy"); + int const igyz = CCTK_VarIndex ("ADMBase::gyz"); + int const igzz = CCTK_VarIndex ("ADMBase::gzz"); + assert (igxx >= 0); + assert (igxy >= 0); + assert (igxz >= 0); + assert (igyy >= 0); + assert (igyz >= 0); + assert (igzz >= 0); + if (! variable_is_read[igxx] + || ! variable_is_read[igxy] + || ! variable_is_read[igxz] + || ! variable_is_read[igyy] + || ! variable_is_read[igyz] + || ! variable_is_read[igzz]) { + CCTK_PARAMWARN ("The metric is initialised using the file reader, but the group ADMBase::metric has not been scheduled to be read. Please set the parameter \"IO::filereader_ID_files\" accordingly."); + } + } + + free (variable_is_read); +} + +/** Mark a variable as to be read from the file reader. */ +static void callback (int idx, const char * optstring, void * callback_arg) +{ + assert (idx>=0 && idx