SST  15.1.0
StructuralSimulationToolkit
sstmodel.h
1 // Copyright 2009-2025 NTESS. Under the terms
2 // of Contract DE-NA0003525 with NTESS, the U.S.
3 // Government retains certain rights in this software.
4 //
5 // Copyright (c) 2009-2025, NTESS
6 // All rights reserved.
7 //
8 // This file is part of the SST software package. For license
9 // information, see the LICENSE file in the top level directory of the
10 // distribution.
11 
12 #ifndef SST_CORE_MODEL_SSTMODEL_H
13 #define SST_CORE_MODEL_SSTMODEL_H
14 
15 #include "sst/core/eli/elementinfo.h"
16 #include "sst/core/params.h"
17 #include "sst/core/warnmacros.h"
18 
19 #include <string>
20 #include <vector>
21 
22 namespace SST {
23 
24 class Config;
25 class ConfigGraph;
26 
27 /** Base class for Model Generation
28  */
30 {
31 
32 public:
33  SST_ELI_DECLARE_BASE(SSTModelDescription)
34  // declare extern to limit compile times
35  SST_ELI_DECLARE_CTOR_EXTERN(const std::string&, int, Config*, double)
36  SST_ELI_DECLARE_INFO_EXTERN(
38  ELI::ProvidesSimpleInfo<1,std::vector<std::string>>)
39 
40  // Helper functions to pull out ELI data for an element
41  static bool isElementParallelCapable(const std::string& type);
42  static const std::vector<std::string>& getElementSupportedExtensions(const std::string& type);
43 
44  explicit SSTModelDescription(Config* cfg);
45  virtual ~SSTModelDescription() {};
46 
47  /** Create the ConfigGraph
48  *
49  * This function should be overridden by subclasses.
50  *
51  * This function is responsible for reading any configuration
52  * files and generating a ConfigGraph object.
53  */
54  virtual ConfigGraph* createConfigGraph() = 0;
55 
56 
57 protected:
58  /** Set a configuration string to update configuration values */
59  bool setOptionFromModel(const std::string& entryName, const std::string& value);
60 
61  /**
62  * Sets the model options field of the Config object. This has a
63  * very narrow use case, which is to set the model_options when
64  * the model is just a wrapper to another model type and they need
65  * to pass some extra options.
66  *
67  * @param options String that will be used for model_options. It
68  * will overwrite what is alread there
69  */
70  void setModelOptions(const std::string& options);
71 
72  /**
73  * Allows ModelDefinition to set global parameters.
74  *
75  * @param set Name of the global param set to add key/value pair to
76  *
77  * @param key Key of key/value pair to be added
78  *
79  * @param key Value of key/value pair to be added
80  *
81  * @param overwrite Overwrite existing value if set to true (which is default)
82  */
84  const std::string& set, const Params::key_type& key, const Params::key_type& value, bool overwrite = true);
85 
86 
87 private:
88  Config* config;
89 };
90 
91 } // namespace SST
92 
93 
94 // Use this macro to register a model description. Parallel_capable
95 // indicates whether this model is able to be use when loading in
96 // parallel. The final arguments are optional and are a list of file
97 // extensions handled by the model. These are only useful for the
98 // built-in models as external models will have to use the command
99 // line option to load them and then the extension will be ignored.
100 #define SST_ELI_REGISTER_MODEL_DESCRIPTION(cls, lib, name, version, desc, parallel_capable) \
101  SST_ELI_REGISTER_DERIVED(SST::SSTModelDescription, ::cls,lib,name,ELI_FORWARD_AS_ONE(version),desc) \
102  SST_ELI_DOCUMENT_SIMPLE_INFO(bool,0,parallel_capable)
103 
104 #define SST_ELI_DOCUMENT_MODEL_SUPPORTED_EXTENSIONS(...) \
105  SST_ELI_DOCUMENT_SIMPLE_INFO(std::vector<std::string>,1,__VA_ARGS__)
106 
107 #endif // SST_CORE_MODEL_SSTMODEL_H
virtual ConfigGraph * createConfigGraph()=0
Create the ConfigGraph.
Class to contain SST Simulation Configuration variables.
Definition: config.h:51
void insertGlobalParameter(const std::string &set, const Params::key_type &key, const Params::key_type &value, bool overwrite=true)
Allows ModelDefinition to set global parameters.
Definition: sstmodel.cc:41
A Configuration Graph A graph representing Components and Links.
Definition: configGraph.h:585
void setModelOptions(const std::string &options)
Sets the model options field of the Config object.
Definition: sstmodel.cc:35
Definition: action.cc:18
bool setOptionFromModel(const std::string &entryName, const std::string &value)
Set a configuration string to update configuration values.
Definition: sstmodel.cc:29
Definition: simpleInfo.h:87
Base class for Model Generation.
Definition: sstmodel.h:29
std::string key_type
Definition: params.h:242