20 #include <mxx/comm.hpp> 
   21 #include "CVs/CVManager.h" 
   22 #include "Drivers/DriverException.h" 
   23 #include "Loggers/Logger.h" 
   24 #include "Validator/ObjectRequirement.h" 
   25 #include "Methods/Method.h" 
   26 #include "ResourceHandler.h" 
   35     ResourceHandler::ResourceHandler(
 
   36         mxx::comm&& world, mxx::comm&& comm, uint walkerid,
 
   37         const std::vector<Method*>& methods, 
CVManager* cvmanager) : 
 
   38     world_(std::move(world)), comm_(std::move(comm)), walkerid_(walkerid), nwalkers_(1), 
 
   39     methods_(methods), cvmanager_(cvmanager), hook_(nullptr), inputs_(0)
 
   44     void ResourceHandler::ConfigureHook(
class Hook* hook)
 
   63         reader.parse(JsonSchema::Simulation, schema);
 
   64         validator.
Parse(schema, 
"#");
 
   70         auto nwalkers = json.get(
"walkers", 1).asInt();
 
   71         if(json[
"input"].isArray() && json[
"input"].size() != nwalkers)
 
   72             throw BuildException({
"#/input: Number of inputs do not match requested walkers."});
 
   74         std::vector<std::string> inputs;
 
   75         for(
int i = 0; i < nwalkers; ++i)
 
   77             if(json[
"input"].isArray())
 
   78                 inputs.push_back(json[
"input"][i].asString());
 
   80                 inputs.push_back(json[
"input"].asString());
 
   85         auto wcomm = mxx::comm(world);
 
   86         if(wcomm.size() % nwalkers != 0) 
 
   87             throw BuildException({
"#/walkers: Allocated processors not divisible by number of walkers."});
 
   90         int ppw = wcomm.size()/nwalkers;
 
   91         int walkerid = wcomm.rank()/ppw;
 
   92         auto comm = wcomm.split(walkerid);
 
   97         for(
auto& cv : json[
"CVs"])
 
  100             if(cv.isMember(
"name"))
 
  109         std::vector<Method*> methods; 
 
  110         for(
auto& m : json[
"methods"])
 
  115         if(json.isMember(
"logger"))
 
  118         auto* rh = 
new ResourceHandler(std::move(world), std::move(comm), walkerid, methods, cvmanager);
 
  119         rh->inputs_ = inputs;
 
  120         rh->nwalkers_ = nwalkers;
 
  129         for(
auto& m : methods_)
 
bool HasErrors()
Check if errors have occured. 
 
Collective variable manager. 
 
Class containing a snapshot of the current simulation in time. 
 
void SetSnapshot(class Snapshot *snapshot)
Sets the active snapshot. 
 
virtual void Parse(Value json, const std::string &path) override
Parse JSON value to generate Requirement(s). 
 
Exception to be thrown when building the Driver fails. 
 
class CVManager * cvmanager_
Collective variable manager. 
 
std::vector< std::string > GetErrors()
Get list of error messages. 
 
~ResourceHandler()
Destructor. 
 
Base class for hooks into the simultion engines. 
 
Requirements on an object. 
 
mxx::comm comm_
MPI communicator containing processors for specific walker. 
 
static ResourceHandler * Build(const Json::Value &json, const MPI_Comm &world)
Build a new ResourceHandler from JSON. 
 
class Logger * logger_
CV logger. 
 
static Method * BuildMethod(const Json::Value &json, const MPI_Comm &world, const MPI_Comm &comm, const std::string &path)
Build a derived method from JSON node. 
 
void AddListener(EventListener *listener)
Add a listener to the hook. 
 
void SetCVManager(class CVManager *cvmanager)
Sets the current CV manager. 
 
class Snapshot * snapshot_
Snapshot of system state (pointer). 
 
Base class for logging SSAGES data. 
 
class Hook * hook_
Hook pointer. 
 
Class that handles SSAGES resources for a simulation. 
 
static Logger * Build(const Json::Value &json, const MPI_Comm &world, const MPI_Comm &comm, const std::string &path)
Build a Logger from JSON node. 
 
static void AddCVtoMap(const std::string &name, uint id)
Register CV name with map. 
 
std::vector< class Method * > methods_
Vector of advanced sampling methods. 
 
ResourceHandler(mxx::comm &&world, mxx::comm &&comm, uint walkerid, const std::vector< class Method * > &methods, class CVManager *cvmanager)
Constructor. 
 
static CollectiveVariable * BuildCV(const Json::Value &json, const std::string &path)
Set up collective variable. 
 
virtual void Validate(const Value &json, const std::string &path) override
Validate JSON value.