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