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