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