aboutsummaryrefslogtreecommitdiff
path: root/CarpetDev/CarpetIOF5/src/util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'CarpetDev/CarpetIOF5/src/util.cc')
-rw-r--r--CarpetDev/CarpetIOF5/src/util.cc70
1 files changed, 65 insertions, 5 deletions
diff --git a/CarpetDev/CarpetIOF5/src/util.cc b/CarpetDev/CarpetIOF5/src/util.cc
index 15e01fba7..ce3c83f5e 100644
--- a/CarpetDev/CarpetIOF5/src/util.cc
+++ b/CarpetDev/CarpetIOF5/src/util.cc
@@ -46,6 +46,18 @@ namespace CarpetIOF5 {
// Indentation
int indent_t::level = 0;
+ indent_t::indent_t()
+ {
+ if (debug) cout << *this << "{{{\n";
+ ++level;
+ }
+
+ indent_t::~indent_t()
+ {
+ --level;
+ if (debug) cout << *this << "}}}\n";
+ }
+
ostream& indent_t::output(ostream& os) const
{
return os << string(width*level, ' ');
@@ -139,12 +151,36 @@ namespace CarpetIOF5 {
create_filename (cGH const *const cctkGH,
string const basename,
int const proc,
+ io_dir_t const io_dir,
bool const create_directories)
{
DECLARE_CCTK_PARAMETERS;
- bool const use_IO_out_dir = strcmp(out_dir, "") == 0;
- string path = use_IO_out_dir ? IO_out_dir : out_dir;
+ char const *IO_dir = NULL;
+ char const *F5_dir = NULL;
+ switch (io_dir) {
+ case io_dir_input:
+ IO_dir = IO_filereader_ID_dir;
+ F5_dir = filereader_ID_dir;
+ break;
+ case io_dir_output:
+ IO_dir = IO_out_dir;
+ F5_dir = out_dir;
+ break;
+ case io_dir_recover:
+ IO_dir = IO_recover_dir;
+ F5_dir = recover_dir;
+ break;
+ case io_dir_checkpoint:
+ IO_dir = IO_checkpoint_dir;
+ F5_dir = checkpoint_dir;
+ break;
+ default:
+ assert(0);
+ }
+
+ bool const use_IO_dir = strcmp(F5_dir, "") == 0;
+ string path = use_IO_dir ? IO_dir : F5_dir;
if (create_subdirs) {
{
@@ -308,12 +344,36 @@ namespace CarpetIOF5 {
transform (name.begin(), name.end(), name.begin(), ::tolower);
string const sep = "::";
size_t const pos = name.find(sep);
- if (pos != string::npos) {
- name.replace (pos, sep.size(), ".");
- }
+ assert (pos != string::npos);
+ name.replace (pos, sep.size(), ".");
return name;
}
+ void
+ interpret_fieldname(cGH const *const cctkGH, string fieldname, int& vi)
+ {
+ string const sep = ".";
+ size_t const pos = fieldname.find(sep);
+ if (pos == string::npos) {
+ // The field name is not a Cactus group or variable
+ vi = -1;
+ return;
+ }
+ fieldname.replace (pos, sep.size(), "::");
+
+ vi = CCTK_VarIndex(fieldname.c_str());
+ if (vi < 0) {
+ int const gi = CCTK_GroupIndex(fieldname.c_str());
+ if (gi < 0) {
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Unknown group variable name \"%s\"", fieldname.c_str());
+ return;
+ }
+ vi = CCTK_FirstVarIndexI(gi);
+ assert (vi>=0);
+ }
+ }
+
char const *const grid_structure = "Grid Structure v5";