b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2degrees_of_freedom.H
Go to the documentation of this file.
1//------------------------------------------------------------------------
2// b2degrees_of_freedom.H --
3//
4//
5// written by Mathias Doreille
6//
7// Copyright (c) 2004-2012 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 __B2DEGREES_OF_FREEDOM_H__
17#define __B2DEGREES_OF_FREEDOM_H__
18
19#include <utility>
20
21#include "utils/b2linear_algebra.H"
22#include "utils/b2object.H"
23
29namespace b2000 {
30
57class DegreesOfFreedom : public Object {
58public:
66 virtual int get_number_of_dof() const { return 0; }
67
92 virtual size_t set_global_dof_numbering(size_t index) { return index; }
93
111 virtual std::pair<size_t, size_t> get_global_dof_numbering() const {
112 return std::pair<size_t, size_t>(0, 0);
113 }
114
123 virtual size_t* get_global_dof_numbering(size_t* index) const {
124 std::pair<size_t, size_t> dof_numbering = get_global_dof_numbering();
125 while (dof_numbering.first != dof_numbering.second) { *index++ = dof_numbering.first++; }
126 return index;
127 }
128
141 template <typename T>
142 T* get_dof(const T* global_dof, T* local_dof) const {
143 std::pair<size_t, size_t> dof_numbering = get_global_dof_numbering();
144 return std::copy(
145 global_dof + dof_numbering.first, global_dof + dof_numbering.second, local_dof);
146 }
147
148 struct ListDofField {
149 std::map<std::string, size_t>& field_name;
150 b2linalg::Index& index;
151 void add(const std::string& name, std::pair<size_t, size_t> global_dof_numbering) {
152 std::fill(
153 index.begin() + global_dof_numbering.first,
154 index.begin() + global_dof_numbering.second,
155 field_name.insert(std::pair<std::string, size_t>(name, field_name.size()))
156 .first->second);
157 }
158 };
159
160 virtual void add_dof_field(ListDofField& ldfield) {
161 ldfield.add("Unknown", get_global_dof_numbering());
162 }
163};
164
165} // namespace b2000
166
167#endif
Definition b2degrees_of_freedom.H:57
virtual int get_number_of_dof() const
Definition b2degrees_of_freedom.H:66
virtual std::pair< size_t, size_t > get_global_dof_numbering() const
Definition b2degrees_of_freedom.H:111
virtual size_t set_global_dof_numbering(size_t index)
Definition b2degrees_of_freedom.H:92
Definition b2object.H:456
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32