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.