NEML2 1.4.0
Loading...
Searching...
No Matches
Factory.cxx
1// Copyright 2023, UChicago Argonne, LLC
2// All Rights Reserved
3// Software Name: NEML2 -- the New Engineering material Model Library, version 2
4// By: Argonne National Laboratory
5// OPEN SOURCE LICENSE (MIT)
6//
7// Permission is hereby granted, free of charge, to any person obtaining a copy
8// of this software and associated documentation files (the "Software"), to deal
9// in the Software without restriction, including without limitation the rights
10// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11// copies of the Software, and to permit persons to whom the Software is
12// furnished to do so, subject to the following conditions:
13//
14// The above copyright notice and this permission notice shall be included in
15// all copies or substantial portions of the Software.
16//
17// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23// THE SOFTWARE.
24
25#include "neml2/base/Factory.h"
26
27namespace neml2
28{
29std::vector<std::string> Factory::pipeline = {"Tensors", "Solvers", "Data", "Models", "Drivers"};
30
31Factory &
37
38void
40{
41 get()._all_options = all_options;
42}
43
44void
45Factory::create_object(const std::string & section, const OptionSet & options)
46{
47 const std::string & name = options.name();
48 const std::string & type = options.type();
49
50 auto builder = Registry::builder(type);
51 auto object = (*builder)(options);
52 _objects[section][name].push_back(object);
53 object->setup();
54}
55
56// LCOV_EXCL_START
57void
58Factory::print(std::ostream & os)
59{
60 const auto & all_objects = get()._objects;
61 for (auto & [section, objects] : all_objects)
62 {
63 os << "- " << section << ":" << std::endl;
64 // for (auto & object : objects)
65 // os << " " << object.first << ": " <<
66 // utils::demangle(typeid(*(object.second.get())).name())
67 // << std::endl;
68 }
69}
70// LCOV_EXCL_STOP
71
72void
74{
75 get()._objects.clear();
76}
77} // namespace neml2
The wrapper (decorator) for cross-referencing unresolved values at parse time.
Definition CrossRef.h:52
Definition Factory.h:39
static void load(const OptionCollection &all_options)
Provide all objects' options to the factory. The factory is ready to manufacture objects after this c...
Definition Factory.cxx:39
void create_object(const std::string &section, const OptionSet &options)
Manufacture a single NEML2Object.
Definition Factory.cxx:45
static std::vector< std::string > pipeline
The sequence which we use to manufacture objects.
Definition Factory.h:42
static void clear()
Destruct all the objects.
Definition Factory.cxx:73
static Factory & get()
Get the global Factory singleton.
Definition Factory.cxx:32
static void print(std::ostream &os=std::cout)
List all the manufactured objects.
Definition Factory.cxx:58
A data structure that holds options of multiple objects.
Definition OptionCollection.h:38
A custom map-like data structure. The keys are strings, and the values can be nonhomogeneously typed.
Definition OptionSet.h:59
const std::string & name() const
A readonly reference to the option set's name.
Definition OptionSet.h:79
const std::string & type() const
A readonly reference to the option set's type.
Definition OptionSet.h:83
static BuildPtr builder(const std::string &name)
Return the build method pointer of a specific registered class.
Definition Registry.cxx:63
Definition CrossRef.cxx:32