14ConnectorFactory* ConnectorFactory::s_factory = 0;
15std::mutex ConnectorFactory::connector_mutex;
17ConnectorFactory::ConnectorFactory()
19 reg(
"MassFlowController",
20 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
21 {
return new MassFlowController(r0, r1, name); });
22 reg(
"PressureController",
23 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
24 {
return new PressureController(r0, r1, name); });
26 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
27 {
return new Valve(r0, r1, name); });
29 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
30 {
return new Wall(r0, r1, name); });
33ConnectorFactory* ConnectorFactory::factory() {
34 std::unique_lock<std::mutex> lock(connector_mutex);
36 s_factory =
new ConnectorFactory;
42 std::unique_lock<std::mutex> lock(connector_mutex);
49 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
51 return shared_ptr<ConnectorNode>(
52 ConnectorFactory::factory()->create(model, r0, r1, name));
57 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
59 auto dev = std::dynamic_pointer_cast<FlowDevice>(
63 "Detected incompatible ConnectorNode type '{}'", model);
68shared_ptr<FlowDevice>
newFlowDevice(
const string& model,
const string& name)
71 "After Cantera 3.1, Reactors must be provided as parameters.");
77 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
79 auto wall = std::dynamic_pointer_cast<WallBase>(
83 "Detected incompatible ConnectorNode type '{}'", model);
88shared_ptr<WallBase>
newWall(
const string& model,
const string& name)
91 "After Cantera 3.1, Reactors must be provided as parameters.");
92 return newWall(model,
nullptr,
nullptr, name);
Header file for base class WallBase.
Base class for exceptions thrown by Cantera classes.
void deleteFactory() override
Virtual abstract function that deletes the factory.
void reg(const string &name, function< ConnectorNode *(Args...)> f)
Register a new object construction function.
Some flow devices derived from class FlowDevice.
shared_ptr< FlowDevice > newFlowDevice(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a FlowDevice object of the specified type.
shared_ptr< WallBase > newWall(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a WallBase object of the specified type.
shared_ptr< ConnectorNode > newConnectorNode(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a ConnectorNode object of the specified type.
Namespace for the Cantera kernel.
void warn_deprecated(const string &source, const AnyBase &node, const string &message)
A deprecation warning for syntax in an input file.