diff options
author | Roland Haas <roland.haas@physics.gatech.edu> | 2012-09-07 23:18:34 -0400 |
---|---|---|
committer | Roland Haas <roland.haas@physics.gatech.edu> | 2012-09-07 23:18:34 -0400 |
commit | 48dcc7f4a3c0d67d3c572af47167d64258ee27a4 (patch) | |
tree | f6e7d458e0f57540a84ce9a2950edec10f3da632 /Carpet/Carpet/src/Requirements.cc | |
parent | fcd89f6124a498e089648ba2d203f768fa6ca073 (diff) |
Carpet: insert routines into Boundary group to capture boundary update
reads and writes
Diffstat (limited to 'Carpet/Carpet/src/Requirements.cc')
-rw-r--r-- | Carpet/Carpet/src/Requirements.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/Requirements.cc b/Carpet/Carpet/src/Requirements.cc index 434943db0..4cf769e57 100644 --- a/Carpet/Carpet/src/Requirements.cc +++ b/Carpet/Carpet/src/Requirements.cc @@ -1374,6 +1374,72 @@ namespace Carpet { os << old_vars << std::endl; } + // scheduled routines to handle boundary and symmetry conditions + extern "C" + void CarpetCheckReadsBeforeBoundary(CCTK_ARGUMENTS) + { + DECLARE_CCTK_ARGUMENTS; + int num_vars, err; + vector<CCTK_INT> vars, faces, widths, tables; + + num_vars = Boundary_SelectedGVs(cctkGH, 0, NULL, NULL, NULL, NULL, NULL); + if (num_vars < 0) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error retrieving number of selected GVs: %d", num_vars); + } + vars.resize(num_vars); + faces.resize(num_vars); + widths.resize(num_vars); + tables.resize(num_vars); + + /* get selected vars for all bc */ + err = Boundary_SelectedGVs(cctkGH, num_vars, &vars[0], &faces[0], &widths[0], &tables[0], + NULL); + if (err<0) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error in Boundary_SelectedGVs for all boundary conditions"); + } else if (err != num_vars) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Boundary_SelectedGVs returned %d selected variables for " + "all boundary conditions, but %d expected\n", err, + num_vars); + } + + Requirements_CheckReads(cctkGH, num_vars, &vars[0], "interior"); + } + + extern "C" + void CarpetNotifyWritesAfterBoundary(CCTK_ARGUMENTS) + { + DECLARE_CCTK_ARGUMENTS; + int num_vars, err; + vector<CCTK_INT> vars, faces, widths, tables; + + num_vars = Boundary_SelectedGVs(cctkGH, 0, NULL, NULL, NULL, NULL, NULL); + if (num_vars < 0) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error retrieving number of selected GVs: %d", num_vars); + } + vars.resize(num_vars); + faces.resize(num_vars); + widths.resize(num_vars); + tables.resize(num_vars); + + /* get selected vars for all bc */ + err = Boundary_SelectedGVs(cctkGH, num_vars, &vars[0], &faces[0], &widths[0], &tables[0], + NULL); + if (err<0) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Error in Boundary_SelectedGVs for all boundary conditions"); + } else if (err != num_vars) { + CCTK_VWarn(0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Boundary_SelectedGVs returned %d selected variables for " + "all boundary conditions, but %d expected\n", err, + num_vars); + } + + Requirements_NotifyWrites(cctkGH, num_vars, &vars[0], "boundary;boundary_ghostzones"); + } template ostream& output (ostream& os, const vector<clause_t>& v); |