b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2material_property.H
1//------------------------------------------------------------------------
2// b2material_property.H --
3//
4//
5// written by Mathias Doreille and Thomas Ludwig
6//
7// Copyright (c) 2004-2015 SMR Engineering & Development SA
8// 2502 Bienne, Switzerland
9//
10// All Rights Reserved. Proprietary source code. The contents of
11// this file may not be disclosed to third parties, copied or
12// duplicated in any form, in whole or in part, without the prior
13// written permission of SMR.
14//------------------------------------------------------------------------
15
16#ifndef _B2_MATERIAL_PROPERTY_H_
17#define _B2_MATERIAL_PROPERTY_H_
18
19#include <vector>
20
21#include "b2failure_criterion.H"
22#include "utils/b2allocator.H"
23#include "utils/b2object.H"
24#include "utils/b2rtable.H"
25
26namespace b2000 { namespace b2dbv3 {
27
31public:
32 MaterialProperty() : failure_criterion(nullptr) {}
33
35 void init(const RTable& rtable_, Allocator& allocator) {
36 rtable = rtable_;
37
38 // Instantiate the failure criterion (if defined).
39 failure_criterion = nullptr;
40 const std::string failure_type = rtable.get_string("FAILURE__TYPE", "");
41 if (failure_type != "") {
42 FailureCriterion::type_t* t = nullptr;
43 try {
44 t = FailureCriterion::type.get_subtype(failure_type, failure_criterion::module);
45 } catch (KeyError& e) {
46 KeyError() << "The failure criterion \"" << failure_type << "\" is invalid."
47 << THROW;
48 }
49 assert(t != nullptr);
50 failure_criterion = t->new_object(allocator);
51 failure_criterion->init(rtable);
52 }
53 }
54
57 virtual int number_of_layer() const { return 1; }
58
61 virtual const RTable& get_rtable(int layer_id = 0) const { return rtable; }
62
64 virtual const FailureCriterion* get_failure_criterion(int layer_id = 0) const {
65 return failure_criterion;
66 }
67
68 const std::string& get_object_name() const override { return object_name; }
69
70 void set_object_name(const std::string& name) { object_name = name; };
71
73 static type_t type;
74
75protected:
76 RTable rtable;
77 FailureCriterion* failure_criterion;
78
79private:
80 std::string object_name;
81};
82
86public:
87 struct Layer {
88 b2000::csda<double> thickness;
89 b2000::csda<double> angle;
90 int plygroup;
91 MaterialProperty* material;
92
93 Layer(const b2000::csda<double> thickness_, const b2000::csda<double> angle_,
94 const int plygroup_, MaterialProperty* material_)
95 : thickness(thickness_), angle(angle_), plygroup(plygroup_), material(material_) {}
96 };
97
98 typedef std::vector<Layer> Layers;
99
104 const b2000::csda<double> thickness_, const b2000::csda<double> angle_,
105 const int plygroup_, MaterialProperty* material_) {
106 layers.push_back(Layer(thickness_, angle_, plygroup_, material_));
107 }
108
110 const Layer& operator[](const int layer_id) const {
111 assert(layer_id >= 0 && size_t(layer_id) < layers.size());
112 return layers[layer_id];
113 }
114
116 Layer& operator[](const int layer_id) {
117 assert(layer_id >= 0 && size_t(layer_id) < layers.size());
118 return layers[layer_id];
119 }
120
121 int number_of_layer() const override { return layers.size(); }
122
127 const RTable& get_rtable(int layer_id = 0) const override {
128 assert(layer_id >= 0 && size_t(layer_id) < layers.size());
129 return layers[layer_id].material->get_rtable();
130 }
131
134 const FailureCriterion* get_failure_criterion(int layer_id = 0) const override {
135 assert(layer_id >= 0 && size_t(layer_id) < layers.size());
136 return layers[layer_id].material->get_failure_criterion();
137 }
138
140 static type_t type;
141
142private:
143 Layers layers;
144};
145
146}} // namespace b2000::b2dbv3
147
148#endif /* _B2_MATERIAL_PROPERTY_H_ */
#define THROW
Definition b2exception.H:198
Definition b2allocator.H:63
Definition b2exception.H:276
Definition b2object.H:415
Definition b2object.H:340
ObjectTypeIncomplete * get_subtype(const std::string &name_, Module &module_=b2000_module)
Definition b2object.H:369
OBJECT * new_object()
Definition b2object.H:348
Definition b2object.H:456
Definition b2rtable.H:427
std::string get_string(const std::string &key) const
Definition b2rtable.H:633
Definition b2failure_criterion.H:42
Definition b2material_property.H:85
Layer & operator[](const int layer_id)
Non-const access to the layer attributes.
Definition b2material_property.H:116
const FailureCriterion * get_failure_criterion(int layer_id=0) const override
Definition b2material_property.H:134
const Layer & operator[](const int layer_id) const
Const-access to the layer attributes.
Definition b2material_property.H:110
const RTable & get_rtable(int layer_id=0) const override
Definition b2material_property.H:127
void append_layer(const b2000::csda< double > thickness_, const b2000::csda< double > angle_, const int plygroup_, MaterialProperty *material_)
Definition b2material_property.H:103
int number_of_layer() const override
Definition b2material_property.H:121
Definition b2material_property.H:30
virtual const FailureCriterion * get_failure_criterion(int layer_id=0) const
Definition b2material_property.H:64
const std::string & get_object_name() const override
Definition b2material_property.H:68
virtual const RTable & get_rtable(int layer_id=0) const
Definition b2material_property.H:61
virtual int number_of_layer() const
Definition b2material_property.H:57
void init(const RTable &rtable_, Allocator &allocator)
Called by the Domain object.
Definition b2material_property.H:35
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
GenericException< KeyError_name > KeyError
Definition b2exception.H:320