NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble_material_factory_base.h
Go to the documentation of this file.
1/*
2//@HEADER
3// ************************************************************************
4//
5// NimbleSM
6// Copyright 2018
7// National Technology & Engineering Solutions of Sandia, LLC (NTESS)
8//
9// Under the terms of Contract DE-NA0003525 with NTESS, the U.S. Government
10// retains certain rights in this software.
11//
12// Redistribution and use in source and binary forms, with or without
13// modification, are permitted provided that the following conditions are
14// met:
15//
16// 1. Redistributions of source code must retain the above copyright
17// notice, this list of conditions and the following disclaimer.
18//
19// 2. Redistributions in binary form must reproduce the above copyright
20// notice, this list of conditions and the following disclaimer in the
21// documentation and/or other materials provided with the distribution.
22//
23// 3. Neither the name of the Corporation nor the names of the
24// contributors may be used to endorse or promote products derived from
25// this software without specific prior written permission.
26//
27// THIS SOFTWARE IS PROVIDED BY NTESS "AS IS" AND ANY EXPRESS OR IMPLIED
28// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
29// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
30// NO EVENT SHALL NTESS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
32// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact David Littlewood (djlittl@sandia.gov)
39//
40// ************************************************************************
41//@HEADER
42*/
43
44#ifndef SRC_NIMBLE_MATERIAL_FACTORY_BASE_H_
45#define SRC_NIMBLE_MATERIAL_FACTORY_BASE_H_
46
47#include <algorithm>
48#include <map>
49#include <memory>
50#include <string>
51#include <vector>
52
53namespace nimble {
54class Material;
56} // namespace nimble
57
58namespace nimble {
59
61{
62 private:
63 static inline void
64 find_or_insert_string_in_vector(const std::string& str, std::vector<std::string>& vec)
65 {
66 if (std::find(vec.begin(), vec.end(), str) == vec.end()) { vec.push_back(str); }
67 }
68
69 public:
71 virtual ~MaterialFactoryBase() = default;
72
73 inline void
75 {
76 find_or_insert_string_in_vector(std::string(name), valid_double_parameter_names);
77 }
78
79 inline void
81 {
82 find_or_insert_string_in_vector(std::string(name), valid_string_parameter_names);
83 }
84
85 virtual std::shared_ptr<nimble::Material>
87 {
88 return material;
89 }
90
91 virtual void
92 parse_and_create(const std::string& mat_params, int num_points)
93 {
94 material_params = ParseMaterialParametersString(mat_params, num_points);
95 create();
96 }
97
98 virtual void
99 parse_and_create(const std::string& mat_params)
100 {
101 parse_and_create(mat_params, 0);
102 }
103
104 virtual std::map<std::string, double>
105 parse_material_params_string(const std::string& mat_params)
106 {
107 return ParseMaterialParamsStringToMap(mat_params);
108 }
109
110 protected:
111 virtual void
112 create() = 0;
113
114 protected:
115 std::shared_ptr<nimble::MaterialParameters>
116 ParseMaterialParametersString(const std::string& material_parameters, int num_material_points = 0) const;
117
118 std::map<std::string, double>
119 ParseMaterialParamsStringToMap(const std::string& material_parameters) const;
120
121 //
122 //--- Protected Variables
123 //
124
125 std::shared_ptr<nimble::Material> material = nullptr;
126 std::shared_ptr<const nimble::MaterialParameters> material_params;
127
128 private:
129 std::vector<std::string> valid_double_parameter_names;
130 std::vector<std::string> valid_string_parameter_names;
131};
132
133} // namespace nimble
134
135#endif /* SRC_NIMBLE_MATERIAL_FACTORY_BASE_H_ */
void add_valid_double_parameter_name(const char *name)
Definition nimble_material_factory_base.h:74
virtual void parse_and_create(const std::string &mat_params)
Definition nimble_material_factory_base.h:99
void add_valid_string_parameter_name(const char *name)
Definition nimble_material_factory_base.h:80
std::map< std::string, double > ParseMaterialParamsStringToMap(const std::string &material_parameters) const
Definition nimble_material_factory_base.cc:101
std::shared_ptr< nimble::MaterialParameters > ParseMaterialParametersString(const std::string &material_parameters, int num_material_points=0) const
Definition nimble_material_factory_base.cc:63
virtual ~MaterialFactoryBase()=default
std::shared_ptr< nimble::Material > material
Definition nimble_material_factory_base.h:125
virtual std::shared_ptr< nimble::Material > get_material() const
Definition nimble_material_factory_base.h:86
MaterialFactoryBase()
Definition nimble_material_factory_base.cc:56
virtual void parse_and_create(const std::string &mat_params, int num_points)
Definition nimble_material_factory_base.h:92
virtual std::map< std::string, double > parse_material_params_string(const std::string &mat_params)
Definition nimble_material_factory_base.h:105
std::shared_ptr< const nimble::MaterialParameters > material_params
Definition nimble_material_factory_base.h:126
Definition nimble_material.h:197
Definition nimble_material.h:62
Definition kokkos_contact_manager.h:49