www.mooseframework.org
AppFactory.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include <vector>
13 
14 #include "MooseApp.h"
15 
16 // Forward declarations
17 class InputParameters;
18 
22 #define registerApp(name) AppFactory::instance().reg<name>(#name)
23 
27 using MooseAppPtr = std::shared_ptr<MooseApp>;
28 
33 {
34  virtual MooseAppPtr build(const InputParameters & params) = 0;
35  virtual InputParameters buildParameters() = 0;
36  virtual ~AppFactoryBuildInfoBase() = default;
37 
38  std::size_t _app_creation_count = 0;
39 };
40 template <typename T>
42 {
43  virtual MooseAppPtr build(const InputParameters & params) override
44  {
45  return std::make_shared<T>(params);
46  }
47  virtual InputParameters buildParameters() override { return T::validParams(); }
48 };
49 
50 using AppFactoryBuildInfoMap = std::map<std::string, std::unique_ptr<AppFactoryBuildInfoBase>>;
51 
56 {
57 public:
62  static AppFactory & instance();
63 
64  virtual ~AppFactory();
65 
70  static MooseAppPtr createAppShared(const std::string & default_app_type,
71  int argc,
72  char ** argv,
73  std::unique_ptr<Parser> parser,
74  MPI_Comm comm_word = MPI_COMM_WORLD);
75 
80  static MooseAppPtr createAppShared(const std::string & default_app_type,
81  int argc,
82  char ** argv,
83  MPI_Comm comm_word = MPI_COMM_WORLD);
84 
89  template <typename T>
90  void reg(const std::string & name);
91 
97  InputParameters getValidParams(const std::string & name);
98 
106  MooseAppPtr createShared(const std::string & app_type,
107  const std::string & name,
108  InputParameters parameters,
109  MPI_Comm COMM_WORLD_IN);
110 
114  const auto & registeredObjects() const { return _name_to_build_info; }
115 
119  bool isRegistered(const std::string & app_name) const
120  {
121  return _name_to_build_info.count(app_name);
122  }
123 
127  std::size_t createdAppCount(const std::string & app_type) const;
128 
134 
136  AppFactory(AppFactory const &) = delete;
137  Registry & operator=(AppFactory const &) = delete;
138 
139  AppFactory(AppFactory &&) = delete;
140  Registry & operator=(AppFactory &&) = delete;
142 
143 protected:
145 
146 private:
147  // Private constructor for singleton pattern
149 };
150 
151 template <typename T>
152 void
153 AppFactory::reg(const std::string & name)
154 {
155  if (isRegistered(name))
156  return;
157 
158  _name_to_build_info[name] = std::make_unique<AppFactoryBuildInfo<T>>();
159 }
bool isRegistered(const std::string &app_name) const
Returns a Boolean indicating whether an application type has been registered.
Definition: AppFactory.h:119
std::string name(const ElemQuality q)
MooseAppPtr createShared(const std::string &app_type, const std::string &name, InputParameters parameters, MPI_Comm COMM_WORLD_IN)
Build an application object (must be registered)
Definition: AppFactory.C:124
virtual MooseAppPtr build(const InputParameters &params)=0
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
InputParameters validParams()
static InputParameters validParams()
virtual ~AppFactory()
Definition: AppFactory.C:27
std::shared_ptr< MooseApp > MooseAppPtr
alias to wrap shared pointer type
Definition: AppFactory.h:27
const auto & registeredObjects() const
Returns a reference to the map from names to AppFactoryBuildInfo pointers.
Definition: AppFactory.h:114
Generic AppFactory class for building Application objects.
Definition: AppFactory.h:55
AppFactoryBuildInfoMap _name_to_build_info
Definition: AppFactory.h:144
virtual InputParameters buildParameters()=0
std::size_t createdAppCount(const std::string &app_type) const
Definition: AppFactory.C:160
std::size_t _app_creation_count
Definition: AppFactory.h:38
void reg(const std::string &name)
Register a new object.
Definition: AppFactory.h:153
static AppFactory & instance()
Get the instance of the AppFactory.
Definition: AppFactory.C:17
static MooseAppPtr createAppShared(const std::string &default_app_type, int argc, char **argv, std::unique_ptr< Parser > parser, MPI_Comm comm_word=MPI_COMM_WORLD)
Helper function for creating a MooseApp from command-line arguments and a Parser. ...
Definition: AppFactory.C:39
virtual InputParameters buildParameters() override
Definition: AppFactory.h:47
const AppFactoryBuildInfoMap & registeredObjectBuildInfos() const
Returns the map of object name to a function pointer for building said object&#39;s input parameters...
Definition: AppFactory.h:133
virtual MooseAppPtr build(const InputParameters &params) override
Definition: AppFactory.h:43
Registry & operator=(AppFactory const &)=delete
InputParameters getValidParams(const std::string &name)
Get valid parameters for the object.
Definition: AppFactory.C:30
std::map< std::string, std::unique_ptr< AppFactoryBuildInfoBase > > AppFactoryBuildInfoMap
Definition: AppFactory.h:50
The registry is used as a global singleton to collect information on all available MooseObject and Ac...
Definition: Registry.h:153
Polymorphic data structure with parameter and object build access.
Definition: AppFactory.h:32
virtual ~AppFactoryBuildInfoBase()=default