Scine::Readuct  5.0.0
This is the SCINE module ReaDuct.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
TaskFactory.h
Go to the documentation of this file.
1 
7 #ifndef READUCT_TASKFACTORY_H_
8 #define READUCT_TASKFACTORY_H_
9 
12 #include "Tasks/BondOrderTask.h"
14 #include "Tasks/HessianTask.h"
15 #include "Tasks/IrcTask.h"
18 #include "Tasks/SinglePointTask.h"
19 #include "Tasks/Task.h"
21 #include <algorithm>
22 #include <memory>
23 #include <string>
24 #include <vector>
25 
26 namespace Scine {
27 namespace Readuct {
28 
32 class TaskFactory {
33  public:
35  TaskFactory() = delete;
45  static std::unique_ptr<Task> produce(std::string name, const std::vector<std::string>& input,
46  const std::vector<std::string>& output, std::shared_ptr<Core::Log> logger = nullptr) {
47  std::unique_ptr<Task> task;
48  std::transform(name.begin(), name.end(), name.begin(), ::toupper);
49  if (name == "OPT" || name == "GEOOPT" || name == "GEOMETRYOPTIMIZATION" || name == "GEOMETRY_OPTIMIZATION") {
50  task = std::make_unique<GeometryOptimizationTask>(input, output, logger);
51  }
52  else if (name == "AFIR" || name == "AFIROPT" || name == "AFIROPTIMIZATION" || name == "AFIR_OPTIMIZATION") {
53  task = std::make_unique<AfirOptimizationTask>(input, output, logger);
54  }
55  else if (name == "TS" || name == "TSOPT" || name == "TRANSITIONSTATE_OPTIMIZATION" ||
56  name == "TRANSITION_STATE_OPTIMIZATION") {
57  task = std::make_unique<TsOptimizationTask>(input, output, logger);
58  }
59  else if (name == "SP" || name == "SINGLEPOINT" || name == "ENERGY" || name == "SINGLE_POINT") {
60  task = std::make_unique<SinglePointTask>(input, output, logger);
61  }
62  else if (name == "IRC" || name == "IRCOPT") {
63  task = std::make_unique<IrcTask>(input, output, logger);
64  }
65  else if (name == "NT" || name == "NEWTONTRAJECTORY" || name == "NTOPTIMIZATION" ||
66  name == "NEWTONTRAJECTORYOPTIMIZATION" || name == "NTOPT" || name == "NT1") {
67  task = std::make_unique<NtOptimizationTask>(input, output);
68  }
69  else if (name == "NT2" || name == "NEWTONTRAJECTORY2" || name == "NTOPTIMIZATION2" ||
70  name == "NEWTONTRAJECTORYOPTIMIZATION2" || name == "NTOPT2") {
71  task = std::make_unique<NtOptimization2Task>(input, output);
72  }
73  else if (name == "HESSIAN" || name == "FREQUENCY_ANALYSIS" || name == "FREQUENCYANALYSIS" || name == "FREQ" ||
74  name == "FREQUENCY" || name == "FREQUENCIES") {
75  task = std::make_unique<HessianTask>(input, output, logger);
76  }
77  else if (name == "BONDS" || name == "BOND_ORDERS" || name == "BONDORDERS" || name == "BOS" || name == "BO") {
78  task = std::make_unique<BondOrderTask>(input, output, logger);
79  }
80  else if (name == "BSPLINE_INTERPOLATION" || name == "BSPLINEINTERPOLATION" || name == "BSPLINE") {
81  task = std::make_unique<BSplineInterpolationTask>(input, output, logger);
82  }
83  else {
84  throw std::runtime_error("The requested task '" + name + "' is not available.\n");
85  }
86  return task;
87  }
88 }; // namespace Readuct
89 
90 } // namespace Readuct
91 } // namespace Scine
92 
93 #endif // READUCT_TASKFACTORY_H_
static std::unique_ptr< Task > produce(std::string name, const std::vector< std::string > &input, const std::vector< std::string > &output, std::shared_ptr< Core::Log > logger=nullptr)
Contstructs a Task with a given set of input and output systems.
Definition: TaskFactory.h:45
A factory generating Tasks by name (mainly).
Definition: TaskFactory.h:32
TaskFactory()=delete
Has only static functions.