DOpE
constraints.h
Go to the documentation of this file.
1 
24 #ifndef _CONSTRAINTS_H_
25 #define _CONSTRAINTS_H_
26 
27 namespace DOpE
28 {
34  {
35  public:
53  const std::vector<std::vector<unsigned int> >& local_control_constraints,
54  unsigned int global_constraints)
55  {
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++)
60  {
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;
66  }
67  _global_constraints = global_constraints;
68  _n_dofs = 0;
69  _n_local_control_dofs = 0;
70  }
75  {
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++)
80  {
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;
86  }
87  _global_constraints = c._global_constraints;
88  _n_dofs = 0;
89  _n_local_control_dofs = 0;
90  }
95  {
96  _local_control_constraints.clear();
97  _global_constraints = 0;
98  _local_control_constraints_per_block.clear();
99  _n_dofs = 0;
100  _n_local_control_dofs = 0;
101  }
102 
107  void
108  ReInit(std::vector<unsigned int>& control_dofs_per_block)
109  {
110  if (_local_control_constraints_per_block.size()
111  == control_dofs_per_block.size())
112  {
113  _n_dofs = 0;
114  for (unsigned int i = 0; i < _local_control_constraints.size(); i++)
115  {
116  assert(
117  control_dofs_per_block[i] % _local_control_constraints[i][0]
118  == 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];
124  }
125  _n_dofs += _global_constraints;
126  }
127  else
128  {
129  _local_control_constraints.clear();
130  _global_constraints = 0;
131  _local_control_constraints_per_block.clear();
132  _n_dofs = 0;
133  _n_local_control_dofs = 0;
134  }
135  }
136 
140  unsigned int
141  n_dofs(std::string name) const
142  {
143  if (name == "local")
144  {
145  return _n_local_control_dofs;
146  }
147  if (name == "global")
148  {
149  return _global_constraints;
150  }
151 
152  throw DOpEException("Unknown name " + name, "constraints::_n_dofs");
153  }
154 
158  const std::vector<unsigned int>&
159  GetDoFsPerBlock(std::string name) const
160  {
161  if (name == "local")
162  {
163  return _local_control_constraints_per_block;
164  }
165  throw DOpEException("Unknown name " + name, "constraints::_n_dofs");
166  }
167 
168  private:
169  std::vector<std::vector<unsigned int> > _local_control_constraints;
170  unsigned int _global_constraints;
171 
172  std::vector<unsigned int> _local_control_constraints_per_block;
173  unsigned int _n_dofs, _n_local_control_dofs;
174  };
175 
176 }
177 
178 #endif
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