NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::MaterialFactoryBase Class Referenceabstract

#include <nimble_material_factory_base.h>

Inheritance diagram for nimble::MaterialFactoryBase:
nimble::MaterialFactory nimble_kokkos::MaterialFactory

Public Member Functions

 MaterialFactoryBase ()
 
virtual ~MaterialFactoryBase ()=default
 
void add_valid_double_parameter_name (const char *name)
 
void add_valid_string_parameter_name (const char *name)
 
virtual std::shared_ptr< nimble::Materialget_material () const
 
virtual void parse_and_create (const std::string &mat_params, int num_points)
 
virtual void parse_and_create (const std::string &mat_params)
 
virtual std::map< std::string, double > parse_material_params_string (const std::string &mat_params)
 

Protected Member Functions

virtual void create ()=0
 
std::shared_ptr< nimble::MaterialParametersParseMaterialParametersString (const std::string &material_parameters, int num_material_points=0) const
 
std::map< std::string, double > ParseMaterialParamsStringToMap (const std::string &material_parameters) const
 

Protected Attributes

std::shared_ptr< nimble::Materialmaterial = nullptr
 
std::shared_ptr< const nimble::MaterialParametersmaterial_params
 

Constructor & Destructor Documentation

◆ MaterialFactoryBase()

nimble::MaterialFactoryBase::MaterialFactoryBase ( )
57{
60}
static void register_supported_material_parameters(MaterialFactoryBase &factory)
Definition nimble_material.cc:52
static void register_supported_material_parameters(MaterialFactoryBase &factory)
Definition nimble_material.cc:209

◆ ~MaterialFactoryBase()

virtual nimble::MaterialFactoryBase::~MaterialFactoryBase ( )
virtualdefault

Member Function Documentation

◆ add_valid_double_parameter_name()

void nimble::MaterialFactoryBase::add_valid_double_parameter_name ( const char * name)
inline
75 {
76 find_or_insert_string_in_vector(std::string(name), valid_double_parameter_names);
77 }

◆ add_valid_string_parameter_name()

void nimble::MaterialFactoryBase::add_valid_string_parameter_name ( const char * name)
inline
81 {
82 find_or_insert_string_in_vector(std::string(name), valid_string_parameter_names);
83 }

◆ create()

virtual void nimble::MaterialFactoryBase::create ( )
protectedpure virtual

◆ get_material()

virtual std::shared_ptr< nimble::Material > nimble::MaterialFactoryBase::get_material ( ) const
inlinevirtual
87 {
88 return material;
89 }
std::shared_ptr< nimble::Material > material
Definition nimble_material_factory_base.h:125

◆ parse_and_create() [1/2]

virtual void nimble::MaterialFactoryBase::parse_and_create ( const std::string & mat_params)
inlinevirtual
100 {
101 parse_and_create(mat_params, 0);
102 }
virtual void parse_and_create(const std::string &mat_params, int num_points)
Definition nimble_material_factory_base.h:92

◆ parse_and_create() [2/2]

virtual void nimble::MaterialFactoryBase::parse_and_create ( const std::string & mat_params,
int num_points )
inlinevirtual
93 {
94 material_params = ParseMaterialParametersString(mat_params, num_points);
95 create();
96 }
std::shared_ptr< nimble::MaterialParameters > ParseMaterialParametersString(const std::string &material_parameters, int num_material_points=0) const
Definition nimble_material_factory_base.cc:63
std::shared_ptr< const nimble::MaterialParameters > material_params
Definition nimble_material_factory_base.h:126

◆ parse_material_params_string()

virtual std::map< std::string, double > nimble::MaterialFactoryBase::parse_material_params_string ( const std::string & mat_params)
inlinevirtual
106 {
107 return ParseMaterialParamsStringToMap(mat_params);
108 }
std::map< std::string, double > ParseMaterialParamsStringToMap(const std::string &material_parameters) const
Definition nimble_material_factory_base.cc:101

◆ ParseMaterialParametersString()

std::shared_ptr< MaterialParameters > nimble::MaterialFactoryBase::ParseMaterialParametersString ( const std::string & material_parameters,
int num_material_points = 0 ) const
protected
65{
66 auto tokens = nimble::tokenize_string(material_parameters);
67
68 // The first string is the material name, followed by the material properties
69 // (key-value pairs)
70
71 NIMBLE_ASSERT(tokens.size() > 1);
72
73 const std::string material_name = tokens.front();
74 auto token = tokens.cbegin() + 1;
75 auto tokens_end = tokens.cend();
76
77 std::map<std::string, std::string> material_string_parameters;
78 std::map<std::string, double> material_double_parameters;
79 for (; token != tokens_end; token += 2) {
80 auto&& key = *token;
81 auto&& val = *(token + 1);
82 if (std::find(valid_double_parameter_names.begin(), valid_double_parameter_names.end(), key) !=
83 valid_double_parameter_names.end()) {
84 double double_val = nimble::string_to_double(val);
85 material_double_parameters.insert(std::make_pair(key, double_val));
86 } else if (
87 std::find(valid_string_parameter_names.begin(), valid_string_parameter_names.end(), key) !=
88 valid_string_parameter_names.end()) {
89 material_string_parameters.insert(std::make_pair(key, val));
90 } else {
91 std::string errMsg = "Invalid material parameter encountered: '" + key + "'";
92 throw std::invalid_argument(errMsg);
93 }
94 }
95
96 return std::make_shared<MaterialParameters>(
97 material_name, material_string_parameters, material_double_parameters, num_material_points);
98}
std::vector< std::string > tokenize_string(const std::string &s)
Definition nimble_parser_util.h:70
double string_to_double(const std::string &s)
Definition nimble_parser_util.h:90
#define NIMBLE_ASSERT(...)
Definition nimble_macros.h:85

◆ ParseMaterialParamsStringToMap()

std::map< std::string, double > nimble::MaterialFactoryBase::ParseMaterialParamsStringToMap ( const std::string & material_parameters) const
protected
102{
103 auto tokens = nimble::tokenize_string(material_parameters);
104
105 // The first string is the material name, followed by the material properties (key-value pairs)
106 NIMBLE_ASSERT(tokens.size() > 1);
107
108 const std::string material_name = tokens.front();
109 auto token = tokens.cbegin() + 1;
110 auto tokens_end = tokens.cend();
111
112 std::map<std::string, std::string> material_string_parameters;
113 std::map<std::string, double> material_double_parameters;
114 for (; token != tokens_end; token += 2) {
115 auto&& key = *token;
116 auto&& val = *(token + 1);
117 if (std::find(valid_double_parameter_names.begin(), valid_double_parameter_names.end(), key) !=
118 valid_double_parameter_names.end()) {
119 double double_val = nimble::string_to_double(val);
120 material_double_parameters.insert(std::make_pair(key, double_val));
121 } else if (
122 std::find(valid_string_parameter_names.begin(), valid_string_parameter_names.end(), key) !=
123 valid_string_parameter_names.end()) {
124 material_string_parameters.insert(std::make_pair(key, val));
125 } else {
126 std::string errMsg = "Invalid material parameter encountered: '" + key + "'";
127 throw std::invalid_argument(errMsg);
128 }
129 }
130
131 return material_double_parameters;
132}

Member Data Documentation

◆ material

std::shared_ptr<nimble::Material> nimble::MaterialFactoryBase::material = nullptr
protected

◆ material_params

std::shared_ptr<const nimble::MaterialParameters> nimble::MaterialFactoryBase::material_params
protected

The documentation for this class was generated from the following files: