24 #ifndef CONSTRAINTS_H_
25 #define CONSTRAINTS_H_
53 const std::vector<std::vector<unsigned int> >& local_control_constraints,
54 unsigned int global_constraints)
56 local_control_constraints_.resize(local_control_constraints.size());
57 local_control_constraints_per_block_.resize(
58 local_control_constraints.size());
59 for (
unsigned int i = 0; i < local_control_constraints.size(); i++)
61 local_control_constraints_[i].resize(2);
62 assert(local_control_constraints[i].size() == 2);
63 local_control_constraints_[i][0] = local_control_constraints[i][0];
64 local_control_constraints_[i][1] = local_control_constraints[i][1];
65 local_control_constraints_per_block_[i] = 0;
67 global_constraints_ = global_constraints;
69 n_local_control_dofs_ = 0;
76 local_control_constraints_.resize(c.local_control_constraints_.size());
77 local_control_constraints_per_block_.resize(
78 c.local_control_constraints_per_block_.size());
79 for (
unsigned int i = 0; i < c.local_control_constraints_.size(); i++)
81 local_control_constraints_[i].resize(2);
82 assert(c.local_control_constraints_[i].size() == 2);
83 local_control_constraints_[i][0] = c.local_control_constraints_[i][0];
84 local_control_constraints_[i][1] = c.local_control_constraints_[i][1];
85 local_control_constraints_per_block_[i] = 0;
87 global_constraints_ = c.global_constraints_;
89 n_local_control_dofs_ = 0;
96 local_control_constraints_.clear();
97 global_constraints_ = 0;
98 local_control_constraints_per_block_.clear();
100 n_local_control_dofs_ = 0;
108 ReInit(std::vector<unsigned int>& control_dofs_per_block)
110 if (local_control_constraints_per_block_.size()
111 == control_dofs_per_block.size())
114 for (
unsigned int i = 0; i < local_control_constraints_.size(); i++)
117 control_dofs_per_block[i] % local_control_constraints_[i][0]
119 local_control_constraints_per_block_[i] = control_dofs_per_block[i]
120 / local_control_constraints_[i][0]
121 * local_control_constraints_[i][1];
122 n_dofs_ += local_control_constraints_per_block_[i];
123 n_local_control_dofs_ += local_control_constraints_per_block_[i];
125 n_dofs_ += global_constraints_;
129 local_control_constraints_.clear();
130 global_constraints_ = 0;
131 local_control_constraints_per_block_.clear();
133 n_local_control_dofs_ = 0;
145 return n_local_control_dofs_;
147 if (name ==
"global")
149 return global_constraints_;
152 throw DOpEException(
"Unknown name " + name,
"constraints::n_dofs_");
158 const std::vector<unsigned int>&
163 return local_control_constraints_per_block_;
165 throw DOpEException(
"Unknown name " + name,
"constraints::n_dofs_");
169 std::vector<std::vector<unsigned int> > local_control_constraints_;
170 unsigned int global_constraints_;
172 std::vector<unsigned int> local_control_constraints_per_block_;
173 unsigned int n_dofs_, n_local_control_dofs_;
const std::vector< unsigned int > & GetDoFsPerBlock(std::string name) const
Definition: constraints.h:159
Constraints(const std::vector< std::vector< unsigned int > > &local_control_constraints, unsigned int global_constraints)
Definition: constraints.h:52
Definition: constraints.h:33
Constraints()
Definition: constraints.h:94
void ReInit(std::vector< unsigned int > &control_dofs_per_block)
Definition: constraints.h:108
Constraints(const Constraints &c)
Definition: constraints.h:74
Definition: dopeexception.h:35
unsigned int n_dofs(std::string name) const
Definition: constraints.h:141