Cantera  3.1.0a2
Loading...
Searching...
No Matches
ReactorFactory.cpp
Go to the documentation of this file.
1//! @file ReactorFactory.cpp
2
3// This file is part of Cantera. See License.txt in the top-level directory or
4// at https://cantera.org/license.txt for license and copyright information.
5
15#include "cantera/zeroD/IdealGasConstPressureReactor.h"
18
19namespace Cantera
20{
21
22ReactorFactory* ReactorFactory::s_factory = 0;
23std::mutex ReactorFactory::reactor_mutex;
24
25ReactorFactory::ReactorFactory()
26{
27 reg("Reservoir", []() { return new Reservoir(); });
28 reg("Reactor", []() { return new Reactor(); });
29 reg("ConstPressureReactor", []() { return new ConstPressureReactor(); });
30 reg("FlowReactor", []() { return new FlowReactor(); });
31 reg("IdealGasReactor", []() { return new IdealGasReactor(); });
32 reg("IdealGasConstPressureReactor", []() { return new IdealGasConstPressureReactor(); });
33 reg("ExtensibleReactor", []() { return new ReactorDelegator<Reactor>(); });
34 reg("ExtensibleIdealGasReactor",
35 []() { return new ReactorDelegator<IdealGasReactor>(); });
36 reg("ExtensibleConstPressureReactor",
37 []() { return new ReactorDelegator<ConstPressureReactor>(); });
38 reg("ExtensibleIdealGasConstPressureReactor",
39 []() { return new ReactorDelegator<IdealGasConstPressureReactor>(); });
40 reg("ExtensibleMoleReactor",
41 []() { return new ReactorDelegator<MoleReactor>(); });
42 reg("ExtensibleConstPressureMoleReactor",
43 []() { return new ReactorDelegator<ConstPressureMoleReactor>(); });
44 reg("ExtensibleIdealGasMoleReactor",
45 []() { return new ReactorDelegator<IdealGasMoleReactor>(); });
46 reg("ExtensibleIdealGasConstPressureMoleReactor",
47 []() { return new ReactorDelegator<IdealGasConstPressureMoleReactor>(); });
48 reg("IdealGasConstPressureMoleReactor", []() { return new
49 IdealGasConstPressureMoleReactor(); });
50 reg("IdealGasMoleReactor", []() { return new IdealGasMoleReactor(); });
51 reg("ConstPressureMoleReactor", []() { return new ConstPressureMoleReactor(); });
52 reg("MoleReactor", []() { return new MoleReactor(); });
53}
54
55ReactorFactory* ReactorFactory::factory() {
56 std::unique_lock<std::mutex> lock(reactor_mutex);
57 if (!s_factory) {
58 s_factory = new ReactorFactory;
59 }
60 return s_factory;
61}
62
64 std::unique_lock<std::mutex> lock(reactor_mutex);
65 delete s_factory;
66 s_factory = 0;
67}
68
69shared_ptr<ReactorBase> newReactor(const string& model)
70{
71 warn_deprecated("newReactor",
72 "Creation of empty reactor objects is deprecated in Cantera 3.1 and will be \n"
73 "removed thereafter; reactor contents should be provided in the constructor.");
74 return shared_ptr<ReactorBase>(ReactorFactory::factory()->create(model));
75}
76
77shared_ptr<ReactorBase> newReactor(
78 const string& model, shared_ptr<Solution> contents, const string& name)
79{
80 // once empty reactors are no longer supported, the create factory method should
81 // support passing a Solution object and a name
82 auto ret = shared_ptr<ReactorBase>(ReactorFactory::factory()->create(model));
83 ret->setSolution(contents);
84 ret->setName(name);
85 return ret;
86}
87
88shared_ptr<ReactorBase> newReactor3(const string& model)
89{
90 warn_deprecated("newReactor3", "To be removed after Cantera 3.1.");
91 return newReactor(model);
92}
93
94}
void reg(const string &name, function< ReactorBase *(Args...)> f)
Register a new object construction function.
Definition FactoryBase.h:80
void deleteFactory() override
Virtual abstract function that deletes the factory.
shared_ptr< ReactorBase > newReactor3(const string &model)
Create a Reactor object of the specified type.
shared_ptr< ReactorBase > newReactor(const string &model)
Create a Reactor object of the specified type.
Namespace for the Cantera kernel.
Definition AnyMap.cpp:564
void warn_deprecated(const string &source, const AnyBase &node, const string &message)
A deprecation warning for syntax in an input file.
Definition AnyMap.cpp:1926