23#include "b2ppconfig.h"
27#include "utils/b2linear_algebra.H"
28#include "utils/b2module.H"
60 Node() : id(0), object_name(
"???") {}
72 void set_id(
size_t id_) {
id = id_; }
112 virtual void set_coor(
const b2000::csda<double>* coor) = 0;
118 template <
typename T>
125 virtual std::pair<int, const b2000::csda<double>*>
get_coor_csda()
const = 0;
139 virtual b2000::csda<double>*
get_coor(b2000::csda<double>* c)
const = 0;
158 static b2000::csda<double>*
get_coor_s(b2000::csda<double>* c,
const Node* node) {
168 virtual void set_weight(
const b2000::csda<double>& weight) = 0;
176 virtual b2000::csda<double> get_weight_csda()
const = 0;
209 virtual void get_common_dofs(
const Node& node, std::vector<std::pair<int, int> >& cdofs)
const {
224 virtual type_t* get_object_type() {
return &type; }
231 std::string object_name;
233 std::pair<int, const double*> get_coor_py() {
return get_coor_double(); }
235 void set_coor_py(std::pair<int, const double*> coor) {
242inline std::pair<int, const double*> Node::get_coor<double>()
const {
247inline std::pair<int, const b2000::csda<double>*> Node::get_coor<b2000::csda<double> >()
const {
248 return get_coor_csda();
251template <
typename DOF_TYPE>
252class TypedNode :
public Node {
254 virtual void get_d_gdof_d_ldof(
255 const Transformation3D<double>& ltog,
256 b2linalg::Matrix<double, b2linalg::Mcompressed_col>& m)
const = 0;
258 virtual void get_d_gdof_d_ldof(
259 const Transformation3D<b2000::csda<double> >& ltog,
260 b2linalg::Matrix<b2000::csda<double>, b2linalg::Mcompressed_col>& m)
const = 0;
262 static DOF_TYPE* get_dof_s(
const DOF_TYPE* global_dof, DOF_TYPE* local_dof,
const Node* node) {
263 return node->get_dof(global_dof, local_dof);
268 template <
typename NODE>
269 static double* get_coor(
double* coor, NODE** node) {
272 template <
typename NODE>
273 static size_t get_number_of_dof(NODE** node_) {
276 template <
typename NODE>
277 static size_t* get_global_dof_numbering(
size_t* index, NODE** node) {
280 template <
typename NODE,
typename DOF_TYPE>
281 static DOF_TYPE* get_dof(
const DOF_TYPE* global_dof, DOF_TYPE* local_dof, NODE** node) {
286template <
typename NODE_TYPE,
typename NODE_LIST = NodeListNull>
288 typedef typename NODE_TYPE::value_type value_type;
290 template <
typename NODE>
291 static double* get_coor(
double* coor, NODE** node) {
292 coor = NODE_TYPE::get_coor_s(coor, *node);
293 return NODE_LIST::get_coor(coor, ++node);
296 template <
typename NODE>
297 static b2000::csda<double>* get_coor(b2000::csda<double>* coor, NODE** node) {
298 coor = NODE_TYPE::get_coor_s(coor, *node);
299 return NODE_LIST::get_coor(coor, ++node);
302 template <
typename NODE>
303 static size_t get_number_of_dof(NODE** node) {
304 const size_t tmp = NODE_TYPE::get_number_of_dof_s(*node);
305 return tmp + NODE_LIST::get_number_of_dof(++node);
307 template <
typename NODE>
308 static size_t* get_global_dof_numbering(
size_t* index, NODE** node) {
309 index = NODE_TYPE::get_global_dof_numbering_s(index, *node);
310 return NODE_LIST::get_global_dof_numbering(index, ++node);
313 template <
typename NODE,
typename DOF_TYPE>
314 static DOF_TYPE* get_dof(
const DOF_TYPE* global_dof, DOF_TYPE* local_dof, NODE** node) {
315 local_dof = NODE_TYPE::get_dof_s(global_dof, local_dof, *node);
316 return NODE_LIST::get_dof(global_dof, local_dof, ++node);
#define THROW
Definition b2exception.H:198
Definition b2degrees_of_freedom.H:57
virtual std::pair< size_t, size_t > get_global_dof_numbering() const
Definition b2degrees_of_freedom.H:111
virtual bool is_subnode(const Node *node) const
Definition b2node.H:220
virtual int get_number_of_coor() const =0
std::pair< int, const T * > get_coor() const
size_t get_id() const
Definition b2node.H:67
virtual std::pair< int, const b2000::csda< double > * > get_coor_csda() const =0
virtual double get_weight() const =0
const std::string & get_object_name() const override
Definition b2node.H:79
virtual void init()
Definition b2node.H:91
void set_id(size_t id_)
Definition b2node.H:72
virtual double * get_coor(double *c) const =0
static double * get_coor_s(double *c, const Node *node)
Definition b2node.H:156
static size_t * get_global_dof_numbering_s(size_t *index, const Node *node)
Definition b2node.H:201
virtual void set_weight(const double &weight)=0
virtual std::pair< int, const double * > get_coor_double() const =0
virtual void set_coor(const double *coor)=0
void set_object_name(const std::string &name)
Definition b2node.H:86
Definition b2object.H:340
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
GenericException< UnimplementedError_name > UnimplementedError
Definition b2exception.H:314