IgANet
IgANets - Isogeometric Analysis Networks
Loading...
Searching...
No Matches
model.hpp
Go to the documentation of this file.
1
15#pragma once
16
17#include <iganet.h>
18#include <webapps_config.hpp>
19
20namespace iganet {
21
23enum class io {
24 scalar = 0,
25 scalarfield = 1,
26 vectorfield = 2,
29};
30
32struct IndexOutOfBoundsException : public std::exception {
33 const char *what() const throw() { return "Index is out of bounds"; }
34};
35
37struct InvalidModelException : public std::exception {
38 const char *what() const throw() { return "Invalid model name"; }
39};
40
42struct InvalidModelAttributeException : public std::exception {
43 const char *what() const throw() { return "Invalid model attribute"; }
44};
45
48public:
50 virtual void addPatch(const nlohmann::json &json) = 0;
51
52 // @brief Returns model capabilities
53 std::vector<std::string> getCapabilities() const {
54 return std::vector{std::string("addpatch")};
55 }
56};
57
60public:
62 virtual void removePatch(const std::string &patch,
63 const nlohmann::json &json) = 0;
64
65 // @brief Returns model capabilities
66 std::vector<std::string> getCapabilities() const {
67 return std::vector{std::string("removepatch")};
68 }
69};
70
73public:
75 virtual nlohmann::json computeError(const nlohmann::json &json) const = 0;
76
77 // @brief Returns model capabilities
78 std::vector<std::string> getCapabilities() const {
79 return std::vector{std::string("computeL1error"),
80 std::string("computeL2error"),
81 std::string("computeH1error")};
82 }
83};
84
87public:
89 virtual void elevate(const nlohmann::json &json) = 0;
90
91 // @brief Returns model capabilities
92 std::vector<std::string> getCapabilities() const {
93 return std::vector{std::string("elevate")};
94 }
95};
96
98class ModelEval {
99public:
101 virtual nlohmann::json eval(const std::string &patch,
102 const std::string &component,
103 const nlohmann::json &json) const = 0;
104
105 // @brief Returns model capabilities
106 std::vector<std::string> getCapabilities() const {
107 return std::vector{std::string("eval")};
108 }
109};
110
113public:
115 virtual void increase(const nlohmann::json &json) = 0;
116
117 // @brief Returns model capabilities
118 std::vector<std::string> getCapabilities() const {
119 return std::vector{std::string("increase")};
120 }
121};
122
125public:
127 virtual void refine(const nlohmann::json &json) = 0;
128
129 // @brief Returns model capabilities
130 std::vector<std::string> getCapabilities() const {
131 return std::vector{std::string("refine")};
132 }
133};
134
137public:
139 virtual void reparameterize(const std::string &patch, const nlohmann::json &json) = 0;
140
141 // @brief Returns model capabilities
142 std::vector<std::string> getCapabilities() const {
143 return std::vector{std::string("reparameterize")};
144 }
145};
146
149public:
151 virtual void load(const nlohmann::json &json) = 0;
152
154 virtual nlohmann::json save() const = 0;
155
156 // @brief Returns model capabilities
157 std::vector<std::string> getCapabilities() const {
158 return std::vector{std::string("load"), std::string("save")};
159 }
160};
161
163class ModelXML {
164public:
166 virtual void importXML(const std::string &patch,
167 const std::string &component,
168 const nlohmann::json &json,
169 int id) = 0;
170
172 virtual void importXML(const std::string &patch,
173 const std::string &component,
174 const pugi::xml_node &xml,
175 int id) = 0;
176
178 virtual nlohmann::json exportXML(const std::string &patch,
179 const std::string &component,
180 int id) = 0;
181
183 virtual pugi::xml_node &exportXML(const std::string &patch,
184 const std::string &component,
185 pugi::xml_node &root,
186 int id) = 0;
187
188 // @brief Returns model capabilities
189 std::vector<std::string> getCapabilities() const {
190 return std::vector{std::string("exportxml"), std::string("importxml")};
191 }
192};
193
195template <typename T> class Model {
196public:
198 Model(){};
199
201 virtual ~Model(){};
202
204 virtual std::string getName() const = 0;
205
207 virtual std::string getDescription() const = 0;
208
210 virtual nlohmann::json getOptions() const = 0;
211
213 virtual nlohmann::json getInputs() const = 0;
214
216 virtual nlohmann::json getOutputs() const = 0;
217
219 virtual nlohmann::json getParameters() const = 0;
220
222 virtual nlohmann::json getModel() const {
223
224 nlohmann::json json;
225 json["name"] = getName();
226 json["description"] = getDescription();
227
228 json["options"] = getOptions();
229 json["capabilities"] = getCapabilities();
230 json["inputs"] = getInputs();
231 json["outputs"] = getOutputs();
232 json["parameters"] = getParameters();
233
234 return json;
235 }
236
238 virtual nlohmann::json getCapabilities() const {
239
240 auto json = nlohmann::json::array();
241
242 json.push_back("create");
243 json.push_back("remove");
244
245 if (auto m = dynamic_cast<const ModelAddPatch *>(this))
246 for (auto const &capability : m->getCapabilities())
247 json.push_back(capability);
248
249 if (auto m = dynamic_cast<const ModelComputeError *>(this))
250 for (auto const &capability : m->getCapabilities())
251 json.push_back(capability);
252
253 if (auto m = dynamic_cast<const ModelElevate *>(this))
254 for (auto const &capability : m->getCapabilities())
255 json.push_back(capability);
256
257 if (auto m = dynamic_cast<const ModelEval *>(this))
258 for (auto const &capability : m->getCapabilities())
259 json.push_back(capability);
260
261 if (auto m = dynamic_cast<const ModelIncrease *>(this))
262 for (auto const &capability : m->getCapabilities())
263 json.push_back(capability);
264
265 if (auto m = dynamic_cast<const ModelRefine *>(this))
266 for (auto const &capability : m->getCapabilities())
267 json.push_back(capability);
268
269 if (auto m = dynamic_cast<const ModelRemovePatch *>(this))
270 for (auto const &capability : m->getCapabilities())
271 json.push_back(capability);
272
273 if (auto m = dynamic_cast<const ModelReparameterize *>(this))
274 for (auto const &capability : m->getCapabilities())
275 json.push_back(capability);
276
277 if (auto m = dynamic_cast<const ModelSerialize *>(this))
278 for (auto const &capability : m->getCapabilities())
279 json.push_back(capability);
280
281 if (auto m = dynamic_cast<const ModelXML *>(this))
282 for (auto const &capability : m->getCapabilities())
283 json.push_back(capability);
284
285 return json;
286 }
287
289 virtual nlohmann::json to_json(const std::string &patch,
290 const std::string &component,
291 const std::string &attribute) const {
292
293 return "{ INVALID REQUEST }";
294 }
295
297 virtual nlohmann::json updateAttribute(const std::string &patch,
298 const std::string &component,
299 const std::string &attribute,
300 const nlohmann::json &json) {
301
302 return "{ INVALID REQUEST }";
303 }
304};
305
306} // namespace iganet
Model add patch.
Definition model.hpp:47
std::vector< std::string > getCapabilities() const
Definition model.hpp:53
virtual void addPatch(const nlohmann::json &json)=0
Adds a patch to a model.
Model error computation.
Definition model.hpp:72
virtual nlohmann::json computeError(const nlohmann::json &json) const =0
Computes the model's error.
std::vector< std::string > getCapabilities() const
Definition model.hpp:78
Model degree elevation.
Definition model.hpp:86
virtual void elevate(const nlohmann::json &json)=0
Elevates the model's degrees, preserves smoothness.
std::vector< std::string > getCapabilities() const
Definition model.hpp:92
Model evaluator.
Definition model.hpp:98
virtual nlohmann::json eval(const std::string &patch, const std::string &component, const nlohmann::json &json) const =0
Evaluates model.
std::vector< std::string > getCapabilities() const
Definition model.hpp:106
Model interface.
Definition model.hpp:195
virtual nlohmann::json getOutputs() const =0
Returns the model's outputs.
virtual std::string getName() const =0
Returns the model's name.
virtual nlohmann::json getInputs() const =0
Returns the model's inputs.
Model()
Constructor.
Definition model.hpp:198
virtual std::string getDescription() const =0
Returns the model's description.
virtual ~Model()
Destructor.
Definition model.hpp:201
virtual nlohmann::json getModel() const
Returns the model's JSON serialization.
Definition model.hpp:222
virtual nlohmann::json getCapabilities() const
Returns the model's capabilities.
Definition model.hpp:238
virtual nlohmann::json getParameters() const =0
Return's the model's parameters.
virtual nlohmann::json getOptions() const =0
Returns the model's options.
virtual nlohmann::json to_json(const std::string &patch, const std::string &component, const std::string &attribute) const
Serializes the model to JSON.
Definition model.hpp:289
virtual nlohmann::json updateAttribute(const std::string &patch, const std::string &component, const std::string &attribute, const nlohmann::json &json)
Updates the attributes of the model.
Definition model.hpp:297
Model degree increase.
Definition model.hpp:112
virtual void increase(const nlohmann::json &json)=0
Increases the model's degrees, preserves multiplicity.
std::vector< std::string > getCapabilities() const
Definition model.hpp:118
Model refinement.
Definition model.hpp:124
std::vector< std::string > getCapabilities() const
Definition model.hpp:130
virtual void refine(const nlohmann::json &json)=0
Refines model.
Model remove patch.
Definition model.hpp:59
std::vector< std::string > getCapabilities() const
Definition model.hpp:66
virtual void removePatch(const std::string &patch, const nlohmann::json &json)=0
Adds a patch to a model.
Model reparameterization.
Definition model.hpp:136
virtual void reparameterize(const std::string &patch, const nlohmann::json &json)=0
Reparameterizes the model.
std::vector< std::string > getCapabilities() const
Definition model.hpp:142
Model serialization.
Definition model.hpp:148
std::vector< std::string > getCapabilities() const
Definition model.hpp:157
virtual void load(const nlohmann::json &json)=0
Loads model from LibTorch file.
virtual nlohmann::json save() const =0
Saves model to LibTorch file.
Model XML serialization.
Definition model.hpp:163
virtual void importXML(const std::string &patch, const std::string &component, const pugi::xml_node &xml, int id)=0
Imports model from XML (as XML object)
virtual nlohmann::json exportXML(const std::string &patch, const std::string &component, int id)=0
Exports model to XML (as JSON object)
virtual pugi::xml_node & exportXML(const std::string &patch, const std::string &component, pugi::xml_node &root, int id)=0
Exports model to XML (as XML object)
virtual void importXML(const std::string &patch, const std::string &component, const nlohmann::json &json, int id)=0
Imports model from XML (as JSON object)
std::vector< std::string > getCapabilities() const
Definition model.hpp:189
Isogeometric analysis network main header file.
Definition boundary.hpp:22
io
Enumerator for specifying the output type.
Definition model.hpp:23
@ vectorfield_boundary
@ scalarfield_boundary
constexpr bool is_SplineType_v
Alias to the value of is_SplineType.
Definition bspline.hpp:3243
IndexOutOfBounds exception.
Definition model.hpp:32
const char * what() const
Definition model.hpp:33
InvalidModelAttribute exception.
Definition model.hpp:42
const char * what() const
Definition model.hpp:43
InvalidModel exception.
Definition model.hpp:37
const char * what() const
Definition model.hpp:38