aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Requirements
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2013-04-04 12:43:14 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2013-04-04 12:43:14 +0200
commita2a996243971db0c9eb4b10f93a00c8bb16c2b5c (patch)
treede639d9f3ca47bf52d4dd67d55e873d5a80c15ae /Carpet/Requirements
parente713314ded779a9716f474ae0d0cd5aff66e6ea4 (diff)
Requirements: Move gridpoint class to a separate file
Diffstat (limited to 'Carpet/Requirements')
-rw-r--r--Carpet/Requirements/src/Requirements.cc248
-rw-r--r--Carpet/Requirements/src/gridpoint.cc205
-rw-r--r--Carpet/Requirements/src/gridpoint.hh71
-rw-r--r--Carpet/Requirements/src/make.code.defn2
4 files changed, 278 insertions, 248 deletions
diff --git a/Carpet/Requirements/src/Requirements.cc b/Carpet/Requirements/src/Requirements.cc
index 538c96188..0584a5972 100644
--- a/Carpet/Requirements/src/Requirements.cc
+++ b/Carpet/Requirements/src/Requirements.cc
@@ -23,6 +23,7 @@
#include <clauses.hh>
#include <location.hh>
#include <util.hh>
+#include <gridpoint.hh>
using namespace std;
@@ -51,253 +52,6 @@ namespace Requirements {
// while time level cycling; routines should specify how many time
// levels they require/provide
- bool there_was_an_error = false;
- bool there_was_a_warning = false;
-
-
- // Represents which have valid information and which do not.
- // This will later be indexed by rl, map etc.
- // Currently only works with unigrid.
- class gridpoint_t {
- bool i_interior, i_boundary, i_ghostzones, i_boundary_ghostzones;
- public:
- gridpoint_t():
- i_interior(false), i_boundary(false), i_ghostzones(false),
- i_boundary_ghostzones(false)
- {}
-
- // Construct an object with information about which points are
- // valid, assuming that a function with the given clause has just
- // been run
- gridpoint_t(clause_t const& clause):
- i_interior(clause.everywhere or clause.interior),
- i_boundary(clause.everywhere or clause.boundary),
- i_ghostzones(clause.everywhere),
- i_boundary_ghostzones(clause.everywhere or clause.boundary_ghostzones)
- {}
- // Accessors
- bool interior() const;
- bool boundary() const;
- bool ghostzones() const;
- bool boundary_ghostzones() const;
- void set_interior(bool b, location_t &l);
- void set_boundary(bool b, location_t &l);
- void set_ghostzones(bool b, location_t &l);
- void set_boundary_ghostzones(bool b, location_t &l);
-
- void check_state(clause_t const& clause,
- cFunctionData const* function_data,
- int vi, int rl, int m, int tl) const;
- void report_error(cFunctionData const* function_data,
- int vi, int rl, int m, int tl,
- char const* what, char const* where) const;
- void report_warning(cFunctionData const* function_data,
- int vi, int rl, int m, int tl,
- char const* what, char const* where) const;
- void update_state(clause_t const& clause, location_t &loc);
-
- // Input/Output helpers
- void input (istream& is);
- void output (ostream& os) const;
- void output_location (location_t &l, int changed) const;
- };
-
- // Accessors
- bool gridpoint_t::interior() const { return i_interior; }
- bool gridpoint_t::boundary() const { return i_boundary; }
- bool gridpoint_t::ghostzones() const { return i_ghostzones; }
- bool gridpoint_t::boundary_ghostzones() const { return i_boundary_ghostzones; }
- void gridpoint_t::set_interior(bool b, location_t &l)
- {
- if (i_interior == b)
- return;
- i_interior = b;
- output_location(l, BIT_INTERIOR);
- }
- void gridpoint_t::set_boundary(bool b, location_t &l)
- {
- if (i_boundary == b)
- return;
- i_boundary = b;
- output_location(l, BIT_BOUNDARY);
- }
- void gridpoint_t::set_ghostzones(bool b, location_t &l)
- {
- if (i_ghostzones == b)
- return;
- i_ghostzones = b;
- output_location(l, BIT_GHOSTZONES);
- }
- void gridpoint_t::set_boundary_ghostzones(bool b, location_t &l)
- {
- if (i_boundary_ghostzones == b)
- return;
- i_boundary_ghostzones = b;
- output_location(l, BIT_BOUNDARY_GHOSTZONES);
- }
-
- inline ostream& operator<< (ostream& os, const gridpoint_t& a) {
- a.output(os);
- return os;
- }
-
-
-
- // Check that all the parts of the grid variables read by a function
- // are valid. This will be called before the function is executed.
- void gridpoint_t::check_state(clause_t const& clause,
- cFunctionData const* const function_data,
- int const vi,
- int const rl, int const m, int const tl)
- const
- {
- if (not i_interior) {
- if (clause.everywhere or clause.interior) {
- report_error(function_data, vi, rl, m, tl,
- "calling function", "interior");
- }
- }
- if (not i_boundary) {
- if (clause.everywhere or clause.boundary) {
- report_error(function_data, vi, rl, m, tl,
- "calling function", "boundary");
- }
- }
- if (not i_ghostzones) {
- if (clause.everywhere) {
- report_error(function_data, vi, rl, m, tl,
- "calling function", "ghostzones");
- }
- }
- if (not i_boundary_ghostzones) {
- if (clause.everywhere or clause.boundary_ghostzones) {
- report_error(function_data, vi, rl, m, tl,
- "calling", "boundary-ghostzones");
- }
- }
- }
-
- void gridpoint_t::report_error(cFunctionData const* const function_data,
- int const vi,
- int const rl, int const m, int const tl,
- char const* const what,
- char const* const where) const
- {
- char* const fullname = CCTK_FullName(vi);
- ostringstream state;
- state << "current state: " << *this << std::endl;
- if (function_data) {
- // The error is related to a scheduled function
- CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Schedule READS clause not satisfied: "
- "Function %s::%s in %s: "
- "Variable %s reflevel=%d map=%d timelevel=%d: "
- "%s not valid for %s. %s",
- function_data->thorn, function_data->routine,
- function_data->where,
- fullname, rl, m, tl,
- where, what, state.str().c_str());
- } else {
- // The error is not related to a scheduled function
- CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Schedule READS clause not satisfied: "
- "Variable %s reflevel=%d map=%d timelevel=%d: "
- "%s not valid for %s. %s",
- fullname, rl, m, tl,
- where, what, state.str().c_str());
- }
- free(fullname);
- there_was_an_error = true;
- }
-
- void gridpoint_t::report_warning(cFunctionData const* const function_data,
- int const vi,
- int const rl, int const m, int const tl,
- char const* const what,
- char const* const where) const
- {
- char* const fullname = CCTK_FullName(vi);
- ostringstream state;
- state << "current state: " << *this << std::endl;
- if (function_data) {
- // The error is related to a scheduled function
- CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Schedule WRITES clause is superfluous: "
- "Function %s::%s in %s: "
- "Variable %s reflevel=%d map=%d timelevel=%d: "
- "%s already valid for %s. %s",
- function_data->thorn, function_data->routine,
- function_data->where,
- fullname, rl, m, tl,
- where, what, state.str().c_str());
- } else {
- // The error is not related to a scheduled function
- CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Schedule WRITES clause already satisfied: "
- "Variable %s reflevel=%d map=%d timelevel=%d: "
- "%s already valid for %s. %s",
- fullname, rl, m, tl,
- where, what, state.str().c_str());
- }
- free(fullname);
- there_was_a_warning = true;
- }
-
- // Update this object to reflect the fact that some parts of some
- // variables are now valid after a function has been called
- void gridpoint_t::update_state(clause_t const& clause, location_t &loc)
- {
- int where = 0;
- if (clause.everywhere or clause.interior) {
- if (!i_interior)
- where |= BIT_INTERIOR;
- i_interior = true;
- }
- if (clause.everywhere or clause.boundary) {
- if (!i_boundary)
- where |= BIT_BOUNDARY;
- i_boundary = true;
- }
- if (clause.everywhere) {
- if (!i_ghostzones)
- where |= BIT_GHOSTZONES;
- i_ghostzones = true;
- }
- if (clause.everywhere or clause.boundary_ghostzones) {
- if (!i_boundary_ghostzones)
- where |= BIT_BOUNDARY_GHOSTZONES;
- i_boundary_ghostzones = true;
- }
- if (where)
- output_location(loc, where);
- }
-
- void gridpoint_t::output(ostream& os) const
- {
- os << "(";
- if (i_interior) os << "interior;";
- if (i_boundary) os << "boundary;";
- if (i_ghostzones) os << "ghostzones;";
- if (i_boundary_ghostzones) os << "boundary_ghostzones;";
- os << ")";
- }
-
- // Some readable and parsable debug output
- void gridpoint_t::output_location(location_t& l, int changed) const
- {
- DECLARE_CCTK_PARAMETERS;
- if (!print_changes)
- return;
-
- cout << "LOC: " << l << " "
- << ( (changed&BIT_INTERIOR) ?"(IN:":"(in:" ) << i_interior
- << ( (changed&BIT_BOUNDARY) ?",BO:":",bo:" ) << i_boundary
- << ( (changed&BIT_GHOSTZONES) ?",GH:":",gh:" ) << i_ghostzones
- << ( (changed&BIT_BOUNDARY_GHOSTZONES)?",BG:":",bg:" ) << i_boundary_ghostzones
- << ") " << l.info << "\n";
- }
-
-
// The state (valid/invalid) of parts of the grid for all
// timelevels, maps, refinement levels and variables
class all_state_t {
diff --git a/Carpet/Requirements/src/gridpoint.cc b/Carpet/Requirements/src/gridpoint.cc
new file mode 100644
index 000000000..ceaa8d96d
--- /dev/null
+++ b/Carpet/Requirements/src/gridpoint.cc
@@ -0,0 +1,205 @@
+
+#include <cctk.h>
+#include <cctk_Parameters.h>
+
+#include <Requirements.hh>
+
+#include <gridpoint.hh>
+#include <util.hh>
+
+namespace Requirements {
+
+ using namespace std;
+
+ bool there_was_an_error = false;
+ bool there_was_a_warning = false;
+
+ // Accessors
+ bool gridpoint_t::interior() const { return i_interior; }
+ bool gridpoint_t::boundary() const { return i_boundary; }
+ bool gridpoint_t::ghostzones() const { return i_ghostzones; }
+ bool gridpoint_t::boundary_ghostzones() const { return i_boundary_ghostzones; }
+ void gridpoint_t::set_interior(bool b, location_t &l)
+ {
+ if (i_interior == b)
+ return;
+ i_interior = b;
+ output_location(l, BIT_INTERIOR);
+ }
+ void gridpoint_t::set_boundary(bool b, location_t &l)
+ {
+ if (i_boundary == b)
+ return;
+ i_boundary = b;
+ output_location(l, BIT_BOUNDARY);
+ }
+ void gridpoint_t::set_ghostzones(bool b, location_t &l)
+ {
+ if (i_ghostzones == b)
+ return;
+ i_ghostzones = b;
+ output_location(l, BIT_GHOSTZONES);
+ }
+ void gridpoint_t::set_boundary_ghostzones(bool b, location_t &l)
+ {
+ if (i_boundary_ghostzones == b)
+ return;
+ i_boundary_ghostzones = b;
+ output_location(l, BIT_BOUNDARY_GHOSTZONES);
+ }
+
+ // Check that all the parts of the grid variables read by a function
+ // are valid. This will be called before the function is executed.
+ void gridpoint_t::check_state(clause_t const& clause,
+ cFunctionData const* const function_data,
+ int const vi,
+ int const rl, int const m, int const tl)
+ const
+ {
+ if (not i_interior) {
+ if (clause.everywhere or clause.interior) {
+ report_error(function_data, vi, rl, m, tl,
+ "calling function", "interior");
+ }
+ }
+ if (not i_boundary) {
+ if (clause.everywhere or clause.boundary) {
+ report_error(function_data, vi, rl, m, tl,
+ "calling function", "boundary");
+ }
+ }
+ if (not i_ghostzones) {
+ if (clause.everywhere) {
+ report_error(function_data, vi, rl, m, tl,
+ "calling function", "ghostzones");
+ }
+ }
+ if (not i_boundary_ghostzones) {
+ if (clause.everywhere or clause.boundary_ghostzones) {
+ report_error(function_data, vi, rl, m, tl,
+ "calling", "boundary-ghostzones");
+ }
+ }
+ }
+
+ void gridpoint_t::report_error(cFunctionData const* const function_data,
+ int const vi,
+ int const rl, int const m, int const tl,
+ char const* const what,
+ char const* const where) const
+ {
+ char* const fullname = CCTK_FullName(vi);
+ ostringstream state;
+ state << "current state: " << *this << std::endl;
+ if (function_data) {
+ // The error is related to a scheduled function
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Schedule READS clause not satisfied: "
+ "Function %s::%s in %s: "
+ "Variable %s reflevel=%d map=%d timelevel=%d: "
+ "%s not valid for %s. %s",
+ function_data->thorn, function_data->routine,
+ function_data->where,
+ fullname, rl, m, tl,
+ where, what, state.str().c_str());
+ } else {
+ // The error is not related to a scheduled function
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Schedule READS clause not satisfied: "
+ "Variable %s reflevel=%d map=%d timelevel=%d: "
+ "%s not valid for %s. %s",
+ fullname, rl, m, tl,
+ where, what, state.str().c_str());
+ }
+ free(fullname);
+ there_was_an_error = true;
+ }
+
+ void gridpoint_t::report_warning(cFunctionData const* const function_data,
+ int const vi,
+ int const rl, int const m, int const tl,
+ char const* const what,
+ char const* const where) const
+ {
+ char* const fullname = CCTK_FullName(vi);
+ ostringstream state;
+ state << "current state: " << *this << std::endl;
+ if (function_data) {
+ // The error is related to a scheduled function
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Schedule WRITES clause is superfluous: "
+ "Function %s::%s in %s: "
+ "Variable %s reflevel=%d map=%d timelevel=%d: "
+ "%s already valid for %s. %s",
+ function_data->thorn, function_data->routine,
+ function_data->where,
+ fullname, rl, m, tl,
+ where, what, state.str().c_str());
+ } else {
+ // The error is not related to a scheduled function
+ CCTK_VWarn(CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Schedule WRITES clause already satisfied: "
+ "Variable %s reflevel=%d map=%d timelevel=%d: "
+ "%s already valid for %s. %s",
+ fullname, rl, m, tl,
+ where, what, state.str().c_str());
+ }
+ free(fullname);
+ there_was_a_warning = true;
+ }
+
+ // Update this object to reflect the fact that some parts of some
+ // variables are now valid after a function has been called
+ void gridpoint_t::update_state(clause_t const& clause, location_t &loc)
+ {
+ int where = 0;
+ if (clause.everywhere or clause.interior) {
+ if (!i_interior)
+ where |= BIT_INTERIOR;
+ i_interior = true;
+ }
+ if (clause.everywhere or clause.boundary) {
+ if (!i_boundary)
+ where |= BIT_BOUNDARY;
+ i_boundary = true;
+ }
+ if (clause.everywhere) {
+ if (!i_ghostzones)
+ where |= BIT_GHOSTZONES;
+ i_ghostzones = true;
+ }
+ if (clause.everywhere or clause.boundary_ghostzones) {
+ if (!i_boundary_ghostzones)
+ where |= BIT_BOUNDARY_GHOSTZONES;
+ i_boundary_ghostzones = true;
+ }
+ if (where)
+ output_location(loc, where);
+ }
+
+ void gridpoint_t::output(ostream& os) const
+ {
+ os << "(";
+ if (i_interior) os << "interior;";
+ if (i_boundary) os << "boundary;";
+ if (i_ghostzones) os << "ghostzones;";
+ if (i_boundary_ghostzones) os << "boundary_ghostzones;";
+ os << ")";
+ }
+
+ // Some readable and parsable debug output
+ void gridpoint_t::output_location(location_t& l, int changed) const
+ {
+ DECLARE_CCTK_PARAMETERS;
+ if (!print_changes)
+ return;
+
+ cout << "LOC: " << l << " "
+ << ( (changed&BIT_INTERIOR) ?"(IN:":"(in:" ) << i_interior
+ << ( (changed&BIT_BOUNDARY) ?",BO:":",bo:" ) << i_boundary
+ << ( (changed&BIT_GHOSTZONES) ?",GH:":",gh:" ) << i_ghostzones
+ << ( (changed&BIT_BOUNDARY_GHOSTZONES)?",BG:":",bg:" ) << i_boundary_ghostzones
+ << ") " << l.info << "\n";
+ }
+
+}
diff --git a/Carpet/Requirements/src/gridpoint.hh b/Carpet/Requirements/src/gridpoint.hh
new file mode 100644
index 000000000..acc98d66f
--- /dev/null
+++ b/Carpet/Requirements/src/gridpoint.hh
@@ -0,0 +1,71 @@
+#ifndef GRIDPOINT_HH
+#define GRIDPOINT_HH
+
+#include <iostream>
+
+#include <cctk_Schedule.h>
+#include <clause.hh>
+#include <location.hh>
+
+using namespace std;
+
+namespace Requirements {
+
+ extern bool there_was_an_error;
+ extern bool there_was_a_warning;
+
+ // Represents which have valid information and which do not.
+ // This will later be indexed by rl, map etc.
+ // Currently only works with unigrid.
+ class gridpoint_t {
+ bool i_interior, i_boundary, i_ghostzones, i_boundary_ghostzones;
+ public:
+ gridpoint_t():
+ i_interior(false), i_boundary(false), i_ghostzones(false),
+ i_boundary_ghostzones(false)
+ {}
+
+ // Construct an object with information about which points are
+ // valid, assuming that a function with the given clause has just
+ // been run
+ gridpoint_t(clause_t const& clause):
+ i_interior(clause.everywhere or clause.interior),
+ i_boundary(clause.everywhere or clause.boundary),
+ i_ghostzones(clause.everywhere),
+ i_boundary_ghostzones(clause.everywhere or clause.boundary_ghostzones)
+ {}
+ // Accessors
+ bool interior() const;
+ bool boundary() const;
+ bool ghostzones() const;
+ bool boundary_ghostzones() const;
+ void set_interior(bool b, location_t &l);
+ void set_boundary(bool b, location_t &l);
+ void set_ghostzones(bool b, location_t &l);
+ void set_boundary_ghostzones(bool b, location_t &l);
+
+ void check_state(clause_t const& clause,
+ cFunctionData const* function_data,
+ int vi, int rl, int m, int tl) const;
+ void report_error(cFunctionData const* function_data,
+ int vi, int rl, int m, int tl,
+ char const* what, char const* where) const;
+ void report_warning(cFunctionData const* function_data,
+ int vi, int rl, int m, int tl,
+ char const* what, char const* where) const;
+ void update_state(clause_t const& clause, location_t &loc);
+
+ // Input/Output helpers
+ void input (istream& is);
+ void output (ostream& os) const;
+ void output_location (location_t &l, int changed) const;
+ };
+
+
+ inline ostream& operator<< (ostream& os, const gridpoint_t& a) {
+ a.output(os);
+ return os;
+ }
+}
+
+#endif
diff --git a/Carpet/Requirements/src/make.code.defn b/Carpet/Requirements/src/make.code.defn
index e9acc3f35..6a43416b3 100644
--- a/Carpet/Requirements/src/make.code.defn
+++ b/Carpet/Requirements/src/make.code.defn
@@ -1,7 +1,7 @@
# Main make.code.defn file for thorn Requirements -*-Makefile-*-
# Source files in this directory
-SRCS = Requirements.cc clause.cc clauses.cc util.cc all_clauses.cc location.cc
+SRCS = Requirements.cc clause.cc clauses.cc util.cc all_clauses.cc location.cc gridpoint.cc
# Subdirectories containing source files
SUBDIRS =